Professional Documents
Culture Documents
CORDIC METHOD
ROTATION AND VECTORING MODE
CONVERGENCE, PRECISION AND RANGE
SCALING FACTOR AND COMPENSATION
IMPLEMENTATIONS: word-serial and pipelined
EXTENSION TO HYPERBOLIC AND LINEAR COORDINATES
UNIFIED DESCRIPTION
REDUNDANT ADDITION AND HIGH RADIX
11 CORDIC
MAIN USES
REALIZATION OF ROTATIONS
11 CORDIC
CORDIC ALGORITHM
= ROT ()
sin cos
yR
yin
yin
11 CORDIC
in
(xR, yR )
(xin, yin )
x
Figure 11.1: VECTOR ROTATION
11 CORDIC
MICRO-ROTATIONS
ROT (j )
j=0
j=0
THEN ROT (j ):
xR [j + 1] = xR [j] cos(j ) yR [j] sin(j )
yR [j + 1] = xR [j] sin(j ) + yR [j] cos(j )
11 CORDIC
SIMPLIFYING MICRO-ROTATIONS
HOW TO AVOID MULTIPLICATIONS?
1. DECOMPOSE ROTATION INTO:
SCALING OPERATION AND ROTATION-EXTENSION
xR [j + 1] = cos(j )(xR [j] yR [j] tan(j ))
yR[j + 1] = cos(j )(yR[j] + xR [j] tan(j ))
2. CHOOSE ELEMENTARY ANGLES
j = tan1(j (2j )) = j tan1(2j )
WITH j {1, 1}
RESULTS IN ROTATION-EXTENSION RECURRENCE WITHOUT MPYs
x[j + 1] = x[j] j 2j y[j]
y[j + 1] = y[j] + j 2j x[j]
=ONLY ADDITIONS AND SHIFTS
Digital Arithmetic - Ercegovac/Lang 2003
11 CORDIC
ROTATION-EXTENSION (cont.)
ROTATION-EXTENSION SCALES MODULUS M [j]
M [j+1] = K[j]M [j] =
1
M [j] = (1+j222j )1/2M [j] = (1+22j )1/2M [j]
cos j
j=0
11 CORDIC
CORDIC MICROROTATION
x[j + 1] = x[j] j 2j y[j]
y[j + 1] = y[j] + j 2j x[j]
z[j + 1] = z[j] j tan1(2j )
11 CORDIC
Y[j]
X[j]
SHIFTER
Z[j]
SHIFTER
TABLE
j
j
ADD/SUB
ADD/SUB
sign(Y)
X[j+1]
Y[j+1]
ADD/SUB
sign(Z)
MUX
j+1 =
Z[j+1]
{sign(Y[j+1]) in vectoring
sign(Z[j+1]) in rotation
11 CORDIC
ROTATION MODE
10
1 if z[j] 0
j =
1 if z[j] < 0
PERFORM MICRO-ROTATIONS
FINAL VALUES
11 CORDIC
11
(x1,y1)
(x3,y3)
(xf,, yf)
primitive angles
(x2,y2)
(xin, yin )
x
Figure 11.3: Rotating a vector using microrotations.
11 CORDIC
EXAMPLE OF ROTATION
12
11 CORDIC
13
11 CORDIC
SPECIAL CASES
14
11 CORDIC
15
VECTORING MODE
ROTATE INITIAL VECTOR (xin, yin) UNTIL y = 0
j =
1 if y[j] < 0
1 if y[j] 0
FOR x[0] = xin, y[0] = yin and z[0] = zin, THE FINAL VALUES ARE
2 1/2
)
xf = K(x2in + yin
yf = 0
1 yin
zf = zin + tan ( )
xin
11 CORDIC
EXAMPLE OF VECTORING
16
2 = 0.8645, y = 0.0
ROTATED VECTOR: xR = x2in + yin
R
11 CORDIC
17
j
0
1
2
3
4
5
6
7
8
9
10
11
12
13
y[j]
0.43
-0.32
0.27
-0.065
0.1109
0.0224
-0.0219
0.0002
-0.0108
-0.0053
-0.0025
-0.0011
-0.0004
j
-1
1
-1
1
-1
-1
1
-1
1
1
1
1
1
x[j]
0.75
1.18
1.34
1.4075
1.4156
1.4225
1.4232
1.4236
1.4236
1.4236
1.4236
1.4236
1.4236
1.4236
z[j]
0.0
0.7853
0.3217
0.5667
0.4423
0.5047
0.5360
0.5204
0.5282
0.5243
0.5223
0.5213
0.5208
0.5206
11 CORDIC
18
11 CORDIC
19
ROTATION MODE
CONVERGENCE
|z[i]|
max = z[0]max =
j=0
j=i
tan1(2j )
|z[i]| tan1(2(i1))
tan1(2i1)
OR
1
tan (2 )
j=i
j=i+1
tan1(2j )
tan1(2j )
11 CORDIC
20
i-2
i-1
x
i
11 CORDIC
21
n1
X
i=0
tan1(2j ) + 2n+1
11 CORDIC
22
11 CORDIC
23
IMPLEMENTATIONS
X[0]
Y[0]
j
MUX
Z[0]
SHIFTER
SHIFTER
MUX
TABLE
MUX
j
MUX
ADD/SUB
ADD/SUB
for scaling iterations
MUX
X[j+1]
REG X
X[j]
Z[j+1]
Y[j+1]
REG Y
REG Z
Z[j]
Y[j]
sign(Z[j])
sign(Y[j])
ADD/SUB module includes conditional complementer
ADD/SUB
MUX
j =
{ sign(Y[j]) in vectoring
sign(Z[j]) in rotation
11 CORDIC
24
X[0]
Y[0]
Z[0]
0
ADD/SUB
ADD/SUB
Y[1]
X[1]
ADD/SUB
Z[1]
MUX
sign(Y)
sign(Z)
1
wired shift
(1)
wired shift
(1)
1
1
ADD/SUB
X[2]
ADD/SUB
Y[2]
ADD/SUB
Z[2]
MUX
sign(Y)
sign(Z)
2
X[j]
Y[j]
Z[j]
wired shift
(j)
wired shift
(j)
j
j
ADD/SUB
X[j+1]
ADD/SUB
Y[j+1]
MUX
sign(Y)
ADD/SUB
j =
Z[j+1]
sign(Z)
j+1
sign(Z[j]) in rotation
{ sign(Y[j]) in vectoring
11 CORDIC
25
11 CORDIC
26
in
(xR, yR )
(xin, yin )
11 CORDIC
27
CONVERGENCE PROBLEM
j=i+1
i=j+1
i=j+1
tanh1(2i) + tanh1(2(3j+1))
11 CORDIC
28
FINAL VALUES:
FOR ROTATION MODE
xf = Kh(xin cosh + yin sinh )
yf = Kh(xin sinh + yin cosh )
zf = 0
FOR VECTORING MODE
2 1/2
)
xf = Kh(x2in yin
yf = 0
1 yin
zf = zin + tanh ( )
xin
11 CORDIC
LINEAR COORDINATES
29
xR = xin
yR = yin + xinzin
x[j + 1] = x[j]
y[j + 1] = y[j] + j 2j x[j]
z[j + 1] = z[j] j (2j )
THE SCALING FACTOR IS 1.
FOR THE VECTORING MODE THE FINAL VALUES
xf = xin
yin
zf = zin +
xin
11 CORDIC
30
in
(xR, yR )
(xin, yin )
11 CORDIC
UNIFIED DESCRIPTION
31
1 j
z[j]
tan
(2 ) if m = 1
z[j] (2j )
if m = 0
j
11 CORDIC
32
Coordinates
Rotation mode
j = sign(z[j])+
xf = K1 (xin cos(zin ) yin sin(zin ))
yf = K1 (xin sin(zin ) + yin cos(zin ))
zf = 0
Vectoring mode
j = sign(y[j])+
2 1/2
xf = K1 (x2in + yin
)
yf = 0
zf = zin + tan1 ( xyin
)
in
Circular (m = 1)
j = tan1 (2j )
initial j = 0
j = 0, 1, 2, .., n
K1 1.64676
max 1.74329
Linear (m = 0)
xf = xin
xf = xin
j
j = 2
yf = yin + xin zin
yf = 0
initial j = 0
zf = 0
zf = zin + xyin
in
j = 0, 1, , 2, ..., n
K0 = 1
max = 2 2n
2 1/2
Hyperbolic (m = 1)
xf = K1 (xin cosh(zin ) + yin sinh(zin )) xf = K1 (x2in yin
)
1 j
j = tanh (2 )
yf = K1 (xin sinh(zin ) + yin cosh(zin )) yf = 0
initial j = 1
zf = 0
zf = zin + tanh1 ( xyin
)
in
j = 1, 2, 3, 4, 4, 5...13, 13, ...
K1 0.82816
max 1.11817
+
sign(a) = 1 if a 0, sign(a) = 1 if a < 0.
11 CORDIC
OTHER FUNCTIONS
33
Mode
1
-1
-1
1
-1
-1
-1
-1
rotation
rotation
rotation
vectoring
vectoring
vectoring
vectoring
vectoring
Initial values
Functions
xin
yin zin
xR
yR or zR
1
0
cos
yR = sin
1
0
cosh
yR = sinh
a
a
ae
yR = ae
1
a /2 a2 + 1 zR = cot1(a)
2 1 z = coth1 (a)
a
1
0
a
R
a+1 a1 0
2 a
zR = 0.5 ln(a)
1
a + 14 a 14 0
a
z
=
ln(
R
4 a)
a+b ab 0
2 ab zR = 0.5 ln( ab )
Note: the final values xR and yR are obtained after compensation of the scale
factor.
11 CORDIC
REDUNDANT REPRESENTATION
34
11 CORDIC
35
j is {1, 0, 1}
n
Y
j=1
(1 + 22j )
11 CORDIC
36
since the variable converges to 0, the estimate of the sign uses the bits j 1,
j, and j + 1.
Advantage: uses a redundant representation and produces a constant scaling
factor
Disadvantage: the recurrence requires three terms instead of two
11 CORDIC