This commit adds a best-effort error for a common mistake of adding
a clock driving the same domain twice, such as a result of
a copy-paste error.
Fixes #27.
self._delta = 0.
self._epsilon = 1e-10
self._fastest_clock = self._epsilon
+ self._all_clocks = set() # {str/domain}
self._state = _State()
self._processes = set() # {process}
def add_clock(self, period, phase=None, domain="sync"):
if self._fastest_clock == self._epsilon or period < self._fastest_clock:
self._fastest_clock = period
+ if domain in self._all_clocks:
+ raise ValueError("Domain '{}' already has a clock driving it"
+ .format(domain))
half_period = period / 2
if phase is None:
yield clk.eq(0)
yield Delay(half_period)
self.add_process(clk_process)
+ self._all_clocks.add(domain)
def __enter__(self):
if self._vcd_file:
"a generator function"):
sim.add_process(1)
+ def test_add_clock_wrong(self):
+ with self.assertSimulation(Module()) as sim:
+ sim.add_clock(1)
+ with self.assertRaises(ValueError,
+ msg="Domain 'sync' already has a clock driving it"):
+ sim.add_clock(1)
+
def test_eq_signal_unused_wrong(self):
self.setUp_lhs_rhs()
self.s = Signal()