aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorazidar2016-01-27 15:22:12 -0800
committerazidar2016-01-28 09:25:05 -0800
commitb6a370dbfbbc12d0674899aa075d613ec522c44b (patch)
treed415696bce7ddeaeef14f599296766100e9c3cd4
parentd6468e562b184c38ce67530c513ee9c4af93ae9c (diff)
Use IsInvalid instead of Poisons in chirrtl -> firrtl transform
-rw-r--r--src/main/stanza/chirrtl.stanza12
-rw-r--r--test/chirrtl/wacc-wdc.fir6
2 files changed, 8 insertions, 10 deletions
diff --git a/src/main/stanza/chirrtl.stanza b/src/main/stanza/chirrtl.stanza
index 9b3b90ab..9fc471fa 100644
--- a/src/main/stanza/chirrtl.stanza
+++ b/src/main/stanza/chirrtl.stanza
@@ -272,15 +272,15 @@ defn remove-chirrtl (c:Circuit) :
(s:CDefMemory) :
mport-types[name(s)] = type(s)
val stmts = Vector<Stmt>()
- val naddr = firrtl-gensym(`GEN,sh)
+ ;val naddr = firrtl-gensym(`GEN,sh)
val taddr = UIntType(IntWidth(max(1,ceil-log2(size(s)))))
- add(stmts,DefPoison(info(s),naddr,taddr))
- val ndata = firrtl-gensym(`GEN,sh)
+ ;add(stmts,DefPoison(info(s),naddr,taddr))
+ ;val ndata = firrtl-gensym(`GEN,sh)
val tdata = type(s)
- add(stmts,DefPoison(info(s),ndata,tdata))
+ ;add(stmts,DefPoison(info(s),ndata,tdata))
defn set-poison (vec:List<MPort>,addr:Symbol) -> False :
for r in vec do :
- add(stmts,Connect(info(s),SubField(SubField(Ref(name(s),ut),name(r),ut),addr,taddr),Ref(naddr,taddr)))
+ add(stmts,IsInvalid(info(s),SubField(SubField(Ref(name(s),ut),name(r),ut),addr,taddr)))
add(stmts,Connect(info(s),SubField(SubField(Ref(name(s),ut),name(r),ut),`clk,taddr),clk(r)))
defn set-enable (vec:List<MPort>,en:Symbol) -> False:
for r in vec do :
@@ -291,7 +291,7 @@ defn remove-chirrtl (c:Circuit) :
defn set-write (vec:List<MPort>,data:Symbol,mask:Symbol) -> False :
val tmask = create-mask(type(s))
for r in vec do :
- add(stmts,Connect(info(s),SubField(SubField(Ref(name(s),ut),name(r),ut),data,tdata),Ref(ndata,tdata)))
+ add(stmts,IsInvalid(info(s),SubField(SubField(Ref(name(s),ut),name(r),ut),data,tdata)))
for x in create-exps(SubField(SubField(Ref(name(s),ut),name(r),ut),mask,tmask)) do :
add(stmts,Connect(info(s),x,zero))
diff --git a/test/chirrtl/wacc-wdc.fir b/test/chirrtl/wacc-wdc.fir
index b66799b3..6610d295 100644
--- a/test/chirrtl/wacc-wdc.fir
+++ b/test/chirrtl/wacc-wdc.fir
@@ -29,12 +29,10 @@ circuit top :
; CHECK: write-latency => 1
; CHECK: read-latency => 0
; CHECK: writer => a
-; CHECK: poison GEN_0 : UInt<4>
-; CHECK: poison GEN_1 : { a : UInt<4>, b : UInt<4>}
-; CHECK: m.a.addr <= GEN_0
+; CHECK: m.a.addr is invalid
; CHECK: m.a.clk <= clk
; CHECK: m.a.en <= UInt("h0")
-; CHECK: m.a.data <= GEN_1
+; CHECK: m.a.data is invalid
; CHECK: m.a.mask.a <= UInt("h0")
; CHECK: m.a.mask.b <= UInt("h0")
; CHECK: p <= UInt("h1")