第三章第四章6讲

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FFT中混序就是位倒序
FFT运算时输出/输入序列中必有其一要混序。
倒序进位(有B符号)
• 倒序,1010
0101,用于FFT中蝶型变换
• 位倒序进位:进位不是加到左边一位,而是加到右 边的那位。例如: • 进位加到左边 进位加到右边 • 1100 1100 • + 1000 + 1000 • 10100 0010 • 如果AR2中存放X(0)的地址,AR0的值为8(FFT 长度的一半),则下列程序向PA口输出倒序:0000, 1000,0100,1100,0010,…,0111,1111。
(3)乘法指令 在‘C54X中提供了大量的乘法运算指令,其结果都是32 位,放在A或B累加器中。乘数在‘C54X的乘法指令很灵活, 可以是T寄存器、立即数、存贮单元和A或B累加器的高16位。 如果是无符号数乘时,请使用MPYU指令。这是一条专用于无 符号数乘法运算的指令,而其它指令都是有符号数的乘法。 状态位: 影响该指令执行的状态位有:分数模式位FRCT和溢出模式位 OVM; 执行该指令会产生的状态位:目的累加器溢出标志OVdst
(2)减法指令是将累加器的内容或另一个数据存储单元的内容与 一个16比特的值相减,并把结果放进累加器。 SUB Smem,src ;src=(src)-(Smem) SUB Smem,TS,src ;src=(src)-(Smem)<<TS SUB Smem,16,src[,dst] ;src or[,dst]=(src)-(Smem)<<16 SUB Smem [,SHIFT],src[,dst] ;src or[,dst]=(src)-(Smem)<<SHIFT SUB Xmem,SHFT,src ;src=(src)-(Xmem)<<SHFT SUB Xmem,Ymem,dst ;dst=(Xmem)<<16-(Ymem)<<16 SUB #1k [,SHFT],src[,dst] ;src or[,dst]=(src)-1k<<SHFT SUB #1k,16,src[,dst] ;src or[,dst]=(src)-1k<<16 SUB src[,SHIFT] [,dst] ; dst=(dst)-(src)<<SHIFT SUB src,ASM[,dst] ; src or[,dst]=(dst)-(src)<<ASM SUBB Smem,src ;src-Smem-C SUBC Smem,src ;if (src-Smem<<15)>=0 ;src= (src-Smem<<15) <<1+1 Else src=src<<! SUBS Smem,src ;src=src-uns(Smem)
Biblioteka Baidu
LDM MMR, dst MVDM dmad, MMR MVMD MMR, dmad MVMM MMRx, MMRy POPM MMR PSHM MMR STLM src, MMR STM #lk, MMR
LD MVDM MVMM
AR4,A 300H,BK SP,AR1
7.堆栈寻址 系统堆栈用来在中断和子程序期间自动存放程序 计数器(PC)。它也能用来存放额外的数据项或传递 数据值。处理器使用一个16-bit的存储器映射寄存器 —堆栈指针来对堆栈寻址,它总是指向存放在堆栈 中的最后一个元素。 共有四条使用堆栈寻址方式访问堆栈的指令: PSHD 把一个数据存储器的值压入堆栈。 PSHM 把一个存储器映射寄存器的值压入堆栈。 POPD 把一个数据存储器的值弹出堆栈。 POPM 把一个存储器映射寄存器的值弹出堆栈。
(3)乘法指令(MPY)
(4)乘加指令(MAC) (5)乘减指令(MAS) (6)双数/双精度(32比特操作数)(DADD、DSUB) (7)专用指令(Application-specific)
(1)加法指令将16比特的值与累加器内容或另一个数据存储单元 内容相加,并把结果放进累加器。 ADD Smem,src ;src=(Smem)+(src) ADD Smem,TS,src ;src=(Smem)<<TS+(src) ADD Smem,16,src[,dst] ;src or[,dst]=(Smem)<<16+(src) ADD Smem,[SHIFT],src[,dst] ;src or[,dst]=(Smem)<<[SHIFT]+src 2 ADD Xmem,SHFT,src ;src=(Xmem)<<SHFT+(src) ADD Xmem,Ymem,dst ;dst=((Xmem)+(Ymem))<<16 ADD #1k,[SHFT],src[,dst] ;src or[,dst]=lk<<SHFT+(src) 2 ADD #1k,16,src[,dst] ;src or[,dst]=lk<<16+(src) 2 ADD src [,SHIFT][,dst] ;dst=(src or [,dst])+(src)<<SHIFT ADD src, ASM[,dst] ;src or[,dst]=(src or [,dst])+(src)<<ASM ADDC Smem,src ;src=src+Smem+C ADDM #lk,Smem ;Smem= #lk+(Smem) 2
• *+ARx(lk):
在寻址之前,把一个带符号的16-bit的长偏 移(lk)加到ARx中,然后用新的ARx的值作 为数据存储器的地址 • *+ARx(lk)%:在寻址之前,把一个带符号的16-bit的长偏移 以循环寻址的方式加到ARx中,然后再用新 的ARx的值作为数据存储器的地址
有B符号,倒序进位 有%符号,循环寻址 有0符号, 与AR0有关
8点的FFT蝶型结运算
000 100 010
x(0) W0 x(4) W0 x(2) W0 W2 W0 W1 W0 x(5) W0 x(3) W0 x(7) W2 X(7) W3 X(6) W2 X(5) X(3) X(4) x(6) x(1) X(2) X(1) X(0)
110
001 101 011 111
3、乘法指令
整数乘法举例
rsbx ld
FRCT temp1,T
;清FRCT标志,准备整数乘 ;将变量temp1装入T寄存器
mpy
temp2,A
;完成temp2*temp1,结果放
;入A寄存器(32位)
实现小数乘法 • 在‘C54X中,小数的乘法与整数乘法基本一致,只是由 于两个有符号的小数相乘,其结果的小数点的位臵在次高 的后面,所以必须左移一位,才能得到正确的结果。 ‘C54X中提供了一个状态位FRCT,将其设臵为1时,系 统自动将乘积结果左移移位。两个小数(16位)相乘后结 果为32位,如果精度允许的话,可以只存高16位,将低16 位丢弃,这样仍可得到16位的结果。
单操作数间接寻址类型: • • • • • • • • *ARx: ARx包含了数据存储器地址 *ARx-/ *ARx+ : 访问后, ARx中的地址减1/加1 *+ARx: 在寻址之前,ARx中的地址加1 *ARx-0B/ *ARx+0B :访问后,从ARx中以位倒序进位的 方式减去/加上AR0 *ARx-0/ *ARx+0 : 访问后,从ARx中减去/加上AR0 *ARx-%/ *ARx+% : 访问后,ARx中的地址以循环寻址 的方式减1/加1 *ARx-0%/ *ARx+0% : 访问后,从ARx中以循环寻址的方 式减去/加上AR0 *ARx(lk): ARx和16-bit的长偏移(lk) 的和用来 作为数据存储器地址。ARx本身不 被修改
RPT #15 PORTW *AR2+0B, PA
双操作数间接寻址类型:
双数据存储器操作数间接寻址类型为 *ARx、*ARx-、*ARx+、*ARx+0%。 • 所用辅助寄存器只能是AR2、AR3、AR4、AR5。
• 其特点是:占用程序空间小,运行速度快,在一个机器周 期内通过两个16位数据总线(C和D)读两个操作数。指令 中Xmem表示从DB总线上读出的16位操作数,Ymem表示从CB 总线上读出的16位操作数。
例如: MVDD *AR2+,*AR3+
6. 存储器映射寄存器寻址 存储器映射寄存器寻址用来修改存储器映射寄存器而 不影响当前数据页指针(DP)或堆栈指针(SP)的值。 存储器映射寄存器寻址 直接寻址中利用操作数中的低7位访问MMR 间接寻址中利用ARx访问MMR, Arx高位被置0 。 只有8条指令能使用存储器映射寄存器寻址:
操作前的堆栈和SP sp 0011 0001 0010 0011 0100 0101 0110 X1
操作后的堆栈和SP sp 0010 0001 0010 0011 0100 0101 0110
X2
X1
图、堆栈操作对堆栈指针的影响
7种寻址方式不同的用途
• (1)立即寻址运行速度慢,但需要较多的程序存储空间, 而且数值不能改变,主要用于表示常数和初始化。 • (2)绝对寻址可以访问任何的数据空间,但速度慢,要求 较多的存储空间,用于对速度没有苛求的场合。 • (3)累加器寻址主要是在程序空间和数据空间传送数据。 • (4)间接寻址类似于高级语言中的指针,较为灵活,主要 是针对数字信号处理的算法而设计的。 • (5)直接寻址中寻址速度较快,利用并行流水线操作,用 于时间要求较高的场合。 • (6)MMR是基地址为零(不考虑SP、DP、CPL)的直接寻 址方式,寻址速度较快,可以直接快速访问数据存储器的 0页资源。
5.
间接寻址
在间接寻址中,64K数据空间任意单元都可通过一 个辅助寄存器中的16-bit地址进行访问。 ‘C54x有8个16-bit辅助寄存器(AR0-AR7)。两个 辅助寄存器算术单元(ARAU0和ARAU1),根据辅助寄存 器的内容进行操作,完成无符号的16-bit算术运算。 间接寻址很灵活,不仅能从存储器中读或写一个 单16-bit数据操作数,而且能在一条指令中访问两个数 据存储器单元(即从两个独立的存储器单元读数据,或 读一个存储器单元同时写另一个存储器单元,或读写两 个连续的存储器单元)。
应用举例: 计算16阶的FIR滤波器输出256个点
.sect “fir-prog”
STM STM STM
#-1, #h+15, #x+15,
AR0 AR3 AR4
STM #255, BRC ; Block Repeat Counter RPTB loop STM #16, BK ; FIR circular buffer size RPTZ A, #15 MAC *AR4+0%, *AR3+0%, A ; filtering LD *AR7+, A ; load the input value STL A, *AR4+0% ; replace oldest sample with ; newest sample STH A, *AR5+ ; replace the oldest buffer value loop:
循环寻址(有%符号)
• 在卷积、相关、FIR中要用到循环缓冲区。 • 循环缓冲区长度R由BK决定 STM #l0, BK ;设置循环缓冲区长度 • 循环缓冲区从N位的地址边界(N位0)开始,R<2N , 若R=40, 则N=6, 开始地址为: xxxx xxxx xx00 0000。 • 循环寻址时用一个 ARx指向缓冲区。 地址变化规则:
其中:Smem为16比特的单数据存储器操作数;
Xmem和Ymem为双数据存储器操作数; src和dst为源(目的)操作数,这里是指C54x的累加器A和B lk为整数,范围-32768到32767; SHIFT为移位位数,范围-16到15;
SHFT为移位位数,范围0到15;
执行该指令时可能会影响的状态位有进位标志C和目的累 加器溢出标志Ovdst;另外,影响该指令执行的状态位有符号 扩展模式位SXM和溢出模式位OVM; 算术运算指令大部分都只需要一个指令周期,只有个别 指令需要2~3指令周期。
TMS320C54x的指令集 TMS320C54x的指令集有129条指令,由寻址方 式不同衍生至216条,按功能分为如下几类:
算术运算指令 逻辑运算指令 程序控制指令 装入和存储指令
P35 表4-1 列出了指令系统的符号和意义
1、算术运算指令 算术运算指令用于完成加减乘除等算术运算。按照功 能的不同可以将算术运算类指令分为7组: (1)加法指令(ADD) (2)减法指令(SUB)
相关文档
最新文档