SHARCDSP芯片在阵列信号处理中的性能研究
熊 霞,斯炜玮,吴 瑛
(信息工程大学信息工程学院 河南郑州 450002)
随着DSP技术的快速发展,实时处理速度的提高,动态范围的增大,数据格式也由定点型向浮点型转换并且支持汇编和语言编程,这些优势使得DSP的应用越来越广泛。AD公司的ADSPSHARC系列处理器是一种高性能的数字信号处理器,这一系列芯片内部采用超级哈佛结构,集成了大容量的双端口SRAM,程序/数据外部总线以及I/O外设,从而形成了一个完整的数字信号处理系统。ADSP21160就是其中的一种,他支持32位浮点和定点数据格式,内部SRAM容量4Mb,片内有2个相同的运算单元,支持SIMD(Single lnstruction Multiple Data)方式,增强了并行处理能力,数据总线的宽度64位,程序总线宽度32位,数据传输吞吐率大,性价比高。本文在实现基本的阵列信号测向算法一MUSIC算法中就选用了ADSP21160芯片。
2 MUSIC算法
MUSIC(MultipleSignalCharacteristic)算法即多重特征结构算法是基本的阵列信号处理方法,通过对来波的空间谱进行估计,并分析其能量的分布状态,以确定空间来波的方向,也就是解决如何从背景噪声中检测出空间源信号并估计出信号的参数,如方位角、仰角等。这种测向技术具有在较强干扰环境下同时对同信道内多个信号进行快速、高灵敏度、高的测向功能。
3 VisualDSP++的C/C++实时运{亍模式以及C/C++与
汇编语言的接口
Visual DSP"是集成的开发软件平台,支持ADSPSHARC系列处理器的各种产品。Visual DSP"通过图形窗口的方式和用户进行信息交换,可以在窗口中进行工程管理,编辑,编译和调试程序,大大提高了编程效率。同时支持汇编语言和C/C++,汇编语言与硬件结合紧密,指令代码短,占用内存少,适合运算速度要求高的场合,而C/C++基本脱离硬件,可读性和可移植性强,开发效率高。程序开发中要将汇编语言和C/C++结合起来,发挥两种编程方法的优势,写出可移植性强,执行效率高的DSP应用程序。
3.1 C/C++的运行模式
利用C/C++开发DSP程序,必须熟悉(C/C++的运行模式以及堆栈的配置、数据访问等。C/C++的运行环境就是一系列的约定,包括寄存器、存储器的使用和程序控制都要遵循约定,在C/C一中调用汇编子程序也要遵循这些约定。程序的运行环境如图2所示。
在C/C++运行模式中,对寄存器的访问有限制,即编译器寄存器和堆栈寄存器属于专用寄存器,不能作为其他用途,寄存器的值不能改变。预保留寄存器和用户寄存器在使用前要先保留这些寄存器的内容,并在程序返回时恢复其内容。使用可擦写寄存器时不必考虑以前的内容,不用保存和恢复寄存器的内容。
C/C++运行环境要求指定段名的存储器来放置程序代码,并和链接描述文件的输出段名相对应,在VisunlDSP…-环境中有默认的存储器段名。
堆栈在语言程序设计中比较重要,C/C++运行时使用堆栈自动保存变量和返回地址,系统使用帧指针和堆栈指针管理堆栈。
4提高MUSIC算法效率的途径
在实际应用中,对测向时间的要求很严格;MUSIC算法中复信号特征值分解的程序复杂,而谱峰搜索所涉及的计算量大,用ADSP21160实现MUSIC算法,其难点在于如何充分利用芯片的结构特点提高程序效率。儿丁满足系统设计的要求,同时从开发程序的简化考虑。总体框架用C/C--语言来实现,复信号的特征值用C语言实现,同时为了缩短程序运行时间,采用了以下措施:
4.1 充分利用C/C++语言和汇编混合编程
MUSIC算法中特征值分解的程序比较复杂,用C/C++实现比较方便,在谱峰搜索中涉及到大量计算COS(x)和sin(x)值,耗用的时间多,采用了查表法,在C语言中插入汇编来实现。在C/C++中计算一个COS(J)的值需要57个指令周期,采用汇编子程序,同时计算出cox(x)和sin(J)只需要37个指令周期,整个程序执行效率提高了30%左右。
4.2 尽可能使用ADSP专门的库函数
ADSP除了支持标准的C/C++库函数外,还有专门的库函数,可以实现向量和矩阵运算、矩阵转置、滤波器等,这些库函数大多数是用汇编实现的,效率较高,可以直按调用,在谱峰搜索中有大量的矩阵运算,用DSP专门的库函数实现减少了指令周期。
4.3 利用VisualDSP++中有功能强大的优化器
Visual DSP++中优化器充分利用硬件特性对C/C++程序进行优化,ADSP2]160内部具有多总线结构、多运算器结构、指令缓冲与程序流水结构以及长指令结构,优化器尽量利用这些结构资源来优化程序,提供的代码空间和的运行速度,优化器特别对循环语句的优化效率
高,可将效率提高10~20倍.
4.4利用ADSP21160SMD模式工作
ADSP211 60内部有两个完全相同的处理单元(PEx和PEy),通过设置系统控制寄存器,他既可以工作于SISD模式下,也可以工作于SIMD模式下,当处在SIMD模式下处理器执行以下并行操作:
将同一条指令同时发送到两个处理单元。
从存储器载人两组操作数分别送到两个处理单元。
同时在两个处理单元里执行同一条指令。
将两个运算输出结果同时保存到存储器中。
虽然两个处理单元共用一套地址发生器,但是在两个处理单元中有独立的"内存访问路径逻辑单元",所以在进行内存访问时,对于地址发生器产生的同一地址,两个处理单元可以访问到不同地址中的数据,使得单指令多数据得以实现。
SIMD模式下的指令操作得以扩展,一方面是数据传送指令的扩展,数据传送的SIMD模式是基于64位宽的数据线基础上,在对个处理单元PEx的寄存器堆中的内容执行某个操作的同时,自动对第二个处理单元PEy的寄存器堆执行与个处理单元相同的操作;第二个处理单元是隐含操作,在SIMD模式下自动执行。两个单元可并行执行同一条指令,而操作数不同,这就使处理器的计算能力提升了一倍,效率得以提高;另一方面是条件指令的扩展.两个处理单元的条件指令并不是完全复制的,而是由两个处理单元的状态共同决定,其规则如表1所示。
在汇编程序中实现SIMD模式主要通过指令体现,在C/C++运行环境中要实现SIMD的工作模式有特定的条件限制,必须对数据的大小和在存储器中的位置做合理的安排,然后在指令前标注#pragma SIMD_for即可实现SIMD工作模式.
本文通过使用ADSP21160来实现MUSIC算法,详细讲解了C/C++语言的运行环境和汇编语言接口,并且充分利用ADSP21160中各种优化方式特别是该芯片的SIMD工作模式来提高程序的执行效率。笔者认为熟悉芯片硬件结构并充分理解C/C++的运行模式对于提高程序效率有很大的帮助。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。