技术平台
基于TMS320F2812定点库函数设计
张萍
(中国空空导弹研究院控制所,河南洛阳471000)
摘
要:目前一些新型号的研制都采用高端计算机,如TMS320F2812计算机。现行研制的某型号空空导弹陀螺采集周期
短,且自动驾驶仪等算法逐渐采用新的设计方法如插值运算,使得计算量变大,占用了大量的时间,造成机时紧张。为了提前做好第二方案准备,为将来优化机时打下基础,提出了编制基于TMS320F2812的定点库函数。库函数的编制有两种设计方
鉴于提高机时的目的,采用计算效率比较高的汇编语言来进行编程。该法:C语言和汇编语言。C语言可读性强,但效率较低。
定点库函数是由F2812汇编语言按照一定的算法编制而成,包括单字定点数学函数,双字定点数学函数以及单双字向量计算函数。并通过单元测试和集成测试,对此定点库函数的性能和可靠性进行了验证。
关键词:TMS320F2812;寄存器;定点库函数
1TMS320F2812硬件结构
TMS320F2812的中央处理器(CPU)的功能是控制程序流程
和指令处理。它实现算术、逻辑、乘法和移位运算。在进行有符号的数学运算时,CPU按2的补码处理。
1.1CPU结构
TMS320F2812具有一个中央处理器(CPU),仿真逻辑以及与内存和外设交互的信号。这些信号中包括三条地址总线和三条数据总线。
实时仿真和显示、地CPU主要包括:程序和数据控制逻辑、
址寄存器算法单元(ARAU)、算术逻辑单元(ALU)、预取队列和指令解码、程序和数据的地址生成器、定点MPY/ALU和中断处理。
1.2CPU寄存器
1.2.1累加器(ACC,AH,AL)
累加器(ACC)是TMS320F2812提供的一个主要寄存器。除了直接在内存或者寄存器中进行的操作,其他所有ALU操作的结果都送到ACC中。加法、减法和比较ACC支持单循环的转移、
操作,它还可以来存贮乘法运算的32位结果。ACC可以分成两个独立的16位寄存器:AH(高16位)和AL(低16位)。
1.2.2被乘数寄存器(XT)
被乘数寄存器(XT寄存器)主要用来存储32位乘法操作之前的一个32位有符号整数。这个XT的低16位称为TL寄存器。寄存器用来存储一个16位数,并自动进行符号扩展存在XT寄存器中。XT的高16位称为T寄存器,它主要来存储16位乘法之前的16位整数。
1.2.3乘寄存器(P,PH,PL)
乘寄存器(P寄存器)通常被用来存储32位乘积。它也可以来直接存储16位或32位的数据存储地址,16位的常数,32位ACC,16位或32位的可编址CPU寄存器。P寄存器可被视为一个32位寄存器或者两个相互独立的16位寄存器:PH(高16位)和PL(低16位)。
1.2.4堆栈指针(SP)
通过堆栈指针(SP)可以对数据存储器的软堆栈进行访问。SP只有16位而且只能对数据空间的低64K进行编址。当使用SP时,32位地址的高6位被强迫置0。重置后,SP指向地址0x00000400。
1.2.5辅助寄存器(XAR0-XAR7,AR0-AR7)
CPU提供了8个32位的寄存器(XAR0-XAR7),可以用来指向内存或者用作通用寄存器。许多指令都允许访问XAR0-XAR7的低16位,它们可以用作循环控制和进行16位比较的通用寄存器。当访问AR0-AR7时,辅助寄存器的高16
位(AR0H-AR7H)可以修改也可以保持不变,这取决于所使用的指令。AR0H-AR7H只能作为XAR0-XAR7的一部分来访问,而不能单独访问。
2函数调用规则
C在调用函数时有很严格的规则。除了一些特殊的函数,其他任何调用C的函数或是被C调用的函数都必须遵循这些规则。否则,将破坏C的运行环境,导致程序运行失败。函数的调用以及被调函数的响应的规则请参考([1])。
3定点库函数设计
定点库函数是由F2812汇编语言按照一定的算法编制而成,基本实现嵌入式软件计算中所需要的基本运算函数,包括单字的定点数学函数,双字定点数学函数以及向量计算函数等。与用C语言编写的库文件相比,具有占用资源少,运算速度快的特点。是专门为定点运算编制的程序。
在函数编写过程中,值得注意的一点是变量的存储,这关系到如何在寄存器或是堆栈中正确的定位变量。通常情况下,变量
辅助寄存器XAR4和XAR5以及堆栈Stack存放在累加器ACC、
中。若是使用堆栈存储变量,要在函数开始时通过修改SP值为这些变量划出一定的空间。。
3.1乘法函数
3.1.1乘法函数组成
乘法函数包括:带取整的单字乘法(_fmul),不带取整的单字乘法(_fmul0),得到双字长形结果的小数的单字乘法函数(_fmul2);双字长小单位数的双字乘法函数(_lfmul),小于双字的定点数的双字近似乘法函数(_lfmul0),小于双字长的数与小于单字的近似乘法函数(_lfmul1)。
3.1.2乘法函数原理
F2812使用了一个可以进行16*16位和32*32位定点乘法的硬件乘法器。F2812乘法器能够进行16*16位的乘法,生成一
乘法器接受两个16位的输入:个有符号或无符号的32位乘积。
(1)其中一个输入是T寄存器的高16位;
(2)另一个输入来自数据存储单元或寄存器(由用户在乘法指令中指定),或是一些F2812乘法指令允许用户使用的常数。
在两个数相乘之后,根据所使用的特定的乘法指令,32位结果存放在32位的乘积寄存器或者32位的累加器ACC。根据PM值进行左移,对于实现小数运算或小数乘积的调整是非常有用的。乘积左移一位可用来删除两个16位符号数相乘后多余的符号位。
F2812中32*32位定点乘法运算:
(1)第一个输入来自程序存储单元,或32位的被乘数寄存
作者简介:张萍(1980年-),女,河南洛阳人,助理工程师,硕士,研究方向:系统算法与飞控软件设计。
2008年第8期
!
技术平台
器(XT)。
(2)另一个输入来自数据存储单元或寄存器(在乘法指令中指定)。
两个数相乘之后,64位结果的32位存储在P寄存器。用户可以选择要存入的部分(高32位或低32位),也可以根据所使用的指令选择是有符号乘或无符号乘。
3.2平方函数
3.2.1平方函数组成
平方函数包括:定点数单字长数的平方计算函数(_f2pow),定点数双字长数的平方计算函数(_lf2pow)。
3.2.2平方函数原理
_f2pow函数中使用了SQRA这条指令,它将P寄存器的内容左移PM位后加到ACC中,然后把x装入T寄存器,x的平方
(平方/加)和SQRS(平方/减)指令为了装入P寄存器。SQRA
对数据存储器中的数值求平方把相同的值送到乘法器的两个输入中。_lf2pow函数中引用了ASM中的双字长数乘法,即¥lfmul函数。
3.3开方函数
3.3.1开方函数组成
开方函数主要就是小单位数的求方根计算函数_fsqrt。3.3.2开方函数原理
小单位数的求方根计算函数(_fsqrt)。该函数采用对该函数求泰勒级数的方法求得,y=(((a4*x+a3)*x+a2)*x+a1)*x+a0且0=<x<1。将[0,1)区间分成若干个子区间,在每个子区间内进行泰勒级数的展开,来选取相应的系数a0,a1,a2,a3,a4。
3.4除法函数
3.4.1除法函数组成
除法函数包括:带取整的单字除法计算函数(_fdiv),不带取整的单字除法计算函数(_fdiv0),双字长定点数除法函数(_lfdiv),双字长定点数近似除法函数(_lfdiv0)。
3.4.2除法函数原理
在TMS320F2812上实现单字除法是用特殊的条件减SUBCU重复来实现的。给出16位正除数和正被除数,重复16次SUBCU命令,在累加器低位产生16位商,而余数在累加器高位。SUBCU所执行的二进制除法与通常所进行的长除法相同,将被除数移位直至减除数不再产生负结果。对于不产生负结果
放入商的最低位,然后移位。在每次减后进行移位“1”的每次减,
产生的余数和商分别在累加器的高、低半部。
当用SUBCU命令时,被除数和除数必须为正,且除数小于移位被除数的状态是有结果的符号来决定。因此必须确定商的符号,并且使用被除数和除数的绝对值来计算商。
3.5转换函数
3.5.1转换函数组成
转换函数是指F2812计算机工作程序中从fixed小数到lfixed双字长形小数的转换和逆转换函数,包括从lfixed小数到fixed的转换(_fix),从fixed小数到lfixed的转换(_lfix)。
3.5.2转换函数原理
(1)_fix:当输入的低16位的最高位为1时,由于取整的原因,得到的输出是输入的高16位加1,当输入的低16位的最高位为0时,得到的输出是输入的高16位;
(2)_lfix:该函数的功能是把单字的输入转换为双字,因此输出为输入的字放到高位,其低位置0,没有误差产生。
3.6三角函数
3.6.1三角函数组成
三角函数主要包括:小单位数的正弦计算函数(_fsin),小单位数的余弦计算函数(_fcos),定点数的反正弦计算函数(_fasin)。
科技经济市场
3.6.2三角函数原理
(1)_fsin:采用对正弦函数求泰勒级数的方法求得的,Sinx=((
当(c71*x**2+c51)*x**2+c31)*x**2+c11)*x+c12*x且-1=<x<1。
对一个角度求正弦时,首先把它化为在[-pi/2,pi/2)范围内,然后除以pi/2,放入函数_fsin中调用;
(2)_fcos:利用正弦函数求得的;
(3)_fasin:采用对反正弦函数求泰勒级数的方法求得的,asinx=(((a4*x+a3)*x+a2)*x+a1)*x+a0且-1=<x<1。
3.7加法溢出检查函数
F2812计算机工作程序中定点数的复合字溢出检查函数_overadd,该函数检查输入数据之和是否溢出,当输入数据之和的绝对值大于最大数7fff时,输出为1,否则为零。
3.8向量函数
3.8.1向量函数组成
向量函数是F2812计算机工作程序中的坐标向量与四元数的运算(文件中描述操作中用到的向量、四元数及函数)。向量函
数包括:
矢量与标量相乘(1)单字向量函数:矢量乘法函数(_fvemul)、
向量修正函数(_fvcor)、向量积函数(_fvvmul)、标的函数(_fvsmul)、
量积函数(_fsvmul)、“不等于”比较函数(_fvneq)、大于标量比较函
小于标量比较函数(_fvlst);数(_fvgrt)、
向量相减函数(2)双字向量函数:向量相加函数(_lfvadd)、
元素加函数(_lfveadd)、归零函数(_lfvnul)、次位字规零时(_lfvsub)、
向右移位函数(_lfvshr)、向左移位函数首位字取整函数(_lfvrnd)、
单项乘法函数(_lfvemul)、与标量相乘函数(_lfvsmul)、单(_lfvshl)、
向量积函数(_lfvvmul)、标量积函数项增加标量函数(_lfvsadd)、
(_lfsvmul)、精确修正向量函数(_lfvcor)、绝对值单项计算函数(_lfvabs);
“不等于”比较函数(_fkneq);(3)四元数的首位字
双字(4)换算函数:单字向量换算为双字向量函数(_lfvconv)、
向量换算为单字向量函数(_fvconv)。
3.8.2向量函数原理
向量函数设计类似于基本数学函数的编写,都是应用
双字标F2812基础汇编指令来完成。其中,双字单项乘法函数、
量积函数、双字与标量相乘函数和双字向量积函数用到基本库函数中的双字乘法函数¥lfmul;双字精确修正向量函数用到双字乘以单字函数¥lfmul1;单字矢量除以标量函数用到单字相除函数¥fdiv。
4定点库函数测试
为了验证自行编制的基于TMS320F2812定点库函数的正确性、可靠性,特对该定点库函数进行了测试。主要测试方法包括:单元测试和集成测试。
4.1单元测试
对定点库基本函数的单元测试采用了与真值相比较的方
(已经法,而对向量函数的测试则采用与用C语言编写的库文件
验证且使用)比较的方法。测试结果表明:定点库函数能够正确实现算法功能,部分库函数在边界点测试结果与真值不符,由于本文是定点库函数,所以在应用过程可以通过选取合适的比例尺来避免使用边界点。
4.2集成测试
集成测试采用将定点库函数应用在某型号飞控软件工作程序中的功能比较单一的模块中,进行软件仿真的方法。
4.2.1集成测试的基本方法
(1)由于测试所用软件是浮点型,所以在将定点库函数应用到该模块中各子模块之前,先要调用input()函数将各子模块的输入变量按一定的比例尺转化为定点类型,即整型量;
!
2008年第8期
科技经济市场
技术平台
正交频分复用(OFDM)在水声通信中的应用
王青春
摘
戴荣涛
(92823部队,海南三亚572021)
要:本文介绍了正交频分复用(OFDM)技术的基本原理,介绍了水声通信的历史,水声通信的发展特点。讨论了OFDM系
统在水声系统实现方法,分析了水声正交频分复用的调制和解调过程,并简要分析了OFDM水声通信系统的性能特点。(O);水声通信;调制;解调关键词:正交频分复用FDM
1引言
在水声通信中,随着探潜区域从沿海大陆架延伸到深水区,
以及探潜距离和精度的提高,要求水声数据传输的传输距离更远,传输速率更高,传输误码率更低。同时水下武器系统的日益智能化,要求对其进行相应的指挥控制。对水下航行器和探测器进行监测和导航,以及对潜通信等使得水下通信技术的研究得到人们的高度重视,水声通信技术的重要性也日益突出。与此同时,其他领域的技术,尤其是电信、电子以及计算机技术的飞速发展给水声通信的研究提供了强大的技术支持并极大的促进了水声通信的发展。近10多年来,水声通信发生了深刻的变化。其研究手段和实现方法发生了根本的变化。
在水声通信系统中,如何高速和可靠地传输信息成为人们关注的一个焦点。虽然现在数据传输理论和实践已经取得了相当大的进展,但是随着通信的发展,特别是无线通信业务的增长,可以利用的频率资源日趋紧张。OFDM调制技术的出现为实现高效的抗干扰调制技术和提高频带利用率开辟了一条的新路径。OFDM调制技术的应用可以追溯到二十世纪60年代,主要用于军用的高频通信系统,也曾被考虑应用于高速调制解调器。目前OFDM技术已经被广泛应用于广播式的音频和视频领域和民用通信系统中,主要的应用包括:非对称的数字用户环路(ADSL)、ETSI标准的数字音频广播(DAB)、数字视频广播
高清晰度电视(HDTV)、无线局域网(WLAN)等。(DVB)、
2OFDM基本原理
OFDM是一种无线环境下的高速传输技术,该技术的基本原理是将高速串行数据变换成多路相对低速的并行数据并对不同的载波进行调制。这种并行传输体制大大扩展了符号的脉冲
传统的频分复用方法中各个子宽度,提高了抗多径衰落的性能。
载波的频谱是互不重叠的,需要使用大量的发送滤波器和接受滤波器,这样就大大增加了系统的复杂度和成本。同时,为了减小各个子载波间的相互串扰,各子载波间必须保持足够的频率间隔,这样会降低系统的频率利用率。而现代OFDM系统采用数字信号处理技术,各子载波的产生和接收都由数字信号处理算法完成,极大地简化了系统的结构。同时为了提高频谱利用率,使各子载波上的频谱相互重叠(如图1所示),但这些频谱在整个符号周期内满足正交性,从而保证接收端能够不失真地复原信号。
图1正交频分复用信号的频谱示意图
当传输信道中出现多径传播时,接收子载波间的正交性就会被破坏,使得每个子载波上的前后传输符号间以及各个子载波间发生相互干扰。为解决这个问题,在每个OFDM传输信号前面插入一个保护间隔,它是由OFDM信号进行周期扩展得到的。只要多径时延不超过保护间隔,子载波间的正交性就不会被破坏。
3OFDM系统在水声通信中的实现
水声信道是一个十分复杂的时-空-频变信道,其主要特征是复杂性、多变性、强多途和有限带宽。声传播损失和海水吸
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(2)根据定点库函数改编该模块中各子模块;
(3)在输出变量时,要先调用output()函数将各子模块的输出
变量按相应的比例尺转化为浮点类型;
(4)对以上已经应用定点库函数地工作程序进行软件仿真,并将此结果与原浮点工作程序的仿真结果进行比较。
4.2.2集成测试结果
下面以关键参数变化图的方式将应用定点库函数改编后的仿真和原仿真结果对比,如图1-4所示。
图3SAK图4OMX
由图1-4可以看出,应用基于TMS320F2812定点库函数改编后的软件仿真关键参数曲线与原浮点算法软件仿真吻合较好,说明该定点库函数很好地实现算法功能。
参考文献:
图1WUY1,WY1图2WUZ1,WZ1
[1]TMS320C28XOptimizingC/C++CompilerUse'sGuide,TexasInstrumentsIncorporated,2003.
[2]TMS320C28XDSPCPUandInstructionSetReferenceGuide,TexasInstrumentsIncorporated,2003.
2008年第8期
!
因篇幅问题不能全部显示,请点此查看更多更全内容