在数字电路中,x代表不定值,z代表高阻值。一个x可以用来定义十六/八/二进制数的四/三/一位二进制 数的状态。z的表示方式同x类似。z还有一种表达方式是可以写作?。在使用case表达式时建议使用这种写法,以提高程序的可读性,如下例所示: 4'b10x0 //位宽为4的二进制数从低位数起第二位为不定值 4'b101z //位宽为4的二进制数从低位数起第一位为高阻值 12'dz //位宽为12的十进制数其值为高阻值(第一种表达方式) 12'd? //位宽为12的十进制数其值为高阻值(第二种表达方式) 8'h4x //位宽为8的十六进制数其低四位值为不定值 (注意宽度的填充和截断原则)
当常量不声明位数时,默认值是32位,每个字母用8位的ASCII值表示,例如: 10=32'd10=32'b1010 //十进制和二进制 1=32'd1=32'b1 //十进制和二进制 -1=-32'd1=32'hFFFFFFFF //十进制和十六进制 'BX=32'BX=32'BXXXXXXX…X //默认声明为32位 "AB"=16'B01000001_01000010 //每个字母用8位表示
在Verilog HDL中用parameter来定义常量,即用parameter来定义一个标识符代表一个常量,称为符号常量,即标识符形式的常量。采用标识符代表一个常量可提高程序的可读性和可维护性。parameter型数据是一种常数型的数据,其说明格式如下: Parameter 参数名1=表达式,参数名2=表达式, …, 参数名n=表达式; parameter是参数型数据的确认符,确认符后跟着一个用逗号分隔开的赋值语句表。在每一个赋值语句的右边必须是一个常数表达式。也就是说,该表达式只能包含数字或先前已定义过的参数,例如: parameter msb=7; //定义参数msb为常量7 parameter e=25, f=29; //定义两个常数参数 参数型常数经常用于定义延迟时间和变量宽度。在模块或实例引用时可通过参数传递改变在被引用模块或实例中已定义的参数。
Wire reg与存储器 wire [7:0]b; //定义了一个八位的wire型变量 reg [4:1]regc, regd; //定义了两个四位的名为regc和regd的reg型变量 reg [7:0]mema[255:0]; //定义一个名为mema的256×8的存储器
在Verilog HDL语言中,信号有两种赋值方式:非阻塞(Non_Blocking)赋值方式和阻塞(Blocking)赋值 方式。 (1)非阻塞赋值方式。 典型语句:b <= a; ① 块结束后才完成赋值操作。 ②b的值并不是立刻就改变的。 ③ 这是一种比较常用的赋值方法,特别在编写可综合模块时。 (2)阻塞赋值方式。 典型语句:b = a; ① 赋值语句执行完后,块才结束。 ②b的值在赋值语句执行完后立刻就改变。 ③ 可能会产生意想不到的结果。 非阻塞赋值方式和阻塞赋值方式的区别常给设计人员带来问题。问题主要是给“always”块内的reg 型信号的赋值方式不易把握。
|