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编辑  收藏  举报

导航