fhdl.cd: rename ClockDomain signals together with domain.
This commit is contained in:
parent
07c818e077
commit
71f1f717c4
|
@ -30,6 +30,14 @@ class ClockDomain:
|
||||||
rst : Signal or None, inout
|
rst : Signal or None, inout
|
||||||
Reset signal for this domain. Can be driven or used to drive.
|
Reset signal for this domain. Can be driven or used to drive.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _name_for(domain_name, signal_name):
|
||||||
|
if domain_name == "sync":
|
||||||
|
return signal_name
|
||||||
|
else:
|
||||||
|
return "{}_{}".format(domain_name, signal_name)
|
||||||
|
|
||||||
def __init__(self, name=None, reset_less=False, async_reset=False):
|
def __init__(self, name=None, reset_less=False, async_reset=False):
|
||||||
if name is None:
|
if name is None:
|
||||||
try:
|
try:
|
||||||
|
@ -40,10 +48,16 @@ class ClockDomain:
|
||||||
name = name[3:]
|
name = name[3:]
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|
||||||
self.clk = Signal(name=self.name + "_clk", src_loc_at=1)
|
self.clk = Signal(name=self._name_for(name, "clk"), src_loc_at=1)
|
||||||
if reset_less:
|
if reset_less:
|
||||||
self.rst = None
|
self.rst = None
|
||||||
else:
|
else:
|
||||||
self.rst = Signal(name=self.name + "_rst", src_loc_at=1)
|
self.rst = Signal(name=self._name_for(name, "rst"), src_loc_at=1)
|
||||||
|
|
||||||
self.async_reset = async_reset
|
self.async_reset = async_reset
|
||||||
|
|
||||||
|
def rename(self, name):
|
||||||
|
self.name = name
|
||||||
|
self.clk.name = self._name_for(name, "clk")
|
||||||
|
if self.rst is not None:
|
||||||
|
self.rst.name = self._name_for(name, "rst")
|
||||||
|
|
|
@ -153,7 +153,7 @@ class DomainRenamer(FragmentTransformer, ValueTransformer, StatementTransformer)
|
||||||
if domain in self.domain_map:
|
if domain in self.domain_map:
|
||||||
if cd.name == domain:
|
if cd.name == domain:
|
||||||
# Rename the actual ClockDomain object.
|
# Rename the actual ClockDomain object.
|
||||||
cd.name = self.domain_map[domain]
|
cd.rename(self.domain_map[domain])
|
||||||
else:
|
else:
|
||||||
assert cd.name == self.domain_map[domain]
|
assert cd.name == self.domain_map[domain]
|
||||||
new_fragment.add_domains(cd)
|
new_fragment.add_domains(cd)
|
||||||
|
|
|
@ -4,8 +4,14 @@ from .tools import *
|
||||||
|
|
||||||
class ClockDomainCase(FHDLTestCase):
|
class ClockDomainCase(FHDLTestCase):
|
||||||
def test_name(self):
|
def test_name(self):
|
||||||
|
sync = ClockDomain()
|
||||||
|
self.assertEqual(sync.name, "sync")
|
||||||
|
self.assertEqual(sync.clk.name, "clk")
|
||||||
|
self.assertEqual(sync.rst.name, "rst")
|
||||||
pix = ClockDomain()
|
pix = ClockDomain()
|
||||||
self.assertEqual(pix.name, "pix")
|
self.assertEqual(pix.name, "pix")
|
||||||
|
self.assertEqual(pix.clk.name, "pix_clk")
|
||||||
|
self.assertEqual(pix.rst.name, "pix_rst")
|
||||||
cd_pix = ClockDomain()
|
cd_pix = ClockDomain()
|
||||||
self.assertEqual(pix.name, "pix")
|
self.assertEqual(pix.name, "pix")
|
||||||
dom = [ClockDomain("foo")][0]
|
dom = [ClockDomain("foo")][0]
|
||||||
|
@ -31,3 +37,13 @@ class ClockDomainCase(FHDLTestCase):
|
||||||
self.assertIsNotNone(pix.clk)
|
self.assertIsNotNone(pix.clk)
|
||||||
self.assertIsNotNone(pix.rst)
|
self.assertIsNotNone(pix.rst)
|
||||||
self.assertTrue(pix.async_reset)
|
self.assertTrue(pix.async_reset)
|
||||||
|
|
||||||
|
def test_rename(self):
|
||||||
|
sync = ClockDomain()
|
||||||
|
self.assertEqual(sync.name, "sync")
|
||||||
|
self.assertEqual(sync.clk.name, "clk")
|
||||||
|
self.assertEqual(sync.rst.name, "rst")
|
||||||
|
sync.rename("pix")
|
||||||
|
self.assertEqual(sync.name, "pix")
|
||||||
|
self.assertEqual(sync.clk.name, "pix_clk")
|
||||||
|
self.assertEqual(sync.rst.name, "pix_rst")
|
||||||
|
|
Loading…
Reference in a new issue