System Verilog 减法删除重要位

System Verilog subtraction removing important bits

我有两个 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 的精心设计......

在参考了 LRM 和关于该主题的其他一些问题后,我觉得这应该通过减去两个较大的数字然后截断结果来工作,但也许我误解了编码规则?

我也试过这个也没有用

assign cout = 32'(ain - bin);

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

2的补码减法

C = A -B

相同
C = A + ~B + 1

位 [31:25] 不可能影响位 [24:0] 的结果。也许您关于 25 位的答案拟合的假设是不正确的。