INTRODUCTION
At present, many of the computations in signal processing, design of high speed VLSI architectures for real-time digital signal processing and wireless communication applications are linked with complex analysis of several functions. These complex functions are combination of sine and cosine terms i.e. trigonometric, inverse trigonometric, logarithm, exponential, multiplication, and division functions which require high computational power.
The commonly used software solutions for the digital implementation of these functions are table lookup method and polynomial expansions, requiring number of multiplication and additions/subtractions.
There is a real need of hardware efficient algorithms in the present generation of technologies because of the intense signal processing requirements needed by them. Thus, the current trend is back toward hardware efficient algorithms. Most of the complex functions can be split into elementary functions. Many of those applications require elementary calculations like sin and cosine. CORDIC algorithm have wide range of attractive features that can compute almost all elementary functions with simple architecture. So that design of such architectures with low cost low power FPGA, which would satisfy the performance requirements for the signal processing applications. The requirements such as Three dimensional (3D) graphics, video/image/ signal processing systems become simple.
18ES624 FPGA-BASED SYSTEM DESIGN
Sin and Cosine wave generator using CORDIC algorithm in FPGA
Namrata A. Mahakalkar BL.EN.P2EBS18006
Department of CSE
Amrita Vishwa Vidyapeetham University Bengaluru Campus, Bengaluru.
Meena Belwal Ass. Professor
Department of CSE
Amrita Vishwa Vidyapeetham University Bengaluru Campus, Bengaluru.
CORDIC(Coordinate Rotation Digital Computer) algorithm:
The original work is credited to Jack E. volder in 1959. shift – add algorithms collectively known as CORDIC for computing Sine and Cosine samples, trigonometric functions and other related mathematical functions CORDIC technique has been used in many applications, such as signal processing, linear transformations, digital filters and matrix based computations. Ultra low power systems can be efficiently developed by CORDIC.
In serial architecture only one basic CORDIC block is present which contains three simple adder/Subtractors and two shifters with a ROM containing a look up table. There are three methods to implement the CORDIC algorithm viz. Unrolled, Rolled and Pipelined architecture. The CORDIC method can be employed in two different modes: the “rotation” mode and the “vectoring” mode.
LITERATURE SURVEY
In paper [1] authors used unrolled / unfolded architecture. It has been implemented to design a DDS (Direct Digital Synthesis) CORDIC Oscillator. They have used 8 bit implementation. Direct Digital Synthesis: It is implemented in FPGA and the sine output of this oscillator was given to the Digital to Analog converter (DAC) to verify the functionality of this oscillator. The analog output was fed to the Digital Storage Oscilloscope (DSO) and the Sine wave output was verified for variation in angle, angle correction and gain correction. This DDS CORDIC oscillator has applications in FFT and carrier recovery loops in software defined radios. It is identified that the gain correction and angle correction is necessary for obtaining the sine and cosine samples. This CORDIC based oscillator can be used in Software defined radio. The sine and cosine samples can be used for modulation and demodulation.
Where as paper [2] discusses more about Sine/Cosine Generator Using Pipelined CORDIC Processor . This paper presents a hardware efficient architecture by using CORDIC algorithm for the calculation of sine and cosine functions. This approach is simulated using ModelSim simulation software, synthesized using Xilinx ISE design suite and the proposed architecture is implemented on Xilinx FPGA target device i.e. SPARTAN 3E. N clock cycle output of a single stage CORDIC hardware is implemeted by 8 stage CORDIC hardware. Hence the speed is increased and hardware also.
The pipelined architecture takes the angle/phase as input and gives both sine and cosine for the given input in predetermined number of micro rotations. These micro rotations are decided by the accuracy demanded by the application. Implemented using 8bit.The device utilization summary and timing reports are presented
Paper [3] also focuses on Calculation of Sine and Cosine of an Angle using the CORDIC Algorithm. CORDIC algorithm has been implemented and simulated for calculating the Sine and Cosine of an angle represented using 8 bits, on ISim simulator using the Verilog HDL programming language.
The system is implemented using Virtex5 XC5VF70T FPGA with Xilinx ISE12.1 and Verilog Hardware Description Language.
Paper [4] discusses about Implementation of Trigonometric Function using CORDIC Algorithms. This paper presents the trigonometric function implementation by using CORDIC algorithm in rotation mode for circular coordinate system. The CORDIC technique is used in order to generating the output angle between range 0o to 90o and error analysis is concern.
The result showed that the average percentage error is about 0.042% at angles between ranges 00 to 900. But the average percentage error rose up to 45% at angle 90o and above.
So, this method is very accurate at the 1st quadrant. The mirror properties method is used to find out an angle at 2nd, 3rd and 4th quadrant.
RESEARCH GAPS
1) Accuracy can be increased by increasing the number of bits for all papers.
2) Paper 1,3 and 4 computationally slower than paper 2.
3) More hardware used in paper 2 than that of other papers.
IMPLEMENTATION
Sin and cosine wave generation using CORDIC algorithm. Here we are using Xilinx ISE for simulation. Implementation of algorithm is carried out using verilog code as well as C code.
How CORDIC Algorithm works?
In FPGA perspective, for implementing the component level detailed architecture we have to think in low level design module can be build or available with us in FPGA . In CORDIC algorithm we have small memory so we can store small look up table. Based on look up table values and additional hardware of multiplexer, added, subtractor and multiplier we can generate the any angle sine/cosine value. We can store small look up table for the sin and cosine values of 2es power number .we need to store total 9 values as 2^8=256 which is closest lesser 2es power term to 360. It works in circular manor hence total 0degree to 360degree makes complete circle.
We will go with an example, if I want to find the sine/cosine of angle 151.
STEP [1]
Take 8 bit sin cosine valued look up table. Multiplexer are connected in bellow fashion to the binary value representation of desired angle. 151(dec) = 10010111(bin)
STEP [2]
[2.1] Divide the angle value by the predefined 2es power value i.e. 128.
[2.2] Perform modulus operation on angle and 2es power value i.e. 128
STEP [3]
Original XY coordinate values we can consider any but here for clear understanding we are considering Xin= 1 and Yin=0;
Output X and Y coordinates are given by following equations
( ) ( )------(1)
( ) ( )------(2)
Here alpha(a) is the angle got from step 1.
If the result of step 2.1 is 1 then above formula will give some value for the Xout and Yout otherwise zero.
STEP [4]
Output from step 2.2 (Modulus operation output) becomes angle value.
Xout and Yout from step 3 will become Xin and Yin values respectively for further calculation.
STEP [5]
Repeat the step 2 and 3 for next 7 iterations, from 2^6=64 to 2^0=1.
Final Xout and Yout values becomes cosine and sine values of given angle respectively.
For one angle we get sine and cosine values with 1 degree accuracy.
0
1
0
1
0
1
0
1
Xin
Yin
cos
sin
Substractor
Adder
Xout
Yout
STEP[6]
For generating sine and cosine wave, we give the angle value starting from angle 1 to angle 360.
Above 5 steps gives the sine and cosine value for each angle that means 720 values. These 720 values represented as sine and cosine wave.
Verilog Implementation:
Multiplexer32bit
module multiplexer32bit(zero,sinOrcos,outmux,select);
input [31:0] zero;
input [31:0] sinOrcos;
output [31:0] outmux;
input select;
wire [31:0] zero,sinOrcos;
reg [31:0]outmux;
always@(zero,sinOrcos,select)
begin
if(select==0)
outmux=zero;
else
outmux=sinOrcos;
end
endmodule
Sin_cos_val_gen
module sin_cos_val_gen(angle,sin_bit_8,cos_bit_8,sin_bit_7,cos_bit_7,sin_bit_6,cos_bit_6,sin_bit_5,cos_bit_5,
sin_bit_4,cos_bit_4,sin_bit_3,cos_bit_3,sin_bit_2,cos_bit_2,sin_bit_1,cos_bit_1,sin_bit_0,cos_bit_0);
input [8:0] angle;
output [31:0] sin_bit_8;
output [31:0] cos_bit_8;
output [31:0] sin_bit_7;
output [31:0] cos_bit_7;
output [31:0] sin_bit_6;
output [31:0] cos_bit_6;
output [31:0] sin_bit_5;
output [31:0] cos_bit_5;
output [31:0] sin_bit_4;
output [31:0] cos_bit_4;
output [31:0] sin_bit_3;
output [31:0] cos_bit_3;
output [31:0] sin_bit_2;
output [31:0] cos_bit_2;
output [31:0] sin_bit_1;
output [31:0] cos_bit_1;
output [31:0] sin_bit_0;
output [31:0] cos_bit_0;
multiplexer32bit bit_8_sin (32'b00000000000000000000000000000000,32'b00000111101000100000000000000000,sin_bit_8,angle[8]);
multiplexer32bit bit_8_cos (32'b00000000000000000000000000000000,32'b11000010000100101101000000000000,cos_bit_8,angle[8]);
multiplexer32bit bit_7_sin (32'b00000000000000000000000000000000,32'b11001001101110100000000000000000,sin_bit_7,angle[7]);
multiplexer32bit bit_7_cos (32'b00000000000000000000000000000000,32'b01100010011001000010000000000000,cos_bit_7,angle[7]);
multiplexer32bit bit_6_sin (32'b00000000000000000000000000000000,32'b11100110000100000000000000000000,sin_bit_6,angle[6]);
multiplexer32bit bit_6_cos (32'b00000000000000000000000000000000,32'b01110000001101000111000000000000,cos_bit_6,angle[6]);
multiplexer32bit bit_5_sin (32'b00000000000000000000000000000000,32'b10000111101001100000000000000000,sin_bit_5,angle[5]);
multiplexer32bit bit_5_cos (32'b00000000000000000000000000000000,32'b11011001000110010010000000000000,cos_bit_5,angle[5]);
multiplexer32bit bit_4_sin (32'b00000000000000000000000000000000,32'b10001101000110100000000000000000,sin_bit_4,angle[4]);
multiplexer32bit bit_4_cos (32'b00000000000000000000000000000000,32'b11110110000100010011000000000000,cos_bit_4,angle[4]);
multiplexer32bit bit_3_sin (32'b00000000000000000000000000000000,32'b10001110011100000000000000000000,sin_bit_3,angle[3]);
multiplexer32bit bit_3_cos (32'b00000000000000000000000000000000,32'b11111101011111011100000000000000,cos_bit_3,angle[3]);
multiplexer32bit bit_2_sin (32'b00000000000000000000000000000000,32'b10001110110110000000000000000000,sin_bit_2,angle[2]);
multiplexer32bit bit_2_cos (32'b00000000000000000000000000000000,32'b11111111010111000011000000000000,cos_bit_2,angle[2]);
multiplexer32bit bit_1_sin (32'b00000000000000000000000000000000,32'b10001110111010000000000000000000,sin_bit_1,angle[1]);
multiplexer32bit bit_1_cos (32'b00000000000000000000000000000000,32'b11111111110100100010000000000000,cos_bit_1,angle[1]);
multiplexer32bit bit_0_sin (32'b00000000000000000000000000000000,32'b10001110111100100000000000000000,sin_bit_0,angle[0]);
multiplexer32bit bit_0_cos (32'b00000000000000000000000000000000,32'b11111111111100101110000000000000,cos_bit_0,angle[0]);
endmodule
x_y_small_unit1
Designed model diagram is as shown bellow
module x_y_small_unit1(xin,yin,cosin,sinin,xout,yout);
input [31:0] xin;
input [31:0] yin;
input [31:0] cosin;
input [31:0] sinin;
output [63:0] xout;
output [63:0] yout;
reg [63:0] xout,yout;
reg mux_1_sel, mux_2_sel;
wire [63:0] xcos1,ysin1,xsin1,ycos1,xout_reg,yout_reg;
multipler_2 xcos(xin,cosin,xcos1);
multipler_2 ysin(yin,sinin,ysin1);
multipler_2 xsin(xin,sinin,xsin1);
multipler_2 ycos(yin,cosin,ycos1);
assign xout_reg=xcos1-ysin1;
assign yout_reg=xsin1+ycos1;
always @ (outmux_yout,outmux_xout)
begin
xout = outmux_xout;
yout = outmux_yout;
end
always @ (xin)
begin
if (sinin == 32'b00000000000000000000000000000000)
mux_1_sel = 1'b0;
else
mux_1_sel = 1'b1;
end
always @ (yin)
begin
if (cosin == 32'b00000000000000000000000000000000)
mux_2_sel = 1'b0;
else
mux_2_sel = 1'b1;
end
multiplexer64bit_1 xsubmul(xin,xout_reg,outmux_xout,mux_1_sel);
multiplexer64bit_1 yaddmul(yin,yout_reg,outmux_yout,mux_2_sel);
endmodule
x_y_small_unit1
Top_level_module
module top_level(angle_top_lvl,sin_tl,cos_tl,xin_z,yin_z);
input [8:0] angle_top_lvl;
output [63:0] sin_tl;
output [63:0] cos_tl;
input [31:0] xin_z;
input [31:0] yin_z;
reg [63:0] sin_tl_reg,cos_tl_reg;
//assign xin_z=32'b00000000000000000000000000000001;
///assign yin_z=32'b00000000000000000000000000000000;
wire [31:0] sin_bit_8_wire,
cos_bit_8_wire,
sin_bit_7_wire,
cos_bit_7_wire,
sin_bit_6_wire,
cos_bit_6_wire,
sin_bit_5_wire,
cos_bit_5_wire,
sin_bit_4_wire,
cos_bit_4_wire,
sin_bit_3_wire,
cos_bit_3_wire,
sin_bit_2_wire,
cos_bit_2_wire,
sin_bit_1_wire,
cos_bit_1_wire,
sin_bit_0_wire,
cos_bit_0_wire;
sin_cos_val_gen sinCosValGen(
angle_top_lvl,
sin_bit_8,
cos_bit_8,
sin_bit_7,
cos_bit_7,
sin_bit_6,
cos_bit_6,
sin_bit_5,
cos_bit_5,
sin_bit_4,
cos_bit_4,
sin_bit_3,
cos_bit_3,
sin_bit_2,
cos_bit_2,
sin_bit_1,
cos_bit_1,
sin_bit_0,
cos_bit_0);
assign sin_bit_8_wire = sin_bit_8;
assign cos_bit_8_wire = cos_bit_8;
assign sin_bit_7_wire = sin_bit_7;
assign cos_bit_7_wire = cos_bit_7;
assign sin_bit_6_wire = sin_bit_6;
assign cos_bit_6_wire = cos_bit_6;
//x_y_small_unit1 xySmallUnit8(.xin(xin),.yin(yin),.cosin(cos_bit_8_wire),.sinin(sin_bit_8_wire),.xout(xout8),.yout(yout8));
x_y_small_unit1 xySmallUnit8(xin_z,yin_z,cos_bit_8,sin_bit_8,xout8,yout8);
x_y_small_unit1 xySmallUnit7(xout8,yout8,cos_bit_7,sin_bit_7,xout7,yout7);
x_y_small_unit1 xySmallUnit6(xout7,yout7,cos_bit_6,sin_bit_6,xout6,yout6);
x_y_small_unit1 xySmallUnit5(xout6,yout6,cos_bit_5,sin_bit_5,xout5,yout5);
x_y_small_unit1 xySmallUnit4(xout5,yout5,cos_bit_4,sin_bit_4,xout4,yout4);
x_y_small_unit1 xySmallUnit3(xout4,yout4,cos_bit_3,sin_bit_3,xout3,yout3);
x_y_small_unit1 xySmallUnit2(xout3,yout3,cos_bit_2,sin_bit_2,xout2,yout2);
x_y_small_unit1 xySmallUnit1(xout2,yout2,cos_bit_1,sin_bit_1,xout1,yout1);
x_y_small_unit1 xySmallUnit0(xout1,yout1,cos_bit_0,sin_bit_0,xout0,yout0);
always @ (angle_top_lvl)
begin
sin_tl_reg=yout0;
cos_tl_reg=xout0;
end
assign sin_tl = sin_tl_reg;
assign cos_tl = cos_tl_reg;
endmodule
‘C’ code Implementation :
#include<stdio.h>
void main()
{
int angle,angleOri;
int i,j,resDiv;
int resMod;
float sinval,cosval;
float xin,yin,xout,yout;
float xinArr[360],yinArr[360];
xin=1;
yin=0;
int posArr[9]={256,128,64,32,16,8,4,2,1};
float sinlookup[9]={-0.9702,0.7880,0.8987,0.5299,0.2756,0.1391,0.06975,0.03489,0.01745};
float coslookup[9]={-0.2419,-0.61566,0.4383,0.84804,0.9612,0.9902,0.9975,0.9993,0.9998};
for(angleOri=1;angleOri<360;angleOri++)
{
angle=angleOri;
for(i=0;i<9;i++)
{
resDiv=angle/posArr[i];
resMod=angle%posArr[i];
if(resDiv==1)
{
sinval=sinlookup[i];
cosval=coslookup[i];
xout=(xin*cosval)-(yin*sinval);
yout=(xin*sinval)+(yin*cosval);
xin=xout;
yin=yout;
}
angle=resMod;
}
printf("\nCos value of %d is %f", angleOri,xout);
printf("\nsin value of %d is %f", angleOri,yout);
}
}
RESULTS
C code output gives all the sine and cosine values for angle starting from 1 to 360. Cos value of angle 1 is 0.999800 sin value of angle 1 is 0.017450 Cos value of angle 2 is 0.998491 sin value of angle 2 is 0.052321 Cos value of angle 3 is 0.994248 sin value of angle 3 is 0.104484 Cos value of angle 4 is 0.984474 sin value of angle 4 is 0.173571 Cos value of angle 5 is 0.965493 sin value of angle 5 is 0.258681 Cos value of angle 6 is 0.933022 sin value of angle 6 is 0.358122 Cos value of angle 7 is 0.882249 sin value of angle 7 is 0.469055 Cos value of angle 8 is 0.808357 sin value of angle 8 is 0.587179 Cos value of angle 9 is 0.706507 sin value of angle 9 is 0.706271 Cos value of angle 10 is 0.573091 sin value of angle 10 is 0.818047 Cos value of angle 11 is 0.406447 sin value of angle 11 is 0.912142 Cos value of angle 12 is 0.207954 sin value of angle 12 is 0.976563 Cos value of angle 13 is -0.016985 sin value of angle 13 is 0.998125 Cos value of angle 14 is -0.257820 sin value of angle 14 is 0.964161 Cos value of angle 15 is -0.498375 sin value of angle 15 is 0.864373 Cos value of angle 16 is -0.717259 sin value of angle 16 is 0.693483 Cos value of angle 17 is -0.888560
sin value of angle 17 is 0.453440 Cos value of angle 18 is -0.985029 sin value of angle 18 is 0.156667 Cos value of angle 19 is -0.982169 sin value of angle 19 is -0.172501 Cos value of angle 20 is -0.863833 sin value of angle 20 is -0.497934 Cos value of angle 21 is -0.627917 sin value of angle 21 is -0.774277 Cos value of angle 22 is -0.292106 sin value of angle 22 is -0.952896 Cos value of angle 23 is 0.103385 sin value of angle 23 is -0.991013 Cos value of angle 24 is 0.497384 sin value of angle 24 is -0.863199 Cos value of angle 25 is 0.815380 sin value of angle 25 is -0.572076 Cos value of angle 26 is 0.983392 sin value of angle 26 is -0.156789 Cos value of angle 27 is 0.947146 sin value of angle 27 is 0.306578 Cos value of angle 28 is 0.692264 sin value of angle 28 is 0.715141 Cos value of angle 29 is 0.258776 sin value of angle 29 is 0.960822 Cos value of angle 30 is -0.256140 sin value of angle 30 is 0.961216 Cos value of angle 31 is -0.714304 sin value of angle 31 is 0.691824 Cos value of angle 32 is -0.972356 sin value of angle 32 is 0.208185 Cos value of angle 33 is -0.928817 sin value of angle 33 is -0.354949 Cos value of angle 34 is -0.571492 sin value of angle 34 is -0.813555 Cos value of angle 35 is -0.001522 sin value of angle 35 is -0.994065 Cos value of angle 36 is 0.583006 sin value of angle 36 is -0.805053 Cos value of angle 37 is 0.949975 sin value of angle 37 is -0.292059 Cos value of angle 38 is 0.928247 sin value of angle 38 is 0.354637 Cos value of angle 39 is 0.498112 sin value of angle 39 is 0.859569 Cos value of angle 40 is -0.170855 sin value of angle 40 is 0.978569 Cos value of angle 41 is -0.770787 sin value of angle 41 is 0.626414 Cos value of angle 42 is -0.991779 sin value of angle 42 is -0.050151 Cos value of angle 43 is -0.691036 sin value of angle 43 is -0.712846 Cos value of angle 44 is -0.001981 sin value of angle 44 is -0.992654 Cos value of angle 45 is 0.700312
sin value of angle 45 is -0.703223 Cos value of angle 46 is 0.992087 sin value of angle 46 is 0.015176 Cos value of angle 47 is 0.665367 sin value of angle 47 is 0.735641 Cos value of angle 48 is -0.101431 sin value of angle 48 is 0.986621 Cos value of angle 49 is -0.811030 sin value of angle 49 is 0.570681 Cos value of angle 50 is -0.958326 sin value of angle 50 is -0.254377 Cos value of angle 51 is -0.405349 sin value of angle 51 is -0.904624 Cos value of angle 52 is 0.463197 sin value of angle 52 is -0.876245 Cos value of angle 53 is 0.978359 sin value of angle 53 is -0.157414 Cos value of angle 54 is 0.702273 sin value of angle 54 is 0.698786 Cos value of angle 55 is -0.169516 sin value of angle 55 is 0.975800 Cos value of angle 56 is -0.903580 sin value of angle 56 is 0.405144 Cos value of angle 57 is -0.831782 sin value of angle 57 is -0.536956 Cos value of angle 58 is 0.014484 sin value of angle 58 is -0.989683 Cos value of angle 59 is 0.855474 sin value of angle 59 is -0.497245 Cos value of angle 60 is 0.858215 sin value of angle 60 is 0.492045 Cos value of angle 61 is -0.014181 sin value of angle 61 is 0.988888 Cos value of angle 62 is -0.879466 sin value of angle 62 is 0.451679 Cos value of angle 63 is -0.801484 sin value of angle 63 is -0.578256 Cos value of angle 64 is 0.168388 sin value of angle 64 is -0.973743 Cos value of angle 65 is 0.953525 sin value of angle 65 is -0.258848 Cos value of angle 66 is 0.624161 sin value of angle 66 is 0.765657 Cos value of angle 67 is -0.460808 sin value of angle 67 is 0.873480 Cos value of angle 68 is -0.982319 sin value of angle 68 is -0.100045 Cos value of angle 69 is -0.258555 sin value of angle 69 is -0.952715 Cos value of angle 70 is 0.806617 sin value of angle 70 is -0.568644 Cos value of angle 71 is 0.800010 sin value of angle 71 is 0.577365 Cos value of angle 72 is -0.301794 sin value of angle 72 is 0.939101 Cos value of angle 73 is -0.986066
sin value of angle 73 is -0.013996 Cos value of angle 74 is -0.258313 sin value of angle 74 is -0.951442 Cos value of angle 75 is 0.851860 sin value of angle 75 is -0.495639 Cos value of angle 76 is 0.686853 sin value of angle 76 is 0.706439 Cos value of angle 77 is -0.533625 sin value of angle 77 is 0.827934 Cos value of angle 78 is -0.920484 sin value of angle 78 is -0.349661 Cos value of angle 79 is 0.167485 sin value of angle 79 is -0.969914 Cos value of angle 80 is 0.984080 sin value of angle 80 is -0.003479 Cos value of angle 81 is 0.157342 sin value of angle 81 is 0.971194 Cos value of angle 82 is -0.939584 sin value of angle 82 is 0.290896 Cos value of angle 83 is -0.403108 sin value of angle 83 is -0.896837 Cos value of angle 84 is 0.849577 sin value of angle 84 is -0.494519 Cos value of angle 85 is 0.566514 sin value of angle 85 is 0.803005 Cos value of angle 86 is -0.761268 sin value of angle 86 is 0.620941 Cos value of angle 87 is -0.659680 sin value of angle 87 is -0.727441 Cos value of angle 88 is 0.703750 sin value of angle 88 is -0.684527 Cos value of angle 89 is 0.696530 sin value of angle 89 is 0.691439 Cos value of angle 90 is -0.691148 sin value of angle 90 is 0.696329
CONCLUSION
We have generated Sine and Cosine wave using Verilog and C code
REFERENCES
[1] Nitin P. Narkhede, and Shaymkant S. Limaye “Hardware Implementation of Sine Wave Generator using CORDIC Algorithm” ACEEE-Nov 2010
[2] By R. Ranga Teja, P. Sudhakara Reddy “Sine/Cosine Generator Using Pipelined CORDIC Processor” IEEE August 2011
[3] By KAVYA SHARAT, Dr.B.V.UMA, SAGAR D.M”Calculation of Sine and Cosine of an Angle using the CORDIC Algorithm” IJITR-March 2014
[4] A. S. N. Mokhtar, M. I. Ayub, N. Ismail, and N. G. Nik Daud “Implementation of Trigonometric Function using CORDIC Algorithms”AIP Conference Proceedings1930 --02 February 2018
[5] J. E. Volder, “The CORDIC trigonometric computing technique,” IR Transactions on Electronic Computers, vol. 8, no. 3, pp. 330–334, 1959.
[6] https://en.wikipedia.org/wiki/CORDIC