From 040cfd7668a882a02264db35c13ae25012a27994 Mon Sep 17 00:00:00 2001 From: Bruno Levy Date: Sat, 27 Aug 2022 22:27:55 +0200 Subject: [PATCH] Fixes. --- FemtoRV/TUTORIALS/FROM_BLINKER_TO_RISCV/PIPELINE.md | 10 +++++----- README.md | 5 ++++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/FemtoRV/TUTORIALS/FROM_BLINKER_TO_RISCV/PIPELINE.md b/FemtoRV/TUTORIALS/FROM_BLINKER_TO_RISCV/PIPELINE.md index f6992bf..2836b8f 100644 --- a/FemtoRV/TUTORIALS/FROM_BLINKER_TO_RISCV/PIPELINE.md +++ b/FemtoRV/TUTORIALS/FROM_BLINKER_TO_RISCV/PIPELINE.md @@ -512,7 +512,7 @@ has all the stages, but drive it with a state machine that executes one stage at instead of running them concurrently. Then we will see what needs to be modified when all the stages run concurrently. -Following all good books in processor design (Patterson, Harris...) we will start +Following all good books in processor design (Patterson & Hennessy, Harris & Harris) we will start with a super classical design with 5 stages: | acronym | long name | description | @@ -612,7 +612,7 @@ Let us summarize the rules: else is done to the result; Or put differently: in state `B`, on the left of `<=` there can be only a `BC_`-prefixed -register. On the right of `<=` or `=` there can be only a `BC_`-prefixed register, a `B_`-prefixed +register. On the right of `<=` or `=` there can be only a `AB_`-prefixed register, a `B_`-prefixed wire or some combinations of these... However, there are two **exceptions to the rules** (else it would be too simple !): @@ -1326,7 +1326,7 @@ pipeline. Can we blow less bubbles in there ? ## Step 5: reading and writing the register file in the same cycle -If you read the good books on processor design (Patterson, Harris and Harris), they say that +If you read the good books on processor design (Patterson and Hennessy, Harris and Harris), they say that the data written to the register file by `W` can be read by `D` *in the same cycle*, so why do we stall until the instruction leaves `W` ? @@ -1378,7 +1378,7 @@ The source is in [pipeline5.v](pipeline5.v). Let us see now how to "do it right", with a combinatorial access in the register file, so that we really can write the register file and read it in the same cycle, as described -in the good books (Patterson, Harris & Harris): +in the good books (Patterson & Hennessy, Harris & Harris): ```verilog reg [31:0] RegisterBank [0:31]; @@ -1531,7 +1531,7 @@ the ULX3S: a combinatorial register file (emulated or real) where a written value can be read in the same cycle (hence pipeline control logic is simpler) -- ... and finally it drops again when we add register forwaring logic. +- ... and finally it drops again when we add register forwarding logic. But we made no effort optimizing Fmax, our goal up to now was mainly to reduce CPI. Let us see what we can do now. diff --git a/README.md b/README.md index bcb4f31..4549516 100644 --- a/README.md +++ b/README.md @@ -31,11 +31,14 @@ it from this repository when selected as the SoC's processor). From Blinky to RISC-V --------------------- -In [this tutorial](https://github.com/BrunoLevy/learn-fpga/blob/master/FemtoRV/TUTORIALS/FROM_BLINKER_TO_RISCV/README.md), +In [Episode I](https://github.com/BrunoLevy/learn-fpga/blob/master/FemtoRV/TUTORIALS/FROM_BLINKER_TO_RISCV/README.md), you will learn to build your own RISC-V processor, step by step, starting from the simplest design (that blinks a LED), to a fully functional RISC-V core that can compute and display graphics. +In [Episode II](https://github.com/BrunoLevy/learn-fpga/blob/master/FemtoRV/TUTORIALS/FROM_BLINKER_TO_RISCV/PIPELINE.md), +you will learn how to design a pipelined processor. + Basic: more basic things I wrote during May 2020 - June 2020 ------------------------------------------------------------ Files are [here](https://github.com/BrunoLevy/learn-fpga/tree/master/Basic).