diff --git a/src/peakrdl_python_regmap/__about__.py b/src/peakrdl_python_regmap/__about__.py index 7d2c551..62acbf5 100644 --- a/src/peakrdl_python_regmap/__about__.py +++ b/src/peakrdl_python_regmap/__about__.py @@ -1,2 +1,2 @@ -version_info = (0, 0, 4) +version_info = (0, 0, 5) __version__ = ".".join([str(n) for n in version_info]) diff --git a/src/peakrdl_python_regmap/generator.py b/src/peakrdl_python_regmap/generator.py index 920380e..62e2b12 100644 --- a/src/peakrdl_python_regmap/generator.py +++ b/src/peakrdl_python_regmap/generator.py @@ -36,17 +36,20 @@ class Generator(RDLListener): self.indent_level+=1 def exit_AddressableComponent(self, node: AddressableNode) -> None: - self.f.write(f"{' '*self.indent_level*4}def __init__(self, addr: int = 0):\n") - self.f.write(f"{' '*self.indent_level*4} self.addr = addr\n") + if len(node.children()) == 0: + self.f.write(f"{' '*self.indent_level*4}pass\n") + else: + self.f.write(f"{' '*self.indent_level*4}def __init__(self, addr: int = 0):\n") + self.f.write(f"{' '*self.indent_level*4} self.addr = addr:\n") - for child in node.children(): - if isinstance(child, AddressableNode): - if child.is_array: - assert child.array_dimensions is not None - if len(child.array_dimensions) > 1: - raise NotImplementedError("Multidimensional arrays not supported") - self.f.write(f"{' '*self.indent_level*4} self.{child.inst_name} = [self.{child.inst_name}Class(self.addr + {child.raw_address_offset} + {child.size}*i) for i in range({child.n_elements})]\n") - else: - self.f.write(f"{' '*self.indent_level*4} self.{child.inst_name} = self.{child.inst_name}Class(self.addr + {child.address_offset})\n") + for child in node.children(): + if isinstance(child, AddressableNode): + if child.is_array: + assert child.array_dimensions is not None + if len(child.array_dimensions) > 1: + raise NotImplementedError("Multidimensional arrays not supported") + self.f.write(f"{' '*self.indent_level*4} self.{child.inst_name} = [self.{child.inst_name}Class(self.addr + {child.raw_address_offset} + {child.size}*i) for i in range({child.n_elements})]\n") + else: + self.f.write(f"{' '*self.indent_level*4} self.{child.inst_name} = self.{child.inst_name}Class(self.addr + {child.address_offset})\n") self.indent_level-=1 diff --git a/src/peakrdl_python_regmap/templates/regmap.py b/src/peakrdl_python_regmap/templates/regmap.py index 0a6fb28..63b61de 100644 --- a/src/peakrdl_python_regmap/templates/regmap.py +++ b/src/peakrdl_python_regmap/templates/regmap.py @@ -1,2 +1,5 @@ class AddrNode(): addr: int + + def __init__(self, addr: int = 0): + self.addr = addr