diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2127d07..e4c5392 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,6 +23,7 @@ jobs: - 3.9 - "3.10" - "3.11" + - "3.12" include: - os: ubuntu-latest diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 5b13f32..354c013 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -13,3 +13,5 @@ sphinx: python: install: - requirements: docs/requirements.txt + - method: pip + path: . diff --git a/setup.py b/setup.py index 7674a72..8d0d7a0 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ setuptools.setup( include_package_data=True, python_requires='>=3.6', install_requires=[ - "systemrdl-compiler >= 1.25.1, < 2", + "systemrdl-compiler >= 1.27.0, < 2", "Jinja2>=2.11", ], entry_points = { @@ -43,6 +43,7 @@ setuptools.setup( "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3 :: Only", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", diff --git a/src/peakrdl_regblock/hwif/generators.py b/src/peakrdl_regblock/hwif/generators.py index 7127d34..68ac0c2 100644 --- a/src/peakrdl_regblock/hwif/generators.py +++ b/src/peakrdl_regblock/hwif/generators.py @@ -230,41 +230,35 @@ class OutputStructGenerator_Hier(HWIFStructGenerator): #------------------------------------------------------------------------------- class InputStructGenerator_TypeScope(InputStructGenerator_Hier): def get_typdef_name(self, node:'Node') -> str: - scope_path = node.inst.get_scope_path("__") + scope_path = node.get_global_type_name("__") if scope_path is None: # Unable to determine a reusable type name. Fall back to hierarchical path # Add prefix to prevent collision when mixing namespace methods scope_path = "xtern__" + super().get_typdef_name(node) - if isinstance(node, FieldNode): - extra_suffix = get_field_type_name_suffix(node) + if node.external: + # Node generates alternate external signals + extra_suffix = "__external" else: extra_suffix = "" - if node.external: - # Node generates alternate external signals - extra_suffix += "__external" - - return f'{scope_path}__{node.type_name}{extra_suffix}__in_t' + return f'{scope_path}{extra_suffix}__in_t' class OutputStructGenerator_TypeScope(OutputStructGenerator_Hier): def get_typdef_name(self, node:'Node') -> str: - scope_path = node.inst.get_scope_path("__") + scope_path = node.get_global_type_name("__") if scope_path is None: # Unable to determine a reusable type name. Fall back to hierarchical path # Add prefix to prevent collision when mixing namespace methods scope_path = "xtern__" + super().get_typdef_name(node) - if isinstance(node, FieldNode): - extra_suffix = get_field_type_name_suffix(node) + if node.external: + # Node generates alternate external signals + extra_suffix = "__external" else: extra_suffix = "" - if node.external: - # Node generates alternate external signals - extra_suffix += "__external" - - return f'{scope_path}__{node.type_name}{extra_suffix}__out_t' + return f'{scope_path}{extra_suffix}__out_t' #------------------------------------------------------------------------------- class EnumGenerator: @@ -302,26 +296,3 @@ class EnumGenerator: + ",\n".join(lines) + f"\n}} {prefix}_e;" ) - - -def get_field_type_name_suffix(field: FieldNode) -> str: - """ - Fields may reuse the same type, but end up instantiating different widths - Uniquify the type name further if the field width was overridden when instantiating - """ - if field.inst.original_def is None: - return "" - - if field.inst.original_def.type_name is None: - # is an anonymous definition. No extra suffix needed - return "" - - if "fieldwidth" in field.list_properties(): - # fieldwidth was explicitly set. This type name is already sufficiently distinct - return "" - - if field.width == 1: - # field width is the default. Skip suffix - return "" - - return f"_w{field.width}"