From c82013581d66ab6e67c58eb124b3fff8bd99d605 Mon Sep 17 00:00:00 2001 From: peteraa Date: Thu, 5 Sep 2019 19:18:40 +0200 Subject: [PATCH] Add ex2 text. Remove unused file. --- Images/MEMstage.png | Bin 0 -> 25026 bytes exercise.org | 7 ++- exercise2.org | 109 ++++++++++++++++++++++++++++++++++ src/test/scala/testConf.scala | 43 -------------- 4 files changed, 114 insertions(+), 45 deletions(-) create mode 100644 Images/MEMstage.png create mode 100644 exercise2.org delete mode 100644 src/test/scala/testConf.scala diff --git a/Images/MEMstage.png b/Images/MEMstage.png new file mode 100644 index 0000000000000000000000000000000000000000..8abb4431527cb23abb6b5328f6f13f70dfad8006 GIT binary patch literal 25026 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 literal 0 HcmV?d00001 diff --git a/exercise.org b/exercise.org index 3bbd8ed..a5459e3 100644 --- a/exercise.org +++ b/exercise.org @@ -1,4 +1,4 @@ -* Exercise 1 +* Exercise description The task in this exercise is to implement a 5-stage pipelined processor for the [[./instructions.org][RISCV32I instruction set]]. @@ -6,7 +6,10 @@ at a time, whereas in exercise 2 your design will handle multiple instructions at a time. This is done by inserting 4 NOP instructions inbetween each source instruction, - enabling us to use the same tests for both exercise 1 and 2. + enabling us to use the same tests and harness for both exercise 1 and 2. + + Once you are done with exercise 1, you can up the difficulty by setting nopPad + to false and start reading the [[exercise2.org][ex2 guide]]. In the project skeleton files ([[./src/main/scala/][Found here]]) you can see that a lot of code has already been provided, which can make it difficult to get started. diff --git a/exercise2.org b/exercise2.org new file mode 100644 index 0000000..f62c7fb --- /dev/null +++ b/exercise2.org @@ -0,0 +1,109 @@ +* Exercise 2 + Safety wheels are now officially off. + To verify this, set nopPadded to false in Manifest.scala and observe as all hell + breaks loose. + + Let's break down what's going wrong and what we can do about it. + +** RAW Hazards + Consider the following program: + #+begin_src asm + main: + add x1, x1, x2 + add x1, x1, x1 + add x1, x1, x2 + #+end_src + + In your implementation this will give you wrong results since the results + of the first add operation will not be available in the registers before + x1 is fetched for the second and third operation. + + Your first task should therefore be to implement a forwarding unit + + The forwarding unit is located in the EX stage and is responsible for selecting + the ALU input from three possible sources. + These sources are: + + The value received from the register bank + + The ALU result currently in MEM + + The writeback result + + The forwarder prioritizes as follows: + + If the input register address is not the destination in either MEM or WB, select the + register. + + If the input register address is the destination register in WB, but not in MEM, select + the writeback signal. + + If the input register address is the destination register for the operation currently + in MEM, select that operation. + + There is a special case you need take into account, namely load operations. + Considering the following program: + #+begin_src asm + main: + lw x1, 0(x2) + add x1, x1, x1 + add x1, x1, x1 + #+end_src + + When the second operation (~add x1, x1, x1~) is in EX, the third clause in the forwarder + is triggered, however the result is not yet ready since fetching memory costs a cycle. + In order to fix this the forwarder must issue a signal that freezes the pipeline. + This is done by issuing a signal to the barrier registers, telling them to _not_ update + their contents, essentially repeating the last instruction. + + There are many subtleties to consider here. + For instance: What should happen to the instruction currently + in MEM? If it too is repeated the hazard detector will trigger next cycle, effectively + deadlocking your processor. + What about when the write address and read address are similar in the ID stage? + + Designing a forwarder can take very long, or it can be done very quickly, all depending + on how *methodical* you are. My advice is to design the algorithm first, then when you're + satisfied implement it on hardware. + + +** Control hazards + + Consider the following code + + #+begin_src asm + main: + beq zero, zero, target + add x1, x1, x1 + add x1, x1, x1 + j main + target: + sub x1, x2, x2 + sub x2, x2, x2 + #+end_src + + Depending on your design the two add instructions will be fetched before the beq jump happens. + Whenever a branch happens it is necessary to flush the spurious instructions that were fetched + before the branch was noticed. + However, simply waiting until the branch has been decided is not acceptable since that guarantees + lost cycles. + In your first iteration, simply assume branches will not be taken, and if they are taken issue + a warning to the barriers that hold spurious instructions telling them to render them impotent + by setting the control signals to do nothing. + +* Putting the pedal to the metal + Once you have a design that RAW and control hazards you're ready to up the ante and add some + improvements to your design. + Some suggestions: + +** Branch predictor + Instead of assuming branch not taken, use a branch predictor. There are many different schemes, + but I advice you to stick to a simple one, such as 1-bit or 2-bit. + +** Fast branch handling + Certaing branches like BEQ and BNE can be calculated very quickly, wheras size comparison branches + (BGE, BLE and friends) take longer. It is therefore feasible to do these checks in the ID stage. + +** Adding a data cache + Unless you have already done the two suggested improvements, do not attempt to create a cache. + The first thing you need to do is to add a latency for memory fetching, if not you will have + nothing to improve upon. + + If you still insist, start with the BTreeManyO3.s program and analyze the memory access pattern. + What sort of eviction policy and cache size would you choose for this pattern? + You should try writing additional benchmarking programs, it is important to have something measurable, + and the current programs are not made to test cache performance!! diff --git a/src/test/scala/testConf.scala b/src/test/scala/testConf.scala deleted file mode 100644 index 721cc38..0000000 --- a/src/test/scala/testConf.scala +++ /dev/null @@ -1,43 +0,0 @@ -// package FiveStage -// import chisel3._ -// import chisel3.iotesters._ -// import org.scalatest.{Matchers, FlatSpec} -// import spire.math.{UInt => Uint} -// import fileUtils._ -// import cats.implicits._ - -// import RISCVutils._ -// import RISCVasm._ -// import riscala._ - -// import utilz._ - -// class AllTests extends FlatSpec with Matchers { - -// val results = fileUtils.getAllTests.map{f => -// val result = TestRunner.runTest(f.getPath, false) -// (f.getName, result) -// } - -// makeReport(results) -// } - - -// /** -// This is for you to run more verbose testing. -// */ -// class SelectedTests extends FlatSpec with Matchers { - -// val tests = List( -// "matMul.s" -// ) - -// if(!tests.isEmpty){ -// val results = fileUtils.getAllTests.filter(f => tests.contains(f.getName)).map{ f => -// val result = TestRunner.runTest(f.getPath, true) -// (f.getName, result) -// } - -// makeReport(results) -// } -// }