基于XC166单片机的DSP 优化方法
发布时间:2008/5/27 0:00:00 访问次数:353
引言
与专用数字信号处理器(dsp)相比,英飞凌的c166单片机的dsp性能相当差,为了提高c166单片机的dsp处理能力,英飞凌推出了新的16位单片机系列xc166,xc166系列单片机与c166单片机的最主要的区别在于,xc166中的cpu核加入了乘法-累加(mac)单元,用于提高dsp的功能。mac单元在xc166中是以一个算法处理单元出现的,类似于cpu中的算术逻辑(alu)单元。这种结构的优点是可以保持xc166与c166的兼容性。
mac单元有自己的寻址模式和指令集,mac指令集是专为开发dsp程序而设计的。独立的寻址模式是为了保证mas指令能在1个机器周期内完成对2个操作数的间接寻址。与xc166中的一般寻址模式不同,mac寻址模式有2个地址指针(idx0/idx1)及2对地址偏移指针(qx0/qx1,qr0/qr1)用于对双操作数寻址。另外,单机器周期的mac指令还要求mac单元具有harvard结构,也即代码与数据独立寻址。但英飞凌的16位单片机的存储器地址都是线性的,采用的是von neumann结构,代码与数据在一个线性存储空间。为了在线性空间中实现harvard结构,xc166专门把mac指令的两个操作数中的一个定义在dpram中,所以,在使用mac单元时要特别注意,有些操作数只能存在dpram中,否则,指令无法正常运行。目前,xc166系列单片机配有2kb的dpram,从地址0xf600到0xfdff。
由于硬件的要求,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微循环展开程序流程图。
引言 (2)汇编程序 1.3 循环展开
|