Skip to content

Commit

Permalink
back.pysim: split funclets according to LHS groups.
Browse files Browse the repository at this point in the history
  • Loading branch information
whitequark committed Dec 24, 2018
1 parent 98f554a commit 34f20a9
Showing 1 changed file with 18 additions and 10 deletions.
28 changes: 18 additions & 10 deletions nmigen/back/pysim.py
Expand Up @@ -7,7 +7,7 @@

from ..tools import flatten
from ..hdl.ast import *
from ..hdl.xfrm import ValueVisitor, StatementVisitor
from ..hdl.xfrm import ValueVisitor, StatementVisitor, LHSGroupAnalyzer, LHSGroupFilter


__all__ = ["Simulator", "Delay", "Tick", "Passive", "DeadlineError"]
Expand Down Expand Up @@ -529,18 +529,26 @@ def add_domain_signal(signal, domain):
statements.append(signal.eq(signal))
statements += fragment.statements

compiler = _StatementCompiler(self._signal_slots)
funclet = compiler(statements)

def add_funclet(signal, funclet):
self._funclets[self._signal_slots[signal]].add(funclet)

for signal in compiler.sensitivity:
add_funclet(signal, funclet)
for domain, cd in fragment.domains.items():
add_funclet(cd.clk, funclet)
if cd.rst is not None:
add_funclet(cd.rst, funclet)
lhs_grouper = LHSGroupAnalyzer()
lhs_grouper.on_statements(statements)

for group_signals in lhs_grouper.groups().values():
lhs_group_filter = LHSGroupFilter(group_signals)

compiler = _StatementCompiler(self._signal_slots)
funclet = compiler(lhs_group_filter(statements))
for signal in compiler.sensitivity:
add_funclet(signal, funclet)

for domain, cd in fragment.domains.items():
if domain not in fragment.drivers:
continue
add_funclet(cd.clk, funclet)
if cd.rst is not None:
add_funclet(cd.rst, funclet)

self._user_signals = bitarray(len(self._signals))
self._user_signals.setall(True)
Expand Down

0 comments on commit 34f20a9

Please sign in to comment.