TMS320C62x软件开发方法探讨

时间:2011-09-03

  TMS320C6x系列主要面向如GSM ( GlobalSystem for Mobile communications) 基站、通信网络等应用, 因其先进的体系结构、高达200MHz的主频而成为DSP 的高端主流产品。TMS320C6x体系结构适应绝大多数DSP 算法而使得应用难度相对较低, 极高的主频加上较易获得的并行性使得高性能更有保障。本文介绍对C62x的系统结构以及基于C62x的软件设计方法,在TMS320C6201上实现宽带毫米波雷达目标时延神经网络识别算法进行阐述。

  1TMS320C62x(以下简称C62x)的系统结构

  C62x的系统结构如图1所示,C62x处理器由三个主要部分组成:CPU内核、外设和存储器。CPU内核中的8个功能单元可以完成并行运行,功能单元执行逻辑、位移、乘法、加法和数据寻址等操作。取指令、指令分配和指令译码单元每周期可以从程序存储器到功能单元传递8条指令,总字长为8×32=256位。芯片内部设置了专门的指令分配模块,可以将每个256位的指令包分配到8个功能单元中,并由8个功能单元并行运行。C62x芯片的时钟频率可以达到200MHz,8个功能单元同时运行时,该芯片的处理能力高达1600MIP.

  C62x 是C6000 系列中的32 位定点处理器,含8 个独立的处理单元并且C62x 率先在DSP 中应用超长指令字(VLIW) 技术。C62x 中有32 个通用寄存器, 大量中间结果可存于其中并配合软件流水线技术以提高并行度。C62x 的VLIW 指令调度和同步是在编译阶段通过代码的优化来实现, 这要求优化器对程序的行为特点有完全的了解以限度地开发数据流的并行度而在代码中显式地表达出来。VLIW 配合先进的代码优化技术如NSA( non-single assignment) 、软件流水线等可以充分利用DSP 的硬件资源。如以1024 点16 位基4 FFT 为标准, 考虑数据存取所需的操作, 则加速比可达到5. 2。

  2 C62x的软件设计方法

  用户在开发应用软件时,首先应当明确应用软件的功能和性能要求,然后按照代码开发流程的三个阶段进行软件设计:阶段是开发C代码;第二阶段是优化C代码;第三阶段是编写线性汇编代码。如果在某一阶段已经实现了应用软件的功能和性能要求,那就不必进入下一阶段了。代码开发流程图如图2所示。

  2.1 开发C代码

  开发C语言代码需要考虑的要点包括:①数据结果;②分析C代码性能;③使用查找表;④用整形数(int)表示浮点数。

  2.1.1 数据结构

  C62x编译器对每种数据结构定义一个尺寸,字符型(char)的8位,短整型(short)为16位,整型(int)为32位,长整型(long)为40位,浮点型(float)为32位,双浮点型(double)为64位。在编写C代码时应当遵循的规则是:避免在代码中将int型和long型作为同样尺寸处理,因为编译器对long型数据使用40位操作;对于定点乘法,应当尽可能使用short型数据,这种数据类型可以更有效地使用C62x的乘法器;对循环计数器应当使用int或者无符号int类型,而不使用short或者无符号short类型,以避免不必要的符号扩展。

  2.1.2 分析C代码性能

  应用调试器的Profile工具可以得到一个关于C代码中各特定代码段执行情况的统计表,也可以得到特定代码段执行所用的CPU时钟周期数,因此可以找出影响软件程序总体性能的C语言代码段来加以改进(通常是循环代码段影响软件程序总线性能)。

  2.1.3 使用查找表

  在C语言代码中通过直接计算得到结果的语句或函数可以用查找表或常数数值代码,所以可以提高指令执行速度。

  2.1.4 用整型数(int)表示浮点数

  在程序的编写过程中,应尽量采用定点的数据结构。对于C语言,尽量采用整型(int)的数据结构。在基于C62x的C语言中,整型数据占用4个字节,其所能表示的数据范围是:-214783648~2147483647.因为实际算是的数据通常都是浮点的,所以需要把浮点数据通过定标转化为整型数据进行处理,以提高应用程序的处理速度。小数位数的选取十分关键,既要使转化后的数据处理满足要求,又要防止在数据处理的过程中出现数据溢出。

  2.2 优化C代码

  优化C代码包括合作编译器选项、使用内联函数、使用字访问短整型数据和使用软件流水等。编码器选项控制着编译器的操作,其中有些选项可使C代码优化。

  2.2.1 向编译器指明不相关的指令

  为使指令并行操作,编码器必须确定指令间的关系或者相关性,即一条指令必须发生在另一条指令之后,只有不相关的指令才可以并行执行。如果编译器不能确定两条指令是不相关的,则编译器认为它们是相关的,将安排它们串行执行。可通过以下方式指明相关的指令:

  ·关键字const可以指定一个目标,const表示一个变量或者一个变量的存储单元保持不变,使用const可以提高代码的性能和适应性。

  ·一起使用-pm选项和-03选项可以确定程序优先级。在程序优先级中,所有源文件都被编译成一个模块,该模块通过编译器进行优化和产生代码,从而使编译器更有效地消除上关性。

  ·使用-mt选项向编译器说明在代码中不存在存储器相关性,即允许编译器在无存储器相关性的假设下进行优化。

  2.2.2 使用内联函数(intrinsics)

  C62x编译器提供的内联函数是直接映射为内联的C6000指令的特殊函数,用户可以用内联函数来快速优化C代码。

  2.2.3 使用字访问短整型数据

  内联函数中有些指令是对存储在32位寄存器的高16位和低16位字段进行操作。当有大量短整型数据进行操作时,可以使用字(整型数)访问两个短整型数据,然后使用内联函数对这些数据进行操作,从而减少对内存的访问。

  2.2.4 使用软件流水

  软件流水是采用安排循环指令的方法使循环多次迭代并行执行的一种技术。在编译时,使用-o2选项和-o3选项,编译器可对循环代码实现软件流口。为填满软件流水线,软件流水结构需要执行的循环迭代次数称为循环次数。当编译器不能确定循环总数与循环次数的大小时,就产生了两种形式的循环;循环总数小于循环次数时,执行不流水形式环;循环总数大于循环次数时,执行软件流水形式循环。可以使用-ms选项使编译器根据循环次数仅产生一种循环形式。用户可以通过系列方法向编译器传递循环次数信息:使用-03和-pm选项,使优化器访问整个程序,了解循环次数信息;使用-nassert内联函数,防止冗余循环产生。用户可以使用投机执行(-mh选项)消除软件流水循环的排空,从而减少代码尺寸。

  由于在嵌套循环中编译器仅对里面的循环执行软件流水,因此对于执行周期很少的内循环进行循环展开,对外循环进行软件流水,这样可以改进C代码的性能。

  2.3 编写线性汇编代码

  编写线性汇编代码是代码开发流程的第三个阶段。线性汇编代码类似于通常的C6000汇编代码,不同的是编写线性汇编代码不需要指明使用的寄存器、指令的并行与否、指令的延迟周期和指令使用的功能单元,汇编优化器会根据情况确定这些信息。线性汇编文件使用一些汇编优化器伪指令来区分线性汇编和通常的汇编代码,.cproc命令和。endpro命令限定了汇编优化器优化的代码段,.cproc命令放在代码段的开始,.endproc命令放在代码段的结尾;.reg命令使汇编优化器为数值,选择一个寄存器,这个寄存器与对该值进行操作的指令所选择的功能单元一致;.trip命令指出循环的迭代次数。优化线性汇编代码的方法包括:为线性汇编指令指定功能单元,使得的汇编指令并行执行;使用字访问短整形数据;使用软件流水对循环进行优化。

  3 在TMS320C6201上实现宽带毫米波雷达目标时延神经网络识别算法

  宽带毫米波雷达目标识别算法对于实时算是的需求是比较苛刻的,例如某种宽带雷达导引头目标识别处理时间要求小于1.5ms,即要求目标识别算法在1.5ms内对一组数据完成处理,正确 地把目标识别出来。在多层前馈感知器神经网络模型中引入时延单元可以使神经网络增加记忆功能,由此导出的神经网络模型适合应用于处理序列数据。宽带毫米波雷达目标时延神经网络识别算法的基本原理为:对一维距离像进行非相干平均和自适应门限、等距离间隔峰值不采样预处理,获得较稳定的低维样本后,作为特征矢量提供给时延神经网络分类器进行自动分类识别。时延神经网络为三层网络,网络输入层节点数为17,网络隐层节点数为10,网络输出层节点数为3.采用大量的训练样本集对时延神经网络进行训练,得到时延神经网络的权值,然后应用C62x的软件设计方法,在TMS320C6201EVM板上实现宽带毫米波雷达目标时延神经网络识别算法。

  在程序实现过程中,对于经常用到的两个函数值1.0/(1.0+exp(-x))和tanh(x)采用查找表的方法来提高程序执行速度。根据对程序的测试,使用整型数(int)表示浮点数,选取整型数的低13位来表示小数。支持TMS320C6201 EVM板的开发软件Code Composer Studio(CCS)是一个集编译、连接、实时调试、跟踪和分析应用程序于一体的开发软件包。CCS能够加快用户的开发进度,增强用户的应用能,使用户可以实时地创建和调试数字信号处理应用程序。在开发软件CCS的集成开发环境中,综合应用C62x的软件设计方法可以编写和优化时延神经网络识别算法的C代码。

  经过实际测试,在TMS320C6201上实现宽带毫米波雷达目标时延神经网络识别算法的程序执行时间为0.850ms,满足了目标识别算法的实时性需求,取得了比较好的处理效果。


  
上一篇:设计宽带压控式交流电流源
下一篇:在DSP与ICCD通信中使用双口RAM

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料