我正在尝试使用泰勒级数在 Verilog 中实现 COS X 函数。呈现给我的问题陈述如下
“编写一个 Verilog 代码以使用泰勒级数近似计算 cosX。请附上 8 位输出的源代码和测试台代码,以有符号十进制格式表示 X = 0° 到 360°,增量为 10°”
在继续之前,我需要了解一些事情。如果我在某个地方错了,请纠正我
分辨率计算:以 10° 为增量覆盖 0° 到 360° => 36 个位置
十进制的 36 可以用 6 位表示。由于我们可以使用 6 位,因此使用 64 个字的分辨率会稍好一些。64 个字代表 0° 到 360°,因此每个字代表 5.625° 的分辨率,即所有的 Cos 值从 0° 到 360°,增量为 5.625°。因此分辨率为 5.625°
泰勒级数计算 cos 的泰勒级数由泰勒级数的 Cos x 近似给出
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 位?