论文部分内容阅读
随着嵌入式系统软件功能需求的不断提高,片上存储器在系统中所占的成本比重也在不断增加,压缩程序存储空间已成为嵌入式处理器设计需要考虑的问题之一。现有的压缩程序存储空间的解决方案主要分为编译器优化、高密度指令集以及代码压缩三类。本文结合自主研发的两款嵌入式处理器(CK520,SPOCK)以及集成这两款处理器的异构双核SoC(GEM-SOC),从高密度指令集、代码压缩方法以及代码解码器的实现方式三个方面开展了研究工作:1)高密度指令集以Thumb和MIPS16指令集为代表,讨论了双模式高密度指令集的工作方式以及优缺点;以CK-core指令集为代表,从编程模型、指令类型、指令编码以及寻址方式等方面分析了单模式高密度指令集如何在代码密度和处理器性能之间作折衷;并以Powerstone基准测试集为基础,ARM940T和CK520为例,对比分析了Thumb/ARM和CK-core指令集的代码密度和处理器性能,实验结果显示:在使用相同的编译器条件下,与32位ARM指令集相比,CK520在牺牲17%处理器性能的前提下降低了38%的代码量;与16位Thumb指令集相比,CK520指令集不仅能够降低9%的代码量,还能提高15%的处理器性能,具有很好的性价比。2)代码压缩方法研究了基于域划分的代码压缩方法。用形式化的语言描述了该方法的三个步骤:符号生成、符号建模以及符号编码。符号模型的选择对代码压缩率有着关键性的影响,本文在传统的位置模型的基础上提出了一种新的高阶模型——类型模型,该模型挖掘了不同类型指令内部符号间的相关性;结合类型模型和传统的位置模型,提出了另一种高阶模型——混合模型,以及使用霍夫曼编码的代码压缩方法。以SPOCK指令集为例,对Ogg Vorbis的代码压缩实验结果表明:混合模型由于同时利用了两种高阶相关,与传统的位置模型相比压缩率提升12~14%,最好情况下能将原始程序压缩到53.16%。研究了基于算术编码的代码压缩方法。该方法使用二进制算术编码并配以马尔可夫模型,算术编码保证了编码的高效率;马尔可夫模型可以参数化配置模型信息以便更好的挖掘符号之间的比特级相关性。讨论了一种状态机实现的二进制算术编码器方案,分析了编码器精度、马尔可夫模型精度以及模型参数对代码压缩率的影响。3)代码解码器实现方式基于域划分的代码压缩方法,提出了一种同时支持类型模型和混合模型的低开销硬件解码器实现方法。讨论了一种二级码表的霍夫曼编码方法,根据每个符号集中符号的概率分布,将他们综合到一个根符号集中,所有的符号依据根符号集形成的码表进行编码。面向异构双核SoC——GEM-SOC,提出了一种纯软件实现的代码解码方法,该方法在SPOCK程序启动的时候由高密度指令集的CK520处理器实施解码。分别讨论了域划分和算术编码两种代码压缩方法的软件解码器实现方式,对MediaBech基准测试集的测试结果表明:1.软件解码方法能够根据应用自适应调整马尔可夫模型参数,在牺牲有限性能的前提下提高了DSP程序的代码压缩率;2.无论从代码压缩率还是软件解码器性能方面,采用混合模型的域划分方法都比采用马尔可夫模型的算术编码方法有明显的优势。