hdl.ir: when adding sync domain to a design, also add it to ports.
Otherwise we end up in a situation where the examples don't have clk and rst as ports, which is not nice. Fixes #67.
This commit is contained in:
parent
39bc59c924
commit
c337246fc5
|
@ -327,8 +327,13 @@ class Fragment:
|
||||||
def _propagate_domains(self, ensure_sync_exists):
|
def _propagate_domains(self, ensure_sync_exists):
|
||||||
self._propagate_domains_up()
|
self._propagate_domains_up()
|
||||||
if ensure_sync_exists and not self.domains:
|
if ensure_sync_exists and not self.domains:
|
||||||
self.add_domains(ClockDomain("sync"))
|
cd_sync = ClockDomain()
|
||||||
|
self.add_domains(cd_sync)
|
||||||
|
new_domains = (cd_sync,)
|
||||||
|
else:
|
||||||
|
new_domains = ()
|
||||||
self._propagate_domains_down()
|
self._propagate_domains_down()
|
||||||
|
return new_domains
|
||||||
|
|
||||||
def _insert_domain_resets(self):
|
def _insert_domain_resets(self):
|
||||||
from .xfrm import ResetInserter
|
from .xfrm import ResetInserter
|
||||||
|
@ -479,14 +484,19 @@ class Fragment:
|
||||||
from .xfrm import SampleLowerer
|
from .xfrm import SampleLowerer
|
||||||
|
|
||||||
fragment = SampleLowerer()(self)
|
fragment = SampleLowerer()(self)
|
||||||
fragment._propagate_domains(ensure_sync_exists)
|
new_domains = fragment._propagate_domains(ensure_sync_exists)
|
||||||
fragment._resolve_hierarchy_conflicts()
|
fragment._resolve_hierarchy_conflicts()
|
||||||
fragment = fragment._insert_domain_resets()
|
fragment = fragment._insert_domain_resets()
|
||||||
fragment = fragment._lower_domain_signals()
|
fragment = fragment._lower_domain_signals()
|
||||||
if ports is None:
|
if ports is None:
|
||||||
fragment._propagate_ports(ports=(), all_undef_as_ports=True)
|
fragment._propagate_ports(ports=(), all_undef_as_ports=True)
|
||||||
else:
|
else:
|
||||||
fragment._propagate_ports(ports=ports, all_undef_as_ports=False)
|
new_ports = []
|
||||||
|
for cd in new_domains:
|
||||||
|
new_ports.append(cd.clk)
|
||||||
|
if cd.rst is not None:
|
||||||
|
new_ports.append(cd.rst)
|
||||||
|
fragment._propagate_ports(ports=(*ports, *new_ports), all_undef_as_ports=False)
|
||||||
return fragment
|
return fragment
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -573,9 +573,9 @@ class InstanceTestCase(FHDLTestCase):
|
||||||
def test_prepare(self):
|
def test_prepare(self):
|
||||||
self.setUp_cpu()
|
self.setUp_cpu()
|
||||||
f = self.inst.prepare()
|
f = self.inst.prepare()
|
||||||
clk = f.domains["sync"].clk
|
sync_clk = f.domains["sync"].clk
|
||||||
self.assertEqual(f.ports, SignalDict([
|
self.assertEqual(f.ports, SignalDict([
|
||||||
(clk, "i"),
|
(sync_clk, "i"),
|
||||||
(self.rst, "i"),
|
(self.rst, "i"),
|
||||||
(self.pins, "io"),
|
(self.pins, "io"),
|
||||||
]))
|
]))
|
||||||
|
@ -583,7 +583,11 @@ class InstanceTestCase(FHDLTestCase):
|
||||||
def test_prepare_explicit_ports(self):
|
def test_prepare_explicit_ports(self):
|
||||||
self.setUp_cpu()
|
self.setUp_cpu()
|
||||||
f = self.inst.prepare(ports=[self.rst, self.stb])
|
f = self.inst.prepare(ports=[self.rst, self.stb])
|
||||||
|
sync_clk = f.domains["sync"].clk
|
||||||
|
sync_rst = f.domains["sync"].rst
|
||||||
self.assertEqual(f.ports, SignalDict([
|
self.assertEqual(f.ports, SignalDict([
|
||||||
|
(sync_clk, "i"),
|
||||||
|
(sync_rst, "i"),
|
||||||
(self.rst, "i"),
|
(self.rst, "i"),
|
||||||
(self.stb, "o"),
|
(self.stb, "o"),
|
||||||
(self.pins, "io"),
|
(self.pins, "io"),
|
||||||
|
|
Loading…
Reference in a new issue