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 位的答案拟合的假设是不正确的。
我有两个 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 位的答案拟合的假设是不正确的。