Skip to content

Commit 4464c31

Browse files
committed
tests/test_csr_reg: fix silencing of UnusedElaboratable warnings.
1 parent 139c002 commit 4464c31

File tree

1 file changed

+6
-64
lines changed

1 file changed

+6
-64
lines changed

tests/test_csr_reg.py

Lines changed: 6 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
# amaranth: UnusedElaboratable=no
2-
31
import unittest
2+
import warnings
43
from amaranth import *
4+
from amaranth.hdl.ir import UnusedElaboratable
55
from amaranth.lib import wiring
66
from amaranth.lib.wiring import In, Out
77
from amaranth.sim import *
@@ -10,9 +10,8 @@
1010
from amaranth_soc.csr import field, Element
1111

1212

13-
def _silence_unused(*objs):
14-
for obj in objs:
15-
Fragment.get(obj, platform=None)
13+
# The `amaranth: UnusedElaboratable=no` modeline isn't enough here.
14+
warnings.simplefilter(action="ignore", category=UnusedElaboratable)
1615

1716

1817
def _compatible_fields(a, b):
@@ -133,7 +132,6 @@ def elaborate(self, platform):
133132
field_u8 = Field(MockField, unsigned(8), reset=1).create()
134133
self.assertEqual(field_u8.port.shape, unsigned(8))
135134
self.assertEqual(field_u8.reset, 1)
136-
_silence_unused(field_u8)
137135

138136
def test_create_multiple(self):
139137
class MockField(wiring.Component):
@@ -145,7 +143,6 @@ def elaborate(self, platform):
145143
field_1 = Field(MockField).create()
146144
field_2 = Field(MockField).create()
147145
self.assertIsNot(field_1, field_2)
148-
_silence_unused(field_1, field_2)
149146

150147

151148
class FieldMapTestCase(unittest.TestCase):
@@ -170,9 +167,6 @@ def test_simple(self):
170167

171168
self.assertEqual(len(field_map), 3)
172169

173-
_silence_unused(*(v for k, v in field_map.flatten()))
174-
_silence_unused(field_r_u1, field_rw_s3, field_rw_u4)
175-
176170
def test_iter(self):
177171
field_map = FieldMap({
178172
"a": Field(field.R, unsigned(1)),
@@ -182,7 +176,6 @@ def test_iter(self):
182176
("a", field_map["a"]),
183177
("b", field_map["b"]),
184178
])
185-
_silence_unused(*(v for k, v in field_map.flatten()))
186179

187180
def test_flatten(self):
188181
field_map = FieldMap({
@@ -195,7 +188,6 @@ def test_flatten(self):
195188
(("b",), field_map["b"]),
196189
(("c", "d"), field_map["c"]["d"]),
197190
])
198-
_silence_unused(*(v for k, v in field_map.flatten()))
199191

200192
def test_wrong_dict(self):
201193
with self.assertRaisesRegex(TypeError,
@@ -219,30 +211,25 @@ def test_getitem_wrong_key(self):
219211
field_map = FieldMap({"a": Field(field.RW, unsigned(1))})
220212
with self.assertRaises(KeyError):
221213
field_map["b"]
222-
_silence_unused(*(v for k, v in field_map.flatten()))
223214

224215
def test_getitem_reserved(self):
225216
field_map = FieldMap({"_reserved": Field(field.RW, unsigned(1))})
226217
field_rw_u1 = Field(field.RW, unsigned(1)).create()
227218
self.assertTrue(_compatible_fields(field_map["_reserved"], field_rw_u1))
228-
_silence_unused(*(v for k, v in field_map.flatten()))
229-
_silence_unused(field_rw_u1)
230219

231220
def test_getattr_missing(self):
232221
field_map = FieldMap({"a": Field(field.RW, unsigned(1)),
233222
"b": Field(field.RW, unsigned(1))})
234223
with self.assertRaisesRegex(AttributeError,
235224
r"Field map does not have a field 'c'; did you mean one of: 'a', 'b'?"):
236225
field_map.c
237-
_silence_unused(*(v for k, v in field_map.flatten()))
238226

239227
def test_getattr_reserved(self):
240228
field_map = FieldMap({"_reserved": Field(field.RW, unsigned(1))})
241229
with self.assertRaisesRegex(AttributeError,
242230
r"Field map field '_reserved' has a reserved name and may only be accessed by "
243231
r"indexing"):
244232
field_map._reserved
245-
_silence_unused(*(v for k, v in field_map.flatten()))
246233

247234

248235
class FieldArrayTestCase(unittest.TestCase):
@@ -252,8 +239,6 @@ def test_simple(self):
252239
self.assertEqual(len(field_array), 8)
253240
for i in range(8):
254241
self.assertTrue(_compatible_fields(field_array[i], field_rw_u2))
255-
_silence_unused(*(v for k, v in field_array.flatten()))
256-
_silence_unused(field_rw_u2)
257242

258243
def test_dim_2(self):
259244
field_array = FieldArray([[Field(field.RW, unsigned(1)) for _ in range(4)]
@@ -263,8 +248,6 @@ def test_dim_2(self):
263248
for i in range(4):
264249
for j in range(4):
265250
self.assertTrue(_compatible_fields(field_array[i][j], field_rw_u1))
266-
_silence_unused(*(v for k, v in field_array.flatten()))
267-
_silence_unused(field_rw_u1)
268251

269252
def test_nested(self):
270253
field_array = FieldArray([{"a": Field(field.RW, unsigned(4)),
@@ -277,15 +260,12 @@ def test_nested(self):
277260
self.assertTrue(_compatible_fields(field_array[i]["a"], field_rw_u4))
278261
for j in range(4):
279262
self.assertTrue(_compatible_fields(field_array[i]["b"][j], field_rw_u1))
280-
_silence_unused(*(v for k, v in field_array.flatten()))
281-
_silence_unused(field_rw_u4, field_rw_u1)
282263

283264
def test_iter(self):
284265
field_array = FieldArray([Field(field.RW, 1) for _ in range(3)])
285266
self.assertEqual(list(field_array), [
286267
field_array[i] for i in range(3)
287268
])
288-
_silence_unused(*(v for k, v in field_array.flatten()))
289269

290270
def test_flatten(self):
291271
field_array = FieldArray([{"a": Field(field.RW, 4),
@@ -299,7 +279,6 @@ def test_flatten(self):
299279
((1, "b", 0), field_array[1]["b"][0]),
300280
((1, "b", 1), field_array[1]["b"][1]),
301281
])
302-
_silence_unused(*(v for k, v in field_array.flatten()))
303282

304283
def test_wrong_fields(self):
305284
with self.assertRaisesRegex(TypeError,
@@ -340,8 +319,6 @@ def test_fields_dict(self):
340319
self.assertEqual(reg.element.access.readable(), True)
341320
self.assertEqual(reg.element.access.writable(), True)
342321

343-
_silence_unused(reg, field_r_u1, field_rw1c_u3, field_rw_s2, field_w_u1)
344-
345322
def test_fields_list(self):
346323
reg = Register(access="r", fields=[
347324
{"a": Field(field.R, unsigned(1))} for _ in range(2)
@@ -357,7 +334,6 @@ def test_fields_list(self):
357334
self.assertEqual(reg.element.access.readable(), True)
358335
self.assertEqual(reg.element.access.writable(), False)
359336

360-
_silence_unused(reg, field_r_u1)
361337

362338
def test_wrong_fields(self):
363339
with self.assertRaisesRegex(TypeError,
@@ -395,7 +371,6 @@ class MockRegister(Register):
395371
self.assertEqual(reg.element.access.readable(), True)
396372
self.assertEqual(reg.element.access.writable(), True)
397373

398-
_silence_unused(reg, field_r_u1, field_rw1c_u3, field_w_u1, field_rw_s2)
399374

400375
def test_annotations_conflict(self):
401376
class MockRegister(Register):
@@ -412,25 +387,19 @@ class MockRegister(Register):
412387
field_r_u1 = Field(field.R, unsigned(1)).create()
413388
self.assertTrue(_compatible_fields(reg.f.a, field_r_u1))
414389
self.assertEqual(reg.element.width, 1)
415-
_silence_unused(reg, field_r_u1)
416390

417391
def test_wrong_access(self):
418392
with self.assertRaisesRegex(TypeError,
419393
r"Access mode must be one of \"r\", \"w\", or \"rw\", not 'foo'"):
420394
Register(access="foo")
421395

422396
def test_access_mismatch(self):
423-
class _UnusedField(Field):
424-
def create(self):
425-
obj = super().create()
426-
_silence_unused(obj)
427-
return obj
428397
with self.assertRaisesRegex(ValueError,
429398
r"Field a__b is readable, but register access mode is \<Access\.W: 'w'\>"):
430-
Register("w", {"a": {"b": _UnusedField(field.RW, unsigned(1))}})
399+
Register("w", {"a": {"b": Field(field.RW, unsigned(1))}})
431400
with self.assertRaisesRegex(ValueError,
432401
r"Field a__b is writable, but register access mode is \<Access\.R: 'r'\>"):
433-
Register("r", {"a": {"b": _UnusedField(field.RW, unsigned(1))}})
402+
Register("r", {"a": {"b": Field(field.RW, unsigned(1))}})
434403

435404
def test_iter(self):
436405
reg = Register("rw", {
@@ -446,7 +415,6 @@ def test_iter(self):
446415
(("e", 0), reg.f.e[0]),
447416
(("e", 1), reg.f.e[1]),
448417
])
449-
_silence_unused(reg)
450418

451419
def test_sim(self):
452420
dut = Register("rw", {
@@ -588,14 +556,12 @@ def setUp(self):
588556
def test_add_register(self):
589557
reg_rw_a = Register("rw", {"a": Field(field.RW, 1)})
590558
self.assertIs(self.map.add_register(reg_rw_a, name="reg_rw_a"), reg_rw_a)
591-
_silence_unused(reg_rw_a)
592559

593560
def test_add_register_frozen(self):
594561
self.map.freeze()
595562
reg_rw_a = Register("rw", {"a": Field(field.RW, 1)})
596563
with self.assertRaisesRegex(ValueError, r"Register map is frozen"):
597564
self.map.add_register(reg_rw_a, name="reg_rw_a")
598-
_silence_unused(reg_rw_a)
599565

600566
def test_add_register_wrong_type(self):
601567
with self.assertRaisesRegex(TypeError,
@@ -607,14 +573,12 @@ def test_add_register_wrong_name(self):
607573
with self.assertRaisesRegex(TypeError,
608574
r"Name must be a non-empty string, not None"):
609575
self.map.add_register(reg_rw_a, name=None)
610-
_silence_unused(reg_rw_a)
611576

612577
def test_add_register_empty_name(self):
613578
reg_rw_a = Register("rw", {"a": Field(field.RW, 1)})
614579
with self.assertRaisesRegex(TypeError,
615580
r"Name must be a non-empty string, not ''"):
616581
self.map.add_register(reg_rw_a, name="")
617-
_silence_unused(reg_rw_a)
618582

619583
def test_add_cluster(self):
620584
cluster = RegisterMap()
@@ -665,8 +629,6 @@ def test_namespace_collision(self):
665629
r"Name 'cluster_0' is already used by *"):
666630
self.map.add_register(reg_rw_b, name="cluster_0")
667631

668-
_silence_unused(reg_rw_a, reg_rw_b)
669-
670632
def test_iter_registers(self):
671633
reg_rw_a = Register("rw", {"a": Field(field.RW, 1)})
672634
reg_rw_b = Register("rw", {"b": Field(field.RW, 1)})
@@ -681,8 +643,6 @@ def test_iter_registers(self):
681643
self.assertIs(registers[1][0], reg_rw_b)
682644
self.assertEqual(registers[1][1], "reg_rw_b")
683645

684-
_silence_unused(reg_rw_a, reg_rw_b)
685-
686646
def test_iter_clusters(self):
687647
cluster_0 = RegisterMap()
688648
cluster_1 = RegisterMap()
@@ -717,8 +677,6 @@ def test_iter_flatten(self):
717677
self.assertIs(registers[1][0], reg_rw_b)
718678
self.assertEqual(registers[1][1], ("cluster_1", "reg_rw_b"))
719679

720-
_silence_unused(reg_rw_a, reg_rw_b)
721-
722680
def test_get_path(self):
723681
reg_rw_a = Register("rw", {"a": Field(field.RW, 1)})
724682
reg_rw_b = Register("rw", {"b": Field(field.RW, 1)})
@@ -738,8 +696,6 @@ def test_get_path(self):
738696
self.assertEqual(self.map.get_path(reg_rw_b), ("reg_rw_b",))
739697
self.assertEqual(self.map.get_path(reg_rw_c), ("cluster_1", "reg_rw_c"))
740698

741-
_silence_unused(reg_rw_a, reg_rw_b, reg_rw_c)
742-
743699
def test_get_path_wrong_register(self):
744700
with self.assertRaisesRegex(TypeError,
745701
r"Register must be an instance of csr\.Register, not 'foo'"):
@@ -749,7 +705,6 @@ def test_get_path_unknown_register(self):
749705
reg_rw_a = Register("rw", {"a": Field(field.RW, 1)})
750706
with self.assertRaises(KeyError):
751707
self.map.get_path(reg_rw_a)
752-
_silence_unused(reg_rw_a)
753708

754709
def test_get_register(self):
755710
reg_rw_a = Register("rw", {"a": Field(field.RW, 1)})
@@ -763,8 +718,6 @@ def test_get_register(self):
763718
self.assertIs(self.map.get_register(("cluster_0", "reg_rw_a")), reg_rw_a)
764719
self.assertIs(self.map.get_register(("reg_rw_b",)), reg_rw_b)
765720

766-
_silence_unused(reg_rw_a, reg_rw_b)
767-
768721
def test_get_register_empty_path(self):
769722
with self.assertRaisesRegex(ValueError, r"Path must be a non-empty iterable"):
770723
self.map.get_register(())
@@ -820,8 +773,6 @@ def test_memory_map(self):
820773
self.assertEqual(registers[3][1], "cluster_0__reg_rw_16")
821774
self.assertEqual(registers[3][2], (4, 6))
822775

823-
_silence_unused(dut)
824-
825776
def test_wrong_register_map(self):
826777
with self.assertRaisesRegex(TypeError,
827778
r"Register map must be an instance of RegisterMap, not 'foo'"):
@@ -867,8 +818,6 @@ def test_register_addr(self):
867818
self.assertEqual(registers[3][1], "cluster_0__reg_rw_16")
868819
self.assertEqual(registers[3][2], (0x22, 0x24))
869820

870-
_silence_unused(dut)
871-
872821
def test_register_alignment(self):
873822
reg_rw_4 = Register("rw", {"a": Field(field.RW, 4)})
874823
reg_rw_8 = Register("rw", {"a": Field(field.RW, 8)})
@@ -909,8 +858,6 @@ def test_register_alignment(self):
909858
self.assertEqual(registers[3][1], "cluster_0__reg_rw_16")
910859
self.assertEqual(registers[3][2], (16, 18))
911860

912-
_silence_unused(dut)
913-
914861
def test_register_out_of_bounds(self):
915862
reg_rw_24 = Register("rw", {"a": Field(field.RW, 24)})
916863
register_map = RegisterMap()
@@ -919,15 +866,13 @@ def test_register_out_of_bounds(self):
919866
r"Address range 0x0\.\.0x3 out of bounds for memory map spanning "
920867
r"range 0x0\.\.0x2 \(1 address bits\)"):
921868
dut = Bridge(register_map, addr_width=1, data_width=8)
922-
_silence_unused(reg_rw_24)
923869

924870
def test_wrong_register_address(self):
925871
reg_rw_4 = Register("rw", {"a": Field(field.RW, 4)})
926872
register_map = RegisterMap()
927873
register_map.add_register(reg_rw_4, name="reg_rw_4")
928874
with self.assertRaisesRegex(TypeError, r"Register address must be a dict, not 'foo'"):
929875
dut = Bridge(register_map, addr_width=1, data_width=8, register_addr="foo")
930-
_silence_unused(reg_rw_4)
931876

932877
def test_wrong_cluster_address(self):
933878
reg_rw_4 = Register("rw", {"a": Field(field.RW, 4)})
@@ -939,15 +884,13 @@ def test_wrong_cluster_address(self):
939884
r"Register address \('cluster_0',\) must be a dict, not 'foo'"):
940885
dut = Bridge(register_map, addr_width=1, data_width=8,
941886
register_addr={"cluster_0": "foo"})
942-
_silence_unused(reg_rw_4)
943887

944888
def test_wrong_register_alignment(self):
945889
reg_rw_4 = Register("rw", {"a": Field(field.RW, 4)})
946890
register_map = RegisterMap()
947891
register_map.add_register(reg_rw_4, name="reg_rw_4")
948892
with self.assertRaisesRegex(TypeError, r"Register alignment must be a dict, not 'foo'"):
949893
dut = Bridge(register_map, addr_width=1, data_width=8, register_alignment="foo")
950-
_silence_unused(reg_rw_4)
951894

952895
def test_wrong_cluster_alignment(self):
953896
reg_rw_4 = Register("rw", {"a": Field(field.RW, 4)})
@@ -959,7 +902,6 @@ def test_wrong_cluster_alignment(self):
959902
r"Register alignment \('cluster_0',\) must be a dict, not 'foo'"):
960903
dut = Bridge(register_map, addr_width=1, data_width=8,
961904
register_alignment={"cluster_0": "foo"})
962-
_silence_unused(reg_rw_4)
963905

964906
def test_sim(self):
965907
reg_rw_4 = Register("rw", {"a": Field(field.RW, 4, reset=0x0)})

0 commit comments

Comments
 (0)