我有一个负数(MSB = 1)。如何通过移位VHDL将数字除以2来说。
EG。转-6应该给我2。
如何概括划分/转换 例如: - -6 - > -3 6 - > 3
答案 0 :(得分:5)
使用ieee.numeric_std.signed
对两个补码中的2个数字(正数和正数)进行除法,可以使用shift with:
res <= std_logic_vector(shift_right(signed(arg), 1));
带有带符号参数的shift_right
将进行算术移位,因此可以将2除以单个位移位。
正如MatthiasB在评论中指出的那样,也可以使用除法,其中包括:
res <= std_logic_vector(signed(arg) / 2);
操作上的差异是:
shift_right
):向下舍入,因此-7 / 2 = -4 /
):向零舍入,因此-7 / 2 = -3 实施方面的差异:
shift_right
):尺寸和速度为零成本,因为仅使用布线/
):由于舍入需要逻辑运算,因此在尺寸和速度上会有一些成本