22import math
33
44from systemrdl import RDLListener , RDLWalker
5- from systemrdl .node import AddrmapNode , RegNode
5+ from systemrdl .node import AddrmapNode , RegNode , FieldNode
66
77from ..subcommand import ExporterSubcommand
88
1111
1212
1313class DumpListener (RDLListener ):
14- def __init__ (self , hex_digits :int , unroll : bool ) -> None :
14+ def __init__ (self , hex_digits : int , unroll : bool , show_fields : bool ) -> None :
1515 self .hex_digits = hex_digits
1616 self .unroll = unroll
17+ self .show_fields = show_fields
1718
1819 def enter_Reg (self , node : RegNode ) -> None :
1920 if self .unroll :
@@ -28,6 +29,14 @@ def enter_Reg(self, node: RegNode) -> None:
2829 node .get_path (empty_array_suffix = "[{dim:d}]" )
2930 )
3031
32+ def enter_Field (self , node : FieldNode ) -> None :
33+ if not self .show_fields :
34+ return
35+
36+ print (f"\t [{ node .msb } :{ node .lsb } ] { node .inst_name } " )
37+
38+
39+
3140
3241class Dump (ExporterSubcommand ):
3342 name = "dump"
@@ -42,10 +51,16 @@ def add_exporter_arguments(self, arg_group: 'argparse._ActionsContainer') -> Non
4251 action = "store_true" ,
4352 help = "Unroll arrays"
4453 )
54+ arg_group .add_argument (
55+ "-F" , "--fields" ,
56+ default = False ,
57+ action = "store_true" ,
58+ help = "Show fields"
59+ )
4560
4661
4762 def do_export (self , top_node : AddrmapNode , options : 'argparse.Namespace' ) -> None :
4863 hex_digits = math .ceil (top_node .total_size .bit_length () / 4 )
4964 walker = RDLWalker (unroll = options .unroll )
50- listener = DumpListener (hex_digits , options .unroll )
65+ listener = DumpListener (hex_digits , options .unroll , options . fields )
5166 walker .walk (top_node , listener )
0 commit comments