@@ -262,11 +262,13 @@ def remove_trigger(self, process, signal):
262
262
def wait_interval (self , process , interval ):
263
263
self .timeline .delay (interval , process )
264
264
265
- def commit (self ):
265
+ def commit (self , changed = None ):
266
266
converged = True
267
267
for signal_state in self .pending :
268
268
if signal_state .commit ():
269
269
converged = False
270
+ if changed is not None :
271
+ changed .update (self .pending )
270
272
self .pending .clear ()
271
273
return converged
272
274
@@ -294,6 +296,8 @@ def reset(self):
294
296
process .reset ()
295
297
296
298
def _step (self ):
299
+ changed = set () if self ._vcd_writers else None
300
+
297
301
# Performs the two phases of a delta cycle in a loop:
298
302
converged = False
299
303
while not converged :
@@ -303,13 +307,13 @@ def _step(self):
303
307
process .runnable = False
304
308
process .run ()
305
309
306
- for vcd_writer in self ._vcd_writers :
307
- for signal_state in self ._state .pending :
308
- vcd_writer .update (self ._timeline .now ,
309
- signal_state .signal , signal_state .next )
310
-
311
310
# 2. commit: apply every queued signal change, waking up any waiting processes
312
- converged = self ._state .commit ()
311
+ converged = self ._state .commit (changed )
312
+
313
+ for vcd_writer in self ._vcd_writers :
314
+ for signal_state in changed :
315
+ vcd_writer .update (self ._timeline .now ,
316
+ signal_state .signal , signal_state .curr )
313
317
314
318
def advance (self ):
315
319
self ._step ()
0 commit comments