0.前言
强烈推荐一个学习Verilog的刷题网站,HDLBits,从基础语法到一个比较完整的模块设计,提供了完整的练习过程,把上面的题刷完之后基本就可以完成大部分的Verilog程序设计了。不过网站是全英文的,需要一些英语基础。
1.逻辑值
Verilog中存在四种逻辑值
- 逻辑0:表示低电平,对应GND
- 逻辑1:表示高电平,对应VCC
- 逻辑X:表示未知,有可能是高电平,也可能是低电平
- 逻辑Z:表示高阻态,外部没有激励信号,是一个悬空状态。'?'是Z的另一种表达形式。
2.进制格式
Verilog 数字进制格式包括二进制(b)、 八进制(o)、 十进制(d)和十六进制(h),一般常用的为二进制、 十进制和十六进制。
书写格式:[换算成二进制后位宽总长度]['][数值进制符号][与数值进制符号对应的数值]
例如:
- 二进制: 4’b0101 表示 4 位二进制数字 0101
- 十进制: 4’d2 表示 4 位十进制数字 2(对应二进制 0010)
- 十六进制: 4’ha 表示 4 位十六进制数字 a(对应二进制 1010)
注意进制前的数值表示该数换成二进制后对应的位数
位宽与进制默认32位10进制。
用下划线可增加程序可读性不会影响计算机识别数值,如16'b1001_1010_1010_1001 = 16'h5AA5。
换算成二进制后的位宽总长度是非必须的,Verilog会为常量自动匹配合适的位宽。例如, 4’ha 写做 ‘ha 是合法的。
当总位宽大于实际位数,则自动在高位补0或X或Z,总位宽小于实际位数,则自动截断高位超出的位数。
最高有效位MSB(most significant bit)在左边。
3.数据类型
Verilog中数据主要分寄存器和连线两种类型,区别在于驱动方法(赋值方式)、保持方式、硬件实现。
3.1寄存器类型(reg)
寄存器是具有状态保持作用的硬件电路元件,通常会是一个触发器
驱动方式:
过程赋值只能出现在过程语句(initial和always)之后,及reg类型的数据只能在always语句和initial语句中被赋值
如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器;
如果该过程语句描述的是组合逻辑,即always语句不带时钟信号,则该寄存器变量对应为硬件连线;
未赋值前,认为处于不定状态X
保持方式:
在下一次赋值前保持不变
硬件实现:
触发器和锁存器等(reg类)
寄存器数据类型有很多种
- reg,行为描述,过程赋值
- integer,32位带符号整形变量
- real,64位带符号实性
- time,63位无符号时间变量
integer,real,time均为过程中数学描述,不对应具体硬件电路,即无法综合
最常用的是reg型,刚开始接触Verilog时,只需要记住reg即可
reg key; //声明一个1位的寄存器
reg [31:0] cnt; //声明一个32位的寄存器
reg [7:0] cnt1,cnt2; //可以一次声明多个相同位宽的寄存器,用‘,’隔开
//可以通过以下形式对寄存器进行位选或片选
cnt[0] //cnt寄存器的最低位
cnt[7:0] //cnt寄存器的低8位
3.2连线类型(wire)
连线数据类型表示结构实体(例如门)之间的物理连线
驱动方式:
连到门或模块的输出,或连续赋值语句assign赋值,信号连线不能出现在过程语句(initial和always)中
&n

文章介绍了学习Verilog的一个在线资源HDLBits,强调刷题对于掌握该语言的重要性。内容涵盖Verilog的四种逻辑值,数字进制格式,数据类型(寄存器和连线)的详细解释,以及参数类型、数组的声明和使用。还特别提到变量赋值注意事项和各种运算符的用法,包括算术、关系、逻辑、位运算及条件、拼接运算符。
最低0.47元/天 解锁文章
2362





