【发布时间】:2016-08-09 18:13:09
【问题描述】:
我正在尝试使用泰勒级数在 Verilog 中实现 COS X 函数。呈现给我的问题陈述如下
"编写一个 Verilog 代码以使用泰勒级数近似计算 cosX。请附上 8 位输出的源代码和测试台代码,以带符号的十进制格式为 X = 0° 到 360°,增量为10°"
在继续之前,我需要了解一些事情。 如有错误请指正
分辨率计算: 10° 增量覆盖 0° 到 360° => 36 个位置
十进制的36可以用6位表示。由于我们可以使用 6 位,因此使用 64 个字的分辨率会稍好一些。 64 个字代表 0° 到 360°,因此每个字代表 5.625° 的分辨率,即从 0° 到 360° 的所有 Cos 值,增量为 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 位输出 ?
【问题讨论】:
标签: verilog taylor-series digital-design