偷偷滴找个实习工作,要弄DSP,从零开始,整理了些入门知识,包括网摘的和书上摘的,和初学者共勉一下。
主要的DSP芯片种类
1.TI公司的DSP芯片
对于TI的DSP系列产品介绍如下:
1) C5000系列(定点、低功耗):相比其它系列的主要特点是低功耗,所以最适合个人与便携式上网以及无线通信应用,如手机、PDA、GPS等应用。处理速度在80MIPS-- 400MIPS之间。C5000系列一般只具有McBSP同步串口、HPI并行接口、定时器、DMA等外设。
2)C2000系列(定点、控制器):C20X,F20X,F24X, F24XX,C28X,F28XX该系列芯片具有大量外设资源,如:A/D、定时器、各种串口(同步和异步),WATCHDOG、CAN总线/PWM发生器、数字IO脚等。是针对控制应用最佳化的DSP,在TI所有的DSP中,只有C2000有FLASH,也只有该系列有异步串口可以和PC的UART相连。
3)C6000 系列:C62XX,C67XX,C64XX 该系列以高性能著称,最适合宽带网络和数字影像应用。32bit,其中:C62XX和C64XX是定点系列,C67XX 是浮点系列。该系列提供EMIF扩展存储器接口。该系列只提供BGA封装,只能制作多层PCB。且功耗较大。
4)C3X系列:浮点系列,非主流产品,VC33仍在广泛使用,但其速度较低,最高在150MIPS,但功耗较低。
5)OMAP系列:OMAP处理器集成ARM的命令及控制功能,另外还提供DSP 的低功耗实时信号处理能力,最适合移动上网设备和多媒体家电。
6)Davinci:TMS320DM644x 架构是一款高度集成的片上系统 (SoC),集成了数字视频所需的许多外部组件。DM644x 器件建立在 TI 性能卓越的 TMS320C64x DSP 内核基础之上,ARM9 处理器、视频加速器、网络外设及外部存储器/存储设备接口等都专门为视频功能进行了调节。则特别适合视频编码与解码,其专门的视频处理前端添加了视频编码功能,能够捕获各种数字视频格式。其主要应用为网络照相机、机顶盒、视频电话、医疗成像等。
2.AD公司的DSP芯片
特点:系统时钟一般不经分频直接使用。
定点DSP芯片的程序字长为24位,数据字长为16位。一般具有2个串行口、1个内部定时器和3个以上的外部中断源,此外还提供8位EPROM程序引导方式。
浮点DSP芯片,程序存储器为48位,数据存储器为40位,支持32位单精度和40位扩展精度的IEEE浮点格式,内部具有32×48位的程序Cache,有3至4个外部中断源。
3.AT&T公司的DSP芯片
定点DSP芯片的程序和数据字长均为16位,有2个精度为36位的累加器,具有1个深度为15字的指令Cache,片内具有2K字的程序ROM和512字的数据RAM。
浮点DSP芯片,80/100ns的指令周期,片内具有3个512字的RAM块,或2个512字的RAM块加1个4K字的ROM块。可以寻址4M字的外部存储器。具有4个40位精度的累加器和22个通用寄存器。
4.Motorola公司的DSP芯片
定点DSP芯片程序和数据字长为24位,有2个精度为36位的累加器。
浮点DSP芯片,累加器精度达96位,可支持双精度浮点数,该芯片的指令周期为50/60/74ns。内部具有10个96位或32位基于寄存器的累加器。
适合于自适应滤波的专用定点DSP芯片,程序字长和数据字长分别为24位和16位,累加器精度为40位。
5.其他公司
NEC公司的μPD77C25、μPD77220定点DSP芯片和μPD77240浮点DSP芯片等。
LUCENT的DSP1600等,
INTEL也有自己的DSP产品。
DSP芯片的主要应用领域
目前DSP的应用主要包括如下方面:
(1)信号处理 如数字滤波、自适应滤波、快速傅里叶变换、希尔伯特变换、小波变换、相关运算、谱分析、卷积、模式匹配、加窗、波形产生等
(2)通信 如调制解调器、自适应均衡、数据加密、数据压缩、回波抵消、多路复用、传真、扩频通信、纠错编码、可视电话、个人通信系统、移动通信、个人数字助手(PDA)、X.25分组交换开关等。
(3)语音 如语音编码、语音合成、语音识别、语音增强、说话人辨认、说话人确认、语音邮件、语音存储、扬声器检验、文本转语音等。
(4)军事 如保密通信、雷达处理、声纳处理、图像处理、射频调制解调、导航、导弹制导等。
(5)图形与图像 如二维和三维图形处理、图像压缩与传输、图像增强、动画与数字地图、机器人视觉、模式识别、工作站等。
(6)仪器仪表 如频谱分析、函数发生、锁相环、地震处理、数字滤波、模式匹配、暂态分析等。
(7)自动控制 如引擎控制、声控、机器人控制、磁盘控制器、激光打印机控制、电动机控制等。
(8)医疗 助听器、超声设备、诊断工具、病人监护、胎儿监控、修复手术等。
(9)家用电器 如高保真音响、音乐合成、音调控制、玩具与游戏、数字电话与电视、电动工具、固态应答机等。
(10)汽车 如自适应驾驶控制、防滑制动器、发动机控制、导航及全球定位、振动分析、防撞雷达等。
DSP芯片的运算速度
MAC时间:一次乘法和一次加法的时间。大部分DSP芯片可在一个指令周期内完成一次乘法和一次加法操作。
FFT执行时间:运行一个N点FFT程序所需时间。由于FFT运算在数字信号处理中很有代表性,因此FFT运算时间常作为衡量DSP芯片运算能力的一个指标。
MIPS:每秒执行百万条指令。
MOPS:每秒执行百万次操作。
MFLOPS:每秒执行百万次浮点操作。
BOPS:每秒执行十亿次操作。
TI公司的开发环境
对于DSP工程师来说,除开必须了解和熟悉DSP本身的结构(包括软件指令系统和硬件结构)和技术指标外,大量的时间和精力是花费在熟悉和掌握其开发工具和环境上。因此,各DSP生产厂商以及许多第三方公司作了极大的努力,为DSP系统集成和硬软件的开发提供了大量有用的工具。下面重点讨论TI DSP的集成仿真环境CCS。
CCS所包含功能有:(1)集成可视化代码编辑界面,可直接编写C、汇编、.H文件、.cmd文件等。(2)集成代码生成工具,包括汇编器、优化C编译器、连接器等等。(3)基本调试工具,如装入执行代码(.out文件),查看寄存器窗口,存储器窗口,反汇编窗口,变量窗口等,支持C源代码级调试。(4)支持多DSP调试。(5)断点工具,包括硬件断点、数据空间读/写断点,条件断点(使用GEL编写表达式)等等。(6)探针工具(probe points),可用于算法仿真,数据监视等。(7)剖析工具(profile points),可用于评估代码执行的时钟数。(8)数据的图形显示工具,可绘制时域/频域波形、眼图、星座图、图像等,并可自动刷新(使用animate命令运行)。(9)提供GEL工具,令用户可以编写自己的控制面板/菜单,从而方便直观地修改变量,配置参数等。(10)支持实时数据交换(RTDX)技术,利用该技术可在不中断目标系统运行的情况下,实现DSP与其它应用程序(OLE)实现数据交换。(11)开放式的插入(plug-ins)技术,支持其它第三方的ActiveX插件,支持各种仿真器包括软仿真(只需安装相应的驱动程序)。(12)提供DSP/BIOS工具,利用该工具可增强对代码的实时分析能力,如分析代码执行的效率,调度程序执行的优先级,方便管理或使用系统资源(代码/数据占用空间,中断服务程序的调用,定时器使用等等),从而减小开发人员对硬件资源熟悉程度的依赖性。
1. 代码产生工具
(1)TMS320优化C编译器(Optimizing ANSI C Compilers) C编译器的输入是C语言源代码,输出为TMS320汇编代码,它用于把符合ANSI标准的C代码转换为目标DSP汇编代码,使用户可以用C语言编写代码。并且,配套的代码调试工具支持C代码的源码调试。TI公司的编译器支持除TMS320C1x外的所有DSP产品。
(2)TMS320汇编器、连接器(Assembler、Linker) 汇编器和连接器用于把汇编代码转换为可在目标DSP上运行的可执行目标代码。
支持宏汇编和目标库,产生的目标代码可重新定位,在程序地址空间中的具体地址可变。
其中汇编器用于把汇编语言文件转换成机器语言的目标文件。连接器用于把多个目标文件连接成可执行的目标代码。在连接过程中,连接器完成目标代码的定位、解决符号的外部引用等。
2.代码调试工具
(1)TMS320源码调试器(C Source Debugger) 它在PC机或工作站上运行,是开发环境中主机与软件仿真器、软件评价模块或硬件仿真器之间的标准接口。它与这些调试器一起配合使用,完成对用户程序的调试。
程序调试可以在C、汇编或C/汇编混合模式下进行调试,调试器具有条件执行、单步执行、断点等基本功能,并支持多个DSP。
(2)TMS320软件仿真器(TMS320 Software Simulators) TMS320软件仿真器是一个软件程序,它在PC机或工作站上运行,通过模拟DSP的运行验证和调试TMS320程序。
采用软件仿真器,编程者可以在没有目标硬件的情况下进行软件开发。
在软件仿真器上调试用户软件时,可以用对主机数据文件的读写代替对特定I/O的数据读写,以模拟与DSP接口的I/O器件;另外软件仿真还可以模拟中断信号。
(3)TMS320系统调试和评价工具 TMS320有一系列系统调试工具用于代替或协助目标系统进行软件评价和开发。
现有的产品有:
DSK初学者开发套件(DSP Starter Kit)
EVM软件评估模块(Evaluation Module)
XDS510硬件仿真器(Extend Development Support Emulators)。
TI公司还提供集成开发工具CCS(Code Composer Studio),CCS可从网上下载,可进行软、硬件仿真和系统分析,受到广泛应用。
DSP操作系统
早期的DSP中,大部分软件是以一个循环形式来实现的,随着应用的增加,DSP需要并行的处理进程任务,区分优先级。
实时操作系统需要有一系列的功能来完成它的职责。
Rtos的内核
内核就是操作系统的内核,为其他部分提供一些服务,要包括以下几点
中断处理机制来处理内核服务程序。
一个程序调度,用来解决那个任务共享处理时间,用那个指令使用这个时间、
一个处理机制来要是控制系统资源用法。
在rtos中死锁是一个常见的问题
前提条件:互斥条件 多线程挂起和等待 环路挂起 不可剥夺条件
自启动
DM642启动方式是通过上电采样引脚AEA[22,21]的点评来设置的。可以选择NO BOOT AEA[22,21]均为低电平和外部存储器自启动AEA[22,21]均为高电平以及HPI/PCI启动。
如果选用外币存储器Flash来启动,则在系统结束复位状态后,DM642将flash空间起始地址为900000000H的前1KB复制到片内0地址开始的存储器单元中。并从0开始执行,这一次的加载有DSP自带的一级bootloader自行完成,但是1Kb程序作为用户程序显然不够,因此,这1Kb要做成加载器,也就是二级bootleader,利用它把用户程序从flash搬入内存,当加载完成后,只想程序的入口地址并开始执行应用程序,这个过程叫做二次加载。
二级bootloader主要完成3个功能
1初始化EMIF口,配置寄存器
外部存储器接口(EMIF),External Memory Interface,是TMS DSP器件上的一种接口。一般来说,EMIF可实现DSP与不同类型存储器(SRAM、Flash RAM、DDR-RAM等)的连接。一般EMIF与FPGA相连,从而使FPGA平台充当一个协同处理器、高速数据处理器或高速数据传输接口。
2把flash的前半夜1kb以后开始把程序的各个段和数据拷贝到指定的存储器地址中。
3跳到C程序的入口点c_int00(),这里修改isp在逃到复位中断,因此在二级bootloader的最后总是一条跳转指令。由于二级bootloader咋flash中的位置是900000000-90000400 而二级bootleader是在用户程序里,1kb以后也就是90000400开始的flash空间来存放用户程序。
自启动的实现过程
1建立应用程序
Ti代码产生的目标文件时一种模式化的文件,coff格式。程序中的代码和数据是在coff文件中以段的形式组织。Coff文件包括文件头,段头,符号表以及端数据;编译器会将coff文件转为。Out文件,编译器通过一个连接命令放在程序段对应的存储空间里,
自启动应用程序的配置有两点与普通也dsp应用程序不同的地方:
dsp/bios的men模块增加一个boot段,将ce1空间前的1kb配置用于存放二级bootloader
.cmd文件中,增加一段配置命令,将bootloader程序拷贝纸boot段中配置命令如下:
SECTIONS
{
boot-load >boot
}
2编写二级bootloader程序
将vc程序移植到DSP要点
一.DSP应用程序的移植和软件架构体系
1. 分析并提取VC++应用程序中与算法相关的代码
2. 编译器&平台相关的基本数据类型之间的差别:
3. 编译器&平台相关的序的问题 (LittleEndian/BigEndian):
4. 汇编程序的处理(通常在.asm类文件中)
5. 二进制库调用的处理(.lib/.dll)
6. 存储系统的合理配置
二.系统性能分析:Dm642 vs Pentium4
1. 工作频率
2. CPU的体系结构
3. 指令集
4. 定点和浮点
5. 存储体系+Dma控制器
三.Dm642应用程序的软件架构
1. Chip Support Library(CSL库)
2. DSP/BIOS(实时OS)
3. Driver(IOM)-DDK(底层驱动)
4. TMS320 DSPAlgorithm Standard (XDAIS-算法标准)
5. Reference Framework(参考框架)
6. Image/Video Processing Library 图像/视频处理库(IMGLib)
7. Digital signal processor Library 数字信号处理库(DSPLib)
代码开发流程和应用开发举例
1编写c代码
(1)算法的c语言实现
与普通的c语言程序一样,并且兼容ANIC C标准的高效编译环境,要注意头文件和运行时库和数据类型。
头文件:在TI的相关目录中查找;运行时库文件:必须包含在工程中;不能缺少。Lib文件;数据类型的长度要注意;char 8bit ;short 16 bit;int32bit;long40bit float32bit fouble 64bit;
一些原则:int和long不是一样的尺寸;
当乘法输入时:最好用short
对循环计数器用int或者无符号int
(2) 程序的编译
编译参数说明
-g 产生调试器进行符号调试所需要的伪指令,在进行程序功能验证阶段是必要
-k 保留C编译器输出的汇编语言文件*.asm,可以方便查看C语言生成的代码效率,进行C代码优化时很有用
没有设置C编译器优化选项-o 目的:在程序进行优化之前首先确保程序功能正确
编译执行
Project->Rebuild All
编译链接成功
生成可执行文件dot.out
(3)功能的测试
Debug调试
Debug->Go Main,执行F11,选择执行步数,进入函数把鼠标停在变量名上可以看到该变量当前的值,每执行一步变量值都有改变用鼠标点中某变量,按右键选择Add to Watch Window(或View->Watch Window)可以看要观察的变量。
(4) 程序的性能测试方法
采用调试器的Profiler进行测试
显示某个函数某个语句的执行周期数
显示任何函数的执行时间占总之行时间的百分比
显示函数被调用的次数
使用运行支持库中的库函数clock()
测试程序中每个函数的运行时间,以时钟周期为单位
2优化c代码
(1) 使用TI的 C优化器
对程序循环流水处理,以提高C代码的效率
使用编译器和优化器的三个步骤:
不带优化选项进行编译(功能验证)
用优化选项-o2进行编译
用最高级别-o3优化选项进行编译
每个步骤都必须进行功能验证
(2)进一步的优化过程
观察C代码产生的汇编代码,看其内层循环是否有进一步优化的可能(从指令的并行性观察)依据观察结果,决定选用字长优化方法n C6000内部数据总线和寄存器都是32位n 点积运算使用的都是16位的short类型数据。
作点积运算时每次用一个LD指令取两个16位数据,用两个16位乘法器在一个周期内并行完成两个16位乘法。
用C语言实现该功能涉及:
对16位数据进行32位访问
用C语言实现汇编语言内的MPY/MPYH功能
其他程序优化手段
编译选项-x2,也就是内联选项
关键字const能提高程序性能
intrinsics _nassert能减少代码长度
因为对于一个DSP系统,成本的降低对产品的成功有着重要的影响,开发者可以增加产品的潜能,电源优化能在同样的作用下运行更长的时间,同样减少了系统的成本。
3编写和线性汇编
建立C环境
汇编函数原型的声明
调用汇编函数:在这个过程中调用函数完成必要的 寄存器保护
Int child(int,int);
Void main(void)
{
Int x=7;
Int y;
Y=child(x,5);
}
建立汇编环境
.def _child ;make the lable _func visible o linker
_child:
线性汇编的函数结构
.def _DP ;声明函数名,建立汇编环境
_DP: .cproc prram0,prram1 ;函数参数
.reserve reserve_reg ;需要保护的寄存器
.reg local_val0,local_val1 ;函数内的寄存器变量
MV prram0,local_val0 ;建立函数参数与寄存器变量的关系
MV prram1,local_val1
。
。 ;算法
.return return_value ;函数返回,return_value 为物理
;寄存器或者寄存器变量名
.endproc
基于TMS320C6202的移动信号接收设计
一 移动视屏处理平台
1系统组成
视屏预处理,C6202处理板,PCI插卡
2视屏预处理
数字信号经过调解预处理电路后,由同步输入的视屏信号进行分离,驱动地址发生器,产生SRAM存储原始图像地址,一路信号按照地址发生器直接写入SRAM,另一路通过硬件识别二值化后写入SRAM
3 C6202处理板
通过EMIF口将SRAM数据读入片内,flash memory CE0为图像存储区,CE1为外部ROM的初始化引导区,CE2配置为存放处理器之中间调运较少的数据,CE3配置为ADDon寄存器
4PCI插卡
实现C6202和pc之间的数据传递和通信。主要作用是吧处理后的图像传给pc实时显示图像,验证算法的可靠性。
二 优化措施
1软件优化
编写c代码,优化c代码,编写线性汇编。使用ccs开发化境的profiling工具检查代码性能,以c语言和汇编语言混合编程来发挥最大的优势。
2硬件优化
将SRAM设计成就奇偶交替,分别进行读写,提高存储和读取的时间开销。
FPGA和DSP结合的在线识别,FPGA实现硬件算法,逻辑控制,dsp完成复杂跟踪算法,实现智能决策。
使用片内的RAM开辟缓存区,片内DRAM与DSP在同一时钟平率,提高程序运行速度。
使用DMA来实现特殊的数据通道,可实现无CPU干预来实现大量数据搬移。
三 存储器额接口的分配
C6202有两种分配方式,MAP0片外存储器位于首地址,MAP1片内存储器位于首地址,MAP0的执行防止比较慢,一般选用MAP1的方式,BOOT选择外部ROM上电后自动将CE1空间的外部程序复制到0地址下,因此比较快。MAP1方式下,只需要将flash专门配置到CE1空间。
四 软件设计
1模块设计
DSP初始化模块:主要完成本系统中C6202的各个状态寄存器的配置和DSP/bios库的初始化。
EMIF的初始化:可以访问8.16.32bit的存储器;由于片内的数据是以32bit进行的,所以访问片外的8.16bit的时候,EMIF会自动打包的。初始化时的寄存器主要有GBLCTL对片外存储器的公共参数设计,CECTLx设置ce空间的存储器类型和时序,其他一些对SDRAM的控制寄存器。
SDram的初始化:EMIF可以管理SDRAM,对SDCTL寄存器位写1,在对SDRAM进行配置。
DSP自检模块:在调试其他外设之前,首先进行最小系统自检。检测是否在真正工作状态。
数据接收模块:当AD采集满数据后产生中断型号,以DMA的方式从SRMA读入buffer1,用内存拷贝函数再将buffer1读入buffer2当memory-full-int中断信号到达,进行识别。
数据发送模块:配置UART芯片的ACE寄存器来实现并串转化,将多个目标传入pc机。
2编程几个要点
灵活使用C6000的专用函数库:调用内联函数。
正确使用C6000的数据类型:不要混淆inthe long的数据尺寸,定点乘法器运算使用short,循环计数器使用int或者unsigned int
资源的合理运用
简化循环体
DSP软件开发管理
主要分为五个阶段:
1系统的概念和需求;包括引出系统级的功能性和非功能性的要求;功耗要求,服务质量要求,性能和其他系统需求;建模技术的建立,用于检测系统的主要的构建模块。
2系统算法的研究和实验;根据预算的性能和精确度需求还开发详细的算法。首先分析浮点开发系统,以确定性能和精确度是否能满足要求。
3系统设计:系统的软硬件被选择或开发。通过原型或者模拟分析这些系统,以确定分割是否正确和利用软硬件部件可以实现性能目标。
4系统实现;利用来自系统的原型设计,平衡研究和硬件综合输入开发完整的系统共同模型。利用软件算法和部件开发软件。
5系统的集成;系统在模拟环境或者硬件环境下被构建,验证,调谐和执行。如果没有满足性的目标,给定的系统将从新分析和分割。