论文部分内容阅读
指令集模拟器(Instruction Set Simulator,ISS)用来在一台计算机上模拟另外一台计算机上程序运行过程的软件工具,它是计算机体系结构研究和SoC软硬件协同设计的重要工具。经过几十年的发展,指令集模拟器成为了嵌入式处理器设计过程中必不可少的一部分。随着处理器硬件的不断创新和改进,现有的指令集模拟器已经无法适应当前硬件的需求。过去十多年来,人们主要针对32位的模拟器研究,64位模拟器的研究的很少,如当前的许多模拟器都是基于32位的模拟器,其性能及灵活性上都无法很好的发挥出当前硬件的需求,因此采用新的技术开发一种新的模拟器有着重要的意义。随着64位处理器应用的不断增加,处理器模拟领域必将面临新的挑战,比如,采用什么样的描述语言,如何实现并行处理等都是当前存在的难题。而且这种基于64位动态翻译技术的MIPS嵌入式模拟器不仅要满足64位MIPS嵌入式模拟器的需求,还要完全兼容32位MIPS嵌入式模拟器。因此,基于64位MIPS嵌入式系统的动态模拟与仿真技术的研究对开发MIPS嵌入式系统、提升其性能具有重要的意义。本论文的主要工作有:第一,构建基于newlib的交叉编译器,为了方便交叉编译器的移植,提高编译速度和增加对MIPS64指令集的支持,本文实现了基于newlib的MIPS-elf-*的交叉编译器;第二,实现了MIPS32和MIPS64兼容的指令集模拟器,模拟了处理器中除浮点指令以外的所有MIPS指令,主要包括算术运算、加载和存储指令、分支指令以及协处理器相关的指令。为了提高译码速度,该模拟器在指令译码过程中主要采用了多级索引技术,而不使用传统的代码生成器。另外,由于MIPS32指令集是MIPS64指令集的一个子集,该模拟器中使用C++类模板,使得在编译过程中使用同一套代码,编译出MIPS32和MIPS64两种指令集模拟器,从而大大提高了代码的可重用性;第三,为了比较指令集模拟技术的性能,本论文主要实现了解释型模式和未细化的动态编译模式。其中未细化的动态编译模式采用分页技术实现了Cache存储要执行的指令。最后,通过asm语言编写大量的验证程序确保模拟的指令集的正确性。这种技术无论是机器结构还是操作系统都不依赖于宿主机器,只要宿主机器支持C++语言即可。实验结果表明,本论文所采用的指令集模拟技术可以较为准确的模拟MIPS64的指令集,并有较高的仿真速度。