【如何快速学会verilog开发】

2023-11-16

什么是verilog编程?

首先verilog是一门编程语言。verilog的主要应用场景是数字前端开发,也即是通常所说的RTL开发。
verilog作为一种编程语言,是数字前段开发的必备工具。同时区别于面对对象语言(如C++等),函数式语言(python等),脚本语言(bash等),她是一种“描述式语言”,也可以称之为“面向实体”的语言。
那么描述的目标是什么呢?

作为一种描述语言

既然是描述语言,她主要描述什么?当然是电路。描述电路的逻辑行为,以及电路之间的连接关系。如果熟悉《数字电路》,我们知道电路的基本组成是逻辑单元(与、或、非等逻辑运算)和存储单元(D触发器等)。至于为什么这么划分,就要从图灵机和冯诺伊曼架构说起了,这就大大超出了本文篇幅,留待以后再介绍。
因此verilog语言的本质是对这些电路结构的描述。

verilog里面的基本结构

所有的物理电路在verilog中抽象成2种类型的实体:module和always块。
电路无论小到基本的元器件,还是由众多元器件组成的复杂功能电路,都是一个实体,即:module。
在verilog中首先声明一个module,语法如下:

module abc(
	input clk,
	input rstb,
	input a,
	input b,
	output c
);

//add always here

endmodule

模块的定义主要是声明模块的名称,模块的端口(输入和输出)。名称在整个设计中具有唯一性。

另外一个重要的“实体”就是always块。always块是内嵌在module里面的电路结构,主要的作用是描述电路的行为,即功能。

verilog里面的变量

几乎所有的编程语言的语法书都是从数据结构入手的。即读者先要知道语法的数据结构才能组织程序。这里在本文的中间部分才引入变量系统,因为verilog里面的数据结构非常简单,读者只需要知道两种类型即可。这两种分别是:wire和reg。

wire就是电路中的连线。reg顾名思义就是电路中的“寄存器”,但其实reg并不完全等同于存储器。
严格意义上说,wire用于连续性赋值,reg用于触发性赋值。本文也不打算展开了阐述,读者只需要记住,assign语句中用wire型,always语句中用reg型就行了。

电路需要如何描述?

电路的结构抽象地用两种方式描述:连接关系与逻辑行为。
所谓的连接关系描述是为了表示电路中的子模块之间的互联行为的。
举例来说,如果A的输出连到B上,B的输出又连的C上,诸如此类,可以这样表达:

module top(
	input in2a,
	output c2out
);

wire a2b;
wire b2c;

A u_a(
	.in1(in2a),
	.out1(a2b)
);

B u_b(
	.in1(a2b),
	.out1(b2c)
);

C u_c(
	.in1(b2c),
	.out1(c2out)
);
endmodule

上面的例子只用到了module以及通过wire将他们互联起来。如果电路只有这些基本的语法,那么这样的代码可以称之为门级网表。为了能够表达比较复杂的电路,需要借助高级的语言。用人类易于理解的方式来表达电路,这就需要引入always块。

always块的好处是可以在里面内嵌诸如:分支语句(if else结构,case语句)、逻辑操作(&、|、~等)、算数运算(+、-等)。这些语法特点都是其他高级语言所共有的,比较容易理解。

其中有别于其他语言的重要特点是always分时序逻辑和组合逻辑。

下面举例说明:

always@(posedge clk or negedge rstn)
begin
	if(!rstn)
		cnt <= 8'd0;
	else
		cnt <= cnt+8'd1;
end

这是一个简单的计数器的例子。每个时钟周期计数器值加1。
再举一个例子:

always@(*)
begin
	if(add_en)
		out_c = in_a+in_b;
	else
		out_c = in_a-in_b;
end

这个例子是一个组合逻辑电路,即没有锁存结构。
从verilog来看,主要区别就是always后面的敏感列表不同。敏感列表里面有时钟沿的信息就是时序逻辑,否则就是组合逻辑。
细心的读者还会发现里面的赋值语句表达式不太一样,一个是用的“<=”,一个是"="。这个需要注意。verilog里这两种赋值的场景非常多,但对于表达实际电路来说,只需要记住在时序电路里用<=赋值,在组合电路里用=赋值就行了。

小结

到此为止,我们已经窥探了verilog语法的基本组成。对于RTL开发来讲,无论多么复杂的设计,无外乎上述一些语法片段的组合。熟练掌握上述语法,基本上是掌握了verilog入门的钥匙。verilog本身还有更多的语法,但大部分是不可综合(即和实际电路无关),这些留在后续再继续补充完善。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【如何快速学会verilog开发】 的相关文章

随机推荐

  • python爬虫简单js逆向

    python爬虫简单js逆向案例 内容简介 一 找到包含所需数据的ajax数据包 二 通过浏览器工具进行关键字定位 三 分析相关js文件 找出具体实现方式 1 getApiKey 函数 2 encryptApiKey 函数 3 encryp
  • jsp中标签id和name的区别

    name原来是为了标识之用 但是现在根据规范 都建议用id来标识元素 但是name在以下用途是不能替代的 1 表单 form 的控件名 提交的数据都用控件的name而不是id来控制 因为有许多name会同时对应多个控件 比如checkbox
  • 二十、线程安全

    文章目录 一 线程安全 一 概念 二 线程安全之临界资源 三 线程安全之可重入函数 1 基本概念 2 实例 二 线程和fork 一 fork后子进程线程数量 二 fork后子进程锁的处理 一 线程安全 一 概念 线程安全 就是在多线程运行的
  • 【Locomotor运动模块】抓取:按朝向抓取(Orientation Handler)案例

    文章目录 案例 原理 案例 左右手柄抓宝剑时 宝剑的朝向不同 L35 一个手柄对应一个抓取点 原理 1 左右手柄分别抓取的是宝剑上的不同抓取点 GenericOrientation Handle通用朝向把手 它是我们设置 按朝向抓取 Ori
  • 11月1日任务

    11月1日任务 10 32 10 33 rsync通过服务同步 10 34 linux系统日志 10 35 screen工具 扩展 1 Linux日志文件总管logrotate http linux cn article 4126 1 ht
  • L2TP详解(二)

    今天继续给大家介绍HCIE安全 本文给大家介绍的是L2TP相关内容 包括L2TP的特点和应用场景 强烈推荐阅读本文前置文章 L2TP详解 一 一 L2TP隧道和会话建立过程 在LAC和LNS之间存在着两种类型的链接 隧道链接和会话链接 隧道
  • 很详细的系列Shell基础— Shell简介

    一 Shell的由来 我们比较熟悉Windows系统的图形化界面 对于图形界面来说 用户点击某个图标就能启动某个程序 在此之前我们一直在使用Linux系统的命令行模式学习 对于命令行来说 用户输入一个命令就能启动某个程序 这两者的基本过程都
  • 图解CRM(客户关系管理)全流程

    在不同场合下 CRM 客户关系管理 可能是一个管理学术语 也可能是一个软件系统 我们通常所指的CRM 指用计算机自动化分析销售 市场营销 客户服务以及应用等流程的软件系统 通俗地说 CRM就是利用软件 硬件和网络技术 为企业建立一个客户信息
  • 测试开发工程师面试总结(一)——Java基础篇

    本文面向对象 测试开发工程师 服务端自动化方向 随手百度一下都能找到 岗位面试总结 但是有关测开岗位的面试总结却寥寥无几 总体原因可能是这两个 1 测试行业整体水平参差不齐 导致不同公司面试的问题不能抽象出来写概览 2 很多做测开的人可能内
  • IDEA maven项目依赖无法解析问题

    这篇文章主要介绍了IDEA maven项目依赖无法解析问题 具有很好的参考价值 希望对大家有所帮助 如有错误或未考虑完全的地方 望不吝赐教 目录 IDEA maven项目依赖无法解析 问题排除 配置文件setting xml内容是否正确 p
  • export ‘default‘ (imported as ‘components‘) was not found in

    vue自己写了组件文件包components爆了这个错 原因是components文件夹下的index js文件 import tabbar from tabbar export default tabbar 没有default关键字 加上
  • nodejs 控制台美化 console-color-mr

    console color mr插件可以让node控制台输出带有颜色 是一个不错的插件 通过颜色可以更直观的分析程序bug 一 使用 npm install D console color mr 方法一 import console col
  • 直流电机驱动

    1 直流电机是一种将电能转化为机械能的装置 一般的直流电机有两个电极 当电极正接时 电机正转 当电机反接时 电机反转 2 PWM 脉冲宽度调制 PWM调速的原理就是 我让他转5us 停1us表示转速快 相反 我让他转1us 停5us表示慢
  • nokia专业显示器测试软件,Nokia Monitor Test(

    Nokia Monitor Test 显示器测试软件 是一款计算机显示屏的专业测试工具 使用Nokia Monitor Test 显示器测试软件 可以检测显示器的亮度 对比度 色纯 聚焦 水波纹 抖动 可读性等重要显示效果和技术参数 而这些
  • 以太坊的安装、私有链创世区块搭建以及智能合约的部署

    相关阅读 区块链项目 区块链网上安全商铺 合约代码 前端 后台 文章目录 1 以太坊的安装 私有链创世区块搭建 私有链节点的加入 1 1 以太坊的安装 1 2 私有链创世区块搭建 1 3 私有链节点的加入 2 对getBlock中所得区块的
  • Spring中的事物源码解析

    目录 前言 xml方式 注解的方式 代理对象 事物执行 前言 在Spring中 使用事物的方式基本上都是通过声明 Transactional来完成的 xml方式 在xml的IOC容器中
  • Linux GTK

    更新国内源 sudo cp etc apt sources list etc apt sources list backup sudo gedit etc apt sources list 清华大学开源软件镜像站 https mirror
  • 【参考文献不爆红】Word的多个参考文献连续交叉引用([1] [3]改为[1-3])

    文章目录 1 参考文献格式 2 引入参考文献 3 Word的多个参考文献连续交叉引用 1 3 改为 1 3 3 1引入两个参考文献 3 2 引入三个参考文献 3 3 知识科普 1 参考文献格式 参考教程 全选参考文献 gt 编号的小三角 g
  • uniapp 使用svg

    如果一定要使用svg 可以通过换成base64再使用 src和背景的可以
  • 【如何快速学会verilog开发】

    什么是verilog编程 首先verilog是一门编程语言 verilog的主要应用场景是数字前端开发 也即是通常所说的RTL开发 verilog作为一种编程语言 是数字前段开发的必备工具 同时区别于面对对象语言 如C 等 函数式语言 py