1- # amaranth: UnusedElaboratable=no
2-
31import unittest
2+ import warnings
43from amaranth import *
4+ from amaranth .hdl .ir import UnusedElaboratable
55from amaranth .lib import wiring
66from amaranth .lib .wiring import In , Out
77from amaranth .sim import *
1010from 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
1817def _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
151148class 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
248235class 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