Skip to content

Commit 86955fa

Browse files
committed
[reggen, systemrdl] Handle system verilog syntax in prameters
One example is found in edl.hjson
1 parent ebb54b4 commit 86955fa

1 file changed

Lines changed: 25 additions & 5 deletions

File tree

util/reggen/systemrdl_exporter.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
from reggen.bus_interfaces import BusInterfaces
2525
from reggen.interrupt import Interrupt
2626
from reggen.alert import Alert
27-
from reggen.clocking import Clocking, ClockingItem
27+
from reggen.params import LocalParam
28+
from reggen.clocking import Clocking
2829
from reggen.exporter import Exporter
2930
from 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
466488
class 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

Comments
 (0)