back.pysim: support async reset.

This commit is contained in:
whitequark 2019-01-26 18:07:43 +00:00
parent 8686e9aa06
commit e74dbc3377

View file

@ -550,10 +550,21 @@ class Simulator:
self._domain_signals[domain] |= signals_bits self._domain_signals[domain] |= signals_bits
statements = [] statements = []
for signal in fragment.iter_comb(): for domain, signals in fragment.drivers.items():
statements.append(signal.eq(signal.reset)) reset_stmts = []
for domain, signal in fragment.iter_sync(): hold_stmts = []
statements.append(signal.eq(signal)) for signal in signals:
reset_stmts.append(signal.eq(signal.reset))
hold_stmts .append(signal.eq(signal))
if domain is None:
statements += reset_stmts
else:
if self._domains[domain].async_reset:
statements.append(Switch(self._domains[domain].rst,
{0: hold_stmts, 1: reset_stmts}))
else:
statements += hold_stmts
statements += fragment.statements statements += fragment.statements
compiler = _StatementCompiler(self._signal_slots) compiler = _StatementCompiler(self._signal_slots)