系统Verilog减法删除重要位

时间:2018-06-18 20:08:21

标签: verilog system-verilog xilinx hdl vivado

我有两个32位数字的简单减法,我知道它永远不会产生大于25位的数字。在详细说明我的设计后,看到该工具(Xilinx Vivado 2018.1)已将输入寄存器调整为25位,这将导致计算出错误的值。

logic [31:0] ain;
logic [31:0] bin;
logic [24:0] cout;

assign cout = ain - bin;

这导致了一个精心设计的rtl_sub像这样...... bad_subtraction

在引用LRM和其他一些关于这个主题的问题后,我觉得这应该通过减去两个更大的数字然后截断结果来解决,但是我可能误解了编码规则?

我另外试过这个也没用的

assign cout = 32'(ain - bin);

有人可以推荐一种最合适的编码方式吗?

1 个答案:

答案 0 :(得分:3)

2&#39的补语减法

C = A -B

相同
C = A + ~B + 1

位[31:25]不会对位[24:0]的结果产生影响。也许你对25位的答案拟合的假设是不正确的。