Skip to content

Commit 0f02b80

Browse files
committed
hdl: bring new naming rules to ClockDomain and friends
1 parent 48e000f commit 0f02b80

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

amaranth/hdl/_ast.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2103,8 +2103,7 @@ class ClockSignal(Value):
21032103
"""
21042104
def __init__(self, domain="sync", *, src_loc_at=0):
21052105
super().__init__(src_loc_at=src_loc_at)
2106-
if not isinstance(domain, str):
2107-
raise TypeError(f"Clock domain name must be a string, not {domain!r}")
2106+
validate_name(domain, "Clock domain name")
21082107
if domain == "comb":
21092108
raise ValueError(f"Domain '{domain}' does not have a clock")
21102109
self._domain = domain
@@ -2143,8 +2142,7 @@ class ResetSignal(Value):
21432142
"""
21442143
def __init__(self, domain="sync", allow_reset_less=False, *, src_loc_at=0):
21452144
super().__init__(src_loc_at=src_loc_at)
2146-
if not isinstance(domain, str):
2147-
raise TypeError(f"Clock domain name must be a string, not {domain!r}")
2145+
validate_name(domain, "Clock domain name")
21482146
if domain == "comb":
21492147
raise ValueError(f"Domain '{domain}' does not have a reset")
21502148
self._domain = domain

amaranth/hdl/_cd.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .. import tracer
22
from ._ast import Signal
3+
from .._utils import validate_name
34

45

56
__all__ = ["ClockDomain", "DomainError"]
@@ -54,6 +55,7 @@ def __init__(self, name=None, *, clk_edge="pos", reset_less=False, async_reset=F
5455
name = tracer.get_var_name()
5556
except tracer.NameNotFound:
5657
raise ValueError("Clock domain name must be specified explicitly")
58+
validate_name(name, "Clock domain name")
5759
if name.startswith("cd_"):
5860
name = name[3:]
5961
if name == "comb":
@@ -78,6 +80,7 @@ def __init__(self, name=None, *, clk_edge="pos", reset_less=False, async_reset=F
7880
self.local = local
7981

8082
def rename(self, new_name):
83+
validate_name(new_name, "Clock domain name")
8184
self.name = new_name
8285
self.clk.name = self._name_for(new_name, "clk")
8386
if self.rst is not None:

tests/test_hdl_cd.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ def test_name(self):
2323
ClockDomain()
2424
cd_reset = ClockDomain(local=True)
2525
self.assertEqual(cd_reset.local, True)
26+
with self.assertRaisesRegex(TypeError,
27+
r"^Clock domain name must be a string, not 1$"):
28+
sync.rename(1)
2629

2730
def test_edge(self):
2831
sync = ClockDomain()
@@ -64,6 +67,9 @@ def test_rename(self):
6467
self.assertEqual(sync.name, "pix")
6568
self.assertEqual(sync.clk.name, "pix_clk")
6669
self.assertEqual(sync.rst.name, "pix_rst")
70+
with self.assertRaisesRegex(TypeError,
71+
r"^Clock domain name must be a string, not 1$"):
72+
sync.rename(1)
6773

6874
def test_rename_reset_less(self):
6975
sync = ClockDomain(reset_less=True)

0 commit comments

Comments
 (0)