跳转至

总览

Mill 中包含的示例 CPU(下称 CPU)实现了基本的 RV32I 指令集(包括特权态 M),实现语言是 SystemVerilog,仿真使用 Verilator,在 Vivado 2018.03 上可以通过综合。

CPU 采用四级流水线设计,单发射,支持异步访存。

// TODO: 喵喵的数位板呢?这里少张图!

和典型 MIPS 五级流水设计的区别

1. 访存 (Mem) 和执行 (Ex) 合并

原因在于我们不少那一个加法器。

事实上在示例 CPU 的实现中共有六个加法器:PC 自增,跳转偏移,返回地址计算,ALU ADD[I], ALU SUB,以及访存有效地址计算。节约一个加法器不本质,而且 ALU 中至少就需要两个加法器(减法单独使用一个,或者计算补码使用一个)

好处在于可以不用 Mem -> Ex 回递。而且由于访存路径很长,Ex 逻辑又比较复杂,这个回递尤其卡脖子。

2. 分支在 Ex 出口生效

首先因为没有延迟槽,所以其实分支写在哪里都会涉及清空流水线的问题。

在 Ex 出口生效可以合并异常和分支的实现,让 nPC 的计算更简单。

示例 CPU 对流水级的实现做了部分约束,使得实现清空比较容易。具体见 实现细节


最后更新: 2020-11-03 03:02:10