【问题标题】:Verilog code to compute cosx using Taylor series approximation使用泰勒级数近似计算 cosx 的 Verilog 代码
【发布时间】: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


    【解决方案1】:

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

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

    我之前有一个解释how to use fixed-point with verilog 的答案。一旦您对此感到满意,您需要查看how bit growth occurs during multiply

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

    对于 7 个小数位,1 整数看起来像 9'b0_1_00000001*2**7

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 2015-05-15
      • 1970-01-01
      • 2016-04-26
      • 2017-03-20
      • 2017-09-27
      • 2021-08-12
      相关资源
      最近更新 更多