VHDL - CORDIC Verfahren

Transcrição

VHDL - CORDIC Verfahren
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
VHDL - CORDIC Verfahren
Marc Reichenbach und Michael Schmidt
Informatik 3 / Rechnerarchitektur
Universität Erlangen Nürnberg
04/12
1 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
Gliederung
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
2 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
Motivation
• oft “Standardfunktionen” benötigt
• meistens nur mit hohem Aufwand zu berechnen
• spezielle iterative Algorithmen ohne Verwendung von
Multiplikationen
• dadurch Einsparung von Chipfläche
3 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
Standardfunktionen
• Sinus
• Cosinus
• Tangens
• Exponentialfunktion
• Logarithmusfunktion
• Arcus- und Areafunktionen
• Quadratwurzel
• Multiplikation, Division
4 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
Einsparung von Chipfläche
• Multiplikationen sehr zeitintensiv
• Multiplikationswerke sehr groß
• Technologien damals
• LSI, MSI, SSI: Anzahl der Transistoren begrenzt
• Technologien heute
• Verwendung schneller Multiplizierer
• Einsatz in platzkritischen Technologien wie FPGA
• Einsatz bei massiv parallelen Architekturen
5 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
Alternative Technologien
• Lookup-Tabellen
• viel Platzverbrauch
• für jede Funktionen eine eigene notwendig
• Interpolation zwischen den Werten
• BKM (Bit) Algorithmen
• iterative shift-and-add Algorithmus
• nur für Logarithmus- und Expotentialfunktionen geeignet
• Taylorreihe
• Beispiel Sinus an a = 0: sin(x) = x +
x3
3!
+
x5
5!
+
x7
7!
+
x9
9!
• ... benötigt auch Multiplikationen
6 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC Entwicklung
• CORDIC-Verfahren von Volder (1959) und Walther (1971)
entwickelt
• Konvergenzverfahren auf Basis von Koordinatentransformation
• Verfahren benötigt nur einfache Operationen
• Addition (RCA)
• Schiebeoperationen (Multiplexer)
• Abfragen (Multiplexer)
• Tabellenzugriff (ROM, Counter)
• alle “Standardfunktionen” damit umsetzbar
7 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Veröffentlichungen und Einsatz
• Volder 1959: The CORDIC Trigonometric Computing
Technique. sin, cos, arctan, sqrt
• CORDIC - coordinate rotation digital computing
• Walther 1971: A unified algorithm for elementary functions.
sinh, cosh, e, ln, div
• Einsatz in den ersten Generationen der HP Taschenrechner
• CORDIC-Prozessor als ASIC in Roboter-Steuergung:
Timmermann et al.: A CMOS floating-point vector-arithmetic
unit
8 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
Prinzip des CORDIC-Verfahren
• Berechnung Sinus bzw. Cosinus wird auf
Koordinatentransformationen zurückgeführt
• Drehung eines Vektors (x0 , y0 ) um einen Winkel Θ in einen
Vektor (xn , yn )
• mathematisch durch Multiplikation mit sog. Rotationsmatrix
durchführbar
(xn,yn)
Θ
xn
cos Θ − sin Θ
x
=
· 0
yn
sin Θ cos Θ
y0
(x0,y0)
9 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Sinus und Kosinus
• durch Drehung des Vektors (1, 0) um Θ ist sin Θ und cos Θ
berechenbar
cos Θ − sin Θ
1
xn
=
·
sin Θ cos Θ
0
yn
sin Θ
(xn,yn)
Θ
cos Θ
(1,0)
10 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Umformung in den Tangenz
• durch mathematische Umformung nur noch Abhänigkeit von
einer Winkelfuntion tan Θ
• wichtig um Multiplikationen durch Schiebeoperationen nach
rechts zu ersetzen
• Drehung um den Winkel Θ wird nun durch Folge von
Drehungen um Teilwinkel αi realisiert
xn
x
cos Θ − sin Θ
=
· 0
yn
sin Θ cos Θ
y0
1
1 + tan2 Θ
1
xn
1
− tan Θ
x
=√
·
· 0
2
yn
tan
Θ
1
y0
1 + tan Θ
cos Θ = √
11 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Einführung Teilwinkel
• Teilwinkel αi sind bereits vorab definiert
• Teilwinkel so gewählt, dass der gewünschte Winkel Θ als
Linearkombination der Teilwinkel αi darstellbar ist
Θ=
n−1
X
σi · αi
σi ∈ {−1, 1}
i=0
• d.h., der Winkel Θ wird durch eine alternierende
Approximation angenährt
• bedeutet, dass man vor- und zurückdreht
• ist man bei einer Teildrehung zu weit gegangen, d.h. über den
Winkel Θ hinaus, so muss man im nächsten Schritt wieder
zurückdrehen
• die Drehrichtung wird durch den Parameter σi gesteuert
12 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Linearkombination der Teilwinkel
• zur Steuerung des Vorzeichens bzw. der Drehrichtung wird
Hilfsvariable zi eingeführt
• z0 wird mit dem gewünschten Drehwinkel Θ initialisiert
α1+α2+α3
Θ
α1+α2
α1
α1+α2
+α3-α4
(xn,yn)
α3
α2
α4
Θ
z0 = Θ
zi+1 = zi − σi · αi
α1
(1,0)
(
1
zi ≥ 0
σi =
−1 zi < 0
13 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Eliminierung der Multiplikationen
Mathematischer Ausdruck einer Teildrehung:
1
xi+1
1
=p
·
2
yi+1
σ
tan
αi
i
1 + tan αi
x
−σi tan αi
· i
yi
1
Eliminierung der Multiplikationen:
• wesentliche Idee hinter dem Verfahren
• ersetze Multiplikationen durch Schiebeoperationen
tan αi = 2−i
i = 0...n − 1
14 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Iteration ohne Multiplikation
Teildrehung um αi
1
xi+1
= ki ·
yi+1
σi 2−i
−σi 2−i
x
· i
yi
1
1
1
ki = p
=√
1 + 2−2i
1 + tan2 αi
• da es sich bei den Teilwinkeln αi um bekannte Werte handelt,
können die ki vorab zusammengefasst werden
15 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Iterationsformeln
Iterationsformeln
xi+1 = xi − σi · 2−i · yi
yi+1 = yi + σi · 2−i · xi
zi+1 = zi − σi · arctan 2−i
Faktor k
k=
n−1
Y
i=0
1
√
1 + 2−2i
16 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Initialwerte
Lösung des Systems von Differenzengleichungen ist
xn = x0 cos z0 − y0 sin z0
yn = y0 cos z0 + x0 sin z0
Durch geeignete Wahl der Initialwerte ist damit Sinus und Cosinus
berechenbar
x0 = 1 ∧ y0 = 0 −→ xn = cos z0 ∧ y0 = sin z0
Achtung: Um den Wert k zu klein!
k=
n−1
Y
i=0
√
1
1 + 2−2i
17 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Initialwert k
Multiplikation nicht notwendig, wenn Startwert gut gewählt
x00 = x0 · k = k
y00 = y0 · k = 0
(xn,yn)
k · (xn,yn)
k · (1,0) (1,0)
18 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Vektormodus
• eben gezeigtes Verfahren verfolgte Strategie die z-Komponente
gegen 0 streben zu lassen
• dies wird Rotationsmodus genannt
• es gibt aber auch die Möglichkeit, mit der zweiten Variable yi
gegen 0 zu kovergieren
(x0, y0)
Θ
(xn, 0)
x0
cos Θ = q
x02 + y02
y0
sin Θ = q
x02 + y02
→ tan Θ =
y0
x0
(x02 + y02)1/2 = xn
19 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Funktionalität des Vektormodus
• diese Strategie wird Vektormodus genannt
• graphisch gesehen kann dann auf der x-Achse die Länge des
Vektors (x0 , y0 ) abgelesen werden
• werden gleichzeitig in der dritten Komponente alle z alle
Teilwinkel aufsummiert, erhält zn den Winkel identisch mit
arctan(y0 /x0 )
• Iterationsformeln identisch wie beim Rotationsmodus
• zur Bestimmung des Vorzeichens σi muss nun die Variable yi
abgefragt werden
20 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - wichtige Formeln des Vektormodus
Zusammenfassung in Formeln
Länge eines Vektors / Wurzel:
xn =
q
x02 + y02
Winkel eines Vektors / arctan:
zn = z0 + Θ = z0 + arctan(y0 /x0 )
Vorzeichen für die Iterationen:
(
−1, yi ≥ 0
σi =
1,
yi < 0
21 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Erweiterung zum allgemeinen CORDIC
• bisher gezeigten Iterationsformeln erlauben die Berechnung
• der Wurzelfunktion
• des Arkustangens
• der trigonometrischen Funktionen
• Walther erweiterte 1971 das von Volder für zyklische
Koordinatensysteme entwickelte Verfahren auf
• lineare und
• hyperbolische Koordinatensysteme
22 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Norm eines Vektors
p
x2 + m · y2
x
p
x2 + y2
p
x2 − y2
m=1
m=0
m=-1
zyklisches KOS
lineares KOS
hyperbolisches KOS
23 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Veralgemeinerte Rotationsmatrix
"
1 √
1
xi+1
=p
·
√
tan(αi m)
yi+1
1 + tan2 (αi m) σi √m
√
√ # −σi m tan(αi m) xi
·
yi
1
m = −1
m=1
m=0
↓
↓
zyklisch
1
σi tan αi
−σi tan αi
1
tan αi = 2−i
↓
hyperbolisch
linear
1
σi αi
0
1
αi = 2−i
1
σi tanh αi
−σi tanh αi
1
tanh αi = 2−i
24 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Verallgemeinerte Iterationsformeln
Iterationsformeln
xi+1 = xi − mσi · 2−F (i) · yi
yi+1 = yi + σi · 2−F (i) · xi
zi+1 = zi − σi · αi


i
wenn m = 0 ∨ m = 1



1, 2, 3, 4, 4, 5, 6, . . . ,
F (i) =

13, 13, 14, 15, . . . ,



40, 40, 41, . . .
wenn m = −1
25 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Die Funktion F (i)
• Zahlen 4, 13, 40, k, 3k + 1 treten im hyperbolischen Fall
doppelt auf
• Grund ist Konvergenz
• für die Einhaltung der Konvergenz muss für verschiedene
Teilwinkel αi gelten
αi −
n−1
X
αi < ∆α
j=i+1
• d.h., jeder Teilwinkel einer Iteration kann durch alle folgenden
Teilwinkel bis auf einen Restfehler kompensiert werden
26 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Konvergenz der Teilwinkel
• Restfehler des Gesamtverfahrens ist durch den Teilwinkel der
letzten Iteration definiert
• damit Kompensation möglich ist, muss Nachfolgewinkel
mindestens die Hälfte des Vorhergehenden betragen
1
αi+1 ≥ αi
2
• für zirkulares und lineares Koordinatensystem erfüllt
• für hyperbolisches nicht: eine Winkeldrehung muss an
bestimmten Fällen eventuell wieder vollständig rückgängig
gemacht werden
27 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Übersicht
Betriebsart
Rotationsmodus
zn → 0
m
1
0
-1
Vektormodus
yn → 0
1
0
-1
Funktion
xn = x0 cos z0 − y0 sin z0
yn = y0 cos z0 + x0 sin z0
xn = x0
yn = y0 + z0 x0
xn = x0 cosh z0 + y0 sinh z0
yn = yq
0 cosh z0 + x0 sinh z0
xn
zn
xn
zn
= (x02 + y02 )
= z0 + arctan(y0 /x0 )
= x0
= zq
0 + y0 /x0
xn = x02 − y02
zn = z0 + Atanh(y0 /x0 )
28 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Berechenbare Funktionen
z
e = cosh z + sinh z
√
q
z = (z + 41 )2 − (z − 14 )2
e −z = cosh z − sinh z tan z =
ln z = 2Atanh( z−1
z+1 )
sin z
cos z
tanh z =
sinh z
cosh z
29 / 30
Outline
Motivation und Geschichte des CORDIC-Verfahrens
CORDIC-Verfahren
Der verallgemeinerte CORDIC
CORDIC - Architektur
xi+1 = xi − mσi · 2−F (i) · yi
yi+1 = yi + σi · 2−F (i) · xi
zi+1 = zi − σi · αi
xi
yi
zi
2-F(i)
Shift
+/xi+1
mσi
αi
Shift
σi
+/-
+/-
yi+1
zi+1
σi
30 / 30

Documentos relacionados