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

时间:2016-04-18 06:16:13

标签: verilog taylor-series digital-design

我正在尝试使用Taylor系列在Verilog中实现COS X功能。提交给我的问题陈述如下

“使用泰勒级数近似来编写一个Verilog代码来计算cosX。请以增量为0的X = 0°到360°附加带符号十进制基数格式的8位输出的源代码和测试台代码。 10°“

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

分辨率计算: 10°增量以覆盖0°至360°=> 36个职位

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

泰勒系列计算 cos的泰勒级数由here

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

我有几个问题

1)虽然使用乘法器很容易生成X * X(X square)或X cube术语,但我不知道如何处理在计算X square或X cube术语时产生的额外位。 输出仅为8位

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

我是否仍然生成它们,然后通过仅考虑整个结果的MSB 8位来忽略它们? ......这样的宇宙波会吸得好吗?

2)我不知道如何处理泰勒系列赛开始时的+1加法...... COS X = 1 - (X ^ 2/2!)+(X ^ 4 / 4!)....我是否直接添加二进制1或者我必须将1缩放为2 ^ 8 = 255或2 ^ 6 = 64,因为我在输入时使用 6位强>输出<8位

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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