MPACT-Sim 是一个框架和库,旨在让您更轻松地为各种指令集架构创建高性能 ISA 模拟器。使用 MPACT-Sim 构建的模拟器易于创建、插桩和速度快。MPACT-Sim 的诱人用例是快速创建和轻松修改模拟器,以进行架构探索。不过,生成的模拟器还可用于硬件可用性无(或有限)的架构的系统建模、编译器验证或软件开发。
MPACT-Sim 能够轻松地将指令语义表达和实现为简单的 C++ 函数/Callable。MPACT-Sim 还提供了一种声明性方法,用于表达指令来自动生成大多数指令解码器,从而提高创建新模拟器的简便性和速度。您可以轻松添加自定义配置条目,并且使用一组标准类可轻松对生成的模拟器进行插桩。
教程
后续教程将指导您为一部分 RiscV 指令创建 ISA 模拟器,这些信息足以执行针对 RV32I 架构子集编译的“hello world”应用。它们涵盖以下活动:
为 RV32I 编写 ISA 解码器说明。
这描述了各个指令,它们与其外部表示法(编码)无关。该说明用于生成用于初始化模拟器内部指令描述符的 C++ 代码。
为 RV32I 编写二进制解码器说明。
本部分介绍了指令、位字段及其值的二进制编码。它用于为指令生成解码器,这些指令能够将指令字词映射到运算码,并提取特定位字段的值。
编写一个集成了两个生成的解码器的集成(完整)指令解码器,添加所需的代码来涵盖生成的代码未包含的内容。
编写指令语义函数,以提供每条目标 RV32I 指令的实现。
当前教程不会介绍如何编写完成模拟器所需的其余代码,包括控制指令问题的代码,但将来可能会添加。不过,您可以在教程代码库中以及完整 [MPACT-RiscV 模拟器]https://github.com/mpact-riscv 的代码库中查看示例代码。
模拟器基础架构是用 C++ 编写的,因此假定您具备丰富的 C++ 实践知识。