2424from reggen .bus_interfaces import BusInterfaces
2525from reggen .interrupt import Interrupt
2626from reggen .alert import Alert
27- from reggen .clocking import Clocking , ClockingItem
27+ from reggen .params import LocalParam
28+ from reggen .clocking import Clocking
2829from reggen .exporter import Exporter
2930from reggen .systemrdl .udp import register_udps
3031
@@ -462,6 +463,27 @@ def export(self, interface_name: str = "") -> Any:
462463 return instance
463464
464465
466+ @dataclass
467+ class LocalParam2Systemrdl :
468+ inner : LocalParam
469+
470+ def get_value (self ) -> int :
471+ bases = {"h" : 16 , "d" : 10 , "b" : 2 }
472+ value = self .inner .value
473+ base = 10
474+ if match := re .match (r"\d+'([hdb])(.*)" , value ):
475+ base = bases [match [1 ]]
476+ value = match [2 ]
477+ return int (value , base )
478+
479+ def export (self ) -> Parameter :
480+ value = self .get_value ()
481+ name = self .inner .name
482+ rdl_param = Parameter (rdltypes .get_rdltype (value ), name )
483+ rdl_param ._value = value
484+ return rdl_param
485+
486+
465487@dataclass
466488class IpBlock2Systemrdl :
467489 inner : IpBlock
@@ -471,10 +493,8 @@ def export(self) -> Addrmap | None:
471493 rdl_addrmap = self .importer .create_addrmap_definition (self .inner .name )
472494
473495 for param in self .inner .params .get_localparams ():
474- value = int (param .value )
475- rdl_param = Parameter (rdltypes .get_rdltype (value ), param .name )
476- rdl_param ._value = value
477- rdl_addrmap .parameters_dict [param .name ] = rdl_param
496+ param = LocalParam2Systemrdl (param ).export () # type: ignore
497+ rdl_addrmap .parameters_dict [param .name ] = param # type: ignore
478498
479499 for inter_sig in self .inner .inter_signals :
480500 signal = InterSignal2Systemrdl (inter_sig , self .importer ).export ()
0 commit comments