互动模拟器
这些互动模拟器可以直接在浏览器中运行,适合课堂演示,也方便课后自己单步操作、修改程序并观察 CPU 内部状态的变化。
与课件的差异
这里的互动模拟器与课件中讲述的 CPU 在实现细节上可能略有不同,但基本原理一致。为了更完整地支持 RV32I,部分细节做了调整;考试时请以题目要求为准。
单周期 CPU
单周期 RV32I CPU 模拟器:
多周期 CPU
多周期 RV32I CPU 模拟器:
五级流水线 CPU
五级流水线 RV32I CPU 模拟器:
- 结构冲突:指令和数据分开存放,避免取指和访存之间的结构冲突
- 数据冲突:
- 数据前递:EX/MEM、MEM/WB 的结果可以前递到 EX 阶段,解决大部分数据冲突
- 数据的装入使用冲突:load 结果在下一拍才能前递,因此紧随其后的使用会 stall 一拍
- 控制冲突:所有分支都预测为不跳转(not taken);在 EX 阶段判断是否真的跳转,预测错误时 flush IF/ID 和 ID/EX,并从正确目标重新取指
课件中还讲了其他可能的流水线 CPU 设计(例如合并 I/D 但要处理结构冲突、用暂停流水线来解决 RAW 数据冲突、总是预测分支会跳转、提前在 ID 阶段计算分支目的地址、动态分支预测等等),这里只展示了其中一种。
作者: