COordinate Rotation Digital Computer (CORDIC) is a simple and efficient algorithm to compute arithmetic, trigonometric and hyperbolic functions. In many fields such as DSP, image processing, communication or in industrial sectors, researchers are using CORDIC algorithm to optimize design performance. CORDIC was conceived in 1956 by Jack E. Volder thus it sometimes called as Volder’s algorithm. Invention of CORDIC paved the way for computing several functions by same hardware in an iterative fashion. Later CORDIC algorithm is polished and optimized by several researchers.
CORDIC algorithm is an iterative algorithm which evaluates a function by successive clock wise or anticlockwise micro rotations of co-ordinates. Ultimately it reaches to the final point . These micro rotations are performed by successive additions or subtractions. This eliminates the need of complex multipliers. Using CORDIC algorithm same hardware can be used to evaluate several functions. These property makes CORDIC so popular in VLSI implementation of complex systems.
In this tutorial we have focused on building the basic theory of CORDIC and Verilog implementation of parallel CORDIC blocks. Due to lack of flexibility of the web page, we have given the detailed tutorial in a .pdf file which can be found below. Verilog implementation of two major CORDIC blocks is given in this tutorial. An example of CORDIC iterations to calculate magnitude and phase of a complex number is also shown. Links to download those codes are given below.
CORDIC algorithm can work on three co-ordinate systems which are
Initially CORDIC was used for circular co-ordinates but later it is extended for linear and hyperbolic co-ordinates.
CORDIC algorithm has two modes of operation which are
In each co-ordinate system both the modes are possible. Depending upon the mode of operation CORDIC block evaluates various functions.
Following popular functions can be computed using CORDIC
- Rotation of co-ordinates by any angle
- Conversion to polar co-ordinates
- Magnitude of a complex number and angle between them
- Sine and cosine of an angle
- Hyperbolic sine and cosine of an angle
- Division operation
- Multiplication operation
- Square root operation
In many notable application CORDIC is used to optimize the hardware implementation. Some of the major application areas are mentioned below
- Most direct application of CORDIC is in making calculator where same hardware can be used to calculate several functions.
- In implementations of many complex systems or algorithms CORDIC may be used to evaluate arithmetic functions. Popular use of CORDIC is to find reciprocal of a number or to evaluate division.
- The property, rotation of co-ordinates is used to generate transform domains such as FFT, Wavelet, Curvelet, DCT etc.
- The CORDIC can find magnitude or absolute of two numbers easily in vectoring mode in circular co-ordinates. This property is used in many applications like to matrix using factorization QR decomposition.
- CORDIC can find sine or cosine of an angle by same hardware. This property is used in many DSP applications.
Click here to download the pdf for detailed theory and implementation of CORDIC algorithm.
Click here to download the Verilog code of parallel CORDIC block in circular co-ordinates. This block supports both rotation and vectoring mode i.e. rotation of co-ordinates and magnitude computation.
Click here to download the Verilog code of parallel CORDIC block in linear co-ordinates. This block supports both rotation and vectoring mode i.e. performs both division and multiplication.