组合逻辑的一般模板
时序电路的一般模板
模块总体结构
模块说明
功能描述
1、assign语句
1)算数型
2)逻辑型
3)关系运算符
4) 等价运算符
5)按位运算符
6)缩减运算符
7) 移位运算符
8)拼接赋值运算符
9) 条件运算符
如果表达式1值为X,则结果为X。
2、always
激活条件由敏感信号条件表决定,当敏感条件满足时,过程块被激活。
敏感条件有两种,一种是边沿敏感,一种是电平敏感。
说明:
- 过程块中的赋值目标必须是reg型的。
- 由于always语句可以描述边沿变化,在设计时序电路中得到广泛应用。
- always语句中还可以使用if case for循环等语句,其功能更加强大。
assign语句和always语句的主要区别:
- assign连续赋值语句总是处于激活状态,只要操作数有变化马上进行计算和赋值;
- always过程赋值语句只有当激活该过程时,才会进行计算和赋值,如果该过程不被激活,即使操作数发生变化也不会计算和赋值。
- verilog规定assign 中的赋值目标必须是wire型的,而always语句中的赋值目标必须是reg型的。
- always语句块中除了可以使用表达式赋值以外,还可以使用if , case等行为描述语句,还能够描述边沿变化,因此其功能比assign语句更强大( assign语句不能使用if等语句,也不能描述边沿变化)
always语句块中如果有多条赋值语句必须将其用begin end包括起来, assign语句中没有begin end
begin end 之间的赋值语句有阻塞赋值和非阻塞赋值之分·
- 阻塞赋值的实质:右边表达式的计算和对左边的赋值是一个统一操作,之间不能再插入其他任何动作,即马上赋值。
赋值目标1=表达式1;
赋值目标2=表达式2 ;
- 非阻塞赋值的实质:按顺序计算右边表达式的值,但是并不马上赋值,而是要等到过程结束时再按顺序赋值
赋值目标1<=表达式1;
赋值目标2<=表达式2 ;
应用:
- 设计组合电路时常用阻塞赋值;
- 设计时序电路时常用非阻塞赋值;
- 但不是绝对的
- 不建议在一个always块中混合使用阻塞赋值和非阻塞赋值
综合举例: 4位二进制加1计数器
3、底层模块和门原语调用
端口映射有两种方法:
- 端口名关联法(命名法)
- 位置关联法(顺序法)
命名法格式:
(.底层端口名1(外接信号名1),.底层端口名2(外接信号名2),...)
因为有名字对应,不必按底层模块的端口信号列表顺序
DFF dff1(.CLK(clk),.D(d1),.Q(q1)); 底层
顺序法格式:
(外接信号名1,外接信号名2,..….)
DFF dff2(q1,d,q);
必须严格按照底层模块的端口信号列表顺序书写
门原语调用
Verilog语言提供已经设计好的门,称为门原语(primitive,共12个),这些门可直接调用,不用再对其进行功能描述。
门原语调用格式: 门原语名 实例名 (端口连接)
其中实例名可省略(和模块调用不同),端口连接只能采用顺序法,输出在前,输入在后。
端口连接中第一个是输出,其余是输入,输入个数不限。
常见门
与 | and |
或 | or |
非 | not |
与非 | nand |
同非 | nor |
异或 | xor |
同或 | xnor |
缓冲器 | buf |
端口列表中前面是输出,最后一个是输入,输出个数不限。
模块的特点:
- 模块是以关键词module开始,以关键词endmodule结束的一段程序。
- 模块的实际意义是代表硬件电路的逻辑实体(即实现一定逻辑功能的电路)。
- 每个模块都实现特定的功能,范围可以从一个简单的门到整个大的系统。
-
模块的描逑方式有行为建模和结构建模(或两者结合)之分。
Verilog中的数据类型
Verilog中的数据类型分为两大类
- 线网类( net类)
- 变量类( variable类)
因连续赋值语句和过程赋值语句的激活特点不同,故赋值目标特点也不同,前者不需要保存,后者需要保存,因此规定两种数据类型;
- net型用于连续赋值的赋值目标或门原语的输出,且仿真时不需要分配内存空间;
- variable型用于过程赋值的赋值目标,且仿真时需要分配内存空间
wire(线性) | tri(三态) | tri0(下拉电阻) | supply0(地) |
---|---|---|---|
wand(线与) | triand(三态与) | tri1(上拉电阻) | supply1(电源) |
wor(线或) | wrior(三态或) | trireg(电容性线网) |
reg(寄存器型) | |
integer(整型) | time(时间型) |
real(实型) | realtime(实时间型) |
将一个信号定义成net型还是varible型,由以下两方面决定:
- 使用何种赋值语句对该信号进行赋值,如果是连续赋值或门原语赋值或例化语句赋值,则定义成net型;如果是过程赋值则定义成variable型
- 对于端口信号来说,input信号和inout信号必须定义成net 型的; output信号可以是net型的也可以是variable型的,决定于如何对其赋值(同1)
- 对于端口信号来说,input信号和 inout信号必须定义成net型的;
- output信号可以是net型的也可以是variable型的,决定于如何对其赋值
- c决定于如何对其赋值;
- d 如果是端口信号,则必须是net型的;如果来自其它驱动源则决定于如何对其赋值。
- e 、f 、g 、h必须是net型的例化语句赋值,则定义成net型;
Verilog中数字的表示格式
注意有符号数是按照补码表示的,即第一位是符号位。
比较: 8'b10111011 →(187)10 有区别
逻辑值
1 | 逻辑1,高电平,数字1 |
0 | 逻辑0,低电平,数字0 |
x |
不确定 |
z | 高阻态 |
Verilog中的顺序语句
1、if语句
if语句---举例
在用if语句设计“组合电路”时要注意,如果条件不完整,会综合出寄存器
使条件完整的两种方法:
条件表达式格式 (计算表达式)
计算表达式:
条件表达式的结果只有0和1两种,如果计算表达式的值为0,则条件表达式的值为0,否则为1 。
2、case语句
格式
功能
- 如果表达式的值=取值1,则执行语句1;
- 如果表达式的值=取值2,则执行语句2 ;
- 如果表达式的值=取值3,则执行语句3 ;
- 如果表达式的值和上述取值都不相等,则执行默认语句。default语句可以不带。
Verilog语言的描述风格
三种描述方式
- 结构化描述(也称门级描述) (全部用门原语和底层模块调用)
- 数据流级描述(全部用assign语句)
- 行为级描述(全部用always语句配合if 、 case语句等)
vivado中提到另外一种描述方式:RTL级描述方式
- RTL级描述(数据流级+行为级+结构化描述三种混合的,可综合)
举例:用门级描述、数据流描述、行为描述分别设计数据选择器
例 多路选择器的Verilog门级描述
例 多路选择器的Verilog数据流级描述
例 多路选择器的Verilog行为级描述
其它规定
(1)关键字
-
关键字即Verilog语言中预定义的有特殊含义的英文词语
(2)标识符
- 标识符即用户自定义的信号名﹑模块名等等;
- 注意关键字不能作标识符;
- Verilog区别大小写(关键字都是小写)。
(3)文件取名和存盘
- Verilog文件扩展名为.v
- verilog不要求文件名和模块名一致,但最好是一致
(4)注释
- // 单行注释
- /* */ 多行注释
测试模块
如果设计阶段占用了20%的研发时间,那么需要花费80%的研发时间用于调试,才能使系统正常工作
编写测试文件(testbench)
- 产生激励波形
- 将输入加到测试模块并收集其输出响应
- 将响应输出与期望值进行比较
Verilog HDL提供了一种灵活有效的产生输入信号波形的方式---写测试程序( test bench), 就是用一段程序产生激励信号,用语言描述信号的变化。
Test bench应当是被测模块的高层模块,它没有IO端口,而且内部有被测模块的实例。
用Verilog HDL代码生成输入激励码test bench
注意事项:
-
将时钟信号﹑置/复位信号与其它信号分开并分别加以处理
-
注意各种(各组)输入信号的时序关系
-
注意所采用的延时表示方式(绝对延时/相对延时)
-
注意各种输入激励与时钟信号的关系
输入激励码产生方式:
- 用单独的always语句或assign赋值语句产生时钟信号
- 用简单的initial语句块产生置/复位信号的激励
- 在initial语句块中用循环语句块产生按一定规律变化的信号的激励码
- 用Task过程产生特殊信号的输入激励;
1、用单独的always语句或assign赋值语句产生信号
2、用简单的initial语句块产生置/复位信号的激励
非中文形式的符号
大小写要区分 clk文章来源:https://www.toymoban.com/news/detail-792507.html
3、在initial语句块中用循环结构描述具有一定变化规则的输入激励信号
test bench程序结构
test bench仿真文件样例
文章来源地址https://www.toymoban.com/news/detail-792507.html
到了这里,关于Verilog语言快速入门(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!