在现代DSP的开发中,越来越多地采用C/c++作为开发语言,而C/C++程序的优化成为DSP’软件开发的重要环节。在此介绍TI C6000的软件开发流程,重点讨论C6000系列的C/C++程序优化技术,包括优化流程,C/C++代码优化方法,编写线形汇编代码优化方法等。为DSP的C/C++软件开发提供了全面的程序优化技术和方法,对实际系统的开发具有重要的现实意义。
0 引 言
目前在DSP平台上编程多使用汇编语言与C语言,为了追求代码的高效,过去一般用汇编语言来编制。DSP程序汇编语言简洁高效,能够直接操作DSP的内部寄存器、存储空间、外设,但可读性、可修改性、可移植性较差;随着DSP应用范围不断延伸,应用的日趋复杂,汇编语言程序在可读性、可修改性、可移植性和可重用性的缺点日益突出,软件需求与软件生产力之间的矛盾日益严重。引入高级语言(如C语言,C++,Java),可以解决该矛盾。在高级语言中,C语言是一种较为高效的高级语言,在可读性、可移植性等方面优于汇编指令。各个DSP芯片公司都相继推出了相应的C语言编译器。
但由于DSF结构的特殊性,使得该平台上的C语言编译器无法充分发挥DSP器件的性能优势。同样功能的C语言程序,效率往往只有直接书写的汇编程序的几分之一甚至几十分之一,因此有必要根据DSP的特性对C语言编写的程序进行进一步的优化。
1、TMS320C6000处理器介绍
TMS320C6000是TMS320系列产品中的新一代高性能DSP芯片,共分为两大系列。其中定点系列为TMS320C62xx和TMS320C64xx;浮点系列为TMS320C67xx。由于TMS320C6000的开发主要面向数据密集型算法,它有着丰富的内部资源和强大的运算能力,所以被广泛地应用于数字通信和图像处理等领域。
C6000系列CPU中的8个功能单元可以并行操作,并且其中两个功能单元为硬件乘法运算单元,大大地提高了乘法速度。DSP采用具有独立程序总线和数据总线的哈佛总线结构,仅片内程序总线宽度就可达到256位,即每周期可并行执行8条32位指令;片内两套数据总线的宽度分别为32位;此外,DSP还有一套32位DMA专用总线用于传输。灵活的总线结构使得数据瓶颈对系统性能的限制大大缓解。C6000的通用寄存器组能支持32位和40位定点数据操作,另外C67xx和C64xx还分别支持64位双精度数据和64位双字定点数据操作。除了多功能单元外,流水技术是提高DSP程序执行效率的另一主要手段。由于TMS320C6000的特殊结构,功能单元同时执行的各种操作可由VLlW长指令分配模块来同步执行,使8条并行指令同时通过流水线的每个节拍,极大地提高了机器的吞吐量。
2、 C6000软件开发流程
图1为C6000的软件开发流程图。图中阴影部分是开发C代码的常规流程,其他部分用于辅助和加速开发讨程.
C/C++源文件首先经过C/C++编译器(C/C++cornpiler)转换为C6000汇编源代码。编译器、优化器(optimizer)和交叠工具是C/C++编译器的组成部分。编译器使用户能一步完成编译、汇编和连接;优化器调整合修改代码以提高C程序的效率;交叠工具把C/C++语句和对应的汇编语句交叠列出。
汇编源代码再经过汇编器(Assembier)翻译为机器语言目标文件。机器语言是基于通用目标文件格式(CommonObject File Format,COFF)的。
连接器(Linker)连接目标文件,生成一个可执行文件。它要完成地址的重分配(Relocation)和解析外部引用(Resolve External References)。
得到可执行文件之后就可以进行调试。可用软件仿真器(Simulator)在PC机上对指令和运行时间进行精确仿真;用XDS硬件仿真器(Emulator)在目标板上进行调试。
调试通过后即可下载到目标板进行独立运行。
|