From 0e8288d6aded9f7f91b4b6bfef44f0d41f0d928b Mon Sep 17 00:00:00 2001
From: Minyong Li <ml10g20@soton.ac.uk>
Date: Tue, 13 Jul 2021 17:38:49 +0100
Subject: [PATCH] core.{Data,Program}Memory: fix Read-After-Write behavior

Now Read-After-Write gives old data (Read-First). Quartus does not
give warnings. No bypass logic is implemented.
---
 src/main/scala/uk/ac/soton/ecs/can/core/DataMemory.scala    | 2 +-
 src/main/scala/uk/ac/soton/ecs/can/core/ProgramMemory.scala | 6 +++++-
 2 files changed, 6 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 8244854..e4a1f78 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
@@ -16,7 +16,7 @@ class DataMemory(implicit cfg: CanCoreConfiguration) extends MultiIOModule {
 
   private val mem =
     if (cfg.syncReadMemory)
-      SyncReadMem(cfg.dataMemoryWords, UInt(512.W))
+      SyncReadMem(cfg.dataMemoryWords, UInt(512.W), SyncReadMem.ReadFirst)
     else
       Mem(cfg.dataMemoryWords, UInt(512.W))
 
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 14a82d1..1f96ea5 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
@@ -24,7 +24,11 @@ class ProgramMemory(implicit cfg: CanCoreConfiguration) extends MultiIOModule {
 
   private val mem =
     if (cfg.syncReadMemory)
-      SyncReadMem(cfg.programMemoryWords, UInt(cwWidth.W))
+      SyncReadMem(
+        cfg.programMemoryWords,
+        UInt(cwWidth.W),
+        SyncReadMem.ReadFirst
+      )
     else
       Mem(cfg.programMemoryWords, UInt(cwWidth.W))
 
-- 
GitLab