COordinate Rotation Digital Computer
developed by Jack Volder in 1959
developed as an iterative algorithm to convert between polar and cartesian coordinates using ONLY shift, add, and subtract operations
Has two modes of operation (circular rotation and vectoring) that can be used to support computation of trig,hyperbolic, linear and logarithmic functions, sin/cos, tan, polar-rect coordinate conversion
Circular rotation mode of operation:
Using an iterative algorithm, transform a vector to a resulting vector using N iterations
We'll address the two multiplications of each equation to simplify them
we are going to restrict allowable rotations such that so that the multiplication can be replaced by a shift and add/sub. We'll predetermine allowable rotations and store them in a table:
i | degrees | |||
---|---|---|---|---|
0 | turn | |||
1 | ||||
2 | ||||
3 | ||||
4 | ||||
5 | ||||
6 | ||||
7 | ||||
8 | ||||
9 | ||||
10 | ||||
... | ... | ... | ... | ... |
To achieve other angles not in the restricted set, we can allow a combination of multiple rotations from any of the allowable angles.
The series of rotations can be first calculated using an iterative process with an angle accumulator R as follows
Initialize R to
In each iteration i, we will rotate by or according to R: ;
A method to increase the range will be achieved with an initialization step
Iteration:
Note:
;
therefore
We can pre-calculate each cos as () and use the fact that
Furthermore we can save all the multiplications by till the end and multiply just the final result by
Hence, each stage is reduced to a shift and an add/sub for X and Y !!!!
Introduce initial rotation to reduce |R| to be less than
May note that tan is unique only an interval (Q1 or Q4), but this doesn't turn out to be an issue in the meathod we'll use ...
We'll use an alternative, cheap initial rotation without use of trigonometric functions.
While only Q2 and Q3 rotation vectors are a problem, Volder proposed to rotate all inputs by
Example
n+1 iterations including initial iteration:
final scale by can be performed if desired (converges to approximately a factor of 1.647 for a few iterations or more )
single hardware iteration stage
pipelining allows throughput to "match" system clock rate (still have latency)
initialize system with X=A, Y=0,
initialize a pipeline implementation at each time t:
; ; =
If mapping the full binary range of n bits to the range of angles around the circle, let 0000 be angle of 0 and 1111...1 be the last angle (adjacent and clock-wise of 0)
CORDIC is naturally pipelined (upper right), accepting new initial values for X,Y and every cycle
Applications: