From 585b1228177b0ffc9c5b086d9ba71291ebd08d85 Mon Sep 17 00:00:00 2001
From: Minyong Li <ml10g20@soton.ac.uk>
Date: Sun, 11 Jul 2021 13:05:25 +0100
Subject: [PATCH] core.{Data,Program}Memory: add read enable signal

---
 src/main/scala/uk/ac/soton/ecs/can/core/DataMemory.scala    | 5 ++++-
 src/main/scala/uk/ac/soton/ecs/can/core/ProgramMemory.scala | 5 ++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/main/scala/uk/ac/soton/ecs/can/core/DataMemory.scala b/src/main/scala/uk/ac/soton/ecs/can/core/DataMemory.scala
index 7b89b67..0dfeb68 100644
--- a/src/main/scala/uk/ac/soton/ecs/can/core/DataMemory.scala
+++ b/src/main/scala/uk/ac/soton/ecs/can/core/DataMemory.scala
@@ -11,6 +11,7 @@ class DataMemory(implicit cfg: CanCoreConfiguration) extends MultiIOModule {
   private val addrWidth = log2Ceil(cfg.dataMemoryWords)
 
   val read = IO(new Bundle {
+    val en = Input(Bool())
     val addr = Input(UInt(addrWidth.W))
     val data = Output(UInt(512.W))
   })
@@ -26,7 +27,9 @@ class DataMemory(implicit cfg: CanCoreConfiguration) extends MultiIOModule {
     else
       Mem(cfg.dataMemoryWords, UInt(512.W))
 
-  read.data := mem(read.addr)
+  when(read.en) {
+    read.data := mem(read.addr)
+  }
 
   when(write.en) {
     mem(write.addr) := write.data
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 5d2f87e..a65cd41 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
@@ -20,6 +20,7 @@ class ProgramMemory(implicit cfg: CanCoreConfiguration) extends MultiIOModule {
   val cw = IO(Output(UInt(cwWidth.W)))
 
   val read = IO(new Bundle {
+    val en = Input(Bool())
     val addr = Input(UInt(addrWidth.W))
     val data = Output(UInt(cwWidth.W))
   })
@@ -47,7 +48,9 @@ class ProgramMemory(implicit cfg: CanCoreConfiguration) extends MultiIOModule {
 
   cw := mem(pc)
 
-  read.data := mem(read.addr)
+  when(read.en) {
+    read.data := mem(read.addr)
+  }
 
   when(write.en) {
     mem(write.addr) := write.data
-- 
GitLab