DSP芯片技术及应用.docx
《DSP芯片技术及应用.docx》由会员分享,可在线阅读,更多相关《DSP芯片技术及应用.docx(22页珍藏版)》请在冰豆网上搜索。
DSP芯片技术及应用
DSP总结:
以下总结仅针对宁波大学DSP芯片技术及应用(通信类非控制类)这门课,个人根据重点、考点总结的,用于期末复习(请结合课本以及PPT的例子),不足之处请见谅,基本能过就是,如若其中有错请联系QQ:
493288964。
还是建议您平时学点,理解为先!
!
!
将该文章用于XX等兑换积分的行为是可耻的!
第一章绪论(简介)
1、DSP芯片特点:
采用哈佛结构;多总线结构;流水线技术;专用的硬件乘法器;特殊的DSP指令;快速的指令周期;硬件配置强;支持多处理器结构
1)CPU是冯.诺伊曼结构;DSP是数据和地址空间分开的哈佛结构。
冯.诺依曼结构:
单存储空间;统一的程序和数据空间;共享的程序和数据总线;程序指令只能串行执行
单指令周期:
100ns,现在单指令周期为:
10ns
哈佛结构:
双存储空间;程序存储器和数据存储器分开;程序总线和数据总线分开;独立编址、独立访问
改进型哈佛结构:
双存储空间、多条总线;多条数据总线;高速缓冲器(重复指令,只需读入一次)
2)采用多总线结构:
TMS320C54X:
4组总线;单机器周期内可完成的操作;
3)流水线操作
4)专用的硬件乘法器
硬件乘法累加器是DSP区别于通用微处理器的一个重要标志
MAC(乘累加)单元(独立的乘法器和加法器;单周期内完成一次乘法和一次加法运算
;MPY,MAC,MACA,MACSU等指令)
分类:
工作时钟和指令类型:
静态和一致性DSP芯片;用途分:
通用和专用型;数据格式分:
定点和浮点型
2、DSP按数据格式分为定点型和浮点型
定点DSP芯片:
数据长度16位/24位TMS320C2000/5000/6000
价格便宜、功耗较低、但运算精度稍低。
浮点DSP芯片:
数据长度32位/40位MS320C3X/4X/VC33/C67X/C8X
价格稍贵、功耗较大、但运算精度高。
3、芯片简介
TMS320VC5416PGE160主处理器芯片的性能:
频率:
160MHz 速度:
160MIPS 周期:
6.25ns
第二章:
TMS320C54X的硬件结构
1、C54X:
为低功耗,高性能而专门设计的16位定点DSP芯片
C54基本结构:
中央处理器(CPU)、内部总线结构、存储器、片内外设。
1、内部总线结构
8组16-bit总线
1组程序总线:
PB(传送从程序存储器来的指令代码和立即数)
3组数据总线:
DB、CB、EB(CB和DB总线传送从数据存储器读出的操作数。
EB总线传送写入存储器中的数据)
对应的4组地址总线:
PAB、DAB、CAB、EAB:
提供执行指令所需的地址
2、中央处理单元(CPU)
CPU主要包括以下几部分:
40位的算术逻辑单元(ALU)
2个40位累加器ACCA、ACCB
40位桶形移位寄存器
乘累加单元(MAC)
比较、选择和存储单元(CSSU)
指数编码器
CPU状态和控制寄存器
1)两个40位累加器A和B;
既可作为ALU或MAC的输入源,也可存放运算结果;
累加器A和B的区别:
累加器A的16~32位能被用作乘法-累加单元中的乘法器输入,而累加器B不行
累加器的各部分AG,BG,AH,BH,AL,BL都是存储器映象寄存器,可使用寄存器寻址方式
2)算术逻辑单元(ALU)
完成多数算术逻辑运算:
由1个40位的ALU和2个40位累加器完成
多数算术逻辑运算指令都是单周期指令
ALU的输入和输出:
X输入源、Y输入源。
X输入源(桶形移位寄存器、数据总线DB的操作数)、Y输入源(暂存器T、累加器A/B、数据总线CB的操作数)
SXM:
符号位扩展方式控制位
ALU对输入数据的预处理受SXM值的影响:
当数据存储器操作数在低16位时:
SXM=0,高位用0填充(进行无符号数运算);SXM=1,高位进行符号扩展(带符号数运算)
当数据存储器操作数在高16位时:
SXM=0,高位用0填充,低16位用0填充;SXM=1,高位进行符号扩展,低16位用0填充
对16位数:
最大正数为7FFFH,最小负数为8000H
对32位数:
最大正数为7FFFFFFFH,最小负数为80000000H
CMPSsrc,Smem:
比较src累加器高端和低端两个16位二进制补码的大小,将较大值放入Smem存储器中.
EXP编码器:
支持指数运算指令的专用硬件电路
EXP指令:
说明:
计算src的指数值并以二进制补码形式存放于T寄存器中.(TS:
D0~D5)
举例:
1.A=FFFFFFFFCBH,执行EXPA指令后A和T的值分别为多少?
A=FFFFFFFFCBH,T=0019H
EXP常与NORM联合使用,实现累加器的归一化(定点数的定标)。
NORM指令:
NORMsrc[,dst]
功能:
(src)<例一:
EXPA
NORMA
假设A=FFFFFFF001H,以上两条指令执行后,A和T的值分别为多少?
T=0013HA=FF80080000H
例二:
NORMB,A
若A=FFFF8FF302H,B=210A0A0A0AH,T=FFF9H
思考:
执行后A、B及T的值?
A=0042141414HB=210A0A0A0AHT=FFF9H
3)乘累加单元
MAC单元由以下部分组成:
乘法器,40位的专用加法器,带符号/无符号输入控制,暂存器(TREG),小数控制(FRCT),零检测器,舍入器(二进制补码)和溢出/饱和逻辑.
FRCT:
小数相乘方式控制位
当FRCT=1时,乘法结果左移1位,消去多余的符号位,相应的定标值加1
乘法器的两个输入:
例:
MACPSmem,pmad,src
MACASmem,B
4)CPU状态和控制寄存器
C54x有三个16位的状态和控制寄存器
状态寄存器ST0
状态寄存器ST1
处理器工作方式状态寄存器PMST
ST0、ST1中包含各种工作条件和工作方式的状态
PMST中包含存储器的设置状态和其他控制信息
ST0:
反映寻址要求和计算的中间运行状态
ARP:
辅助寄存器指针(AR0~AR7)
TC:
测试/控制标志位
如:
CMPMSmem,#lk
BCagain,NTC
C:
进位标志,加法进位时,置1;减法借位时,清0
OVA/OVB:
累加器A/B的溢出标志
当运行结果送入累加器A或B中且发生溢出时,OVA或OVB置1。
DP:
数据存储器页指针,对应16位数据存储器地址的高9位(基地址)
如:
ld#4,dp
st#1,1;指令中给出低7位地址(偏移地址)
ST1:
反映寻址要求,计算的初始状态设置,I/O及中断控制。
BRAF:
块重复操作标志位(RPTB指令)
CPL:
直接寻址选用何种指针,SP(CPL=1)或DP(CPL=0)
XF:
控制XF通用外部I/O引脚输出状态,可对XF进行复位和置位
INTM:
置1,关闭所有可屏蔽中断
OVM:
累加器是否溢出保护,置1(要保护)。
SXM:
符号位扩展方式控制位,控制进行无符号数运算还是带符号数运算。
C16:
双精度/双16位运算方式,置1(双16位)。
FRCT:
小数方式控制位。
ASM:
累加器移位方式控制位(5位)。
PMST:
设置并控制处理器的工作方式
IPTR:
中断向量指针,决定中断向量表起始地址的高9位。
复位时,FF80H
3、存储器(片内存储器)
包括片内ROM、DARAM、SARAM
DARAM:
双访问RAM单机器周期内可被访问2次
如:
MACXmem,Ymem,src
SARAM:
单访问RAM机器周期内只能被访问1次
片内DARAM和SARAM可映射到数据空间或程序空间
CPU在单周期内可执行4次存储操作:
1次取指、2次读操作数和1次写操作数
并行结构、多总线及片内RAM的双寻址能力
4、存储器空间:
C54xDSP具有三个独立的空间
程序空间:
随地址线根数不同而不同。
如:
16根(64K),20根(1M,C5402),23根(8M,C5416)
数据空间:
64K
程序空间:
64K
I/O空间:
64K
片内、片外程序空间统一编址!
片内、片外数据空间统一编址!
1)程序存储空间:
存放指令、立即数和系数表1兆字
C5416:
8M字的空间,整个程序空间分成128页(XPC=0~127)每页均64K字
与程序寻址相关的寄存器:
程序计数器PC:
包含程序存储器地址的16位寄存器
控制程序的运行过程,顺序执行时,PC=PC+1
扩展程序计数器XPC(7位寄存器)
程序长转移时,PC=程序存储器地址(0~15),XPC=程序存储器地址(16~22)。
内部ROM:
不同型号的芯片内部ROM配置不同
C5402:
有4K字的片内ROM
映射到程序空间的F000H~FFFFH:
高2千字由TI定义(F800H~FFFFH),图2.5.3
F800H:
引导程序
FF80H:
中断向量表
2)数据存储空间:
用来存储数据:
包括需处理的数据和数据处理的中间结果。
空间的配置:
共64K字
DROM标志位:
决定片内ROM是否映射到数据空间
F000H-FEFFH:
由DROM标志位控制定义在片内还是片外ROM存储器。
为了提高并行能力,片内DARAM和数据ROM细分成若干个数据块。
如图2.5.4:
每80H(128)个存储单元为一个数据块。
DP:
数据存储器的高9位地址
数据页0(DP=0,0000H-005FH):
特殊功能寄存器空间
存储器映射寄存器MMR:
通过访问映射寄存器就可实现对CPU和外设存储器的相应操作。
CPU寄存器(0000H~001FH):
27个
用于程序的运算处理和寻访方式的选择及设定,表2.5.2
片内外设寄存器(0020H~005FH)
用来控制片内外设电路的状态
寻址需2个机器周期
不同型号的‘C54X芯片具有不同的片内外设寄存器
3)I/O空间用于对片外设备的访问64K字
寻址指令仅两个:
PORTR和PORTW
相应的选通、控制信号
PMST寄存器的三个位共同影响存储器的结构:
MP/MC:
DSP工作于微处理器模式还是微计算机模式(程序存储空间是否使用片内ROM存储器):
F000H-FFFFH:
当MP/MC=0时,定义为内部ROM
当MP/MC=1时,定义为外部存储器
OVLY:
片内RAM是否映射到程序空间(1:
是,0:
否)
OVLY=0时,0000H-3FFFH:
全部定义为外部存储器
OVLY=1时,0080H-3FFFH:
定义为内部DARAM存储器
DROM:
片内ROM是否映射到数据空间(1:
是,0:
否)
5、片内外设电路
通用I/O引脚(XF(输出)BIO/(输入))
定时器
时钟发生器
主机接口HPI
串行通信接口
软件可编程等待状态发生器
可编程分区转换逻辑
片内外设寄存器(0020H~005FH)
程序存储器:
存放程序代码,系数表和立即数等
PC:
程序计数器,16位寄存器,64K空间
XPC:
扩展程序计数器,7位寄存器,访问扩展程序存储器,长转移,长调用,如FB[D],FCALL[D]等
程序存储器操作数pmad等,如MVPD,MACP等
复位时,PC=FF80H
顺序执行程序时,PC=PC+1
流水线:
预取指、取指、译码、寻址、读数和执行共6个操作阶段。
第三章TMS320C54XDSP芯片的指令系统(ppt例题)
1、指令的表示方法
指令的两种表示法:
助记符形式和代数表达式
操作数域:
立即数,寄存器,程序空间地址,数据空间地址或I/O地址。
立即数:
#为前缀,间接寻址:
*为前缀。
程序存储器操作数(存储器地址):
Pmad,extpmad,Pmem
数据存储器操作数:
dmad,Dmem,Smem,Sind,Xmem,Ymem,Lmem(32位)
2、寻址方式:
数据寻址和程序寻址
数据寻址(7种基本方式)
1)立即数寻址
立即数寻址(K,k3,k5,k9,lk)
短立即数:
3,5,8,9位(单字指令中)
长立即数:
16位(双字指令中),
立即数:
#前缀
LD#80h,A
RPT#99;单字指令
RPT#7DFFH;双字指令
2)绝对地址寻址
数据寻址(绝对地址寻址):
指令中包含16位地址,寻址存储单元;至少为双字长指令,有四种类型:
数据存储器地址(dmad)寻址:
操作数存放于数据存储单元,确定该单元地址
主要指令:
MVDKSmem,dmad;dmad=Smem
MVDMdmad,MMR
MVKDdmad,Smem
MVMDMMR,dmad
例:
MVDM2000H,T
RPT#19;数据块的复制
MVMDAR2,SAMPLE;SAMPLE为常数表示的地址
MVKD0200H,*AR2+
程序存储器地址(pmad)寻址:
确定程序存储器中的一个地址
主要指令:
FIRSXmem,Ymem,pmad
MACDSmem,pmad,src
MACPSmem,pmad,src
MVDPSmem,pmad
MVPDpmad,Smem
例:
MVPDTABLE,*AR7-
MACP*AR3-,COEFFS,A
端口地址(PA)寻址(符号或常数):
确定外部I/O端口的地址
主要指令:
PORTRPA,Smem
PORTWSmem,PA
例:
PORTRFIFO,*AR5
PORTW*AR1+,FIFO1
*(lk)寻址:
用符号或常数指明数据存储器中的一个地址
不能与循环指令(RPT,RPTZ)一起使用!
例:
STLA,*(y)
STHA,*(y1)
LD*(PN),A
数据寻址举例
(1):
x.set2000h
portr20h,*(x)
stm#x,ar1
ld#100,b
macp*ar1,100h,b
3)累加器寻址:
对存放数据的程序存储器寻址
将累加器的内容作为地址(16位或23位)去访问程序存储器单元
仅两条指令:
WRITA和READA
循环执行,可实现数据块的传送。
READASmem
将累加器A所确定的程序存储器单元中的值传送到数据存储单元。
如:
若A=0000000100h,AR1=0200h,执行下列指令:
READA*AR1
WRITASmem
将Smem所确定的数据存储单元中的值传送到累加器A所确定的程序存储器单元。
如:
STM#0300H,AR2
LD#18000H,A
WRITA*AR2
4)直接寻址
由基地址(DP或SP提供)和低7位偏移地址(指令中提供)共同构成16位数据存储器地址。
64K的数据空间:
分成512页,每页128个单元
DP取值范围:
0~511
7位偏移地址范围:
0~127
不改变基地址,可寻址连续的128个单元
DP复位值为0
直接寻址指令代码的格式
图3.1.1
优点:
单字指令
基地址由DP还是SP提供?
由CPL(ST1中)标志位的值决定
CPL=0:
基地址由DP(9位)提供
CPL=1:
基地址由SP(16位)提供
16位数据地址的形成过程:
CPL=0时,9位DP值为高位,指令中7位偏移值为低位,构成16位数据存储器地址。
CPL=1时,16位SP的值与指令中7位偏移值相加,形成16位数据存储器地址。
例如:
基地址由DP提供:
ld#4,dp;页指针指向数据M第4页,;片内数据区DARAM
st#1,1
st#2,2
st#3,3
st#4,4
基地址由SP提供:
STM#4000H,SP
SSBXCPL
ST#9876h,3
易混淆的问题!
LD#40H,DP
STLA,60H
;60H:
数据存储器2060H单元
STM#2000H,AR1
MVDK*AR1,60H
;60H:
数据存储器0060H单元
MVDP*AR1,60H
;60H:
程序存储器0060H单元
5)间接寻址
6)存储器映射寄存器寻址
用途:
主要用于不改变DP、SP的情况下,修改MMR中的内容。
7)堆栈寻址
“后进先出”的原则
堆栈:
保存PC值和保存数据参数
堆栈存放数据:
从高地址向低地址增长,SP总是指向堆栈中最后存入的数据单元
入栈:
先(SP)-1,数据再入栈.
出栈:
数据出栈,SP+1.
PSHMT
PSHD*AR3+;SP-1,*AR3所指单元数据入栈
POPMT
POPD*AR2;数据出栈,存入*AR2所指向单元,SP+1
寻址方式举例:
DDAT1.set1000H
PDAT1.set2000H
RSBXCPL
LD#1234h,A;立即数寻址
ST#5678h,*(DDAT1);立即数寻址和绝对地址寻址
LD#PDAT1,A
READA2H;立即数寻址,直接寻址(DP指针)和累加器寻址
SSBXCPL
ST#9876h,3H;直接寻址(SP指针)
RSBXCPL
STM#DDAT1,AR2
ST#9876h,*AR2;间接寻址
MVDK3H,DDAT1
MVKDDDAT1,1H;直接寻址和绝对地址(dmad)寻址
MVDP2H,PDAT1;直接寻址和绝对地址(pmad)寻址
STM#8888h,T;立即数寻址和存储器映射寄存器寻址
PSHMT
POPMT;堆栈寻址和存储器映射寄存器寻址
STM#4000h,AR0
RPT#29
MVPD1000H,*AR0+;程序存储器到数据存储器数据块的复制
STM#2000H,AR2
STM#3000H,AR3
LD#0,A
RPT#19
MAC*AR2+,*AR3+,A
STLA,*(y);完成20次乘累加操作
程序寻址(P47-48)
程序存储器:
存放程序代码,系数表和立即数
程序地址生成器(PAGEN)产生地址,再加载到PAB总线
3、指令系统
共有129条基本指令,包含了6种基本类型的操作:
数据传送指令
算术运算指令
逻辑运算指令
程序控制指令
并行操作指令
重复操作指令:
RPT:
单指令重复
RPTB:
块重复指令
几个寄存器:
BRC,RSA,REA,标志位BRAF
RPTZ:
多重循环,合理安排可减少执行时间
最内层循环:
RPT或RPTZ
次内层循环:
RPTB
其余层循环:
BANZ
第四章:
汇编语言程序的开发工具
核心:
链接命令文件的编写
编写C或汇编源程序,经c编译器和汇编器,.c.asm.objCOFF目标文件
经汇编器,.asm.objCOFF目标文件
经链接器,根据链接命令文件(.cmd),将多个.obj文件或库文件链接起来,分配各段地址,生成可执行文件(.out),用模拟器/仿真器,分析验证.out文件,用格式转换工具,.out.hex文件,并写入EPROM/FLASH中
注:
c编译器三个功能:
编译,汇编,链接
COFF:
公共目标文件格式
编写汇编程序时,采用段sections(代码段,数据段等)的形式,模块化编程方便,程序可移植性大
汇编器和链接器提供一些伪指令来建立和管理各种段
段(sections):
指在存储器中占据相邻空间的代码或数据块
每个COFF文件都被分成若干个段
每行汇编语句都从属一个段
一般,COFF文件都包含3种形式的段:
.text段:
代码段
.data段:
已初始化数据段
.bss段:
未初始化变量段
两种基本类型的段:
三个已初始化段
.text段:
存放程序代码
.data段:
存放已初始化数据
.sect段:
自定义段,存放初始化数据或程序代码
两个未初始化段
.bss段:
为未初始化变量保留存储空间
.usect段:
自定义段,保留存储空间
链接器有2条伪指令:
MEMORY伪指令
SECTIONS伪指令
PAGE0:
程序存储器
PAGE1:
数据存储器
第五章:
:
汇编语言程序设计(结合PPT和书上例题)
1)程序的控制
常用程序控制指令:
B,BC,BANZ,CALL,CC,RET,RC
2)条件操作程序
3)算术运算指令
4)堆栈的使用
5)两种数据排列方法
偶地址排列:
指令中给出的地址为偶地址
奇地址排列:
指令中给出的地址为奇地址
可修改.cmd文件实现
常使用偶地址排列法
6)小数运算程序
对DSP处理的同一个整数,小数点位置不同,表示数的大小和精度就不同。
常用:
Q表示法.
用Q0,Q1,Q2,……,Q15表示小数点分别在D0,D1,D2,……,D15位之后整数(Q0)小数(Q15)混合小数(Q1---Q14)
如,2000H(Q0和Q15各表示多少?
)
对Q15的小数进行定标
乘以32768(215)
如:
定义一个已初始化数据0.907:
.word32768*907/1000
第六章:
应用程序设计(结合PPT和书上例题)
第七章:
:
片内外设、接口及应用
1)3个16位定时器MMR:
定时寄存器TIM:
复位或定时中断时TIM内装入PRD值,并进行自减操作。
(0024H)
定时周期寄存器PRD:
存放定时时间常数。
(0025H)
定时控制寄存器TCR:
存放定时器的控制位和状态位。
(0026H)
2)定时周期计算公式:
定时周期=CLKOUT*(TDDR+1)*(PRD+1)
重新装载PSC,TIM
SRESET/:
DSP器件复位时,硬件复位
TRB:
定时器单独复位
PSC:
PSC—>0TIM:
TIM—>0
3)定时器的初始化:
初始化定时器步骤:
TSS=1,停止定时器
装载PRD值
重新载入TCR,初始化TDDR,置TSS=0和TRB=1来重载定时器周期,启动定时器
注意:
TIM和PSC的初始值!
举例:
STM#0010H,TCR;TSS=1
(1)
STM#99,PRD;加载PRD
(2)
STM#0269H,TCR
;PSC=1001B,TDDR=1001B,TSS=0,TRB=1
(加载分频系数,启动定时器)(3)
4)设置定时器中断方法:
IFR:
中断标志寄存器
当某个中断触发时,相应位置1,直到CPU识别该中断为止;
将置位1写入相应的IFR标志位,就可清除正被挂起的中断
IMR:
中断屏蔽寄存器(各位定义与IFR类似)
用于屏蔽外部和内部的硬件中断
相应位置1,允许该中断;置0,屏蔽该中断
INTM标志位:
用于使能或禁止所有可屏蔽中断(ST1中D11位)
当INTM=0,所有可屏蔽中断被使能
当INTM=1,所有可屏蔽中断被禁止
设置IFR中的TINT=1:
清除挂起的定时器中断
设置IMR中的TINT=1:
启动定时器中断
将INTM置0:
开启中断
设置定时器中断举例:
STM#0008H,IFR;清除尚未处理完