首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

独立于硬件技术的XC166单片机的DSP程序优化方法

独立于硬件技术的XC166单片机的DSP程序优化方法

关键字:MAC单元   数据存储器   DPRAM  
XC166单片机的指令流水线存在着不可避免的阻塞现象,MAC单元指令也一样。尽管在硬件设计时已经采用了专用模块来减少阻塞,但有些阻塞是不可避免的,从程序优化的角度来说,可以充分利用指令流水线阻塞现象,通过重排指令流水线上的指令,消除阻塞,以使得程序的运行时间缩短,从而达到优化的目的。
通常DSP优化方法可以分为两类:一类是与芯片相关的,另一类是与芯片无关的。与芯片无关的优化方法独立于单片机硬件,适用于所有单片机及DSP处理器,下面根据使用XC166单片机的经验总结一些优化DSP程序的方法。

1 通用优化方法

1.1 数据组处理

数据组处理的基本思想是通过成组的处理数据,以节约每次调用处理子程序所需的附加指令。数据组处理可以在C语言或汇编语言程序中实现。一般而言,对于开发DSP程序,最常用的程序语言为C和汇编。下面分别介绍如何在C和汇编程序中使用数据组处理优化方法。

(1)C程序

在C环境中开发DSP程序,通常算法本身由汇编编写,以便优化实现。C主程序通过调用汇编实现的核心处理子程序来完成对数据的处理。核心处理子程序有两种实现方法,一种是数组处理,另一种是单值处理,假设单值处理子程序的核心部分与数组处理子程序的核心部分所需机器周期相同,并且调用子程序的前期处理需M个机器周期,后期处理需要N个机器周期,如果子程序被调用K次,那么理想情况下,数据组处理可以节约(K-1)(M+N)个机器周期,如图1所示。




(2)汇编程序

在汇编程序中实现数据组处理有多种方法,比如数组操作,数组读入/写出等。

1、数组操作。数组操作是将多个不同的短操作数装入一个长位数的寄存器,然后进行运算操作。比如,1个16位的寄存器可以装入2个8位的来自A/D转换器的数据。下面举例说明数据组处理在汇编程序中的应用。




2、数组读入写出。这种方法是将多个短操作数合并为一个长操作数后进行读入/写出操作,如上面例子中的输入/输出部分。

1.2 数据存储器交织

数据存储器交织的目的是通过重新排列数据在存储器中的位置,以使得程序读写数据的时间最短,比如有2个8位的复数x和y,一般情况下,复数将按下列顺序存入内存:real(x),image(x),real(y),image(y)。但如果想使得读取复数的实部更容易,可以把数据重新排列如下:real(x),real(y),image(x),image(y),如图2所示。




1.3 循环展开

循环展开是一种非常传统的程序优化方法,可以用于所有程序优化中,循环展开的目的是通过重复循环中的程序,减少循环次数,从而减少循环判断指令的执行次数,以此来降低程序执行所需的机器周期,下面举一个例子来说明循环展开在XC164CS单片机中的应用。




图3为循环展开程序流程图。




1.4 指令流水线重排

指令流水线重排的意思是通过软件程序中的指令重排来改变指令流水线,以此来排除由于硬件引起的指令堵塞,从而加快程序的运行时间。这种优化操作通常用在汇编程序中,指令流水线重排是一个一般的优化原理,把这个原理用于不同类型的单片机可以导出不同的与单片机硬件相关的优化方法。下面介绍的基于XC166单片机的优化方法主要是应用这个优化原理得到的。
返回列表