back.pysim: collect handlers before running (-5% runtime).
authorwhitequark <whitequark@whitequark.org>
Thu, 13 Dec 2018 18:34:44 +0000 (18:34 +0000)
committerwhitequark <whitequark@whitequark.org>
Thu, 13 Dec 2018 18:34:44 +0000 (18:34 +0000)
nmigen/back/pysim.py

index 5b0f35266052a649a2c66ce115ce712351f26566..7dfda138ee7cc925f09c702438e159294e9c94a1 100644 (file)
@@ -306,11 +306,14 @@ class Simulator:
                 self._vcd_writer.change(vcd_signal, self._timestamp * 1e10, new.value)
 
     def _handle_event(self):
+        handlers = set()
         while self._state.curr_dirty:
             signal = self._state.curr_dirty.pop()
             if signal in self._handlers:
-                for handler in self._handlers[signal]:
-                    handler(self._state)
+                handlers.update(self._handlers[signal])
+
+        for handler in handlers:
+            handler(self._state)
 
         for signal in self._state.next_dirty:
             if signal in self._comb_signals or signal in self._user_signals: