论文部分内容阅读
随着半导体技术的发展和消费类电子产品复杂度的不断增长,基于平台的设计(Platform-Based Design)方法逐渐成为片上系统(System-on-Chip,SoC)设计主流,且SoC运行的软件系统日益复杂。丰富的IP核资源与复杂的软件系统之间的兼容性问题,为片上系统的设计和验证带来巨大挑战。虚拟化技术支持在不同层次对计算机系统进行抽象和虚拟,是解决软硬件兼容性问题的有效手段。然而已有虚拟化技术要求硬件支持且性能开销较大等特点,难以有效解决SoC硬件与大型商业闭源软件之间兼容性问题。固件能够直接访问和控制计算机系统所有硬件资源,且具备轻量级和易于修改等优点,因此结合虚拟化技术与固件技术不仅能够利用虚拟化技术解决软硬件兼容性问题,而且能够基于固件技术提供轻量级和高性能的实现,以适用于SoC设计与验证。为此,本文以基于开放式片上总线架构的x86 SoC为研究实例,展开对基于虚拟机的固件(简称固件层虚拟化)技术的研究,主要研究内容包括以下四个方面: 1)提出了一种兼容Microsoft Windows(简称MS Windows)的固件设计。该设计以中断服务为单位,对面向全系统模拟器的BIOS(Basic Input/OutputSystem)进行划分得到中断服务例程集。结合中断服务例程集和开源固件并设计其接口模块,该固件设计既能利用已有开源固件初始化硬件系统,又可提供MS Windows等操作系统所需中断服务例程。借助于接口模块,该固件设计可快速集成不同开源固件,从而支持不同体系结构的硬件平台。实验结果表明该固件设计具备功能正确性、操作系统兼容性和可移植性,并能提供与商业PCBIOS相当的启动性能。此外,该设计层次化固件结构为固件层虚拟化技术的研究奠定基础。 2)提出了一种基于固件的系统虚拟化平台(Firmware-based VirtualizationPlatform,FVP),旨在通过固件保证硬件设计和MS Windows等大型商业闭源软件的兼容性。FVP通过固件与动态二进制翻译相结合的处理器虚拟化策略截获大型商业闭源软件对硬件的访问和控制,并提供一系列设备模拟和仿真接口以支持在固件层次虚拟不存在或不兼容的硬件设计。FVP无需硬件实现兼容IBMPC/AT的遗留设备(Legacy Device)等,从而保证了基于开放式片上总线架构的SoC设计的灵活性。实验结果表明,FVP不依赖类型1虚拟化平台所需硬件辅助虚拟化技术支持,且其性能优于类型2虚拟化平台。 3)提出了一种基于固件层虚拟化的二进制设备驱动程序复用方法和固件层泛直接设备虚拟化(Firmware-based Para Pass-Through)机制。固件层泛直接设备虚拟化机制负责监控来自目标平台二进制设备驱动程序的设备访问和控制请求,并将其路由至本地平台相应硬件设备,从而无需进行设备功能逻辑的模拟和仿真,且能够发挥本地平台硬件设计的功能。实验结果表明,固件层泛直接设备虚拟化机制可支持复用MS Windows等大型商业闭源操作系统自带的二进制设备驱动程序,且其性能优于基于设备模拟和仿真的设备虚拟化方法。 4)提出了一种基于固件层虚拟化的协同验证方法和平台(Firmware-basedCo-Verification Platform,FCVP)。FCVP在FPGA(Field-Programmable Gate Array)上基于固件模拟硬件待测设计(Design Ijnder Test,DUT)和系统模块,通过运行真实工作负载(大型商业闭源软件等)对比FPGA中硬件待测设计和FCVP模拟参考模型的行为,帮助分析和定位硬件设计错误。验证实例表明,FCVP可用于基于平台的SoC设计初期验证,并可有效地辅助硬件设计错误的定位。 根据上述研究成果,本文设计并实现了面向基于开放式片上总线架构的x86 SoC的固件层虚拟化平台的原型系统,其源体系结构为结合低功耗x86处理器与AMBA开放式片上总线架构的PKUnity86 x86 SoC,目标体系结构为MS Windows兼容的个人计算机系统(Personal Computer,PC)。该原型系统的实现对本文研究工作中提出的设计、平台和方法以及其在SoC设计和验证中的应用进行了有效验证。此外,本文还探讨了固件层虚拟化技术的未来发展方向。