2016-04-18 305 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