From 2b87115fee9d3e53279b55040b51885d867c19d4 Mon Sep 17 00:00:00 2001 From: Minyong Li <ml10g20@soton.ac.uk> Date: Thu, 22 Jul 2021 15:56:49 +0100 Subject: [PATCH] core: remove branching support There is now only a 'halt' signal that stops the processor. --- .../uk/ac/soton/ecs/can/core/CanCore.scala | 5 +--- .../ac/soton/ecs/can/core/ProgramMemory.scala | 23 +++---------------- .../ecs/can/types/CanCoreControlWord.scala | 4 +--- 3 files changed, 5 insertions(+), 27 deletions(-) diff --git a/src/main/scala/uk/ac/soton/ecs/can/core/CanCore.scala b/src/main/scala/uk/ac/soton/ecs/can/core/CanCore.scala index 1e9ee71..6da5138 100644 --- a/src/main/scala/uk/ac/soton/ecs/can/core/CanCore.scala +++ b/src/main/scala/uk/ac/soton/ecs/can/core/CanCore.scala @@ -46,10 +46,7 @@ class CanCore(implicit cfg: CanCoreConfiguration) extends MultiIOModule { private val ctrl = programMemory.read.data.asTypeOf(new CanCoreControlWord) - programMemory.br.abs := ctrl.absoluteBranch - programMemory.br.rel := ctrl.relativeBranch - programMemory.br.addr := ctrl.immediate - programMemory.take := io.take + programMemory.halt := Mux(io.take, io.take, ctrl.halt) dataMemory.read.addr := Mux( io.take, diff --git a/src/main/scala/uk/ac/soton/ecs/can/core/ProgramMemory.scala b/src/main/scala/uk/ac/soton/ecs/can/core/ProgramMemory.scala index 1f96ea5..5cc4271 100644 --- a/src/main/scala/uk/ac/soton/ecs/can/core/ProgramMemory.scala +++ b/src/main/scala/uk/ac/soton/ecs/can/core/ProgramMemory.scala @@ -12,12 +12,7 @@ class ProgramMemory(implicit cfg: CanCoreConfiguration) extends MultiIOModule { private val addrWidth = log2Ceil(cfg.programMemoryWords) private val cwWidth = (new CanCoreControlWord).getWidth - val br = IO(new Bundle { - val abs = Input(Bool()) - val rel = Input(Bool()) - val addr = Input(UInt(addrWidth.W)) - }) - val take = IO(Input(Bool())) + val halt = IO(Input(Bool())) val read = IO(new MemoryReadIO(addrWidth, cwWidth)) val write = IO(new MemoryWriteIO(addrWidth, cwWidth)) @@ -34,21 +29,9 @@ class ProgramMemory(implicit cfg: CanCoreConfiguration) extends MultiIOModule { private val pc = RegInit(0.U(addrWidth.W)) - pc := Mux( - take, - pc, - Mux( - br.abs, - br.addr.asUInt(), - Mux( - br.rel, - (pc.asSInt() + br.addr.asSInt()).asUInt(), - pc + 1.U - ) - ) - ) + pc := Mux(halt, pc, pc + 1.U) - read.data := mem(Mux(take, read.addr, pc)) + read.data := mem(Mux(halt, read.addr, pc)) when(write.en) { mem(write.addr) := write.data diff --git a/src/main/scala/uk/ac/soton/ecs/can/types/CanCoreControlWord.scala b/src/main/scala/uk/ac/soton/ecs/can/types/CanCoreControlWord.scala index 0ccc8e5..d6845a5 100644 --- a/src/main/scala/uk/ac/soton/ecs/can/types/CanCoreControlWord.scala +++ b/src/main/scala/uk/ac/soton/ecs/can/types/CanCoreControlWord.scala @@ -12,9 +12,7 @@ class CanCoreControlWord(implicit val cfg: CanCoreConfiguration) private val dataMemoryAddressWidth = log2Ceil(cfg.dataMemoryWords) private val registerFileAddressWidth = log2Ceil(cfg.registerFileWords) - val immediate = UInt(cfg.immediateWidth.W) - val absoluteBranch = Bool() - val relativeBranch = Bool() + val halt = Bool() val dataMemoryReadAddress = UInt(dataMemoryAddressWidth.W) val dataMemoryWriteEnable = Bool() -- GitLab