我有两个32位数字的简单减法,我知道它永远不会产生大于25位的数字。在详细说明我的设计后,看到该工具(Xilinx Vivado 2018.1)已将输入寄存器调整为25位,这将导致计算出错误的值。
logic [31:0] ain;
logic [31:0] bin;
logic [24:0] cout;
assign cout = ain - bin;
在引用LRM和其他一些关于这个主题的问题后,我觉得这应该通过减去两个更大的数字然后截断结果来解决,但是我可能误解了编码规则?
我另外试过这个也没用的
assign cout = 32'(ain - bin);
有人可以推荐一种最合适的编码方式吗?
答案 0 :(得分:3)
2&#39的补语减法
C = A -B
与
相同C = A + ~B + 1
位[31:25]不会对位[24:0]的结果产生影响。也许你对25位的答案拟合的假设是不正确的。