跟着航天技术的开展,航天使命关于导航核算机的功用要求越来越高。导航核算机除了要对传感器数据进行收集,与操控体系进行实时通讯,还要能进行实时的核算。尽管现在航天使命中运用的处理器芯片功用越来越强,但大多数CPU并没有处理常用逾越函数(sin,cos,arctan,exp,sqrt,ln等)的专用指令。而经过纯软件循环迭代求解逾越函数往往需求CPU数十乃至上百个周期,这极大下降了导航核算机的实时性。本文提出了一种高实时性、低复杂度的CORDIC协处理器核,供给了高吞吐率的逾越函数运算才能,然后提高了导航核算机的并行运算才能。此IP核运用verilog编写,因为其资源占用率低,能够十分容易地被集成入各种航天用FPGA中。
1 CORDIC算法
1.1 CORDIC旋转
CORDIC算法最早由Volder提出,用于求解一般三角函数,之后由Walther改善,使得CORDIC能够用于核算双曲函数和进行乘除运算。因为简直一切的通用CPU都具有硬件乘法除法功用,因而对数坐标形式所供给的乘除功用很少被实际运用,故CORDIC算法的首要应用是三角函数和双曲函数的运算。CORDIC的基本思想是经过一系列预订巨细视点的旋转,使得输入向量被旋转到所希望的方位,然后求解出一系列函数。CORDIC的旋转方程能够表明为
其间m为1时CORIDC作业在圆坐标系下,m为-1时作业在双曲坐标系下。dn为1时向量按顺时针方向旋转,当dn为-1时按逆时针方向旋转。
尽管每一步迭代只需求进行加减操作和固定位的移位操作,但由(1)可知,CORIDC每一次旋转都会改动向量的模。所以为了得到正确的向量重量x和y,需求补偿旋转后的向量,而因为向量模的改变与旋转的方向无关,这能够经过一个常数乘法器完结。补偿常数为:
CORDIC每次旋转的方向由作业形式决议。在旋转形式下,CORDIC企图让向量与x轴之间的夹角z趋近于0。在向量形式下,CORDIC企图让向量的y重量趋近于0。故每次旋转的方向由运转形式和向量的yz重量符号决议:
综上,各个形式下CORDIC的迭代成果以及可完结的函数如表1所示。
1.2 收敛性
Cordic能输出正确成果的条件是旋转结束时向量能够被旋转到预期的方位(在差错规模内),即旋转收敛。能够经过递归证明的是,关于圆坐标形式,关于恣意n总有
2 体系完结
为了确保协处理器能够供给满足的核算吞吐量并使协处理器的核算推迟可猜测,本文运用流水线完结整个CORDIC核。协处理器的流水线结构如图1所示。
2.1 体系输入
协处理器核从输入FIF0取得初始输入数据,包含3个坐标重量以及1个操控命令字。输入参数的格局为1位符号位,2位整数位,小数位的位数作为IP核的参数能够在例化时调整。这样的输入格局使得此IP核能够容易地被应用于运用定点运算的许多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所示。
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所示。