From: Sebastien Bourdeauducq Date: Mon, 27 Jan 2014 23:03:56 +0000 (+0100) Subject: fix SimActor TB terminations X-Git-Tag: 24jan2021_ls180~2099^2~382 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2ab939e69d3e3bc855c658124073962cb469a8c0;p=litex.git fix SimActor TB terminations --- 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: