Verilog基本语法 数值表示
引言
本文参考IEEE.1364-2005,对verilog中的语法进行深入学习。
数值表示易混淆点
1)未声明位宽的常数
659 正确 //十进制是默认的,因此不需要'd的开头
'o7460 正确
4af 错误 //十六进制必须要有'h的开头
2)声明位宽的常数
3'b01x //表明一个3位数据,LSB为不确定值
16'hz //表明一个16位的高阻数值
3)有符号的常数
8'd-6 错误 //没有这种表示方法
-8'd6 正确 //以补码表示的6,等价于-(8'd6)
4'shf 正确 //s代表signed 故实际表示4位有符号数1111 以补码表示,原数据为1001,即十进制中的-1
-4'shf 正确 //等价于-(-1)即1
16'sd? 正确 //等价于16'sbz 16位高阻值
自动左补齐
reg [11:0] a;
initial begin
a='hx; //产生12位x
a='h3x; //产生12位03x(16进制表示)
a='hz3; //产生12位zz3
end
总结:有效数据最低高位是什么,左边就补齐什么。当分配给reg数据类型时,带位宽的负常数和有符号常数被符号扩展,无论reg本身是否有符号。