我正在尝试使用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位?
答案 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_0000000
或1*2**7
。