Verilog code for sine cos and arctan using CORDIC Algorithm

VLSI Universe
5 min readJun 18, 2021

Hardware implementation of trigonometric functions such as sine, cosine and tangent functions using Verilog HDL. Here we make use of CORDIC algorithm to implement these functions in Verilog. It is important to to write a synthesizable code in Verilog to implement on hardware such as FPGA’s. The computation of the functions helps to analyze sine wave generation and phase and magnitude calculation of several signals.

Continue reading at VLSI Universe

Verilog code for sine cos and arctan using CORDIC Algorithm
Verilog code for sine cos and arctan using CORDIC Algorithm

Table of Contents

1. Basics of CORDIC Algorithm
2. Working of CORDIC Algorithm
3. Sine and Cosine function Implementation in Verilog
4. arctan function Implementation in Verilog

1. Basics of CORDIC Algorithm

1.1 Need for CORDIC Algorithm

There are several approaches such as Lookup table method and Polynomial series (for example, Taylor series) to implement these sine, cosine and tangent trigonometric functions. They have complications such as cost of the implementation and the hardware complexity of the design.

In case Lookup table method it is fast but as the precision of the input angle increases the table size increases exponentially. And In case of Taylor’s series method it is slow and require more hardware to implement. Hence there a need for an low cost and faster algorithm to implement these functions.

Continue reading at VLSI Universe

1.2 Benefits of using CORDIC algorithm

It is a adder/subtractor and shift register based algorithm which does not need multipliers or dividers which makes the task easy. The name CORDIC come form Co-ordinate Rotational Digital Computer. It also require a small lookup table along with adders and shifters which makes it very hardware efficient and is faster can be used for FPGA Implementation.

2. Working of CORDIC Algorithm

The algorithm is mainly based on rotating a point (x1,y1) to point (x2,y2) with an angle of difference “Ɵ”, as shown in the below figure.

Verilog code for sine cos and arctan using CORDIC Algorithm
Verilog code for sine cos and arctan using CORDIC Algorithm

X2 = X1cosθ — Y1sinθ
Y2 = X1sinθ + Y1cosθ — — — — — — — — — — (1)

The key concept of the CORDIC algorithm is to rotate the point (X1,Y1) by standard angles of θ, where tanθ = 2^(−𝑖). Therefore the above equations change to,

X2 = X1 — Y1tanθ
Y2 = X1 + Y1tanθ — — — — — — — — — — — — — (2)

The CORDIC algorithm can be made to work with two modes of operation. Rotating mode of CORDIC algorithm helps to evaluate trigonometric functions (cosine and sine). Where as Vectoring mode of CORDIC algorithm helps to evaluate magnitude and phase of a complex signal by computing tangent function.

Continue reading at VLSI Universe

2.1 Rotating mode of CORDIC Algorithm

CORDIC algorithm is a iterative rotation algorithm, where successive rotations are made to a vector point (X,Y) with an angles (standard tanθ = 2^(−𝑖) where i = 0,1,2,3..) until the desired angle is reached.

Here each successive step calculates a rotation by multiplying the previous vector Vi-1 with some scale Ri (Rotation matrix). The next vector Vi is given by,

Vi=Vi-1 x Ri

The scaling rotation matrix Ri is given as below,

CORDIC Algorithm
CORDIC Algorithm

Further to have the rotation matrix in the for of tangent functions, the above equation can be modified as

CORDIC Algorithm
CORDIC Algorithm

In the above equation the values Xi-1 and Yi-1 are the factors of tangent function tanθ = 2^(−𝑖). Replacing the tan function with 2^(-i)² which is nothing but 2^(-2i) in the scale factor. The modified scale factor Ki will be as below,

CORDIC Algorithm
CORDIC Algorithm

In the above equation, the value of scale factor Ki reaches 0.6073 approximately, when the i value goes to infinity. Means infinite number of iterations.
Replacing the Ki with the value 0.6073, the gain becomes 1.647.

Continue reading at VLSI Universe

CORDIC Algorithm
CORDIC Algorithm

2.2 Vectoring mode of CORDIC Algorithm

With the slight modification in the CORDIC algorithm, the CORDIC algorithm can be mode to work in the vectoring mode.
The Vector with X is in the positive co-ordinate and have the Y axis as arbitrary. The main goal is to have as many as rotations of X axis until the Y coordinate reaches to zero.

At each iteration the Y coordinate value will determine the direction in which rotation has to be carried out.

The final βi value will be the desired total angle of rotation.

The final x value will be the magnitude of the vector multiplied by K i.e. K(x²+y²).

The below table summarizes the rotation mode and vectoring mode of CORDIC algorithm.

CORDIC Algorithm
CORDIC Algorithm

The function arctan implementation in CORDIC algorithm

The trigonometric function arccos (cos inverse) implementation using arctan (tan inverse) by vectoring mode of CORDIC algorithm in Verilog.

Continue reading at VLSI Universe

arccos(x) = arctan(√(𝟏−𝒙^𝟐 )/𝒙) (1)

Input angle is given in the form of x*1000 where x represents input in radian further this gain is compensated in the equation (√(1−𝑥² )/𝑥).

The phase output is scaled with a gain of 1000.

Let us now write a complete and synthesizable Verilog HDL code for all three trigonometric functions.

3. Sine and Cosine Implementation in Verilog using CORDIC algorithm

1. Cosine & Sine implementation using rotating mode of CORDIC in Verilog.

2. Input angle is given in the form of (2³²*i)/360 where i represents input phase angle in degree.

3. The output is scaled with a gain of 32000.

Continue reading at VLSI Universe

--

--

VLSI Universe

VLSI Universe is a number one source for all digital analog cmos VLSI topics