Verilog
关于运算的那些事
新手上路,到处是坑,且行且小心。
Verilog HDL
语言里面,进行加减乘除或者比较、
右移等运算,无符号运算和有符号运算有着
很大的区别。根据
Verilog-2001
标准,
只有当表达式右边的
所有变量
都具有
signed
类型属
性的时候,扩展符号位
才
被执行,否则,所有的变量高位都只扩展
0
.
举例如下:
例
1
reg signed [5:0] A;
reg signed [3:0] B;
reg [3:0] C;
A = B + C;
如果
B
是一个负数,那么
A
肯定不能得到正确的结果。
例
2
reg signed [32:0] A;
reg signed [15:0] B;
reg signed [31:0] C;
A = B * {C[31],C[6:0]}
作者本意是:
如果
C
的值介于
-127~127
之间,
那么直接取
C
的低
7
位,
并且用
C</