aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Waterman2015-10-01 15:24:06 -0700
committerAndrew Waterman2015-10-01 15:24:06 -0700
commit0a9cc3d72fa2c6f19385efa8350f232e2e9faf10 (patch)
tree362ab602a2d7d07e7ecfbf9570b03f0480ae4c2e /src
parent42307c1f72c8799f8db52a6859c4b7b1ed114c3d (diff)
parentded5cd987b8d275bbff3904903a37837a504098b (diff)
Merge pull request #43 from ucb-bar/new-semantics
Change of FIRRTL semantics!
Diffstat (limited to 'src')
-rw-r--r--src/main/stanza/passes.stanza13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/main/stanza/passes.stanza b/src/main/stanza/passes.stanza
index 6d79e9c2..0c812535 100644
--- a/src/main/stanza/passes.stanza
+++ b/src/main/stanza/passes.stanza
@@ -1519,7 +1519,9 @@ defn merge-resets (assign:HashTable<Symbol,SymbolicValue>, resets:HashTable<Symb
val table = HashTable<Symbol,SymbolicValue>(symbol-hash)
for i in get-unique-keys(list(assign,resets)) do :
table[i] = match(get?(assign,i,false),get?(resets,i,false)) :
- (a:SymbolicValue,r:SymbolicValue) : SVMux(rsignals[i],r,a)
+ (a:SymbolicValue,r:SymbolicValue) :
+ if r typeof SVNul : a
+ else : SVMux(rsignals[i],r,a)
(a:SymbolicValue,r:False) : a
(a:False,r:SymbolicValue) : SVMux(rsignals[i],r,SVNul())
(a:False,r:False) : error("Shouldn't be here")
@@ -1537,8 +1539,9 @@ defn build-tables (s:Stmt,
flattn[name(s)] = true
(s:DefRegister) :
assign[name(s)] = SVNul()
- flattn[name(s)] = false
+ flattn[name(s)] = true
rsignals[name(s)] = reset(s)
+ resets[name(s)] = SVNul()
(s:DefAccessor) :
assign[name(s)] = SVNul()
flattn[name(s)] = false
@@ -1584,6 +1587,12 @@ defn build-tables (s:Stmt,
for x in assign-a do : println-debug(x)
println-debug("TABLE")
for x in assign do : println-debug(x)
+ println-debug("RESET-C")
+ for x in resets-c do : println-debug(x)
+ println-debug("RESET-A")
+ for x in resets-a do : println-debug(x)
+ println-debug("RESET")
+ for x in resets do : println-debug(x)
(s:Connect|OnReset) :
val key* = match(loc(s)) :
(e:WRef) : name(e)