我乘以一个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 ?
我看了一下功能“调整”,但它只是似乎无论是截断或垫位。我认为FPGA的黄金法则从来不会使用“/”,除非它意识到我正在尝试做的简单解决方案?
有什么建议吗?
划分是由二的幂,其被平凡作为右移位实现在带符号的整数(正校正,如果操作数负)或定点算术,并作为浮点算术中的指数减法。 – njuffa
也许不清楚在有符号整数/定点算术运算中对负值的修正应该是什么?算术右移除以2的幂,*将结果舍入到负无穷*,而整数除以2的幂*舍入(舍入到零)*结果(在C,C++中)。所以必要的修正是:如果(x <0)x = x + 2 ** n-1; r = x >> n;',其中'>>表示算术右移。 – njuffa