论文部分内容阅读
本文针对作者参加的国家863超大规模集成电路设计重大专项“SOC中32位数字信号处理器芯片开发和设计平台技术研究”项目,对编译系统中的可重定目标编译器和汇编器的设计与开发、目标代码优化以及编译系统的验证进行了研究和探讨。面向媒体处理器的可重定目标编译系统包括C编译器、汇编器、链接器、以及软件仿真器,本文主要研究可重定目标编译器和汇编器的构建技术和目标代码优化,以及对C编译器和汇编器验证的研究。 编译前端的实现技术包括词法分析、语法语义分析和中间代码生成技术等,针对ANSI C的程序结构,分别设计了函数、块、数据结构、类型、表达式、标识符等语法树结点,并将语法树分成编译层次、函数声明和块三个不同层次,使语法树具有清晰的层次结构,有利于编译程序的语法和语义分析,以及从语法树到RTL中间表示的转换。 可重定目标编译器主要包括三个方面的内容:中间表示、机器描述和编译主体与机器描述之间的接口技术。本文以自行开发的32位媒体处理器MD32为目标机器,提出了可重定目标编译器的系统结构,并就构成可重定目标编译器的三个主要组成部分进行了分析和研究。重点研究了机器描述与代码生成之间的关系、如何选用合适的中间表示进行目标机器指令系统的描述、树模式匹配的目标代码生成技术等。除了窗口寻址方式和比特反转寻址方式以外,开发的C编译器已能够面向媒体处理器MD32生成汇编代码。 在可重定目标编译器中,通过指令模板匹配生成目标代码的方式限制了高效的并行指令的生成,同时,并行指令的操作数类型与单操作指令的要求不一致也是限制并行指令生成的一个重要因素。本文在分析了上述两个限制并行指令生成的主要因素以及很难在编译器中实现并行指令生成的基础上,提出了在汇编级检查指令的操作数类型,通过插入LW或SW指令来改变操作数类型及指令调度的方法,能够有效的生成并行指令,提高了代码运行效率和代码密度。统计数据表明:代码执行效率平均可以提高14%,而代码密度平均提高11.75%。 在媒体处理应用程序代码中存在着相当多的局部变量,这些局部变量的使用范围(生存期)通常都很小。相关指令在流水中需要局部变量的值可以直接从旁路逻辑中得到,并在流水中完成局部变量值的全部使用。基于软硬件协同设计的思想,在研究局部变量生存期算法的基础上,本文提出了通过编译器指令编码实现对硬件结构的使能控制,即控制流水输出结果是否写回寄存器文件,以减少对寄存器文件的写次数,从而降低寄存器文件端口的读写压力。软件仿真结果表明,对DSP中不同的应用程序平均可以减少94%的寄存器文件写次数。 本文最后对编译系统的验证进行了研究,提出引入参考编译器和参考仿真器的测试方法,并通过在仿真器中插装代码生成动态数据信息(DDI)文件,能够将错误定位到函数级,给编译器的调试带来很大的便利。