Download cse575-21cordic

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
CSE 575
Computer Arithmetic
Spring 2003
Mary Jane Irwin
(www.cse.psu.edu/~mji)
Computer Arithmetic
CSE575 CORDIC.1
© MJIrwin, PSU, 2003
Cordic Algorithms

A convergence method for evaluating
trigonometric (and other) functions
» if a unit-length vector with end point at
(X,Y) = (1,0) is rotated by an angle Z, its new
end point will be at (X,Y) = (cos Z, sin Z)
» simple hardware - shifters, adders, lookup
table

Family of algorithms: rotation, vector
mode
» circular rotations
» linear rotations
» hyperbolic rotations
Computer Arithmetic
CSE575 CORDIC.2
© MJIrwin, PSU, 2003
Real Cordic Rotations
(Xi+1, Yi+1)
Ei+1
Ei
Ri+1
i
O
(Xi, Yi)
Ri
If vector OEi is rotated about
the origin by an angle i, the
new vector OEi+1 will have the
coordinates
Real rotation: Ei+1
Xi+1 = Xi cos i - Yi sin i
Yi+1 = Yi cos i + Xi sin i
Zi+1 = Zi - i
The variable Z allows us to keep track of the total
rotation over several steps. If Z0 is the initial rotation
goal and if the i angles are selected at each step such
that after n iterations Zn tends to 0, then En will be the
end point after rotation by angle Z0
Computer Arithmetic
CSE575 CORDIC.3
© MJIrwin, PSU, 2003
Pseudo Cordic Rotations
(Xi+1, Yi+1)
Ri+1
i
O
Pseudo rotations increase the
vector length to
Ri+1 = Ri(1 + tan2i)1/2
E’i+1
Ei
(Xi, Yi)
Ri
Pseudo rotation: E’i+1
Xi+1 = Xi - Yi tan i
Yi+1 = Yi + Xi tan i
Zi+1 = Zi - i
Expansion factor K = (1 + tan2 i)1/2 depends on
the rotation angles 1 ,2 …, n. If we always
rotate by the same angles, K is a constant.
Computer Arithmetic
CSE575 CORDIC.4
© MJIrwin, PSU, 2003
Basic Cordic Rotations

To simplify pseudo rotations, pick i such
that tan i = di 2-i where di  {-1,1}. Then
Xi+1 = Xi - di Yi 2-i
Yi+1 = Yi + di Xi 2-i
Zi+1 = Zi - di tan-12-i
Computation of Xi+1 and Yi+1 requires an
i-bit right shift and an add/subtract;
Zi+1 only requires an add/subtract and one
table lookup
 Precompute and store the function tan-12
Computer Arithmetic
CSE575 CORDIC.5
© MJIrwin, PSU, 2003
Choosing the Angles
Computer Arithmetic
CSE575 CORDIC.6
Zi+1  zero
i
Ei=tan-12-i di
Zi - diEi = Zi+1
i = 2-i
0 1.000 000 45.000000 1 30.00 – 45.00 = -15.00
1 0.500000 26.565051 -1 -15.00 + 26.57 = 11.57
2 0.250000 14.036243 1
11.57 – 14.04 = -2.47
3 0.125000
7.125016 -1
-2.47 + 7.13 = 4.66
4 0.062500
3.576334 1
4.66 – 3.58 = 1.08
5 0.031250
1.789910 1
1.08 -1.79 = -0.71
6 0.015625
0.895174 -1
-0.71 + 0.90 = 0.19
7 0.007813
0.447614 1
0.19 - 0.45 = -0.26
8 0.003906
0.223811 -1
-0.26 + 0.22 = -0.04
9 0.001953
0.111906 -1
-0.04 + 0.11 = 0.07
© MJIrwin, PSU, 2003
Rotating the Angles

Illustration of the first three rotations for
a Z of 30
(X0, Y0)
O
30
-45
(X2, Y2)
-14
+26.6

(X3, Y3)
(X1, Y1)
Computer Arithmetic
CSE575 CORDIC.8
© MJIrwin, PSU, 2003
Circular Rotation Mode


Choosing di = sign(Zi)  {-1,1} to force Z to 0
gives the rotation mode Cordic iterations
Xi+1 = Xi - di Yi 2-i
Yi+1 = Yi + di Xi 2-i
Zi+1 = Zi - di Ei
where Ei = tan-12-i
After n iterations, when Zn is sufficiently close
to 0, then we have Z = i and
Xn = K(X cos Z - Y sin Z)
where K = 1.646 760 258 …
Yn = K(Y cos Z + X sin Z)
Zn = 0
Rule: Choose di  {-1,1} such that Z  0
Computes cos Z and sin Z by starting with
X = 1/K = 0.607 252 935 … and Y = 0
 For k bits of precision, run it k iterations since
-12-i  2-i
for
large
i
>
k,
tan
Computer Arithmetic
CSE575 CORDIC.9
© MJIrwin, PSU, 2003

Convergence Domain



Convergence of Z to 0 happens because each
angle is more than half the previous angle.
The domain of convergence is
0  Z  99.7
which is the sum of all the angles given in
slide 6
Outside this range, we can use trig identities
to convert to the range
cos (Z  2j) = cos Z
cos (Z - ) = - cos Z
Computer Arithmetic
sin (Z  2j) = sin Z
sin (Z - ) = - sin Z
CSE575 CORDIC.10
© MJIrwin, PSU, 2003
Rotation Example
Computing cos 30 (= 0.866 025) and sin 30 (=0.500 000)
i
di
Xi+1  cos
Yi+1  sin
Zi+1  0
1/K = 0.607 253
0.000 000
30.000 000
0
1
0.607 253
0.607 253
-15.000 000
1
-1
0.910 880
0.303 627
11.565 051
2
1
0.834 973
0.531 347
-2.471 192
3
-1
0.901 391
0.426 975
4.653 824
4
1
0.874 705
0.483 312
1.077 490
5
1
0.859 602
0.510 647
-0.712 420
6
-1
0.867 581
0.497 216
0.182 754
7
1
0.863 697
0.503 994
-0.264 860
8
-1
0.865 666
0.500 620
-0.041 049
...
...
...
Computer Arithmetic
...
CSE575 CORDIC.11
...
© MJIrwin, PSU, 2003
Circular Vector Mode

Choosing di = - sign(Xi Yi)  {-1,1} to force Y to
0 gives the vector mode Cordic iterations
Xi+1 = Xi - di Yi 2-i
Yi+1 = Yi + di Xi 2-i
Zi+1 = Zi - di Ei

where Ei = tan-12-i
After n iterations, when Yn is sufficiently close
to 0, then we have tan (i) = -Y/Z
Xn = K (X2 + Y2)
where K = 1.646 760 258 …
Yn = 0
Zn = Z + tan-1 (Y/X)
Rule: Choose di  {-1,1} such that Y  0


Computes tan-1 Y by starting with X = 1 and Z = 0
For k bits of precision, run it k iterations since
for large i > k, tan-12-i  2-i
Computer Arithmetic
CSE575 CORDIC.12
© MJIrwin, PSU, 2003
Vector Example
Computing tan-1 0.414 210 (= 22.499 830)
di
Xi+1  K(X2 + Y2)
Yi+1  0
Zi+1  tan-1
1.000 000
0.414 210
0.000 000
0
-1
1.414 210
-0.585 790
45.000 000
1
1
1.707 105
0.121 315
18.434 949
2
-1
1.737 434
-0.305 461
32.471 192
3
1
1.775 617
-0.088 282
25.346 176
4
1
1.781 135
0.022 694
21.769 842
5
-1
1.781 844
-0.032 966
23.559 752
6
1
1.782 359
-0.005 125
22.664 578
7
1
1.782 399
0.008 800
22.216 964
8
-1
1.782 433
0.000 184
22.440 775
...
...
Computer Arithmetic
...
...
CSE575 CORDIC.13
...
© MJIrwin, PSU, 2003
Circular Cordic Hardware
X
shift
i counter
shift
Y
Z
values of
Ei= tan-12-i
Computer Arithmetic
lookup
table
CSE575 CORDIC.14



Xi+1 = Xi – di Yi 2-i
Yi+1 = Yi – di Xi 2-i
Zi+1 = Zi – di Ei
di control
© MJIrwin, PSU, 2003
Generalized Cordic

Generalized Cordic defined as
Xi+1 = Xi -  di Yi 2-i
Yi+1 = Yi + di Xi 2-i
Zi+1 = Zi - di Ei

Defining  and Ei gives
 = 1 Circular rotations (basic)
 = 0 Linear rotations
 = -1 Hyperbolic rotations
Computer Arithmetic
CSE575 CORDIC.15
Ei = tan-12-i
Ei = 2-i
Ei = tanh-12-i
© MJIrwin, PSU, 2003
Generalized Rotations
2(area AOB)
angle AOB = -------------(OU)2
B
2(area EOF)
angle EOF = --------------(OW)2
=1
A
F
 = -1
O
E
W
V U
=0
vector OV
Computer Arithmetic
CSE575 CORDIC.16
© MJIrwin, PSU, 2003
Enhanced Cordic Hardware
X
Xi+1
X
= Xi – di Yi 2-i
i counter
Y
Yi+1 = Yi + di Xi
2-i
shift

shift

Y
Zi+1 = Zi - di Ei
Z

Computer Arithmetic
Z
Ei lookup table
(tan-12-i, 2-i, tanh-12-i)
CSE575 CORDIC.17

di control
© MJIrwin, PSU, 2003
Circular Mode ( = 1)

Circular rotation mode
Computes functions
Xn = K(X cos Z - Y sin Z)
cos Z and sin Z
Yn = K(Y cos Z + X sin Z)
X = 1/K and Y = 0
Zn = 0
Rule: Choose di  {-1,1} such that Z  0
 Circular vector mode
Xn = K(X2 + Y2)1/2
Yn = 0
Zn = Z + tan-1 (Y/X)
Rule: Choose di  {-1,1}
Computer Arithmetic
CSE575 CORDIC.18
Computes function
tan-1 Y
X = 1 and Z = 0
such that Y  0
© MJIrwin, PSU, 2003
Linear Mode ( = 0)

Linear rotation mode
Xn = X
Computes functions
multiply and multiply-add
Yn = Y + X * Z
Y=0
Zn = 0
Rule: Choose di  {-1,1} such that Z  0
 Linear vector mode
Xn = X
Computes functions
divide and divide-add
Yn = 0
Z=0
Zn = Z + Y/X
Rule: Choose di  {-1,1} such that Y  0
Computer Arithmetic
CSE575 CORDIC.19
© MJIrwin, PSU, 2003
Hyperbolic Mode ( = -1)

Hyperbolic rotation mode
Xn = K’(X cosh Z + Y sinh Z)
Computes functions
hyperbolic sin and cos
Yn = K’(Y cosh Z + X sinh Z)
X = 1/K’ and Y = 0
Zn = 0
Rule: Choose di  {-1,1} such that Z  0
K’ = 0.828 159 360 …
 Hyperbolic vector mode
Computes functions
Xn = K’(X2 - Y2)1/2
hyperbolic tanh-1 y
Yn = 0
X = 1 and Z = 0
Zn = Z + tanh-1 (Y/X)
Rule: Choose di  {-1,1} such that Y  0
Computer Arithmetic
CSE575 CORDIC.20
© MJIrwin, PSU, 2003
Cordic Computation Unit
X
Y
Z
X
Y
Z
K(X cosZ – Y sinZ)
K(Y cosZ + X sinZ)
0
CORDIC
Ei =
tan-12-i
Vector mode: di= -sign(Xi  Yi); Yi0
CORDIC
Ciclr
=1
Rotation mode: di=sign(Zi); Zi0
K (X2 + Y2)
0
Z + tan-1(Y/X)
For cos & sin, set X=1/K, Y=0
For tan-1, set X=1, Z=0
Linear
=0
X
Y
Z
X
Y
Z
Ei = 2-i
For multiply, set Y=0
CORDIC
K’(X coshZ – Y sinhZ)
K’(Y coshZ + X sinhZ)
0
cos-1W=tan-1[(1-W2)/W];sin-1W=tan-1[W/(1-W2)]
X
0
Z + Y/X
CORDIC
Ei =
tanh-1
2-i
CORDIC
Hprblc X
Y
 = -1
Z
X
Y + X*Z
0
CORDIC
tanZ=sinZ/cosZ
K’ (X2 - Y2)
0
Z + tanh-1(Y/X)
For divide, set Z=0
For cosh & sinh, set X=1/K’, Y=0
tanhZ=sinhZ/coshZ; Wt=Et lnW
Ez=sinhZ+coshZ
X
Y
Z
For tanh-1, set X=1, Z=0
cosh-1W=ln[W+(1-W2)];sinh-1W=ln[W+(1+W2)]
lnW=2tanh-1|(W-1)/(W+1)|;W=((W+¼)2-(W-¼)2)
In executing the iterations for  = -1, steps 4, 13, 40, 121, …, j, 3j+1, … must be repeated.
Computer Arithmetic
CSE575 CORDIC.21
© MJIrwin, PSU, 2003
Cordic Summary
Can compute virtually all trig functions of
common interest
 When the number of iterations is fixed,
K and K’ are constants

» Thus, we can not stop computing if Z (or Y)
becomes 0 (except when  = 0); we always
need k iterations for k digits of precision

Cordic can be extended to higher radices
(e.g., for base 4, di{-2,-1,1,2} and the
number of iterations will be cut in half
with essentially the same hardware)
Computer Arithmetic
CSE575 CORDIC.22
© MJIrwin, PSU, 2003
Key References
Duprat and Muller, The CORDIC algorithm: New results for
fast VLSI implementation, IEEE Trans. on Computers,
42(2):168-178, 1993.
Parhami, Computer Arithmetic, Oxford Univ. Press, 1999.
Phatak, Double step branching CORDIC, IEEE Trans. on
Computers, 47(5)587-603, May 1998.
Vachss, The CORDIC magnification function, IEEE Micro,
7(5):83-83, Oct. 1987.
Volder, The CORDIC trigonometric computing technique,
IRE Trans. Elecronic Computers, Vol 8, pp. 330-335,
Sept. 1959.
Walther, A unified algorithm for elementary functions,
Proc. Spring Joint Computer Conf, pp. 379-385, 1971.
Computer Arithmetic
CSE575 CORDIC.23
© MJIrwin, PSU, 2003