使用泰勒级数近似计算 cosx 的 Verilog 代码

Verilog code to compute cosx using Taylor series approximation

我正在尝试使用泰勒级数在 Verilog 中实现 COS X 函数。呈现给我的问题陈述如下

"Write a Verilog code to compute cosX using Taylor series approximation. Please attach the source and test bench code of the 8-bit outputs in signed decimal radix format for X = 0° to 360° at the increment of 10° "

在继续之前,我需要了解一些事情。 如有错误请指正

分辨率计算:10°增量覆盖0°到360°=>36个位置

十进制的36可以用6位来表示。由于我们可以使用 6 位,因此使用 64 字的分辨率会稍微好一些。 64 个字代表 0° 到 360°,因此每个字代表 5.625° 的分辨率,即所有 Cos 值从 0° 到 360°,增量为 5.625°。 因此分辨率为5.625°

泰勒级数计算 cos 的泰勒级数由 Cos x approximation by Taylor series

给出
      COS X  =  1  −  (X^2/2!)  +  (X^4/4!)  − (X^6/6!) .....   (using only 3~4 terms)

我有几个问题

1) 虽然使用乘法器很容易生成 X*X(X 平方)或 X 立方项,但我不确定如何处理在计算 X 平方或 X 立方项期间生成的额外位。 输出仅为 8 位

例如 X=6 位; X平方=12位; X 立方体 = 18 位。

我是否生成它们,然后通过只考虑整个结果的 MSB 8 位来忽略它们? ...这样的cos波会很烂吧?

2) 我不确定如何处理泰勒级数开始时的 +1 加法 ...COS X = 1 − (X^2/2!) + (X^4/4!) ....我是直接添加二进制 1,还是必须将 1 缩放为 2^8 = 255 或 2^6 = 64,因为我使用的是 6 位输入8 位输出 ?

我认为这个数字系列通常给出 +1 到 -1 范围内的数字。所以你必须决定你将如何使用你的 8 位。

我认为一个带符号的数字有 1 个整数位和 7 个小数位,你将无法表示 1,但非常接近。

我之前有一个答案解释 . Once your comfortable with that you need to look at

仅仅因为您在内部输出 1 位 int、7 位 frac,您就可以(应该)使用更多来计算答案。

有 7 个小数位的 1 整数看起来像 9'b0_1_00000001*2**7