环境、仓库与生成物
学习香山时最容易混淆三种东西:Chisel 源码、生成后的 SystemVerilog、仿真执行文件。三者是同一设计在不同阶段的表示,但用途不同。
应该在哪一层回答什么问题
| 问题 | 优先阅读 |
|---|---|
| 为什么采用这种微架构 | Chisel、论文、设计文档 |
| 某参数如何改变实例数量 | Chisel 参数与生成日志 |
| 某根最终信号叫什么 | 生成后的 SystemVerilog |
| 某一拍为什么停顿 | 波形与 SystemVerilog |
| 修改是否保持功能 | 测试、差分仿真、形式验证 |
当前教程的源码基线
本教程以本地仓库 /home/eda/xs-env/XiangShan 的提交 133d7dc4b 为内容锚点。学习时先确认:
cd /home/eda/xs-env/XiangShan
git rev-parse --short HEAD
若结果不同,不代表设计一定不同,但类名、参数和信号位置可能漂移。应把教程中的路径当作“导航入口”,而不是永远有效的固定行号。
源码树的第一层地图
src/main/scala/xiangshan/
├── frontend/ 预测、FTQ、IFU、ICache
├── backend/ 译码、重命名、调度、执行、ROB
├── mem/ LSU、Load/Store Queue、预取、SBuffer
├── cache/dcache/ L1 数据 Cache
├── XSCore.scala 核心顶层连接
└── Parameters.scala 核心参数
练习
找出 XSCore.scala 中前端、后端和 MemBlock 的实例化位置。暂时不要进入模块内部,只画出它们之间最粗粒度的连接图,并标记哪几条通路是从后向前返回的。