-
Notifications
You must be signed in to change notification settings - Fork 178
/
Copy pathtest_hdl_cd.py
79 lines (68 loc) · 2.72 KB
/
test_hdl_cd.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
from amaranth.hdl._cd import *
from .utils import *
class ClockDomainTestCase(FHDLTestCase):
def test_name(self):
sync = ClockDomain()
self.assertEqual(sync.name, "sync")
self.assertEqual(sync.clk.name, "clk")
self.assertEqual(sync.rst.name, "rst")
self.assertEqual(sync.local, False)
pix = ClockDomain()
self.assertEqual(pix.name, "pix")
self.assertEqual(pix.clk.name, "pix_clk")
self.assertEqual(pix.rst.name, "pix_rst")
cd_pix = ClockDomain()
self.assertEqual(cd_pix.name, "pix")
dom = [ClockDomain("foo")][0]
self.assertEqual(dom.name, "foo")
with self.assertRaisesRegex(ValueError,
r"^Clock domain name must be specified explicitly$"):
ClockDomain()
cd_reset = ClockDomain(local=True)
self.assertEqual(cd_reset.local, True)
def test_edge(self):
sync = ClockDomain()
self.assertEqual(sync.clk_edge, "pos")
sync = ClockDomain(clk_edge="pos")
self.assertEqual(sync.clk_edge, "pos")
sync = ClockDomain(clk_edge="neg")
self.assertEqual(sync.clk_edge, "neg")
def test_edge_wrong(self):
with self.assertRaisesRegex(ValueError,
r"^Domain clock edge must be one of 'pos' or 'neg', not 'xxx'$"):
ClockDomain("sync", clk_edge="xxx")
def test_with_reset(self):
pix = ClockDomain()
self.assertIsNotNone(pix.clk)
self.assertIsNotNone(pix.rst)
self.assertFalse(pix.async_reset)
def test_without_reset(self):
pix = ClockDomain(reset_less=True)
self.assertIsNotNone(pix.clk)
self.assertIsNone(pix.rst)
self.assertFalse(pix.async_reset)
def test_async_reset(self):
pix = ClockDomain(async_reset=True)
self.assertIsNotNone(pix.clk)
self.assertIsNotNone(pix.rst)
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")
def test_rename_reset_less(self):
sync = ClockDomain(reset_less=True)
self.assertEqual(sync.name, "sync")
self.assertEqual(sync.clk.name, "clk")
sync.rename("pix")
self.assertEqual(sync.name, "pix")
self.assertEqual(sync.clk.name, "pix_clk")
def test_wrong_name_comb(self):
with self.assertRaisesRegex(ValueError,
r"^Domain 'comb' may not be clocked$"):
comb = ClockDomain()