用移位法在VHDL中除负数

用移位法在VHDL中除负数,vhdl,Vhdl,我有一个负数(MSB=1)。如何用VHDL中的移位将数字除以,比如说2 6档换档应该给我2档 我怎样才能概括除法/移位法 例:--6->-3 6->3对于使用ieee.numeric_std.signed在2的补码中除以2的数字(负数和正数),可以使用shift和: res <= std_logic_vector(shift_right(signed(arg), 1)); 操作上的区别是: Shift(Shift\u right):向下取整,因此为-7/2=-4 除法(/):向零舍入,

我有一个负数(MSB=1)。如何用VHDL中的移位将数字除以,比如说2

6档换档应该给我2档

我怎样才能概括除法/移位法 例:--6->-3
6->3

对于使用ieee.numeric_std.signed在2的补码中除以2的数字(负数和正数),可以使用shift和:

res <= std_logic_vector(shift_right(signed(arg), 1));
操作上的区别是:

  • Shift(
    Shift\u right
    ):向下取整,因此为-7/2=-4
  • 除法(
    /
    ):向零舍入,因此-7/2=-3
实施方面的差异:

  • 移位(
    Shift\u right
    ):尺寸和速度均为零,因为只需布线
  • 除法(
    /
    ):由于四舍五入需要逻辑运算,因此在大小和速度上需要一些成本

对于使用ieee.numeric_std.signed在2的补码中除以2的数字(负数和正数):

res <= std_logic_vector(shift_right(signed(arg), 1));
操作上的区别是:

  • Shift(
    Shift\u right
    ):向下舍入,因此-7/2=-4
  • 除法(
    /
    ):向零舍入,因此-7/2=-3
实施方面的差异:

  • 移位(
    Shift\u right
    ):尺寸和速度均为零,因为只需布线
  • 除法(
    /
    ):由于四舍五入需要逻辑运算,因此在大小和速度上需要一些成本

您是否尝试过使用/2?任何合适的合成工具都会通过改变值来实现它,它在代码中显示了你的目的。你试过使用/2吗?任何合适的合成工具都会通过改变值来实现它,并在代码中显示您的目的。