amaranth/amaranth/sim/_pyclock.py
2021-12-10 10:34:13 +00:00

35 lines
793 B
Python

from ._base import BaseProcess
__all__ = ["PyClockProcess"]
class PyClockProcess(BaseProcess):
def __init__(self, state, signal, *, phase, period):
assert len(signal) == 1
self.state = state
self.slot = self.state.get_signal(signal)
self.phase = phase
self.period = period
self.reset()
def reset(self):
self.runnable = True
self.passive = True
self.initial = True
def run(self):
self.runnable = False
if self.initial:
self.initial = False
self.state.wait_interval(self, self.phase)
else:
clk_state = self.state.slots[self.slot]
clk_state.set(not clk_state.curr)
self.state.wait_interval(self, self.period / 2)