目录
Verilog 的逻辑值:
Verilog 的标识符(类似C中的变量名):
1) 定义:
2) 规范建议:
Verilog 的数字进制格式:
Verilog 的数据类型:
1) 寄存器类型:
2) 线网类型:
3) 参数类型:
Verilog 的运算符:
1) 算术运算符:
2) 关系运算符:
3) 逻辑运算符:
4) 条件运算符:
5) 位运算符:
6) 移位运算符:
7) 拼接运算符:
8) 运算符的优先级:
Verilog 的逻辑值:
逻辑 0:表示低电平,也就是对应我们电路的 GND;
逻辑 1:表示高电平,也就是对应我们电路的 VCC;
逻辑 X:表示未知,有可能是高电平,也有可能是低电平;
逻辑 Z:表示高阻态,外部没有激励信号是一个悬空状态。
Verilog 的标识符(类似C中的变量名):
1) 定义:
标识符(identifier)用于定义模块名、端口名和信号名等。Verilog 的标识符可以是任意一组字母、数字、 $和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符是区分大小写的。 以下是标识符的几个例子:
Count
COUNT //与 Count 不同。
R56_68
FIVE$
不建议大小写混合使用,普通内部信号建议全部小写,参数定义建议大写,另外信号命名最好体现信 号的含义。
2) 规范建议:
1、用有意义的有效的名字如 sum、cpu_addr 等。
2、用下划线区分词语组合,如 cpu_addr。
3、采用一些前缀或后缀,比如:时钟采用 clk 前缀:clk_50m,clk_cpu;低电平采用_n 后缀:enable_n;
4、统一缩写,如全局复位信号 rst。
5、同一信号在不同层次保持一致性,如同一时钟信号必须在各模块保持一致。
6、自定义的标识符不能与保留字(关键词)同名。
7、参数统一采用大写,如定义参数使用 SIZE。
Verilog 的数字进制格式:
Verilog 数字进制格式包括二进制、八进制、十进制和十六进制,一般常用的为二进制、十进制和十六 进制。
二进制表示如下:4‘b0101 表示 4 位二进制数字 0101;
十进制表示如下:4‘d2 表示 4 位十进制数字 2(二进制 0010);
十六进制表示如下:4‘ha 表示 4 位十六进制数字 a(二进制 1010),十六进制的计数方式为 0,1,2…9, a,b,c,d,e,f,最大计数为 f(f:十进制表示为 15)
当代码中没有指定数字的位宽与进制时,默认为 32 位的十进制,比如100,实际上表示的值为 32‘d100。
Verilog 的数据类型:
在 Verilog 语法中,主要有三大类数据类型,即寄存器类型、线网类型和参数类型。从名称中,我们可以看出,真正在数字电路中起作用的数据类型应该是寄存器类型和线网类型。
1) 寄存器类型:
寄存器类型表示一个抽象的数据存储单元,它只能在 always 语句和 initial 语句中被赋值,并且它的值从一个赋值到另一个赋值过程中被保存下来。如果该过程语句描述的是时序逻辑,即 always 语句带有时钟信号,则该寄存器变量对应为寄存器;如果该过程语句描述的是组合逻辑,即 always 语句不带有时钟信号, 则该寄存器变量对应为硬件连线;寄存器类型的缺省值是 x(未知状态)。
寄存器数据类型有很多种,如 reg、integer、real 等,其中最常用的就是 reg 类型,它的使用方法如下:
2) 线网类型:
线网表示 Verilog 结构化元件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门的输出。 如果没有驱动元件连接到线网,线网的缺省值为 z(高阻态)。线网类型同寄存器类型一样也是有很多种, 如 tri 和 wire 等,其中最常用的就是 wire 类型,它的使用方法如下:
3) 参数类型:
我们再来看下参数类型,参数其实就是一个常量,常被用于定义状态机的状态、数据位宽和延迟大小等,由于它可以在编译时修改参数的值,因此它又常被用于一些参数可调的模块中,使用户在实例化模块时,可以根据需要配置参数。在定义参数时,我们可以一次定义多个参数,参数与参数之间需要用逗号隔开。这里我们需要注意的是参数的定义是局部的,只在当前模块中有效。它的使用方法如下:
Verilog 的运算符:
1) 算术运算符:
2) 关系运算符:
关系运算符主要是用来做一些条件判断用的,在进行关系运算符时,如果声明的关系是假的,则返回 值是 0,如果声明的关系是真的,则返回值是 1;
3) 逻辑运算符:
逻辑运算符是连接多个关系表达式用的,可实现更加复杂的判断,一般不单独使用,都需要配合具体 语句来实现完整的意思,如下表所示:
4) 条件运算符:
条件操作符一般来构建从两个输入中选择一个作为输出的条件选择结构,功能等同于 always 中的 if-else 语句,如下表所示:
5) 位运算符:
位运算符是一类最基本的运算符,可以认为它们直接对应数字逻辑中的与、或、非门等逻辑门。常用 的位运算符如下表所示。
6) 移位运算符:
移位运算符包括左移位运算符和右移位运算符,这两种移位运算符都用 0 来填补移出的空位。如下表所示。
7) 拼接运算符:
用这个运算符可以把两个或多 个信号的某些位拼接起来进行运算操作
8) 运算符的优先级:
建议直接上括号