我将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;除非它为我想要做的事情实现了一个简单的解决方案吗?
有什么建议吗?
答案 0 :(得分:0)
如果要截断LSB,可以使用numeric_std中定义的shift_right函数,然后调整大小。
c <= resize(shift_right(p, 10), c'length);
或者,你可以采取一个切片:
c <= p(c'length+10 downto 10);