From 27b7c0556e0168c94f9678e3371d00e3a9cd0175 Mon Sep 17 00:00:00 2001 From: peteraa Date: Thu, 5 Sep 2019 14:09:05 +0200 Subject: [PATCH] Simplify NOP and bubble logic. --- src/main/scala/IF.scala | 16 +++------------- src/main/scala/ToplevelSignals.scala | 13 ++++++++----- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/main/scala/IF.scala b/src/main/scala/IF.scala index 232442f..fc024ff 100644 --- a/src/main/scala/IF.scala +++ b/src/main/scala/IF.scala @@ -8,7 +8,7 @@ class InstructionFetch extends MultiIOModule { val testHarness = IO( new Bundle { val IMEMsetup = Input(new IMEMsetupSignals) - val PC = Output(UInt()) + val PC = Output(UInt()) } ) @@ -46,21 +46,11 @@ class InstructionFetch extends MultiIOModule { instruction := IMEM.io.instruction.asTypeOf(new Instruction) - - /** - * Setup. - * - * When you have added an instruction signal to this module you - * should ensure that it is set to NOP during program loading. - * - * If not you will end up issuing instructions during program load - * which will start executing before memory, registers and programs - * are fully loaded. + * Setup. You should not change this code. */ when(testHarness.IMEMsetup.setup) { PC := 0.U - // TODO: You should probably set the instruction to Instruction.NOP here. - // throw new Exception("Just making sure you're seeing the line above.\nYou can delete this exception now, it's found at line 64 at IF.scala") + instruction := Instruction.NOP } } diff --git a/src/main/scala/ToplevelSignals.scala b/src/main/scala/ToplevelSignals.scala index 80a630c..fe31613 100644 --- a/src/main/scala/ToplevelSignals.scala +++ b/src/main/scala/ToplevelSignals.scala @@ -22,14 +22,17 @@ class Instruction extends Bundle(){ def immediateJType = Cat(instruction(31), instruction(19, 12), instruction(20), instruction(30, 25), instruction(24, 21), 0.U(1.W)).asSInt def immediateZType = instruction(19, 15).zext + def bubble(): Instruction = { + val bubbled = Wire(new Instruction) + bubbled.instruction := instruction + bubbled.instruction(6, 0) := BitPat.bitPatToUInt(BitPat("b0010011")) + bubbled + } } object Instruction { - def bubble(i: Instruction) = - i.opcode := BitPat.bitPatToUInt(BitPat("b0010011")) - - def default: Instruction = { + def NOP: Instruction = { val w = Wire(new Instruction) - w.instruction := 0.U + w.instruction := BitPat.bitPatToUInt(BitPat("b00000000000000000000000000010011")) w } }