02-10-2020 08:38 AM
Using the latest CORDIC 6.0 core from Vivado 2019.2 with translate function, I discovered in both simulation and lab environment that core operates correctly with positive numbers but often produces incorrect or erratic results for negative numbers. Core is instantiated directly in HDL so without sysgen / simulink.
Specifics of my implementation.
Function : translate
S_axis_catesian sized to 16bits so fix16_14
M_axis_dout is also 16 bits on magnitude fix16_14 whereas phase is fix16_13
Coarse rotate is enabled allowing for full circle operation
Phase format is radians
I am familiar with PG105 dated December 20 2017 which explains in details the number format usage.
Q1] Is there a known issue with this core usage beyond the 1st quadrant? Most documentation and examples target positive numbers only. Turning on the "coarse rotate" function does indeed have an effect on the result but it remains incorrect for most samples.
Q2] Are there any restrictions on data fed to core aside from what is described in PG105? Data fed is always within -1<cartesian<+1.
Lastly, please note that Cordic ATAN function yields the exact same phase output for comparative sake. Issues observed are also present with rotate function which seem to indicate a systemic limitation.
Altering pipelining, architecture and compensation settings do not have any behavioral effect on phase results aside from latency.
02-10-2020 11:33 AM
02-16-2020 09:42 PM