当前位置:文档之家› 第7章 汇编语言程序设计2

第7章 汇编语言程序设计2


单周期内通过C总线和D总线寻址两个数据32位

DST用E总线两次,2个机器周期,其它1个机器周期
3
长操作数在存储器的排列方法1
偶地址排列法
指令中给出的地址为偶地址
存储器中低地址存放高16位
存储器中高地址存放低16位
奇地址排列法
指令中给出的地址为奇地址 存储器中低地址存放低16位
存储器中高地址存放高16位
第7章 汇编语言程序设计

7.1 程序流程控制 7.2 数据块传送


7.3 定点数的基本算术运算
7.4 长字运算和并行运算


7.5 FIR滤波器的DSP实现
7.6 IIR数字滤波器的DSP实现

7.7 FFT运算的DSP实现
1
7.4 长字运算和并行运算

7.4.1 长字运算 7.4.2 并行运算
5
长操作数在存储器的排列方法3
奇地址排列法举例 DLD *AR3+, A 执行前: 执行后: A=00 0000 0000 A=00 BD90 6CAC AR3=0101 AR3=0103 (0100h)=6CAC(低字)(0100h)=6CAC (0101h)=BD90(高字) (0101h)=BD90

29
两种实现Z-1方法的比较
线性缓冲区法 1、新老数据位置直接明了。 2、需要移动数据。 3、要求在一个机器周期中进行一次读和一次写操作, 因而要求定位在DARAM中。 循环缓冲区法(推荐的方法) 1、新老数据位置不直接明了。 2、不需要移动数据。 3、不存在一个机器周期中进行一次读和一次写操作, 因而不要求定位在DARAM中。
20

设FIR滤波器的系数为h(0),h(1),...,h(N-1),X(n) 表示滤波器在n时刻的输入,则n时刻的输出为:
N 1 i 0
y(n) h(0) x(n) h(1) x(n 1) h( N 1) x[n ( N 1)] h(i) x(n i)
13
7.5 FIR滤波器的DSP实现

7.5.1 线性缓冲区法
7.5.2 循环缓冲区法
7.5.3 系数对称FIR滤波器的DSP实现
14

数字滤波是DSP的最基本应用,利用MAC(乘、 累加)指令和循环寻址可以方便地完成滤波运算。 两种常用的数字滤波器: FIR(有限冲激响应)滤波器

程序中利用的两条乘法指令 MACSU Xmem, Ymem, src ;带符号数与无符号数相乘并累加 ;src= S(Xmem)*U(Ymem)+src Xmem, Ymem, src ;带符号数与带符号数相乘并累加 ;src=S(Xmem)*S(Ymem)+src Smem, dst ;无符号数相乘 ;dst=U(T)*U(Smem)
6
长字运算(例)
例: 计算 Z32=X32+Y32 标准运算 LD @xhi, 16, A ADDS @xlo, A ADD @yhi, 16, A ADDS @ylo, A STH A, @zhi STL A, @zlo (6个字,6个T) 长字运算 DLD @xhi, A DADD @yhi, A DST A, @zhi (3个字,4个T)
和IIR(无限冲激响应)滤波器的DSP实现。
DSP芯片执行数字滤波算法的能力反映了此类芯 片功能的强弱

15
有限长单位冲激响应滤波器特点

系统的单位冲激响应h(n)在有限个n值处不为零; 系统函数在有限z平面只有零点,全部极点都在 z=0处(因果系统); 结构上主要是非递归结构,没有输出到输入的反 馈
由于没有长字带进(借)位加/减法指令,上述程序中只 能用16位带进(借)位指令ADDC和SUBB。
8
32位乘法运算
9
例:编写计算 W32=X32*Y32 的程序段
STM STM LD MPYU STL LD MACSU MACSU STL LD MAC
STL STH
#x0, AR2 #y0, AR3 *AR2, T *AR3+, A A, @w0 A, -16, A *AR2+, *AR3-, A *AR3+, *AR2, A A, @w1 A, -16, A *AR2, *AR3, A
21
22
FIR滤波器算法分析
•乘法累加运算 •输入和输出操作指令:
PORTR PA, Smem
PORTW Smem, PA
;PASmem
; Smem PA
Z-1操作:延迟(一个采样周期)操作,两种方法:
1 线性缓冲区实现Z-1
2 用循环缓冲区实现Z-1
23
7.5.1 线性缓冲区法

线性缓冲区法又称延迟线法。其方法是: 对于 n=N 的 FIR 滤波器,在数据存储器中开辟一 个N单元的缓冲区,存放最新的N个样本; 滤波时从最老的样本开始,每读一个样本后,将 此样本向下移位; 读完最后一个样本后,输入最新样本至缓冲区的 顶部。 延迟操作的指令:DELAY, LTD, MACD;延迟操作 只能在DARAM中进行。
12
并行运算(例)
例: 编写计算 z=x+y 和 f=e+d 程序段 .bss x, 3 .bss d, 3 STM #x, AR5 STM #d, AR2 LD #0, ASM LD *AR5+, 16, A ADD *AR5+, 16, A ST A, *AR5 ||LD *AR2+, B ADD *AR2+, 16, B STH B, *AR2
2
7.4.1 长字运算

C54x可以利用长操作数(32位)进行长字运算。 如下所示为长字指令:
DLD
DST DADD DSUB DRSUB

Lmem, dst
src, Lmem Lmem , src[,dst] Lmem , src[,dst] Lmem , src[,dst]
;dst=Lmem
;Lmem=src ;dst=src + Lmem ;dst=src – Lmem ;dst=Lmem - src

16
无限长单位冲激响应滤波器特点

系统的单位冲激响应h(n)是无限长的; 系统函数在有限z平面上有极点存在; 结构上存在着输出到输入的反馈,也就是结构上 是递归型的。
17
FIR和IIR比较(有限冲击响应和无限冲击响应)

从性能上进行比较 IIR滤波器传输函数的极点可位于单位圆内的任何地方, 因此可用较低的阶数获得高的选择性,所用的存贮单元少, 所以经济而效率高。但是这个高效率是以相位的非线性为 代价的。选择性越好,则相位非线性越严重。
18
FIR和IIR比较(有限冲击响应和无限冲击响应)

从结构上看 IIR滤波器必须采用递归结构,极点位置必须在单 位圆内,否则系统将不稳定。另外,在这种结构 中,由于运算过程中对序列的舍入处理,这种有 限字长效应有时会引入寄生振荡。 相反,FIR滤波器主要采用非递归结构,不论在 理论上还是在实际的有限精度运算中都不存在稳 定性问题,运算误差也较小。此外,FIR滤波器 可以采用快速付里叶变换算法,在相同阶数的条 件下,运算速度可以快得多。
(7-1)

其对应的滤波器传递函数为: H(z) h (i)z i (7-2)
i 0
N 1

如图7-10所示为横截型(又称直接型或卷积型) FIR数字滤波器的结构图。
x(n) h(0) Z-1 h(1) Z-1 h(2) h(N-2) Z-1 h(N-1) y(n)
图7-10 横截型FIR数字滤波器的结构图
A, @w2 A, @w3
;T=x0 ;A=u(x0)*u(y0) ;w0=u(x0)*u(y0) ;A=A>>16 ;A+=s(y1)*u(x0) ;A+=s(x1)*u(y0) ;w1=A ;A=A>>16 ;A+=s(x1)*s(y1) ;w2=A的底16位 ;w3=A的高16位
10
32位乘法运算(续)
4
长操作数在存储器的排列方法2
偶地址排列法举例 DLD *AR3+, A 执行前: 执行后: A=00 0000 0000 A=00 6CAC BD90 AR3=0100 AR3=0102 (0100h)=6CAC(高字)(0100h)=6CAC (0101h)=BD90(低字) (0101h)=BD90

相反,FIR滤波器却可以得到严格的线性相位,然而由于 FIR滤波器传输函数的极点固定在原点,所以只能用较高 的阶数达到高的选择性;对于同样的滤波器设计指标, FIR滤波器所要求的阶数可以比IIR滤波器高5~10倍,结 果,成本较高,信号延时也较大;如果按相同的选择性和 相同的线性要求来说,则IIR滤波器就必须加全通网络进 行相位较正,同样要大增加滤波器的节数和复杂性。
符号位不扩展的加法
7
例:编写计算Z64=W64+X64-Y64 的程序段
W, X, Y和结果Z都是64位数,它们都是由两个32位的长字组 成。利用长字指令可以完成64位数的加/减法。
DLD DADD DLD ADDC ADD DSUB DST SUBB SUB DST @w1, A ;A=w1w0 @x1, A ;A=w1w0+x1x0, 产生进位C @w3, B ;B=w3w2 @x2, B ;B=w3w2+x2+C @x3, 16, B ;B=w3w2+16<<x3 @y1, A ;A=w1w0+x1x0-y1y0, 产生借位C’ A, @z1 ;z1z0=w1w0+x1x0-y1y0 @y2, B ;B=w3w2+x3x2+C-y2-C’ @y3, 16, B ;B=w3w2+x3x2+C-y3y2-C’ B, @z3 ;z3z2=w3w2+x3x2+C-y3y2-C’
相关主题