摘要:以TMS320F206为例,阐述了DSP芯片的调试方法与调试技巧。着重探讨了DSP系统开发过程中的硬件设计与调试、软件设计的流水线冲突和等待状态设置以及如何利用闪速存储器等相关问题,具有较强的参考价值。
关键词:TMS320F206 流水线 等待状态 闪速存储器
高速数字信号处理器是当前信息产业的热点技术之一,采用最先进的DSP无疑会使所开发的产品具有更强的市场竞争力。与普通的单睡机相比,DSP芯片放弃了冯·诺依曼结构,代之以程序和数据分开的哈佛结构,从而大大提高了处理速度,指令周期多为ns级,比普通单片机(多为μs级)快了3个数量级。因此,在硬件设计中要考虑高频干扰问题。同时,DSP芯片广泛采用流水线操作,这也会给软件设计和调试带来一定不便。诺如此类的问题的实际开发中还有许多。
本篇文章中,笔者以TI公司的TMS320F206为例,就DSP芯片的软硬件设计与调试中可能遇到的问题及解决方法进行阐述,希望能对正在从事DSP开发工作的同仁有所帮助。
1 TMS320F206简介
TMS320F206是TI公司近年推出的一种性价比较高的定点DSP芯片。它的主要特点有:
(1)采用静态CMOS集成工艺制作而成,先进的哈佛结构使得程序和数据存储器独立编址、独立访问,两条总线可允许数据与指令的读取同时进行,从而使数据的吞吐率提高了一倍;高度专业化的指令系统提供了功能强大的信号处理操作;内嵌闪速存储器,可减小系统体积、提高系统稳定性,而且需专门的编程器(XDSS10仿真器即具有编程功能),从而减小了开发成本。
TMS320F206为100引脚的TQFP(正方扁平)封装,体小质轻,适于便携式仪器的设计。
(2)TMS320F206用一个16×16的硬乘法器进行有符号或无符号数的乘法运算,积为32位。乘累加指令仪需一个机器周期(20MHz时钟时为50ns),而在51及196等普通单片机中,乘法需利用软件实现,执行时间为μs级。
(3)TMS320F206地址映射分为4个可独立选择的空间:
·64K字程序存储器
·64K字本地数据存储器
·32K字全局数据存储器
·64字的I/O空间
(4)由于与目标系统之间采用了JTAG逻辑扫描电路接口(基于IEEE1149.1标准),从而可真正做到完全的硬件仿真。在仿真时不占用硬件资源,且可随时察看CPU内部及外设的工作情况,为程序的调试和除错带来了极大方便。
2 硬件设计与调试
2.1 硬件设计
硬件设计应注意如下要点:
(1)认真处理好复位和时钟信号。
(2)在DSP电路中,对所有的输入信号必须有明确的处理,不能悬浮或置之不理。
(3)模拟电路和数字电路独立布线,最后单点连接电源和地。
(4)片外程序存储和数据存储器应靠近DSP芯片放置,要合理布局,保证数据线和地址线长短基本一致(可参照最小用户板或EVM板布线)。
(5)关键部分建议布上地网。
在DSP硬件系统的印制电路板设计阶段,关键是使布线正确合理。布线正确一般都能做到,但要做到合理,则并不容易。DSP硬件系统中最易出现的问题是高频干扰,因此在布线时应尽量使高频线短而粗,且远离易受干扰的信号线,如模拟信号线。此外,电源滤波、模拟线与数字线分离等也是不容忽视的。
设计并加工好印制电路板后就可以进入硬件调试阶段。在这个阶段,首先应对电路板进行细致的常规检查,防止短路和断路现象。加电后,应检查晶体是否振荡,复位是否正确可靠,并且示波器检查DSP的CLKOUT1和CLKOUT2的信号是否正常,若正常则表明DSP本身基本正常,在做完这些基本检查之后,就可以进行系统硬件调试了。
2.2 硬件调试中应注意的问题
2.2.1 保证电源的稳定可靠
在DSP硬件系统的调试过程中,应确保给实验板供电的电源有好的恒压恒流特性。因为在调试中要经常在实验板开断电,若电源质量不好,则很可靠在突然上电时因电压陡升而烧坏芯片(TMS320F206首当其冲)。这样既会造成经济损失(TMS320F206芯片较为昂贵),又将影响开发进度。因此,在调试初期应高度重视电源的选择。
2.2.2 对受损芯片的判断
实验板上电运行时,要经常查看各芯片的发热情况,发现过热现象应及时分析处理。当怀疑有芯片损坏而又难以确认时,可通过测量其对地电阻加以判断。
笔者曾做过一块实验板,正常时检测它的不带电对地电阻为1MΩ左右;运行一段时间后,发现软件调试窗口无法正常调入程序,再次检测整板的对地电阻,发现已降到90kΩ。由此,怀疑有芯片受损。根据现象初步判定是TMS320F206的问题,采取以下措施加以判断;
将TMS320F206的电源引脚与实验板的电源线之间的连线割断,再测量整板的对地电阻,发现电阻值(原为90kΩ)开始回升——判断有可能是受损的TMS320F206拉垮了整板电阻;进一步检测被损的TMS320F206芯片,其对地电阻仅为几十kΩ,而正常的TMS320F206电阻约为2~3MΩ。由此断定TMS320F206已被烧坏,更换芯片后,系统恢复正常。
当然,并非总能一次就判断准确。若将怀疑的芯片割线后阻值未回升,说明该芯片没有问题,可试着再割其它的芯片,直至找到症结。做这项工作时,应耐心观察、细致分析、准确判断、及时总结。多做几次后积累了一定经验,日后遇见类似问题就能很快找到解决方案。
2.2.3 结合软件检查短路与虚焊
TMS320F206为100引脚的TQFP(正方扁平)封装;为追求开发板的小巧轻便,与此相应的外部程序存储器和数据存储以及其它功能模块也采用表贴元件。对于这些引脚细密的贴片,由于多采用人工焊贴,短路和虚焊的情况是很难杜绝的。当实验板刚从制板厂取出时,调试人员常会利用万用表和针头等工具对板子的焊贴工艺进行检查。对于明显的错误可以及时更正;但由于贴片引脚细密繁多,一些隐蔽的短路和虚焊情况很可能被忽略。此时,利用软件调试的方法可以较容易地查出硬件上的错误。
笔者曾设计了一套利用TMS320F206控制56k调制解调芯片组进行异/同步数据传输的实际系统。在软硬件相结合的调试中,由于是划分模块进行调试的,出错的芯片目标明确,一些遗漏的硬件错误很快暴露出来并得以解决。下面举例加以说明。
现象一:用软件调试器调入可执行的输出文件,即*.out文件,发现无论什么文件都调用失败,就连开始的vector.h文件(中断矢量标志定义文件)也变成了一些相干的代码。
——根据经验判断可能是TMS320F206有问题。再仔细复查实验板上的DSP芯片,发现芯片上有两个引脚发生了短路。排除故障后,程序调入成功。
现象二:用软件调试器调入文件局部出错。例如,应该是SPLK # lk,dma(存储长立即数到数据存储器空间)的地址都变成了.word xxx。
——初步判断可能是数据存储器或程序存储器出了问题。再仔细复查实验板上的相关芯片,最终发现有一片程序存储器的接地引脚是虚焊。故障排除后,程序调试正确。
现象三:局部功能模块不能实现。在本设计中,要求调制解调器上电后,先接受DSP发来的ATZ命令(调制解调器复位命令);若调制解调器正常复位,则会返回结果码OK。在实际调试中,发现始终收不到正确的结果码,而程序设计又没有错误,因此考虑硬件方面。
——该模块涉及到的芯片是RC56D/SP(Conexant公司出品的56k调制解调芯片)。它包括一片微控制器MCU和一片数据泵MDP(分别为80引脚和100引脚的TQFP封装),通过执行固化在1Mbit(128K×8)RAM和2Mbit(256k×8)ROM/Flash ROM内的固件来完成操作[3]。对这几片芯片仔细检查,发现向控制器(MCU)有两处引脚虚焊,排除故障后,调制解调器正常复位。
2.3 软件设计与调试
哈佛结构、流水线操作、专用的硬件乘法器、特殊的DSP指令再加上集成电路的优化设计可使DSP芯片的指令周期达到几十ns。快速的指令周期使得DSP芯片能够实时实现许多DSP应用。然而在实际的程序设计中,由于DSP芯片的上述特点,程序员们常常会遇到许多意想不到的麻烦。这样,笔者将编程与调试中应注意的问题和技巧作一介绍。
2.3.1 流水线冲突
TMS320F206采用了深度为4级的流水线操作,它具有4个独立的操作阶段:取指令、译码、取操作数和执行。由于4个操作阶段是独立的,因此这些操作可以交叠进行;在任意的指定周期内,1到4个不同的指令均可有效,各处于不同的完成阶段。
由此可见,流水线冲突是不可避免的。一般情况下,当流水线发生冲突时,由DSP自动插入延迟解决。当无法自动解决时,需要程序员通过调整程序语句的次序或在程序中插入一定数量的NOP来解决。因此,若在调试时查不出代码本身的问题,不妨试着相关的位置插入几个NOP指令。
2.3.2 软件待状态发生器
为实现TMS320F206与慢速外部逻辑和存储器的接口,等待状态是十分必要的。当CPU对慢速存储器或端口进行读写时,通过增加等待状态,可延长CPU等待外部存储器或外部I/O端口的时间以便更好地响应。为此,CPU为每个待状态提供了1个额外的周期。为避免总线冲突,所有向外部地址的写操作均需要至少2个周期。
在程序的调试过程中,我们常用设置断点的方法判断局部功能模块能否实现。若发现程序在尚未到达断点时就随机地停止运行,或仿真窗口出现“Time out waiting for device”红色告警字样的,可优先考虑调整待状态发生器控制寄存器(WSGR)的设置。
许多初学者在学习例程时发现其中的WSGR值均设为0000h(零等待状态),就误以为在任何情况下都可行,这是很不可取的。笔者在初次调试大型程序时,曾因为这个问题耗时多日后来试着将WSGR值由0000h改为0002h就顺利解决了(将片外低端程序空间的读/写等状态数设为2)。
下表显示了等待状态发生器控制寄存器(WSGR)的具体位设置:
说明:0=总读为0;R=可读;W=可写;破折号后的值为WSGR的复位值。
第15~12位:保留位,总是为0。
第11~9位:ISWS-I/O空间待状态位,决定用于片外I/O空间的读/写待状态数(0~7).
第8~6位:DSWS-数据空间等待状态位,决定用于片外数据空间的读/写等待状态数。
第5~3位:PSUWS-高端程序空等待状态位,决定用于片外高端程序空间的读/写等待状态数。
第2~0位:PSLWS-低端程序空间等待状态位,决定用于片外低端程序空间的读/写等待状态数。
在具体应用中,程序员可根据实际用到的片外资源灵活调整WSGR相关位的值。
2.3.3 有效利用片内闪存(Flash Memory)
TMS320F206的一个显著优势是具备32K片内闪速存储器块。它具有可擦除、可编程和非易失电源等特点。在复位期间,通过钭MP/MC置为低电平可以选择闪存。若未选之,则从片外存储器开始执行操作。
在利用JTAG进行硬件仿真时,有时会出现程序无法全速运行的情况。这时不要总是在程序上冥思苦想,可以开阔思路从别处着手。若确信程序流程没有什么问题,不妨试着将程序写入闪存运行。笔者曾遇到类似情况,程序烧入Flash运行后一切正常,经分析可能是实验板上的片外程序/数据存储器的布线不够规范。调整布线重新制板后,程序在硬仿真时也能全速运行了。
还有一种情况正好与之相反。程序在仿真窗口里可以正常运行,写入Flash后却无法运行了。在这种情况下,建议程序员在程序初始阶段(如系接着关中断seteintm之间)加一小段延时(几十ms,根据情况可以增减),可能会达到事半功倍的效果。
DSP技术的发展渐趋成熟,DSP的应用日益广泛;了解和掌握DSP技术,并应用DSP技术开发新一代高科技产品是使我国电子工业走向高技术密集型的一条重要途径。通过本文,笔者总结了自己在DSP开发工作中的经验与教训,希望能对读者有所启示。