aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/passes/RemoveCHIRRTL.scala
diff options
context:
space:
mode:
authorDonggyu2016-09-21 16:05:22 -0700
committerAndrew Waterman2016-09-21 16:05:22 -0700
commit8b12dcbb76896a19f95dc4da19b3b8c74c1ddda3 (patch)
treef14267b79a901de6b0efbb87d819a763b86e6328 /src/main/scala/firrtl/passes/RemoveCHIRRTL.scala
parent5d515c93e2136bb8bb77c5c1f9c5b9f2eb640deb (diff)
Fix clock connections in InferReadWrite (#310)
Diffstat (limited to 'src/main/scala/firrtl/passes/RemoveCHIRRTL.scala')
-rw-r--r--src/main/scala/firrtl/passes/RemoveCHIRRTL.scala27
1 files changed, 12 insertions, 15 deletions
diff --git a/src/main/scala/firrtl/passes/RemoveCHIRRTL.scala b/src/main/scala/firrtl/passes/RemoveCHIRRTL.scala
index 485664b4..c1b0de1e 100644
--- a/src/main/scala/firrtl/passes/RemoveCHIRRTL.scala
+++ b/src/main/scala/firrtl/passes/RemoveCHIRRTL.scala
@@ -74,9 +74,9 @@ object RemoveCHIRRTL extends Pass {
case (s:CDefMPort) =>
val p = mports getOrElse (s.mem, EMPs)
s.direction match {
- case MRead => p.readers += MPort(s.name,s.exps(1))
- case MWrite => p.writers += MPort(s.name,s.exps(1))
- case MReadWrite => p.readwriters += MPort(s.name,s.exps(1))
+ case MRead => p.readers += MPort(s.name, s.exps(1))
+ case MWrite => p.writers += MPort(s.name, s.exps(1))
+ case MReadWrite => p.readwriters += MPort(s.name, s.exps(1))
}
mports(s.mem) = p
case s =>
@@ -90,17 +90,14 @@ object RemoveCHIRRTL extends Pass {
types(s.name) = s.tpe
val taddr = UIntType(IntWidth(1 max ceilLog2(s.size)))
val tdata = s.tpe
- def set_poison(vec: Seq[MPort], addr: String) = vec flatMap (r => Seq(
- IsInvalid(s.info, SubField(SubField(Reference(s.name, ut), r.name, ut), addr, taddr)),
- IsInvalid(s.info, SubField(SubField(Reference(s.name, ut), r.name, ut), "clk", taddr))
+ def set_poison(vec: Seq[MPort]) = vec flatMap (r => Seq(
+ IsInvalid(s.info, SubField(SubField(Reference(s.name, ut), r.name, ut), "addr", taddr)),
+ IsInvalid(s.info, SubField(SubField(Reference(s.name, ut), r.name, ut), "clk", ClockType))
))
def set_enable(vec: Seq[MPort], en: String) = vec map (r =>
- Connect(s.info, SubField(SubField(Reference(s.name, ut), r.name, ut), en, taddr), zero)
+ Connect(s.info, SubField(SubField(Reference(s.name, ut), r.name, ut), en, BoolType), zero)
)
- def set_wmode (vec: Seq[MPort], wmode: String) = vec map (r =>
- Connect(s.info, SubField(SubField(Reference(s.name, ut), r.name, ut), wmode, taddr), zero)
- )
- def set_write (vec: Seq[MPort], data: String, mask: String) = vec flatMap {r =>
+ def set_write(vec: Seq[MPort], data: String, mask: String) = vec flatMap {r =>
val tmask = createMask(s.tpe)
IsInvalid(s.info, SubField(SubField(Reference(s.name, ut), r.name, ut), data, tdata)) +:
(create_exps(SubField(SubField(Reference(s.name, ut), r.name, ut), mask, tmask))
@@ -110,13 +107,13 @@ object RemoveCHIRRTL extends Pass {
val rds = (mports getOrElse (s.name, EMPs)).readers
val wrs = (mports getOrElse (s.name, EMPs)).writers
val rws = (mports getOrElse (s.name, EMPs)).readwriters
- val stmts = set_poison(rds, "addr") ++
+ val stmts = set_poison(rds) ++
set_enable(rds, "en") ++
- set_poison(wrs, "addr") ++
+ set_poison(wrs) ++
set_enable(wrs, "en") ++
set_write(wrs, "data", "mask") ++
- set_poison(rws, "addr") ++
- set_wmode(rws, "wmode") ++
+ set_poison(rws) ++
+ set_enable(rws, "wmode") ++
set_enable(rws, "en") ++
set_write(rws, "wdata", "wmask")
val mem = DefMemory(s.info, s.name, s.tpe, s.size, 1, if (s.seq) 1 else 0,