数字进制格式
Verilog数字进制格式包括二进制,八进制,十进制,十六进制。常用为二进制,十进制,十六进制
- 二进制表示为: 4’b101 代表4位二进制数1010
- 十进制表示为:4’d10 代表4位十进制数10(二进制数1010)
- 十六进制表示为4’ha 代表4位十六进制数a(二进制数1010)
4
代表位宽, b o d h
分别代表2、8、10、16进制(位宽默认为32)
同时可用_
增加程序可读性,如16’b1010_1001_1010_1001=16’ha9a9
标识符
用于定义模块名、端口名、信号名等
标识符第一个字符必须为字母或者下划线,同时标识符只能含有字母、数字、$、_。区分大小写。
数据类型
数据类型包括三大类:寄存器、线网、参数数据类型
寄存器、线网 数据类型在数字电路中真正起作用
参数 数据类型为给编译器识别的数据类型
寄存器类型
寄存器表示一个抽象的数据存储单元,可以通过赋值语句改变寄存器存储的值,关键字reg,默认初始值x,例如:
//reg define
reg[31:0] delay_cnt;//定义一个名称为delay_cnt的32位寄存器
reg key_reg;//定义一个名称为key_cnt的1位寄存器
reg类型不能在定义时赋值,只能在always 和initial 语句中被赋值
如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器
如果该过程语句描述的是组合逻辑,即不带时钟信号,则该寄存器变量对应为硬件连线
线网类型
-
表示结构实体(例如门)之间的物理连线
-
线网类型不能存储值,它的值是由驱动它的元件决定的
驱动元件:门、连续赋值语句、assign赋值语句等
没有接驱动元件到线网类型变量上,变量则为高阻状态,即z
线网类型包括wire和tri类型,常用wire
// write define
wire[1:0] key_flag;//两位位宽
wire key1_flag;//一位位宽
参数类型
本质就是一个常量,在Verilog HDL中用parameter定义常量
例如:
parameter H_SIGN = 11'd21;
类似于C语言中的#define,但每个参数定义的右边必须是一个常数表达式。
含义:
- 采用标识符代表一个常量可以提高程序可读性和可维护性
- 用于表示状态机状态、表示位宽、延迟大小
- 在模块调用中通过参数的传递改变调用模块汇总已定义的参数
运算符
Verilog语言按照功能可分为7种类型
-
算术运算符
同C语言相同,包括+-*/% -
关系运算符
同C语言相同,包括<><=>===!= -
逻辑运算符
同C语言相同,包括!&&|| -
条件运算符
同C语言相同,三目运算符?:
例:a?b:c
如果a为真,执行b
否则执行c -
位运算符
~ 按位取反
&按位与
|按位或
^按位异或 -
移位运算符
>>右移
<<左移
与C语言不同点:左移时位宽增加,右移位宽不变
例:
4’b1001 << 2 = 6’b100100
4’b1001 >> 1 = 4’b0100 -
拼接运算符
符号 | 使用方法 | 说明 |
---|---|---|
{} | {a,b} | 将a与b拼接起来作为一个新的信号 |
例:c = { a , b [ 3 : 0 ] } ;
把a和 b的低4位 拼接起来
运算优先级
同C语言类似,单目运算符优先级高,多目运算符优先级依次降低