如何在 VHDL 中计算 sin inverse (arcsin)?
How to calculate sin inverse (arcsin) in VHDL?
我正在使用 Altera De0 nano Soc FPGA 和 Quartus 16.1 精简版。在网上搜索了一下,发现要得到sin
、cos
和atan
,可以直接使用Altera的CORDIC IP核。并且还发现 lookup table (LUT) 可以用于 sin 或 cos (主要在 google 中可用) 但是如何得到 sin
inverse (ARCSIN
) 在 VHDL
?
我找到了 sin
和 cos
查找 table,有没有办法生成 sin
逆向 ?
是的。
例如使用 CORDIC...我第一次点击 Google:
A survey of CORDIC algorithms for FPGA based computer
是的,可以为 arcsin
生成查找 table。
1) 确定输入精度,换句话说,您希望在查找中保留多少个值 table。例如,如果精度为 0.1,则需要存储 11 个值。
arcsin(0), arcsin(0.1), arcsin(0.2), ..., arcsin(1).
2)求反正弦函数的结果。 Here 是我通过谷歌搜索找到的来源。
arcsin(0) = 0
arcsin(0.1) = 5.7
arcsin(0.2) = 11.5
...
arcsin(1) = 90
3)确定输出精度。
如果精度为 1,则所有值都四舍五入为整数。
arcsin(0.1) = 6
arcsin(0.2) = 12
如果精度为0.5,结果如下。输出需要 9 位大小才能达到此精度。 8位为整数部分,1位为小数部分。
arcsin(0.1) = 5.5
arcsin(0.2) = 11.5
4) 将输入值映射到查找地址 table。例如,对于 0.1 精度,它应该如下所示。此示例不需要额外的查找 table 或地址映射的大逻辑。
0 -> 0
0.1 -> 1
0.2 -> 2
...
1 -> 10
5) 在 VHDL 中实现此查找 table,就像您为 sin
或 cos
.[=19 找到的那样=]
我正在使用 Altera De0 nano Soc FPGA 和 Quartus 16.1 精简版。在网上搜索了一下,发现要得到sin
、cos
和atan
,可以直接使用Altera的CORDIC IP核。并且还发现 lookup table (LUT) 可以用于 sin 或 cos (主要在 google 中可用) 但是如何得到 sin
inverse (ARCSIN
) 在 VHDL
?
我找到了 sin
和 cos
查找 table,有没有办法生成 sin
逆向 ?
是的。
例如使用 CORDIC...我第一次点击 Google: A survey of CORDIC algorithms for FPGA based computer
是的,可以为 arcsin
生成查找 table。
1) 确定输入精度,换句话说,您希望在查找中保留多少个值 table。例如,如果精度为 0.1,则需要存储 11 个值。
arcsin(0), arcsin(0.1), arcsin(0.2), ..., arcsin(1).
2)求反正弦函数的结果。 Here 是我通过谷歌搜索找到的来源。
arcsin(0) = 0
arcsin(0.1) = 5.7
arcsin(0.2) = 11.5
...
arcsin(1) = 90
3)确定输出精度。
如果精度为 1,则所有值都四舍五入为整数。
arcsin(0.1) = 6
arcsin(0.2) = 12
如果精度为0.5,结果如下。输出需要 9 位大小才能达到此精度。 8位为整数部分,1位为小数部分。
arcsin(0.1) = 5.5
arcsin(0.2) = 11.5
4) 将输入值映射到查找地址 table。例如,对于 0.1 精度,它应该如下所示。此示例不需要额外的查找 table 或地址映射的大逻辑。
0 -> 0
0.1 -> 1
0.2 -> 2
...
1 -> 10
5) 在 VHDL 中实现此查找 table,就像您为 sin
或 cos
.[=19 找到的那样=]