diff options
| author | Donggyu | 2016-09-21 16:05:22 -0700 |
|---|---|---|
| committer | Andrew Waterman | 2016-09-21 16:05:22 -0700 |
| commit | 8b12dcbb76896a19f95dc4da19b3b8c74c1ddda3 (patch) | |
| tree | f14267b79a901de6b0efbb87d819a763b86e6328 /src/main/scala/firrtl/passes/InferReadWrite.scala | |
| parent | 5d515c93e2136bb8bb77c5c1f9c5b9f2eb640deb (diff) | |
Fix clock connections in InferReadWrite (#310)
Diffstat (limited to 'src/main/scala/firrtl/passes/InferReadWrite.scala')
| -rw-r--r-- | src/main/scala/firrtl/passes/InferReadWrite.scala | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/main/scala/firrtl/passes/InferReadWrite.scala b/src/main/scala/firrtl/passes/InferReadWrite.scala index ec996fdb..34359c14 100644 --- a/src/main/scala/firrtl/passes/InferReadWrite.scala +++ b/src/main/scala/firrtl/passes/InferReadWrite.scala @@ -33,7 +33,7 @@ import firrtl.Mappers._ import firrtl.PrimOps._ import firrtl.Utils.{one, zero, BoolType} import MemPortUtils.memPortField -import AnalysisUtils.{Connects, getConnects} +import AnalysisUtils.{Connects, getConnects, getConnectOrigin} import WrappedExpression.weq import Annotations._ @@ -117,7 +117,9 @@ object InferReadWritePass extends Pass { for (w <- mem.writers ; r <- mem.readers) { val wp = getProductTerms(connects)(memPortField(mem, w, "en")) val rp = getProductTerms(connects)(memPortField(mem, r, "en")) - if (wp exists (a => rp exists (b => checkComplement(a, b)))) { + val wclk = getConnectOrigin(connects, memPortField(mem, w, "clk")) + val rclk = getConnectOrigin(connects, memPortField(mem, r, "clk")) + if (weq(wclk, rclk) && (wp exists (a => rp exists (b => checkComplement(a, b))))) { val rw = namespace newName "rw" val rwExp = createSubField(createRef(mem.name), rw) readwriters += rw @@ -132,7 +134,7 @@ object InferReadWritePass extends Pass { repl(memPortField(mem, w, "addr")) = EmptyExpression repl(memPortField(mem, w, "data")) = createSubField(rwExp, "wdata") repl(memPortField(mem, w, "mask")) = createSubField(rwExp, "wmask") - stmts += Connect(NoInfo, createSubField(rwExp, "clk"), createRef("clk")) // TODO: fix it + stmts += Connect(NoInfo, createSubField(rwExp, "clk"), wclk) stmts += Connect(NoInfo, createSubField(rwExp, "en"), DoPrim(Or, Seq(connects(memPortField(mem, r, "en")), connects(memPortField(mem, w, "en"))), Nil, BoolType)) |
