DSP技术 备课汇总.docx

上传人:b****5 文档编号:6850754 上传时间:2023-01-11 格式:DOCX 页数:42 大小:727.47KB
下载 相关 举报
DSP技术 备课汇总.docx_第1页
第1页 / 共42页
DSP技术 备课汇总.docx_第2页
第2页 / 共42页
DSP技术 备课汇总.docx_第3页
第3页 / 共42页
DSP技术 备课汇总.docx_第4页
第4页 / 共42页
DSP技术 备课汇总.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

DSP技术 备课汇总.docx

《DSP技术 备课汇总.docx》由会员分享,可在线阅读,更多相关《DSP技术 备课汇总.docx(42页珍藏版)》请在冰豆网上搜索。

DSP技术 备课汇总.docx

DSP技术备课汇总

第一章绪论

信息化已成为社会发展的大趋势。

信息化是以数字化为背景的,DSP技术是数字化最重要的基本技术之一。

1.1DSP技术的概念和发展

自从70年代为处理器生产以来,主要有三个方向的发展。

1,通用CUP。

2,微控制器MCU,即单片机。

3,DSP。

这三类处理器各有特点,技术上虽有借鉴,但又用各自用在不同的领域。

DSP技术的发展分为了两个领域:

1,数字信号处理的理论和方法今年来的到迅速的发展。

2,DSP的性能也在迅速提高。

见P2,表一。

1.2数字信号处理的优势所在。

1,可控性

2,稳定性

3,可重复性

4,抗干扰性

5,实现自适应算法

6,数据压缩

7,大规模集成

模拟信号的不可代替性:

自然界信号大多为模拟信号;实时性;射频信号的处理(频谱搬移)。

1.3DSP的主要结构特点

1,哈佛结构和改进型的哈佛结构。

2,流水线技术。

3,硬件乘法器和乘加指令。

4,独立的直接存储器(DMA)总线及其控制器。

5,数据地址发生器。

第二章

本章将详细讲述TMS320C54X系列DSP芯片内核的结构和原理。

DSP芯片时一个复杂的硬件系统,我们只有深入的了解它的内部结构和原理,才能充分的利用它开发我们所需要的软件和程序。

3.1中央处理单元CPU

对于TMS320C54X系列DSP芯片来说,CPU的功能非常强大,可以在一个周期内高速的完成多项算数运算。

下面我们首先从总体上来看看它有哪几部分构成:

(1)40位的算数逻辑运算单元(ALU);

(2)2个40位的累加器(A和B);

(3)-16~31位的桶形移位寄存器;

(4)乘法器/加法器单元;

(5)比较、选择和存储单元;

(6)指数编码器;

(7)CPU状态和控制寄存器;

3.1.1算术逻辑运算单元ALU

首先,我们来看第一项,ALU单元。

ALU单元是DSP芯片的大脑,它可以对各种数据进行处理,(由图可知)。

具有多种40位的数学和逻辑运算功能。

1.从图上我们可以看出来,ALU的输入有下面两个部分构成;

X:

(1)来自数据总线DB的数据存储操作数;

(2)移位寄存器的输出。

Y:

(1)累加器A中的数据;

(2)B中的数据;

(3)寄存器T中的数据;

(4)数据总线CB中的操作数。

2.再看,它的运算结果输出通常都被送到了A和B中

3.由于它是一个40位的运算单元,那么在运算的时候可能就会出现进位或借位、或者是溢出的情况。

在这种情况下就会影响到状态寄存器。

当在发生进位和借位的时候,状态寄存器ST0中的进位位C将被置1。

可以对该位的判断来进行分支转移、调用和返回等操作。

当发生溢出时呢?

ALU也具有处理溢出功能的结构。

当溢出发生的时候,溢出标志位(ST0中的)OVA或OVB将被置1,直到运行复位指令或者是溢出条件指令。

当发生溢出的时候,我们还要关心ST0中的OVM位。

当OVM=1时,如果发生的是正向溢出,那么当会用一个32位的最大正数(007FFFFFFFH)加载到累加器中;如果是发生的是负向溢出,则用最大负数(FF80000000H)。

如果OVM=0时,那么就不用做溢出处理了,直接将实际运算结果加载到累加器中。

4.ALU还有另外一个功能,刚刚我们所说的运算都是40位的运算。

也就是说ALU在运算的时候就会用到它内部的40位全部资源。

但是如果我们要求的计算位数并不是那么高呢?

这时候,我们就可以通过设置ST1中的C16位为1,有什么作用呢?

它的作用就是可以让ALU在单个周期内进行双(也就是两个)16位的算术运算。

3.1.2累加器A和B

累加器A和B是CPU内核中最为繁忙的寄存器了,ALU要进行的大部分运算都要通过A和B进行中转。

累加器A和B都是40位的寄存器,这40位的数据我们把它分成3个部分:

低位(AL/BL0、高位(AH/BH)和保护位9AG/BG)

39~3231~1615~0

AG/BG

AH/BH

AL/BL

其中,保护位是为了防止迭代运算时溢出的。

因为以上3个部分都是存储器映射寄存器,所以我们在操作是可以分别对三个部分进行操作。

A和B的差别仅仅在于A的31b~16b可以做为乘法器的一个输入。

例:

当我们使用STH、STL等指令对累加器进行存储操作时,通常在操作时对累加器中的内容进行移位。

当右移时,会将AG中的数据移动到AH中;左移时,会将AL中的数据移动到AH中,并将低位添0。

如,A中内容为FF43211234H,执行下面操作,

STHA,8,TEMP;TEMP=2112H

STHA,-8,TEMP;TEMP=FF43H

STLA,8,TEMP;TEMP=3400H

STLA,-8,TEMP;TEMP=2112H

3.1.3桶形移位寄存器

桶形移位寄存器是一个40位的单元寄存器,能够将输入的数据进行0~31b的左移和0~16b的右移(通常写成-16b~31b)。

移动的位数可以由下面几种方式定义:

(1)立即数(-16~15);如我们上例中的8、-8;

(2)状态寄存器ST1的累加器移位方式(ASM)位,共5位(-16~15);

(3)用T寄存器中的低6位数值来定义(-16~31)。

例:

ADDA,-4,B;A右移4位加到B中

ADDA,ASM,B;A按ASM中的定义移位后加到B中

NORMA;按T中的定义对A进行移位(归一化,这条指令一般不单独使用,和取指指令使用)

桶形移位寄存器的主要任务就是为输入数据进行定标。

为什么要定标呢?

因为计算当中我们的数据范围是受到了位数的限制,移动定标可以使在计算精度要求的范围以内表示出更大范围的数据。

 

3.1.4乘法器和加法器

这个单元当中主要包含了3个部分:

(1)17b乘17b的硬件乘法器;能够执行无符号数的乘法(16位操作数前面加一个0)、有符号数乘法(16位操作数加符号位扩展成17位的有符号数)和无符号数和有符号数的乘法运算。

当乘法器工作在小数方式相乘的时候(由状态寄存器ST1中的FRCT位决定,若为1则是小数位方式),将相乘结果左移一位以消去多余的符号位

(2)40b的相加器;

(3)零检测器、舍入器、溢出/饱和逻辑电路。

有些乘法指令如:

MAC、MAS等,如果带后缀R,就表示要对结果进行舍入处理,即加如2的15次方,然后对累加器的低16位清零。

3.1.5比较、选择和存储单元

在数据通信和模式识别当中,存在的大量的“加-比-选”的运算,也就是维特比(Viteri)运算,CSSU(比较、选择和存储单元)也就正是针对这个特点而设置的。

维特比(Viteri)算法是先对两个操作数相加,然后对相加过后的结果进行比较,最后选出较大的操作数。

其中加法运算是用ALU单元完成的,我们前面学过了,如果将ST1中的C16位置1,这样就可以在一个周期之内完成两个16b的加法运算了。

完成之后分别存储在累加器的高16b和低16b中。

然后利用指令CMPS就可以对AH和AL中的内容进行比较了。

如:

CMPSA,*AR1;如果A(31~16)

;则*AR1=A(31~16),TRN左移1位,TRN(0)=0,TC=0

;否则*AR1=A(15~0),TRN左移1位,TRN(0)=1,TC=1

TRN将自动记录比较结果。

3.1.6指数编码器

指数编码器用于支持单周期EXP(指数运算指令)的一个专用硬件。

在EXP指令中累加器的指数值能以二进制补码的形式存储在T寄存器(低6位,联系桶形移位寄存器)中,范围是-8~31。

指数值定义为前面的冗余位数减8的差值。

如:

000000FFFFH,前面冗余位数为24位,指数值为24-8=16

0FFFFFFFFFFH,前面冗余位数为4位,指数值为4-8=-4

我们看看下面的例子:

EXPA;指数值送入T中

STT,EXPONET;将指数值存入定义的数据存储器中

NORMA;对累加器归一化

3.1.7CPU状态和控制寄存器

TMS320C5X有3个状态和控制寄存器:

(1)状态寄存器ST0

(2)状态寄存器ST1

(3)处理器工作方式状态寄存器PMST

这3个寄存器是整个芯片的控制部分,相当于芯片的神经中枢,控制着整个芯片的运行状态。

这3个寄存器中,ST0和ST1中包含着芯片的各种工作条件和工作状态;PMST中包含了寄存器的设置状态和其他一些控制信息。

1.处理器工作方式状态寄存器PMST

PMST主要设定并控制处理器的工作方式,放映处理器的工作状态。

其结构如下:

15~76543210

IPTP

MP/MC

OVLY

AVIS

DROM

CLKOFF

SMUL

SST

(1)IPTR,中断向量指针。

IPTR共9位,它标志着中断向量驻留的128b字的程序存储区地址。

复位时,这9b全部置1,因此复位向量总是驻留在程序存储空间地址为FF80H处。

(2)MP/MC,微处理器或微计算机工作方式选择位。

通过设置该位来选择芯片工作在哪种工作方式。

若连接引脚为高电平时,工作在微处理器状态,这时不能寻址片内的程序寄存器;若为低电平时,工作在微计算机状态,此时可以选择片内程序存储器。

(3)OVLY,RAM重复占用标志位。

如果此位置位,允许片内双寻址数据RAM映射到程序空间,也就是可以将片上的RAM作为程序空间寻址。

注意:

数据0页(0~7FH)为特殊寄存器空间,不能映射。

(4)AVIS,地址可见位。

此位置位,允许在地址引脚上看见内部程序空间的地址内容。

(5)DROM,数据ROM位。

这一位用来控制片内的ROM是否映射到数据空间。

(同OVLY位联系讲)

(6)CLKOFF,时钟关断位。

该位决定引脚CLKOUT(输出时钟脉冲)是否允许输出。

为1是禁止输出。

(7)SMUL,乘法饱和位。

该位只有在OVM=1,FRCT=1时才有效,对乘法结果进行饱和处理。

(8)SST,存储饱和位。

当SST=1时,对存储前累加器进行饱和处理。

2.状态寄存器ST0

状态寄存器ST0,主要反映寻址要求和计算中间运行状态。

15~1312111098~0

ARP

TC

C

OVA

OVB

DP

各位定义如下:

(1)ARP,辅助寄存器指针。

ARP共3位,用于间接寻址当中辅助寄存器的选择。

(2)TC,测试/控制位。

用于保存ALU的测试位操作结果,也可根据该位状态辅助一些状态转移指令的执行。

(3)C,进位标志位。

(4)OVA,累加器A的溢出标志。

(5)OVB,累加器A的溢出标志。

(6)DP,数据存储器页指针。

DP是一个9b的字段,常常作为高9b和指令中的低7b想结合,直接寻址。

3.状态寄存器ST1

ST1反映了寻址要求、计算的初始设置、I/O及中断控制。

151413121110987654~0

BRAF

CPL

XF

HM

INTM

0

OVM

SXM

C16

FRCT

CMPT

ASM

各位定义如下。

(1)BRAF,块重复操作标志。

如果BRAF=1,表示正在执行块重复操作指令;

(2)CPL,直接寻址编辑方式标志位。

该标志为标志直接寻址方式选用何种指针。

如过CPL=1,表示选用堆栈指针(SP),若CPL=0,表示选用页指针(DP)。

(3)XF,XF引脚状态控制位。

控制XF通用外部I/O引脚输出状态。

(4)HM,CPU保持工作方式标志。

该位是当芯片响应HOLD信号时,CPU保持工作方式标志。

(5)INTM,中断方式控制位。

可开关所有可屏蔽中断。

(6)“0”位。

(7)OVM,溢出方式控制位。

(前面内容中讲过,ALU中)

(8)SXM,符号扩展方式控制位。

该位用于决定符号位是否扩展。

当SXM=1时,数据进入ALU之前进行符号位扩展。

(9)C16,双16b/双精度算术运算方式控制位。

(前面介绍过,CSSU中)

(10)FRCT,小数方式控制位。

(前面介绍过,乘法器中)

(11)CMPT,间接寻址辅助寄存器修正方式控制位。

当CMPT=1时,可通过修改ARP内容改变当前辅助寄存器AR1~AR7的值。

如果CMPT=0,则ARP必须清零,且不能被修正。

(12)ASM,累加器移位方式控制位。

(前面讲过,移位寄存器)

3.2总线结构

我们来看看,DSP芯片内部的数据是怎么传输的呢?

TMS320C54系列的芯片内部总线结构是一样的,均有8条总线,分别是4条地址总线、3条数据总线和一条程序总线,其中每条总线都是16位。

TMS320C54系列芯片之所以有如此优良的性能,正是由于这8条并行的总线结构。

TMS320C54系列芯片可以在一个机器周期内完成4次访问存储器的操作:

取1次指令、读2个操作数、写1个操作数。

1.程序总线PB和程序地址总线PAB

程序地址总线PAB用于传送程序存储器的地址,而程序总线PB则传送来自程序存储器的指令代码和操作数。

程序存储器总选中的内容是根据程序存储器中地址来选择实现的。

2.数据总线DB、CB和数据地址总线DAB、CAB

数据总线DB和CB是与读操作相关的数据总线,由于具有两条这样的总线,所以TMS320C54系列芯片可以实现在单周期内读取两个操作数,而数据地址总线DAB与CAB就是这两条总线对应的地址总线。

3.数据总线EB和数据地址总线EAB

数据总线EB是一个与写操作数相关的数据总线,任何一条写指令都是通过这条总线来传送数据的,EAB就是与之相对应的地址总线。

由于分离的读写总线,所以在一个周期内可以同时执行读写操作。

下面我们以一个表格的形式来展示一下个总总线的功能列表

读写方式

数据总线

程序总线

数据地址总线

CB

DB

EB

PB

PAB

CAB

DAB

EAB

程序写

程序读

单数据写

单数据读

双数据读

长数据(32b)读

★(hw)

★(lw)

★(hw)

★(lw)

数据读/数据写

双数据读/系数读

外设读

外设写

指令系统部分

1.算术指令:

①ABDST:

 

②ABS:

 

③ADD:

 

 

④ADDC:

 

⑤ADDM:

 

⑥ADDS:

 

⑦EXP:

 

FIRS:

LTD:

LMS:

MAC[R]

MACA[R]

MACD

MACP:

MACUS:

MAS[R]:

MASA[R]:

MAX:

MIN:

MPY[R]:

MPYA:

MPYU:

第6章

第3部分

在数字信号处理的过程当中,我们会大量的遇到比如相乘,相加,比较等各种各样的算数运算。

那么这样多的运算的对象是什么呢?

当然是各种各样的数据,也就是我们在DSP当中常常说到的”操作数”(运算当中的大部分”操作数”通常放在数据存储器中,而立即数放在程序存储器当中)。

所谓寻址,也就是我们拿到这样一些操作数进行运算。

寻址方法,当然就是我们(拿到)寻找所指定的参与运算的操作数的方法。

(程序的跳转或者重复操作也可称之为寻址,后面课程中会提到的)

在编写程序时,我们可以根据程序不同的要求采用不同的寻址方式,从而缩短程序运行的时间和提高代码执行效率。

今天我们讲授的内容就是TMS320C54X系列DSP芯片的寻址方式。

6.1数据寻址方式

TMS320C54X系列DSP器件具有下列基本的寻址方式:

(1)立即寻址,指令编码本身带有操作数。

(2)绝对寻址,指令编码中含有操作数地址。

(3)累加器寻址,累加器的内容是程序存储器中操作数的地址。

(4)直接寻址,指令编码中含有的7b地址与DP或SP一起合成数据存储器中操作数的实际地址。

(5)间接寻址,同过辅助寄存器寻址。

(6)存储器映像寄存器寻址,这种寻址方式不影响当前数据页面指针DP和当前堆栈指针SP的值。

6.1.1立即寻址

什么是立即寻址呢?

是指指令里包含了立即操作数。

指令当中的立即数编码可以是一个字,也可以是两个字长(根据立即数的长短而定)。

(1)长度为3b或5b、8b、9b的立即数我们称之为短立即数。

(2)长度为16b的长立即数。

我们来看一些立即数不同时,用立即数寻址的例子:

LD#2,ARP;ARP=2,ARP(ST0:

辅助寄存器指针,15~13)

LD#3,ASM;ASM=3,ASM(ST1:

累加器移位寄存器,4~0)

LD#50,DP;DP=50,DP(ST0:

数据存储页面指针,8~0)

ADD#0ffh,A;将0ffh加给AccA

上面这些都是短立即数寻址,我们以最后一个位例,来看看他的编码方式是怎样的?

由上图我们可以很轻松的看出,对于短立即数寻址,译成机器码的时候只占两个字节,操作码一个字节,短立即数一个字节。

我们再来看这样两条指令:

STM#FFFFH,IMR;IMR=FFFFH,开所有中断(当然,需要ST1中的INTM=0)

ADD#1234h,A;将#1234h加给AccA

以上两个立即数都是16b长度的立即数,那么它们就属于场立即数寻址了。

我们以第二个指令来看看它的编码方式,看和短立即数寻址有什么不同?

由上图我们可以看出,它的编码总共占了两个字(4个字节),其中操作码和操作数各占了一个字。

很明显,长立即数寻址占用的存储空间要大。

立即数寻址由此,可分为长立即数寻址和短立即数寻址两种方式。

6.1.2绝对寻址

绝对寻址,就是在指令中包含有所需寻址的存储单元的16位地址。

在绝对寻址指令语法中,存储单元的16位地址,可以用其所在单元的地址标号或者16位符号常数来表示。

所以编码长度总是16b,占两个字以上。

有以下4类:

1.数据存储器地址(dmad)寻址:

MVDKSmem,dmaddata(dmad)=Smem

MVDMdmad,MMR

MVKDdmad,Smem

MVMDMMR,dmad

2.程序存储器地址(pmad)寻址:

FIRSXmem,Ymem,pmad

MACDSmem,pmad,src

MACPSmem,pmad,src

MVPDpmad,Smem

3.端口地址(PA)寻址

PORTRPA,Smem

PORTWSmem,PA

4.*(lk)寻址适用于支持单数据存储器操作数的指令

例:

MVKDSAMPLE,*AR5;将数据存储器SAMPLE地址单元中的数据传送到又AR5寄存器所指向的存储器单元中。

SAMPLE为一符号常数,代表一个数据存储单元的地址。

MVPDTABLE,*AR7-;将程序存储器标号为TABLE地址单元中的数据传送到由AR7寄存器所指向的数据存储器单元中。

TABLE代表一个程序存储单元的地址。

PORTRFIFO,*AR5;从FIFO端口读入一个数据,将其存放到由AR5寄存器所指向的数据存储器单元中。

FIFO是一个I/O端口地址标号。

LD*(BUFFER)A;将BUFFER符号所指的数据存储器单元中的数据传送到累加器A。

BUFFER是一个16位符号常数。

6.1.3累加器寻址

累加器寻址,就是利用累加器的数值作为地址来读写程序存储器。

有两条指令用的是累加器寻址方式:

READASmem;以累加器A中的数位地址,从程序存储器中读入一个数,并传送到由Smem所指定的数据存储器单元之中。

WRITASmem;将Smem所指定的数据存储单元中的一个数,传送到累加器A所指定的程序存储器单元中。

6.1.4直接寻址

在直接寻址中,指令包含了有数据存储器地址(dma)的低7b,这7b作为地址偏移量,结合数据页指针DP或堆栈指针SP形成16b的数据存储器地址。

使用这种寻址,我们可以在不修改DP和SP的情况下,对128个数据寻址。

在直接寻址方式中,指令中包含了数据存储器的低7b地址:

ST1中的编译模式位CPL用于选择DP或SP来产生数据存储器的地址。

(1)当CPL=0时,7b地址与DP中的9b字段形成16b的数据存储器地址。

Ps:

为什么我们将DP叫做页面指针?

应为DP占高9位地址,也就是将存储器逻辑的分为了512页,每页有128个地址单元。

(2)当CPL=1时,7b地址作为一个正数,与SP相加形成16b的数据存储器地址。

直接寻址的语法是利用一个“@”(在变量的前面加上),或者一个数来设定偏移地址的值。

直接寻址是一个单周期执行指令,但要注意数据所在的页面指针。

6.1.5间接寻址

在间接寻址中,64K数据空间任意单元都可通过一个辅助寄存器中的16-bit地址进行访问。

C54x有8个16-bit辅助寄存器(AR0-AR7)。

两个辅助寄存器算术单元(ARAU0和ARAU1),根据辅助寄存器的内容进行操作,完成无符号的16-bit算术运算。

间接寻址很灵活,不仅能从存储器中读或写一个单16-bit数据操作数,而且能在一条指令中访问两个数据存储器单元(即从两个独立的存储器单元读数据,或读一个存储器单元同时写另一个存储器单元,或读写两个连续的存储器单元)。

单操作数间接寻址方框图:

单操作数间接寻址类型:

*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本身不被修改。

*+ARx(lk):

在寻址之前,把一个带符号的16-bit的长偏移(lk)加到ARx中,然后用新的ARx的值作为数据存储器的地址。

*+ARx(lk)%:

在寻址之前,把一个带符号的16-bit的长偏移以循环寻址的方式加到ARx中,然后再用新的ARx的值作为数据存储器的地址。

 

编程举例:

间接寻址编程:

.mmregs

.bssx,4,1

a.word1,2,3,4

.sect“program”

STM#a,AR1

STM#x,AR2

LD#0,A

LD*AR1+,T

MAC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1