1. Project on
VHDL and Digital Circuit Design
(Implementation Of CORDIC Algorithm
for trigonometric functions in VHDL)
Submitted at : CEERI,Pilani
Submitted By :Subeer Rangra
08EBKCS059
3. VHDL: History
Was developed in the early 1980s for managing design
problems that involved large circuits and multiple teams of
engineers.
Funded by U.S. Department of Defense.
The first publicly available version was released in 1985.
In 1986 IEEE (Institute of Electrical and Electronics Engineers,
Inc.) was presented with a proposal to standardize the VHDL.
In 1987 standardization => IEEE 1076-1987
An improved version of the language was released in
1994 => IEEE standard1076-1993.
4. VHDL: Basics
VHDL stands for VHSIC Hardware Description
Language
Hardware description language used for modeling
digital systems.
It provides designing of digital systems at various
levels of abstraction.
Used to write text models that describe a logic circuit.
6. Entities
• A black box with interface
definition. Inputs and Outputs
• Defines the inputs/outputs of a
A
component (define pins).
• A way to represent modularity in B E
Chip
VHDL. C
• Similar to symbol in schematic. D
• Entity declaration describes and
initializes an entity.
7. Architectures
• Every entity has at least one architecture.
• One entity can have several architectures.
• Architectures can be written using these
following methodologies.. A Chip
– Dataflow
B E
– Behavioral X
– Structural (component ) C Y
• Architectures can describe design on
many levels D
– Gate level
– RTL (Register Transfer Level)
– Behavioral level
8. Configurations
• A configuration declaration is used to select one
of the possibly many architecture bodies that an
entity may have.
• Configuration specifies the design entity used in
place of each component instance (i.e. it plugs
the chip into the chip socket and then the socket-
chip assembly into the PCB).
• To represent structure in that architecture body
of an entity-architecture pair or by a
configuration, which reside in library.
9. Packages
Packages contain information common to many
design units.
1.Package declaration
– constant declarations
– type and subtype declarations
– function and procedure declarations
– global signal declarations
– file declarations
– component declarations
2.Package body
– is not necessary needed
– function bodies
– procedure bodies
10. CORDIC Algorithm
COordinate Rotation DIgital Computer
CORDIC, which stands
for COordinate Rotation Digital Computer, is an algorithm
developed by Volder in the fifties which allows you to
calculate trigonometric functions using simple shift and add
operations. This is an advantage for hardware
implementations were multipliers are normally resource
demanding . The algorithm can be adapted to also compute
fix/floating point multiply, divide, log, exponent and square
root. The module computes fix point sin and cos values from
a given angle.
11. CORDIC Algorithm
Key Idea
• If we have a computationally efficient way of
rotating a vector, we can evaluate cos & sin
• At each step, accumulate corresponding x and y
increments
• After a number of iterations, x and y increments
converge to desired function values
13. Rotate the vector OE (i) with end point at (x (i), y (i)) by (i)
x (i+1) = x (i) cos (i)– y (i) sin (i) = (x (i) – y (i) tan (i))/(1 + tan2 (i))1/2
y (i+1) = y (i) cos (i) + x (i) sin (i) = (y (i) + x (i) tan (i))/(1 + tan2 (i) ) 1/2
z (i+1) = z (i) + (i)
Goal: eliminate the divisions by (1 + tan2 (i)) 1/2 and choose (i) so that tan (i)
is a power of 2
Take the transformation x (i+1) = x (i) cos (i)– y (i) sin (i)
y (i+1) = y (i) cos (i) + x (i) sin (i)
Rearrange as x (i+1) = cos • ( x - y tan )
y (i+1) = cos • ( x + y tan )
But we can choose the rotation angles, 1, 2, …, m
So choose, -1 -m
m = tan 2
so that tan m = 2-m
Thus the tan m factors are derived from simple shifts as 2-m corresponds to
linear binary shift.
14. Whereas a real rotation does not change the length R(i) of the vector, a
pseudorotation step increases its length to:
R(i+1) = R(i) (1 + tan2 (i))1/2
The coordinates of the new end point E (i+1) after pseudorotation is derived
by multiplying the coordinates of E(i+1) by the expansion factor
x (i+1) = x (i) – y (i) tan (i)
y (i+1) = y (i) + x (i) tan (i) [Pseudorotation]
z (i+1) = z (i) + (i)
Now the ith step, calculating (xi+1, yi+1) from (xi, yi)
can be written
xi+1 = Ki ( xi - yi di 2-i )
yi+1 = Ki ( yi - xi di 2-i )
1
Where Ki = cos( tan-1 2-i ) =
( 1 + 2-2i )
And di = 1
which is determined by the direction of the necessary correction
Now the product, Ki = ( ( 1 + 2-2i )-1 0.6073
is a constant depending on the number of iterations
15. Basic CORDIC Iterations
Pick (i) such that tan (i) = di 2 –i, di Î {–1, 1}
x(i+1) = x(i) – di y(i)2–i
y (i+1) = y (i) + di x(i)2–I [CORDIC iteration]
z (i+1) = z (i) – di tan–1 2–i
If we always pseudo rotate by the same set of angles
(with + or – signs), then the expansion factor K is a
constant that can be pre-computed
e (i) = tan –1 2-i
17. CORDIC Rotation Mode
CORDIC calculations can be made in two ways
• Rotation mode
• Vector mode
Here we use the rotation mode
An input vector is rotated by a specified angle
Angle accumulator is initialized with an angle
This angle is reduced to zero
An (x,y) pair
The equations are: xi+1 = xi - yi di 2-i
yi+1 = yi + xi di 2-i
zi+1 = zi - di tan-1( 2-i )
and di = -1 if zi < 0
+1 otherwise
18. The results are: xn = Kn ( x0 cos z0 - y0 sin z0 )
yn = Kn ( x0 sin z0 + y0 cos z0 )
Zn = 0
Kn = ( 1 + 2-2i )
Set x0 = 1 and y0 = 0 the indicial values of x & y
And get the values ofcos(z0) and sin(z0)
Note
Kn is a constant - dependent only on the number of iterations
The algorithm would normally be run for a fixed number of iterations
A result with a known accuracy bound
Note that the whole calculation requires shifts , add/ subtracts only
21. Result
CORDIC algorithm for finding the values
trigonometric function sine and cosine ,was
successfully simulated .
On taking input value of z as the angle which is
to be calculated , and initializing the value of K
as 0.607252935008881256….for 10 iterations.
x as 1 and y as 0,we get the answer for the
value of cos(z) and vice versa for sin(z).
22. Conclusion
CORDIC is not the fastest way to perform multiplications
or to compute logarithms and exponentials but, since
the same algorithm allows the computation of most
mathematical functions using very simple basic
operations, it is attractive for hardware
implementations.