back.pysim: fix handling of process termination.

This commit is contained in:
whitequark 2018-12-13 18:17:58 +00:00
parent fb27c2520b
commit 6a4004ef8d
2 changed files with 13 additions and 3 deletions

View file

@ -1,5 +1,5 @@
from nmigen.fhdl import * from nmigen.fhdl import *
from nmigen.back import rtlil, verilog from nmigen.back import rtlil, verilog, pysim
class ClockDivisor: class ClockDivisor:
@ -17,5 +17,16 @@ class ClockDivisor:
ctr = ClockDivisor(factor=16) ctr = ClockDivisor(factor=16)
frag = ctr.get_fragment(platform=None) frag = ctr.get_fragment(platform=None)
# print(rtlil.convert(frag, ports=[ctr.o, ctr.ce])) # print(rtlil.convert(frag, ports=[ctr.o, ctr.ce]))
print(verilog.convert(frag, ports=[ctr.o, ctr.ce])) print(verilog.convert(frag, ports=[ctr.o, ctr.ce]))
sim = pysim.Simulator(frag, vcd_file=open("ctrl.vcd", "w"))
sim.add_clock("sync", 1e-6)
def sim_proc():
yield pysim.Delay(15.25e-6)
yield ctr.ce.eq(Const(1))
yield pysim.Delay(15e-6)
yield ctr.ce.eq(Const(0))
sim.add_process(sim_proc())
with sim: sim.run_until(100e-6, run_passive=True)

View file

@ -320,8 +320,7 @@ class Simulator:
stmt = proc.send(None) stmt = proc.send(None)
except StopIteration: except StopIteration:
self._processes.remove(proc) self._processes.remove(proc)
self._passive.remove(proc) self._passive.discard(proc)
self._suspended.remove(proc)
return return
if isinstance(stmt, Delay): if isinstance(stmt, Delay):