2017-02-06 5 views
-1

Ich muss einen Arctan in VHDL berechnen. Dazu benutze ich den Cilinx IP Core "Cordic V4.0". Diese ist das Datenblatt:VHDL - XILINX CORDIC Algorithmus

https://www.xilinx.com/support/documentation/ip_documentation/cordic_ds249.pdf

Ich habe gelesen, dass die arctan-Berechnungs braucht Eingangswerte von -1 bis 1.

Meine Werte haben einen Bereich von 2^32 Bit (integer, Nr Fraktion).

Muss ich meine Eingabewerte konvertieren, bevor ich sie in den Cordic-Algorithmus setze?

Wenn ja, wie sollen sie konvertiert werden?

Regards, Erik

Antwort

0

In der Xilinx-Spezifikation geschrieben wird:

„Der Eingangsvektor, (Xin, Yin) und der Ausgangsvektor, (Xout, Yout) als ein Paar, ausgedrückt von 2-Punkt-Komplementärzahlen mit einer Ganzzahlbreite von 2 Bits (1QN-Format) Der Eingangsdrehwinkel, Pin-Radianten, wird ebenfalls als Festkomma-2-Komplementärzahl ausgedrückt, jedoch mit einer ganzzahligen Breite von 3 Bits (2QN-Format) . "

Wenn Sie also einen 32 Bit breiten Vektor verwenden, werden die 2 höchstwertigen Bits als ganzzahliger Teil und die 30 anderen als Dezimalteil verwendet.

Wenn Sie nicht wissen, wie Festpunktzahlen arbeiten, schlage ich Ihnen ein wenig darüber zu lesen:

https://en.wikipedia.org/wiki/Fixed-point_arithmetic

+0

Oh gerade über diesen Teil lesen. Vielen Dank. Also nach Wikipedia: "Um eine Zahl von einem Fixpunkttyp mit Skalierungsfaktor R in einen anderen Typ mit Skalierungsfaktor S zu konvertieren, muss die zugrundeliegende ganze Zahl mit R multipliziert und durch S multipliziert werden Verhältnis R/S. " Ich muss meine Nummer für eine Mantisse von 30 Ziffern skalieren? Also muss ich die Zahl durch 2^30 teilen und Division durch 2^x binär könnte durch Verschieben des Komma getan werden? ist das richtig? – oleeiner

+0

Eigentlich kann man auf 32 Bits skalieren, wenn man bedenkt, dass der wirkliche Bereich [-1; 1 [wird durch [-2^31; 2^31 [. Somit repräsentiert ein Schritt im zweiten Segment 1/2^31 in Wirklichkeit (dh: 4,66 * 10^-10) –