Skip to content

Commit

Permalink
back.pysim: override ResetSynchronizer implementation.
Browse files Browse the repository at this point in the history
This was rewritten to use Yosys cells in 779f3ee to avoid leaking
the interior clock domain, but the simulator doesn't understand Yosys
cells. So, use the old implementation in the simulator.
  • Loading branch information
whitequark committed Jun 28, 2019
1 parent 779f3ee commit 300d47c
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion nmigen/back/pysim.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
from ..hdl.ast import *
from ..hdl.ir import *
from ..hdl.xfrm import ValueVisitor, StatementVisitor
from ..hdl.dsl import Module
from ..hdl.cd import ClockDomain


__all__ = ["Simulator", "Delay", "Tick", "Passive", "DeadlineError"]
Expand Down Expand Up @@ -351,9 +353,23 @@ def run(state):
return run


class _SimulatorPlatform:
def get_reset_sync(self, reset_sync):
m = Module()
m.domains += ClockDomain("_reset_sync", async_reset=True)
for i, o in zip((0, *reset_sync._regs), reset_sync._regs):
m.d._reset_sync += o.eq(i)
m.d.comb += [
ClockSignal("_reset_sync").eq(ClockSignal(reset_sync.domain)),
ResetSignal("_reset_sync").eq(reset_sync.arst),
ResetSignal(reset_sync.domain).eq(reset_sync._regs[-1])
]
return m


class Simulator:
def __init__(self, fragment, vcd_file=None, gtkw_file=None, traces=()):
self._fragment = Fragment.get(fragment, platform=None)
self._fragment = Fragment.get(fragment, platform=_SimulatorPlatform())

self._signal_slots = SignalDict() # Signal -> int/slot
self._slot_signals = list() # int/slot -> Signal
Expand Down

0 comments on commit 300d47c

Please sign in to comment.