处理器/DSP
TMS320F2812是目前性能非常优秀的32位定点DSP,集成了多种外设。对TMS320F2812开发通常利用TI公司的CCS2集成开发环境,使用JTAG接口仿真器连接目标板,可以不占用用户资源实现全速/断点调试;仿真调试完成后对CMD文件进行相关修改,并用RTS2800_FL04830.LIB替换RTS2800N.LIB,必要时对程序中变量与函数分配的空间做部分调整后,编译项目得到输出文件;在CCS2集成开发环境中完成下载、加密等操作后,断电脱离仿真机,成为独立运行的嵌入式系统。
然而,相当多的应用设计者常常面临程序仿真通过,但独立运行失败的情况,表现均为程序代码运行性能比估计的要差很多,以致来不及处理实时数据。由于代码在Flash中运行的时间比在SARAM中仿真的时间长,有的设计试验出现在Flash中运行比仿真慢4倍以上的结果,使设计只能停留在仿真通过的层次上。
1 分析
TI公司提供的一篇文档资料spra958e.pdf,描述了在内部Flash中运行程序的相关知识,说明当在RAM中仿真速度为150 MIPS时,相应Flash中的执行速度可达90~1OO MIPS;同时。在此文档资料中提供了参考实例,但介绍性文字较多,实现高性能的具体配置方式描述不够具体。经反复阅读TI公司的其他相关文档资料,并编程对比实验,笔者摸索出实现Flash中运行速度达到RAM中仿真速度的75%左右的方法,与TI指标相符合。下面详细说明试验程序与方法。限于篇幅,只列出与试验过程密切相关部分的配置情况。试验程序使用的空间分配如表1所列。
试验程序如下:
下面是CMD文件关键内容。因RAM仿真与下载Flash所用CMD文件有差异,故为节省篇幅,混合写在一起,差异部分参见说明。
试验程序运行时,用示波器在TMS320F2812的XF输出脚可以测量到重复脉冲(如图1所示),表2为对应的测量结果。
函数InitFlash()设置了等待参数。在100 MHz的系统时钟条件下,笔者的实例能保证正常执行的最佳参数;而其他设置会产生运行速度慢,或过快但运行不稳定的结果。观察表2的测量结果,可以发现各方式下T1时间不变,原因为指令“asm(“RPT#248||NOP”)”取指令只执行一次,然后在DSP中内部循环执行250次,而只有取指令才涉及等待参数问题,所以在试验的4种条件下T1基本相同(毕竟还是存在取指令过程,每种条件下T1并非完全一致,有微小差别)。因Flash本身访问速度比SARAM要慢,指令需要插入等待周期。
表2说明了下载到Flash中运行时的速度与在SARAM中仿真时相比,有所下降。T2/T3/T4虽然同为数据传送花费时间,但因分布空间不同,对应汇编指令数和指令类型相应有增减,故表现出不同的执行时间,其中数据在外部RAM中传输比在内部SARAM中传输要慢。
表2还显示出下载到Flash中运行,如果同时对芯片加密,则应当特别注意变量分配的空间位置。加密后Flash处于安全模块中,如果变量分配到HO,那么由于H0是非安全块,DSP工作时可以在两种模块中动态切换,不需要开发者附加代码。描述参见TI文档资料中的CSM章节,但并未说明需要额外增加时间开销。LOL1是安全块,如果变量分配到L0L1或是没有加密,则因不存在安全与非安全模块的切换时间开销,速度比较快。当采用保护芯片知识产权而需要加密Flash时必须注意分配变量空间,把对运行速度敏感的参数分配到LOLl中,否则会发现程序执行速度降低到仿真时的1/4。由于内部SARAM空间有限,应用系统往往需要外扩RAM,数据交换将比在内部SARAM执行时有所增多。
2 结论
通过前面的试验,可以得到几个在TMS320F2812应用开发中,运行于Flash中的代码如何提高性能的指导原则:
①根据系统时钟选择合适的等待参数;
②数据分配空间从指令类型与数量上影响程序执行效率;
③Flash加密后,对执行速度有快速性要求的应用系统,应当在CMD文件中指定运行空间在SARAM的L0L1段,并注意变量分配的段空间。
设计系统如果满足上面几个原则,那么程序执行效率就可达到SARAM仿真时的70%。
全部0条评论
快来发表一下你的评论吧 !