一种用于导航芯片设计的高精度运算处理器*

2012-07-03 00:25闫宏伟李金城
电子技术应用 2012年9期
关键词:子程序存储器寄存器

李 慧,闫宏伟,李金城

(北京交通大学 电子信息工程学院,北京100044)

卫星导航系统作为先进的测量手段和新的生产力,已经广泛用于国防建设和社会发展的各个领域[1]。作为比较成熟的卫星导航系统,全球定位系统(GPS)在人们的日常生活中发挥着重要的作用[2]。我国的北斗卫星导航系统也将在未来的10年中逐步实现全球覆盖[3]。因此,设计具有自主知识产权的卫星导航芯片成为应对不断发展壮大的卫星导航市场的当务之急。

卫星导航接收机可分成RF射频前端模块和数字基带信号处理模块两部分[4]。RF射频前端模块把接收到的卫星信号转变成数字中频信号,然后交给数字基带模块进行处理;数字基带模块对数字中频信号进行捕获和跟踪,并解调出导航电文,然后进行导航定位计算[5-6]。

以现有的GPS接收机为例,导航定位运算一般都是通过ARM处理器[7]或通用DSP芯片[8]进行。虽然这些通用处理器功能完善,但是资源庞大,结构复杂,对于导航定位运算来说会占用很多冗余资源,不仅造成资源浪费,而且功耗和成本也都大大提高。

本文针对卫星导航定位计算,设计了一种专用高精度运算处理器。该处理器基于自己的数据格式,不仅能够实现加减乘除等基础运算,而且通过数据调度和运算管理还能够计算导航计算中用到的各种函数(如sin(x)、cos(x)、arctan(x)等)。FPGA验证表明,该专用处理器运算速度快且精度高,同时具有很强的编程扩展能力。

1 数据格式和基础运算

本论文定义的数据格式把一个数通过二进制有效值和2的指数这两个部分的乘积表示,用40 bit表示一个数据,如图1所示。低33 bit表示二进制有效值,其中第32位是二进制有效值的符号位(0表示正号,1表示负号),第 31~0位表示二进制有效值的绝对值;第 39~33位表示二进制指数,其中第39位是指数的符号位(0表示正号,1表示负号),其余位为指数绝对值。例如,40’h07_0000_0009表示的十进制实数为-9×23,如图 2所示。这种数据格式的表示方法与浮点数的表示方法类似,不仅能用较少的位数表示更大取值范围的实数,而且计算精度更高。

在这种数据格式的基础上运算处理器能实现的基础运算包括加法、减法、乘法、除法、取模、取余、阶乘(n!)和二次阶乘(n!!),这些运算都是导航计算所必须的基础运算。下面以加法、乘法、取模和阶乘为例,分别说明处理器基础运算的实现方式及精度保证措施。

(1)加法运算:首先判断参与运算的两个数指数是否相同,如果相同,则将两数的有效值直接相加;否则将两数的有效值进行移位使两数指数相同,然后再将有效值相加。

对有效值进行移位的过程是,首先判断指数较大数据(例如1大于-3)的有效值绝对值部分最高位是否为1,如果不为 1,则将有效值左移 1位,相应的指数减 1,依此法重复,直到两数的指数相同为止;如果为1,则将指数较小数据的有效值绝对值部分无条件地右移1位,同时其指数加1,直到两数的指数相同为止。

指数相同时,有效值相加的过程是,首先判断有效值符号位是否相同,如果相同则有效值绝对值部分直接相加,符号位保持不变;否则判断有效值绝对值的大小,然后令大数减小数,相减结果的符号位与绝对值大的数据保持一致。减法的运算过程与加法类似。

(2)乘法运算:运算原则是指数相加,有效值相乘。指数相加过程是,首先判断指数符号位是否相同,如果相同,则将指数绝对值直接相加,符号位保持不变;如果不同,则判断指数绝对值部分大小,然后大数减小数,符号位与指数绝对值较大数的指数符号位保持一致。有效值相乘的过程是,首先判断两数有效值符号位是否相同,如果相同则令计算结果的有效值符号位为0,否则为1,然后再将有效值绝对值部分相乘。除法的运算原则与乘法类似。

(3)取模运算:首先将两数进行除法运算,令运算结果的有效值符号位与被除数的有效值符号位相同。由于取模运算即是获取除法运算结果的整数部分,所以判断除法运算结果的指数符号位是否为0,如果为0,则表明除法运算的结果本身就是整数,即为所求取模运算的结果;如果为1,表明除法运算的结果是个小数,需要将除法运算结果有效值绝对值右移1位,同时指数加1,重复此法,直到指数为0,得到取模运算的结果。取余运算思想与取模类似。

(4)阶乘运算:采用直接查表法。由于在导航定位运算中会用到阶乘运算,一般计算到20的阶乘就能达到足够的精度,所以用case语句实现20以内正整数的阶乘和二次阶乘。这种用逻辑电路产生数据的方法,不仅计算速度快,而且避免了存储器的使用。

以上所有基础运算的实现方式和数据的表示形式都是以误差最小、精度最高为目标,如果想要获得更高的精度则需适当地扩展数据的表示位数。

2 处理器架构

本运算处理器不仅能完成上述基础运算,通过数据的操作指令和基础运算指令的配合,还可以完成各种导航计算所涉及函数的运算,处理器架构如图3所示。

处理器主要由main模块、基本指令集模块、4个 40 bit寄存器(A、B、C 和 D)、一个 32×40 bit RAM 和一个 1 300×8 bit RAM构成。4个40 bit寄存器中的A、B和C寄存器用来存储操作数据,D寄存器存储运算结果数据;32×40 bit RAM是数据存储器,用来存储运算过程中会反复用到的中间值数据;1 300×8 bit RAM是函数子程序存储器,用于存储子函数程序。函数子程序存储器中存放导航定位运算中需要用到的所有函数的子程序。函数子程序通过控制基本指令集模块反复进行基础运算和数据调度,实现各种函数的计算。

基本指令集模块能够完成的基本指令包括:(1)置数指令,对指定寄存器或数据存储器置数;(2)数据传送指令(寄存器到数据存储器),将指定寄存器中的数据传递给指定数据存储器;(3)数据传送指令(数据存储器到寄存器),将指定数据存储器中的数据传递给指定寄存器;(4)数据互换指令,实现两个指定寄存器间的数据互换;(5)指针跳转指令,使程序指针跳转到子程序存储器指定位置;(6)定时指令,完成指定时间的延时;(7)比较指令,实现两数比较大小,用于收敛判断等操作;(8)运算结束指令,使程序指针停止增加,可通过外部指令唤醒;(9)基础运算指令(集),包括加法指令、减法指令、乘法指令、除法指令、取模指令、取余指令、阶乘指令和二次阶乘指令。为了便于硬件测试,还专门增加了将运算结果通过USB上传到PC的指令,该指令只用于开发阶段,把硬件计算结果返回到PC以便分析。

函数子程序存储器中存储的函数子程序指令包括:sin(x)指 令 、cos(x)指 令 、arcsin(x)指 令 、arccos(x)指 令 、tan(x)指 令 、cot(x)指 令 、arctan(x)指 令 、arccot(x)指 令 和 开 方指令等。这些指令都接受一个计算精度参数,当达到精度时即停止迭代,精度最高为10-7。

运算处理器接收的宏指令可以包含上述所有基本指令和函数指令,main模块的作用就是接收宏指令,判断接收到的宏指令是基本指令还是函数指令。如果是基本指令,则转发该指令到基本指令集模块,调用基本指令集模块完成操作,并将运算结果存储在寄存器D中,指令执行完毕。如果是函数指令,则给出相应函数子程序在函数子程序存储器中的起始地址,指针跳转到起始地址,按照函数子程序里的基本指令顺序执行。执行过程中会反复调用基本指令集模块,以及不断对寄存器和数据存储器中数据进行读取、存储或者交换等操作,函数子程序执行完,将得到的运算结果存储在寄存器D中,指令执行完毕。

下面以置数指令为例介绍指令传送格式。首先发送指令编号字节,每个指令的编号都由一个字节表示,置数指令的编号为8’h01;接着发送指定要赋值的寄存器或数据存储器的编号字节,同样由一个字节表示,8’h00~8’h23依次代表数据存储器 0~31和寄存器 A,B,C,D;最后发送数据字节,数据字节表示将要给寄存器或者数据存储器赋的值,由5个字节(40 bit)表示,如图4所示。例如发送指令字节为56’h01_21_00_00_00_00_16,其含义则是向寄存器B置十进制数22。

函数子程序存储器的大小是由导航定位运算需要实现的函数个数和函数子程序的大小决定的。如果需要增加函数个数,可以对函数子程序存储器的容量进行相应的扩展。

3 FPGA验证

运算处理器性能的好坏主要由运算速度、精度、功耗、成本等几方面决定。前面已经提到,本文设计的运算处理器是专用于导航定位计算的,没有其他冗余电路,所以占用硬件资源少,功耗低,其硬件实现也使得处理器速度很快。下面将主要针对处理器的精度进行测试。

将运算处理器的Verilog HDL代码编译后,下装到FPGA开发板里,然后通过USB向运算处理器发送宏指令,运算处理器接到指令进行处理,指令执行完毕后将得到的结果通过USB上传给PC,即可判断计算结果的正确性和计算精度。

以sin(x)计算为例,要想用基础运算来实现 sin(x),则需要将sin(x)进行泰勒展开

由于sin(x)的周期性,且本系统具有取模运算能力,因此 x的取值范围在[-π,+π]。 图 5所示为 x在[-π,+π]基本周期取值范围内,以0.01为步长的计算结果曲线,运算精度设为10-7。其过程为对每个x值进行sin(x)运算,将所有运算结果上传到PC并写在一个文件中,用Matlab读取文件并进行数据格式解释,然后对得到的结果绘图。可以看出,在整个周期内运算结果正确,同时,精度分析也表明计算精度能满足10-7要求。

由于所有三角函数和反三角函数都可以用泰勒级数展开的形式或者相互之间的算术关系来实现,而开方也可以用快速收敛的简单迭代公式y=(y2+x)/2x来实现,所以利用基本运算组合即可实现所有所需函数的运算。当然,在硬件支持的范围内,通过算法调度,用户也可以采用更好的算法实现函数计算。

本文设计了一个专用于导航基带芯片设计的运算处理器,不同于ARM等通用微处理器,这种运算处理器采用自己的数据格式,并完成了基于这种数据格式的基础运算以及多种数学函数的计算。FPGA验证表明,处理器计算迅速准确,精度符合导航定位计算的要求。由于它是专门针对导航定位计算优化的处理器,因而更节省硬件资源,可大大降低功耗和成本,在低功耗导航芯片设计中具有很强的实用价值。

[1]HEGARTY C J,CHATRE E.Evolution of the global navigation satellite system(GNSS)[J].Proc.IEEE,2008,96(12):1902-1917.

[2]RAASAKKA J,HURSKAINEN H,NURMI J.GNSS baseband processing in a multi-core platform[C].International Conference on Localization and GNSS.Tampere,Finland,2011:42-46.

[3]CHEN J C,ZHANG D J,GAO X H.Research of beidou system in electric power system time service[C].China International Conference on Electricity Distribution.Guangzhou,china,2008:1-5.

[4]WU P,HE C,ZONG Z L.A novel correlation architecture of acquisition for GNSS satellite navigation system receiver based on CORDIC algorithm[C].International Conference on Computational Problem-Solving.Chengdu,China,2010:115-121.

[5]ZHAO L,GAO S H,LI P F,et al.The design and validation of RF front-end platform for GPS receiver[C].IEEE International Conference on Information and Automation.Harbin,China,2010:519-522.

[6]ZHUANG W H,TRANQUILLA J.Digital baseband processor for the GPS receiver modeling and simulations[J].IEEE Transactions on Aerospace and Electronic Systems,1993,29(4):1343-1349.

[7]WANG B,DONG J X.The system of GPS navigation based on ARM processor[C].International Forum on Information Technology and Applications.Taiyuan,China,2010:308-312.

[8]ZENG Q X,WANG Q,PAN S G,et al.A GPS L1 software receiver implementation on a DSP platform[C].International Conference on Intelligent Networks and Intelligent System,Nanjing,China,2008:612-615.

猜你喜欢
子程序存储器寄存器
STM32和51单片机寄存器映射原理异同分析
静态随机存储器在轨自检算法
Lite寄存器模型的设计与实现
浅谈子程序在数控车编程中的应用
子程序在数控车加工槽中的应用探索
存储器——安格尔(墨西哥)▲
西门子840D系统JOG模式下PLC调用并执行NC程序
基于Nand Flash的高速存储器结构设计
简化编程与子程序嵌套的应用
高速数模转换器AD9779/AD9788的应用