sEMU
载入中...
搜索中...
未找到
sEMU 文档

sEMU 模拟器

一个为“一生一芯”项目(ysyx)打造的高性能 RISC-V 指令集模拟器

项目概述

sEMU (Simple Emulator) 是一个采用现代 C++ (C++17/20) 编写的高性能 RISC-V 模拟器基础设施。作为 ysyx 体系结构学习与验证的核心组件,它提供了精准的指令级模拟(ISS),不仅用于教学理解 CPU 的内部行为,同时作为 DiffTest(差分测试)的参考实现(Golden Model),用于验证硬件 RTL 的正确性。

本项目大量运用面向对象的抽象,剥离了底层的内存管理、指令提取、执行引擎与调试支持,使得整个模拟器的扩展、维护与阅读变得清晰明了。

核心特性

🚀 高效执行引擎

支持 RV64/RV32 基础整数指令集扩展以及大部分常用的外设交互。核心执行循环经过优化,尽量减少热点路径的内存分配,保持对 RTL 验证的高速。在 class Core 中可以探索五级流水线架构的设计思路。

⚖️ DiffTest 支持

提供强大的差分测试(DiffTest)框架,支持与 Verilator 仿真的 NPC(New Processor Core)实时比对寄存器状态和内存变动,快速定位硬件设计漏洞。

🐛 SDB 简易调试器

内置 Simple Debugger (SDB),支持单步执行(si)、状态打印(info)、内存扫描(x) 以及运行跟踪,这极大方便了运行裸机程序或简易系统级软件时的调试。

💾 统一内存架构

模拟了总线和物理内存映射(MMIO),可以方便地挂载诸如串口(UART)、定时器(TIMER)等外部设备,提供一致的内存接口。

模块导航指南

  • Core: 模拟器的心脏,管理 CPU 状态序列,负责指令的 Fetch, Decode, Execute, Memory, WriteBack。
  • guest_mem: 处理访存请求,抽象了设备的读写端口,是 MMIO 路由的关键类。
  • SDB: 负责解析并分发调试命令行指令。
  • DiffTest: 用于提取和对比 CPU 架构寄存器与内存状态,输出红框异常和诊断信息。