peakrdl-python 3.0.0rc8__tar.gz → 3.1.0__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.0.0rc8 → peakrdl_python-3.1.0}/.github/workflows/action.yaml +21 -20
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/PKG-INFO +21 -5
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/README.md +20 -4
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/docs/generated_package.rst +12 -3
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/generate_and_test.py +1 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/__about__.py +1 -1
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/exporter.py +24 -13
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib/base.py +44 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib/base_field.py +1 -1
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/systemrdl_node_hashes.py +12 -2
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/addrmap_tb.py.jinja +4 -9
- peakrdl_python-3.1.0/src/peakrdl_python/templates/addrmap_udp_property.py.jinja +62 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python.egg-info/PKG-INFO +21 -5
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python.egg-info/SOURCES.txt +1 -0
- peakrdl_python-3.1.0/tests/testcases/udp_with_referencing.rdl +114 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/user_defined_properties.rdl +22 -1
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/unit_tests/test_export.py +4 -1
- peakrdl_python-3.0.0rc8/src/peakrdl_python/templates/addrmap_udp_property.py.jinja +0 -48
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/.gitignore +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/.readthedocs.yaml +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/LICENSE +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/MANIFEST.in +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/docs/api.rst +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/docs/api_components.rst +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/docs/command_line.rst +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/docs/conf.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/docs/customisation.rst +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/docs/design_decisions.rst +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/docs/design_tools.rst +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/docs/genindex.rst +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/docs/index.rst +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/docs/installation.rst +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/docs/requirements.txt +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/array_access/array_access.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/array_access/demo_array_access.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/enumerated_fields/demo_enumerated_fields.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/enumerated_fields/enumerated_fields.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/optimised_access/demo_optimised_access.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/optimised_access/demo_optimised_array_access.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/optimised_access/optimised_access.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/optimised_access/optimised_array_access.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/overridden_names/demo_over_ridden_names.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/overridden_names/overridden_names.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/simulating_callbacks/chip_with_a_GPIO.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/simulating_callbacks/flashing_the_LED.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/tranversing_address_map/chip_with_registers.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/tranversing_address_map/dumping_register_state_to_json_file.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/tranversing_address_map/reg_dump.json +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/tranversing_address_map/reseting_registers.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/tranversing_address_map/writing_register_state_from_json_file.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/user_defined_properties/demo_user_defined_properties.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/user_defined_properties/user_defined_properties.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/why_ral/__init__.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/why_ral/gpio.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/why_ral/with_hal.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/why_ral/with_ral.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/example/why_ral/without_ral.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/generate_testcases.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/pyproject.toml +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/setup.cfg +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/.coveragerc +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/__init__.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/__peakrdl__.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/_deploy_package.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/_node_walkers.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/class_names.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/compiler_udp.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib/__init__.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib/async_memory.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib/async_register_and_field.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib/base_register.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib/callbacks.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib/field_encoding.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib/memory.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib/py.typed +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib/register_and_field.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib/sections.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib/utility_functions.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib_test/__init__.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib_test/_async_base_test_class.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib_test/_base_test_class.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib_test/_common_base_test_class.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib_test/async_field_test_class.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib_test/async_mem_test_class.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib_test/async_reg_test_class.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib_test/async_test_class.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib_test/field_test_class.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib_test/mem_test_class.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib_test/reg_test_class.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib_test/test_class.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/lib_test/utilities.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/py.typed +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/safe_name_utility.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/sim_lib/__init__.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/sim_lib/_callbacks.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/sim_lib/base.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/sim_lib/dummy_callbacks.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/sim_lib/field.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/sim_lib/memory.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/sim_lib/py.typed +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/sim_lib/register.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/sim_lib/simulator.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/systemrdl_node_utility_functions.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/__init__.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/addrmap.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/addrmap_field.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/addrmap_memory.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/addrmap_register.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/addrmap_simulation.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/addrmap_simulation_tb.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/addrmap_system_rdl_name_mapping.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/addrmap_universal_property.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/baseclass_simulation_tb.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/baseclass_tb.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/child_definitions.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/example.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/field_enums.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/header.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/header_tb.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/property_enums.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/reg_definitions.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/templates/template_ultilities.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python/unique_component_iterator.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python.egg-info/dependency_links.txt +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python.egg-info/entry_points.txt +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python.egg-info/requires.txt +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/src/peakrdl_python.egg-info/top_level.txt +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/alternative_templates/header.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/alternative_templates/header_tb.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/alternative_templates_dynamic/header.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/alternative_templates_dynamic/header_tb.py.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/alternative_templates_dynamic_toml/header_check.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/alternative_templates_dynamic_toml/peakrdl.toml +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/alternative_templates_toml/header_check.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/alternative_templates_toml/peakrdl.toml +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/pathological_register_maps/pathological_rdl_builder.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/pathological_register_maps/templates/pathological_template.rdl.jinja +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/RDLFormatCode_example.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/addr_map.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/aliases.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/all_register_access_types.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/basic.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/block_a.xml +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/block_b.xml +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/deduplicated_field.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/different_array_types.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/enum_example.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/example_issue_106.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/extended_memories.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/extended_sizes_registers_array.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/field_scope.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/field_with_overridden_reset.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/fields_with_HW_write.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/fields_with_reset_values.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/hidden_property.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/large_field_combinations.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/memories.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/memories_with_registers.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/msb0_and_lsb0.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/multi_block.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/multifile.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/name_clash.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/name_desc_all_levels.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/name_desc_option_deduplicate.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/name_desc_stress_test.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/overlapping_registers_and_fields.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/overridden_python_name.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/parametrised_readonly_and_readwrite.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/parametrised_top.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/reg_name_stress.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/regfile_and_arrays.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/reserved_elements.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/same_but_different_enum.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/signals_definitions_at_various_levels.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/simple.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/simple.xml +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/simulator_test.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/sizes_registers.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/sizes_registers_array.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/sparse_enum_issue_200.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/testcases/write_only_enum_with_undefined_reset.rdl +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/unit_tests/__init__.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/unit_tests/simple_components.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/unit_tests/test_array_indexing.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/unit_tests/test_building_inner_addrmap.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/unit_tests/test_field.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/unit_tests/test_name_desc_export.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/unit_tests/test_optimised_reg_array.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/unit_tests/test_reg.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/unit_tests/test_sim.py +0 -0
- {peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/tests/unit_tests/test_system_rdl_enum.py +0 -0
|
@@ -27,9 +27,9 @@ jobs:
|
|
|
27
27
|
lint:
|
|
28
28
|
runs-on: ubuntu-latest
|
|
29
29
|
steps:
|
|
30
|
-
- uses: actions/checkout@
|
|
30
|
+
- uses: actions/checkout@v5
|
|
31
31
|
- name: Set up Python
|
|
32
|
-
uses: actions/setup-python@
|
|
32
|
+
uses: actions/setup-python@v6
|
|
33
33
|
with:
|
|
34
34
|
python-version: "3.13"
|
|
35
35
|
|
|
@@ -52,9 +52,9 @@ jobs:
|
|
|
52
52
|
mypy:
|
|
53
53
|
runs-on: ubuntu-latest
|
|
54
54
|
steps:
|
|
55
|
-
- uses: actions/checkout@
|
|
55
|
+
- uses: actions/checkout@v5
|
|
56
56
|
- name: Set up Python
|
|
57
|
-
uses: actions/setup-python@
|
|
57
|
+
uses: actions/setup-python@v6
|
|
58
58
|
with:
|
|
59
59
|
python-version: "3.13"
|
|
60
60
|
|
|
@@ -77,10 +77,10 @@ jobs:
|
|
|
77
77
|
python-version: [ 3.9, "3.10", "3.11", "3.12", "3.13", "3.14" ]
|
|
78
78
|
|
|
79
79
|
steps:
|
|
80
|
-
- uses: actions/checkout@
|
|
80
|
+
- uses: actions/checkout@v5
|
|
81
81
|
|
|
82
82
|
- name: Set up Python ${{ matrix.python-version }}
|
|
83
|
-
uses: actions/setup-python@
|
|
83
|
+
uses: actions/setup-python@v6
|
|
84
84
|
with:
|
|
85
85
|
python-version: ${{ matrix.python-version }}
|
|
86
86
|
|
|
@@ -107,10 +107,10 @@ jobs:
|
|
|
107
107
|
python-version: [ 3.9, "3.10", "3.11", "3.12", "3.13", "3.14" ]
|
|
108
108
|
|
|
109
109
|
steps:
|
|
110
|
-
- uses: actions/checkout@
|
|
110
|
+
- uses: actions/checkout@v5
|
|
111
111
|
|
|
112
112
|
- name: Set up Python ${{ matrix.python-version }}
|
|
113
|
-
uses: actions/setup-python@
|
|
113
|
+
uses: actions/setup-python@v6
|
|
114
114
|
with:
|
|
115
115
|
python-version: ${{ matrix.python-version }}
|
|
116
116
|
|
|
@@ -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
|
|
|
@@ -183,10 +184,10 @@ jobs:
|
|
|
183
184
|
python-version: [ 3.9, "3.10", "3.11", "3.12", "3.13", "3.14" ]
|
|
184
185
|
|
|
185
186
|
steps:
|
|
186
|
-
- uses: actions/checkout@
|
|
187
|
+
- uses: actions/checkout@v5
|
|
187
188
|
|
|
188
189
|
- name: Set up Python ${{ matrix.python-version }}
|
|
189
|
-
uses: actions/setup-python@
|
|
190
|
+
uses: actions/setup-python@v6
|
|
190
191
|
with:
|
|
191
192
|
python-version: ${{ matrix.python-version }}
|
|
192
193
|
|
|
@@ -306,7 +307,7 @@ jobs:
|
|
|
306
307
|
python-version: [ 3.9, "3.10", "3.11", "3.12", "3.13", "3.14" ]
|
|
307
308
|
|
|
308
309
|
steps:
|
|
309
|
-
- uses: actions/checkout@
|
|
310
|
+
- uses: actions/checkout@v5
|
|
310
311
|
|
|
311
312
|
- name: Install dependencies
|
|
312
313
|
run: |
|
|
@@ -341,10 +342,10 @@ jobs:
|
|
|
341
342
|
lib_copy: [true, false]
|
|
342
343
|
|
|
343
344
|
steps:
|
|
344
|
-
- uses: actions/checkout@
|
|
345
|
+
- uses: actions/checkout@v5
|
|
345
346
|
|
|
346
347
|
- name: Set up Python ${{ matrix.python-version }}
|
|
347
|
-
uses: actions/setup-python@
|
|
348
|
+
uses: actions/setup-python@v6
|
|
348
349
|
with:
|
|
349
350
|
python-version: ${{ matrix.python-version }}
|
|
350
351
|
|
|
@@ -390,10 +391,10 @@ jobs:
|
|
|
390
391
|
python-version: [3.9, "3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
391
392
|
|
|
392
393
|
steps:
|
|
393
|
-
- uses: actions/checkout@
|
|
394
|
+
- uses: actions/checkout@v5
|
|
394
395
|
|
|
395
396
|
- name: Set up Python ${{ matrix.python-version }}
|
|
396
|
-
uses: actions/setup-python@
|
|
397
|
+
uses: actions/setup-python@v6
|
|
397
398
|
with:
|
|
398
399
|
python-version: ${{ matrix.python-version }}
|
|
399
400
|
|
|
@@ -433,9 +434,9 @@ jobs:
|
|
|
433
434
|
runs-on: ubuntu-latest
|
|
434
435
|
|
|
435
436
|
steps:
|
|
436
|
-
- uses: actions/checkout@
|
|
437
|
+
- uses: actions/checkout@v5
|
|
437
438
|
- name: Set up Python
|
|
438
|
-
uses: actions/setup-python@
|
|
439
|
+
uses: actions/setup-python@v6
|
|
439
440
|
with:
|
|
440
441
|
python-version: "3.13"
|
|
441
442
|
|
|
@@ -470,9 +471,9 @@ jobs:
|
|
|
470
471
|
name: Build source distribution
|
|
471
472
|
runs-on: ubuntu-latest
|
|
472
473
|
steps:
|
|
473
|
-
- uses: actions/checkout@
|
|
474
|
+
- uses: actions/checkout@v5
|
|
474
475
|
|
|
475
|
-
- uses: actions/setup-python@
|
|
476
|
+
- uses: actions/setup-python@v6
|
|
476
477
|
name: Install Python
|
|
477
478
|
with:
|
|
478
479
|
python-version: "3.13"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: peakrdl-python
|
|
3
|
-
Version: 3.0
|
|
3
|
+
Version: 3.1.0
|
|
4
4
|
Summary: Generate Python Register Access Layer (RAL) from SystemRDL
|
|
5
5
|
Author: Keith Brady
|
|
6
6
|
License: GNU LESSER GENERAL PUBLIC LICENSE
|
|
@@ -286,9 +286,9 @@ assumes that peakrdl has been installed.
|
|
|
286
286
|
To make use of the RAL with real hardware or a different simulation, the callbacks will need to be
|
|
287
287
|
connected to the appropriate access function in order to perform an address space reads and writes
|
|
288
288
|
|
|
289
|
-
#
|
|
289
|
+
# Some important changes
|
|
290
290
|
|
|
291
|
-
##
|
|
291
|
+
## 0.9.0
|
|
292
292
|
|
|
293
293
|
In order to address a major limitation of peakrdl-python that prevented it from implementing the
|
|
294
294
|
full systemRDL specification, a breaking API change was needed for handling blocks:
|
|
@@ -299,7 +299,7 @@ Users are encouraged to upgrade in order to avoid this limitation. However, ther
|
|
|
299
299
|
to support users with existing designs, see: _Legacy Block Callback and Block Access_ in the
|
|
300
300
|
documentation
|
|
301
301
|
|
|
302
|
-
##
|
|
302
|
+
## 1.2.0
|
|
303
303
|
|
|
304
304
|
Version 1.2 introduced a new way to define the enumerations for the field encoding. This allows
|
|
305
305
|
metadata from the systemRDL to propagate through to the generated code. This may break advanced
|
|
@@ -307,7 +307,7 @@ usage of the python enumerations. User are encouraged to use the new feature, ho
|
|
|
307
307
|
are problems with the old enumeration types (based on `IntEnum`) can be used, see
|
|
308
308
|
_Legacy Enumeration Types_ in the documentation
|
|
309
309
|
|
|
310
|
-
##
|
|
310
|
+
## 2.0.0
|
|
311
311
|
|
|
312
312
|
Version 2.0.0 introduced a significant change to the process for building the register model python
|
|
313
313
|
code. This change was intended to reduce the size of the generated code by only generating
|
|
@@ -325,4 +325,20 @@ changing each time it was regenerated, version 2.1.0 introduces a option to eith
|
|
|
325
325
|
of large register models but will be consistent, therefore is useful if the resultant code is being
|
|
326
326
|
checked into a version control system (such as GIT) and the differences are being reviewed
|
|
327
327
|
|
|
328
|
+
## 3.0.0
|
|
329
|
+
|
|
330
|
+
Version 3.0.0 has included a significant refactoring of the generated test cases, moving functions out
|
|
331
|
+
of the templates (generated code) in favour of an enhanced test library. On some cases, this
|
|
332
|
+
reduced the size of the test case generated code by 90%, significantly improved the time to generate
|
|
333
|
+
the code and also improved the time to run the tests by a 30% reduction.
|
|
334
|
+
|
|
335
|
+
In preparation for the removal of some legacy features from the early versions in release 4.0.0,
|
|
336
|
+
the following options were changed:
|
|
337
|
+
- Version 1.2 introduced a new custom enumeration type (rather than using `IntEnum`) in order to allow
|
|
338
|
+
the content to `name` and `desc` systemRDL properties in be accessible. Until version 3.0.0 the new
|
|
339
|
+
type was not the default, it now is. The old enumeration types can still be used by setting `legacy_enum_type`.
|
|
340
|
+
- The first versions of PeakRDL Python used the built-in `Array` type for accessing blocks of data efficiently.
|
|
341
|
+
This had some restrictions, so the a new methodology based on the `list` type was introduced in version 0.9.
|
|
342
|
+
The old array based behaviour is no longer the default but can be turned on using the `legacy_block_access`
|
|
343
|
+
|
|
328
344
|
|
|
@@ -75,9 +75,9 @@ assumes that peakrdl has been installed.
|
|
|
75
75
|
To make use of the RAL with real hardware or a different simulation, the callbacks will need to be
|
|
76
76
|
connected to the appropriate access function in order to perform an address space reads and writes
|
|
77
77
|
|
|
78
|
-
#
|
|
78
|
+
# Some important changes
|
|
79
79
|
|
|
80
|
-
##
|
|
80
|
+
## 0.9.0
|
|
81
81
|
|
|
82
82
|
In order to address a major limitation of peakrdl-python that prevented it from implementing the
|
|
83
83
|
full systemRDL specification, a breaking API change was needed for handling blocks:
|
|
@@ -88,7 +88,7 @@ Users are encouraged to upgrade in order to avoid this limitation. However, ther
|
|
|
88
88
|
to support users with existing designs, see: _Legacy Block Callback and Block Access_ in the
|
|
89
89
|
documentation
|
|
90
90
|
|
|
91
|
-
##
|
|
91
|
+
## 1.2.0
|
|
92
92
|
|
|
93
93
|
Version 1.2 introduced a new way to define the enumerations for the field encoding. This allows
|
|
94
94
|
metadata from the systemRDL to propagate through to the generated code. This may break advanced
|
|
@@ -96,7 +96,7 @@ usage of the python enumerations. User are encouraged to use the new feature, ho
|
|
|
96
96
|
are problems with the old enumeration types (based on `IntEnum`) can be used, see
|
|
97
97
|
_Legacy Enumeration Types_ in the documentation
|
|
98
98
|
|
|
99
|
-
##
|
|
99
|
+
## 2.0.0
|
|
100
100
|
|
|
101
101
|
Version 2.0.0 introduced a significant change to the process for building the register model python
|
|
102
102
|
code. This change was intended to reduce the size of the generated code by only generating
|
|
@@ -114,4 +114,20 @@ changing each time it was regenerated, version 2.1.0 introduces a option to eith
|
|
|
114
114
|
of large register models but will be consistent, therefore is useful if the resultant code is being
|
|
115
115
|
checked into a version control system (such as GIT) and the differences are being reviewed
|
|
116
116
|
|
|
117
|
+
## 3.0.0
|
|
118
|
+
|
|
119
|
+
Version 3.0.0 has included a significant refactoring of the generated test cases, moving functions out
|
|
120
|
+
of the templates (generated code) in favour of an enhanced test library. On some cases, this
|
|
121
|
+
reduced the size of the test case generated code by 90%, significantly improved the time to generate
|
|
122
|
+
the code and also improved the time to run the tests by a 30% reduction.
|
|
123
|
+
|
|
124
|
+
In preparation for the removal of some legacy features from the early versions in release 4.0.0,
|
|
125
|
+
the following options were changed:
|
|
126
|
+
- Version 1.2 introduced a new custom enumeration type (rather than using `IntEnum`) in order to allow
|
|
127
|
+
the content to `name` and `desc` systemRDL properties in be accessible. Until version 3.0.0 the new
|
|
128
|
+
type was not the default, it now is. The old enumeration types can still be used by setting `legacy_enum_type`.
|
|
129
|
+
- The first versions of PeakRDL Python used the built-in `Array` type for accessing blocks of data efficiently.
|
|
130
|
+
This had some restrictions, so the a new methodology based on the `list` type was introduced in version 0.9.
|
|
131
|
+
The old array based behaviour is no longer the default but can be turned on using the `legacy_block_access`
|
|
132
|
+
|
|
117
133
|
|
|
@@ -9,6 +9,7 @@ will be based on the top level address map name with the package was generated
|
|
|
9
9
|
|
|
10
10
|
| ``<root_name>``
|
|
11
11
|
| ├── ``lib``
|
|
12
|
+
| ├── ``lib_test``
|
|
12
13
|
| ├── ``sim_lib``
|
|
13
14
|
| ├── ``reg_model``
|
|
14
15
|
| │ └── ``<root_name>.py``
|
|
@@ -20,8 +21,9 @@ will be based on the top level address map name with the package was generated
|
|
|
20
21
|
In the folder structure above:
|
|
21
22
|
|
|
22
23
|
- ``<root_name>.py`` - This is the register access layer code for the design
|
|
23
|
-
- ``test_<root_name>.py`` - This is a set of autogenerated unittests to verify the register access layer
|
|
24
|
+
- ``test_<root_name>.py`` - This is a set of autogenerated unittests to verify the register access layer (The unit test generation can be skipped, see ``skip_test_case_generation``)
|
|
24
25
|
- ``lib`` - This is a package of base classes used by the register access layer (The copy of this can be skipped, see :ref:`skipping-lib-copy`)
|
|
26
|
+
- ``lib_test`` - This is a package of base classes autogenerated unit tests (The copy of this can be skipped, see :ref:`skipping-lib-copy`)
|
|
25
27
|
- ``sim_lib`` - This is a package of base classes used by the register access layer simulator (The copy of this can be skipped, see :ref:`skipping-lib-copy`)
|
|
26
28
|
|
|
27
29
|
.. versionchanged:: 2.0.0
|
|
@@ -30,6 +32,11 @@ In the folder structure above:
|
|
|
30
32
|
than building the whole register model in a single python module. This helps avoid
|
|
31
33
|
excessively large files which helps speed up the generation and loading time.
|
|
32
34
|
|
|
35
|
+
.. versionchanged:: 3.0.0
|
|
36
|
+
|
|
37
|
+
The auto-generated unit tests were changed in version 3.0.0 to split to make use
|
|
38
|
+
of a test library, which significantly reduced the size of the generated code.
|
|
39
|
+
|
|
33
40
|
Top Level Classes
|
|
34
41
|
-----------------
|
|
35
42
|
|
|
@@ -74,8 +81,10 @@ Callbacks
|
|
|
74
81
|
=========
|
|
75
82
|
|
|
76
83
|
The Register Access Layer will typically interfaced to a driver that
|
|
77
|
-
allows accesses the chip.
|
|
78
|
-
|
|
84
|
+
allows accesses the chip.
|
|
85
|
+
|
|
86
|
+
.. tip:: The simulator generated with the register model can be used as an alternative to
|
|
87
|
+
a hardware connection
|
|
79
88
|
|
|
80
89
|
In order to operate the register access layer typically requires the following:
|
|
81
90
|
|
|
@@ -222,6 +222,7 @@ if __name__ == '__main__':
|
|
|
222
222
|
skip_library_copy=not CommandLineArgs.copy_libraries,
|
|
223
223
|
legacy_block_access=CommandLineArgs.legacy_block_access,
|
|
224
224
|
user_defined_properties_to_include=CommandLineArgs.udp,
|
|
225
|
+
user_defined_properties_to_include_regex=CommandLineArgs.udp_regex,
|
|
225
226
|
hidden_inst_name_regex=CommandLineArgs.hide_regex,
|
|
226
227
|
legacy_enum_type=CommandLineArgs.legacy_enum_type,
|
|
227
228
|
skip_systemrdl_name_and_desc_properties=
|
|
@@ -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
|
|
@@ -26,12 +26,15 @@ from abc import ABC, abstractmethod
|
|
|
26
26
|
from itertools import product
|
|
27
27
|
from enum import IntEnum, Enum, auto
|
|
28
28
|
import math
|
|
29
|
+
import re
|
|
29
30
|
|
|
30
31
|
from .callbacks import CallbackSet, CallbackSetLegacy
|
|
31
32
|
|
|
32
33
|
UDPStruct = dict[str, 'UDPType']
|
|
33
34
|
UDPType = Union[str, int, bool, IntEnum, UDPStruct]
|
|
34
35
|
|
|
36
|
+
array_instance_re = re.compile(r'(?P<root_name>[A-Za-z_0-9]*)\[(?P<index>\d+)\]')
|
|
37
|
+
|
|
35
38
|
class Base(ABC):
|
|
36
39
|
"""
|
|
37
40
|
base class of for all types
|
|
@@ -97,6 +100,35 @@ class Base(ABC):
|
|
|
97
100
|
"""
|
|
98
101
|
return {}
|
|
99
102
|
|
|
103
|
+
def _traverse_from_fully_qualified_name(self, fully_qualified_name: list[str]) -> 'Base':
|
|
104
|
+
"""
|
|
105
|
+
This method allows another node in the structure to located based on a list of string
|
|
106
|
+
which represented the systemRDL path.
|
|
107
|
+
|
|
108
|
+
This function is intended for use with UDPs which reference other UDPs
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
# 1) location the root node by walking backwards up the tree until the parent is
|
|
112
|
+
# found
|
|
113
|
+
def locate_root(node: 'Base') -> 'Base':
|
|
114
|
+
if node.parent is None:
|
|
115
|
+
return node
|
|
116
|
+
return locate_root(node.parent)
|
|
117
|
+
root_node = locate_root(self)
|
|
118
|
+
# 2) check the 1st entry in the list matches the name of the root
|
|
119
|
+
if root_node.inst_name != fully_qualified_name[0]:
|
|
120
|
+
raise RuntimeError('root node name mismatch')
|
|
121
|
+
# 3) start walking down the tree matching the nodes
|
|
122
|
+
walking_node = root_node
|
|
123
|
+
for node_name in fully_qualified_name[1:]:
|
|
124
|
+
if not isinstance(walking_node, Node):
|
|
125
|
+
# the current node being traversed must be a Node type i.e. not a field
|
|
126
|
+
raise RuntimeError('node traversal has failed as type:{type(walking_node)} was'
|
|
127
|
+
' unexpectedly encountered')
|
|
128
|
+
walking_node = walking_node.get_child_by_system_rdl_name(node_name)
|
|
129
|
+
|
|
130
|
+
return walking_node
|
|
131
|
+
|
|
100
132
|
@property
|
|
101
133
|
def rdl_name(self) -> Optional[str]:
|
|
102
134
|
"""
|
|
@@ -200,6 +232,18 @@ class Node(Base ,ABC):
|
|
|
200
232
|
"""
|
|
201
233
|
if not isinstance(name, str):
|
|
202
234
|
raise TypeError(f'name must be a string got {type(name)}')
|
|
235
|
+
|
|
236
|
+
# check if an array style child pointer
|
|
237
|
+
array_name_match = array_instance_re.match(name)
|
|
238
|
+
if array_name_match:
|
|
239
|
+
root_name = array_name_match.group("root_name")
|
|
240
|
+
index = int(array_name_match.group("index"))
|
|
241
|
+
child_array = getattr(self, self.systemrdl_python_child_name_map[root_name])
|
|
242
|
+
if not isinstance(child_array, NodeArray):
|
|
243
|
+
raise ValueError('attempting to use array indexing into a non-array '
|
|
244
|
+
f'node: {root_name} of type:{type(child_array)}')
|
|
245
|
+
return child_array[index]
|
|
246
|
+
|
|
203
247
|
return getattr(self, self.systemrdl_python_child_name_map[name])
|
|
204
248
|
|
|
205
249
|
@property
|
|
@@ -404,7 +404,7 @@ class _FieldReadOnlyFramework(Field[FieldType], ABC):
|
|
|
404
404
|
'than or equal to 0')
|
|
405
405
|
|
|
406
406
|
if value > self.__parent_register.max_value:
|
|
407
|
-
raise ValueError(f'value to
|
|
407
|
+
raise ValueError(f'value to be decoded must be less than or equal '
|
|
408
408
|
f'to {self.__parent_register.max_value:d}')
|
|
409
409
|
|
|
410
410
|
if self.msb0 is False:
|
{peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/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,8 +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)
|
|
181
|
+
udp_replace_for_hashing(udp_value)
|
|
172
182
|
|
|
173
183
|
return value_to_hash
|
|
174
184
|
|
{peakrdl_python-3.0.0rc8 → peakrdl_python-3.1.0}/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,16 +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 }}" )
|
|
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 %}] )
|
|
107
102
|
{% else %}
|
|
108
|
-
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) }} )
|
|
109
104
|
{% endif %}
|
|
110
105
|
{% endfor %}
|
|
111
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 %}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: peakrdl-python
|
|
3
|
-
Version: 3.0
|
|
3
|
+
Version: 3.1.0
|
|
4
4
|
Summary: Generate Python Register Access Layer (RAL) from SystemRDL
|
|
5
5
|
Author: Keith Brady
|
|
6
6
|
License: GNU LESSER GENERAL PUBLIC LICENSE
|
|
@@ -286,9 +286,9 @@ assumes that peakrdl has been installed.
|
|
|
286
286
|
To make use of the RAL with real hardware or a different simulation, the callbacks will need to be
|
|
287
287
|
connected to the appropriate access function in order to perform an address space reads and writes
|
|
288
288
|
|
|
289
|
-
#
|
|
289
|
+
# Some important changes
|
|
290
290
|
|
|
291
|
-
##
|
|
291
|
+
## 0.9.0
|
|
292
292
|
|
|
293
293
|
In order to address a major limitation of peakrdl-python that prevented it from implementing the
|
|
294
294
|
full systemRDL specification, a breaking API change was needed for handling blocks:
|
|
@@ -299,7 +299,7 @@ Users are encouraged to upgrade in order to avoid this limitation. However, ther
|
|
|
299
299
|
to support users with existing designs, see: _Legacy Block Callback and Block Access_ in the
|
|
300
300
|
documentation
|
|
301
301
|
|
|
302
|
-
##
|
|
302
|
+
## 1.2.0
|
|
303
303
|
|
|
304
304
|
Version 1.2 introduced a new way to define the enumerations for the field encoding. This allows
|
|
305
305
|
metadata from the systemRDL to propagate through to the generated code. This may break advanced
|
|
@@ -307,7 +307,7 @@ usage of the python enumerations. User are encouraged to use the new feature, ho
|
|
|
307
307
|
are problems with the old enumeration types (based on `IntEnum`) can be used, see
|
|
308
308
|
_Legacy Enumeration Types_ in the documentation
|
|
309
309
|
|
|
310
|
-
##
|
|
310
|
+
## 2.0.0
|
|
311
311
|
|
|
312
312
|
Version 2.0.0 introduced a significant change to the process for building the register model python
|
|
313
313
|
code. This change was intended to reduce the size of the generated code by only generating
|
|
@@ -325,4 +325,20 @@ changing each time it was regenerated, version 2.1.0 introduces a option to eith
|
|
|
325
325
|
of large register models but will be consistent, therefore is useful if the resultant code is being
|
|
326
326
|
checked into a version control system (such as GIT) and the differences are being reviewed
|
|
327
327
|
|
|
328
|
+
## 3.0.0
|
|
329
|
+
|
|
330
|
+
Version 3.0.0 has included a significant refactoring of the generated test cases, moving functions out
|
|
331
|
+
of the templates (generated code) in favour of an enhanced test library. On some cases, this
|
|
332
|
+
reduced the size of the test case generated code by 90%, significantly improved the time to generate
|
|
333
|
+
the code and also improved the time to run the tests by a 30% reduction.
|
|
334
|
+
|
|
335
|
+
In preparation for the removal of some legacy features from the early versions in release 4.0.0,
|
|
336
|
+
the following options were changed:
|
|
337
|
+
- Version 1.2 introduced a new custom enumeration type (rather than using `IntEnum`) in order to allow
|
|
338
|
+
the content to `name` and `desc` systemRDL properties in be accessible. Until version 3.0.0 the new
|
|
339
|
+
type was not the default, it now is. The old enumeration types can still be used by setting `legacy_enum_type`.
|
|
340
|
+
- The first versions of PeakRDL Python used the built-in `Array` type for accessing blocks of data efficiently.
|
|
341
|
+
This had some restrictions, so the a new methodology based on the `list` type was introduced in version 0.9.
|
|
342
|
+
The old array based behaviour is no longer the default but can be turned on using the `legacy_block_access`
|
|
343
|
+
|
|
328
344
|
|