基于ARM7 TDMI的SoC语音处理系统的设计
表1 优化前编解码速度
到此,系统目标代码都是在SDRAM中运行的。SEP3203提供了一个很有用的模块——片内高速存储器eSRAM。eSRAM存取速度非常快,可达到0.89 MIPS/MHz,所以对系统性能有很大的优化作用,而SDRAM却只能有其性能的1/3左右。表2是在50 MHz时钟、32位ARM指令情况下,SDRAM和eSRAM的性能比较。各项指标的意义见参考文献[1]。
表2 eSRAM和SDRAM性能比较
但是,SEP3203的20K的eSRAM资源是有限的,不可能也不必要将所有代码都放在其中执行。ARM集成开发工具提供了Profile功能,可以对整个程序进行统计分析,得到各部分代码(主要以标准C函数为单位)所耗时间占系统总时间的百分比。通过对软件系统做Profile分析,得到各编解码库函数在总编解码时间内所占的百分比,其中主要部分如表3所列。
表3 最耗费时间的库函数
以上三个函数在总编解码时间内占用了近80 %的时间(Quan()、Fmult()、Update()的功能分别为量化表查找、定点化的浮点数乘法、状态变量更新),对这些代码优化就会明显提高编解码速度。把这些函数代码整合到文件rec_esram.c中,然后加载remap.scf文件进行内存映像(*.scf文件是ARM ADS集成开发工具提供的链接脚本文件)。下面是remap.scf文件的内容:
FLASH 0x30002000 0x1000000
{
FLASH 0x30002000
//系统初始化入口及其他代码存放地址
{
init_ice.o (INIT, +First)
* (+RO,+RW,+ZI)
}
32bitRAM 0x00000000 //中断向量表入口地址
{
boot_gfd.o (BOOT, +First)
}
ESRAM 0x1fff0000 0x600 //核心库代码存放地址,在eSRAM中
{
rec_esram.o (+RO,+RW,+ZI)
}
/*堆栈设置部分*/
}
进行内存映像后,rec_esram.c的目标代码rec_esram.o(约为1.5KB)就加载到eSRAM(起始地址为0x1fff0000)中执行了。表4是经过eSRAM优化后编解码速度测试结果。
表4 eSRAM优化后的编解码速度
在有操作系统的情况下,也对语音系统性能进行了测试,如表5所列。该操作系统为东南大学专用集成电路系统工程技术与研究中心自主研发的面向嵌入式应用的ASIXOS,提供图形用户界面、网络、时钟、实时中断管理等支持和清晰的应用程序开发接口。语音系统为该OS环境中的一个应用,有独立的用户界面和底层服务。限于篇幅,本文不再详述。
从以上测试可以看出,在经过eSRAM优化后,无论是在裸机上还是
ARM7TDMI G 721 双Buffer机制 eSRAM优化 相关文章:
- 基于ARM7 TDMI-S CPU的LPC2103的多功能电子钟(11-18)
- 探讨VxWorks实现自动发送彩信嵌入式设计(11-05)
- S3C44B0X在水表智能抄表系统中应用(10-29)
- 基于ARM7TDMI-S微处理器LPC2142的热敏电阻温度计的设计(07-11)
- 嵌入式开发工具简介(11-09)
- 分析内核初始化时根内存盘的加载过程(init/main.c)(11-12)