2016-04-18 4 views
2

Ich versuche die COS-X-Funktion in Verilog mithilfe der Taylor-Serie zu implementieren. Die mir gestellte Problemstellung lautet wie folgt:Verilog-Code zur Berechnung von Cosx mit Hilfe der Taylor-Serienapproximation

"Schreiben Sie einen Verilog-Code, um cosX mit Hilfe der Taylor-Serienapproximation zu berechnen. Bitte fügen Sie den Quell- und Testbenchcode der 8-Bit-Ausgänge für X = 0 in das vorzeichenbehaftete Dezimalradix-Format ein ° bis 360 ° im Inkrement von 10 ° "

Ich muss ein paar Dinge verstehen, bevor ich fortfahre. Bitte korrigieren Sie mich, wenn ich falsch bin irgendwo

Berechnung Auflösung: 10 ° -Schritten 0 ° zur Deckung zu 360 ° => 36 Positionen

36 in dezimal kann durch 6 Bits dargestellt werden. Da wir 6 Bits verwenden können, ist die Auflösung durch Verwendung von 64 Wörtern etwas besser. Die 64 Wörter repräsentieren 0 ° bis 360 °, daher repräsentiert jedes Wort eine Auflösung von 5,625 °, dh alle Werte von Cos von 0 ° bis 360 ° in Schritten von 5,625 °. So Auflösung ist 5,625 °

Taylorreihe Berechnung Taylor-Reihe für cos von Cos x approximation by Taylor series

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

Ich habe ein paar Anfragen

1) Während es einfach ist, Um X * X (X-Quadrat) oder X-Würfel-Terme mit einem Multiplikator zu generieren, bin ich mir nicht sicher, wie ich mit den zusätzlichen Bits umgehen soll, die während der Berechnung von X-Quadrat oder X-Würfel-Term erzeugt werden s. Ausgabe nur 8 Bits

zB X = 6 Bit; X Quadrat = 12 Bits; X Würfel = 18 Bits.

Erzeuge ich sie sowieso und ignoriere sie später, indem ich nur die MSB 8 Bits des gesamten Ergebnisses betrachte? ... würde so eine cos Welle richtig saugen?

2) Ich bin nicht sicher, wie die + 1-Zugabe zu Beginn der Taylor-Reihe ... COS X = zu handhaben - (X^2/2) + (X^04.04)!. ... füge ich binär 1 direkt hinzu oder muss ich die 1 als 2^8 = 255 oder 2^6 = 64 skalieren, da ich 6 Bits am Eingang und 8 Bits am Ausgang verwende?

Antwort

1

Ich denke, diese Zahlenreihe gibt normalerweise eine Zahl im Bereich +1 bis -1. SO müssen Sie entscheiden, wie Sie Ihre 8 Bits verwenden werden.

Ich denke, eine vorzeichenbehaftete Zahl mit 1 Integer-Bit und 7 gebrochenen Bits, werden Sie nicht in der Lage sein, 1 zu repräsentieren, aber sehr nahe.

Ich habe eine vorherige Antwort zu erklären how to use fixed-point with verilog. Sobald Sie damit vertraut sind, müssen Sie sich how bit growth occurs during multiply ansehen.

Nur weil Sie 1 Bit int, 7 Bit Frac intern ausgeben, könnten Sie (sollten) mehr verwenden, um die Antwort zu berechnen.

Mit 7 gebrochenen Bits würde eine 1 Ganzzahl wie 9'b0_1_0000000 oder 1*2**7 aussehen.

Verwandte Themen