5

我想使用 vhdl 制作幂函数,其中幂是浮点数并且数字是整数(将始终为“2”)。

2^ 一些浮点数。

我使用 ieee 库和(fixed_float_types.all、fixed_pkg.all 和 float_pkg.all)。

我想计算所有可能的输出并将它们保存在 ROM 中,但我不知道功率的范围。

如何实现这个功能,如果有这样的实现功能在哪里可以找到它?

谢谢

4

3 回答 3

8

对于仿真,您将在 IEEE.math_real 库中找到合适的幂函数

library IEEE;
use IEEE.math_real.all;
...
X <= 2 ** Y;
or
X <= 2.0 ** Y;

这可能是不可综合的。如果我需要类似的合成操作,我会使用值、斜率和二阶导数的查找表以及二次插值器。我已将这种方法用于倒数和平方根函数以达到单精度精度;2**n 在合理的 n 范围内足够平滑,相同的方法应该可以工作。

于 2013-04-28T22:13:34.693 回答
1

如果可以使用近似值,我想我会使用指数的整数部分来确定 2 的整数幂,例如浮点数是111.011010111你知道 2 部分的整数幂是0b10000000。然后我会根据小数位从左到右进行条件加法,所以 111.011010111你知道你需要添加实现0b10000000时间( 0*(1/2) + 1*(1/4) + 1*(1/8) + 0*(1/16).....等等)。1/2、1/4、1/8 等是0b10000000. 这实现了取幂的整数部分,然后将小数部分近似为整数部分的乘法。

于 2013-04-29T18:53:46.010 回答
0

就像任何简单一样,二进制的 0.1 相当于十进制的 0.5,这相当于计算平方根。我一直在研究浮点数,花了大约 4-5 个小时来解决这个问题,以便以最简单和可综合的方式实现幂函数。只需继续重复平方根,例如对于 b"0.01" 你想做双平方根像 sqrt(sqrt(x)) 和对于 b"0.11" sqrt * double sqrt like sqrt(x)*sqrt(sqrt(x) ) 等等...

这是 pow 函数的可综合实现...

于 2020-01-22T15:32:41.547 回答