hdl.ir: allow ClockSignal and ResetSignal in ports.

Fixes #248.
This commit is contained in:
whitequark 2019-10-13 03:39:56 +00:00
parent 722b3879f4
commit 29253295ee
3 changed files with 14 additions and 2 deletions

View file

@ -540,6 +540,7 @@ class Fragment:
if ports is None:
fragment._propagate_ports(ports=(), all_undef_as_ports=True)
else:
ports = map(DomainLowerer(fragment.domains).on_value, ports)
new_ports = []
for cd in new_domains:
new_ports.append(cd.clk)

View file

@ -486,8 +486,8 @@ class DomainRenamer(FragmentTransformer, ValueTransformer, StatementTransformer)
class DomainLowerer(FragmentTransformer, ValueTransformer, StatementTransformer):
def __init__(self):
self.domains = None
def __init__(self, domains=None):
self.domains = domains
def _resolve(self, domain, context):
if domain not in self.domains:

View file

@ -264,6 +264,17 @@ class FragmentPortsTestCase(FHDLTestCase):
(s, "io")
]))
def test_clk_rst(self):
sync = ClockDomain()
f = Fragment()
f.add_domains(sync)
f = f.prepare(ports=(ClockSignal("sync"), ResetSignal("sync")))
self.assertEqual(f.ports, SignalDict([
(sync.clk, "i"),
(sync.rst, "i"),
]))
class FragmentDomainsTestCase(FHDLTestCase):
def test_iter_signals(self):