From: Sebastien Bourdeauducq Date: Sat, 17 Nov 2012 13:15:51 +0000 (+0100) Subject: actorlib/sim: split TokenExchanger X-Git-Tag: 24jan2021_ls180~2099^2~785 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=897a2e3f9c5920587db384235cc80f4cb000107d;p=litex.git actorlib/sim: split TokenExchanger --- diff --git a/migen/actorlib/sim.py b/migen/actorlib/sim.py index 76e126e1..1d938755 100644 --- a/migen/actorlib/sim.py +++ b/migen/actorlib/sim.py @@ -13,17 +13,17 @@ class Token: # # NB: the possibility to push several tokens at once is important to interact # with actors that only accept a group of tokens when all of them are available. -class SimActor(PureSimulable, Actor): - def __init__(self, generator, *endpoint_descriptions, **misc): +class TokenExchanger(PureSimulable): + def __init__(self, actor, generator): + self.actor = actor self.generator = generator self.active = set() self.done = False - super().__init__(*endpoint_descriptions, **misc) def _process_transactions(self, s): completed = set() for token in self.active: - ep = self.endpoints[token.endpoint] + ep = self.actor.endpoints[token.endpoint] if isinstance(ep, Sink): if s.rd(ep.ack): if s.rd(ep.stb): @@ -67,3 +67,11 @@ class SimActor(PureSimulable, Actor): self._next_transactions() if self.active: self._process_transactions(s) + +class SimActor(Actor): + def __init__(self, generator, *endpoint_descriptions, **misc): + super().__init__(*endpoint_descriptions, **misc) + self.token_exchanger = TokenExchanger(self, generator) + + def get_fragment(self): + return self.token_exchanger.get_fragment()