最简单的方法来降低签名号码

时间:2016-04-24 04:20:44

标签: floating-point vhdl fpga twos-complement

我将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 ?

我看了一下这个功能&#34;调整大小&#34;但它似乎只是截断或填充位。我认为FPGA的黄金法则永远不会使用&#34; /&#34;除非它为我想要做的事情实现了一个简单的解决方案吗?

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

或者,你可以采取一个切片:

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