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
CONTENTS

VHDL: History
VHDL: Basics
VHDL: Design Units
CORDIC Algorithm
•   Key Idea
•   Rotations
•   Iterations
•   Rotation Mode
•   Hardware
Result
Conclusion
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.
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.
VHDL: Design Units



1. Entity declaration.
2. Architecture.
3. Configuration.
4. Package declaration.
5. Package body.
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.
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
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.
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
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.
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
Rotations
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.
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
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
e (i) = tan –1 2-i

Example: pseudo rotation for 30 degrees
30.0    45.0 – 26.6 + 14.0 – 7.1 + 3.6 + 1.8 – 0.9
+ 0.4 – 0.2 + 0.1 = 30.1
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
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
CORDIC Hardware(Basic)
CORDIC Hardware
Serial CORDIC Module in HDL Designer
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).
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.
Thank You

VHDL and Cordic Algorithim

  • 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
  • 2.
    CONTENTS VHDL: History VHDL: Basics VHDL:Design Units CORDIC Algorithm • Key Idea • Rotations • Iterations • Rotation Mode • Hardware Result Conclusion
  • 3.
    VHDL: History Was developedin 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 standsfor 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.
  • 5.
    VHDL: Design Units 1.Entity declaration. 2. Architecture. 3. Configuration. 4. Package declaration. 5. Package body.
  • 6.
    Entities • A blackbox 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 entityhas 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 informationcommon 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 RotationDIgital 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
  • 12.
  • 13.
    Rotate the vectorOE (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 realrotation 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
  • 16.
    e (i) =tan –1 2-i Example: pseudo rotation for 30 degrees 30.0 45.0 – 26.6 + 14.0 – 7.1 + 3.6 + 1.8 – 0.9 + 0.4 – 0.2 + 0.1 = 30.1
  • 17.
    CORDIC Rotation Mode CORDICcalculations 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
  • 19.
  • 20.
    CORDIC Hardware Serial CORDICModule in HDL Designer
  • 21.
    Result CORDIC algorithm forfinding 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 notthe 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.
  • 23.