通过移位划分VHDL中的负数

时间:2014-06-10 14:58:07

标签: vhdl

我有一个负数(MSB = 1)。如何通过移位VHDL将数字除以2来说。

EG。转-6应该给我2。

如何概括划分/转换 例如: - -6 - > -3        6 - > 3

1 个答案:

答案 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(shift_right):向下舍入,因此-7 / 2 = -4
  • 分区(/):向零舍入,因此-7 / 2 = -3

实施方面的差异:

  • Shift(shift_right):尺寸和速度为零成本,因为仅使用布线
  • 分区(/):由于舍入需要逻辑运算,因此在尺寸和速度上会有一些成本