Sie sind auf Seite 1von 57

Bakkalaureatsarbeit

CORDIC - COrdinate Rotation DIgital Computer

Dominik Egarter, 0760501

dominik.egarter@uni-klu.ac.at

1. August 2010

Inhaltsverzeichnis

1 Theorie

3

1.1 CORDIC Motivation .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

1.2 CORDIC-Algorithmus

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

1.3 Vektor- und Rotation- Modus

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

5

1.3.1 Rotation-Modus

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

5

1.3.2 Vektor-Modus

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

6

1.4 Erweiterter CORDIC-Algorithmus

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

7

1.4.1 Hyperbolisches Koordinatensystem

 

7

1.4.2 Lineares Koordinatensystem .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

1.5 Rotationswinkel und Skalierungsfaktor

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

9

1.5.1 Skalierungsfaktor .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

9

1.5.2 Rotationswinkel

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

10

1.6 Konvergenzbereich

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

10

1.6.1

ROC-Region of Convergence-mit kreisf¨ormigen Koordinaten im Vektor- und

 

Rotationsmodus

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

12

1.7 Verwendete Architekturen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

13

1.7.1 Hardwareaufbau einer Mikrorotation

 

13

1.7.2 Iterative Implementierung

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

13

1.7.3 Pipeline Implementierung

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

14

1.8 Genauigkeitsbetrachtung .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

15

1.8.1 Approximation Error .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

15

1.8.2 Rounding Error

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

17

1.8.3 Overall Quantization Error

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

17

1.8.4 Effective Fractional Bits

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

17

2 Praktischer Teil

 

18

2.1 Allgemeines

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

18

2.2 Fix Point Package VHDL

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

18

 

¨

2.2.1

Uberblick

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

18

2.2.2

Verwendung des f ixed pkg Package

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

18

2.3 CORDIC Cell .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

19

2.3.1 FSM der CORDIC Cell

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

20

2.3.2 Simulation

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

22

2.4 CORDIC-Entity

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

32

2.5 CORDIC Iterativ .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

32

2.5.1 Funktionsweise

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

33

2.5.2 FSM CORDIC-iterativ .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

35

2.5.3 Simulation

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

35

2.6 CORDIC Pipeline

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

43

2.6.1 Funktionsweise

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

43

2.6.2 Simulation

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

43

2.7 Gegenuberstellung¨

iterative vs. pipeline Implementierung

.

.

.

.

.

.

.

.

.

.

.

.

.

.

47

2.7.1 CORDIC Zelle

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

48

2.7.2 Iterative Implementierung

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

48

2.7.3 Pipeline Implementierung

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

48

 

1

2.7.4

Vergleich iterative vs. pipeline Implementierung

49

2.8

Genauigkeitsbetrachtung .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

50

2.8.1 Fehlerverlauf des allgemeinen Falles

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

50

2.8.2 Fehlerverlauf des Spezial-Falles

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

53

2.8.3 Erkenntnisse Genauigkeitssimulationen

 

55

2

Kapitel 1

Theorie

1.1 CORDIC Motivation

Der CORDIC (COrdinate Rotation DIgital Computer)-Algorithmus wurde erstmals von Jack E. Volder im Jahr 1959 publiziert und seit dem weiterentwickelt und analysiert. Die Motivation von Jack E. Folder war es einen digitalen Rechner zu entwickeln, mit welchem man die Positionsbe- stimmung von Navigationsger¨aten verbessern kann. Grunds¨atzlich ist es mit dem ursprunglichen¨ CORDIC-Algorithmus m¨oglich trigonometrische Funktionen wie Sinus, Kosinus und Tangens in beliebiger Genauigkeit zu berechnen. Es ist ein iterativer Algorithmus, welcher mit der Anzahl der Iterationen immer genauer wird. Der essentielle Vorteil des CORDIC-Algorithmus ist, dass dieser Algorithmus sehr leicht in digitalen Schaltungen implementiert werden kann. Man ben¨otigt hierzu grunds¨atzlich nur Additionen und Schieberegister (shift and add algorithm). Der CORDIC- Algorithmus wurde exakt aus diesem Grund in fruheren¨ Taschenrechner wie zum Beispiel von Hewlett Packard verwendet. In den achtziger Jahre mit dem Aufkommen von High- Speed Multiplizieren und dem extremen Wachstum der Speichertechniken kam der Algorithmus in Vergessenheit. Heutzutage findet der CORDIC-Algorithmus einen neuen Aufschwung und besondere Verwendung in der digitalen Signalverarbeitung mit digitalen Schaltungen (FPGA - Field Programmable Gate Array, ASIC -Application Specific Integrated Circuit ), da man mit beliebiger Genauigkeit trigo- nometrische Funktionen iterativ berechnet werden kann

1.2 CORDIC-Algorithmus

Der CORDIC Algorithmus basiert auf der Rotation eines Vektors in der Ebene. Dies ist in Abbil- dung 1.1 veranschaulicht.

Vektors in der Ebene. Dies ist in Abbil- dung 1.1 veranschaulicht. Abbildung 1.1: Rotation eines Vektors

Abbildung 1.1: Rotation eines Vektors in der Ebene

3

Der Inputvektor wird um den Winkel θ rotiert, welches zur folgenden mathematischen Beschrei- bung fuhrt:¨

x f = x s cos(θ) y s sin(θ)

y f = y s sin(θ) y s cos(θ)

(1.1)

(1.2)

In Matrix-Notation sieht die Gleichung wie folgt aus:

x

y

f

f

=

cos(θ)

sin(θ)

sin(θ)

cos(θ)

x s

y

s

= ROT (θ) x s

y

s

(1.3)

Dies w¨are nun eine perfekte Rotation, da der Betrag der Vektoren erhalten bleibt. Der CORDIC-Algorithmus verwendet hierfur¨ jedoch so genannte Mikrorotationen von elementaren Winkeln. Definiert man die elementaren Rotationswinkel als α i , kann man den Rotationswinkel θ als Summe der elementaren Rotationswinkel anschreiben.

θ =

i=0

α i

(1.4)

Die Rotation kann nun als Produkt der Mikrorotationen angeschrieben werden

ROT (θ) =

i=0

ROT (α i )

(1.5)

Verwendet man die Formel 1.5, die Formel 1.1 und die Formel 1.2, erh¨alt man folgendes Ergebnis

x i+1 =

x i cos(α i ) y i sin(α i )

y i+1 = y i sin(α i ) y i cos(α i )

(1.6)

(1.7)

Wenn man nun den Kosinus-Faktor heraushebt, erh¨alt man folgende Gleichung

x i+1 = cos(α i ) (x i y i tan(α i )

y i+1 = cos(α i ) (y i + x i tan(α i )

W¨ahlt man nun den Rotationswinkel α i wie folgt

α i = tan 1 (σ i 2 1 ) = σ i tan 1 (2 1 )

wobei σ (1, 1) ist, folgt aus 1.8 und 1.9

x i+1 = cos(α i ) (x i y i σ i 2 1 )

y i+1 = cos(α i ) (y i + x i σ i 2 1 )

(1.8)

(1.9)

(1.10)

(1.11)

(1.12)

Wird nur der Skalierungsfaktor, welcher cos(α i ) ist, vernachl¨assigt, so erh¨alt man eine Pseudo- Vektorrotation, da der Rotationwinkel gleich bleibt, jedoch die x- und y- Vektoren ist mit dem Faktor cos(α i ) skaliert. Dies resultiert in der folgenden Gleichung:

x i+1 =

y i+1 =

x i y i σ i 2 1

(1.13)

y i + x i σ i 2 1

(1.14)

In dieser Formel ist sehr gut ersichtlich, dass nur mehr zwei Additionen und zwei Schiebeope- rationen ben¨otigt werden.

4

Um nun σ i zu bestimmen, wird eine neue Variable z i eingefuhrt.¨ Z i ist die Winkelvariable und unterliegt folgender Gleichung:

z i+1 = z i α i = z i σ i tan 1 (2 1 )

(1.15)

Die finale Mikrorotation des CORDIC Algorithmus lautet nun wie folgt:

(1.16)

(1.17)

(1.18)

Fur¨ die Implementierung des CORDIC-Algorithmus werden nun schlussendlich 3 Additionen, 2 Schiebeoperationen und eine Tabelle, in welcher die Werte fur¨ tan 1 (2 1 ) abgelegt sind, ben¨otigt. Diese Werte werden typischerweise in einen beliebigen Speicher geschrieben.

x i

x

i+1

y i σ i 2 1

x i σ i 2 1

=

y i+1 = y i +

z i+1 = z i σ i tan 1 (2 1 )

1.3 Vektor- und Rotation- Modus

Fur¨

der Rotationmodus. Entsprechend des verwendeten Modus wird nun α i bzw. σ i unterschiedlich bestimmt.

den CORDIC- Algorithmus sind 2 unterschiedliche Modi definiert, der Vektormodus und

1.3.1

Rotation-Modus

Im Rotation-Modus wird Initialisierungs-Vektor (x in ,y in ) um den Winkel θ rotiert.

Im Rotationsmodus wird der Initialisierungswinkel von z i so lange ver¨andert, bis der endgutige¨

¨

ˇ

Winkel sich dem gew Ynschten Rotationswinkel ann Shert. Dies wird auf diese Art und Weise er- reicht, indem man den Initialisierungswinkel von z 0 gleich θ setzt und den Winkel z i+1 entsprechend

der Richtung der Rotation, welche durch σ i bestimmt ist, ver¨andert.

Rotation, welche durch σ i bestimmt ist, ver¨andert. Abbildung 1.2: Mikrorotation eines Vektors im

Abbildung 1.2: Mikrorotation eines Vektors im Rotation-Modus

Die Bestimmung von σ i erfolgt entsprechend der folgenden Gleichungen:

σ i =

1,

1,

z[0] = θ

wenn z

wenn

0 z i < 0

i

5

(1.19)

(1.20)

Dies bedeutet, dass die Richtung der Rotation durch den momentanen Wert von z i bestimmt wird. Das Ergebnis der Bestimmung von σ i wird nun in 1.16, 1.17 und 1.18 verwendet. Mit den Initialisierungsbedingung das

(x[0], y[0]) = (x in , y in )

(1.21)

bekommt man im Endzustand folgende Gleichungen:

(1.22)

(1.23)

(1.24)

Zu bemerken ist hier, dass K der Skalierungsfaktor ist, welcher sp¨ater noch n¨aher behandelt wird. Im Rotation-Modus ist des weiteren ein Spezialfall m¨oglich. Wenn man fur¨ x in = k und fur¨ y in = 0 w¨ahlt, so kann man den Sinus und den Kosinus fur¨ den Winkel θ berechnen.

x f in = K(x in cos(θ) y in sin(θ))

y f in = K(x in sin(θ) + y in cos(θ))

z f in = 0

1

1.3.2

Vektor-Modus

Im Vektor-Modus wird der Initialisierungs-Vektor (x in ,y in ) derart rotiert, bis der finale Vektor (x f in ,y f in ) auf der X-Achse liegt. Dies bedeutet, dass das y f in = 0 ist.

liegt. Dies bedeutet, dass das y f i n = 0 ist. Abbildung 1.3: Mikrorotation eines

Abbildung 1.3: Mikrorotation eines Vektors im Vektor-Modus

Die Bestimmung von σ i erfolgt hier derart, indem folgende Gleichungen verwendet:

σ i =

z[0] = 0

1,

1,

wenn y

wenn

0 y i < 0

i

(1.25)

(1.26)

Dies bedeutet, dass im Vektor-Modus im Gegensatz zum Rotation-Modus der Wert von σ i durch den Wert von y i bestimmt wird.Das Ergebnis der Bestimmung von σ i wird nun wiederum in 1.16, 1.17 und 1.18 verwendet.

Mit der Initialisierungsbedingung

(x[0], y[0]) = (x in , y in )

(1.27)

bekommt man im Endzustand nun folgende Gleichungen:

x f in

=

K (x

2

in + y

2

in )

y f in = 0

z f in = z in + tan 1 y in

in

x

6

(1.28)

(1.29)

(1.30)

1.4

Erweiterter CORDIC-Algorithmus

Bis dato wurde der CORDIC-Algorithmus nur fur¨ kreisf¨ormige Koordinaten betrachtet. Dies be- deutet, dass der Initialisierungsvektor x in ,y in auf einer Kreislinie rotiert worden ist. Es jedoch auch m¨oglich der Vektor entlang einer Linie bzw. hyperbolischen Linie zu rotieren und daraus resultie- rend gibt es Unterschiede zwischen den verwendeten Koordinatensystems. Die Auswahl zwischen den Koordinatensysteme erfolgt grunds¨atzlich mit der Variable m. Ent- sprechend des Koordinatensystem wird m wiefolgt gew¨ahlt, dass m = 1 fur¨ das kreisf¨ormige Ko- ordinatensystem, m = 0 fur¨ das lineare Koordinatensystem und m = 1 fur¨ das hyperbolische Koordinatensystem. Die Forrmeln 1.16, 1.17 und 1.18 k¨onnen nun derart fur¨ alle Koordinatensysteme umgeschrieben werden :

x i+1 = x i m y i σ i 2 i

(1.31)

y i+1 = y i + x i σ i 2 i

(1.32)

z i+1 = z i σ i tan 1 (2 i )

(1.33)

1.4.1 Hyperbolisches Koordinatensystem

Die Vektorrotation im Hyperbolischen Koordinatensystems wird in Abbildung 1.4 veranschaulicht und unterliegt folgender Gleichung:

1.4 veranschaulicht und unterliegt folgender Gleichung: Abbildung 1.4: Mikrorotation eines Vektors im

Abbildung 1.4: Mikrorotation eines Vektors im hyperbolischen Koordinatensystems

x

y

2

2

=

cosh(θ)

sinh(θ)

sinh(θ)

cosh(θ)

x 1

y

1

(1.34)

Entsprechend dieser Gleichungen ergeben sich folgende Gleichungen fur¨ die Mikrorotationen:

x i+1 = x i + y i σ i 2 1

y i+1 = y i + x i σ i 2 1

z i+1 = z i σ i tanh 1 (2 1 )

(1.35)

(1.36)

(1.37)

Entsprechend der definierten Modi des CORDIC-Algorithmus, kommt je nach verwendeten Mo- dus ein bestimmter Endzustand heraus.

7

Rotation-Modus

Der Endzustand der Mikrorotationen fur¨ den Rotation-Modus lautet wie folgt:

x

y

f

f

K h (x in cosh(θ)

in = K h (x in sinh(θ)

in

=

+

+

y in sinh(θ)) y in cosh(θ))

z f in = 0

(1.38)

(1.39)

(1.40)

Entsprechend des Koordinatensystems ¨andert sich auch der Skalierungsfaktor K zu K h .

Vektor-Modus

x f in = K h (x

2

in y

2

in )

y f in = 0

z f in = z in + tanh 1 y in

x

in

(1.41)

(1.42)

(1.43)

Auch hier wird nicht der Skalierungsfaktor K sonder K h verwendet.

1.4.2 Lineares Koordinatensystem

In Abbildung 1.5 ist die Vektorrotation im linearen Koordinatensystem veranschaulicht und beruht auf folgende Gleichungen:

veranschaulicht und beruht auf folgende Gleichungen: Abbildung 1.5: Mikrorotation eines Vektors im linearen

Abbildung 1.5: Mikrorotation eines Vektors im linearen Koordinatensystem

x

y

R

R

=

1

θ

0

1

x in

y

in

(1.44)

Daraus folgend lauten die Gleichungen fur¨ die Mikrorotationen:

x i+1 = x i

y i+1 = y i + x i σ i 2 1

z i+1 = z i σ i 2 1

8

(1.45)

(1.46)

(1.47)

Rotation-Modus

Der Endzustand fur¨ lineare Koordinatensysteme im Rotation-Modus lauten:

x f in = x in

y f in = y in + x in z in

z f in = 0

(1.48)

(1.49)

(1.50)

¨

Ublicherweise musste¨

auch hier ein Skalierungfaktor K l verwendet werden, doch dieser ist im

linearen Koordinatensystem gleich 1.

Vektor-Modus

Im Vektor-Modus lautet der Endzustand:

x f in = x in

y f in = 0

z f in = z in +

y in

x in

(1.51)

(1.52)

(1.53)

1.5 Rotationswinkel und Skalierungsfaktor

1.5.1

Skalierungsfaktor

Durch das Herausheben des Kosinustermes in 1.11 und 1.12 und das vernachl¨assigen dieses Termes kommt es bei der Vektorrotation zu einem gewissen Fehler. Die Endzust¨ande der Eingangsvektoren sind mit einem Faktor k behaftet und aus diesem Grund bezeichnet man auch die daraus resultie- rende Vektorrotation als Pseudo-Vektorrotation.

Dies bedeutet, dass bei jeder Iteration des CORDIC-Algorithmus ein Fehler von

Diese Aussage ist gultig¨

fur¨ ein kreisf¨ormiges Koordinatensystem. Betrachtet man nun den resul-

tierenden Fehler fur¨ n Iterationen, erh¨alt man folgenden mathematischen Zusammenhang:

cos(σ i ) entsteht.

1

K r =

n1

i=0

1

cos(