XS-Gem5
香山配套的 gem5 一般叫XS-GEM5,它是 2022 年 6 月从上游 gem5 fork 出来的、面向香山 RTL 做周期级对齐的 RISC-V 全系统模拟器,不是上游 gem5 的一个“版本号”,而是一个独立分支树 + 多套配置变体。
一、“几个版本”怎么理解
可以从两个维度看:
1. 分支(branch)维度
xs-dev:内部开发分支的定期同步版backport:只回移植影响功能正确性和基本可用的补丁KMH-V2-CONFIG:昆明湖 V2 相关配置继续维护时切出的分支另有带
-align/-perf后缀的 CI 触发分支(分别对应 RTL 对齐配置、理想激进配置)
2. 配置脚本(configs/example 下,才是日常说的“V2/V3 版本”)
kmhv2.py:昆明湖 V2 基线,对齐南湖→昆明湖 V2 的 RTL 快照kmhv3.py:昆明湖 V3 主线程配置,保守对齐“进行中的”V3 RTL(部分开关故意关掉)idealkmhv3.py:Ideal V3,激进微架构设定全开,跑分最高(SPEC06 曾 >20 pts/GHz),用于探索上限而非对齐 RTL
雁栖湖(一代)、南湖(二代)时代也有过对应校准脚本,但现在主推的是昆明湖 V2/V3 这三套。
二、微架构仿真到什么层次
XS-GEM5 定位是“RTL 之前的周期级性能探索模型”,介于 NEMU(纯功能参考)和香山 RTL(Verilator/综合网表)之间。它不是 RTL 级(无门级/电路/时序网表),但是超标量乱序流水线的 cycle-accurate 性能模型,且按香山结构定制。
前端(取指/分支预测)
解耦前端(BPU 超前于 IFU)
TAGE-SC + ITTAGE + 可选 Loop predictor + RAS + BTB/FTB
取指宽度、分支预测延迟、方向/目标预测结构按昆明湖校准
后端(乱序执行)
译码/重命名宽度、ROB/LQ/SQ 深度(如 256/80/64)、物理寄存器堆(192Int+192FP)
分布式调度器、保留站、发射宽度、执行延迟(ALU/FMA/MDU/Ld-St AGU)
回填/replay 恢复策略、Move elimination、Cascaded FMA、RVV 大部分对齐
访存与缓存子系统
L1I/D(含 MSHR)、L2(含 sector cache)、L3、包含/非包含关系、各级延迟带宽
多预取器协同:Stream / Stride / BOP / SMS / Temporal / CDP,支持 VA→PA、active/passive offloading
TLB 层次:L1 I/D TLB + L2 TLB + TLB 预取;PTW 并行化与 coalescing;RV-H 扩展支持
系统与辅助
全系统模拟(Linux / AM baremetal),不支持 SE 模式
RVGCpt 检查点(NEMU 产、XS-GEM5 跑)、Online Difftest、Top-down 性能计数器
内存控制器/DRAM 带宽、DDR 参数校准
三、和 RTL 的精度边界
SPEC CPU2006 上与昆明湖 RTL相关性 >95%,但这是“性能趋势/瓶颈相关性”,不是逐周期波形一致。
部分 V3 RTL 新特性(新 BPU、后端改动)还在落地,所以
kmhv3.py故意留保守开关,等 RTL 合入再放开;idealkmhv3.py才代表模型能力上限。它不建模:RTL 具体流水级数/转发通路、Chisel 实现细节、布局布线时序、电压频率物理效应。这些只能靠 RTL+Verilator 或门级仿真补。
简单说:XS-GEM5 = 香山定制版 gem5,3 套主配置(kmhv2 / kmhv3 / idealkmhv3)+ 几条开发分支;仿真层次到“超标量乱序 CPU + 完整 cache/TLB/预取/前后端微架构参数”的周期级性能模型,不到 RTL 门级,但比上游 gem5 O3 更贴香山。