DSP芯片基础知识Word文件下载.docx
《DSP芯片基础知识Word文件下载.docx》由会员分享,可在线阅读,更多相关《DSP芯片基础知识Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
![DSP芯片基础知识Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-11/30/e271ab62-9dcd-4a80-8156-4f8baa0aac48/e271ab62-9dcd-4a80-8156-4f8baa0aac481.gif)
从制造工艺来看,1980年采用4μ的N沟道MOS工艺,而现在则普遍采用亚微米CMOS工艺。
DSP芯片的引脚数量从1980年的最多64个增加到现在的200个以上,引脚数量的增加,意味着结构灵活性的增加。
此外,DSP芯片的发展,是DSP系统的成本、体积、重量和功耗都有很大程度的下降。
3DSP芯片的分类
DSP的芯片可以按照以下的三种方式进行分类。
1.按基础特性分
这是根据DSP芯片的工作时钟和指令类型来分类的。
如果DSP芯片在某时钟频率范围内的任何频率上能正常工作,除计算速度有变化外,没有性能的下降,这类DSP芯片一般称之为静态DSP芯片。
如果有两种或两种以上的DSP芯片,它们的指令集和相应的机器代码机管脚结构相互兼容,则这类DSP芯片称之为一致性的DSP芯片。
2.按数据格式分
这是根据DSP芯片工作的数据格式来分类的。
数据以定点格式工作的DSP芯片称之为定点DSP芯片。
以浮点格式工作的称为DSP芯片。
不同的浮点DSP芯片所采用的浮点格式不完全一样,有的DSP芯片采用自定义的浮点格式,有的DSP芯片则采用IEEE的标准浮点格式。
3.按用途分
按照DSP芯片的用途来分,可分为通用型DSP芯片和专用型的DSP芯片。
通用型DSP芯片适合普通的DSP应用,如TI公司的一系列DSP芯片。
专用型DSP芯片市为特定的DSP运算而设计,更适合特殊的运算,如数字滤波,卷积和FFT等。
4DSP芯片的选择
设计DSP应用系统,选择DSP芯片时非常重要的一个环节。
只有选定了DSP芯片才能进一步设计外围电路集系统的其它电路。
总的来说,DSP芯片的选择应根据实际的应用系统需要而确定。
一般来说,选择DSP芯片时考虑如下诸多因素。
1.DSP芯片的运算速度。
运算速度是DSP芯片的一个最重要的性能指标,也是选择DSP芯片时所需要考虑的一个主要因素。
DSP芯片的运算速度可以用以下几种性能指标来衡量:
(1)指令周期。
就是执行一条指令所需要的时间,通常以ns为单位。
(2)MAC时间。
即一次乘法加上一次加法的时间。
(3)FFT执行时间。
即运行一个N点FFT程序所需的时间。
(4)MIPS。
即每秒执行百万条指令。
(5)MOPS。
即每秒执行百万次操作。
(6)MFLOPS。
即每秒执行百万次浮点操作。
(7)BOPS。
即每秒执行十亿次操作。
2.DSP芯片的价格。
根据一个价格实际的应用情况,确定一个价格适中的DSP芯片。
3.DSP芯片的硬件资源。
4.DSP芯片的运算速度。
5.DSP芯片的开发工具。
6.DSP芯片的功耗。
7.其它的因素,如封装的形式、质量标准、生命周期等。
DSP应用系统的运算量是确定选用处理能力多大的DSP芯片的基础。
那么如何确定DSP系统的运算量以选择DSP芯片呢?
1.按样点处理
按样点处理就是DSP算法对每一个输入样点循环一次。
例如;
一个采用LMS算法的256抽头德的自适应FIR滤波器,假定每个抽头的计算需要3个MAC周期,则256抽头计算需要256*3=768个MAC周期。
如果采样频率为8KHz,即样点之间的间隔为125μs的时间,DSP芯片的MAC周期为200μs,则768个周期需要153.6μs的时间,显然无法实时处理,需要选用速度更快的芯片。
2.按帧处理
有些数字信号处理算法不是每个输入样点循环一次,而是每隔一定的时间间隔(通常称为帧)循环一次。
所以选择DSP芯片应该比较一帧内DSP芯片的处理能力和DSP算法的运算量。
假设DSP芯片的指令周期为P(ns),一帧的时间为⊿τ(ns),则该DSP芯片在一帧内所提供的最大运算量为⊿τ/P条指令。
5DSP芯片的基本结构
DSP芯片的基本结构包括:
(1)哈佛结构;
(2)流水线操作;
(3)专用的硬件乘法器;
(4)特殊的DSP指令;
(5)快速的指令周期。
哈佛结构
哈佛结构的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址,独立访问。
与两个存储器相对应的是系统中设置了程序总线和数据总线,从而使数据的吞吐率提高了一倍。
由于程序和存储器在两个分开的空间中,因此取指和执行能完全重叠。
流水线与哈佛结构相关,DSP芯片广泛采用流水线以减少指令执行的时间,从而增强了处理器的处理能力。
处理器可以并行处理二到四条指令,每条指令处于流水线的不同阶段。
入图示出一个三级流水线操作的例子。
CLLOUT1
取指NN-1N-2
译码N-1NN-2
执行N-2N-1N
图4-1三级流水线操作
专用的硬件乘法器
乘法速度越快,DSP处理器的性能越高。
由于具有专用的应用乘法器,乘法可在一个指令周期内完成。
特殊的DSP指令DSP芯片是采用特殊的指令。
快速的指令周期哈佛结构、流水线操作、专用的硬件乘法器、特殊的DSP指令再加上集成电路的优化设计可使DSP芯片的指令周期在200ns以下。
6DSP系统的特点
数字信号处理系统是以数字信号处理为基础,因此具有数字处理的全部特点:
(1)接口方便。
DSP系统与其它以现代数字技术为基础的系统或设备都是相互兼容,这样的系统接口以实现某种功能要比模拟系统与这些系统接口要容易的多。
(2)编程方便。
DSP系统种的可编程DSP芯片可使设计人员在开发过程中灵活方便地对软件进行修改和升级。
(3)稳定性好。
DSP系统以数字处理为基础,受环境温度以及噪声的影响较小,可靠性高。
(4)精度高。
16位数字系统可以达到的精度。
(5)可重复性好。
模拟系统的性能受元器件参数性能变化比较大,而数字系统基本上不受影响,因此数字系统便于测试,调试和大规模生产。
(6)集成方便。
DSP系统中的数字部件有高度的规范性,便于大规模集成。
7DSP芯片的应用
自从DSP芯片诞生以来,DSP芯片得到了飞速的发展。
DSP芯片高速发展,一方面得益于集成电路的发展,另一方面也得益于巨大的市场。
在短短的十多年时间,DSP芯片已经在信号处理、通信、雷达等许多领域得到广泛的应用。
目前,DSP芯片的价格也越来越低,性能价格比日益提高,具有巨大的应用潜力。
DSP芯片的应用主要有:
(1)信号处理--如,数字滤波、自适应滤波、快速傅里叶变换、相关运算、频谱分析、卷积等。
(2)通信--如,调制解调器、自适应均衡、数据加密、数据压缩、回坡抵消、多路复用、传真、扩频通信、纠错编码、波形产生等。
(3)语音--如语音编码、语音合成、语音识别、语音增强、说话人辨认、说话人确认、语音邮件、语音储存等。
(4)图像/图形--如二维和三维图形处理、图像压缩与传输、图像增强、动画、机器人视觉等。
(5)军事--如保密通信、雷达处理、声纳处理、导航等。
(6)仪器仪表--如频谱分析、函数发生、锁相环、地震处理等。
(7)自动控制--如引擎控制、深空、自动驾驶、机器人控制、磁盘控制。
(8)医疗--如助听、超声设备、诊断工具、病人监护等。
(9)家用电器--如高保真音响、音乐合成、音调控制、玩具与游戏、数字电话/电视等
DSP开发相关知识
文章所属类别:
[dsp]
录入时间:
2005-4-4
1
McBSP(Multichannel
Buffered
Serial
Port)串口利用DMA中的多帧(Multi-Frame)方式通信的中断处理
在实际通信应用中,一个突发之后,程序必须为下一个突发作准备。
因此一般采用串口的DMA多帧方式但在串口以DMA方式传输数据时却有一些问题要讨论。
首先DMA的传输同步事件应设McBSP的传输事件即XEVT,这样一字节传输后会自动准备另一字节(McBSP的READY上升沿触发DMA传输)。
中断发生时意味着一个块已传完,这时DMA的使能自动关闭,McBSP的READY将一直保持高状态。
但是在下一次突发传输直接使能DMA时却启动不了传输(相信会有许多我遇到此类问题)。
这是因为无法产生McBSP触发启动所需的READY上升沿。
解决办法是在中断程序中先关闭McBSP的发送,使READY=0,随后在程序中发送使能DMA,再打开McBSP的发送即可。
如先打开McBSP的发送后打开DMA,也是不会工作的。
因为McBSP的READY已经由0变到1了,无法再产生READY上升沿。
2
关闭DMA与关闭McBSP的区别
在通信领域,为了充分利用DSP的片上外设资源,常常利用DMA把从串口来的数据或要发的数据放入缓冲区,再处理。
对DMA而言,只要其在数据缓冲区的指针指向了中断应发生的位置,就产生中断。
但此时最后一个数据只是进入了McBSP而并未真正发出去,所以在传送结束的中断程序中只能关闭DMA不能关闭McBSP。
因为此时McBSP的发寄存器DXR中还有一个字没有发出。
3
McBSP串口配置的关键时序
主要是寄存器SPCR2的配置:
在保持RRST、XRST、FRST各位为0的前提下,配置好其它串口控制寄存器。
等待至少2个CLKR/T时钟以确保DSP内部的同步。
(1)可以向DXR装载数据或使能DMA。
(2)使能GRST(GRST=1)(如果需要DSP内部产生采样时钟)。
(3)使能RRST或XRST,注意此时要保证SPCR中仅有此一位发生改变。
(4)使能FRST(FRST=1)(如果需要DSP内部产生帧同步)。
(5)等待2个R/T
CLK时钟周期后,收或发端便会有效。
4
汇编语言程序中的变量
汇编语言程序中的公用变量应在文件中定义,如.def
carry。
汇编语言程序中使用的局部变量不需定义,可直接声明,例如trn_num
.word
00h。
如果在两个asm文件中有两个都没有定义的同名变量,则编译程序会认为分他们不是同一变量。
在汇编程序的开头应有.mmregs宏语句。
它一方面表示对默认定义的确认(ah,bh,trn等),另一方面可以对所用寄存器重新定义。
如:
.mmregs
DMPREC
.set
54h
;
定义DMA优先和使能寄存器地址在54h
DMSA
55h
DMSDN
57h
DXR10
23h
定义串口1的发送寄存器地睛在23h
5
ST1寄存器中CPL位的影响
CPL位是编译模式控制位,它表示在相对直接寻址时采用哪种指针。
当CPL=0时,使用页指针DP;
当CPL=1时,使用堆栈指针SP。
实际使用中二者没有什么差别,但使用SP寻址的程序更易读。
在程序中经常使用CPL=1。
6
指令的歧义
6.1
比较下面指令
STLM
B,AR4
;
把bl内容送入寄存器AR4
(×
)
B,*AR4
(√)
前者实际执行的是把bl内容送入一个系统用的缓冲区,后者也可用:
MVDM
BL,AR4
其他易导致歧义的语句还有:
LD
AR5,A
把AR5的内容送入寄存器A
LDM
ANDM
#0x107e,AR4;
把#107e加到寄存器AR4
ANDN
#0x107e,*AR4;
仅对某些寄存器有效的指令:
MVDD
*
AR2+,*AR3+
把以AR2为地址的内容拷入AR3的地址中
此类指令用作数据块搬移特别有效,但仅对AR2、AR3、AR4、AR5有效。
易错语句中对程序运行危害最大的是:
ST
#0,*(bsp0_out_sign)
bsp0_out_sign是一个变量名(√)
STM
#0,bsp0_out_sign
此语句被编译为STM
#0,PMST或STM
#0,IMR
这种语句会导致程序运行中的随机故障,且极难发现。
6.2
流水冲突
分析以下程序:
to_dce_buff,AR4
AR4,B
ADD
A,B
B=AR4+AL
BL,AR4
AR4=to-dce-buff+AL
实际上,上段程序得不到AR4=to-dce-buff+AL的结果。
这是因为DSP一般采用深度为3~6级的流水结构,产生了无法解决的冲突,所以它不能被正确执行。
解决的办法是在赋值和引用之间插入一条或几条其他的指令,或NOP语句即可。
7
汇编与C语言混合编程的关键问题
7.1
C程序变量与汇编程序变量的共用
为了使程序更易于接口和维护,可以在汇编程序中引用与C程序共享的变量:
.ref_to_dce_num,_to_dte_num,_to_dce_buff,_to_dte_buff
在汇编程序中引用而在C程序可直接定义的变量:
unsigned
char
to_dte_buff[BUFF_SIZE];
//DSP发向PC机的数据
int
to_dte_num;
//缓冲区中存放的有效字节数
to_dte_store:
//缓冲区的存放指针
to_dte_read;
//缓冲区的读取指针
这样经过链接就可完成对应。
7.2
程序入口问题
在C程序中,程序的入口是main()函数。
而在汇编程序中其入口由*.cmd文件中的命令决定,如:
-emain_start;
程序入口地址为main_start。
这样,混合汇编出来的程序得不到正确结果。
因为C到ASM的汇编有默认的入口c-int00,从这开始的一段程序为C程序的运行做准备工作。
这些工作包括初始化变量、设置栈指针等,相当于系统壳不能耐跨越。
这时可在*.cmd文件中去掉语句:
-e
main_start。
如仍想执行某些汇编程序,可以C函数的形式执行,如:
main_start();
//其中含有其他汇编程序
但前提是在汇编程序中把_main_start作为首地址,程序以rete结尾(作为可调用的函数)的程序段,并在汇编程序中引用_main_start,即.ref
_main_start。
7.3
移位问题
在C语言中把变量设为char型时,它是8位的,但在DSP汇编中此变量仍被作为16位处理。
所以会出现在C程序中的移位结果与汇编程序移位结果不同的问题。
解决的办法是在C程序中,把移位结果再用0X00FF去“与”一下即可。
7.4
堆栈问题
在汇编程序中对堆栈的依赖很小,但在C程序中分配局部变量、变量初始化、传递函数变量、保存函数返回地址、保护临时结果功能都是靠堆栈完成。
而C编译器无法检查程序运行时堆栈能否溢出。
所以应尽量多给堆栈分配空间。
C编译器的默认大小为1KB。
在程序不正常跑飞时应注意检查是否堆栈溢出。
7.5
程序跑飞问题
编译后的C程序跑飞一般是对不存在的存储区访问造成的。
首先要查.MAP文件并与memery
map图对比,看是否超出范围。
如果在有中断的程序中跑飞,应重点查在中断程序中是否对所用到的寄存器进行了压栈保护。
如果在中断程序中调用了C程序,则要查汇编后的C程序中是否用到了没有被保护的寄存器并提供保护(在C程序的编译中是不对A、B等寄存器进行保护的)。
8
命令文件的编写
在编辑*.cmd文件时编译连接器默认:
page
0就是ROM区,page
1就是RAM区。
下列段必须放在ROM区。
.text
load=PROG
PAGE
0
程序段
.const
load=data
常数段
.cinit
初始化段
.switch
switch指令常数表
值得注意的是尽量不要用FILL选项,一旦进行填充会使生成的.out文件增大甚至超过内部的存储空间而无法Bootload。
9
BOOtload问题
一般都采用从EPROM引导,但通常很费脑筋。
下面介绍一下可为54X系列DSP内部引导程序识别的EPROM存储结构,如表1所示。
表1
EPROM内容
地
址
08AAh或10AAh
SWWSR(等待状态产生寄存器)值16
BSCR(页切换控制寄存器)值16
人口点XPC(外部存储器映射寄存器)值7
人口点PC(程序地址寄存器)值16
第一块的大小16
第一块的人口点XPC(外部存储器映射寄存器)值7
第一块的人口点PC(程序地址寄存器)值16
代码
(1)16
……
代码(N)16
最后一块的大小16
最后一块的人口点XPC(外部存储器映射寄存器)值7
最后一块的人口点PC(程序地址寄存器)值16
0000h(标志引导表结束)
EPROM的启始地址(如8000h)
首地址
FFFFh
假使已经生成了*.out文件,生成时必须带有芯片,此处为MS320VC5409,版本参数如:
asm500
init_54x-v548)。
.hex文件与EPROM的存储空间相对应,其生成的参数由.cmd文件决定。
下面以实例介绍.cmd文件中的参数编写及意义。
cdpd.out
将cdpd.out文件转换成.hex文件
-SWWSR
7fffh
将外部设备的等待时间设为7个等待状态
-BSCR
0f800h
设置4K为一页,页面切换时插入1个等待状态
-o
cdpd.hex
转换成cdpd.hex文件
-i
intel格式
-boot
把所有的程序块装入EPROM
-bootorg
8000h
从EPROM存储器的8000h处开始写入程序内容
-memwidth
系统数据宽度转为8位,以避免生成2个文件
-romwidth
EPROM数据宽度为8位
0840h
从8040h开始执行程序
-map
wfcdpd.mxp
生成EPROM存储器占用映射
这时生成的cdpd.hex可以直接写入EPROM。
需要说明320C5409的外部RAM范围从8000h~FFFFh,所以设首地址为8000h。
但是对C54x系列而言,其转换有个BUG,即它总是不能在0XFFFF处写入从外部EPROM存储器装载的开始地址,只好自己填入。
对本例而言在0XFFFE处写0X80,在0XFFFF处写0X00。