2

我正在尝试使用泰勒级数在 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 位

4

1 回答 1

1

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

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

我有一个先前的答案,解释了如何将定点与 verilog 一起使用。一旦您对此感到满意,您需要查看在 multiply 期间比特增长是如何发生的

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

使用 7 个小数位,一个 1 整数看起来像9'b0_1_0000000or 1*2**7

于 2016-04-18T07:31:23.573 回答