hdl.xfrm: transform drivers as well in DomainRenamer.
This is necessary because drivers may be late bound. Fixes #304.
This commit is contained in:
parent
e18385b613
commit
7cb3095334
|
@ -482,7 +482,7 @@ class DomainRenamer(FragmentTransformer, ValueTransformer, StatementTransformer)
|
||||||
if domain in self.domain_map:
|
if domain in self.domain_map:
|
||||||
domain = self.domain_map[domain]
|
domain = self.domain_map[domain]
|
||||||
for signal in signals:
|
for signal in signals:
|
||||||
new_fragment.add_driver(signal, domain)
|
new_fragment.add_driver(self.on_value(signal), domain)
|
||||||
|
|
||||||
|
|
||||||
class DomainLowerer(FragmentTransformer, ValueTransformer, StatementTransformer):
|
class DomainLowerer(FragmentTransformer, ValueTransformer, StatementTransformer):
|
||||||
|
|
|
@ -389,6 +389,25 @@ class FragmentDomainsTestCase(FHDLTestCase):
|
||||||
"domains explicitly, or give distinct names to subfragments"):
|
"domains explicitly, or give distinct names to subfragments"):
|
||||||
f._propagate_domains_up()
|
f._propagate_domains_up()
|
||||||
|
|
||||||
|
def test_domain_conflict_rename_drivers(self):
|
||||||
|
cda = ClockDomain("sync")
|
||||||
|
cdb = ClockDomain("sync")
|
||||||
|
|
||||||
|
fa = Fragment()
|
||||||
|
fa.add_domains(cda)
|
||||||
|
fb = Fragment()
|
||||||
|
fb.add_domains(cdb)
|
||||||
|
fb.add_driver(ResetSignal("sync"), None)
|
||||||
|
f = Fragment()
|
||||||
|
f.add_subfragment(fa, "a")
|
||||||
|
f.add_subfragment(fb, "b")
|
||||||
|
|
||||||
|
f._propagate_domains_up()
|
||||||
|
fb_new, _ = f.subfragments[1]
|
||||||
|
self.assertEqual(fb_new.drivers, OrderedDict({
|
||||||
|
None: SignalSet((ResetSignal("b_sync"),))
|
||||||
|
}))
|
||||||
|
|
||||||
def test_propagate_down(self):
|
def test_propagate_down(self):
|
||||||
cd = ClockDomain()
|
cd = ClockDomain()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue