diff options
| author | azidar | 2015-10-01 09:56:11 -0700 |
|---|---|---|
| committer | azidar | 2015-10-01 10:12:38 -0700 |
| commit | ded5cd987b8d275bbff3904903a37837a504098b (patch) | |
| tree | 803f6bbec6b8cee86b27abfc2a06ad09798c4c21 /src | |
| parent | d380b8cfd11d2fe1231774f7b9492aff959bb279 (diff) | |
Change of FIRRTL semantics!
Assignments to a register are no longer affected by enclosing when
statements:
when p :
reg r : UInt,clk,reset
r := a
will lower to:
reg r : UInt,clk,reset
r := a
instead of:
reg r : UInt,clk,reset
when p : r := a
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/stanza/passes.stanza | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/main/stanza/passes.stanza b/src/main/stanza/passes.stanza index 99fb8172..4f019694 100644 --- a/src/main/stanza/passes.stanza +++ b/src/main/stanza/passes.stanza @@ -1448,7 +1448,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") @@ -1466,8 +1468,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 @@ -1513,6 +1516,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) |
