CS152 · Lab 1

Lab 1: Sodor Single-Cycle and Microcoded Cores

把第 1-3 课学到的 ISA/微架构分离、单总线微编码数据通路,第一次变成能在真实 RISC-V 核上跑起来的实验:用 Chipyard 里的 Sodor 教学核家族,跑通指令级追踪、CPI 分析,并动手修改一个真实的微编码核心。

发布:2023-01-17(随第 1 课) 截止:2023-02-12 难度:入门 → 中等

实验目标


环境与基础设施

本实验基于 Chipyard RISC-V SoC 生成框架,具体使用其中的 5 个 "Sodor" 教育用核心(位于 generators/riscv-sodor):1 级(单周期)、2 级、3 级、5 级流水线,以及一个微编码核心。

实测记录:在真实的 cs152 教学主机上构建并运行 1 级核心的命令是:

make CONFIG=Sodor1StageConfig run-binary-fast BINARY=path/to/test.riscv

注意大小写:类名是 Sodor1StageConfig("Stage" 中 S 大写),不是 Sodor1stageConfig;"Sodor" 得名于《托马斯小火车》里的 Sodor 岛,不要误拼成 "Sodar"。构建成功后的一次基线运行给出了 mcycle = 6166,minstret = 6172——即 CPI ≈ 6166/6172 ≈ 0.999,与第 4 课"单周期不流水机器 CPI = 1"的理论预测几乎完全吻合(个别周期差异来自复位/收尾开销)。


指导性部分(约占 30% 分数)

指导性部分要求每位同学独立完成并提交个人报告,围绕四个具体问题:


开放性部分(约占 70% 分数,二选一 / 三选一)

开放性部分类似"一天的迷你项目",可以独立完成,也可以 2-3 人组队(但组队报告须单独提交),从以下选项中任选其一:

  1. 写一段不超过 15 行的 C 代码,让分支指令与非分支指令的比例最大化
  2. 从 5 级流水线中移除一条旁路路径,分析对 CPI 的实际影响
  3. 在微编码核心中定义并实现一条自定义指令——需要设计指令编码、编写对应的微码、并写一段汇编测试程序验证其行为
  4. 提出(但不必实现)一种流水线微架构的改动方案
  5. 自选题目(需要助教团队批准)

与第 2、3 课的直接呼应:选项 3(在微编码核心里加一条自定义指令)正是第 2、3 课"微编码如何免费实现复杂指令"这一论点的亲手验证——按照第 3 课"内存-内存加法"例子的思路,新增指令通常不需要改动数据通路,只需要在微码 ROM 里多写几行控制程序。这也是验证第 2 课中被标记为"教学草图、需要对照真实源码"的 JAL/Branch 微码细节的最佳机会:直接去读 Sodor 微编码核心的 microcode.scala 源文件,确认 PC 相对寻址的精确寄存器传输顺序。


交付物与评分说明


常见坑点


知识检查

问题 1:Lab 1 中,对 Sodor 单周期核心的一次实测运行给出 mcycle=6166、minstret=6172,这验证了第 4 课的什么结论?

问题 2:开放性部分的选项 3(在微编码核心中实现自定义指令)主要呼应了第 2、3 课的哪个论点?


参考资料与延伸阅读