verilog 中a-b>0 与a>b的区别
verilog code one
-------------------------------
reg[3:0] a;
reg[3:0] b;
reg[3:0] result;
······
·····
if(a-b>0)
begin
······
end
---------------------------------
verilog code two
-------------------------------
reg[3:0] a;
reg[3:0] b;
reg[3:0] result;
······
·····
if(a>b)
begin
······
end
---------------------------------
代码一可能会导致下限溢出(under flow),因为reg是无符号类型,当a-b<0 时候,由于unsigned 结果做取反加一得操作,又使得满足a-b>0的条件。
比如
a=4'b0111;
b=4'1111;
out= a-b = 4'b1000>0 出现underflow的结果。
而代码二则不会出现以上情况。
所以在比较式子中,如果两端出现减法运算应当把减法转化成不含减法的式子。比如 a+b>c-d 转换成 a+b+d>c
另外在verilog2001可以使用reg signed 有符号类型,将数据类型定义成 reg signed (最高位是符号位)在有加减法运算中可以避免以上情况。
posted on 2009-09-19 10:19 Homography Matrix 阅读(1700) 评论(0) 编辑 收藏 举报