aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjackkoenig2016-04-20 22:50:03 -0700
committerjackkoenig2016-04-20 22:50:03 -0700
commit13cc1589945a3c2b6e07a6db180f2e6ec64ac226 (patch)
treebfa0880fa7650c8d2d304011293a75b2b2edec4f /src
parent358817eb26c07e601105f53a456ec37a63c68278 (diff)
Change RemoveCHIRRTL to define port clocks at CHIRRTL port definition
Invalidate clock at mem definition. Fixes #131
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/Emitter.scala1
-rw-r--r--src/main/scala/firrtl/passes/Passes.scala9
2 files changed, 9 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/Emitter.scala b/src/main/scala/firrtl/Emitter.scala
index 59aee8c4..ceccccbc 100644
--- a/src/main/scala/firrtl/Emitter.scala
+++ b/src/main/scala/firrtl/Emitter.scala
@@ -77,6 +77,7 @@ class VerilogEmitter extends Emitter {
(tpe(e)) match {
case (t:UIntType) => e
case (t:SIntType) => Seq("$signed(",e,")")
+ case (t:ClockType) => e
}
}
(x) match {
diff --git a/src/main/scala/firrtl/passes/Passes.scala b/src/main/scala/firrtl/passes/Passes.scala
index ccc02f24..18ad7e16 100644
--- a/src/main/scala/firrtl/passes/Passes.scala
+++ b/src/main/scala/firrtl/passes/Passes.scala
@@ -1764,7 +1764,7 @@ object RemoveCHIRRTL extends Pass {
def set_poison (vec:Seq[MPort],addr:String) : Unit = {
for (r <- vec ) {
stmts += IsInvalid(s.info,SubField(SubField(Ref(s.name,ut),r.name,ut),addr,taddr))
- stmts += Connect(s.info,SubField(SubField(Ref(s.name,ut),r.name,ut),"clk",taddr),r.clk)
+ stmts += IsInvalid(s.info,SubField(SubField(Ref(s.name,ut),r.name,ut),"clk",taddr))
}
}
def set_enable (vec:Seq[MPort],en:String) : Unit = {
@@ -1801,24 +1801,28 @@ object RemoveCHIRRTL extends Pass {
case (s:CDefMPort) => {
mport_types(s.name) = mport_types(s.mem)
val addrs = ArrayBuffer[String]()
+ val clks = ArrayBuffer[String]()
val ens = ArrayBuffer[String]()
val masks = ArrayBuffer[String]()
s.direction match {
case MReadWrite => {
repl(s.name) = DataRef(SubField(Ref(s.mem,ut),s.name,ut),"rdata","data","mask",true)
addrs += "addr"
+ clks += "clk"
ens += "en"
masks += "mask"
}
case MWrite => {
repl(s.name) = DataRef(SubField(Ref(s.mem,ut),s.name,ut),"data","data","mask",false)
addrs += "addr"
+ clks += "clk"
ens += "en"
masks += "mask"
}
case _ => {
repl(s.name) = DataRef(SubField(Ref(s.mem,ut),s.name,ut),"data","data","blah",false)
addrs += "addr"
+ clks += "clk"
ens += "en"
}
}
@@ -1826,6 +1830,9 @@ object RemoveCHIRRTL extends Pass {
for (x <- addrs ) {
stmts += Connect(s.info,SubField(SubField(Ref(s.mem,ut),s.name,ut),x,ut),s.exps(0))
}
+ for (x <- clks ) {
+ stmts += Connect(s.info,SubField(SubField(Ref(s.mem,ut),s.name,ut),x,ut),s.exps(1))
+ }
for (x <- ens ) {
stmts += Connect(s.info,SubField(SubField(Ref(s.mem,ut),s.name,ut),x,ut),one)
}