Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Mar 11th, 2013  |  syntax: None  |  size: 1.93 KB  |  views: 23  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. diff --git a/migen/actorlib/sim.py b/migen/actorlib/sim.py
  2. index de11f1c..5b83d64 100644
  3. --- a/migen/actorlib/sim.py
  4. +++ b/migen/actorlib/sim.py
  5. @@ -22,27 +22,31 @@ class TokenExchanger(PureSimulable):
  6.                 for token in self.active:
  7.                         ep = self.actor.endpoints[token.endpoint]
  8.                         if isinstance(ep, Sink):
  9. -                               if s.rd(ep.ack):
  10. -                                       if s.rd(ep.stb):
  11. -                                               token.value = s.multiread(ep.token)
  12. -                                               completed.add(token)
  13. -                                               s.wr(ep.ack, 0)
  14. -                               else:
  15. -                                       s.wr(ep.ack, 1)
  16. +                               if s.rd(ep.ack) and s.rd(ep.stb):
  17. +                                       token.value = s.multiread(ep.token)
  18. +                                       completed.add(token)
  19. +                                       s.wr(ep.ack, 0)
  20.                         elif isinstance(ep, Source):
  21. -                               if s.rd(ep.stb):
  22. -                                       if s.rd(ep.ack):
  23. -                                               completed.add(token)
  24. -                                               s.wr(ep.stb, 0)
  25. -                               else:
  26. -                                       s.wr(ep.stb, 1)
  27. -                                       s.multiwrite(ep.token, token.value)
  28. +                               if s.rd(ep.ack) and s.rd(ep.stb):
  29. +                                       completed.add(token)
  30. +                                       s.wr(ep.stb, 0)
  31.                         else:
  32.                                 raise TypeError
  33.                 self.active -= completed
  34.                 if not self.active:
  35.                         self.busy = True
  36. -      
  37. +
  38. +       def _update_control_signals(self, s):
  39. +               for token in self.active:
  40. +                       ep = self.actor.endpoints[token.endpoint]
  41. +                       if isinstance(ep, Sink):
  42. +                               s.wr(ep.ack, 1)
  43. +                       elif isinstance(ep, Source):
  44. +                               s.multiwrite(ep.token, token.value)
  45. +                               s.wr(ep.stb, 1)
  46. +                       else:
  47. +                               raise TypeError
  48. +
  49.         def _next_transactions(self):
  50.                 try:
  51.                         transactions = next(self.generator)
  52. @@ -62,13 +66,14 @@ class TokenExchanger(PureSimulable):
  53.                         raise TypeError
  54.                 if self.active and all(transaction.idle_wait for transaction in self.active):
  55.                         self.busy = False
  56. -      
  57. +
  58.         def do_simulation(self, s):
  59.                 if not self.done:
  60. -                       if not self.active:
  61. -                               self._next_transactions()
  62.                         if self.active:
  63.                                 self._process_transactions(s)
  64. +                       if not self.active:
  65. +                               self._next_transactions()
  66. +                               self._update_control_signals(s)
  67.  
  68.  class SimActor(Actor):
  69.         def __init__(self, generator, *endpoint_descriptions, **misc):