Verilog减法小探究

本文详细分析了在Verilog中进行直接减法操作时可能遇到的问题。当对无符号数进行减法时,若不考虑补位,可能会导致错误的结果,特别是当被减数小于减数时。通过扩展位宽可以得到正确的补码结果,但如果涉及有符号数,仍需要考虑符号位。因此,理解补码和无符号数的差异对于Verilog中的算术运算至关重要。
摘要由CSDN通过智能技术生成

Verilog 的减法之前一直认为用补码会方便一些,如果直接相减的结果是啥样呢?

写了一个简单的减法

module subtract(a,b,d);
input [3:0]a,b;//a为被减数,b为减数
output [3:0]d;//输出d

assign
d=a-b;

endmodule

直接减法的仿真结果如下

可见当a大于等于b时可以直接得到正确的值,如果a比b小会直接得到负值并以补码形式写出来。

但是由于a和b都是无符号数,如果得出来的是补码形式会很难理解,而且由于d只有4位

0001-1101会等于0100 其实应该是10100 是-12的补码 所以直接减会有错误

如果此时把a b都看成有符号数,

那么计算结果就是对的,所以有符号数是可以直接加减的

如果此时扩展b的位数,代码变为:

module subtract(a,b,d);
input [3:0]a,b;//a为被减数,b为减数
output [4:0]d;//输出d

assign
d=a-b;

endmodule

此时若a,b为无符号数

得出的d是正确结果的补码

但是若a,b为有符号数,则计算结果就是错误的

所以直接减法需要考虑补位的问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值