0
点赞
收藏
分享

微信扫一扫

29,verilog中带整数的算术表达式分析


微信公众号:FPGA动力联盟

​​

在verilog-2001中,除非明确声明为有符号数,否则 reg、wire等数据类型应被视为无符号数,而integer整数变量若无明确声明,应被视为有符号数,且在verilog中有符号数应使用二进制补码表示。

但是我们应当切记,有符号和无符号数之间的转换应保持相同的位值,只是编译器的解释发生了变化。

下表列出了每种数据类型的默认数据类型:


数据类型



解释



unsigned  net



Unsigned



signed  net



Signed,二进制补码



unsigned  reg



Unsigned



signed  reg



Signed,二进制补码



integer



Signed,二进制补码



time



Unsigned



real,realtime



Signed,  floating point


下面示例展示了将“-12除以3”的各种方法——在表达式中使用 integer 和 reg 数据类型。这些用法都是在实际工程中,我们往往一不小心就会踩的坑……

integer intA;
reg [15:0] regA;
reg signed [15:0] regS;
intA = -4’d12;
regA = intA / 3; // expression result is-4, intA is an integer data type, regA is 65532
regA = -4’d12; // regA is 65524
intA = regA / 3; // expression result is21841,regA is a reg data type
intA = -4’d12 / 3;// expression result is1431655761.-4’d12 is effectively a 32-bit reg data type
regA = -12 / 3; // expression result is -4,-12 is effectively an integer data type. regA is 65532
regS = -12 / 3; // expression result is -4.regS is a signed reg
regS = -4’sd12 / 3;// expression result is1. -4’sd12 is actually 4. The rules for integer division yield 4/3==1

参考文献:

1,IEEEverilog-2001 标准


举报

相关推荐

0 条评论