def on_Signal(self, value):
if self.sensitivity is not None:
self.sensitivity.add(value)
+ if value not in self.signal_slots:
+ # A signal that is neither driven nor a port always remains at its reset state.
+ return lambda state: value.reset
value_slot = self.signal_slots[value]
if self.signal_mode == "rhs":
return lambda state: state.curr[value_slot]
funclet = compiler(statements)
def add_funclet(signal, funclet):
- self._funclets[self._signal_slots[signal]].add(funclet)
+ if signal in self._signal_slots:
+ self._funclets[self._signal_slots[signal]].add(funclet)
for signal in compiler.sensitivity:
add_funclet(signal, funclet)
sim.add_clock(1e-6)
sim.add_process(process)
+ def test_memory_read_only(self):
+ self.m = Module()
+ self.memory = Memory(width=8, depth=4, init=[0xaa, 0x55])
+ self.m.submodules.rdport = self.rdport = self.memory.read_port()
+ with self.assertSimulation(self.m) as sim:
+ def process():
+ self.assertEqual((yield self.rdport.data), 0xaa)
+ yield self.rdport.addr.eq(1)
+ yield
+ yield
+ self.assertEqual((yield self.rdport.data), 0x55)
+ sim.add_clock(1e-6)
+ sim.add_sync_process(process)
+
def test_wrong_not_run(self):
with self.assertWarns(UserWarning,
msg="Simulation created, but not run"):