Cordic Core
Specification
Author: Richard Herveille
richard@asics.ws
Rev. 0.4
December 18, 2001
OpenCores CORDIC Core Specifications 12/18/2001
www.opencores.org Rev 0.4 Preliminary ii
This page left intentionally blank
OpenCores CORDIC Core Specifications 12/18/2001
www.opencores.org Rev 0.4 Preliminary iii
Revision History
Rev. Date Author Description
0.1 14/01/01 Richard
Herveille
First Draft
0.2 21/06/01 Richard
Herveille
Fixed some minor issues. Improved readability.
0.3 22/06/01 Richard
Herveille
Completely revised section 1.1
0.4 18/12/01 Richard
Herveille
Fixed some typos.
OpenCores CORDIC Core Specifications 12/18/2001
www.opencores.org Rev 0.4 Preliminary iv
Contents
INTRODUCTION ........................................................................................................................................1
ARCHITECTURE........................................................................................................................................6
POLAR TO RECTANGULAR CONVERSION........................................................................................8
SINE AND COSINE CALCULATIONS ....................................................................................................9
RECTANGULAR TO POLAR CONVERSION..................................................................................... 12
OpenCores CORDIC Core Specifications 12/18/2001
www.opencores.org Rev 0.4 Preliminary 1 of 13
1
Introduction
CORDIC (Coordinate Rotation Digital Computer) is a method for computing elementary
functions using minimal hardware such as shifts, adds/subs and compares.
CORDIC works by rotating the coordinate system through constant angles until the angle
is reduces to zero. The angle offsets are selected such that the operations on X and Y are
only shifts and adds.
1.1 The numbers
This section describes the mathematics behind the CORDIC algorithm. Those not
interested in the numbers can skip this section.
The CORDIC algorithm performs a planar rotation. Graphically, planar rotation means
transforming a vector (Xi, Yi) into a new vector (Xj, Yj).
Y
X
(Xj, Yj)
(Xi, Yi)
θ