第7章 DSP 复习资料

第7章 DSP 复习资料
第7章 DSP 复习资料

1.美国德州仪器(TI)公司生产的TMS320系列芯片主推C2000系列,C5000系列,C6000系列,试分析这三种系列芯片的典型应用领域。

答:C2000系列面向工业产品控制,低价位;

C5000系列面向通信类应用,性能好,低功耗,有利于便携式通信产品及其他仪器的推出;

C6000系列面向高档次应用,如多媒体,图像处理及其他超高速处理场合。

2.数字信号处理的硬件实现可分为单片机实现和DSP实现,试对比分析两者各自主要的优点,缺点。

答:单片机:

优点:接口性能好;

缺点:总线结构是冯·诺依曼结构,系统复杂,特别是乘法运算速度慢;

DSP:

优点:哈佛总线结构,内部具有硬件乘法器等可以实现某些特定功能,具有很高的并行特性,专门的指令系统;

缺点:灵活性差。

3.试分析冯·诺依曼结构与哈佛总线结构各自的特点。

答:冯·诺依曼结构:

程序存储和数据存储共用一个存储空间。编址依靠指令计数器提供的地址来区分是指向数据还是地址,只能串行执行,速度慢,数据吞吐量小;

哈佛总线结构:

程序与数据存储空间分开,各有独立的地址总线和数据总线,取指和读数可以同时进行,从而提高速度,允许直接在程序和数据之间进行信号传递,具有高速运算能力。

4.DSP区别于通用微处理器的重要标志?

答:硬件乘法器。

5.简述定点DSP和浮点DSP的区别。

答:在定点DSP中,小数点的位置在一个数据字中是固定的。而在浮点格式中,一个数据字被分成两部分,分别表示指数和底数,因此它所表示的数据的小数点随着指数的变化而浮动。浮点格式所能表示的数据范围要比定点格式大得多,在大多数应用中都不需要特别考虑运算的溢出问题。

6. DSP中的地址产生单元-ARAU。

7.名词翻译:

ARAU:辅助寄存器算术单元 Auxiliary Registers:辅助寄存器

CALU:中央算术逻辑单元 Barrel shifter:桶型移位器

Multiplier:硬件乘法器 Accumulator:累加器

CSSU:比较、选择和存储单元

8.TMS320C2000系列的内部总线结构?

答:6条:其中是3条地址线,PAB程序地址总线,DRAB数据读地址总线,DWAB数据写地址总线;其他3条为PRDB程序读总线,DRDB数据读总线,DWEB数据写总线。

9.TMS320C3x系列(32bit的浮点DSP)的内部总线结构?

答:7条,其他和TMS320C2000系列一样,多了一条DRAB数据读地址总线。

10.TMS320C6000系列的CPU具有8个独立功能单元:

L1,L2:作算术比较运算;

S1,S2:作程序控制,逻辑运算;

D1,D2:存储;

M1,M2:乘法。

11.TMS320C54x系列(16位定点DSP)特点:

8条总线:

其中:

4条地址总线(PAB,CAB,DAB和EAB),3条数据存储器总线(CB,DB和EB),1条程序存储器总线(PB)。

4条数据地址总线(PAB,CAB,DAB和EAB)传送执行指令所需要的地址。

CB和DB总线传送从数据存储器读出的操作数。EB总线传送写入到存储器中的数据。

程序总线(PB)传送从程序存储器来的指令代码和立即数。

12.TMS320C54x系列硬件结构:

多总线结构,三组16-bit数据总线和一组程序总线

40-bit算术逻辑单元(ALU),一个40-bit的桶形移位器

两个独立的40-bit累加器(A和B最大的差别:A的高位段AH(31-16)可以做为乘法器的输入)

17x17-bit并行乘法器,连接一个40-bit的专用加法器。可用来进行非流水单周期乘/加(MAC)运算

比较、选择和存储单元(CSSU)用于Viterbi运算器的加/比较选择

指数编码器在一个周期里计算一个40-bit累加器值的指数值

两个地址发生器中有八个辅助寄存器和两个辅助寄存器算术单元(ARAU0,ARAU1)

TMS320C54x系列软件结构:

寻址方式:

立即数寻址:指令中嵌有一个固定的数

绝对地址寻址:指令中有一个固定的地址

累加器寻址:按累加器内的地址去访问程序存储器中的一个单元

直接寻址:指令中的7bits是一个数据页内的偏移地址,而所在的数据页由数据页指针DP 或SP决定。该偏移加上DP和SP的值决定了在数据存储器中的实际地址。

间接寻址:按照辅助寄存器中的地址访问存储器。

存储器映射寄存器寻址:修改存储器映射寄存器中的值,而不影响当前DP或SP的值。

堆栈寻址:把数据压入和弹出系统堆栈。

LD #1234,A……………立即数寻址

MVPD pmad, *AR7………绝对地址寻址或间接寻址

FIRS *AR2+, *AR3+, pmad………绝对地址寻址或间接寻址

READA *AR2+…………累加器寻址或间接寻址

WRIT A *AR2+…………累加器寻址或间接寻址

LD #4,DP…………直接寻址

STM #12,AR4…………MM R寻址或间接寻址

间接寻址:*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的值作为数据存储器的地址。

用定点DSP中数据表示方法表示出0.5和-0.5 ,以及57和-57。0.5:4000H 0100 0000 0000 0000 H

-0.5:1100 0000 0000 0000 H

-0.5的反码:1011 1111 1111 1111 H

-0.5的补码:1100 0000 0000 0000 H ,即C000H

57:0000 0000 0011 1001 ,即0039H

-57:

原码:1000 0000 0011 1001反码:1111 1111 1100 0110 补码:1111 1111 1100 0111 即FFC7H

用浮点DSP中数据表示方法表示出-29.625.

可以用二进制表示为-11101.101B,

用科学计数法表示为:

-1.1101101*24,其指数为127+4=131,

化为二进制表示为:1000 0011 B,

故此数的浮点格式表示为 :

1100 0001 1110 11010000 0000 0000 0000,

转换成16进制表示为:0xC1ED0000 H。

用浮点DSP中数据表示方法表示出12.0 。

二进制表示为:1100 B ,

科学计数:1.100×23 ,

指数:127+3=130 ,二进制为1000 0010 B ,

则浮点格式:0100 0001 01000000 0000 0000 0000 0000十六进制表示为:0x41400000 H

用浮点DSP中数据表示方法表示出37.25。

二进制表示为:100101.01 B ,

科学计数:1.0010101×25 ,

指数:127+5=132 ,二进制为1000 0100 B ,

则浮点格式:0100 0010 0001 0101 0000 0000 0000 0000十六进制表示为:0x42150000 H

TMS320C54x的指令集

Eg:

ADD *AR3+ , A

Before instruction After instruction A 0F00 A1400

AR3 0100 AR3 0101

DATA MEMORY:

0100H 0500 0100H 0500

计算A的值:

A :0000 1111 0000 0000

+0000 0101 0000 0000

0001 0100 0000 0000

1 4 0 0

Eg:

ADD A , -8 , B

Before instruction After instruction

A 1200 A 1200

B 1800 B 1812

计算B的值:1812

Eg:

ADD #0123BH , *AR4+

Before instruction After instruction AR4 0100 AR4 0101

DATA MEMORY:

0100H 0004 0100H 0123F

计算AR4中0100H此时指向的值:0123F

Eg:

MPY *AR2-, *AR4+0 , B

Before instruction After instruction AR0 0002 AR0 0002

AR2 01FF AR2 01FE

AR4 0300 AR4 0302

T 011C T 0500 DATA MEMORY:

01FFH 0500 01FFH 0500

0300H 0004 0300H 0004

Eg:

MPYA *AR2

Before instruction After instruction T 1234 T 5678 AR2 0200 AR2 0200 DATA MEMORY:

0200H 5678 0200H 5678 指令后T中的值:5678

Eg:

MAC *AR5+ , *AR6+ , A , B

Before instruction After instruction A 1000 A1000 AR5 0100 AR0 0101

AR6 0200 AR6 0201

T 0008 T 5678 DATA MEMORY:

0100H 5678 0100H 5678 0200H 1234 0200H 1234

Eg:

ABS A , B

Before instruction After instruction

A FFC

B A FFCB

B FC18 B 0035

A的值是—53 ,B等于A的绝对值,指令之后是+53 ,

即00110101 等于0035

Eg:

CMPL A , B

Before instruction After instruction

A FCBA A FCBA

B FC18 B 0345

B等于A取反码,指令之后是0345

Eg:

DELAY *AR3

Before instruction After instruction AR3 0100 AR3 0100 DATA MEMORY:

0100H 6C6C 0100H 6C6C 0101H 1234 0101H 6C6C

EG:

AND *AR3+ , A

Before instruction After instruction A 00FF 1200 A 0000 1000 AR3 0100 AR3 0101

DATA MEMORY:

0100H 1500 0100H 1500

计算A的值:

00FF 1 0010 0 0

AND 0000 1 0101 0 0

0000 1 0000 0 0

EG:

OR *AR3+ , A

Before instruction After instruction A 00FF 1200 A 00FF 1700 AR3 0100 AR3 0101

DATA MEMORY:

0100H 1500 0100H 1500

计算A的值:

00FF 1 0010 0 0

OR 0000 1 0101 0 0

00FF 1 0111 0 0

EG:

XOR *AR3+ , A

Before instruction After instruction A 00FF 1200 A 00FF 0700 AR3 0100 AR3 0101

DATA MEMORY:

0100H 1500 0100H 1500

计算A的值:

00FF 1 0010 0 0

XOR 0000 1 0101 0 0

00FF 0 0111 0 0

EG:

XORM 0404H , *AR4—

Before instruction After instruction AR4 0100 AR4 00FF

DATA MEMORY:

0100H 4444 0100H 4040

计算AR4的值:

0000 0100 0000 0100

XOR 0100 0100 0100 0100

0100 0000 0100 0000 (4040)

EG:

LD #248 , B

Before instruction After instruction

B 0000 B 00F8

十进制―――二进制―――十六进制

248等于(0 0 1111 1000 B),又等于00F8 H

EG:

STH B , -8 , *AR7-

Before instruction After instruction

B FF 8421 1234 B FF8421 1234

AR7 0321 AR7 0320

DATA MEMORY:

0321H ABCD 0321H FF84

加法指令应用举例:

ld temp1,a ;将变量temp1装入寄存器A

add temp2,a ;将变量temp2与寄存器A相加 , 结果放入A 中

stl a,temp3 ;将结果(低16位)存入变量temp3中

ld #0,dp ; 设置数据页指针ld 60h,16,a ; 将60H 的内容装如A的高16位

adds 61h, a ; 将61H的内容加到A的低16位

减法指令使用举例:stm #60h,ar3 ;将变量立即数60h装入ar3

stm #61h,ar2 ;将变量立即数61h装入ar2

sub *ar2, *ar3,b ;将变量temp3左移16位,同时变量temp2也左移16位,然后相减(变量temp2—变量temp3),结果放入寄存器B(高16位)中

sth b, temp4;将相减的结果(高16位)存入变量temp4

利用SUBC实现定点除法

ld temp1,B;将被除数temp1装入B寄存器的低16位

rpt #15;重复SUBC指令16次subc temp2, B;使用SUBC指令完成除法stl B,temp3;将商(B寄存器的低16位)存入变量temp3

sth B,temp4;将余数(B寄存器的高16位)存入变量temp4

注:实际上是完成整数除法

若用Subc temp2, B 完成10除以3 ,请写出指令内部运行步骤。

被除数:源B 0 0 0 0 0 0 0000 0000 0000 1010

除数:temp2 0 0 0 0 0 0 0000 0000 0000 0011

开始:

temp2中的值左移15位:

0 0 0 0 0 0001 1000 0000 0000 0000

源B-temp2< 0 , 则源B开始左移,需要左移14位:(完成第14次运行)

0 0 0 0 0 0010 1000 0000 0000 0000

此时源B-temp2>0 ,则减出值<<1 + 1 :(完成第15次运行)

减出值:0 0 0 0 0 0001 0000 0000 0000 0000

左移一位后加一:0 0 0 0 0 0010 0000 0000 0000 0001

此时源B-temp2>0 ,则减出值<<1 + 1 :(完成第16次运行)

减出值:0 0 0 0 0 0000 1000 0000 0000 0001

左移一位后加一:0 0 0 0 0 0001 0000 0000 0000 0011

结束。

结果:B的低段位放置商3 ,B的高段位放置余数1 。

若用Subc temp2, B 完成13除以2 ,请写出指令内部运行步骤。

被除数:源B 0 0 0 0 0 0 0000 0000 0000 1101

除数:temp2 0 0 0 0 0 0 0000 0000 0000 0010

开始:

temp2中的值左移15位:0 0 0 0 0 0001 0000 0000 0000 0000

源B-temp2< 0 , 则源B开始左移,需要左移13位:(完成第13次运行)

0 0 0 0 0 0001 1010 0000 0000 0000

此时源B-temp2>0 ,则减出值<<1 + 1 :(完成第14次运行)

减出值:0 0 0 0 0 0000 1010 0000 0000 0000

左移一位后加一:0 0 0 0 0 0001 0100 0000 0000 0001

此时源B-temp2>0 ,则减出值<<1 + 1 :(完成第15次运行)

减出值:0 0 0 0 0 0000 0100 0000 0000 0001

左移一位后加一:0 0 0 0 0 0000 1000 0000 0000 0011

此时源B-temp2<0 ,则此时的值<<1 :(完成第16次运行)

左移一位:0 0 0 0 0 0001 0000 0000 0000 0110

结束。

结果:B的低段位放置商6 ,B的高段位放置余数1 。

行步骤。

被除数:源B 0 0 0 0 0 0 0000 0000 0000 1111

除数:temp2 0 0 0 0 0 0 0000 0000 0000 0011

开始:

temp2中的值左移15位:0 0 0 0 0 0001 1000 0000 0000 0000

源B-temp2< 0 , 则源B开始左移,需要左移13位:(完成第13次运行)

0 0 0 0 0 0001 1110 0000 0000 0000

此时源B-temp2>0 ,则减出值<<1 + 1 :(完成第14次运行)

减出值:0 0 0 0 0 0000 0110 0000 0000 0000

左移一位后加一:0 0 0 0 0 0000 1100 0000 0000 0001

此时源B-temp2<0 ,则此时的值<<1:(完成第15次运行)

左移一位:0 0 0 0 0 0001 1000 0000 0000 0010

此时源B-temp2>0 ,则减出值<<1 + 1:(完成第16次运行)

减出值:0 0 0 0 0 0000 0000 0000 0000 0010

左移一位后加一:0 0 0 0 0 0000 0000 0000 0000 0101

结束。

结果:B的低段位放置商5 ,B的高段位放置余数0 。

部运行步骤。

被除数:源B 0 0 0 0 0 0 0010 0000 0000 0000

除数:temp2 0 0 0 0 0 0 0100 0000 0000 0000

开始:

源B 中的值左移16位: 0 0 0010 0000 0000 00000 0 0 0 temp2中的值左移15位:0 0 0010 0000 0000 00000 0 0 0

源B-temp2= 0 , 则减出值<<1 + 1 :(完成第1次运行)

0 0 0 0 0 0000 0000 0000 0000 0001

此时源B-temp2<0 ,则此时的值<<1:(要左移15次, 完成第16次运行)移出值:0 0 0 0 0 0000 1000 0000 0000 0000

有指令: stl B, -1, quot_f

此时源B右移一位:0 0 0 0 0 0000 0100 0000 0000 0000

结束。

结果:B的低段位放置商0.5 ,B的高段位放置余数0 。

定点整数乘法举例:rsbx FRCT;清FRCT标志,准备整数乘ld temp1,T;将变量temp1装入T寄存器

mpy temp2,a ;完成temp2*temp1,结果放入A寄存器(32位)sth a , temp3 ;a的高16位装入变量temp3 temp4 ;a的低16位装入变量temp4

定点小数乘法举例ssbx FRCT ;FRCT=1,准备小数乘法

ld temp1,16,a ;将变量temp1装入寄存器A的高16位mpya temp2 ;完成temp2乘寄存器A的高16位,结果在B中,同时将temp2装入T寄存器

sth b,temp3 ;将乘积结果的高16位存入变量temp3

定点小数除法举例

ld temp1,T ;被除数装入T寄存器

mpy temp2,A ;除数与被除数相乘,存A

ld temp2,B ;除数temp2装入B低16位

abs B ;求绝对值

stl B,temp2 ;B低16位存回temp2

ld temp1,16,B ;被除数装入B高16位

abs B ;求绝对值

rpt #15 ;重复SUBC指令16次

subc temp2,b ;完成除法运算and #0ffffh,B ;B高16位清0,仅保

留商

bcd div_end,agt ;延时跳转,先执行下面两条指令,然后判断A,若A>0,则跳转到标号div_end,结束除法运算

stl B,-1,temp3 ;商右移一位存temp3

xor B ;若商为负,将B清0

sub temp3,B ;将商反号

stl B,temp3 ;存回变量temp3中

div_end:

计算16阶的FIR滤波器输出256个点

.sect “fir-pro g”

STM #255, BRC ; Repeat 256 times

RPTBD fir_filter_loop

STM #16, BK ; FIR circular buffer size

LD *AR7+, A ; load the input value

STL A, *AR4+% ; replace oldest sample with

; newest sample

RPTZ A, #15

MAC *AR4+0%, *AR3+0%, A ; filtering

STH A, *AR5+ ; replace the oldest buffer value

fir_filter_loop

Link的cmd文件的作用是什么?

Link的cmd文件用于DSP数字信号处理代码的定位。由于DSP的编译器的编译结果是未定位的,DSP没有操作系统来定位执行代码,每个客户设计的DSP系统的配置也不尽相同,因此需要用户自己定义代码的安装位置。以C5000为例,基本格式为:

-o sample.out

-m sample.map

-stack 100

sample.obj meminit.obj

-l rts.lib

MEMORY {

PAGE 0: VECT: origin = 0xff80, length 0x80

PAGE 0: PROG: origin = 0x2000, length 0x400

PAGE 1: DA TA: origin = 0x800, length 0x400

}

SECTIONS {

.vectors : {} >PROG PAGE 0

.text : {} >PROG PAGE 0

.data : {} >PROG PAGE 0

相关主题
相关文档
最新文档