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 1e9ee71d87e61f23f436564dbe13b79518de2d60..6da51380bf2b628a544d1dcb42e608b7a6aecc15 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 1f96ea5823f1bcd3f7d0d777524090a649eba944..5cc4271c4c0621687cee18c7f36d623f60419c75 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 0ccc8e55c8245d70776569ce2278b61cb080c692..d6845a5e5a7f3b7a52a36114c88750071cefa238 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()