Verilog的常数的声明(parameter和define) 1、语法
数字声明 Verilog中有两种数字生命:指明位数的数字和不指明位数的数字 指明位数的数字表示形式:<size>’<base format><number> Size用来指明数字位宽度,只能用十进制整数表示 Base format包括十进制(’d或’D),二进制(’b或’B),八进制(‘o或’O),十六进制(‘h或’H) 例如 要注意的是这不是表示12位16进制数,表示12位二进制显示是16进制数
例子 parameter LinePeriod =12'd1040; parameter H_SyncPulse=8'd120; parameter H_BackPorch=10'd1040; parameter H_ActivePix=706;
综合(Synthesize)后 LinePeriod = "010000010000" H_SyncPulse = "01111000" H_BackPorch = "0000010000" H_ActivePix = "00000000000000000000001011000010" 可以看出 如果限定多余32位的话,综合时会报错。 如
parameter H_ActivePix=33'b706;
会报错,报错信息如下:
ERROR:HDLCompilers:34 - "VGA_800X600.v" line 19 Illegal digit(s) in binary constant '706' 还有注意的一个问题是LinePeriod和H_BackPorch都是1040(十进制),1040二进制为11位(2的十次方为1024),但“H_BackPorch”没有因为位数不够报错,但是把高位截掉了,变成“
不限定位数,默认为32位,这很浪费寄存器资源。 限定位数小于常数的位数时,赋值就不正确了。 所以赋值的位数要有富裕但不至于太浪费寄存器资源。 参考资料: 1) Verilog的parameter和define 2) Verilog HDL语法基础(1) |
|