peakrdl-python 3.1.0rc1__tar.gz → 3.1.0rc2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/.github/workflows/action.yaml +2 -1
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/PKG-INFO +1 -1
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/__about__.py +1 -1
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/exporter.py +24 -13
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/systemrdl_node_hashes.py +11 -6
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/addrmap_tb.py.jinja +4 -11
- peakrdl_python-3.1.0rc2/src/peakrdl_python/templates/addrmap_udp_property.py.jinja +62 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python.egg-info/PKG-INFO +1 -1
- peakrdl_python-3.1.0rc2/tests/testcases/udp_with_referencing.rdl +99 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/user_defined_properties.rdl +22 -1
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/unit_tests/test_export.py +4 -1
- peakrdl_python-3.1.0rc1/src/peakrdl_python/templates/addrmap_udp_property.py.jinja +0 -50
- peakrdl_python-3.1.0rc1/tests/testcases/udp_with_referencing.rdl +0 -31
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/.gitignore +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/.readthedocs.yaml +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/LICENSE +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/MANIFEST.in +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/README.md +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/docs/api.rst +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/docs/api_components.rst +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/docs/command_line.rst +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/docs/conf.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/docs/customisation.rst +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/docs/design_decisions.rst +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/docs/design_tools.rst +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/docs/generated_package.rst +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/docs/genindex.rst +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/docs/index.rst +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/docs/installation.rst +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/docs/requirements.txt +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/array_access/array_access.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/array_access/demo_array_access.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/enumerated_fields/demo_enumerated_fields.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/enumerated_fields/enumerated_fields.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/optimised_access/demo_optimised_access.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/optimised_access/demo_optimised_array_access.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/optimised_access/optimised_access.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/optimised_access/optimised_array_access.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/overridden_names/demo_over_ridden_names.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/overridden_names/overridden_names.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/simulating_callbacks/chip_with_a_GPIO.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/simulating_callbacks/flashing_the_LED.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/tranversing_address_map/chip_with_registers.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/tranversing_address_map/dumping_register_state_to_json_file.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/tranversing_address_map/reg_dump.json +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/tranversing_address_map/reseting_registers.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/tranversing_address_map/writing_register_state_from_json_file.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/user_defined_properties/demo_user_defined_properties.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/user_defined_properties/user_defined_properties.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/why_ral/__init__.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/why_ral/gpio.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/why_ral/with_hal.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/why_ral/with_ral.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/why_ral/without_ral.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/generate_and_test.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/generate_testcases.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/pyproject.toml +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/setup.cfg +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/.coveragerc +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/__init__.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/__peakrdl__.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/_deploy_package.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/_node_walkers.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/class_names.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/compiler_udp.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib/__init__.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib/async_memory.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib/async_register_and_field.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib/base.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib/base_field.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib/base_register.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib/callbacks.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib/field_encoding.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib/memory.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib/py.typed +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib/register_and_field.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib/sections.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib/utility_functions.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib_test/__init__.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib_test/_async_base_test_class.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib_test/_base_test_class.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib_test/_common_base_test_class.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib_test/async_field_test_class.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib_test/async_mem_test_class.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib_test/async_reg_test_class.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib_test/async_test_class.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib_test/field_test_class.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib_test/mem_test_class.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib_test/reg_test_class.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib_test/test_class.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/lib_test/utilities.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/py.typed +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/safe_name_utility.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/sim_lib/__init__.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/sim_lib/_callbacks.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/sim_lib/base.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/sim_lib/dummy_callbacks.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/sim_lib/field.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/sim_lib/memory.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/sim_lib/py.typed +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/sim_lib/register.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/sim_lib/simulator.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/systemrdl_node_utility_functions.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/__init__.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/addrmap.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/addrmap_field.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/addrmap_memory.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/addrmap_register.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/addrmap_simulation.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/addrmap_simulation_tb.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/addrmap_system_rdl_name_mapping.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/addrmap_universal_property.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/baseclass_simulation_tb.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/baseclass_tb.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/child_definitions.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/example.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/field_enums.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/header.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/header_tb.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/property_enums.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/reg_definitions.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/template_ultilities.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/unique_component_iterator.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python.egg-info/SOURCES.txt +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python.egg-info/dependency_links.txt +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python.egg-info/entry_points.txt +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python.egg-info/requires.txt +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python.egg-info/top_level.txt +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/alternative_templates/header.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/alternative_templates/header_tb.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/alternative_templates_dynamic/header.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/alternative_templates_dynamic/header_tb.py.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/alternative_templates_dynamic_toml/header_check.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/alternative_templates_dynamic_toml/peakrdl.toml +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/alternative_templates_toml/header_check.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/alternative_templates_toml/peakrdl.toml +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/pathological_register_maps/pathological_rdl_builder.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/pathological_register_maps/templates/pathological_template.rdl.jinja +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/RDLFormatCode_example.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/addr_map.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/aliases.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/all_register_access_types.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/basic.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/block_a.xml +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/block_b.xml +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/deduplicated_field.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/different_array_types.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/enum_example.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/example_issue_106.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/extended_memories.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/extended_sizes_registers_array.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/field_scope.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/field_with_overridden_reset.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/fields_with_HW_write.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/fields_with_reset_values.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/hidden_property.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/large_field_combinations.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/memories.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/memories_with_registers.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/msb0_and_lsb0.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/multi_block.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/multifile.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/name_clash.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/name_desc_all_levels.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/name_desc_option_deduplicate.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/name_desc_stress_test.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/overlapping_registers_and_fields.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/overridden_python_name.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/parametrised_readonly_and_readwrite.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/parametrised_top.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/reg_name_stress.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/regfile_and_arrays.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/reserved_elements.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/same_but_different_enum.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/signals_definitions_at_various_levels.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/simple.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/simple.xml +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/simulator_test.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/sizes_registers.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/sizes_registers_array.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/sparse_enum_issue_200.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/write_only_enum_with_undefined_reset.rdl +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/unit_tests/__init__.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/unit_tests/simple_components.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/unit_tests/test_array_indexing.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/unit_tests/test_building_inner_addrmap.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/unit_tests/test_field.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/unit_tests/test_name_desc_export.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/unit_tests/test_optimised_reg_array.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/unit_tests/test_reg.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/unit_tests/test_sim.py +0 -0
- {peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/unit_tests/test_system_rdl_enum.py +0 -0
|
@@ -161,7 +161,8 @@ jobs:
|
|
|
161
161
|
sleep 10
|
|
162
162
|
python -m generate_and_test --RDL_source_file tests/testcases/user_defined_properties.rdl --root_node user_defined_properties --udp bool_property_to_include enum_property_to_include int_property_to_include str_property_to_include struct_property_to_include double_layer_struct_property_to_include
|
|
163
163
|
sleep 10
|
|
164
|
-
|
|
164
|
+
python -m generate_and_test --RDL_source_file tests/testcases/user_defined_properties.rdl --root_node user_defined_properties --udp bool_property_to_include enum_property_to_include int_property_to_include str_property_to_include struct_property_to_include double_layer_struct_property_to_include int_array_property_to_include str_array_property_to_include enum_array_property_to_include
|
|
165
|
+
sleep 10
|
|
165
166
|
python -m generate_and_test --RDL_source_file tests/testcases/user_defined_properties.rdl --root_node user_defined_properties --udp_regex "bool_property_to_include|enum_property_to_include|int_property_to_include|str_property_to_include|struct_property_to_include|double_layer_struct_property_to_include"
|
|
166
167
|
sleep 10
|
|
167
168
|
|
|
@@ -243,6 +243,7 @@ class PythonExporter:
|
|
|
243
243
|
'asyncoutput': asyncoutput,
|
|
244
244
|
'isinstance': isinstance,
|
|
245
245
|
'str': str,
|
|
246
|
+
'list': list,
|
|
246
247
|
'uses_enum': uses_enum(top_block),
|
|
247
248
|
'get_fully_qualified_type_name': partial(
|
|
248
249
|
unique_component_walker.python_class_name,
|
|
@@ -414,14 +415,18 @@ class PythonExporter:
|
|
|
414
415
|
|
|
415
416
|
context = {
|
|
416
417
|
'top_node': top_block,
|
|
417
|
-
'systemrdlRegNode': RegNode,
|
|
418
418
|
'systemrdlFieldNode': FieldNode,
|
|
419
|
+
'systemrdlRegNode': RegNode,
|
|
420
|
+
'systemrdlRegfileNode': RegfileNode,
|
|
421
|
+
'systemrdlAddrmapNode': AddrmapNode,
|
|
422
|
+
'systemrdlMemNode': MemNode,
|
|
419
423
|
'systemrdlSignalNode': SignalNode,
|
|
420
424
|
'systemrdlUserStruct': UserStruct,
|
|
421
425
|
'systemrdlUserEnum': UserEnum,
|
|
422
426
|
'isinstance': isinstance,
|
|
423
427
|
'type': type,
|
|
424
428
|
'str': str,
|
|
429
|
+
'list': list,
|
|
425
430
|
'asyncoutput': asyncoutput,
|
|
426
431
|
'unique_registers': unique_register_subset,
|
|
427
432
|
'unique_property_enums':
|
|
@@ -511,14 +516,18 @@ class PythonExporter:
|
|
|
511
516
|
|
|
512
517
|
context = {
|
|
513
518
|
'top_node': top_block,
|
|
514
|
-
'systemrdlMemNode': MemNode,
|
|
515
519
|
'systemrdlFieldNode': FieldNode,
|
|
520
|
+
'systemrdlRegNode': RegNode,
|
|
521
|
+
'systemrdlRegfileNode': RegfileNode,
|
|
522
|
+
'systemrdlAddrmapNode': AddrmapNode,
|
|
523
|
+
'systemrdlMemNode': MemNode,
|
|
516
524
|
'systemrdlSignalNode': SignalNode,
|
|
517
525
|
'systemrdlUserStruct': UserStruct,
|
|
518
526
|
'systemrdlUserEnum': UserEnum,
|
|
519
527
|
'isinstance': isinstance,
|
|
520
528
|
'type': type,
|
|
521
529
|
'str': str,
|
|
530
|
+
'list' : list,
|
|
522
531
|
'asyncoutput': asyncoutput,
|
|
523
532
|
'unique_memories': unique_memory_subset,
|
|
524
533
|
'unique_property_enums':
|
|
@@ -584,11 +593,16 @@ class PythonExporter:
|
|
|
584
593
|
context = {
|
|
585
594
|
'top_node': top_block,
|
|
586
595
|
'systemrdlFieldNode': FieldNode,
|
|
596
|
+
'systemrdlRegNode': RegNode,
|
|
597
|
+
'systemrdlRegfileNode': RegfileNode,
|
|
598
|
+
'systemrdlAddrmapNode': AddrmapNode,
|
|
599
|
+
'systemrdlMemNode': MemNode,
|
|
587
600
|
'systemrdlUserStruct': UserStruct,
|
|
588
601
|
'systemrdlUserEnum': UserEnum,
|
|
589
602
|
'isinstance': isinstance,
|
|
590
603
|
'type': type,
|
|
591
604
|
'str': str,
|
|
605
|
+
'list': list,
|
|
592
606
|
'asyncoutput': asyncoutput,
|
|
593
607
|
'unique_fields': unique_fields_subset,
|
|
594
608
|
'unique_property_enums':
|
|
@@ -845,6 +859,7 @@ class PythonExporter:
|
|
|
845
859
|
'isinstance': isinstance,
|
|
846
860
|
'type': type,
|
|
847
861
|
'str': str,
|
|
862
|
+
'list': list,
|
|
848
863
|
'full_slice_accessor': full_slice_accessor,
|
|
849
864
|
'get_python_path_segments': get_python_path_segments,
|
|
850
865
|
'safe_node_name': safe_node_name,
|
|
@@ -1167,7 +1182,7 @@ class PythonExporter:
|
|
|
1167
1182
|
"""
|
|
1168
1183
|
enum_needed: list[UserEnumMeta] = []
|
|
1169
1184
|
|
|
1170
|
-
def
|
|
1185
|
+
def walk_property_subnode(value: Any) -> None:
|
|
1171
1186
|
if isinstance(value, UserEnum) and type(value) not in enum_needed:
|
|
1172
1187
|
enum_type = type(value)
|
|
1173
1188
|
if not isinstance(enum_type, UserEnumMeta):
|
|
@@ -1176,19 +1191,15 @@ class PythonExporter:
|
|
|
1176
1191
|
|
|
1177
1192
|
if isinstance(value, UserStruct):
|
|
1178
1193
|
for sub_value in value.members.values():
|
|
1179
|
-
|
|
1194
|
+
walk_property_subnode(sub_value)
|
|
1195
|
+
|
|
1196
|
+
if isinstance(value, list):
|
|
1197
|
+
for sub_value in value:
|
|
1198
|
+
walk_property_subnode(sub_value)
|
|
1180
1199
|
|
|
1181
1200
|
for node in unique_components.nodes.values():
|
|
1182
1201
|
for node_property_name in node.properties_to_include:
|
|
1183
1202
|
node_property = node.instance.get_property(node_property_name)
|
|
1184
|
-
|
|
1185
|
-
enum_type = type(node_property)
|
|
1186
|
-
if not isinstance(enum_type, UserEnumMeta):
|
|
1187
|
-
raise TypeError(f'enum type should be UserEnumMeta, got {type(enum_type)}')
|
|
1188
|
-
enum_needed.append(enum_type)
|
|
1189
|
-
|
|
1190
|
-
if isinstance(node_property, UserStruct):
|
|
1191
|
-
for sub_value in node_property.members.values():
|
|
1192
|
-
walk_property_struct_node(sub_value)
|
|
1203
|
+
walk_property_subnode(node_property)
|
|
1193
1204
|
|
|
1194
1205
|
return enum_needed
|
{peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/systemrdl_node_hashes.py
RENAMED
|
@@ -143,7 +143,7 @@ def __node_hash_components(node: Node,
|
|
|
143
143
|
udp_include_func: ShowUDPCallback,
|
|
144
144
|
include_name_and_desc: bool = True) -> list[Any]:
|
|
145
145
|
|
|
146
|
-
value_to_hash = []
|
|
146
|
+
value_to_hash:list[Any] = []
|
|
147
147
|
|
|
148
148
|
if isinstance(node, FieldNode):
|
|
149
149
|
value_to_hash.append('Field')
|
|
@@ -167,13 +167,18 @@ def __node_hash_components(node: Node,
|
|
|
167
167
|
if desc is not None:
|
|
168
168
|
value_to_hash.append(desc)
|
|
169
169
|
|
|
170
|
+
def udp_replace_for_hashing(item: Any) -> None:
|
|
171
|
+
if isinstance(item, list):
|
|
172
|
+
for child_udp_value in item:
|
|
173
|
+
udp_replace_for_hashing(child_udp_value)
|
|
174
|
+
elif isinstance(item, Node):
|
|
175
|
+
value_to_hash.append('.'.join(item.get_path_segments()))
|
|
176
|
+
else:
|
|
177
|
+
value_to_hash.append(item)
|
|
178
|
+
|
|
170
179
|
for udp in get_properties_to_include(node, udp_include_func):
|
|
171
180
|
udp_value = node.get_property(udp)
|
|
172
|
-
|
|
173
|
-
if isinstance(udp_value, Node):
|
|
174
|
-
value_to_hash.append('.'.join(udp_value.get_path_segments()))
|
|
175
|
-
else:
|
|
176
|
-
value_to_hash.append(node.get_property(udp))
|
|
181
|
+
udp_replace_for_hashing(udp_value)
|
|
177
182
|
|
|
178
183
|
return value_to_hash
|
|
179
184
|
|
{peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/src/peakrdl_python/templates/addrmap_tb.py.jinja
RENAMED
|
@@ -79,6 +79,7 @@ from ._{{top_node.inst_name}}_test_base import __name__ as base_name
|
|
|
79
79
|
from ._{{top_node.inst_name}}_test_base import random_enum_reg_value
|
|
80
80
|
|
|
81
81
|
{% from 'addrmap_udp_property.py.jinja' import udp_property_dict_entry with context %}
|
|
82
|
+
{% from 'addrmap_udp_property.py.jinja' import udp_property_entry with context %}
|
|
82
83
|
|
|
83
84
|
class {{fq_block_name}}_single_access({{top_node.inst_name}}_TestCase): # type: ignore[valid-type,misc]
|
|
84
85
|
|
|
@@ -96,18 +97,10 @@ class {{fq_block_name}}_single_access({{top_node.inst_name}}_TestCase): # type:
|
|
|
96
97
|
{% else %}
|
|
97
98
|
{% for property_name in property_list %}
|
|
98
99
|
{% set property_value = node.get_property(property_name) %}
|
|
99
|
-
{% if isinstance(property_value,
|
|
100
|
-
self.
|
|
101
|
-
{% for sub_name, sub_value in property_value.members.items() %} {{udp_property_dict_entry(sub_name, sub_value)}} {% endfor %}
|
|
102
|
-
} )
|
|
103
|
-
{% elif isinstance(property_value, systemrdlUserEnum) %}
|
|
104
|
-
self.assertEqual(self.dut.{{'.'.join(get_python_path_segments(node))}}.udp['{{property_name}}'], {{ type(property_value).type_name }}_property_enumcls.{{ property_value.name.upper() }} )
|
|
105
|
-
{% elif isinstance(property_value, str) %}
|
|
106
|
-
self.assertEqual(self.dut.{{'.'.join(get_python_path_segments(node))}}.udp['{{property_name}}'], "{{ property_value }}" )
|
|
107
|
-
{% elif isinstance(property_value, systemrdlFieldNode) %}
|
|
108
|
-
self.assertEqual(self.dut.{{'.'.join(get_python_path_segments(node))}}.udp['{{property_name}}'], self.dut.{{'.'.join(get_python_path_segments(property_value))}} )
|
|
100
|
+
{% if isinstance(property_value, list) %}
|
|
101
|
+
self.assertEqual(self.dut.{{'.'.join(get_python_path_segments(node))}}.udp['{{property_name}}'], [{% for sub_property_value in property_value %}{{ udp_property_entry(sub_property_value, true) }},{% endfor %}] )
|
|
109
102
|
{% else %}
|
|
110
|
-
self.assertEqual(self.dut.{{'.'.join(get_python_path_segments(node))}}.udp['{{property_name}}'], {{ property_value }} )
|
|
103
|
+
self.assertEqual(self.dut.{{'.'.join(get_python_path_segments(node))}}.udp['{{property_name}}'], {{ udp_property_entry(property_value, true) }} )
|
|
111
104
|
{% endif %}
|
|
112
105
|
{% endfor %}
|
|
113
106
|
{% endif %}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{#
|
|
2
|
+
peakrdl-python is a tool to generate Python Register Access Layer (RAL) from SystemRDL
|
|
3
|
+
Copyright (C) 2021 - 2025
|
|
4
|
+
|
|
5
|
+
This program is free software: you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Lesser General Public License as
|
|
7
|
+
published by the Free Software Foundation, either version 3 of
|
|
8
|
+
the License, or (at your option) any later version.
|
|
9
|
+
|
|
10
|
+
This program is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Lesser General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#}
|
|
18
|
+
|
|
19
|
+
{%- macro udp_property_entry(value, full_qual_resolution) %}
|
|
20
|
+
{%- if isinstance(value, systemrdlUserStruct) -%}
|
|
21
|
+
{
|
|
22
|
+
{%- for sub_name, sub_value in value.members.items() %}
|
|
23
|
+
{{udp_property_dict_entry(sub_name, sub_value, full_qual_resolution)|indent(4)}}
|
|
24
|
+
{%- endfor %}
|
|
25
|
+
}
|
|
26
|
+
{%- elif isinstance(value, systemrdlUserEnum) -%}
|
|
27
|
+
{{ type(value).type_name + '_property_enumcls.' + value.name.upper() }}
|
|
28
|
+
{%- elif isinstance(value, str) -%}
|
|
29
|
+
"{{ value }}"
|
|
30
|
+
{%- elif isinstance(value, (systemrdlFieldNode, systemrdlRegNode, systemrdlRegfileNode, systemrdlAddrmapNode, systemrdlMemNode)) -%}
|
|
31
|
+
{%- if full_qual_resolution -%}
|
|
32
|
+
self.dut.{{'.'.join(get_python_path_segments(value))}}
|
|
33
|
+
{%- else -%}
|
|
34
|
+
self._traverse_from_fully_qualified_name({{ value.get_path_segments() }})
|
|
35
|
+
{%- endif -%}
|
|
36
|
+
{%- else -%}
|
|
37
|
+
{{ value }}
|
|
38
|
+
{%- endif -%}
|
|
39
|
+
{%- endmacro %}
|
|
40
|
+
|
|
41
|
+
{%- macro udp_property_dict_entry(name, value, full_qual_resolution) %}
|
|
42
|
+
{%- if isinstance(value, list) -%}
|
|
43
|
+
'{{name}}' : [ {% for sub_value in value %}{{udp_property_entry(sub_value, full_qual_resolution)}}, {% endfor %}],
|
|
44
|
+
{%- else -%}
|
|
45
|
+
'{{name}}' : {{ udp_property_entry(value, full_qual_resolution) }},
|
|
46
|
+
{%- endif %}
|
|
47
|
+
{% endmacro %}
|
|
48
|
+
|
|
49
|
+
{%- macro udp_property(node) %}
|
|
50
|
+
|
|
51
|
+
{% set property_list = node.properties_to_include %}
|
|
52
|
+
{% if property_list %}
|
|
53
|
+
@property
|
|
54
|
+
def udp(self) -> UDPStruct:
|
|
55
|
+
return {
|
|
56
|
+
{% for property_name in property_list -%}
|
|
57
|
+
{{udp_property_dict_entry(property_name, node.instance.get_property(property_name), false)|indent(4)}}
|
|
58
|
+
{%- endfor %}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
{% endif %}
|
|
62
|
+
{%- endmacro %}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Testcase the #292 bug
|
|
3
|
+
with a UDP that cross-references another
|
|
4
|
+
*/
|
|
5
|
+
property field_pointer {
|
|
6
|
+
type = field;
|
|
7
|
+
component = field;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
property register_pointer {
|
|
11
|
+
type = reg;
|
|
12
|
+
component = reg;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
property register_file_pointer {
|
|
16
|
+
type = regfile;
|
|
17
|
+
component = regfile;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
property field_parent_pointer {
|
|
21
|
+
type = reg;
|
|
22
|
+
component = field;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
property register_child_pointer {
|
|
26
|
+
type = field[];
|
|
27
|
+
component = reg;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
struct addrmap_child {
|
|
31
|
+
regfile regfile_children[];
|
|
32
|
+
reg reg_children[];
|
|
33
|
+
mem mem_children[];
|
|
34
|
+
addrmap addrmap_children[];
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
property addrmap_child_pointer {
|
|
38
|
+
type = addrmap_child;
|
|
39
|
+
component = addrmap;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
struct regfile_child {
|
|
43
|
+
regfile regfile_children[];
|
|
44
|
+
reg reg_children[];
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
property regfile_child_pointer {
|
|
48
|
+
type = regfile_child;
|
|
49
|
+
component = regfile;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
addrmap udp_with_referencing {
|
|
53
|
+
|
|
54
|
+
reg reg_def {
|
|
55
|
+
field { fieldwidth=4; } field_a;
|
|
56
|
+
field { fieldwidth=4; } field_b;
|
|
57
|
+
field { fieldwidth=4; } field_c;
|
|
58
|
+
field { fieldwidth=4; } field_d;
|
|
59
|
+
register_child_pointer = '{ field_a, field_b, field_c, field_d } ;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
regfile regfile_def {
|
|
63
|
+
regfile inner_regfile_def {
|
|
64
|
+
reg_def reg_value;
|
|
65
|
+
regfile_child_pointer = regfile_child'{ reg_children:'{ reg_value } };
|
|
66
|
+
};
|
|
67
|
+
reg_def reg_value;
|
|
68
|
+
inner_regfile_def inner_regfile_value;
|
|
69
|
+
regfile_child_pointer = regfile_child'{ reg_children:'{ reg_value }, regfile_children:'{ inner_regfile_value } };
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
mem mem_def {
|
|
73
|
+
mementries = 32;
|
|
74
|
+
memwidth = 32;
|
|
75
|
+
|
|
76
|
+
reg_def reg_value;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
addrmap addrmap_def {
|
|
80
|
+
addrmap inner_addrmap_def {
|
|
81
|
+
reg_def reg_value;
|
|
82
|
+
regfile_def regfile_value;
|
|
83
|
+
addrmap_child_pointer = addrmap_child'{ reg_children:'{ reg_value }, regfile_children:'{ regfile_value } };
|
|
84
|
+
};
|
|
85
|
+
reg_def reg_value;
|
|
86
|
+
regfile_def regfile_value;
|
|
87
|
+
external mem_def mem_value;
|
|
88
|
+
inner_addrmap_def addrmap_value;
|
|
89
|
+
addrmap_child_pointer = addrmap_child'{ reg_children:'{ reg_value }, regfile_children:'{ regfile_value }, addrmap_children:'{ addrmap_value }, mem_children:'{ mem_value } };
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
addrmap_def main;
|
|
93
|
+
addrmap_def view;
|
|
94
|
+
|
|
95
|
+
view.reg_value.field_a->field_pointer = main.reg_value.field_a;
|
|
96
|
+
view.reg_value.field_a->field_parent_pointer = main.reg_value;
|
|
97
|
+
|
|
98
|
+
view.reg_value->register_pointer = main.reg_value;
|
|
99
|
+
};
|
{peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/tests/testcases/user_defined_properties.rdl
RENAMED
|
@@ -7,6 +7,7 @@ enum property_enum {
|
|
|
7
7
|
|
|
8
8
|
enum inner_property_enum {
|
|
9
9
|
value0 = 0 { name = "Value 1"; };
|
|
10
|
+
value10 = 1 { name = "Value 10"; };
|
|
10
11
|
};
|
|
11
12
|
|
|
12
13
|
struct property_struct {
|
|
@@ -18,6 +19,7 @@ struct property_struct {
|
|
|
18
19
|
|
|
19
20
|
struct property_outer_struct {
|
|
20
21
|
boolean a_bool;
|
|
22
|
+
longint unsigned num_array[];
|
|
21
23
|
property_struct inner_struct;
|
|
22
24
|
};
|
|
23
25
|
|
|
@@ -29,6 +31,10 @@ property enum_property_to_include { type = property_enum; component = addrmap |
|
|
|
29
31
|
property int_property_to_include { type = number; component = addrmap | regfile | reg | field | mem; };
|
|
30
32
|
property str_property_to_include { type = string; component = addrmap | regfile | reg | field | mem; };
|
|
31
33
|
property int_property_to_exclude { type = number; component = addrmap | regfile | reg | field | mem; };
|
|
34
|
+
property int_array_property_to_include { component = addrmap | regfile | reg | field | mem; type = longint unsigned[] ; } ;
|
|
35
|
+
property str_array_property_to_include { component = addrmap | regfile | reg | field | mem; type = string[] ; } ;
|
|
36
|
+
property enum_array_property_to_include { type = property_enum[]; component = addrmap | regfile | reg | field | mem; };
|
|
37
|
+
property struct_array_property_to_include { type = property_struct[]; component = addrmap | regfile | reg | field | mem; };
|
|
32
38
|
|
|
33
39
|
addrmap user_defined_properties {
|
|
34
40
|
|
|
@@ -40,9 +46,14 @@ addrmap user_defined_properties {
|
|
|
40
46
|
enum_property_to_include = property_enum::value1;
|
|
41
47
|
str_property_to_include = "invalid";
|
|
42
48
|
struct_property_to_include = property_struct'{a_bool:true, a_string:"hello", a_number:10, a_enum:inner_property_enum::value0};
|
|
43
|
-
double_layer_struct_property_to_include = property_outer_struct'{a_bool:true, inner_struct:property_struct'{a_bool:true, a_string:"inner", a_number:11, a_enum:inner_property_enum::value0} };
|
|
49
|
+
double_layer_struct_property_to_include = property_outer_struct'{a_bool:true, num_array:'{ 1, 2, 3 } ,inner_struct:property_struct'{a_bool:true, a_string:"inner", a_number:11, a_enum:inner_property_enum::value0} };
|
|
44
50
|
int_property_to_include = 10;
|
|
45
51
|
int_property_to_exclude = 15;
|
|
52
|
+
int_array_property_to_include = '{ 2, 34, 73 } ;
|
|
53
|
+
str_array_property_to_include = '{ "foo", "bar" } ;
|
|
54
|
+
enum_array_property_to_include = '{ property_enum::value1, property_enum::value2 };
|
|
55
|
+
struct_array_property_to_include = '{ property_struct'{a_bool:true, a_string:"hello", a_number:10, a_enum:inner_property_enum::value0},
|
|
56
|
+
property_struct'{a_bool:false, a_string:"goodbye", a_number:11, a_enum:inner_property_enum::value10} };
|
|
46
57
|
};
|
|
47
58
|
|
|
48
59
|
reg register_with_properties {
|
|
@@ -60,6 +71,7 @@ addrmap user_defined_properties {
|
|
|
60
71
|
register_with_properties reg_b[3];
|
|
61
72
|
reg_b->str_property_to_include = "user_defined_properties.reg_b";
|
|
62
73
|
reg_b.field_a->str_property_to_include = "user_defined_properties.reg_b.field_a";
|
|
74
|
+
reg_b->int_array_property_to_include = '{ 3, 67, 84, 101 };
|
|
63
75
|
|
|
64
76
|
regfile regfile_with_properties {
|
|
65
77
|
bool_property_to_include = true;
|
|
@@ -78,6 +90,7 @@ addrmap user_defined_properties {
|
|
|
78
90
|
reg_file_a.reg_a.field_a->str_property_to_include = "user_defined_properties.reg_file_a.reg_a.field_a";
|
|
79
91
|
reg_file_a.reg_b->str_property_to_include = "user_defined_properties.reg_file_a.reg_b";
|
|
80
92
|
reg_file_a.reg_b.field_a->str_property_to_include = "user_defined_properties.reg_file_a.reg_b.field_a";
|
|
93
|
+
reg_file_a->int_array_property_to_include = '{ 3, 67, 84, 101 };
|
|
81
94
|
|
|
82
95
|
regfile_with_properties reg_file_b[2];
|
|
83
96
|
|
|
@@ -86,6 +99,7 @@ addrmap user_defined_properties {
|
|
|
86
99
|
reg_file_b.reg_a.field_a->str_property_to_include = "user_defined_properties.reg_file_b.reg_a.field_a";
|
|
87
100
|
reg_file_b.reg_b->str_property_to_include = "user_defined_properties.reg_file_b.reg_b";
|
|
88
101
|
reg_file_b.reg_b.field_a->str_property_to_include = "user_defined_properties.reg_file_b.reg_b.field_a";
|
|
102
|
+
reg_file_b->int_array_property_to_include = '{ 5, 68, 102, 103, 104 };
|
|
89
103
|
|
|
90
104
|
external mem {
|
|
91
105
|
mementries = 10;
|
|
@@ -96,6 +110,9 @@ addrmap user_defined_properties {
|
|
|
96
110
|
struct_property_to_include = property_struct'{a_bool:true, a_string:"hello", a_number:10, a_enum:inner_property_enum::value0};
|
|
97
111
|
int_property_to_include = 10;
|
|
98
112
|
int_property_to_exclude = 15;
|
|
113
|
+
int_array_property_to_include = '{ 2, 34, 73 } ;
|
|
114
|
+
str_array_property_to_include = '{ "foo", "bar" } ;
|
|
115
|
+
enum_array_property_to_include = '{ property_enum::value1, property_enum::value2 };
|
|
99
116
|
} mem_with_properties;
|
|
100
117
|
|
|
101
118
|
external mem {
|
|
@@ -134,6 +151,10 @@ addrmap user_defined_properties {
|
|
|
134
151
|
regfile_with_properties reg_file_b[2];
|
|
135
152
|
register_with_properties reg_a;
|
|
136
153
|
register_with_properties reg_b[3];
|
|
154
|
+
int_array_property_to_include = '{ 5, 36, 77 } ;
|
|
155
|
+
str_array_property_to_include = '{ "foo_me", "bar_me" } ;
|
|
156
|
+
enum_array_property_to_include = '{ property_enum::value2, property_enum::value3 };
|
|
157
|
+
|
|
137
158
|
};
|
|
138
159
|
|
|
139
160
|
addr_with_properties addrmap_a;
|
|
@@ -256,7 +256,10 @@ class TestExportUDP(unittest.TestCase):
|
|
|
256
256
|
'struct_property_to_include',
|
|
257
257
|
'enum_property_to_include',
|
|
258
258
|
'int_property_to_include',
|
|
259
|
-
'str_property_to_include'
|
|
259
|
+
'str_property_to_include',
|
|
260
|
+
'int_array_property_to_include',
|
|
261
|
+
'str_array_property_to_include',
|
|
262
|
+
'enum_array_property_to_include']
|
|
260
263
|
def check_udp_present(dut, udp_to_include:list[str]) -> None:
|
|
261
264
|
for udp in full_property_list:
|
|
262
265
|
if udp in udp_to_include:
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
{#
|
|
2
|
-
peakrdl-python is a tool to generate Python Register Access Layer (RAL) from SystemRDL
|
|
3
|
-
Copyright (C) 2021 - 2025
|
|
4
|
-
|
|
5
|
-
This program is free software: you can redistribute it and/or modify
|
|
6
|
-
it under the terms of the GNU Lesser General Public License as
|
|
7
|
-
published by the Free Software Foundation, either version 3 of
|
|
8
|
-
the License, or (at your option) any later version.
|
|
9
|
-
|
|
10
|
-
This program is distributed in the hope that it will be useful,
|
|
11
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
GNU Lesser General Public License for more details.
|
|
14
|
-
|
|
15
|
-
You should have received a copy of the GNU Lesser General Public License
|
|
16
|
-
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
-
#}
|
|
18
|
-
|
|
19
|
-
{%- macro udp_property_dict_entry(name, value) %}
|
|
20
|
-
{% if isinstance(value, systemrdlUserStruct) %}
|
|
21
|
-
'{{name}}' : {
|
|
22
|
-
{% for sub_name, sub_value in value.members.items() %}
|
|
23
|
-
{{udp_property_dict_entry(sub_name, sub_value)|indent(4)}}
|
|
24
|
-
{% endfor %}
|
|
25
|
-
},
|
|
26
|
-
{% elif isinstance(value, systemrdlUserEnum) %}
|
|
27
|
-
'{{name}}' : {{ type(value).type_name + '_property_enumcls.' + value.name.upper() }} ,
|
|
28
|
-
{% elif isinstance(value, str) %}
|
|
29
|
-
'{{name}}' : "{{ value }}" ,
|
|
30
|
-
{% elif isinstance(value, systemrdlFieldNode) %}
|
|
31
|
-
'{{name}}' : self._traverse_from_fully_qualified_name({{ value.get_path_segments() }}) ,
|
|
32
|
-
{% else %}
|
|
33
|
-
'{{name}}' : {{ value }} ,
|
|
34
|
-
{% endif %}
|
|
35
|
-
{% endmacro %}
|
|
36
|
-
|
|
37
|
-
{%- macro udp_property(node) %}
|
|
38
|
-
|
|
39
|
-
{% set property_list = node.properties_to_include %}
|
|
40
|
-
{% if property_list %}
|
|
41
|
-
@property
|
|
42
|
-
def udp(self) -> UDPStruct:
|
|
43
|
-
return {
|
|
44
|
-
{% for property_name in property_list %}
|
|
45
|
-
{{udp_property_dict_entry(property_name, node.instance.get_property(property_name))}}
|
|
46
|
-
{% endfor %}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
{% endif %}
|
|
50
|
-
{%- endmacro %}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Testcase the #292 bug
|
|
3
|
-
with a UDP that cross-references another
|
|
4
|
-
*/
|
|
5
|
-
property field_pointer {
|
|
6
|
-
type = field;
|
|
7
|
-
component = field;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
property register_pointer {
|
|
11
|
-
type = reg;
|
|
12
|
-
component = reg;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
addrmap udp_with_referencing {
|
|
16
|
-
reg {
|
|
17
|
-
field {
|
|
18
|
-
hw = rw;
|
|
19
|
-
sw = rw;
|
|
20
|
-
} value;
|
|
21
|
-
} view;
|
|
22
|
-
|
|
23
|
-
reg {
|
|
24
|
-
field {
|
|
25
|
-
hw = rw;
|
|
26
|
-
sw = rw;
|
|
27
|
-
} value;
|
|
28
|
-
} pointer;
|
|
29
|
-
|
|
30
|
-
view.value->field_pointer = pointer.value;
|
|
31
|
-
};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/array_access/demo_array_access.py
RENAMED
|
File without changes
|
|
File without changes
|
{peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/enumerated_fields/enumerated_fields.rdl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/optimised_access/optimised_access.rdl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/overridden_names/overridden_names.rdl
RENAMED
|
File without changes
|
|
File without changes
|
{peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/simulating_callbacks/flashing_the_LED.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{peakrdl_python-3.1.0rc1 → peakrdl_python-3.1.0rc2}/example/tranversing_address_map/reg_dump.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|