2016-04-18 306 views
2

我试图在泰勒级数中使用Verilog实现COS X函数。向我呈现的问题陈述如下使用泰勒级数近似计算cosx的Verilog代码

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

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

分辨率计算: 10°的增量,以覆盖0°到360°=> 36个位置

36以十进制可以通过6位来表示。由于我们可以使用6位,因此使用64个字时分辨率会稍微好一些。 64个字代表0°到360°,因此每个字代表5.625°的分辨率,即以5.625°为增量从0°到360°的所有Cos值。 因此分辨率为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立方项时产生的额外位s。 输出为8位只有

例如X = 6个比特; X平方= 12位; X立方= 18位。

不管怎样,我是否会生成它们,然后忽略它们,只考虑整个结果的MSB 8位? ......这样的cos波会吸? 2)我不知道如何处理泰勒级数开始处+1的加法...... COS X = - (X^2/2!)+(X^4/4!)。 ...我是直接添加二进制1还是我必须缩放1为2^8 = 255或2^6 = 64因为我使用6位输入8位输出

回答

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