源码地图¶
本页把“想理解什么”映射到首要入口。链接固定到本站文档基线 commit,便于未来 对比;在本地阅读时仍应从当前 checkout 搜索符号。
顶层与参数¶
| 目标 | 首要入口 | 继续下钻 |
|---|---|---|
| 核内模块连接 | XSCore.scala |
XSTile.scala、L2Top.scala |
| Core 默认参数 | Parameters.scala |
各模块 *Parameters.scala |
| SoC/config 组合 | top/Configs.scala |
top/ArgParser.scala |
| 构建入口 | Makefile |
build.mill、scripts/ |
前端¶
| 问题 | 入口目录/文件 |
|---|---|
| 前端总连线、redirect | frontend/Frontend.scala |
| 分支预测器组合 | frontend/bpu/Bpu.scala |
| 预测组件 | frontend/bpu |
| 预测块排队与提交训练 | frontend/ftq/Ftq.scala |
| ICache | frontend/icache |
| 取指/预译码 | frontend/ifu |
| 前后端弹性缓冲 | frontend/ibuffer/IBuffer.scala |
后端¶
| 问题 | 入口目录/文件 |
|---|---|
| 后端区域与连接 | backend/Backend.scala、backend/Region.scala |
| 控制块 | backend/CtrlBlock.scala |
| 译码 | backend/decode |
| 重命名与恢复 | backend/rename |
| 调度/发射 | backend/issue |
| 执行单元 | backend/exu、backend/fu |
| ROB/RAB 与退休 | backend/rob |
| CSR/Trap/Interrupt | backend/fu/NewCSR |
访存、MMU 与 Cache¶
| 问题 | 入口目录/文件 |
|---|---|
| MemBlock 总连线 | mem/MemBlock.scala |
| Load/Store 流水 | mem/pipeline |
| LSQ、replay、前递 | mem/lsqueue |
| 访存依赖预测 | mem/mdp |
| 预取 | mem/prefetch |
| DCache | cache/dcache |
| TLB/PTW/PMP/PMA | cache/mmu |
| L2/L3 与 CHI | XSCache |
观测与验证¶
| 目标 | 入口 |
|---|---|
| Top-down 归因 | backend/TopDownGen.scala、scripts/top-down |
| 模块性能事件 | 在源码中搜索 XSPerfAccumulate、generatePerfEvent |
| 差分测试 | difftest |
| 数据库/波形调试 | scripts/xspdb、docs/XSPdb |
本地搜索模板¶
# 找模块定义与实例化
rg -n 'class NewLoadUnit|new NewLoadUnit' src/main/scala
# 找一次 redirect 的生产者和消费者
rg -n 'redirect' src/main/scala/xiangshan/{frontend,backend,mem}
# 找所有性能事件
rg -n 'XSPerfAccumulate|generatePerfEvent' src/main/scala/xiangshan
# 找一个 CSR 的定义、许可检查和使用
rg -n '\bsatp\b' src/main/scala/xiangshan/backend/fu/NewCSR