下移有符号数的最简单方法

Easiest Way to Shift Down A Signed Number

我将一个 2s 补码浮点数相乘并将其用于 DSP 内部的一些数学运算。我得到结果并希望将其向下移动,但我不确定最简单的方法。

例如:

constant b_const : integer := integer(real(1.0 / 3.0) / real((2.0**-10.0)));        
signal b : std_logic_vector(10 downto 0);

begin

b <= std_logic_vector(to_signed(b_const, b'length)) ; 

dsp: work.entity_dsp -- p = a * b
port map(
    clk => clk,
    a => a,
    b => b,
    p => p -- also signed
);

c <= p / 2**10; -- Isn't this very resource intensive ?

我查看了函数 "resize",但它似乎只是截断或填充位。我认为 FPGA 的黄金法则是永远不要使用“/”,除非它实现了我想要做的事情的简单解决方案?

有什么建议吗?

如果要截断 LSB,可以使用 numeric_std 中定义的 shift_right 函数,然后调整大小。

c <= resize(shift_right(p, 10), c'length);

或者,您可以切片:

c <= p(c'length+10 downto 10);