CORDIC Hardware Implementations

Purpose

 * developing CORDIC architectures similar to DDR (Double Data Rate).

General CORDIC Description

 * [[Media:CORDIC.General.1.A.20120409.pdf | General.1.A.pdf]] - Rotation as a complex number multiplication (in CORDIC FAQ)
 * [[Media:CORDIC.General.2.A.20120607.pdf | General.2.A.pdf]] - Rotation as a geometric interpretation (in Synthesis of Arithmetic Circuits examples)
 * [[Media:CORDIC.General.3.A.20120409.pdf | General.3.A.pdf]] - A set of CORDIC equations (in Andraka's paper )
 * [[Media:CORDIC.General.4.A.20120409.pdf | General.4.A.pdf]] - Unified CORDIC

Software Simulations

 * [[Media:CORDIC.Matlab.1.A.20110715.pdf | Software.1.A.pdf]]  -   Burkardt's MATLAB implementation
 * [[Media:CORDIC.cpp.1.A.20120228.pdf | Software.2.A.pdf]]  -   Burkardt's C++ implementation

Fixed Point Software Implementations

 * [[Media:CORDIC.fixedc.1.A.20120228.pdf | Fixed.1.A.pdf]] - Dr. Dobbs Journal implementation

FPGA Hardware Implementations

 * [[Media:CORDIC.VHDL.1.A.20111110.pdf | FPGA.1.A.pdf]] - Monash Univ VHDL implementation (architecture and precision)
 * [[Media:CORDIC.VHDL.2.A.20111107.pdf | FPGA.2.A.pdf]] - Monash Univ VHDL implementation  (VHDL  detail )
 * [[Media:CORDIC.Background.2.B.20110811.pdf | FPGA.2.B.pdf]] - Andraka's paper (FPGA related)

Lookahead CORDIC

 * Lookahead CORDIC Literature Note ([[Media:Lit.Lookahead.20160723.pdf |pdf]])

Redundant CORDIC

 * Redundant Adders ([[Media:Redundant.Lookahead.20160519.pdf |pdf]])
 * Redundant CORDIC Note 1 - Tagaki ([[Media:RNS1.Tagaki.20160723.pdf |pdf]])
 * Redundant CORDIC Note 2 - Ercegovac ([[Media:RNS2.Ercegovac.20160723.pdf |pdf]])
 * Redundant CORDIC Note 3 - Timmermann - A.([[Media:RNS3.Timmermann.A.20161116.pdf |pdf]]) - B.([[Media:RNS3.Timmermann.B.20161231.pdf  |pdf]]) - C.([[Media:RNS3.Timmermann.C.20170209.pdf  |pdf]])
 * Redundant CORDIC Note 4 - Booth Encoding ([[Media:RNS4.BoothEncode.20170118.pdf |pdf]])
 * Redundant CORDIC Note 5 - Noll ([[Media:RNS5.Noll.20161022.pdf |pdf]])

Angle Recoding CORDIC

 * AR CORDIC Note 1 - Hu ([[Media:AR1.Hu.20180914.pdf |pdf]])
 * AR CORDIC Note 2 - Wu ([[Media:AR2.Wu.20180822.pdf |pdf]])
 * 0. Overview ([[Media:AR2.Wu.0.Overview.20180903.pdf |pdf]])
 * 1. Conventional CORDIC ([[Media:AR2.Wu.1.CRODIC.20180920.pdf |pdf]])
 * 2. AR (Angle Recoding) ([[Media:AR2.Wu.2.AR.20180914.pdf |pdf]])
 * 3. MVR (Modified Vector Rotation) ([[Media:AR2.Wu.3.MVR.20181003.pdf |pdf]])
 * 4. EEAS (Extended Elementary Angle Set) ([[Media:AR2.Wu.4.EEAS.20180903.pdf |pdf]])
 * 5. Generalized EEAS (Extended Elementary Angle Set) ([[Media:AR2.Wu.5.EEAS.20180823.pdf |pdf]])


 * AR CORDIC Note 3 - Swartzlander ([[Media:AR3.Swartz.20170309.pdf |pdf]])

Hybrid CORDIC

 * Hybrid CORDIC Note 1 - Sine/Cosine Generator Algorithms ([[Media:Hybrid.1.SineGen.Algo.20171206.pdf |pdf]])
 * Hybrid CORDIC Note 2 - Sine/Cosine Generator Architecture ([[Media:Hybrid.2.SineGen.Arch.20171115.pdf |pdf]])
 * Hybrid CORDIC Note 3 - ROM free modified coarse fine approach ([[Media:Hybrid.3.ROMless.20180303.pdf  |pdf]])
 * Hybrid CORDIC Note 4 - Hybrid CORDIC Alogorithms ([[Media:HB.1.Overview.20171007.pdf |pdf]])

Binary Angular Measurement

 * Let's identify the source of the prevalent statement of "50 % improvement".
 * An explanation using a uniform framework would be good.


 * [[Media:CORDIC.BAM.1.A.20120621.pdf | BAM.1.A.pdf]] - Angle Recoding CORDIC- Y. H. Hu
 * [[Media:CORDIC.BAM.2.A.20120622.pdf | BAM.2.A.pdf]] - Trellis-based Searching CORDIC - C. S. Wu
 * [[Media:CORDIC.BAM.3.A.20120607.pdf | BAM.3.A.pdf]] - Look-ahead CORDIC - C. C. Kao
 * [[Media:CORDIC.BAM.4.A.20120619.pdf | BAM.4.A.pdf]] - Redundant CORDIC - T. Vladimirova
 * [[Media:CORDIC.BAM.5.A.20120614.pdf | BAM.5.A.pdf]] - Adpative CORDIC - T. K. Rodrigues
 * [[Media:CORDIC.BAM.6.A.20120614.pdf | BAM.6.A.pdf]] - MSE Variance CORDIC - S. Y. Park
 * [[Media:CORDIC.BAM.7.A.20120614.pdf | BAM.7.A.pdf]] - Angle Approx Error & Datapath Rounding Error - C. Dick

CORDIC as a Search Algorithm

 * CORDIC as a Search Idea.3.A ([[Media:CORDIC.Idea.3.A.20120430.pdf |pdf]])
 * 5. Search ([[Media:CORDIC.Acc.Search.20160122.pdf |pdf]])

Quad Angle Tree Based CORDIC

 * CORDIC Quad Tree Angles ([[Media:QuadTree.20120601.pdf |pdf]])
 * 6 Lookahead Idea ([[Media:Idea.Lookahead.20160307.pdf |pdf]])

Minimizing Latency

 * Latency Minimizing Idea.2.A ([[Media:CORDIC.Idea.2.A.20111212.pdf |pdf]])
 * 7. Backtrack ([[Media:CORDIC.Acc.Backtrack.20160129.pdf |pdf]])

Maximizing Throughput

 * Throughput Maximizing Idea.1.A ([[Media:CORDIC.Idea.1.A.20111126.pdf |pdf]])
 * 8. Serialize ([[Media:CORDIC.Acc.Serialize.20160122.pdf |pdf]])

Bit-Serial & Bit-Parallel Trade-offs

 * Generalized Multi-Byte CORDIC Idea.4.A ([[Media:CORDIC.Idea.4.A.20120731.pdf |pdf]])
 * 9. Precision ([[Media:CORDIC.Acc.Precision.20160125.pdf |pdf]])
 * Bit-serial Redundant CORDIC ([[Media:Lit.BitSerial.20160317.pdf |pdf]])

Implementation Technical Background

 * - [ Understanding VLSI Design ]
 * - [ Understanding Low Power Design ]
 * - [ Understanding Arithmetic Circuits ]
 * - [ Understanding FPGA Design ]

Fixed Point Simulation

 * -Octave
 * 3. Octave Codes ([[Media:CORDIC.Acc.Octave.20151023.pdf |pdf]])
 * -SystemC


 * -VHDL Simulation
 * CORDIC Angle LUT ( [[Media:lut.src.20131009.pdf |scr.pdf]], [[Media:lut.out.20131009.pdf  |out.pdf]])
 * CORDIC ROM Generation and Initialization ( [[Media:c1.rom.file.vhdl.20121114.pdf |c6.rom.file.vhdl]] )
 * CORDIC BEH Simulation ( [[Media:cordic_beh.20130919.pdf |cordic_beh.pdf]] )
 * CORDIC RTL Simulation ( [[Media:cordic_rtl.20131113.pdf |cordic_rtl.pdf]] )
 * CORDIC testbench ( [[Media:cordic_tb.vhdl.20121126-2.pdf |cordic_tb.vhdl]] )


 * -VHDL Testcases

Resource Sharing

 * - Area, Speed, Power Trade-offs between architectures

CORDIC Sensor Characteristics

 * Accuracy
 * Preceision
 * Sensitivity
 * Linearity
 * Resoltion

CORDIC Accuracy & Precision
CORDIC.AccPrec ([[Media:CORDIC.AccPrec.20120423.pdf |pdf]])

C++ Codes

 * CORDIC Source ([[Media:CORDIC.20140614.pdf |pdf]])


 * Makefile ([[Media:Makefile.20140411.pdf |pdf]])
 * Core class ([[Media:Core.20140415.pdf |pdf]])
 * Angles class ([[Media:Angles.20140418.pdf |pdf]], [[Media:Angles.b1.20140908.pdf |pdf]])
 * GPData class ([[Media:GPData.20140405.pdf |pdf]])
 * Figures class ([[Media:Figures.20140405.pdf |pdf]])
 * Interfacing GHDL CORDIC simulation with C ([[Media:ghdlIF.20140404.pdf |pdf]])
 * Calling C++ cordic function from C ([[Media:CIF.20130910.pdf |pdf]])


 * batch run bash file for Angles_tb ([[Media:batch_run_angles.20130812.pdf |pdf]])
 * fig_basic ([[Media:fig_basic_all.20140210.pdf |pdf]], [[Media:notes.basic.fig.20140808.pdf  |note]])
 * fig_tscale ([[Media:fig_tscale_all.20140218.pdf |pdf]])
 * fig_uscale ([[Media:fig_uscale_all.20140217.pdf |pdf]])

Testbench Codes and Results

 * cordic testbenches ([[Media:TestBench.20140224.pdf |pdf]])
 * cordic testbench 01 (percent error)
 * cordic testbench 02 (path error)
 * cordic testbench 03 (varying tree levels)
 * fig_basic ([[Media:fig_basic_all.20140224.pdf |pdf]])
 * fig_tscale ([[Media:fig_tscale_all.20140224.pdf |pdf]])
 * fig_uscale ([[Media:fig_uscale_all.20140224.pdf |pdf]])
 * cordic testbench 04 (coarse-fine)

CORDIC Accuracy Notes

 * 1. General ([[Media:CORDIC.Acc.Note.General.20160125.pdf |pdf]])
 * 2. Statistical Analysis ([[Media:CORDIC.Acc.Note.Stat.20160122.pdf |pdf]])
 * 3. Octave Fixed Point Simulation ([[Media:CORDIC.Acc.Note.Octave.20160122.pdf |pdf]])
 * 4. Scaling K ([[Media:CORDIC.Acc.Scaling.20160218.pdf |pdf]])


 * batch run bash file for testbench 01 ([[Media:batch_run_tb01.20130211.pdf |pdf]])
 * batch run bash file for testbench 02 ([[Media:batch_run_tb02.2013.pdf |pdf]])


 * Angles_wx using wxWidgets & wxGlade ([[Media:wxWidgets.Angles_wx.20120531.pdf  |pdf]])

Test Cases
1. Powers of 2 angles testcase ([[Media:testcase1.20181227.c.pdf |code]], [[Media:testcase1.20181227.summary.pdf  |summary]])

2. Leaf and internal node angles testcase

3. Uniformly distributed angles testcase

4. Subtree angles testcase

Functional Programming Approach

 * Background ([[Media:CORDIC.HS.1.A.Background.20180928.pdf |pdf]])

Binary Tree in Prolog

 * Background ([[Media:Plog.BinTree.20140415.pdf |pdf]])

Computing Gaussian Function

 * Scale Space Filtering (Gaussian Smoothing)
 * Parallel CORDIC
 * Neural Network (Computing Exponential Function)

Related Links
See Burkardt's C++ Implementations

Rotating Vector Plotting

 * Using gnuplot_i package ([[Media:CORDIC.fixed.1.A.2012.pdf  |pdf]])
 * CORDIC Animation: Java Swing Based CORDIC Simulator

Symbolic Computation of CORDIC Equations

 * Using Maxima / wxMaxima ([[Media:maxima_test.20120411.pdf  |pdf]], [[Media:matrix.20121218.pdf  |matrix.pdf]])

Simulation in C, C++, Octave

 * CORDIC Octave Simulation ([[Media:CORDIC.m.20120420.pdf | CORDIC.m.pdf]])
 * CORDIC C++ Simulation ([[Media:CORDIC_cpp.20120424.pdf | CORDIC_cpp.pdf]])
 * CORDIC C Simulation ([[Media:CORDIC.c.20120417.pdf | CORDIC.c.pdf]], [[Media:CORDIC_tb.c.20120417.pdf  | CORDIC_tb.c.pdf]])
 * CORDIC Fixed Point C Simulation ([[Media:CORDIC.fixed.c.20120405.pdf | CORDIC.fixed.c.pdf]])

Simulation using Multiple Precision Libraries (GMP, MPFR)

 * CORDIC GMP Simulation ([[Media:cordic_gmp.20130115.pdf | cordic_gmp.pdf]], [[Media:normerror.20130115.pdf  | normerror.pdf]])

SystemC Model

 * SystemC Data Types ([[Media:my_cnt.systemc.20120703.pdf  |my_cnt.systemc]], [[Media:dtype.systemc.20120705.pdf  |dtype.systemc]])
 * Fixed point Simulation ([[Media:cordic.scfix.20120713.pdf  |cordic.scfix]])
 * Generating VHDL ROM model ([[Media:cordic.rom.2012.pdf  |cordic.rom]])

VHDL Behavioral Model

 * VHDL Behavioral Model and Testbench ([[Media:cordic_beh.20120828.pdf  |cordic_beh in one file]], [[Media:cordic.vhdl.20120322.pdf  |cordic_beh.vhdl]], [[Media:cordic_tb.vhdl.20120322.pdf  |cordic_tb.vhdl]], [[Media:cordic_pkg.vhdl.20120322.pdf  |cordic_pkg.vhdl]])
 * VHDL Data Conversion - some test pieces ([[Media:test_conv.vhdl.20120309.pdf  |test_conv.vhdl]])

VHDL Data Flow Model

 * VHDL Data Flow Model and Testbench ([[Media:cordic_rtl.20130828.pdf     | cordic_rtl in one file]], [[Media:CORDIC.rtl.vhdl.20120403.pdf     | CORDIC.rtl]])
 * c1.adder.rtl.vhdl, c2.addsub.vhdl, c3.bshift.vhdl, c4.dffreg.vhdl, c5.counter.vhdl, c6.rom.vhdl, c7.mux.vhdl, m1.disp.vhdl,
 * cordic_rtl.vhdl, cordic_pkg.vhdl, cordic_tb.vhdl

Papers and Reports

 * Background.1.A - CORDIC FAQ ([[Media:CORDIC.Background.1.20110707.pdf |1.A.pdf]])
 * Background.2.A,B - Andraka's paper ([[Media:CORDIC.Background.2.A.20110528.pdf |2.A.pdf]], [[Media:CORDIC.Background.2.B.20110811.pdf |2.B.pdf]])
 * Background.3.A - Unified CORDIC ([[Media:CORDIC.Background.3.A.20110528.pdf |3.A.pdf]])
 * Background.4.A - Synthesis of Arithmetic Circuits examples ([[Media:CORDIC.Background.4.A.20120215.pdf |4.A.pdf]])

Software Simulations

 * Burkardt's MATLAB implementation (Matlab.1.A) ([[Media:CORDIC.Matlab.1.A.20110715.pdf |pdf]])
 * Burkardt's C++ implementation (C++.1.A) ([[Media:CORDIC.cpp.1.A.20120228.pdf |pdf]])

Software Implementations

 * Dr. Dobbs Journal implementation (fixed.1.A) ([[Media:CORDIC.fixedc.1.A.20120228.pdf |pdf]])

Hardware Implementations

 * Monash Univ VHDL implementation ([[Media:CORDIC.VHDL.1.A.20111110.pdf |VHDL.1.A.pdf]], [[Media:CORDIC.VHDL.2.A.20111107.pdf |VHDL.2.A.pdf]] )


 * Some Plots


 * Threshold=0.0 ([[Media:Plots.20120517.pdf |pdf]])
 * Threshold=0.001 ([[Media:Plots.th.20120518.pdf |pdf]])
 * Quantization Effects ([[Media:plot_quantization.20130117.pdf  |pdf]])
 * Percent Error ([[Media:plots.perr.20130129.pdf |pdf]])
 * Residue Statistics (tex file:[[Media:uscale_fig.tex.20130329.pdf |pdf]], [[Media:uscale_fig.20130329.pdf  |pdf]])


 * CORDIC.AccPrec ([[Media:CORDIC.AccPrec.20120423.pdf |pdf]])
 * Angles Class Source ([[Media:Angles.20130123.pdf |pdf]])
 * Angles_wx using wxWidgets & wxGlade ([[Media:wxWidgets.Angles_wx.20120531.pdf  |pdf]])

go to [ Electrical_%26_Computer_Engineering_Studies ]