当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]摘要:随着主频的不断增加及多核处理器的出现,DSP运算量也不断地提高,但是从系统集成度的提高和成本角度考虑,仍然需要对C语言代码进行优化以提高效率。介绍了TMS320C66x

摘要:随着主频的不断增加及多核处理器的出现,DSP运算量也不断地提高,但是从系统集成度的提高和成本角度考虑,仍然需要对C语言代码进行优化以提高效率。介绍了TMS320C66x汇编和流水线技术,阐述了在CCS编译器的实时运行环境下,编程需要注意的有关问题,以及如何利用流水线技术提高DSP的处理效率。

引言

DSP(数字信号处理器)通常作为实时信号处理的核心器件,被广泛应用于工业控制、通信、航空航天、武器精确制导等领域中。在以DSP为核心的系统设计过程中,软件开发的地位显得尤为重要。虽然器件水平的不断提高、DSP主频和运算核的增加,使DSP的运算能力大为提升,但是随着系统集成度和实时性的不断提高,为了提高运算速度和执行效率,在进行软件开发时经常需要用到C语言和汇编语言的混合编程。

如何使C语言和汇编语言有效地结合在一起,使程序清晰易懂,同时提升运算效率是本文着重讨论的问题。TI公司的TMS320C66x系列是高性能的数字信号处理器,本文以CCS5.0编程环境为例,讲述了编译器的实时运行环境下的汇编编程规则、使用流水线技术对程序的改善,以及在编程中需要注意的问题。

1 TMS320C66x DSP简介

TMS320C66x高性能DSP采用VLIW结构,具有2路数据通道,每个通道包含4个可以并行运行的处理单元(.L、.S、.M和.D),每个通道有32个32位通用寄存器,每个周期最多可以运行8个32位的指令,数据的加载位宽为每个周期32位或者64位。

其L1/L2存储包括直接映射的32 KB的L1P指令RAM、32 KB的2路L1D数据RAM、512 KB可配置的L2 RAM;最高运行频率为1.25 GHz,每核最高有40 GMAC/s定点和20 GFLOP/s运算能力,8核共享4MB片上存储,包含丰富的外围接口,如DDR3控制器、PCIe控制器和SRIO接口等。

TMS320C66x DSP核心框图如图1所示。

 

 

2 编译器的实时运行环境

在编译器的实时运行环境下,编写汇编代码时要遵守的规则主要有:寄存器使用规则和参数传递规则。

TMS320C66x两组通用寄存器,每组分别有32个32位寄存器,分为两组,分别是A0~A31和B0~B31。编译器对特定寄存器的使用及如何保护作了规定。占用两个寄存器的数据(长整型、双精度浮点数)放在相邻的两个寄存器中,且第一个必须是奇数,例如A1:A0,前面存放高位,后面存放低位,成对使用。

TMS320C66x编译器对汇编函数调用有严格的规定,如果在调用中不遵守这些规定,就会破坏实时运行环境,导致程序错误。主程序把函数调用需要传递的参数放在寄存器或者堆栈里。参数的前10个依次放在A4、B4、A6、B6、A8、B8、A10、B10、A12和B12里、如果参数是长整型或者浮点型,就占用一个寄存器对,如A5:A4、B5:B4等,依此类推。

剩下的参数放在堆栈里,堆栈指针指向下一个空地址,第11个参数就是SP+offset,依此类推。参数放在堆栈里需要考虑存储边界,一个参数如未声明类型且长度不超过一个整型,按整型存放,未声明的浮点数按双精度浮点数存放。返回值如果是整型,单精度浮点数或者指针,放在A4中,如果是长整型或者双精度浮点数则放在A5:A4中。

3 软件流水线技术的应用

TMS320C66x系列DSP的高速度、高效率是靠并行处理来实现的,而软件流水线技术(software pipeline)则是实现并行处理的关键。DSP只有在流水线充分发挥作用的情况下,才可能达到最高的执行效率。软件流水线包含取指、译码和执行3个阶段,每个阶段又分为不同的相位。软件流水线技术处于不同相位可以并行执行,即取指、译码和执行可以并行运行,甚至相同阶段不同相位也可以并行运行。

软件流水线技术是一种循环内的指令,能在一个周期内使用不同功能单元并行处理多个迭代的技术,能更为有效地使用资源,尤其对于VLIW的具有多功能单元的架构,通过减少循环中因为数据相关导致的依赖和功能单元使用冲突挖掘一次循环中指令的并行性,一般都是针对最内层循环进行的优化。

软件流水线技术可以概括为:从一个循环出发,将一个循环分成可以并行执行的迭代单元,也就是说在一次循环运算结束前,启动多次后续的循环运算。软件流水阶段分为进入循环核前的prolog、循环核loop kernel、循环核结束后的epilog三个过程。流水线技术示意图如图2所示。

软件流水线编程时,主要使用以下寄存器:

①Loop Buffer是一个能存储若干条SPLOOP指令的片内存储空间,最多达14个执行包。

②LBC 执行 SPLOOP、 SPLOOPD、SPLOOPW时清零,每个运行周期后+1,当运行到功能段(Stage)边缘时,重置为零,此寄存器用户不可见。

③ILC为用于循环计数的专用寄存器,SPLOOP和SPLOOPD使用向下计数器,每运行一次循环递减,使用ILC需要4个周期的延迟。

RILC循环嵌套时用于重置ILC。

软件流水线编程时,主要使用以下指令:

①SPLOOP一般用于告知循环最小运行次数,但不知循环体是否超过4个周期的起始,因为ILC加载和使用需要4个周期的间隔;SPLOOPD知道循环最小运行次数,以及循环体超过4个周期的起始;SPLOOPW不知道循环次数的任何信息,表明buffer的起始;SPLOOP的参数表示最小的功能段指令周期数。

②SPKERNEL和SPKERNELR表明结束,其参数表示循环结束的第几个功能段内的第几个周期。

 

 

而SPMASK和SPMASKR用来区分是SPLOOP内的存储还是普通memory内的指令。

软件流水线技术的限制:同一周期不能使用相同的功能单元;同一个周期不能同时写入一个目标寄存器;在一个执行程序包内,每个数据通路两个功能单元可以访问另一个寄存器堆的相同的操作数。当从另外一侧读取一个刚刚更新的寄存器时,会有一个周期的延迟,即交叉通道的延迟。

4 汇编语言在程序中的应用

在实际应用程序开发过程中,程序通常采用混合编程的方法实现。主函数采用C程序编写,而对于那些耗时较多的运算密集的模块采用汇编编写。

这样做的目的比较简单,因为这样在主程序中初始化一些初值,既简单又准确,且汇编程序能提升运算效率。这样既能保证程序的结构化和可读性,又能保证应用的实时性。

实验中主要以浮点复数点乘程序为例,介绍汇编语言对源代码的优化步骤。

首先将C源代码循环展开翻译成汇编代码,为了使运算效率最高,应使用相同运算周期内运算量最高的汇编指令。

确定最小迭代间隔规划使用功能单元,使循环的多次迭代能够并行执行;为了使程序流水执行,应首先确定最小功能段间隔。

一个循环的最小功能段间隔是这个循环相邻两次功能段开始之间必须等待的最小周期数。循环中的相邻功能段数据相关性和循环核中使用最多的功能单元是最小功能段间隔。

例如,如果在循环核中有3条相邻指令都使用.D1单元,则最小功能段间隔至少是3,因为使用同一功能单元的3条指令不能并行执行,这时需要的最小功能段为3。

规划使用寄存器。在已知最小功能段间隔以后,可根据程序的数据依赖关系为功能单元分配寄存器,必须保证每个周期内没有寄存器并行使用。

编写汇编程序如下:

 

 

 

 

程序中使用LDDW、CMPYSP等指令完成数据读写和乘法运算等,保证程序运算时间最短。程序中使用最多的单元为D1和D2,每个单元被使用了3次,所以程序的最小功能段为3,循环长度共有15个,被分为5个功能段,在每个周期内保证了没有相同的功能单元被使用。运行同时最多使用了A、B两侧共6个功能单元,保证了运算效率。使用更多的寄存器可以使数据的前后关联更小。

使用本程序运行平台为TMS320C6678,复数8 192点乘其运行周期为33 947,与使用编译器优化的点乘程序的运行周期42 055相比,大约提升了20%。

结语

本文提到的软件利用汇编优化代码技术,在实际的系统应用中获得了满意的代码效率,为大规模复杂算法运算的执行提供了有效的时间保障。

在程序中采用的汇编语言和软件流水技术,在实时条件下能够应用于更为复杂和有效的算法,尤其是在编译器对于某些程序优化不明显的情况下,为提升代码效率提供了一些解决思路。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

随着在线会议、直播和游戏语音交流的普及,高质量的音频输入设备变得越来越重要。为此,边缘AI和智能音频专家XMOS携手其全球首家增值分销商飞腾云科技,利用其集边缘AI、DSP、MCU和灵活I/O于一颗芯片的xcore处理器...

关键字: AI DSP MCU

多DSP集群的实时信号处理系统,通信拓扑的优化直接决定任务调度效率与系统吞吐量。RapidIO与SRIO作为嵌入式领域的主流互连协议,其带宽利用率差异与QoS配置策略对集群性能的影响尤为显著。以无线基站、雷达阵列等典型应...

关键字: DSP 通信拓扑优化

随着5G网络普及与物联网设备爆发式增长,边缘计算正从概念验证走向规模化部署。据IDC预测,2025年全球边缘数据量将占总体数据量的50%,这对边缘节点的实时处理能力提出严苛要求。在此背景下,AI加速器的DSP化趋势与可重...

关键字: AI加速器 DSP

在工业控制领域,数字信号处理器(DSP)的性能直接决定了系统的实时控制能力和可靠性。德州仪器(TI)的C2000系列芯片凭借其卓越的采样、控制和功率管理能力,长期以来在全球工业控制市场占据绝对领导地位,广泛应用于能源、电...

关键字: TI C2000 DSP 格见半导体 芯来 RISC-V 工控

2025年7月16日 – 专注于引入新品的全球电子元器件和工业自动化产品授权代理商贸泽电子 (Mouser Electronics) 持续供货Texas Instruments (TI) 的新产品和解决方案。作为一家授权...

关键字: 线性稳压器 栅极驱动器 DSP

在当今数字化浪潮的推动下,数据流量呈爆炸式增长,数据中心、5G通信网络以及云计算等领域对高速光通信的需求愈发迫切。800G光模块作为高速光通信的关键组件,其性能直接影响着整个通信系统的传输效率和可靠性。数字信号处理(DS...

关键字: 800G DSP PAM4均衡算法

以氢燃料电池空压机为研究对象 ,开发超高速永磁同步电机控制器 ,采用传统的IGBT主功率器件 ,且为两电平主回 路结构形式 ,通过改进的V/F控制算法 ,完成了控制器的设计。搭建了试验平台进行测试 ,结果表明 ,控制器能...

关键字: 超高速永磁同步电机 V/F控制 DSP

医疗设备智能化进程,数字信号处理器(DSP)作为核心计算单元,承担着实时处理生物电信号、医学影像等敏感数据的重任。然而,随着医疗设备与网络互联的深化,数据泄露风险显著增加。美国《健康保险流通与责任法案》(HIPAA)明确...

关键字: 医疗设备 DSP

数字信号处理器(DSP)作为实时信号处理的核心器件,其架构设计直接决定了运算效率与功耗表现。自20世纪70年代DSP理论诞生以来,其硬件架构经历了从冯·诺依曼结构到哈佛结构的演进,这一过程体现了对实时性、并行性与存储带宽...

关键字: DSP 冯·诺依曼

随着嵌入式系统对实时性、多任务处理能力的需求日益增长,实时操作系统(RTOS)在数字信号处理器(DSP)中的移植与性能优化成为关键技术课题。DSP以其高效的数值计算能力和并行处理特性,广泛应用于通信、图像处理、工业控制等...

关键字: RTOS DSP
关闭