diff --git a/examples/sim/dataflow.py b/examples/sim/dataflow.py index 5a325440a..bc8c6b3dd 100644 --- a/examples/sim/dataflow.py +++ b/examples/sim/dataflow.py @@ -34,5 +34,9 @@ class TB(Module): g.add_connection(self.source, self.sink) self.submodules.comp = CompositeActor(g) + def do_simulation(self, selfp): + if self.source.token_exchanger.done: + raise StopSimulation + if __name__ == "__main__": run_simulation(TB()) diff --git a/migen/actorlib/sim.py b/migen/actorlib/sim.py index 37dc1c319..dffe12f2a 100644 --- a/migen/actorlib/sim.py +++ b/migen/actorlib/sim.py @@ -33,6 +33,7 @@ class TokenExchanger(Module): self.actor = actor self.active = set() self.busy = True + self.done = False def _process_transactions(self, selfp): completed = set() @@ -69,6 +70,7 @@ class TokenExchanger(Module): transactions = next(self.generator) except StopIteration: self.busy = False + self.done = True raise StopSimulation if isinstance(transactions, Token): self.active = {transactions} @@ -87,6 +89,7 @@ class TokenExchanger(Module): if not self.active: self._next_transactions() self._update_control_signals(selfp) + do_simulation.passive = True class SimActor(Module): def __init__(self, generator): @@ -95,6 +98,7 @@ class SimActor(Module): def do_simulation(self, selfp): selfp.busy = self.token_exchanger.busy + do_simulation.passive = True def _dumper_gen(prefix): while True: