DSP的特点与应用.docx
- 文档编号:3161342
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:16
- 大小:22.44KB
DSP的特点与应用.docx
《DSP的特点与应用.docx》由会员分享,可在线阅读,更多相关《DSP的特点与应用.docx(16页珍藏版)》请在冰点文库上搜索。
DSP的特点与应用
第1次作业DSP的特点与应用
●通用处理器(GPP)
1采用冯.诺依曼结构,程序和数据的存储空间合二而一
28086/286/386/486/Pentium/PentiumII/PentiumIIIPentiumⅣ
3PowerPc64-bitCPU(SUNSparc,DECAlpha,HP)
4CISC复杂指令计算机,RISC精简指令计算机
5采取各种方法提高计算速度,提高时钟频率,高速总线,多级Cashe,协处理器等
●SingleChipComputer/MicroControllerUnit(MCU)
1除通用CPU所具有的ALU和CU,还有存储器(RAM/ROM)寄存器,时钟,计数器,定时器,串/并口,有的还有A/D,D/A
2INTELMCS/48/51/96(98)
3MOTOROLAHCS05/011
●DSP
1采用哈佛结构,程序和数据分开存储
2采用一系列措施保证数字信号的处理速度,如对FFT的专门优化
DSP技术特点
1存储器结构
微处理器的存储器结构分为两大类:
冯·诺伊曼结构和哈佛结构。
由于成本的原因,GPP广泛使用冯·诺伊曼存储器结构。
典型冯·诺伊曼结构的特点是只有一个存储器空间、一套地址总线和一套数据总线;指令、数据都存放在这个存储器空间中,统一分配地址,所以处理器必须分时访问程序和数据空间。
通常,做一次乘法会发生4次存储器访问,用掉至少4个指令周期。
为了提高指令执行速度,DSP采用了程序存储器空间和数据存储器空间分开的哈佛结构和多套地址、数据总线。
哈佛结构是并行体系结构,程序和数据存于不同的存储器空间,每个存储器空间独立编址、独立访问。
因此,DSP可以同时取指令(来自程序存储器)和取操作数(来自数据存储器);而且,还允许在程序空间和数据空间之间相互传送数据。
哈佛读/写结构使DSP很容易实现单周期乘法运算。
2流水线
流水线结构将指令的执行分解为取指、译码、取操作数和执行等几个阶段。
在程序运行过程中,不同指令的不同阶段在时间上是重叠的,流水线结构提高了指令执行的整体速度,有助于保证数字信号处理的实时性。
因此,所有DSP均采用一定级数的流水线,如TMS320C54xDSP采用6级流水线,而TMS320C6xxxDSP采用8级流水线。
TMS320C55xDSP的流水线则被分为指令流水线和执行流水线两部分,指令流水线完成访问地址产生、等待存储器回应、取指令包、预解码等工作;执行流水线完成译码、读取/修改寄存器、读操作数和输出结果等工作。
3硬件乘法累加单元
由于DSP任务包含大量的乘法—累加操作,所以DSP处理器使用专门的硬件来实现单周期乘法,并使用累加器寄存器来处理多个乘积的累加;而且几乎所有DSP指令集都包含有MAC指令。
而GPP通常使用微程序实现乘法。
4零开销循环
DSP算法的特点之一是主要的处理时间用在程序中的循环结构中,因此多数DSP都有专门支持循环结构的硬件。
所谓“零开销”(zerooverhead)是指循环计数、条件转移等循环机制由专门硬件控制,而处理器不用花费任何时间。
通常GPP的循环控制是用软件来实现的。
5特殊的寻址方式
除了立即数寻址、直接寻址、间接寻址等常见寻址方式之外,DSP支持一些特殊的寻址方式。
例如为了降低卷积、自相关算法和FFT算法的地址计算开销,多数DSP支持循环寻址和位倒序寻址。
而GPP一般不支持这些寻址方式。
6高效的特殊指令
DSP指令集设计了一些特殊的DSP指令用于专门的数字信号处理操作。
这些指令充分利用了DSP的结构特点,提高了指令执行的并行度,从而大大加快了完成这些操作的速度。
例如TMS320C55xx中的FIRSADD指令和LMS指令,分别用于对称结构FIR滤波算法和LMS算法。
7丰富的片内外设
根据应用领域的不同,DSP片内集成了众多类型的硬件设备。
例如,定时器、串行口、并行口、主机接口(HPI)、DMA控制器、等待状态产生器、PLL时钟产生器、JTEG标准测试接口、ROM、RAM及Flash等。
这些片内外设提高了处理速度和数据吞吐能力,简化了接口设计,同时降低了系统功耗和节约了电路板空间。
举例DSP应用(FIR、IIR、FFT等)
1有限冲激响应滤波器DSP实现
在利用C55x系列处理器编写程序时,应充分利用处理器所提供的各种条件。
在下面所给出的实例中,可以发现该程序充分发挥了C55x内核双乘法器的作用,并灵活使用辅助寄存器的各种寻址方式。
这样做将提高处理器的工作效率,更好地满足系统实时性的要求。
该滤波器的阶数为4,输入数据长度为11。
程序清单:
N_TAPS.set4
N_DATA.set11
.data
COEFFS.int1,2,3,4
IN_DATA.int1,2,3,4,5,6,7,8,9,10,11
.bssOUT_DATA,N_DATA+N_TAPS1,,1
.text
BCLRARMS
.arms_off
bfir:
MOV#CODFFS,XCDP
AMOV#(IN_DATA+N_TAPS1),XAR0
AMOV#(IN_DATA+N_TAPS),XAR1
AMOV#OUT_DATA,XAR2
MOV#((N_DATAN_TAPS+1)/21),BRC0
MOV#(N_TAPS3),CSR
MOV#(-(N_TAPS1)),T0
MOV#(N_TAPS+1),T1
||RPTBLOCALFIREND1
MPY*AR0,*CDP+,AC0
:
:
MPY*AR1,*CDP+,AC1
RPTCSR
MACM*AR0,*CDP,AC0
:
:
MACM*AR1,*CDP+,AC1
MACM*AR0(T1),*CDP(T0),AC0
:
:
MACM*AR1(T1),*CDP(T0),AC1
MOVdbl(LO(AC0)),dbl(*AR2)
FIREND
计算的最终结果为:
0x0014,0x001E,0x0028,0x0032,
0x003C,0x0046,0x0050,0x005A
在取滤波器系数时,应注意要对生成的系数进行处理。
这是因为生成的系数一般都带有小数部分,而C55x系列处理器是定点处理器,不能处理小数。
因此,要对系数进行适当放大,使所有系数都在32768~+32767之间。
2无限冲激响应滤波器的结构
程序中AR0指向输入数据*x(n),AR1指向滤波器系数*h,AR2指向输出数据y(n),AR3指向中间变量dbuffer,T0存放滤波器中组成单元的数量,T1存放输入数据个数,滤波器的系数存放的顺序如下:
a11a21b21b11....a1ia2ib2ib1i
中间变量的排列顺序如下,i是中间变量所在单元的序号:
d1(n–1),d2(n–1),..di(n–1)d1(n–2),d2(n–2)...di(n–2)
程序清单:
SCALE.set0
.asgCDP,db_ptr;循环指针
.asgAR0,in_ptr;线性指针
.asgAR1,h_ptr;循环指针
.asgAR2,out_ptr;线性指针
.asgAR3,index;
.asgAR4,tap_updt;循环指针
PSHmmap(@ST1_L)
PSHmmap(@ST2_L)
PSHmmap(@ST3_L)
;配置状态寄存器
BCLR#CPL,ST1_55;通过DP进行相对寻址
PSHmmap(@DP_L)
MOV#0,DP;DP=0(访问应设计存器)
PSHT2
PSHT3
PSHBOTHXAR5
;初始化
BSET#CDPLC,ST2_55;CDP=circular(dbuffer)
BSET#AR1LC,ST2_55;AR3=circular(dbuffer)
BSET#AR4LC,ST2_55;AR4=circular(coeff)
BSET#SXMD,ST1_55;符号扩展使能
BCLR#SATD,ST1_55;关闭D单元饱和模式
BSET#FRCT,ST1_55;小数/模式使能
BCLR#SATA,ST3_55;关闭A单元饱和模式
BCLR#C54CM,ST1_55
BCLR#ARMS,ST2_55
;保存dbuffer[0]指针
MOVXAR3,XAR5
;保存当前dbuffer的地址
MOV*ar5,index
;保存循环地址db_ptr(CDP)和tap_updt(AR4)
MOVT0,T3;计算2*nbiq
SFTLT3,#1
ADD#1,T3
MOV@T3_L,BKC;初始化CDP循环缓冲大小(2*nbiq+1)
MOV@T3_L,BK47;初始化AR4循环缓冲大小(2*nbiq+1)
ADD#1,AR5
MOV@AR5_L,BSAC;初始化CDP循环起始地址:
dbuffer
MOV@AR5_L,BSA45
MOVindex,db_ptr
AMAR*db_ptr+
MOVindex,tap_updt
;设置循环地址h_ptr(AR1)
MOVT0,T3;计算4*nbiq
SFTLT3,#1
SFTLT3,#1
MOV@T3_L,BK03;初始化AR0-3循环缓冲大小(4*nbiq)
MOV@AR1_L,BSA01;初始化AR0-1循环起始地址:
coeff
MOV#0,AR1
;保存循环计数
SUB#1,T1,T3;计算nx1
MOVT3,BRC0;初始化外循环数(nx1)
MOVT0,T3;初始化内循环数(#bi-quads/21)
SFTLT3,#1
SUB#1,T3
MOVT3,BRC1
;定义地址偏移
MOV#1,T0
MOV#2,T1
;定义比例因子
MOV#SCALE,T2;比例因子
||SUBAC2,AC2
;内核
;XAR0:
x[]input
;XAR1:
h[]coefficients
;XAR2:
r[]result
;XAR3:
dbuffer[]
;XAR7:
reinitXAR1
RPTBLOCALouter_loop;外循环:
处理输入向量
MOV*in_ptr+<<#16,AC0;HI(AC2)=x(n)
||RPTBLOCALinner_loop;内循环:
处理一个单元
MOV#0,AC3
||MAS*(h_ptr+T1),*db_ptr+,AC0;AC0=x(n)a1*d(n1)
:
:
MAC*h_ptr(T0),*db_ptr+,AC2;AC2=b1*d(n1)
MAS*(h_ptr+T1),*db_ptr+,AC0;AC0=d(n)=x(n)a1*d(n1)a2*d(n2)
:
:
MAC*h_ptr(T0),*db_ptr+,AC2;AC2=b1*d(n1)+b2*d(n2)
MOVHI(AC0< ||ADDAC2,AC0;AC0=d(n)+b1*d(n1)+b2*d(n2) ;开始第二单元 MOV#0,AC2 || MAS*(h_ptr+T1),*db_ptr+,AC0;AC0=x(n)a1*d(n1) : : MAC*h_ptr(T0),*db_ptr+,AC3;AC3=b1*d(n1) MAS*(h_ptr+T1),*db_ptr+,AC0;AC0=d(n)=x(n)a1*d(n1)a2*d(n2) : : MAC*h_ptr(T0),*db_ptr+,AC3;AC2=b1*d(n1)+b2*d(n2) inner_loop: MOVHI(AC0< ||ADDAC3,AC0 outer_loop: MOVrnd(HI(AC0)),*out_ptr+;把结果存到输出缓冲 ;符号溢出 MOV#0,T0 XCClabel1,overflow(AC0) label1: MOV#1,T0 ;保存最后一个索引值 MOVAR3,*AR5;保存索引值到dbuffer[0] ;Contextrestore POPBOTHXAR5 POPT3 POPT2 POPmmap(@DP_L) POPmmap(@ST3_L) POPmmap(@ST2_L) POPmmap(@ST1_L) 3快速傅里叶变换(FFT)的DSP实现 程序中AR0指向输入数据x(n),x(n)是复数,按照实数、虚数顺序放置,并且要求输入的数据进行位翻转。 T0存放FFT变换的点数,点数可以是16,32,64,128,256,512,1024之一。 应用该程序时,应包含TWDDLE.inc文件,该文件存放旋转因子,程序运行之后计算结果将覆盖输入数据。 程序清单: RET_ADDR_SZ.set1;返回地址 REG_SAVE_SZ.set0;寄存器存储入口 FRAME_SZ.set2;本地变量 ARG_BLK_SZ.set0;参数块 PARAM_OFFSET.setARG_BLK_SZ+FRAME_SZ+REG_SAVE_SZ+RET_ADDR_SZ .asg0,data_ptr .asg1,data_sz .asg2,scale_flag .bsstempmem,2,,2 .bsstempmem1,2,,2 .asgT3,groups;蝶形运算组数量 .asgT1,index;校正地址 .asgAR7,bflies;蝶形结构数量 .asgAR4,k;外循环计数 .asgAR2,a;蝶形结构顶指针 .asgAR3,b;蝶形结构底指针 .asgAR5,temp;暂存寄存器 .text ;分配帧及变量块 AADD#-(ARG_BLK_SZ+FRAME_SZ+REG_SAVE_SZ),SP ;压栈 PSHT2 PSHT3 PSHBOTHXAR5 PSHBOTHXAR6 PSHBOTHXAR7 ;保存入口值 MOVAR0,*sp(data_ptr); MOVT0,*sp(data_sz); MOVT1,*sp(scale_flag); ;执行FFT; ;修改状态寄存器 BSET#FRCT,ST1_55 BCLR#ARMS,ST2_55 BCLR#C54CM,ST1_55 ;进行基4运算 ADD*sp(data_sz),AR0,AR2;c: ar2=#(fftdata+2*2*FFT_SIZE/4) SFTST0,#1;T0=FFT_SIZE/2 movar2,ar3 ADD*sp(data_ptr),T0,AR1;b: ar1=#(fftdata+1*2*FFT_SIZE/4) ADDT0,AR3;d: ar3=#(fftdata+3*2*FFT_SIZE/4) SFTST0,#1;T0=FFT_SIZE/4 SUB#2,T0 MOV#(tempmem1),AR7 MOV#tempmem,AR6 MOV#2,T1 ||MOVdbl(*AR0),AC0;in(ar,ai) MOVT0,BRC0 ||ADDdual(*AR2),AC0,AC2;(ar+cr)/;(ai+ci) MOVAR2,AR5 ||MOV#1,T0 MOVdbl(*AR1),AC1;in(br,bi) ||MOVAC2,dbl(*AR6);temp(ar+cr),(ai+ci) SUBdual(*AR3),AC1,AC2;(brdr)/(bidi) SUBdual(*AR2+),AC0;(arcr)/(aici) ||MOVHi(AC2),T3;move(brdr) ADDdual(*AR3),AC1,AC3;(br+dr)/(bi+di) ||MOVAC2,T2;move(bidi) ADDdual(*AR6),AC3,AC0;(ar+cr)+(dr+br)=ar' ;(ai+ci)+(di+bi)=ai' ||MOVAC0,dbl(*AR7(T0));(arcr),(aici)unaligned SUBdual(*AR6),AC3;(ar+cr)(dr+br)=br';(ai+ci)(di+bi)=bi' ||MOVAC0,dbl(*AR0+);out(ar';ai') SUBADDT2,*AR7(T0),AC0;(arcr)(bidi)=dr';(arcr)+(bidi)=cr‘ ADDSUBT3,*AR7,AC1;(aici)+(brdr)=di' ;(aici)(brdr)=ci' RPTBLOCALr4_loop MOVAC3,dbl(*AR1+);out(br',bi') ||MOVdbl(*AR0),AC3;in(ar,ai) MOVpair(HI(AC0)),dbl(*AR3+);out(dr',di') ||ADDdual(*AR2),AC3,AC2;(ar+cr) ;(ai+ci) MOVdbl(*AR1),AC1;in(br,bi) ||MOVpair(LO(AC0)),dbl(*AR5+);out(cr',ci') SUBdual(*AR3),AC1,AC2;(brdr)/(bidi) ||MOVAC2,dbl(*AR6);temp(ar+cr),(ai+ci) SUBdual(*AR2+),AC3,AC0;(arcr)/(aici) ||MOVHi(AC2),T3;move(brdr) ADDdual(*AR3),AC1,AC3;(br+dr)/(bi+di) ||MOVAC2,T2;move(bidi) ADDdual(*AR6),AC3,AC0;(ar+cr)+(dr+br)=ar';(ai+ci)+(di+bi)=ai' ||MOVAC0,dbl(*AR7(T0));(arcr),(aici)unaligned SUBdual(*AR6),AC3;(ar+cr)(dr+br)=br';(ai+ci)(di+bi)=bi' ||MOVAC0,dbl(*AR0+) SUBADDT2,*AR7(T0),AC0;(arcr)(bidi)=dr';(arcr)+(bidi)=cr' r4_loop: ADDSUBT3,*AR7,AC1;(aici)+(brdr)=di';(aici)(brdr)=ci' MOVAC3,dbl(*AR1+);out(br',bi') MOVpair(HI(AC0)),dbl(*AR3+);out(dr',di') MOVpair(LO(AC0)),dbl(*AR5+);out(cr',ci') ;基2(stages3->log2(FFT_SIZE)) ;初始化 MOV*sp(data_ptr),AR0;ar0=#fftdata OR#0x57,mmap(ST2_55);circularar0,ar1,ar2,ar4andar6 ;蝶形运算起始地址 ADD#2,ar0,ar1 MOVmmap(@ar0),bsa23;Pleg MOVmmap(@ar0),bsa45;P'leg(in-placebutterflies) MOVmmap(@ar1),bsa01;Qleg MOVmmap(@ar1),bsa67;Q'leg(in-placebutterflies) ;蝶形运算数量 MOV*sp(data_sz),T0 MOVT0,T1;T1=#FFT_SIZE SFTST0,#1 SUB#2,T0 MOVmmap(@T0_L),bk03;bk03=(2*FFT_SIZE2), MOVmmap(@T0_L),bk47;bk47=(2*FFT_SIZE2), ;初始化寄存器 MOV*sp(data_sz),T0 SFTST0,#1 SFTST0,#1 MOVT0,ar5;2*numberofgroupsforstage3 MOV#2,ar7;1/2*numberofbutterfliespergroupforstage3 AMOV#twiddle,xar3;notmodifiedduringiterationofthestages ADD#2,AR3 MOVxar0,xar1;datapage=datapageofindata MOVxar0,xar2;datapage=datapageofindata MOVxar0,xar4;datapage=datapageofindata(in-placebutterflies) M
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 特点 应用