DSP试题集.docx

上传人:b****6 文档编号:8775979 上传时间:2023-02-01 格式:DOCX 页数:66 大小:262.99KB
下载 相关 举报
DSP试题集.docx_第1页
第1页 / 共66页
DSP试题集.docx_第2页
第2页 / 共66页
DSP试题集.docx_第3页
第3页 / 共66页
DSP试题集.docx_第4页
第4页 / 共66页
DSP试题集.docx_第5页
第5页 / 共66页
点击查看更多>>
下载资源
资源描述

DSP试题集.docx

《DSP试题集.docx》由会员分享,可在线阅读,更多相关《DSP试题集.docx(66页珍藏版)》请在冰豆网上搜索。

DSP试题集.docx

DSP试题集

一、TI公司DSP分类及代表产品简介

TI的DSP经过完善的测试出厂时,都是以TMS320为前缀。

在众多款型DSP中,TI把市场销量好和前景看好的DSP归为三大系列而大力推广,TI也称之为三个平台。

TMS320C6000平台,包含定点C62x和C64x以及浮点C67x。

其追求的是至高性能,最近新推出的芯片速度高达1GHZ,适合宽带网络、图像、影像、雷达等处理应用。

TMS320C5000平台,包含代码兼容的定点C54x和C55x。

其提供性能、外围设备、小型封装和电源效率的优化组合,适合便携式上网、语音处理及对功耗有严格要求的地方。

DSP的传统设计往往是采取主从式结构:

在一块电路板上,DSP做从机,负责数字信号处理运算;外加一块嵌入式微处理器做主机,来完成输入、控制、显示等其他功能。

为此,TI专门推出了一款双核处理器OMAP,包含有一个ARM和一个C5000系列DSP,OMAP处理器把主从式设计在芯片级上合二为一,一个典型的应用实例为诺基亚手机。

TMS320C2000平台,包含16位C24xx和32位C28xx的定点DSP。

C24xx系列市场销量很好,而对C28xx系列,TI认为很有市场潜力而大力推广。

C2000针对控制领域做了优化配置,集成了了众多的外设,适合逆变器、马达、机器人、数控机床、电力等应用领域。

另外,OMAP系列:

OMAP处理器集成ARM的命令及控制功能,另外还提供DSP的低功耗,实时信号处理能力,最适合移动上网设备和多媒体家电。

其他系列的DSP曾经有过风光,但现在都非TI主推产品了,除了C3X系列外,其他基本处于淘汰阶段,如:

C3X的浮点系列:

C30,C31,C32C2X和C5X系列:

C20,C25,C50,每个系列的DSP都有其主要应用领域。

二、简述实时信号处理的含义。

要求在限定的时间内将采集的数据在现场处理完成并得到一定的结果,即信号处理的时间要小于或者等于下一批数据输入时间,有时甚至要求在特定的时间、地点来完成信号处理。

三、数字信号处理中最典型的运算有哪些?

离散傅里叶变换(DFT)和卷积是信号处理中两个最基本也是最常用的运算。

核心算法是构成多数数字信号处理系统的基本模块,包括:

FFT,向量加,向量点积,滤波器,控制(转移、压栈、出栈、位操作)

四、C6000系列DSP为什么适合与数字信号处理的需要?

从DSP的cpu结构、总线结构、存储器结构、专用功能单元、指令系统等方面阐述。

TMS320C6000产品是美国TI公司于1997年推出的dsp芯片,该DSP芯片定点、浮点兼容,其中,定点系列是TMS320C62xx系列,浮点系列是TMS320C67xx系列。

CPU结构:

1.定点/浮点系列兼容DSP2.具有VelociTITM先进VLIW结构内核3.具有类似RISC的指令集4.片内集成大容量SRAM,最大可达8bit6.内置高效率协处理器7.片内提供多重集成外设(不同芯片的资源不同)等多种功能结构,满足数字信号处理的精度及效率需要,另外其CPU用了哈佛结构,程序总线和数据总线分开,取指令与执行指令可并行,时效性提高。

总线:

cpu内部程序总线和数据总线分开,取指令与执行指令可并行。

但偏外的存储器和总线都不分开。

C6000系列DSP才用了新的VILW结构,片内提供8个独立的运算单元,256位的程序总线,2套32位的数据总线和1套32位的DMA专用总线。

灵活的总线结构大大缓解了数据瓶颈对系统性能的限制。

存储区:

C6000系统dsp内部集成有1-8bit的程序RAM和数据RAM,对于有些片种,这些存储器还可以配置为程序Cache或者数据Cache来使用。

专用功能单元:

C6000片内有8个并行的处理单元,分为相同的两组,包括2个乘法器和6个ALU。

这8个功能单元最多可以在1个周期内同时执行8条32位指令,芯片最高时钟频率为300MHz(67xx系列),且内部8个处理单元并行运行时,其最大处理能力可达到1600MIPS。

郭功能单元的并且操作使得DSO在相同时间内能够完成更多的操作,提高了程序的执行速度。

指令系统:

DSP的体系结构采用超长指令字(vliw)结构,单指令字长为32位,指令包里有8条指令,总字长达到256位。

执行指令的功能单元已经在编译时分配好,程序运行时通过专门的指令分配模块,可以将每个256为的指令包同时分配到8个处理单元,并有8个单元同时运行。

综上看出,C6000DSP适合数字信号处理的需要。

五、简述C6000系列定点DSP的指令流水线结构。

指令流水线的工作方式,即一条指令的执行分为若干个阶段完成,就像经过工厂里的生产流水线上的一道道工序一样,而同时,在流水线的其它阶段又分别有其它的指令在顺序地执行着。

C6000中指令均按照取指(Fetch)译码(Decode)和执行(Execute)3个流水线运行,每一级又包含几个节拍,如下图所示C6000系列定点DSP指令流水线结构:

6、简述C6000系列DSPCPU有那几个功能单元,每个功能单元的作用是什么?

4个主要单元,指令缓冲单元I,程序流程单元P,地址流程单元A,数据计算单元D,

指令缓冲单元I由指令队列和指令译码器构成,接受程序指令代码,放到IBQ中,指令译码器从指令缓冲队列中取指令进行译码,译码后数据分别送到其他三个单元中处理。

P单元由程序地址产生逻辑电路和一组寄存器组构成,主要功能产生所有I单元读取指令所需的程序地址、控制指令读取顺序。

A单元:

功能产生读写数据空间的地址;D单元:

包括了CPU的主要计算部件,完成高效的计算功能。

CPU结构分三个机构:

程序读入及指令分配、译码机构;程序执行机构:

两个数据通路,8个功能单元等,其中.L1、.L2、.S1、.S2是主要的算术逻辑单元,.M1.M2是乘法器,主要完成乘法运算,.D1.D2是数据寻址单元,唯一能产生地址的功能单元。

指令测试、仿真端口及控制逻辑。

七、何谓线性汇编?

并行汇编?

线性汇编语言主要用途是编写需要优化的算法,其代码不需要给出汇编代码必须指出的所有信息,可对信息选择,也可由汇编优化器确定。

其文件使用“.sa”,扩展名仅对指定的代码段进行优化,指定代码段外的代码被拷贝为输出“.asm”文件,线性汇编过程可以:

传递参数,返回结果,使用符号变量,不考虑流水线问题。

并行汇编:

它是直接采用DSP中各个功能单元作为操作对象,根据TI规定的汇编语言书写规范要求来完成程序的编写,在程序编写时要充分考虑寄存器的使用、各个指令的时延以及指令间的并行关系。

根据尽量使软件流水满负荷执行的规则,合理的书写并行汇编指令,能够极大的提高程序执行的速度,充分发挥出DSP的优势。

8、何谓超标量处理器?

何谓超流水处理器?

何谓超标量超流水处理器?

(理解)

超标量是通过内置多条流水线来同时执行多个处理器,其实质是以空间换取时间。

超流水是通过细化流水、提高主频,使得在一个机器周期内完成一个甚至多个操作,其实质是以时间换取空间。

超标量超流水处理器则是指在超标量和超流水两种技术间,找到一个最佳结合点,这样既能解决操作的时间问题,又能满足处理器对空间的要求。

9、何谓软件流水优化?

软件流水优化有什么专用?

DSP适合对大量数据做相同的运算,相同的工作放在一起完成,形成循环,便于软件流水。

软件流水:

是一种重要的指令调度技术,它通过编排循环指令,重叠地执行不同的循环体来提高ILP。

而软件流水优化正是利用DSP处理机指令级的并行性,满足各种资源限制,实现资源合理分配、充分使用算法到DSP结构的映射,使单周期内尽可能多的功能单元在执行指令。

专用:

产生高性能循环代码,执行并行指令,填充延迟间隙,功能单元使用最大化,由开发工具产生,由编译器选项-o2或o3引入,汇编优化器/C优化器产生,循环中工作太多,导致资源不够(如:

寄存器不够分配),则可以拆分循环或展开循环。

消除冗余循环。

充分利用指令局部性和数据局部性的特点,推测执行。

十、数字信号处理程序优化分为哪几个层次?

优化的步骤是什么?

每个步骤有哪些优化措施?

(注:

不知道题目问的步骤是指优化的总步骤,还是指每个层次优化的步骤,故答案不全面)

三个层次:

1.C语言级的优化2.线性汇编优化3.手工汇编优化

(优化步骤:

1、用C语言实现算法并验证写2、C6x线性汇编代码3、画相关图4、分配功能单元和寄存器5、建编排表6、将编排表转换为C6x汇编代码)

1.C语言级的优化:

使用编译选项、软件流水、内联函数和循环展开等方法来对代码进行优化,以提高代码执行速度,并减小代码尺寸。

2.线性汇编优化:

写线性汇编程序,然后用汇编优化器进行优化,生成高性能的代码。

使用C6000的剖析工具(ProfilingTools)可以找到代码中最耗费时间的部分,就是这部分需要用线性汇编重写。

需要知道:

汇编优化器伪指令、影响汇编优化器行为的选项、TMS320C6000指令、线性汇编源语句语法、指定寄存器或寄存器组、指定功能单元、源代码注释等。

3.手工汇编优化:

编写C程序并不经过任何优化,使用-On优化选项,需要优化的代码转换为线性汇编,手工汇编并优化。

优化措施:

并行指令,填充延迟间隙,展开循环,存取带宽优化(使用LDW/LDDW),软件流水等。

十、CMD文件的作用是什么?

CMD是连接命令文件,包含了DSP和目标板的存储器空间的定义以及代码段、数据段是如何分配到这些存储器空间的。

是32位的dos命令提示符,有中文提示;而command是16位的dos命令提示符,全是英文.区别就是:

一个是中文帮助,一个是英文帮助,功能没有多大区别.

十一、以实验一为例简述上机实验步骤。

实验步骤

1、开机:

进入WinXP系统,双击桌面上CCS3.3图标,选择open——DM6437LittleEndianSimulator,进入DSP软件集成开发环境,或者选择open——c6437510plus进入DSP硬件集成开发环境(使用实验箱做实验,先连接好实验箱及仿真器等方可开机)。

2、编辑文件:

选择File-New—SourceFile菜单,编辑好C程序文件(*.c)、汇编程序文件(*.asm)、头文件(*.asm)及链接命令文件(*.cmd),并保存在D盘DSPLAB\LAB1文件夹中。

3、创建工程项目:

选择Project-New,出现—对话框,在project栏(第一行)填写项目名称,并选定项目的位置(D:

\DSPLAB\LAB1),然后单击“完成”按钮,这样就新建了一个工程项目,该项目用来管理各种文件,便于编译、调试。

注意:

路径、文件夹、文件名中不能含有汉字,且第一个字母不能是数字。

4、添加文件:

将编辑好的三个文件添加到刚建好的工程项目中,选择Project-AddFilestoProject,出现一个对话框,选择文件夹(D:

\DSPLAB\LAB1)并选中C文件、汇编程序文件、头文件、cmd文件,单击“打开”按钮就将这四个文件添加到该工程中了。

5、编译汇编程序:

选择Project—CompileFile,分别编译主程序及头文件,修改程序中的错误,再编译,直到无错误出现。

编译后的文件为OBJ文件。

6、链接:

选择Project—Build或RebuildAll,链接各OBJ文件,若有错误出现应修改错误(错误应在cmd文件中),再链接,直到无错误出现。

链接生成可执行的out文件。

7、下载out文件:

选择File—LoadProgram,在debuge文件夹中选中out文件(文件名与工程项目同名),单击“打开”按钮,这样out文件就下载到DSP中了。

调试:

选择debuge—StepInto单步执行代码或者选择debuge—Run连续运行代码(debuge—Halt停止运行)。

单步运行或运行结束后选择View-Memory和View-Registers-CPURegisters/PeripheralRegs查看存储器和寄存器中的数据。

如果最后的结果有错误,则应查找原因修改程序并重复步骤5~步骤8,直到结果正确为止。

十二、编写矢量点积的C程序、线性汇编程序(画出相关图)、并行汇编程序、软件流水程序。

1、C语言代码

intDSP_dotprodc(constshort*m,constshort*n,intcount)

{inti;

intprod,sum=0;

#ifndefNOASSUME

_nassert((int)m%8==0);/*Double-wordaligned*/

_nassert((int)n%8==0);/*Double-wordaligned*/

_nassert((int)m%16!

=(int)n%16);/*Indifferentbanks*/

#pragmaMUST_ITERATE(4,,4);/*count>=4,multof4*/

#endif

for(i=0;i

{

prod=m[i]*n[i];

sum+=prod;

}

returnsum;

}

2线性汇编代码

.text

.global_DSP_dotprodsa

_DSP_dotprodsa:

.cprocA_m,B_n,A_count

.no_mdep

.regA_reg1:

A_reg0,B_reg1:

B_reg0

.regA_prod,B_prod,A_sum,B_sum,A_i

ZEROA_sum

ZEROB_sum

SHRUA_count,2,A_i

SUBA_i,2,A_i

.mptrA_m,x+0,8

.mptrB_n,x+8,8

loop:

.trip8

LDDW.1*A_m++,A_reg1:

A_reg0

LDDW.2*B_n++,B_reg1:

B_reg0

DOTP2A_reg1,B_reg1,A_prod

DOTP2B_reg0,A_reg0,B_prod

ADDA_sum,A_prod,A_sum

ADDB_sum,B_prod,B_sum

BDECloop,A_i

ADDA_sum,B_sum,A_sum

.returnA_sum

.endproc

.end

3、并行汇编代码

.sect".text:

_dotprod"

.global_DSP_dotprod64

_DSP_dotprod64:

*=====================SYMBOLICREGISTERASSIGNMENTS=====================*

.asgA4,A_m;pointertovectorm

.asgB4,B_n;pointertovectorn

.asgA6,A_count;numberofelementsineachvector

.asgA0,A_i;loopcount

.asgA16,A_sum;partialsuma

.asgA17,A_prod;sumofproductsa[i]*b[i]+a[i+1]*b[i+1]

.asgB16,B_sum;partialsumb

.asgB17,B_prod;productsuma[i+2]*b[i+2]+a[i+3]*b[i+3]

.asgA9,A_reg1;elementsa[i+3]a[i+2]

.asgA8,A_reg0;elementsa[i+1]a[i]

.asgB7,B_reg1;elementsb[i+3]b[i+2]

.asgB6,B_reg0;elementsb[i+1]b[i]

.asgA4,A_sumt;totalsuma+breturnedtocaller

*==========================PIPELOOPPROLOG=============================*

B.S2loop;primeloop

||LDDW.D2T2*B_n++,B_reg1:

B_reg0;loadb[i+3]...b[i]

||LDDW.D1T1*A_m++,A_reg1:

A_reg0;loada[i+3]...a[i]

B.S2loop;primeloop

||LDDW.D2T2*B_n++,B_reg1:

B_reg0;loadb[i+3]...b[i]

||LDDW.D1T1*A_m++,A_reg1:

A_reg0;loada[i+3]...a[i]

||SHRU.S1A_count,2,A_i;calcloopcount

||ZERO.L1A_prod:

A_sum

||ZERO.L2B_prod:

B_sum

B.S1loop;primeloop

||[A_i]LDDW.D2T2*B_n++,B_reg1:

B_reg0;loadb[i+3]...b[i]

||[A_i]LDDW.D1T1*A_m++,A_reg1:

A_reg0;loada[i+3]...a[i]

||ZERO.L1A_prod:

A_sum;addedforbranch-

||ZERO.L2B_prod:

B_sum;target-not-span

[A_i]BDEC.S1loop,A_i;primeloop

||[A_i]LDDW.D2T2*B_n++,B_reg1:

B_reg0;loadb[i+3]...b[i]

||[A_i]LDDW.D1T1*A_m++,A_reg1:

A_reg0;loada[i+3]...a[i]

||ZERO.L1A_prod:

A_sum;addedforbranch-

||ZERO.L2B_prod:

B_sum;target-not-span

[A_i]BDEC.S1loop,A_i;primeloop

||[A_i]LDDW.D2T2*B_n++,B_reg1:

B_reg0;loadb[i+3]...b[i]

||[A_i]LDDW.D1T1*A_m++,A_reg1:

A_reg0;loada[i+3]...a[i]

||ZERO.L1A_prod:

A_sum;addedforbranch-

||ZERO.L2B_prod:

B_sum;target-not-span

*==========================PIPELOOPKERNEL=============================*

loop:

ADD.L2B_sum,B_prod,B_sum;sum+=productb

||ADD.L1A_sum,A_prod,A_sum;sum+=producta

||[A_i]LDDW.D2T2*B_n++,B_reg1:

B_reg0;loadb[i+3]...b[i]

||[A_i]LDDW.D1T1*A_m++,A_reg1:

A_reg0;loada[i+3]...a[i]

||DOTP2.M2XA_reg0,B_reg0,B_prod;a[0]*b[0]+a[1]*b[1]

||DOTP2.M1XA_reg1,B_reg1,A_prod;a[2]*b[2]+a[3]*b[3]

||[A_i]BDEC.S1loop,A_i;iterateloop

*==========================PIPELOOPEPILOG=============================*

RETNOP.S2B3,4;Returntocaller

ADD.L1XA_sum,B_sum,A_sumt;finalsum

.end

第一章:

1、数字信号处理的实现方法一般有哪几种?

答:

数字信号处理的实现是用硬件软件或软硬结合的方法来实现各种算法。

(1)在通用的计算机上用软件实现;

(2)在通用计算机系统中加上专用的加速处理机实现;(3)用通用的单片机实现,这种方法可用于一些不太复杂的数字信号处理,如数字控制;(4)用通用的可编程DSP芯片实现。

与单片机相比,DSP芯片具有更加适合于数字信号处理的软件和硬件资源,可用于复杂的数字信号处理算法;(5)用专用的DSP芯片实现。

在一些特殊的场合,要求的信号处理速度极高,用通用DSP芯片很难实现(6)用基于通用dsp核的asic芯片实现。

2、简单的叙述一下dsp芯片的发展概况?

答:

第一阶段,DSP的雏形阶段(1980年前后)。

代表产品:

S2811。

主要用途:

军事或航空航天部门。

第二阶段,DSP的成熟阶段(1990年前后)。

代表产品:

TI公司的TMS320C20

主要用途:

通信、计算机领域。

第三阶段,DSP的完善阶段(2000年以后)。

代表产品:

TI公司的TMS320C54主要用途:

各个行业领域。

3、可编程dsp芯片有哪些特点?

答:

1、采用哈佛结构

(1)冯。

诺依曼结构,

(2)哈佛结构(3)改进型哈佛结构2、采用多总线结构3.采用流水线技术4、配有专用的硬件乘法-累加器5、具有特殊的dsp指令6、快速的指令周期7、硬件配置强8、支持多处理器结构9、省电管理和低功耗

4、什么是哈佛结构和冯。

诺依曼结构?

它们有什么区别?

答:

哈佛结构:

该结构采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大地提高了数据处理能力和指令的执行速度,非常适合于实时的数字信号处理。

冯。

诺依曼结构:

该结构采用单存储空间,即程序指令和数据共用一个存储空间,使用单一的地址和数据总线,取指令和取操作数都是通过一条总线分时进行。

当进行高速运算时,不但不能同时进行取指令和取操作数,而且还会造成数据传输通道的瓶颈现象,其工作速度较慢。

区别:

哈佛:

该结构采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大地提高了数据处理能力和指令的执行速度,非常适合于实时的数字信号处理。

冯:

当进行高速运算时,不但不能同时进行取指令和取操作数,而且还会造成数据传输通道的瓶颈现象,其工作速度较慢。

5、什么是流水线技术?

答:

每条指令可通过片内多功能单元完成取指、译码、取操作数和执行等多个步骤,实现多条指令的并行执行,从而在不提高系统时钟频率的条件下减少每条指令的执行时间。

利用这种流水线结构,加上执行重复操作,就能保证在单指令周期内完成数字信号处理中用得最多的乘法-累加运算。

(图)

6、什么是定点dsp芯片和浮点dsp芯片?

它们各有什么优缺点?

答:

若数据以定点格式工作的称为定点DSP芯片。

若数据以

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

当前位置:首页 > 高等教育 > 农学

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

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