hdl.ir: resolve hierarchy conflicts before creating missing domains.

Otherwise, code such as:

    m.submodules.a = (something with cd_sync)
    m.submodules.b = (something with cd_sync)
    m.d.b_sync += x.eq(y)

causes an assertion failure.

Fixes #304 (again).
This commit is contained in:
whitequark 2020-01-18 10:30:36 +00:00
parent 7cb3095334
commit a7be3b480a
2 changed files with 29 additions and 2 deletions

View file

@ -408,6 +408,22 @@ class FragmentDomainsTestCase(FHDLTestCase):
None: SignalSet((ResetSignal("b_sync"),))
}))
def test_domain_conflict_rename_drivers(self):
cda = ClockDomain("sync")
cdb = ClockDomain("sync")
s = Signal()
fa = Fragment()
fa.add_domains(cda)
fb = Fragment()
fb.add_domains(cdb)
f = Fragment()
f.add_subfragment(fa, "a")
f.add_subfragment(fb, "b")
f.add_driver(s, "b_sync")
f._propagate_domains(lambda name: ClockDomain(name))
def test_propagate_down(self):
cd = ClockDomain()