From b9865cd6123d251000017b2accbb0af469651f58 Mon Sep 17 00:00:00 2001 From: PurplePower <60787289+PurplePower@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:55:53 +0800 Subject: [PATCH] Lab3 pipelined CPU renewed - added tutorial - fix ID reg addr invalid in certain types of instructions - renamed some variables for better understanding --- .gitignore | 4 + docs/docs/TODO.md | 2 +- .../better-tut/labs/lab2/lab2-interrupt.md | 4 +- .../labs/lab3/images/control_cases_table.png | Bin 0 -> 91122 bytes .../five_stage_pipelined_CPU_structure.png | Bin 0 -> 80022 bytes .../three_stage_pipelined_CPU_structure.png | Bin 0 -> 68540 bytes .../labs/lab3/lab3-pipelined-cpu.md | 230 ++++++++++++++++++ docs/mkdocs.yml | 1 + lab1/src/main/scala/board/verilator/Top.scala | 10 +- lab1/src/main/scala/board/z710/Top.scala | 5 + lab1/src/main/scala/board/z710v1.3/Top.scala | 5 + lab1/verilog/verilator/sim_main.cpp | 37 ++- lab2/src/main/scala/board/verilator/Top.scala | 10 +- lab2/src/main/scala/board/z710/Top.scala | 5 + lab2/src/main/scala/board/z710v1.3/Top.scala | 5 + lab2/verilog/verilator/sim_main.cpp | 36 ++- lab3/src/main/scala/board/verilator/Top.scala | 8 +- lab3/src/main/scala/board/z710/Top.scala | 5 + lab3/src/main/scala/board/z710v1.3/Top.scala | 5 + .../riscv/core/fivestage_final/CPU.scala | 6 +- .../riscv/core/fivestage_final/Control.scala | 12 +- .../fivestage_final/InstructionDecode.scala | 12 +- .../riscv/core/fivestage_forward/CPU.scala | 6 +- .../core/fivestage_forward/Control.scala | 12 +- .../fivestage_forward/InstructionDecode.scala | 12 +- .../riscv/core/fivestage_stall/CPU.scala | 6 +- .../riscv/core/fivestage_stall/Control.scala | 12 +- .../fivestage_stall/InstructionDecode.scala | 12 +- .../scala/riscv/FiveStageCPUForwardTest.scala | 1 + .../scala/riscv/FiveStageCPUStallTest.scala | 85 +++++++ lab3/verilog/verilator/sim_main.cpp | 36 ++- lab4/verilog/verilator/sim_main.cpp | 4 +- mini-yatcpu/verilog/verilator/sim_main.cpp | 4 +- 33 files changed, 494 insertions(+), 98 deletions(-) create mode 100644 docs/docs/better-tut/labs/lab3/images/control_cases_table.png create mode 100644 docs/docs/better-tut/labs/lab3/images/five_stage_pipelined_CPU_structure.png create mode 100644 docs/docs/better-tut/labs/lab3/images/three_stage_pipelined_CPU_structure.png create mode 100644 docs/docs/better-tut/labs/lab3/lab3-pipelined-cpu.md diff --git a/.gitignore b/.gitignore index 2b145df..3edf322 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,10 @@ target .vscode .metals .bloop +**/project/metals.sbt +**/project/project + +# VCD output **/test_run_dir # vivado stuffs diff --git a/docs/docs/TODO.md b/docs/docs/TODO.md index bcf6280..3c4cafe 100644 --- a/docs/docs/TODO.md +++ b/docs/docs/TODO.md @@ -28,5 +28,5 @@ principles of writing: 4. 实验内容 1. [1] 实验1 - 2. 实验2 + 2. [1] 实验2 diff --git a/docs/docs/better-tut/labs/lab2/lab2-interrupt.md b/docs/docs/better-tut/labs/lab2/lab2-interrupt.md index 6d74dd2..54fd1f7 100644 --- a/docs/docs/better-tut/labs/lab2/lab2-interrupt.md +++ b/docs/docs/better-tut/labs/lab2/lab2-interrupt.md @@ -151,7 +151,7 @@ CSR 寄存器组的代码文件位于 `src/main/scala/riscv/core/CSR.scala` CLINT 的代码文件位于 `src/main/scala/riscv/core/CLINT.scala` -Timer 的代码位于 `src/main/scala/riscv/peripheral/Timer.scala` +Timer 的代码位于 `src/main/scala/peripheral/Timer.scala` !!! tip IDEA 可以双击 shift,vscode 可以 shift+P 以打开文件快速搜索面板。 @@ -173,7 +173,7 @@ Timer 的代码位于 `src/main/scala/riscv/peripheral/Timer.scala` 1. `CLINTCSRTest.scala` 中添加了 CLINT 处理硬件终端和软件中断的两个测试,请您选择至少一个,并: 1. 简述这个测试通过给部件输入什么信号,以测试 CLINT 的哪些功能? - 2. 在测试波形图上,找到一次从开始处理中断到中断处理完成的波形图,并挑选其中关键的信号说明其过程。例如硬件中断的测试中,有在跳转指令和非跳转指令下的两次中断处理测试;软件测试则分别测试了 `ecall` 和 `ebreak` 两次中断,选择其中一次即可。 + 2. 在测试波形图上,找到一次从开始处理中断到中断处理完成的波形图,并挑选其中关键的信号说明其过程。例如硬件中断的测试中,有在跳转指令和非跳转指令下的两次中断处理测试;软件中断则分别测试了 `ecall` 和 `ebreak` 两次中断,选择其中一次即可。 2. `CPUTest.scala` 中新增了 `SimpleTrapTest`,其执行 `csrc/simpletest.c` 的程序。请您: 1. 简述该测试程序如何测试 CPU 的中断处理正确性。 2. 在测试波形图上找出说明该程序成功执行的信号。 diff --git a/docs/docs/better-tut/labs/lab3/images/control_cases_table.png b/docs/docs/better-tut/labs/lab3/images/control_cases_table.png new file mode 100644 index 0000000000000000000000000000000000000000..1a112c8762b7b6d379ae1671e9b333662325ef67 GIT binary patch literal 91122 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 literal 0 HcmV?d00001 diff --git a/docs/docs/better-tut/labs/lab3/images/five_stage_pipelined_CPU_structure.png b/docs/docs/better-tut/labs/lab3/images/five_stage_pipelined_CPU_structure.png new file mode 100644 index 0000000000000000000000000000000000000000..6000015ed17588f39f04e1adcd624bed28af97c1 GIT binary patch literal 80022 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 P@-72C6Wt1J^zHuvIO%Uu literal 0 HcmV?d00001 diff --git a/docs/docs/better-tut/labs/lab3/images/three_stage_pipelined_CPU_structure.png b/docs/docs/better-tut/labs/lab3/images/three_stage_pipelined_CPU_structure.png new file mode 100644 index 0000000000000000000000000000000000000000..69112914b6a2b4c7c971132fb612fe55a25df1ed GIT binary patch literal 68540 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 AzyJUM literal 0 HcmV?d00001 diff --git a/docs/docs/better-tut/labs/lab3/lab3-pipelined-cpu.md b/docs/docs/better-tut/labs/lab3/lab3-pipelined-cpu.md new file mode 100644 index 0000000..47238b4 --- /dev/null +++ b/docs/docs/better-tut/labs/lab3/lab3-pipelined-cpu.md @@ -0,0 +1,230 @@ +# 实验三 流水线 CPU + +在完成单周期 CPU 实验后,你已经对 CPU 的原理和结构已经有了基本的了解。但单周期的 CPU 设计中,关键路径太长,频率难以提升,并且每个时钟周期只能执行一条指令,指令吞吐率低。下面,我们将尝试使多条指令重叠执行(即流水线技术)来解决这个问题。 + +竞争冒险的处理是流水线 CPU 设计的难点和关键所在。在下面的实验中,我们首先设计一个简单的三级流水线 CPU(IF、ID 和 EX 三级),它只涉及分支和跳转指令带来的控制冒险,处理起来较为简单;然后,我们再将三级流水线 CPU 的 EX 级继续切分为 EX、MEM 和 WB,形成经典的五级流水线,这样做带来的数据冒险需要使用阻塞和转发技术进行处理;最后,我们将分支和跳转提前到 ID 阶段,进一步缩短分支延迟。 + +本实验中五级流水线 CPU 的架构与 *Computer Organization and Design, RISC-V Edition* 中的流水线 CPU 架构基本相同,读者可同时参考此书第 4.5~4.8 节。 + +在本实验中,你将学习到: + +- 使用流水线设计缩短关键路径 +- 正确处理流水线阻塞与清空 +- 使用转发逻辑减少流水线阻塞 + +不管使用 IDE 还是执行命令,根目录是 `lab3` 文件夹。 + + +## 流水线寄存器 + +流水线寄存器是在流水线中起缓存作用的寄存器,目的是切分组合逻辑,缩短关键路径。它的基本功能非常简单,在每一个时钟周期,根据复位(流水线清空)或阻塞(流水线暂停)的状态,将寄存器内容清空、保持或设置为新的值。寄存器的输出则是寄存器中保存的值。为了方便复用,我们可以定义一个带参数的 `PipelineRegister` 模块,用来实现不同数据位宽的流水线寄存器。 + +实验代码已经在 `src/main/scala/riscv/core/PipelineRegister.scala` 中定义好了模块接口:`stall` 和 `flush` 分别为流水线寄存器的阻塞和清空信号,`in` 和 `out` 分别为要写入寄存器的值和寄存器的当前值。 + +!!! note "实验任务: 实现流水线寄存器" + + 请你修改 `// Lab3(PipelineRegister)` 注释处的代码,使其能通过 `PipelineRegisterTest` 测试。 + + !!! tips "提示" + 在完成此题时你可以暂时抛开 CPU,只需要用实验零中的基础知识完成上述功能即可,最低所需代码不超过 7 行,请将它当作一道简单的开胃菜享用吧! + + + +## 三级流水线 + +下面是三级流水线 CPU 的结构图,数据通路用蓝线表示,控制信号用红线表示。 + +![three_stage_pipelined_CPU_structure](images/three_stage_pipelined_CPU_structure.png) + +我们用 `IF2ID` 和 `ID2EX` 这两组流水线寄存器将单周期 CPU 的组合逻辑部分切分为三个阶段: + +* 取指(Instruction Fetch,IF):根据 PC 中的指令地址从内存中取出指令码; +* 译码(Instruction Decode,ID):将指令码解码为控制信号并从寄存器组中读取操作数; +* 执行(Execute,EX):包括 ALU 运算、访问内存和结果写回。 + +这三个阶段的代码与单周期 CPU 大同小异,所以我已经帮你写好啦,接下来让我们把主要精力放在处理竞争冒险上。 + +### 解决控制冒险:清空 + +在三级流水线中,由于所有数据处理操作都在 EX 阶段进行,因此不存在数据冒险,我们只需要处理程序跳转带来的控制冒险。有三种情况可能发生程序跳转: + +* EX 段执行到跳转指令 +* EX 段执行到分支指令且分支条件成立 +* 发生中断,EX 段收到 CLINT 发来的 `InterruptAssert` 信号,这相当于在 EX 段的指令之上叠加了一条跳转指令,EX 段的指令继续执行,IF 段和 ID 段的指令将被丢弃 + +无论哪种情况,都是由 EX 段向 IF 段发送跳转信号 `jump_flag` 和跳转的目标地址 `jump_address`,但在 `jump_address` 写入 PC 并从该处取出指令前,流水线的 IF 和 ID 段已经各有两条不需要执行的指令,好在这两条指令的结果还没有写回,我们只需要清空对应的流水线寄存器,把它们变成两条空指令即可。 + +!!! note "实验任务:支持三级流水线的控制冒险" + + 我们用一个控制单元来检测控制冒险并清空流水线,模块定义在 `src/main/scala/riscv/core/threestage/Control.scala`,为了避免此题过于简单,我们没有提供模块接口,请根据以上分析确定模块的输入输出,在 `// Lab3(Flush)` 处将代码补充完整,并在 `src/main/scala/riscv/core/threestage/CPU.scala` 的 `// Lab3(Flush)` 处补充相关连线,使其能够通过 `ThreeStageCPUTest` 测试。 + + + + +## 五级流水线 + +在三级流水线中,执行阶段逻辑复杂,仍然可能导致较大的延迟。为了进一步缩短关键路径,我们可以扩展流水线级数,将执行阶段进一步分为 ALU 阶段、访存阶段以及写回阶段,如下图所示。 + +![five_stage_pipelined_CPU_structure](images/five_stage_pipelined_CPU_structure.png) + +把三级流水线进一步分割为五级流水线将带来更加复杂的**数据冒险**,下面我们将尝试使用阻塞的方式解决数据冒险,得到一个功能完整的五级流水线 CPU。接着我们可以使用旁路和将分支跳转提前到 ID 阶段进一步提升 CPU 效率,这两部分将作为拓展实验供同学们选做。注意,上面的 CPU 结构图是我们完成所有实验之后的结果,在完成“缩短分支延迟”实验之前,我们 CPU 的结构将与上图稍有不同。例如,我们紧接着讨论的五级流水线 CPU 在 EX 阶段判断程序是否发生跳转,而不是 ID 阶段。 + +### 解决数据冒险:阻塞 + +当处于 ID 阶段的指令要读取的寄存器依赖于 EX 或 MEM 阶段的指令时,发生数据冒险。此时,我们可以保持 IF 和 ID 两个阶段状态不变,直到被依赖的指令执行完成,即 ID 段能够从寄存器组获得它所需要的数据,再继续执行。让我们考虑如下指令序列,并思考几个问题: + +```assembly +0000: add x1, x0, x0 +0004: sub x2, x0, x1 +0008: and x3, x1, x2 +000C: jalr x4, x1, 0 +0010: or x5, x3, x4 +0014: xor x6, x4, x5 +``` + +假设没有阻塞,它们在流水线中的状态如下: + +| 时钟周期 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | +| :------: | :---: | :---: | :---: | :----: | :----: | :----: | :----: | +| **IF** | `add` | `sub` | `and` | `jalr` | `or` | `xor` | | +| **ID** | | `add` | `sub` | `and` | `jalr` | `or` | `xor` | +| **EX** | | | `add` | `sub` | `and` | `jalr` | `or` | +| **MEM** | | | | `add` | `sub` | `and` | `jalr` | +| **WB** | | | | | `add` | `sub` | `and` | + +1. 在第 2 个时钟周期,指令 `sub x2, x0, x1` 处于 ID 阶段,需要从寄存器组读出它的源操作数,但它的源操作数依赖于前一条指令,且前一条指令的结果还没有写回,需要阻塞;同理,在第 3 个时钟周期,指令 `and x3, x1, x2` 需要读取的源操作数依赖于前两条指令,也需要阻塞;但是这两条指令分别需要阻塞多少个时钟周期? +2. 在第 4 个时钟周期,指令 `jalr x4, x1, 0` 处于 ID 阶段,它的源操作数依赖于处于 WB 阶段的指令的结果,此时需不需要阻塞? +3. 最后两条指令的源操作数同样依赖于前面的指令,这两条指令需不需要阻塞? + +请你先思考片刻,下面我将给出阻塞后的流水线状态并作分析: + +| 时钟周期 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | +| :------: | :---: | :---: | :---: | :-------: | :-------: | :----: | :-------: | :-------: | :----: | :----: | :-------: | +| **IF** | `add` | `sub` | `and` | `and` | `and` | `jalr` | `jalr` | `jalr` | `or` | `xor` | `add` | +| **ID** | | `add` | `sub` | `sub` | `sub` | `and` | `and` | `and` | `jalr` | `or` | **`nop`** | +| **EX** | | | `add` | **`nop`** | **`nop`** | `sub` | **`nop`** | **`nop`** | `and` | `jalr` | **`nop`** | +| **MEM** | | | | `add` | `nop` | `nop` | `sub` | `nop` | `nop` | `and` | `jalr` | +| **WB** | | | | | `add` | `nop` | `nop` | `sub` | `nop` | `nop` | `and` | + +位于 ID 阶段的指令和位于 WB 阶段的指令之间不会发生数据冒险,这是因为我们的寄存器组模拟实现了 Double Pumping 功能,即 WB 阶段在前半个时钟周期向寄存器组写入数据,ID 阶段在后半个时钟周期从寄存器组读出数据,请你打开 `src/main/scala/riscv/core/RegisterFile` 查看相关代码。因此,在上面的例子中,对 `sub` 和 `and` 指令的阻塞只需持续到它们依赖的指令进入 WB 阶段即可,而 `jalr` 指令无需阻塞。值得注意的是,我们在阻塞 PC 和 IF2ID 寄存器以保持 IF 和 ID 阶段不变的同时,需要清空 ID2EX 寄存器以在 EX 阶段插入空指令(“气泡”),否则 ID 阶段的指令还是会进入 EX 阶段,这样就不是“阻塞”,而变成“重复”了。另外,`jalr` 是跳转指令,虽然它后面两条指令依赖于它写入的寄存器,但是它们本就不应该紧接着被执行,而是应该被清空,所以在第 10 个时钟周期应该清空 IF2ID 和 ID2EX 寄存器,而不是阻塞。(上表中加粗的 `nop` 表示因清空信号而插入的空指令,未加粗的 `nop` 表示从上一个流水段进入下一个流水段的空指令。) + +特别提示:除了以上讨论的情况之外,寄存器 `x0` 在 risc-v 中具有特殊作用,以它为目标寄存器的指令的结果将被丢弃、以它为输入寄存器的指令也不会在相应输入寄存器结果上产生依赖。 +也就是说,目标或输入寄存器为 `x0` 时,该寄存器的结果无需阻塞。借用这一特点,我们对判断依赖和产生阻塞时约定:一条指令至多涉及两个输入寄存器 `rs1` 和 `rs2` ,以及一个目标寄存器 `rd` 。若某一格式的指令不包含这些寄存器的某一个时,如 I-type 指令不含 `rs2`,由 Decoder 输出相应寄存器地址为 `0`,即 `x0` 。该约定不会影响指令的正确执行,其由 `ALUOpSource` 选择正确的输入,同时也不会使流水线控制错误产生阻塞。 + +!!! note "实验任务:用阻塞解决数据冒险" + + 我们在 `src/main/scala/riscv/core/fivestage_stall/InstructionDecode.scala` 中留下了相应接口,请根据上述约定使 ID 输出合适的寄存器地址,以供后续冒险分析。完成后应能通过 `DecoderStallTest` 测试。 + + 我们用一个控制单元来检测并解决控制冒险和数据冒险,模块接口已经定义在 `src/main/scala/riscv/core/fivestage_stall/Control.scala`,请根据以上分析,修改 `// Lab3(Stall)` 处的代码,使其能够通过 `FiveStageCPUStallTest` 测试。 + + + +### 拓展:使用旁路减少阻塞 + +至此,我们已经解决完所有竞争冒险,做出一个功能基本完整的五级流水线 CPU 了!但是,对同一个寄存器的连续操作在程序中是非常常见的,如果只使用阻塞来解决数据冒险,将产生大量“气泡”,降低执行效率。实际上,我们可以直接从流水线寄存器中直接获得指令的执行结果,并不需要阻塞直到前面的指令把结果写入寄存器组后再从寄存器组读取,即在 EX 段和 EX2MEM、MEM2WB 这两组流水线寄存器之间建立“旁路”,让 EX 段可以直接获取前面指令的执行结果。我们考虑如下指令序列: + +```assembly +0000: addi x1, x0, 1 +0004: sub x2, x0, x1 +0008: and x2, x1, x2 +000C: lw x2, 4(x2) +0010: or x3, x1, x2 +``` + +下表是建立了旁路后的流水线状态,我们增加了 EX2MEM 和 MEM2WB 两行用来表示暂存在流水线寄存器中的执行结果。 + +| 时钟周期 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | +| :------: | :----: | :----: | :----: | :--------: | :--------: | :-------: | :-------: | :-------: | +| **IF** | `addi` | `sub` | `and` | `lw` | `or` | | | | +| **ID** | | `addi` | `sub` | `and` | `lw` | `or` | | | +| **EX** | | | `addi` | `sub` | `and` | `lw` | `or` | `or` | +| EX2MEM | | | | `addi: x1` | `sub: x2` | `and: x2` | | | +| **MEM** | | | | `addi` | `sub` | `and` | `lw` | **`nop`** | +| MEM2WB | | | | | `addi: x1` | `sub: x2` | `and: x2` | `lw: x2` | +| **WB** | | | | | `addi` | `sub` | `and` | `lw` | + +虽然第二条指令 `sub x2, x0, x1` 依赖于前一条指令的执行结果,但是在第 3 个时钟周期,位于 EX 段的 `sub` 指令可以直接从 EX2MEM 寄存器中获取第一条指令执行后 `x1` 寄存器的值作为它的源操作数而无需阻塞;同样地,第三条指令依赖于前两条指令,在第 4 个时钟周期,位于 EX 段的 `and` 指令可以从 EX2MEM 和 MEM2WB 中获取它的源操作数。值得注意的是,在第 5 个时钟周期,EX2MEM 和 MEM2WB 中都存有 `x2` 的值,此时我们应该取“最新”的那个,也就是位于 EX2MEM 中的值。在第 6 个时钟周期,情况有些不同,因为第四条指令是 load 指令,它需要等到 MEM 阶段结束才能得到结果,因此处于 EX 段的 `or` 指令无法从 EX2MEM 中获取它的源操作数,必须阻塞一个时钟周期后从 MEM2WB 中获取。 + +!!! note "实验任务:用旁路减少阻塞" + + `InstructionDecode`中的实现与五级阻塞流水线CPU基本一致,你可以复制前面填好的内容。 + + 我们用一个控制单元来处理流水线的阻塞和清空,模块接口已经定义在 `src/main/scala/riscv/core/fivestage_forward/Control.scala`;再用一个旁路单元来检测数据冒险并发出旁路控制信号,模块接口已经定义在 `src/main/scala/riscv/core/fivestage_forward/Forwarding.scala`;另外,还需要在执行单元(`src/main/scala/riscv/core/fivestage_forward/Execute.scala`)中根据旁路单元的控制信号使用对应的旁路数据。请你根据以上分析修改上述三个模块中 `// Lab3(Forward)` 处的代码,使其能够通过 `FiveStageCPUForward` 测试。 + + 提示:你可以复用上道题中 `Control` 模块的部分代码;如果对模块接口中某个信号的功能有疑惑,可参考上面的 CPU 结构图,或做出你认为合理的修改并简要记录在报告中。 + + + +### 拓展:缩短分支延迟 + +我们已经利用旁路将数据冒险带来的损失降低到至多一个时钟周期了,但你也许对与目前流水线的效率还是不太满意,因为每次跳转都需要浪费两个时钟周期。接下来,我们往 CPU 中加入少量硬件,将分支/跳转指令的执行从 EX 段提前到 ID 段,进而把程序跳转的损失减少到一个时钟周期。 + +首先,我们需要把跳转的判断从 EX 段移到 ID 段;其次,跳转目标地址的计算是使用 EX 段的 ALU 进行的,因此我们需要给 ID 段增加一个加法器来计算目标地址;最后,我们需要添加额外的旁路逻辑,将前面指令的执行结果旁路到 ID 段给分支或跳转指令使用,如果所依赖的结果还没有产生,还需要进行阻塞。作为本实验的最后一题,我不再为你提供数据冒险的指令序列样例,请你自行考虑其他所有类型的指令与分支或跳转指令的搭配,找出其中的竞争冒险并进行解决。 + + +!!! note "实验任务:缩短分支延迟" + + `InstructionDecode`中的实现与五级阻塞流水线CPU基本一致,你可以复制前面填好的内容。 + + 我们已经为你定义好相关模块的接口并移除了 `Execute` 模块中分支和跳转的相关代码,请你修改 `src/main/scala/riscv/core/fivestage_final/InstructionDecode.scala`、`src/main/scala/riscv/core/fivestage_final/Control.scala` 和 `src/main/scala/riscv/core/fivestage_final/Forwarding.scala` 中 `// Lab3(Final)` 处的代码,使其能够通过 `FiveStageCPUFinal` 测试。你可以复制上道题中相应代码并作修改。 + + +### 提示:如何有效 debug + +五级流水线 CPU 已经较为复杂,实现过程中的小错误都有可能导致结果出错。本小节为您提供如何有效 debug 的提示。 + +debug 时应当从小和简单的内容开始,逐步排除再考虑更复杂的内容。基础的检查包括:检查是否有文件还没有填写实现代码(如ID的代码未从前一步复制过来)、检查是否有拼写错误,或错用名字相近的信号线 等。 + +排除这些后,再考虑更复杂的可能性,其中重要的一步是 **用最少的内容复现错误**,这样可以排除更多的无关变量。在五级流水线三个小实验的 CPUTest 中,最简单的测试是 “store and load single byte” 测试,其代码在 `csrc/sb.S`,仅十几条汇编指令。如果您的 CPU 在不能通过该测试,您可以通过这些方法排查错误: + +#### 打印 + +在一些关键部件处进行打印,如 + +```scala +class RegisterFile extends Module { + // ...... + // DEBUG + val debug_clk_cnt = RegInit(0.U(32.W)) + debug_clk_cnt := debug_clk_cnt + 1.U + when (io.write_enable) { + printf(cf"[Reg] at clock ${debug_clk_cnt} write to register ${io.write_address}: 0x${io.write_data}%x\n\n") + } +} +``` +其在寄存器写使能有效时,打印所写入的值。 +其中 `printf` 为 Chisel3 提供的打印函数, `cf` 为字符串插值器,可以在字符串里直观地打印,详见 [Printing in Chisel](https://www.chisel-lang.org/docs/explanations/printing)。 + +该方法需要找到某个容易看出错误根源的部件,如寄存器、MEM 等。 + +TODO:查看输出截图 + + +#### 查看波形图 + +可以用 GTKWave 查看波形图,并进行分析。TODO:GTKWave 教程。 + + +#### 充分利用提示 + +一般而言,本实验设计上不要求非常深入、复杂的 debug,因而会在部件的输入信号上予以提示,即不会引入多余的输入信号。您可以了解这些输入信号的含义,并查看其是否被您的代码利用上。 + +实验没有提供 `Control` 或 `Forwarding` 的单元测试,这是因为它们逻辑并不复杂,提供单元测试相当于给出了答案。为找出错误,可以按照如下框架进行思考:首先,五级流水线中,当前指令处于 EX 时,至多依赖于前两条指令,前面第三条指令已经完成并退出流水线; 同时依赖于前两条指令时,两条指令的目标寄存器是否相同 。其次,被依赖的指令可能在 EX 阶段得到其结果,也可能在 MEM 阶段得到。综合这两个维度,您应考虑其组合下的所有情况: + + +![考虑情况表](images/control_cases_table.png){width="80%",align=center} + + +上表适用于 Stall 和 Forwarding 两个小实验,对于缩短分支延迟,由于又在 ID 阶段引入了依赖,上表还需翻倍,分别对当前时钟周期下 ID 和 EX 阶段的指令进行讨论。 + +## 烧板验证 + +如果你已经完成了所有基础实验,那么你的 CPU 应该能够运行简单的程序,你可以通过 `Top` 模块中传入 `CPU` 模块构造函数的参数来选择你要使用的 CPU 版本:如果你只完成了基础实验,请选择 `ImplementationType.FiveStageStall`;如果你完成了第一个拓展实验,请选择 `ImplementationType.FiveStageForward`;如果你完成了第二个拓展实验,请选择 `ImplementationType.FiveStageFinal`。 + +--- + +## 实验报告 + +1. 简述您已实现的最复杂 CPU 的关键思路,包括 `Contrl` 和 `Forwarding`(如果有)的控制逻辑。 +2. 实验中没有特别讨论 CSR 指令的控制和数据冒险,请您简要分析 CSR 指令是否会产生上述冒险,并是否需要特别的处理措施。 +3. 说明您在完成实验的过程中,遇到的实验指导不足或改进建议。 diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 8556e18..49eb4b1 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -18,6 +18,7 @@ nav: - 实验: - better-tut/labs/lab1/lab1-single-cycle-cpu.md - better-tut/labs/lab2/lab2-interrupt.md + - better-tut/labs/lab3/lab3-pipelined-cpu.md diff --git a/lab1/src/main/scala/board/verilator/Top.scala b/lab1/src/main/scala/board/verilator/Top.scala index d4bcf06..bade215 100644 --- a/lab1/src/main/scala/board/verilator/Top.scala +++ b/lab1/src/main/scala/board/verilator/Top.scala @@ -24,20 +24,20 @@ class Top extends Module { val io = IO(new CPUBundle) val cpu = Module(new CPU) - - io.deviceSelect := 0.U cpu.io.debug_read_address := io.debug_read_address io.debug_read_data := cpu.io.debug_read_data + // intercept UART signals + io.deviceSelect := cpu.io.deviceSelect + + // CPU instruction input is controlled by external codes io.memory_bundle <> cpu.io.memory_bundle io.instruction_address := cpu.io.instruction_address cpu.io.instruction := io.instruction - cpu.io.instruction_valid := io.instruction_valid - } object VerilogGenerator extends App { (new ChiselStage).execute(Array("-X", "verilog", "-td", "verilog/verilator"), Seq(ChiselGeneratorAnnotation(() => new Top()))) -} \ No newline at end of file +} diff --git a/lab1/src/main/scala/board/z710/Top.scala b/lab1/src/main/scala/board/z710/Top.scala index 8b3138c..4f736f2 100644 --- a/lab1/src/main/scala/board/z710/Top.scala +++ b/lab1/src/main/scala/board/z710/Top.scala @@ -92,6 +92,11 @@ class Top(binaryFilename: String = "say_goodbye.asmbin") extends Module { rom_loader.io.bundle.read_data := 0.U cpu.io.memory_bundle <> mem.io.bundle } + + when (uart.io.bundle.write_enable) { + val the_char = cpu.io.memory_bundle.write_data(7, 0) + printf(cf"${the_char.asUInt}%c") + } } // LED, blinks every second diff --git a/lab1/src/main/scala/board/z710v1.3/Top.scala b/lab1/src/main/scala/board/z710v1.3/Top.scala index 8744371..47e9100 100644 --- a/lab1/src/main/scala/board/z710v1.3/Top.scala +++ b/lab1/src/main/scala/board/z710v1.3/Top.scala @@ -91,6 +91,11 @@ class Top(binaryFilename: String = "say_goodbye.asmbin") extends Module { rom_loader.io.bundle.read_data := 0.U cpu.io.memory_bundle <> mem.io.bundle } + + when (uart.io.bundle.write_enable) { + val the_char = cpu.io.memory_bundle.write_data(7, 0) + printf(cf"${the_char.asUInt}%c") + } } // LED, blinks every second diff --git a/lab1/verilog/verilator/sim_main.cpp b/lab1/verilog/verilator/sim_main.cpp index 78c9df5..b9c0f9b 100644 --- a/lab1/verilog/verilator/sim_main.cpp +++ b/lab1/verilog/verilator/sim_main.cpp @@ -19,7 +19,7 @@ class Memory { uint32_t read(size_t address) { address = address / 4; if (address >= memory.size()) { -// printf("invalid read address 0x%08x\n", address * 4); + printf("invalid read address 0x%08x\n", address * 4); return 0; } @@ -29,8 +29,8 @@ class Memory { uint32_t readInst(size_t address) { address = address / 4; if (address >= memory.size()) { -// printf("invalid read Inst address 0x%08x\n", address * 4); - return 0; + printf("invalid read Inst address 0x%08x\n", address * 4); + return 0; } return memory[address]; @@ -44,7 +44,7 @@ class Memory { if (write_strobe[2]) write_mask |= 0x00FF0000; if (write_strobe[3]) write_mask |= 0xFF000000; if (address >= memory.size()) { -// printf("invalid write address 0x%08x\n", address * 4); + printf("invalid write address 0x%08x\n", address * 4); return; } memory[address] = (memory[address] & ~write_mask) | (value & write_mask); @@ -133,12 +133,12 @@ class Simulator { if (auto it = std::find(args.begin(), args.end(), "-memory"); it != args.end()) { - memory_words = std::stoul(*(it + 1)); + memory_words = std::stoull(*(it + 1)); } if (auto it = std::find(args.begin(), args.end(), "-time"); it != args.end()) { - max_sim_time = std::stoul(*(it + 1)); + max_sim_time = std::stoull(*(it + 1)); } if (auto it = std::find(args.begin(), args.end(), "-vcd"); @@ -177,9 +177,10 @@ class Simulator { vcd_tracer->dump(main_time); uint32_t data_memory_read_word = 0; uint32_t inst_memory_read_word = 0; - uint32_t counter = 0; - uint32_t clocktime = 1; + uint32_t counter = 0; + uint32_t clocktime = 1; bool memory_write_strobe[4] = {false}; + int uart_write_time_counter = 0, uart_write_time_limit = 4; // every limit, an UART write completes; this is tricky part while (main_time < max_sim_time && !Verilated::gotFinish()) { ++main_time; ++counter; @@ -190,18 +191,23 @@ class Simulator { if (main_time > 2) { top->reset = 0; } -// top->io_mem_slave_read_data = memory_read_word; + // top->io_mem_slave_read_data = memory_read_word; top->io_instruction_valid = 1; top->io_memory_bundle_read_data = data_memory_read_word; top->io_instruction = inst_memory_read_word; top->clock = !top->clock; top->eval(); + if (top->io_deviceSelect == 2 && top->io_memory_bundle_write_enable) { + if (uart_write_time_counter == 0) std::cout << (char)top->io_memory_bundle_write_data << std::flush; // Output to UART + uart_write_time_counter = (uart_write_time_counter + 1) % uart_write_time_limit; + } + else { + uart_write_time_counter = 0; + } - data_memory_read_word = memory->read(top->io_memory_bundle_address); - - - inst_memory_read_word = memory->readInst(top->io_instruction_address); + data_memory_read_word = memory->read(top->io_memory_bundle_address); + inst_memory_read_word = memory->readInst(top->io_instruction_address); if (top->io_memory_bundle_write_enable) { memory_write_strobe[0] = top->io_memory_bundle_write_strobe_0; @@ -217,6 +223,11 @@ class Simulator { break; } } + + // print simulation progress in percentage every 1% + if (main_time % (max_sim_time / 100) == 0) { + std::cout << "Simulation progress: " << (main_time * 100 / max_sim_time) << "%" << std::endl; + } } if (dump_signature) { diff --git a/lab2/src/main/scala/board/verilator/Top.scala b/lab2/src/main/scala/board/verilator/Top.scala index 7f353e4..20c0fce 100644 --- a/lab2/src/main/scala/board/verilator/Top.scala +++ b/lab2/src/main/scala/board/verilator/Top.scala @@ -24,22 +24,24 @@ class Top extends Module { val io = IO(new CPUBundle) val cpu = Module(new CPU) - - io.deviceSelect := 0.U cpu.io.regs_debug_read_address := io.regs_debug_read_address cpu.io.csr_regs_debug_read_address := io.csr_regs_debug_read_address io.csr_regs_debug_read_data := cpu.io.csr_regs_debug_read_data io.regs_debug_read_data := cpu.io.regs_debug_read_data + // intercept UART signals + io.deviceSelect := cpu.io.deviceSelect + + // CPU instruction input is controlled by external codes io.memory_bundle <> cpu.io.memory_bundle io.instruction_address := cpu.io.instruction_address cpu.io.instruction := io.instruction + cpu.io.instruction_valid := io.instruction_valid cpu.io.interrupt_flag := io.interrupt_flag - cpu.io.instruction_valid := io.instruction_valid } object VerilogGenerator extends App { (new ChiselStage).execute(Array("-X", "verilog", "-td", "verilog/verilator"), Seq(ChiselGeneratorAnnotation(() => new Top()))) -} \ No newline at end of file +} diff --git a/lab2/src/main/scala/board/z710/Top.scala b/lab2/src/main/scala/board/z710/Top.scala index 0563484..66754f3 100644 --- a/lab2/src/main/scala/board/z710/Top.scala +++ b/lab2/src/main/scala/board/z710/Top.scala @@ -83,6 +83,11 @@ class Top(binaryFilename: String = "say_goodbye.asmbin") extends Module { cpu.io.memory_bundle <> mem.io.bundle } } + + when (uart.io.bundle.write_enable) { + val the_char = cpu.io.memory_bundle.write_data(7, 0) + printf(cf"${the_char.asUInt}%c") + } } // LED, blinks every second diff --git a/lab2/src/main/scala/board/z710v1.3/Top.scala b/lab2/src/main/scala/board/z710v1.3/Top.scala index 3a3807e..b1ce93c 100644 --- a/lab2/src/main/scala/board/z710v1.3/Top.scala +++ b/lab2/src/main/scala/board/z710v1.3/Top.scala @@ -95,6 +95,11 @@ class Top(binaryFilename: String = "say_goodbye.asmbin") extends Module { rom_loader.io.bundle.read_data := 0.U cpu.io.memory_bundle <> mem.io.bundle } + + when (uart.io.bundle.write_enable) { + val the_char = cpu.io.memory_bundle.write_data(7, 0) + printf(cf"${the_char.asUInt}%c") + } } // LED, blinks every second diff --git a/lab2/verilog/verilator/sim_main.cpp b/lab2/verilog/verilator/sim_main.cpp index aa1dcab..9e3e83b 100644 --- a/lab2/verilog/verilator/sim_main.cpp +++ b/lab2/verilog/verilator/sim_main.cpp @@ -19,7 +19,7 @@ class Memory { uint32_t read(size_t address) { address = address / 4; if (address >= memory.size()) { -// printf("invalid read address 0x%08x\n", address * 4); + printf("invalid read address 0x%08x\n", address * 4); return 0; } @@ -29,8 +29,8 @@ class Memory { uint32_t readInst(size_t address) { address = address / 4; if (address >= memory.size()) { -// printf("invalid read Inst address 0x%08x\n", address * 4); - return 0; + printf("invalid read Inst address 0x%08x\n", address * 4); + return 0; } return memory[address]; @@ -44,7 +44,7 @@ class Memory { if (write_strobe[2]) write_mask |= 0x00FF0000; if (write_strobe[3]) write_mask |= 0xFF000000; if (address >= memory.size()) { -// printf("invalid write address 0x%08x\n", address * 4); + printf("invalid write address 0x%08x\n", address * 4); return; } memory[address] = (memory[address] & ~write_mask) | (value & write_mask); @@ -133,12 +133,12 @@ class Simulator { if (auto it = std::find(args.begin(), args.end(), "-memory"); it != args.end()) { - memory_words = std::stoul(*(it + 1)); + memory_words = std::stoull(*(it + 1)); } if (auto it = std::find(args.begin(), args.end(), "-time"); it != args.end()) { - max_sim_time = std::stoul(*(it + 1)); + max_sim_time = std::stoull(*(it + 1)); } if (auto it = std::find(args.begin(), args.end(), "-vcd"); @@ -179,9 +179,10 @@ class Simulator { uint32_t data_memory_read_word = 0; uint32_t inst_memory_read_word = 0; uint32_t timer_interrupt = 0; - uint32_t counter = 0; - uint32_t clocktime = 1; + uint32_t counter = 0; + uint32_t clocktime = 1; bool memory_write_strobe[4] = {false}; + int uart_write_time_counter = 0, uart_write_time_limit = 4; // every limit, an UART write completes; this is tricky part while (main_time < max_sim_time && !Verilated::gotFinish()) { ++main_time; ++counter; @@ -192,17 +193,23 @@ class Simulator { if (main_time > 2) { top->reset = 0; } -// top->io_mem_slave_read_data = memory_read_word; + // top->io_mem_slave_read_data = memory_read_word; top->io_memory_bundle_read_data = data_memory_read_word; top->io_instruction = inst_memory_read_word; top->clock = !top->clock; top->eval(); top->io_interrupt_flag = 0; - data_memory_read_word = memory->read(top->io_memory_bundle_address); + if (top->io_deviceSelect == 2 && top->io_memory_bundle_write_enable) { + if (uart_write_time_counter == 0) std::cout << (char)top->io_memory_bundle_write_data << std::flush; // Output to UART + uart_write_time_counter = (uart_write_time_counter + 1) % uart_write_time_limit; + } + else { + uart_write_time_counter = 0; + } - - inst_memory_read_word = memory->readInst(top->io_instruction_address); + data_memory_read_word = memory->read(top->io_memory_bundle_address); + inst_memory_read_word = memory->readInst(top->io_instruction_address); if (top->io_memory_bundle_write_enable) { memory_write_strobe[0] = top->io_memory_bundle_write_strobe_0; @@ -218,6 +225,11 @@ class Simulator { break; } } + + // print simulation progress in percentage every 1% + if (main_time % (max_sim_time / 100) == 0) { + std::cout << "Simulation progress: " << (main_time * 100 / max_sim_time) << "%" << std::endl; + } } if (dump_signature) { diff --git a/lab3/src/main/scala/board/verilator/Top.scala b/lab3/src/main/scala/board/verilator/Top.scala index d685959..1927588 100644 --- a/lab3/src/main/scala/board/verilator/Top.scala +++ b/lab3/src/main/scala/board/verilator/Top.scala @@ -23,17 +23,19 @@ class Top extends Module { val io = IO(new CPUBundle) val cpu = Module(new CPU(implementation = ImplementationType.ThreeStage)) - - io.device_select := 0.U cpu.io.debug_read_address := io.debug_read_address io.debug_read_data := cpu.io.debug_read_data + // intercept UART signals + io.device_select := cpu.io.device_select + + // CPU instruction input is controlled by external codes io.memory_bundle <> cpu.io.memory_bundle io.instruction_address := cpu.io.instruction_address cpu.io.instruction := io.instruction + cpu.io.instruction_valid := io.instruction_valid cpu.io.interrupt_flag := io.interrupt_flag - cpu.io.instruction_valid := io.instruction_valid } object VerilogGenerator extends App { diff --git a/lab3/src/main/scala/board/z710/Top.scala b/lab3/src/main/scala/board/z710/Top.scala index 7b9ee16..2ef9155 100644 --- a/lab3/src/main/scala/board/z710/Top.scala +++ b/lab3/src/main/scala/board/z710/Top.scala @@ -82,6 +82,11 @@ class Top(binaryFilename: String = "say_goodbye.asmbin") extends Module { cpu.io.memory_bundle <> mem.io.bundle } } + + when (uart.io.bundle.write_enable) { + val the_char = cpu.io.memory_bundle.write_data(7, 0) + printf(cf"${the_char.asUInt}%c") + } } // LED, blinks every second diff --git a/lab3/src/main/scala/board/z710v1.3/Top.scala b/lab3/src/main/scala/board/z710v1.3/Top.scala index 834c50a..c3a76df 100644 --- a/lab3/src/main/scala/board/z710v1.3/Top.scala +++ b/lab3/src/main/scala/board/z710v1.3/Top.scala @@ -81,6 +81,11 @@ class Top(binaryFilename: String = "say_goodbye.asmbin") extends Module { cpu.io.memory_bundle <> mem.io.bundle } } + + when (uart.io.bundle.write_enable) { + val the_char = cpu.io.memory_bundle.write_data(7, 0) + printf(cf"${the_char.asUInt}%c") + } } // LED, blinks every second diff --git a/lab3/src/main/scala/riscv/core/fivestage_final/CPU.scala b/lab3/src/main/scala/riscv/core/fivestage_final/CPU.scala index 2629ba4..acc51e8 100644 --- a/lab3/src/main/scala/riscv/core/fivestage_final/CPU.scala +++ b/lab3/src/main/scala/riscv/core/fivestage_final/CPU.scala @@ -61,8 +61,8 @@ class CPU extends Module { inst_fetch.io.rom_instruction := io.instruction inst_fetch.io.instruction_valid := io.instruction_valid - if2id.io.stall := ctrl.io.if_stall - if2id.io.flush := ctrl.io.if_flush + if2id.io.stall := ctrl.io.if2id_stall + if2id.io.flush := ctrl.io.if2id_flush if2id.io.instruction := inst_fetch.io.id_instruction if2id.io.instruction_address := inst_fetch.io.instruction_address if2id.io.interrupt_flag := io.interrupt_flag @@ -78,7 +78,7 @@ class CPU extends Module { id.io.interrupt_assert := clint.io.id_interrupt_assert id.io.interrupt_handler_address := clint.io.id_interrupt_handler_address - id2ex.io.flush := ctrl.io.id_flush + id2ex.io.flush := ctrl.io.id2ex_flush id2ex.io.instruction := if2id.io.output_instruction id2ex.io.instruction_address := if2id.io.output_instruction_address id2ex.io.reg1_data := regs.io.read_data1 diff --git a/lab3/src/main/scala/riscv/core/fivestage_final/Control.scala b/lab3/src/main/scala/riscv/core/fivestage_final/Control.scala index b8b9579..b4b6ade 100644 --- a/lab3/src/main/scala/riscv/core/fivestage_final/Control.scala +++ b/lab3/src/main/scala/riscv/core/fivestage_final/Control.scala @@ -28,16 +28,16 @@ class Control extends Module { val memory_read_enable_mem = Input(Bool()) val rd_mem = Input(UInt(Parameters.PhysicalRegisterAddrWidth)) - val if_flush = Output(Bool()) - val id_flush = Output(Bool()) + val if2id_flush = Output(Bool()) + val id2ex_flush = Output(Bool()) val pc_stall = Output(Bool()) - val if_stall = Output(Bool()) + val if2id_stall = Output(Bool()) }) // Lab3(Final) - io.if_flush := false.B - io.id_flush := false.B + io.if2id_flush := false.B + io.id2ex_flush := false.B io.pc_stall := false.B - io.if_stall := false.B + io.if2id_stall := false.B // Lab3(Final) End } diff --git a/lab3/src/main/scala/riscv/core/fivestage_final/InstructionDecode.scala b/lab3/src/main/scala/riscv/core/fivestage_final/InstructionDecode.scala index 3fb1f5e..11a92f2 100644 --- a/lab3/src/main/scala/riscv/core/fivestage_final/InstructionDecode.scala +++ b/lab3/src/main/scala/riscv/core/fivestage_final/InstructionDecode.scala @@ -170,8 +170,10 @@ class InstructionDecode extends Module { val rs1 = io.instruction(19, 15) val rs2 = io.instruction(24, 20) - io.regs_reg1_read_address := Mux(opcode === Instructions.lui, 0.U(Parameters.PhysicalRegisterAddrWidth), rs1) + // Lab3(Final) ID rs + io.regs_reg1_read_address := rs1 io.regs_reg2_read_address := rs2 + // Lab3(Final) ID rs End io.ex_immediate := MuxLookup( opcode, Cat(Fill(20, io.instruction(31)), io.instruction(31, 20)), @@ -208,10 +210,10 @@ class InstructionDecode extends Module { Instructions.jalr -> RegWriteSource.NextInstructionAddress ) ) - io.ex_reg_write_enable := (opcode === InstructionTypes.RM) || (opcode === InstructionTypes.I) || - (opcode === InstructionTypes.L) || (opcode === Instructions.auipc) || (opcode === Instructions.lui) || - (opcode === Instructions.jal) || (opcode === Instructions.jalr) || (opcode === Instructions.csr) - io.ex_reg_write_address := io.instruction(11, 7) + // Lab3(Final) ID rd + io.ex_reg_write_enable := false.B + io.ex_reg_write_address := rd + // Lab3(Final) ID rd End io.ex_csr_address := io.instruction(31, 20) io.ex_csr_write_enable := (opcode === Instructions.csr) && ( funct3 === InstructionsTypeCSR.csrrw || funct3 === InstructionsTypeCSR.csrrwi || diff --git a/lab3/src/main/scala/riscv/core/fivestage_forward/CPU.scala b/lab3/src/main/scala/riscv/core/fivestage_forward/CPU.scala index 7946b60..2637fe6 100644 --- a/lab3/src/main/scala/riscv/core/fivestage_forward/CPU.scala +++ b/lab3/src/main/scala/riscv/core/fivestage_forward/CPU.scala @@ -58,15 +58,15 @@ class CPU extends Module { inst_fetch.io.rom_instruction := io.instruction inst_fetch.io.instruction_valid := io.instruction_valid - if2id.io.stall := ctrl.io.if_stall - if2id.io.flush := ctrl.io.if_flush + if2id.io.stall := ctrl.io.if2id_stall + if2id.io.flush := ctrl.io.if2id_flush if2id.io.instruction := inst_fetch.io.id_instruction if2id.io.instruction_address := inst_fetch.io.instruction_address if2id.io.interrupt_flag := io.interrupt_flag id.io.instruction := if2id.io.output_instruction - id2ex.io.flush := ctrl.io.id_flush + id2ex.io.flush := ctrl.io.id2ex_flush id2ex.io.instruction := if2id.io.output_instruction id2ex.io.instruction_address := if2id.io.output_instruction_address id2ex.io.reg1_data := regs.io.read_data1 diff --git a/lab3/src/main/scala/riscv/core/fivestage_forward/Control.scala b/lab3/src/main/scala/riscv/core/fivestage_forward/Control.scala index 9c71aaa..4ce092a 100644 --- a/lab3/src/main/scala/riscv/core/fivestage_forward/Control.scala +++ b/lab3/src/main/scala/riscv/core/fivestage_forward/Control.scala @@ -25,16 +25,16 @@ class Control extends Module { val memory_read_enable_ex = Input(Bool()) val rd_ex = Input(UInt(Parameters.PhysicalRegisterAddrWidth)) - val if_flush = Output(Bool()) - val id_flush = Output(Bool()) + val if2id_flush = Output(Bool()) + val id2ex_flush = Output(Bool()) val pc_stall = Output(Bool()) - val if_stall = Output(Bool()) + val if2id_stall = Output(Bool()) }) // Lab3(Forward) - io.if_flush := false.B - io.id_flush := false.B + io.if2id_flush := false.B + io.id2ex_flush := false.B io.pc_stall := false.B - io.if_stall := false.B + io.if2id_stall := false.B // Lab3(Forward) End } diff --git a/lab3/src/main/scala/riscv/core/fivestage_forward/InstructionDecode.scala b/lab3/src/main/scala/riscv/core/fivestage_forward/InstructionDecode.scala index 8abb0ea..4be4a03 100644 --- a/lab3/src/main/scala/riscv/core/fivestage_forward/InstructionDecode.scala +++ b/lab3/src/main/scala/riscv/core/fivestage_forward/InstructionDecode.scala @@ -156,8 +156,10 @@ class InstructionDecode extends Module { val rs1 = io.instruction(19, 15) val rs2 = io.instruction(24, 20) - io.regs_reg1_read_address := Mux(opcode === Instructions.lui, 0.U(Parameters.PhysicalRegisterAddrWidth), rs1) + // Lab3(Forwarding) ID rs + io.regs_reg1_read_address := rs1 io.regs_reg2_read_address := rs2 + // Lab3(Forwarding) ID rs End io.ex_immediate := MuxLookup( opcode, Cat(Fill(20, io.instruction(31)), io.instruction(31, 20)), @@ -194,10 +196,10 @@ class InstructionDecode extends Module { Instructions.jalr -> RegWriteSource.NextInstructionAddress ) ) - io.ex_reg_write_enable := (opcode === InstructionTypes.RM) || (opcode === InstructionTypes.I) || - (opcode === InstructionTypes.L) || (opcode === Instructions.auipc) || (opcode === Instructions.lui) || - (opcode === Instructions.jal) || (opcode === Instructions.jalr) || (opcode === Instructions.csr) - io.ex_reg_write_address := io.instruction(11, 7) + // Lab3(Forwarding) ID rd + io.ex_reg_write_enable := false.B + io.ex_reg_write_address := rd + // Lab3(Forwarding) ID rd End io.ex_csr_address := io.instruction(31, 20) io.ex_csr_write_enable := (opcode === Instructions.csr) && ( funct3 === InstructionsTypeCSR.csrrw || funct3 === InstructionsTypeCSR.csrrwi || diff --git a/lab3/src/main/scala/riscv/core/fivestage_stall/CPU.scala b/lab3/src/main/scala/riscv/core/fivestage_stall/CPU.scala index 16a85f8..7baf3d8 100644 --- a/lab3/src/main/scala/riscv/core/fivestage_stall/CPU.scala +++ b/lab3/src/main/scala/riscv/core/fivestage_stall/CPU.scala @@ -59,15 +59,15 @@ class CPU extends Module { inst_fetch.io.rom_instruction := io.instruction inst_fetch.io.instruction_valid := io.instruction_valid - if2id.io.stall := ctrl.io.if_stall - if2id.io.flush := ctrl.io.if_flush + if2id.io.stall := ctrl.io.if2id_stall + if2id.io.flush := ctrl.io.if2id_flush if2id.io.instruction := inst_fetch.io.id_instruction if2id.io.instruction_address := inst_fetch.io.instruction_address if2id.io.interrupt_flag := io.interrupt_flag id.io.instruction := if2id.io.output_instruction - id2ex.io.flush := ctrl.io.id_flush + id2ex.io.flush := ctrl.io.id2ex_flush id2ex.io.instruction := if2id.io.output_instruction id2ex.io.instruction_address := if2id.io.output_instruction_address id2ex.io.reg1_data := regs.io.read_data1 diff --git a/lab3/src/main/scala/riscv/core/fivestage_stall/Control.scala b/lab3/src/main/scala/riscv/core/fivestage_stall/Control.scala index d084e03..518e8b5 100644 --- a/lab3/src/main/scala/riscv/core/fivestage_stall/Control.scala +++ b/lab3/src/main/scala/riscv/core/fivestage_stall/Control.scala @@ -27,17 +27,17 @@ class Control extends Module { val rd_mem = Input(UInt(Parameters.PhysicalRegisterAddrWidth)) val reg_write_enable_mem = Input(Bool()) - val if_flush = Output(Bool()) - val id_flush = Output(Bool()) + val if2id_flush = Output(Bool()) + val id2ex_flush = Output(Bool()) val pc_stall = Output(Bool()) - val if_stall = Output(Bool()) + val if2id_stall = Output(Bool()) }) // Lab3(Stall) - io.if_flush := false.B - io.id_flush := false.B + io.if2id_flush := false.B + io.id2ex_flush := false.B io.pc_stall := false.B - io.if_stall := false.B + io.if2id_stall := false.B // Lab3(Stall) End } diff --git a/lab3/src/main/scala/riscv/core/fivestage_stall/InstructionDecode.scala b/lab3/src/main/scala/riscv/core/fivestage_stall/InstructionDecode.scala index e5e0549..4edffb4 100644 --- a/lab3/src/main/scala/riscv/core/fivestage_stall/InstructionDecode.scala +++ b/lab3/src/main/scala/riscv/core/fivestage_stall/InstructionDecode.scala @@ -156,8 +156,10 @@ class InstructionDecode extends Module { val rs1 = io.instruction(19, 15) val rs2 = io.instruction(24, 20) - io.regs_reg1_read_address := Mux(opcode === Instructions.lui, 0.U(Parameters.PhysicalRegisterAddrWidth), rs1) + // Lab3(Stall) ID rs + io.regs_reg1_read_address := rs1 io.regs_reg2_read_address := rs2 + // Lab3(Stall) ID rs End io.ex_immediate := MuxLookup( opcode, Cat(Fill(20, io.instruction(31)), io.instruction(31, 20)), @@ -194,10 +196,10 @@ class InstructionDecode extends Module { Instructions.jalr -> RegWriteSource.NextInstructionAddress ) ) - io.ex_reg_write_enable := (opcode === InstructionTypes.RM) || (opcode === InstructionTypes.I) || - (opcode === InstructionTypes.L) || (opcode === Instructions.auipc) || (opcode === Instructions.lui) || - (opcode === Instructions.jal) || (opcode === Instructions.jalr) || (opcode === Instructions.csr) - io.ex_reg_write_address := io.instruction(11, 7) + // Lab3(Stall) ID rd + io.ex_reg_write_enable := false.B + io.ex_reg_write_address := rd + // Lab3(Stall) ID rd End io.ex_csr_address := io.instruction(31, 20) io.ex_csr_write_enable := (opcode === Instructions.csr) && ( funct3 === InstructionsTypeCSR.csrrw || funct3 === InstructionsTypeCSR.csrrwi || diff --git a/lab3/src/test/scala/riscv/FiveStageCPUForwardTest.scala b/lab3/src/test/scala/riscv/FiveStageCPUForwardTest.scala index e6530ef..e529188 100644 --- a/lab3/src/test/scala/riscv/FiveStageCPUForwardTest.scala +++ b/lab3/src/test/scala/riscv/FiveStageCPUForwardTest.scala @@ -71,3 +71,4 @@ class FiveStageCPUForwardTest extends AnyFlatSpec with ChiselScalatestTester { } } } + diff --git a/lab3/src/test/scala/riscv/FiveStageCPUStallTest.scala b/lab3/src/test/scala/riscv/FiveStageCPUStallTest.scala index 078e380..00dcaf9 100644 --- a/lab3/src/test/scala/riscv/FiveStageCPUStallTest.scala +++ b/lab3/src/test/scala/riscv/FiveStageCPUStallTest.scala @@ -17,6 +17,8 @@ package riscv import chisel3._ import chiseltest._ import org.scalatest.flatspec.AnyFlatSpec +import scala.util.Random +import riscv.core.fivestage_stall._ class FiveStageCPUStallTest extends AnyFlatSpec with ChiselScalatestTester { @@ -71,3 +73,86 @@ class FiveStageCPUStallTest extends AnyFlatSpec with ChiselScalatestTester { } } } + + + +class DecoderStallTest extends AnyFlatSpec with ChiselScalatestTester { + behavior of "ID of Five-stage Pipelined CPU with Stalling" + + def concatBits(values: (Int, Int)*): Int = { + values.foldLeft(0) { case (result, (value, bits)) => + val mask = (1 << bits) - 1 // Create mask for the specified bit width + val maskedValue = value & mask // Ensure value fits in specified bits + (result << bits) | maskedValue + } + } + + it should "generate correct reg addr" in { + test(new InstructionDecode).withAnnotations(TestAnnotations.annos) { c => + + for (i <- 0 to 100) { + val rs1 = Random.nextInt(32) + val rs2 = Random.nextInt(32) + val rd = Random.nextInt(32) + + // for R-type instructions, rs2, rs1 and rd should be valid + // val instR = 0.U(7.W) ## rs2 ## rs1 ## 1.U(3.W) ## rd ## InstructionTypes.RM + val instR = concatBits( + (0, 7), (rs2, 5), (rs1, 5), (1, 3), (rd, 5), (InstructionTypes.RM.litValue.toInt, 7) + ) + c.io.instruction.poke(instR) + c.io.regs_reg1_read_address.expect(rs1) + c.io.regs_reg2_read_address.expect(rs2) + c.io.ex_reg_write_address.expect(rd) + c.io.ex_reg_write_enable.expect(true.B) + c.clock.step() + + // for I-type instructions, rs1 and rd should be valid + val instI = concatBits((0, 12), (rs1, 5), (1, 3), (rd, 5), (InstructionTypes.I.litValue.toInt, 7)) + c.io.instruction.poke(instI) + c.io.regs_reg1_read_address.expect(rs1) + c.io.regs_reg2_read_address.expect(0.U) + c.io.ex_reg_write_address.expect(rd) + c.io.ex_reg_write_enable.expect(true.B) + c.clock.step() + + // for S-type instructions, rs2 and rs1 should be valid + val instS = concatBits((0, 7), (rs2, 5), (rs1, 5), (1, 3), (2, 5), (InstructionTypes.S.litValue.toInt, 7)) + c.io.instruction.poke(instS) + c.io.regs_reg1_read_address.expect(rs1) + c.io.regs_reg2_read_address.expect(rs2) + c.io.ex_reg_write_address.expect(0.U) + c.io.ex_reg_write_enable.expect(false.B) + c.clock.step() + + // for B-type instructions, rs2 and rs1 should be valid + val instB = concatBits((0, 7), (rs2, 5), (rs1, 5), (1, 3), (2, 5), (InstructionTypes.B.litValue.toInt, 7)) + c.io.instruction.poke(instB) + c.io.regs_reg1_read_address.expect(rs1) + c.io.regs_reg2_read_address.expect(rs2) + c.io.ex_reg_write_address.expect(0.U) + c.io.ex_reg_write_enable.expect(false.B) + c.clock.step() + + // for U-type instructions, rd should be valid + val instU = concatBits((0, 20), (rd, 5), (Instructions.lui.litValue.toInt, 7)) + c.io.instruction.poke(instU) + c.io.regs_reg1_read_address.expect(0.U) + c.io.regs_reg2_read_address.expect(0.U) + c.io.ex_reg_write_address.expect(rd) + c.io.ex_reg_write_enable.expect(true.B) + c.clock.step() + + // for J-type instructions, rd should be valid + val instJ = concatBits((0, 20), (rd, 5), (Instructions.jal.litValue.toInt, 7)) + c.io.instruction.poke(instJ) + c.io.regs_reg1_read_address.expect(0.U) + c.io.regs_reg2_read_address.expect(0.U) + c.io.ex_reg_write_address.expect(rd) + c.io.ex_reg_write_enable.expect(true.B) + c.clock.step() + } + } + } + +} diff --git a/lab3/verilog/verilator/sim_main.cpp b/lab3/verilog/verilator/sim_main.cpp index d216137..ffeea56 100644 --- a/lab3/verilog/verilator/sim_main.cpp +++ b/lab3/verilog/verilator/sim_main.cpp @@ -20,7 +20,7 @@ class Memory { uint32_t read(size_t address) { address = address / 4; if (address >= memory.size()) { -// printf("invalid read address 0x%08x\n", address * 4); + printf("invalid read address 0x%08x\n", address * 4); return 0; } return memory[address]; @@ -29,8 +29,8 @@ class Memory { uint32_t readInst(size_t address) { address = address / 4; if (address >= memory.size()) { -// printf("invalid read Inst address 0x%08x\n", address * 4); - return 0; + printf("invalid read Inst address 0x%08x\n", address * 4); + return 0; } return memory[address]; @@ -44,7 +44,7 @@ class Memory { if (write_strobe[2]) write_mask |= 0x00FF0000; if (write_strobe[3]) write_mask |= 0xFF000000; if (address >= memory.size()) { -// printf("invalid write address 0x%08x\n", address * 4); + printf("invalid write address 0x%08x\n", address * 4); return; } memory[address] = (memory[address] & ~write_mask) | (value & write_mask); @@ -133,12 +133,12 @@ class Simulator { if (auto it = std::find(args.begin(), args.end(), "-memory"); it != args.end()) { - memory_words = std::stoul(*(it + 1)); + memory_words = std::stoull(*(it + 1)); } if (auto it = std::find(args.begin(), args.end(), "-time"); it != args.end()) { - max_sim_time = std::stoul(*(it + 1)); + max_sim_time = std::stoull(*(it + 1)); } if (auto it = std::find(args.begin(), args.end(), "-vcd"); @@ -179,9 +179,10 @@ class Simulator { uint32_t data_memory_read_word = 0; uint32_t inst_memory_read_word = 0; uint32_t timer_interrupt = 0; - uint32_t counter = 0; - uint32_t clocktime = 1; + uint32_t counter = 0; + uint32_t clocktime = 1; bool memory_write_strobe[4] = {false}; + int uart_write_time_counter = 0, uart_write_time_limit = 4; // every limit, an UART write completes; this is tricky part while (main_time < max_sim_time && !Verilated::gotFinish()) { ++main_time; ++counter; @@ -197,17 +198,23 @@ class Simulator { if (main_time > 2) { top->reset = 0; } -// top->io_mem_slave_read_data = memory_read_word; + // top->io_mem_slave_read_data = memory_read_word; top->io_memory_bundle_read_data = data_memory_read_word; top->io_instruction = inst_memory_read_word; top->clock = !top->clock; top->eval(); top->io_interrupt_flag = 0; - data_memory_read_word = memory->read(top->io_memory_bundle_address); + if (top->io_deviceSelect == 2 && top->io_memory_bundle_write_enable) { + if (uart_write_time_counter == 0) std::cout << (char)top->io_memory_bundle_write_data << std::flush; // Output to UART + uart_write_time_counter = (uart_write_time_counter + 1) % uart_write_time_limit; + } + else { + uart_write_time_counter = 0; + } - - inst_memory_read_word = memory->readInst(top->io_instruction_address); + data_memory_read_word = memory->read(top->io_memory_bundle_address); + inst_memory_read_word = memory->readInst(top->io_instruction_address); if (top->io_memory_bundle_write_enable) { memory_write_strobe[0] = top->io_memory_bundle_write_strobe_0; @@ -223,6 +230,11 @@ class Simulator { break; } } + + // print simulation progress in percentage every 1% + if (main_time % (max_sim_time / 100) == 0) { + std::cout << "Simulation progress: " << (main_time * 100 / max_sim_time) << "%" << std::endl; + } } if (dump_signature) { diff --git a/lab4/verilog/verilator/sim_main.cpp b/lab4/verilog/verilator/sim_main.cpp index e2713fc..2895ff7 100644 --- a/lab4/verilog/verilator/sim_main.cpp +++ b/lab4/verilog/verilator/sim_main.cpp @@ -121,12 +121,12 @@ class Simulator { if (auto it = std::find(args.begin(), args.end(), "-memory"); it != args.end()) { - memory_words = std::stoul(*(it + 1)); + memory_words = std::stoull(*(it + 1)); } if (auto it = std::find(args.begin(), args.end(), "-time"); it != args.end()) { - max_sim_time = std::stoul(*(it + 1)); + max_sim_time = std::stoull(*(it + 1)); } if (auto it = std::find(args.begin(), args.end(), "-vcd"); diff --git a/mini-yatcpu/verilog/verilator/sim_main.cpp b/mini-yatcpu/verilog/verilator/sim_main.cpp index e2713fc..2895ff7 100644 --- a/mini-yatcpu/verilog/verilator/sim_main.cpp +++ b/mini-yatcpu/verilog/verilator/sim_main.cpp @@ -121,12 +121,12 @@ class Simulator { if (auto it = std::find(args.begin(), args.end(), "-memory"); it != args.end()) { - memory_words = std::stoul(*(it + 1)); + memory_words = std::stoull(*(it + 1)); } if (auto it = std::find(args.begin(), args.end(), "-time"); it != args.end()) { - max_sim_time = std::stoul(*(it + 1)); + max_sim_time = std::stoull(*(it + 1)); } if (auto it = std::find(args.begin(), args.end(), "-vcd");