本文转载自:FPGA入门到精通微信公众号
Cordic算法可以通过简单的加和移位运算来实现复杂的数学运算,避免了传统方法中大量的乘法运算,从而提高了计算效率,易于硬件实现。
今天介绍一下Cordic算法和Xilinx的Cordic IP。
一、Cordic算法
CORDIC(Coordinate Rotation Digital Computer,坐标旋转数字计算机)算法是一种高效的计算方法,由J. Volder在1959年提出,最初用于解决航空导航系统中的三角函数、反三角函数和开方等运算问题。
CORDIC算法的核心思想是通过一系列的旋转操作来逼近复杂的函数值,这些旋转操作简单且易于硬件实现。
CORDIC算法广泛应用于图像处理、信号处理、通信领域,它可以实现如离散傅里叶变换(DFT)、离散余弦变换(DCT)、离散Hartley变换、Chirp-Z变换等多种变换。此外,CORDIC算法还可用于实现直接数字频率合成器(DDS)、计算I/Q信号的幅度和相位等。
CORDIC算法有两种模式:旋转模式和向量模式。在旋转模式下,算法通过旋转坐标系来计算函数值;而在向量模式下,算法通过计算旋转后的向量长度和方向来得到函数值。
CORDIC算法的实现通常应用于硬件,尤其是现场可编程门阵列(FPGA)。在FPGA中,CORDIC算法可以通过流水线设计和并行处理来实现,从而提高计算速度。
总之,CORDIC算法是一种在信号处理领域具有重大工程意义的算法,它通过简单的旋转操作来实现复杂的函数计算,广泛应用于各种硬件实现中。
二、Xilinx Cordic IP
Cordic IP核基于CORDIC算法,具有以下功能模式:旋转(rotate)、变换(translate)——直角坐标转极坐标、sin/cos/arctan/sinh/cosh/arctanh/平方根等。用户可以根据需要选择不同的功能模式来实现所需的数学运算。
Cordic IP核是采用AXI4-stream协议的接口。
更多更详细的信息,请查看xilinx 官方手册(PG105)。
在“IP catalog”中,输入“Cordic”,点击任意一个“CORDIC IP”就行。
1、Cordic IP核的功能
这里详细介绍一下Cordic IP的功能
(1)Rotate
Rotate 实现的功能是坐标的旋转。
输入原图像坐标( X, Y),旋转角度Phase,输出目标图像坐标(X’, Y’)。
具体实现的功能对应的数学表达形式如下:
(2)Translation
Translation 实现的功能是求模,以及向量的夹角。
输入 X, Y,输出X’ and Phase
具体实现的功能对应的数学表达形式如下:
(3)Sin and Cos
功能:求取角度Phase对应的Sin 和Cos 函数值。
输入:角度Phase
输出:X_OUT = Cos(PHASE_IN), Y_OUT = Sin(PHASE_IN))
(4)Sinh and Cosh
功能:求取角度Phase对应的Sinh 和Cosh 函数值
输入:角度Phase
输出:坐标,注意高低位对应!
(5)ArcTan
功能:求反正切函数
输入:坐标值(X,Y)
输出:角度Phase
(6)ArcTanh
功能:求Arctanh 函数值
输入:坐标值(Xin, Yin)
输出:Phase and (Xout,0)
(7)Square Root
功能:开平方根
输入:数值X_IN
输出:数值X_OUT
注意下输入输出数据格式:
角度Phase的数据格式: 1位符号位 + 2位整数位 + N位小数位(2QN格式),
X, Y的输入格式:1位符号位 + 1位整数位 + N位小数位(1QN格式)。
2、IP核参数配置
(1)Configuration Options
Functional Selection函数功能选择:Rotate, Sin and Cos, ArcTan, Square Root, Translate, Sinh and Cosh and ArcTanh
Architectural Configuration 架构配置:CORDIC核心提供了两种架构配置,分别是并行和字串行。
Pipelining Mode 并行模式: 不做处理(None)、资源优化(Optimal)、流水线最大化(Maximum)。
Data Format数据格式:有符号小数(Signed Fraction)、无符号小数(Unsigned Fraction)、无符号整数(Unsigned Integer)。
Phase Format 相位格式:
弧度(相位用固定点的二进制补码表示,整数宽度为3位,以弧度为单位)、
缩放弧度(相位用固定点的二进制补码表示,整数宽度为3位,以π弧度为单位)
Input Width:输入数据位宽
Output Width:输出数据位宽
Round Mode 舍入模式:Truncate直接截断、 Positive Infinity向上取整、Pos Neg Infinity向下取整、Nearest Even最近舍入取偶数
Iterations 迭代次数,Precision 精度
Coarse Rotation “粗略旋转”或“低精度旋转”
Compensation Scaling: 控制用于补偿CORDIC幅度缩放的补偿缩放模块
(2)AXI4 Stream Options
AXI4-Stream配置接口参数
Cartesian Channel Options:tlast结束信号,tuser起始信号, tuser width tuser信号位宽。
Phase Channel Options:tlast结束信号,tuser起始信号, tuser width tuser信号位宽。
Flow Control数据传输模式: Blocking阻塞模式 or NonBlocking非阻塞模式。
Optimize Goal优化模式: 选择性能优化还是资源优化。