新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 一种CORDIC协处理器核的设计与实现

一种CORDIC协处理器核的设计与实现

作者:时间:2016-09-12来源:网络收藏

随着航天技术的发展,航天任务对于导航计算机的性能要求越来越高。导航计算机除了要对传感器数据进行采集,与控制系统进行实时通讯,还要能进行实时的计算。尽管目前航天任务中使用的处理器芯片性能越来越强,但大多数CPU并没有处理常用超越函数(sin,cos,arctan,exp,sqrt,ln等)的专用指令。而通过纯软件循环迭代求解超越函数往往需要CPU数十甚至上百个周期,这极大降低了导航计算机的实时性。本文提出了一种高实时性、低复杂度的核,提供了高吞吐率的超越函数运算能力,从而提高了导航计算机的并行运算能力。此使用verilog编写,由于其资源占用率低,可以非常容易地被集成入各种航天用中。

本文引用地址:http://www.eepw.com.cn/article/201609/303786.htm

1 算法

1.1 旋转

CORDIC算法最早由Volder提出,用于求解一般三角函数,之后由Walther改进,使得CORDIC可以用于计算双曲函数和进行乘除运算。由于几乎所有的通用CPU都具有硬件乘法除法功能,因此对数坐标模式所提供的乘除功能很少被实际使用,故CORDIC算法的主要应用是三角函数和双曲函数的运算。CORDIC的基本思想是通过一系列预定大小角度的旋转,使得输入向量被旋转到所期望的位置,从而求解出一系列函数。CORDIC的旋转方程可以表示为

一种CORDIC协处理器核的设计与实现

其中m为1时CORIDC工作在圆坐标系下,m为-1时工作在双曲坐标系下。dn为1时向量按顺时针方向旋转,当dn为-1时按逆时针方向旋转。

虽然每一步迭代只需要进行加减操作和固定位的移位操作,但由(1)可知,CORIDC每一次旋转都会改变向量的模。所以为了得到正确的向量分量x和y,需要补偿旋转后的向量,而由于向量模的变化与旋转的方向无关,这可以通过一个常数乘法器实现。补偿常数为:

一种CORDIC协处理器核的设计与实现

CORDIC每次旋转的方向由工作模式决定。在旋转模式下,CORDIC试图让向量与x轴之间的夹角z趋近于0。在向量模式下,CORDIC试图让向量的y分量趋近于0。故每次旋转的方向由运行模式和向量的yz分量符号决定:

一种CORDIC协处理器核的设计与实现

综上,各个模式下CORDIC的迭代结果以及可实现的函数如表1所示。

一种CORDIC协处理器核的设计与实现

1.2 收敛性

Cordic能输出正确结果的前提是旋转结束时向量能够被旋转到预期的位置(在误差范围内),即旋转收敛。可以通过递归证明的是,对于圆坐标模式,对于任意n总有

一种CORDIC协处理器核的设计与实现

2 系统实现

为了保证能够提供足够的计算吞吐量并使的计算延迟可预测,本文使用流水线实现整个CORDIC核。协处理器的流水线结构如图1所示。

一种CORDIC协处理器核的设计与实现

2.1 系统输入

协处理器核从输入FIF0获得初始输入数据,包括3个坐标分量以及1个控制命令字。输入参数的格式为1位符号位,2位整数位,小数位的位数作为的参数可以在例化时调整。这样的输入格式使得此可以容易地被应用于使用定点运算的许多DSP处理器。对于浮点数运算,实际上CPU可以通过简单的移位缩放操作使得输入范围外的xyz分量落到协处理器可接受的范围内,这是由于规格化浮点数的尾数本来就在区间[1,2)内。相对的,已有的很多CORDIC协处理器实现使用了浮点数进行中间运算,然而这不仅显著地增加了资源的使用,而且使得每一个CORDIC旋转需要通过多级流水线完成,增大了每个运算的延迟。

此外,为了降低CPU和协处理器之间交互次数,本IP核允许CPU在计算某些函数时不对所有的输入寄存器进行写入。对于输入参数少于3个的函数,协处理器自动生成其他分量的输入。比如对于cos(x),CPU只需要对协处理器的a0寄存器和控制字寄存器写入即可触发cos(x)的运算,CORDIC协处理器会自动把x分量初始化成2.0,y分量初始化成0,z分量初始化成a0。对于有效位数较小的配置如18位,可以进一步将控制命令字和a0放到同一个32位寄存器中,则对于单输入函数,CPU只需向一个地址写入数据即可完成操作。18位数据精度时的输入寄存器格式如图2所示。

一种CORDIC协处理器核的设计与实现

2.2 预处理单元

如表1所示,CORDIC的运算结果并不直接对应所要求的函数,故需要对与输入参数进行处理。例如对于ln(a)和sqrt(a)运算,需要令x=a+1,y=a-1,对于cos(x),sin(x)等运算,需要生成相应的其他分量输入。此外,由于双曲坐标的性质,arctanh1并不存在,故双曲坐标模式只能从i=1开始迭代,而圆坐标系可以从i=0开始迭代,这导致了两种模式的旋转过程不同。为了能用同一个流水线实现2种模式的操作,本文令所有模式都从i=1开始迭代。但这样会导致在圆坐标模式下的收敛域过小,只有。解决的办法是在预处理单元加入象限折叠,即通过三角函数关系,将[-π,π]上的向量折叠到[0,π/4]上,再在后处理单元对结果进行修正。

2.3 旋转单元

旋转单元是CORDIC协处理器的核心,实现(1)所描述的向量旋转操作。其结构如图3所示。

一种CORDIC协处理器核的设计与实现
上一页 1 2 下一页

评论


相关推荐

技术专区

关闭