使用泰勒级数近似计算cosx的Verilog代码
我试图用泰勒级数在Verilog中实现COS X函数。 呈现给我的问题陈述如下
“使用泰勒级数近似法编写一个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°
Taylor系列计算用于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位 ?
我认为这个数列通常会给出一个范围在+1到-1范围内的数字。 所以你必须决定如何使用你的8位。
我认为一个带有1个整数位和7个小数位的有符号数,你将不能代表1,但非常接近。
我有一个以前的答案解释如何使用Verilog的定点。 一旦您对此感到满意,您需要查看乘法运算过程中的位增长情况。
仅仅因为你在内部输出1位int,7位frac,你可以(应该)使用更多来计算答案。
对于7 9'b0_1_0000000
数位,1个整数看起来像9'b0_1_0000000
或1*2**7
。
上一篇: Verilog code to compute cosx using Taylor series approximation