当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]摘要:随着主频的不断增加及多核处理器的出现,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%。

结语

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

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

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

数字信号处理器(DSP)在通信、控制、图像处理等多个领域扮演着越来越重要的角色。TMS320F2808PZA作为德州仪器(Texas Instruments)推出的一款高性能DSP控制器,其独特的架构和强大的功能使其在众...

关键字: tms320f2808pza 数字信号处理器 DSP

从世界上第一颗DSP诞生至今30年来,国际一线老牌芯片厂商长期占据领先技术和市场地位,国内芯片厂商在DSP上的声量很小。然而经过了6年的沉心打磨之后,湖南进芯电子开始在这一领域崭露头角。凭借着更贴近中国本土特色的差异化产...

关键字: DSP MCU 电机控制 进芯电子

今天,小编将在这篇文章中为大家带来数字信号处理器DSP的有关报道,通过阅读这篇文章,大家可以对它具备清晰的认识,主要内容如下。

关键字: DSP 数字信号处理器

DSP的国产替代不会是一件很容易的事情,但受到当前国际竞争态势的影响,本土开发者亟需拥有降本优势、供应链安全保证,以及能协助打造极高竞争力产品的DSP芯片。也就是说,发展国产DSP是不二选择。

关键字: DSP

将DSP和单片机构成双CPU处理器平台,可以充分利用DSP对大容量数据和复杂算法的处理能力,以及单片机接口的控制能力。而DSP与单片机之间快速正确的通信是构建双CPU处理器的关键问题。

关键字: 单片机 spi通信 DSP

随着科技的不断发展,微控制器(MCU)和数字信号处理器(DSP)已经成为了电子行业中不可或缺的重要组成部分。它们在各种电子设备中发挥着关键作用,如智能手机、平板电脑、家用电器等。然而,尽管它们都是用于处理数字信号的集成电...

关键字: MCU DSP 数字信号处理器 微控制器

随着环境保护和能源可持续性的日益关注,电动汽车作为一种清洁、高效的交通工具逐渐成为全球汽车行业的热点。与传统的内燃机驱动汽车相比,电动汽车具有零排放、低噪音和高能量利用效率等显著优势。

关键字: DSP 芯片 混合动力汽车

优化嵌入式系统中的代码设计对于提高性能、减少内存占用和降低功耗非常重要。以下是一些常见的优化技巧:

关键字: 嵌入式 功耗 代码优化

在平常的日常生活中,噪声总是不可避免的。每个人承受噪声的能力也不尽相同,喜欢安静的人需要一些降噪措施,降噪耳机应运而生,甚至都能算得上是城市生活的必备品了

关键字: 主动降噪 DSP ANC

北京2023年9月22日 /美通社/ -- 华为全联接大会2023期间,华为举办了"昇思MindSpore AI框架:引领大模型&科学智能原生创新"主题论坛,软通动力数字化创新服务线高级副总裁...

关键字: DSP AI 模型 开源
关闭
关闭