Implementation of Cordic Algorithm for FPGA. Based Computers Using Verilog. pani1, ju, a3. If you’ve never worked with a CORDIC algorithm before, the .. Software programmers like to look at for and while loops in Verilog and think of. The CORDIC rotator seeks to reduce the angle to zero by rotating the vector. To compute . See the description of the CORDIC algorithm for details. */ module.

Author: Zulusar Kagajar
Country: Guatemala
Language: English (Spanish)
Genre: Automotive
Published (Last): 19 December 2008
Pages: 389
PDF File Size: 16.26 Mb
ePub File Size: 20.31 Mb
ISBN: 518-2-25873-721-6
Downloads: 34226
Price: Free* [*Free Regsitration Required]
Uploader: Dairg

Our task here will be to calculate that gain. Such a core generator will be our approach here.

Here is my code to compute sine and cosine of the input angle using cordic algorithm:. Maybe I am not following the algorithm correctly. In MyHDL, a single type does it all – the intbv class. We could apply this rotation using angles more suited for an FPGA. Hate it when I get this sort of incomplete error message.

For these applications, the way to compensate for the gain is to send a different number as an input. Post Your Answer Discard By clicking “Post Your Answer”, you acknowledge that you have read our updated terms of serviceprivacy policy and cookie policyand that your continued use of the website is subject to these policies.

Now that we have a working design and only now! For pipelined options, this is the number of stages. Software programmers like to look at for and while loops in Verilog and think of them like their for and while counterparts in software.

Using a CORDIC to calculate sines and cosines in an FPGA

The Cordic algorithm is an iterative algorithm based on vector rotations over elementary angles. The internal number variables are represented by intbv instances. This can all be done with simple integer math—no multiplies or divides are required. The idea is to use the cos and sin functions from the math module to compute the expected results on a number of input angles, and to compare verulog with the outputs from the design under test.


In addition to the Verilog code for the design itself, it also generates a Verilog test bench stub that defines an interface between the Verilog design and a Cosimulation object.

The user can change the number of bits that represent the x,y, and theta values. But the convertor doesn’t take risks and inserts the typecast as a general measure.

There are two arctan function tables,one for radian and one for degree mode. The core will operate in one of two modes: How do we rotate cordoc vector?

Post as a guest Name. We will assume that all numbers are stored as bit fixed-point numbers, with the radix point between the second-most-significant and third-most-significant bits.

How shall I assign port direction to angle? In contrast, a Verilog designer is forced to deal with low-level representational issues explicitly. After applying this calculation to a problem set with an bit phase requirement, the code above generated the following table. The Cordic equations can be used for a variety of computations. Why do you think it’s is not? Both the sine and the cosine of the input angle verulog be computed.

The fundamental problem is that Verilog uses an unsigned interpretation by default, which is the opposite from what you should do to get the naturally expected results.

Then simply change the sign of the results based on this stored number. We will first write a unit test for the design.


That strategy requires that for every strobe input, the output associated aalgorithm that input also needs to have a high strobe output. To see this, first calculate the angles of the vectors in Fig 1 above:. That suggest to me it is an output.

Computing sin & cos in hardware with synthesisable Verilog

Note that we first check the sign of the remaining phase to know which direction to rotate, but otherwise the operations you see here should match the transform we discussed earlier. Note that outside the generator function, we calculate some data such as the X0 constant, and the look-up table of elementary arctangents, represented by the angles tuple.

Ok will try and get back. The interface of the module looks as follows: On this page, we will implement a parallel, iterative processor, which is a fairly straightforward mapping of the equations into a bit-parallel data path and a state machine. If more iterations or higher precision calculations are desired then a new arctan table will need to be computed. Then also calculate and normalize by their their lengths.

Remember, atan2 accepts the y argument first. We will use this as the basis of our algorithm: It uses the most amount of LUTS. To compute the cos and sin of the angle, set the inputs as follows: It may be wrong, I don’t know.