From 2ab939e69d3e3bc855c658124073962cb469a8c0 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Tue, 28 Jan 2014 00:03:56 +0100 Subject: [PATCH] fix SimActor TB terminations --- examples/sim/dataflow.py | 4 ++++ migen/actorlib/sim.py | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/examples/sim/dataflow.py b/examples/sim/dataflow.py index 5a325440..bc8c6b3d 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 37dc1c31..dffe12f2 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: -- 2.30.2