文章目录
- 主体内容
- 1.1 逻辑值
- 1.2 数字进制格式
- 1.3 数据类型
- 1.3.1 寄存器类型
- 1.3.2 线网类型
- 1.3.3 参数类型
- 1.3.4 存储器类型
- 参考资料
主体内容
1.1 逻辑值
1,逻辑0,表示低电平
2,逻辑1,表示高电平
3,逻辑X,表示未知,有可能是高电平,也有可能是低电平(不区分x和X)
4,逻辑Z,表示高阻态,外部没有激励信号,是一个悬空状态(不区分z和Z)
1.2 数字进制格式
Verilog数字进制格式包括二进制(b)、八进制(o)、十进制(d)和十六进制(h)。(注意对应的字母!)一般常用的为二进制、十进制和十六进制。
eg:
4’b0101:表示4位二进制数字0101
4’d2:表示4位十进制数字2(二进制0010)
4’ha:表示4位十六进制数字a(二进制1010)
16’b1001_1010_1010_1001 = 16’h9AA9
数值的整数及其表示注意以下事项!!!
1,在较长的数之间可以用下划线来分开,目的是提高可读性,下划线本身没有意义,但下划线符号不能用作首字符;
2,当数字没有说明位宽时,默认为32位!
3,若没有定义一个整数的位宽,其宽度为相应值中定义的位数;
eg:
'o642 //9位八进制数
'hBD //8位十六进制数
4,若定义的位宽比实际数的位宽大,则在左边用0补齐。但如果数最左边一位为x或z,就相应地用x或z在左边补齐,如果定义的位宽比实际数的位宽小,那么最左边的位被截断。
5,“?”是高阻态 z 的另一种表示符号,在数字的表示中,字符 “?” 和 Z 或 z 是等价的,可以互相替代。
6,整数可以带正负号,并且正负号应写在最左边。负数表示为二进制的补码形式。
eg:
4'd-4 //错误表达
-4 //等价于4'b1100
7,如果位宽和进制都缺省,则代表十进制数;
8,位宽不能是表达式形式。
eg:
(4+4)'b11 //错误表达
1.3 数据类型
在 Verilog 语言中,主要有三大类数据类型:寄存器数据类型、线网数据类型和参数数据类型。其中寄存器与线网类型都可以映射到实际物理电路上的,是真正在数字电路中起作用的。
1.3.1 寄存器类型
寄存器数据类型的关键字是 reg,reg 类型数据的默认初始值为不定值x。在过程块内被赋值的每一个信号都必须定义为reg类型,reg类型的数据只能在 always 语句和 initial 语句中被赋值。且在定义reg型变量时,未指定位宽则默认为1。
与下面说的线网类型不同,reg 型数据保持最后一次的赋值,而 wire 型数据需要有持续的驱动。
reg [31:0] delay_cnt;
reg key_reg;
如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器;
如果该过程语句描述的是组合逻辑,即always语句不带有时钟信号,则该寄存器变量对应为硬件连线;
1.3.2 线网类型
线网数据类型表示结构实体(例如门)之间的物理连线。线网类型的变量不能储存值,它的值是由驱动它的元件所决定的。驱动线网类型变量的元件有门、连续赋值语句、assign等。如果没有驱动元件连接到线网类型的变量上,则该变量就是高阻的,即其值为z。且在定义线网型变量时,未指定位宽则默认为1。
线网数据类型包括 wire 型和 tri 型,其中最常用的就是 wire 类型。
wire key_flag;
1.3.3 参数类型
参数其实就是一个常量,在 Verilog HDL 中用 parameter 定义常量。我们可以一次定义多个参数,参数与参数之间需要用逗号隔开。每个参数定义的右边必须是一个常数表达式。类似于C语言中的#define
。
参数型数据常用于定义状态机的状态、数据位宽和延迟大小等。采用标识符来代表一个常量可以提高程序的可读性和可维护性。在模块调用时,可通过参数传递来改变被调用模块中已定义的参数。
parameter H_SYNC = 11'd41;
1.3.4 存储器类型
存储器(memory)本质上还是寄存器型变量阵列,只是 Verilog 中没有多维数组,所以就用 reg 型变量建立寄存器组(数组)来实现存储器的功能,也就是拓展的reg型数据地址范围。存储器类型变量可以描述 RAM 型、ROM 型存储器以及 reg 文件。数组中的每一个单元通过一个数组索引进行寻址。
存储器型变量的一般声明格式如下:
reg <range1><name_of_register><range2>
其中 range1 和 range2 都是可选项,缺省时都为1。range1 表示存储器寄存器的位宽;range2表示寄存器的个数。
eg:
reg [7:0] mem1 [255:0]; //定义了一个有256个8位寄存器的存储器mem1,地址范围是0~255
reg [15:0] mem2 [127:0], reg1, reg2; //定义了一个具有128个16位寄存器的存储器mem2和//2个16位的寄存器reg1和reg2
参考资料
1,正点原子领航者ZYNQ7020视频
2,《verilog HDL数字集成电路设计原理与应用(第二版)》 蔡觉平等
3,文心一言搜索结果