peakrdl-python 3.1.3__tar.gz → 4.0.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.
Files changed (198) hide show
  1. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/.github/workflows/action.yaml +35 -26
  2. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/.gitignore +1 -0
  3. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/PKG-INFO +21 -1
  4. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/README.md +19 -0
  5. peakrdl_python-4.0.0/docs/generated_package/callbacks.rst +113 -0
  6. peakrdl_python-4.0.0/docs/generated_package/output_structure.rst +132 -0
  7. peakrdl_python-4.0.0/docs/generated_package/using_ral.rst +458 -0
  8. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/docs/index.rst +12 -4
  9. peakrdl_python-4.0.0/example/fifo_register_example/demo_fifo_register_example.py +83 -0
  10. peakrdl_python-4.0.0/example/fifo_register_example/fifo_register_example.rdl +13 -0
  11. peakrdl_python-4.0.0/example/write_only_registers/demo_write_only_registers.py +115 -0
  12. peakrdl_python-4.0.0/example/write_only_registers/write_only_registers.rdl +27 -0
  13. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/generate_and_test.py +2 -19
  14. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/generate_testcases.py +2 -18
  15. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/pyproject.toml +1 -0
  16. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/__about__.py +2 -2
  17. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/__init__.py +3 -4
  18. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/__peakrdl__.py +9 -20
  19. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/_deploy_package.py +4 -3
  20. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/_node_walkers.py +4 -3
  21. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/class_names.py +4 -5
  22. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/compiler_udp.py +8 -6
  23. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/exporter.py +32 -113
  24. peakrdl_python-4.0.0/src/peakrdl_python/lib/__init__.py +64 -0
  25. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib/async_memory.py +30 -320
  26. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib/async_register_and_field.py +385 -256
  27. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib/base.py +10 -9
  28. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib/base_field.py +40 -31
  29. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib/base_register.py +51 -7
  30. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib/callbacks.py +18 -166
  31. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib/field_encoding.py +3 -3
  32. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib/memory.py +25 -341
  33. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib/register_and_field.py +319 -218
  34. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib/sections.py +33 -41
  35. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib/utility_functions.py +1 -29
  36. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib_test/__init__.py +3 -5
  37. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib_test/_async_base_test_class.py +2 -1
  38. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib_test/_base_test_class.py +1 -1
  39. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib_test/_common_base_test_class.py +38 -54
  40. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib_test/async_field_test_class.py +14 -15
  41. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib_test/async_mem_test_class.py +36 -128
  42. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib_test/async_reg_test_class.py +78 -21
  43. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib_test/async_test_class.py +3 -2
  44. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib_test/field_test_class.py +14 -16
  45. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib_test/mem_test_class.py +28 -126
  46. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib_test/reg_test_class.py +89 -35
  47. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib_test/test_class.py +3 -2
  48. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib_test/utilities.py +13 -14
  49. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/safe_name_utility.py +6 -19
  50. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/sim_lib/_callbacks.py +1 -1
  51. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/sim_lib/base.py +1 -1
  52. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/sim_lib/dummy_callbacks.py +1 -87
  53. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/sim_lib/field.py +2 -5
  54. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/sim_lib/memory.py +2 -2
  55. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/sim_lib/register.py +7 -6
  56. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/sim_lib/simulator.py +5 -106
  57. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/systemrdl_node_hashes.py +14 -18
  58. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/systemrdl_node_utility_functions.py +6 -12
  59. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/__init__.py +1 -1
  60. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/addrmap.py.jinja +11 -13
  61. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/addrmap_field.py.jinja +1 -1
  62. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/addrmap_memory.py.jinja +8 -9
  63. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/addrmap_register.py.jinja +35 -19
  64. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/addrmap_simulation.py.jinja +4 -4
  65. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/addrmap_simulation_tb.py.jinja +5 -20
  66. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/addrmap_system_rdl_name_mapping.py.jinja +1 -1
  67. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/addrmap_tb.py.jinja +16 -175
  68. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/addrmap_udp_property.py.jinja +1 -1
  69. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/addrmap_universal_property.py.jinja +1 -1
  70. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/baseclass_simulation_tb.py.jinja +4 -5
  71. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/baseclass_tb.py.jinja +15 -49
  72. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/child_definitions.py.jinja +1 -1
  73. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/example.py.jinja +3 -3
  74. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/field_enums.py.jinja +3 -9
  75. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/header.py.jinja +1 -1
  76. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/header_tb.py.jinja +1 -1
  77. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/property_enums.py.jinja +3 -8
  78. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/reg_definitions.py.jinja +1 -1
  79. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/templates/template_ultilities.py.jinja +1 -1
  80. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/unique_component_iterator.py +46 -18
  81. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python.egg-info/PKG-INFO +21 -1
  82. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python.egg-info/SOURCES.txt +7 -1
  83. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/alternative_templates_dynamic_toml/header_check.py +1 -2
  84. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/alternative_templates_toml/header_check.py +1 -1
  85. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/pathological_register_maps/pathological_rdl_builder.py +12 -10
  86. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/basic.rdl +4 -4
  87. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/name_clash.rdl +2 -1
  88. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/unit_tests/__init__.py +1 -1
  89. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/unit_tests/simple_components.py +28 -35
  90. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/unit_tests/test_array_indexing.py +5 -5
  91. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/unit_tests/test_building_inner_addrmap.py +8 -14
  92. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/unit_tests/test_export.py +11 -155
  93. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/unit_tests/test_field.py +34 -39
  94. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/unit_tests/test_name_desc_export.py +6 -13
  95. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/unit_tests/test_optimised_reg_array.py +8 -6
  96. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/unit_tests/test_reg.py +236 -58
  97. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/unit_tests/test_sim.py +8 -10
  98. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/unit_tests/test_system_rdl_enum.py +3 -1
  99. peakrdl_python-3.1.3/docs/generated_package.rst +0 -653
  100. peakrdl_python-3.1.3/src/peakrdl_python/lib/__init__.py +0 -121
  101. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/.readthedocs.yaml +0 -0
  102. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/LICENSE +0 -0
  103. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/MANIFEST.in +0 -0
  104. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/docs/api.rst +0 -0
  105. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/docs/api_components.rst +0 -0
  106. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/docs/command_line.rst +0 -0
  107. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/docs/conf.py +0 -0
  108. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/docs/customisation.rst +0 -0
  109. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/docs/design_decisions.rst +0 -0
  110. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/docs/design_tools.rst +0 -0
  111. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/docs/genindex.rst +0 -0
  112. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/docs/installation.rst +0 -0
  113. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/docs/requirements.txt +0 -0
  114. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/array_access/array_access.rdl +0 -0
  115. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/array_access/demo_array_access.py +0 -0
  116. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/enumerated_fields/demo_enumerated_fields.py +0 -0
  117. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/enumerated_fields/enumerated_fields.rdl +0 -0
  118. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/optimised_access/demo_optimised_access.py +0 -0
  119. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/optimised_access/demo_optimised_array_access.py +0 -0
  120. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/optimised_access/optimised_access.rdl +0 -0
  121. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/optimised_access/optimised_array_access.rdl +0 -0
  122. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/overridden_names/demo_over_ridden_names.py +0 -0
  123. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/overridden_names/overridden_names.rdl +0 -0
  124. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/simulating_callbacks/chip_with_a_GPIO.rdl +0 -0
  125. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/simulating_callbacks/flashing_the_LED.py +0 -0
  126. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/tranversing_address_map/chip_with_registers.rdl +0 -0
  127. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/tranversing_address_map/dumping_register_state_to_json_file.py +0 -0
  128. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/tranversing_address_map/reg_dump.json +0 -0
  129. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/tranversing_address_map/reseting_registers.py +0 -0
  130. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/tranversing_address_map/writing_register_state_from_json_file.py +0 -0
  131. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/user_defined_properties/demo_user_defined_properties.py +0 -0
  132. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/user_defined_properties/user_defined_properties.rdl +0 -0
  133. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/why_ral/__init__.py +0 -0
  134. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/why_ral/gpio.rdl +0 -0
  135. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/why_ral/with_hal.py +0 -0
  136. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/why_ral/with_ral.py +0 -0
  137. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/example/why_ral/without_ral.py +0 -0
  138. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/setup.cfg +0 -0
  139. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/.coveragerc +0 -0
  140. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/lib/py.typed +0 -0
  141. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/py.typed +0 -0
  142. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/sim_lib/__init__.py +0 -0
  143. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python/sim_lib/py.typed +0 -0
  144. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python.egg-info/dependency_links.txt +0 -0
  145. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python.egg-info/entry_points.txt +0 -0
  146. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python.egg-info/requires.txt +0 -0
  147. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/src/peakrdl_python.egg-info/top_level.txt +0 -0
  148. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/alternative_templates/header.py.jinja +0 -0
  149. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/alternative_templates/header_tb.py.jinja +0 -0
  150. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/alternative_templates_dynamic/header.py.jinja +0 -0
  151. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/alternative_templates_dynamic/header_tb.py.jinja +0 -0
  152. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/alternative_templates_dynamic_toml/peakrdl.toml +0 -0
  153. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/alternative_templates_toml/peakrdl.toml +0 -0
  154. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/pathological_register_maps/templates/pathological_template.rdl.jinja +0 -0
  155. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/RDLFormatCode_example.rdl +0 -0
  156. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/addr_map.rdl +0 -0
  157. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/aliases.rdl +0 -0
  158. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/all_register_access_types.rdl +0 -0
  159. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/block_a.xml +0 -0
  160. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/block_b.xml +0 -0
  161. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/deduplicated_field.rdl +0 -0
  162. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/different_array_types.rdl +0 -0
  163. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/enum_example.rdl +0 -0
  164. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/example_issue_106.rdl +0 -0
  165. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/extended_memories.rdl +0 -0
  166. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/extended_sizes_registers_array.rdl +0 -0
  167. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/field_scope.rdl +0 -0
  168. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/field_with_overridden_reset.rdl +0 -0
  169. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/fields_with_HW_write.rdl +0 -0
  170. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/fields_with_reset_values.rdl +0 -0
  171. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/hidden_property.rdl +0 -0
  172. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/large_field_combinations.rdl +0 -0
  173. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/memories.rdl +0 -0
  174. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/memories_with_registers.rdl +0 -0
  175. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/msb0_and_lsb0.rdl +0 -0
  176. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/multi_block.rdl +0 -0
  177. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/multifile.rdl +0 -0
  178. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/name_desc_all_levels.rdl +0 -0
  179. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/name_desc_option_deduplicate.rdl +0 -0
  180. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/name_desc_stress_test.rdl +0 -0
  181. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/overlapping_registers_and_fields.rdl +0 -0
  182. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/overridden_python_name.rdl +0 -0
  183. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/parametrised_readonly_and_readwrite.rdl +0 -0
  184. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/parametrised_top.rdl +0 -0
  185. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/reg_name_stress.rdl +0 -0
  186. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/regfile_and_arrays.rdl +0 -0
  187. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/reserved_elements.rdl +0 -0
  188. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/same_but_different_enum.rdl +0 -0
  189. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/signals_definitions_at_various_levels.rdl +0 -0
  190. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/simple.rdl +0 -0
  191. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/simple.xml +0 -0
  192. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/simulator_test.rdl +0 -0
  193. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/sizes_registers.rdl +0 -0
  194. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/sizes_registers_array.rdl +0 -0
  195. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/sparse_enum_issue_200.rdl +0 -0
  196. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/udp_with_referencing.rdl +0 -0
  197. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/user_defined_properties.rdl +0 -0
  198. {peakrdl_python-3.1.3 → peakrdl_python-4.0.0}/tests/testcases/write_only_enum_with_undefined_reset.rdl +0 -0
@@ -1,8 +1,6 @@
1
1
  # This is a basic workflow to help you get started with Actions
2
2
 
3
3
  name: CI
4
- permissions:
5
- contents: read
6
4
 
7
5
  # Controls when the action will run.
8
6
  on:
@@ -22,6 +20,10 @@ on:
22
20
  # Allows you to run this workflow manually from the Actions tab
23
21
  workflow_dispatch:
24
22
 
23
+ permissions:
24
+ contents: read
25
+ id-token: write
26
+
25
27
  # A workflow run is made up of one or more jobs that can run sequentially or in parallel
26
28
  jobs:
27
29
  lint:
@@ -74,7 +76,7 @@ jobs:
74
76
  runs-on: ubuntu-latest
75
77
  strategy:
76
78
  matrix:
77
- python-version: [ 3.9, "3.10", "3.11", "3.12", "3.13", "3.14" ]
79
+ python-version: [ 3.9, "3.10", "3.11", "3.12", "3.13", "3.14", "3.15" ]
78
80
 
79
81
  steps:
80
82
  - uses: actions/checkout@v5
@@ -104,7 +106,7 @@ jobs:
104
106
  runs-on: ubuntu-latest
105
107
  strategy:
106
108
  matrix:
107
- python-version: [ 3.9, "3.10", "3.11", "3.12", "3.13", "3.14" ]
109
+ python-version: [ 3.9, "3.10", "3.11", "3.12", "3.13", "3.14", "3.15" ]
108
110
 
109
111
  steps:
110
112
  - uses: actions/checkout@v5
@@ -140,10 +142,6 @@ jobs:
140
142
 
141
143
  python -m generate_and_test --RDL_source_file tests/testcases/accelera-generic_example.rdl --root_node some_register_map
142
144
  sleep 10
143
- python -m generate_and_test --RDL_source_file tests/testcases/accelera-generic_example.rdl --root_node some_register_map --legacy_block_access
144
- sleep 10
145
- python -m generate_and_test --RDL_source_file tests/testcases/accelera-generic_example.rdl --root_node some_register_map --legacy_enum_type
146
- sleep 10
147
145
  python -m generate_and_test --RDL_source_file tests/testcases/accelera-generic_example.rdl --root_node some_register_map --copy_libraries
148
146
  sleep 10
149
147
  python -m generate_and_test --RDL_source_file tests/testcases/accelera-generic_example.rdl --root_node some_register_map --hashing_mode PYTHONHASH
@@ -181,7 +179,7 @@ jobs:
181
179
  runs-on: ubuntu-latest
182
180
  strategy:
183
181
  matrix:
184
- python-version: [ 3.9, "3.10", "3.11", "3.12", "3.13", "3.14" ]
182
+ python-version: [ 3.9, "3.10", "3.11", "3.12", "3.13", "3.14", "3.15" ]
185
183
 
186
184
  steps:
187
185
  - uses: actions/checkout@v5
@@ -214,16 +212,11 @@ jobs:
214
212
  peakrdl python tests/testcases/hidden_property.rdl -o peakrdl_out/raw_async/ --async
215
213
  peakrdl python tests/testcases/hidden_property.rdl -o peakrdl_out/raw_async/show_hidden/ --show_hidden --async
216
214
  python -m unittest discover -s peakrdl_out/raw_async
217
- peakrdl python tests/testcases/basic.rdl -o peakrdl_out/raw_legacy_block/ --legacy_block_access
218
- python -m unittest discover -s peakrdl_out/raw_legacy_block
219
-
215
+
220
216
  peakrdl python tests/testcases/basic.rdl -o peakrdl_out/no_test/ --skip_test_case_generation
221
217
 
222
218
  peakrdl python tests/testcases/basic.rdl -o peakrdl_out/no_lib/ --skip_library_copy
223
219
  python -m unittest discover -s peakrdl_out/no_lib
224
-
225
- peakrdl python tests/testcases/enum_example.rdl -o peakrdl_out/raw_legacy_enum/ --legacy_enum_type
226
- python -m unittest discover -s peakrdl_out/raw_legacy_enum
227
220
 
228
221
  # test a TOMl file that passes in overridden templates
229
222
  peakrdl python tests/testcases/basic.rdl -o peakrdl_out/simple_user_template/ --peakrdl-cfg tests/alternative_templates_toml/peakrdl.toml
@@ -295,6 +288,18 @@ jobs:
295
288
 
296
289
  cd ../..
297
290
 
291
+ cd example/write_only_registers/
292
+ peakrdl python write_only_registers.rdl -o .
293
+ python -m demo_write_only_registers
294
+
295
+ cd ../..
296
+
297
+ cd example/fifo_register_example/
298
+ peakrdl python fifo_register_example.rdl -o .
299
+ python -m demo_fifo_register_example
300
+
301
+ cd ../..
302
+
298
303
  identical_code:
299
304
  needs:
300
305
  - mypy
@@ -304,7 +309,7 @@ jobs:
304
309
  runs-on: ubuntu-latest
305
310
  strategy:
306
311
  matrix:
307
- python-version: [ 3.9, "3.10", "3.11", "3.12", "3.13", "3.14" ]
312
+ python-version: [ 3.9, "3.10", "3.11", "3.12", "3.13", "3.14", "3.15" ]
308
313
 
309
314
  steps:
310
315
  - uses: actions/checkout@v5
@@ -338,7 +343,7 @@ jobs:
338
343
  runs-on: ubuntu-latest
339
344
  strategy:
340
345
  matrix:
341
- python-version: [3.9, "3.10", "3.11", "3.12", "3.13", "3.14"]
346
+ python-version: [3.9, "3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
342
347
  lib_copy: [true, false]
343
348
 
344
349
  steps:
@@ -388,7 +393,7 @@ jobs:
388
393
  runs-on: ubuntu-latest
389
394
  strategy:
390
395
  matrix:
391
- python-version: [3.9, "3.10", "3.11", "3.12", "3.13", "3.14"]
396
+ python-version: [3.9, "3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
392
397
 
393
398
  steps:
394
399
  - uses: actions/checkout@v5
@@ -480,16 +485,16 @@ jobs:
480
485
 
481
486
  - name: Install dependencies
482
487
  run: |
483
- python -m pip install -U build
488
+ python -m pip install --upgrade pip build
484
489
 
485
490
  - name: Build
486
- run: python -m build
491
+ run: python -m build --sdist --wheel --outdir dist
487
492
 
488
493
  - uses: actions/upload-artifact@v4
489
494
  with:
490
- path: |
491
- dist/*.tar.gz
492
- dist/*.whl
495
+ name: python-package
496
+ path: dist/*
497
+ if-no-files-found: error
493
498
 
494
499
  #-------------------------------------------------------------------------------
495
500
  deploy:
@@ -498,15 +503,19 @@ jobs:
498
503
 
499
504
  runs-on: ubuntu-latest
500
505
 
506
+ permissions:
507
+ contents: read
508
+ id-token: write
509
+
501
510
  # Only publish when a GitHub Release is created.
502
511
  if: github.event_name == 'release'
503
512
  steps:
504
513
  - uses: actions/download-artifact@v4
505
514
  with:
506
- name: artifact
515
+ name: python-package
507
516
  path: dist
508
517
 
509
518
  - uses: pypa/gh-action-pypi-publish@release/v1
510
519
  with:
511
- user: __token__
512
- password: ${{ secrets.PYPI_API_TOKEN }}
520
+ packages-dir: dist/
521
+ skip-existing: true
@@ -58,3 +58,4 @@ __pycache__/
58
58
  /example/simulating_callbacks/mychip/
59
59
  /example/tranversing_address_map/chip_with_registers/
60
60
  /generate_and_test_output/
61
+ /tests/testcases/accelera-generic_example.rdl
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: peakrdl-python
3
- Version: 3.1.3
3
+ Version: 4.0.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
@@ -182,6 +182,7 @@ Classifier: Programming Language :: Python :: 3.11
182
182
  Classifier: Programming Language :: Python :: 3.12
183
183
  Classifier: Programming Language :: Python :: 3.13
184
184
  Classifier: Programming Language :: Python :: 3.14
185
+ Classifier: Programming Language :: Python :: 3.15
185
186
  Classifier: Programming Language :: Python :: 3 :: Only
186
187
  Classifier: Intended Audience :: Developers
187
188
  Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
@@ -341,4 +342,23 @@ the following options were changed:
341
342
  This had some restrictions, so the a new methodology based on the `list` type was introduced in version 0.9.
342
343
  The old array based behaviour is no longer the default but can be turned on using the `legacy_block_access`
343
344
 
345
+ ## 4.0.0
346
+
347
+ some legacy features from the early versions were removed in release 4.0.0, the following options were changed:
348
+ - Version 1.2 introduced a new custom enumeration type (rather than using `IntEnum`) in order to allow
349
+ the content to `name` and `desc` systemRDL properties in be accessible. Version 4.0.0 removed the option to use `IntEnum`
350
+ - The first versions of PeakRDL Python used the built-in `Array` type for accessing blocks of data efficiently.
351
+ This had some restrictions, so a new methodology based on the `list` type was introduced in version 0.9.
352
+ The old array based behaviour was removed in this version
353
+
354
+ This release also improved the features for write-only register:
355
+ - field write operations no longer have a hard-code base value of `0` in the register, the base register value is configurable via the `write_initial_state` property
356
+ - the `write_fields` methods also uses the `write_initial_state` property to allow other bits in the register to be set if needed, rather than a hardcoded `0`
357
+ - A new `single_write` context manager can be used to set multiple field values in a single write with a configurable initial register state
358
+
359
+ The read/write register class has similar feature:
360
+ - A new `single_write` context manager that does not use a read before the write to set multiple field values in a single write with a configurable initial register state
361
+ - A new `write_all_fields_without_read` method tht will write all the writable fields with the `write_initial_state` property to allow other bits in the register to be set if needed
362
+
363
+
344
364
 
@@ -130,4 +130,23 @@ the following options were changed:
130
130
  This had some restrictions, so the a new methodology based on the `list` type was introduced in version 0.9.
131
131
  The old array based behaviour is no longer the default but can be turned on using the `legacy_block_access`
132
132
 
133
+ ## 4.0.0
134
+
135
+ some legacy features from the early versions were removed in release 4.0.0, the following options were changed:
136
+ - Version 1.2 introduced a new custom enumeration type (rather than using `IntEnum`) in order to allow
137
+ the content to `name` and `desc` systemRDL properties in be accessible. Version 4.0.0 removed the option to use `IntEnum`
138
+ - The first versions of PeakRDL Python used the built-in `Array` type for accessing blocks of data efficiently.
139
+ This had some restrictions, so a new methodology based on the `list` type was introduced in version 0.9.
140
+ The old array based behaviour was removed in this version
141
+
142
+ This release also improved the features for write-only register:
143
+ - field write operations no longer have a hard-code base value of `0` in the register, the base register value is configurable via the `write_initial_state` property
144
+ - the `write_fields` methods also uses the `write_initial_state` property to allow other bits in the register to be set if needed, rather than a hardcoded `0`
145
+ - A new `single_write` context manager can be used to set multiple field values in a single write with a configurable initial register state
146
+
147
+ The read/write register class has similar feature:
148
+ - A new `single_write` context manager that does not use a read before the write to set multiple field values in a single write with a configurable initial register state
149
+ - A new `write_all_fields_without_read` method tht will write all the writable fields with the `write_initial_state` property to allow other bits in the register to be set if needed
150
+
151
+
133
152
 
@@ -0,0 +1,113 @@
1
+ Callbacks
2
+ *********
3
+
4
+ The Register Access Layer will typically interfaced to a driver that
5
+ allows accesses the chip.
6
+
7
+ .. tip:: The simulator generated with the register model can be used as an alternative to
8
+ a hardware connection
9
+
10
+ In order to operate the register access layer typically requires the following:
11
+
12
+ - A callback for a single register write, this not required if there is no writable register in
13
+ the register access layer
14
+ - A callback for a single register read, this not required if there is no writable register in
15
+ the register access layer
16
+
17
+ In addition the register access layer can make use of block operations where a block of the
18
+ address space is read in a single transaction. Not all drivers support these
19
+
20
+ The examples of these two methods are included within the generated register
21
+ access layer package so that it can be used from the console:
22
+
23
+ .. code-block:: python
24
+
25
+ def read_addr_space(addr: int, width: int, accesswidth: int) -> int:
26
+ """
27
+ Callback to simulate the operation of the package, everytime the read is called, it will
28
+ request the user input the value to be read back.
29
+
30
+ Args:
31
+ addr: Address to write to
32
+ width: Width of the register in bits
33
+ accesswidth: Minimum access width of the register in bits
34
+
35
+ Returns:
36
+ value inputted by the used
37
+ """
38
+ assert isinstance(addr, int)
39
+ assert isinstance(width, int)
40
+ assert isinstance(accesswidth, int)
41
+ return input('value to read from address:0x%X' % addr)
42
+
43
+ def write_addr_space(addr: int, width: int, accesswidth: int, data: int) -> None:
44
+ """
45
+ Callback to simulate the operation of the package, everytime the write is called, it will
46
+ print out the result.
47
+
48
+ Args:
49
+ addr: Address to write to
50
+ width: Width of the register in bits
51
+ accesswidth: Minimum access width of the register in bits
52
+ data: value to be written to the register
53
+
54
+ Returns:
55
+ None
56
+ """
57
+ assert isinstance(addr, int)
58
+ assert isinstance(width, int)
59
+ assert isinstance(accesswidth, int)
60
+ assert isinstance(data, int)
61
+ print('write data:0x%X to address:0x%X' % (data, addr))
62
+
63
+ In a real system these call backs will be connected to a driver.
64
+
65
+ In addition there is also an option to use ``async`` callbacks if the package is built
66
+ ``asyncoutput`` set to True.
67
+
68
+ Callback Set
69
+ ============
70
+
71
+ The callbacks are passed into the register access layer using either:
72
+
73
+ * ``NormalCallbackSet`` for standard python function callbacks
74
+ * ``AsyncCallbackSet`` for async python function callbacks, these are called from the library using
75
+ ``await``
76
+
77
+ Legacy Block Callback and Block Access
78
+ ======================================
79
+
80
+ .. versionchanged:: 0.9.0
81
+
82
+ Previous versions of PeakRDL Python used the python ``array.array`` for efficiently moving blocks
83
+ of data. This was changed in version 0.9.0 in order to accommodate memories which were larger
84
+ than 64 bit wide which could not be supported as the array type only support entries of up to
85
+ 64 bit.
86
+
87
+ .. warning::
88
+ The developers apologise for making a breaking change, however, not being able to fully the
89
+ systemRDL specification was determined to be a major limitation that needed to be addressed.
90
+
91
+ It could have left this as a future compatibility mode before making a breaking change but
92
+ that would just delay the pain it was felt to be better to get as many users onto the new
93
+ API as soon as possible whilst PeakRDL Python is in beta.
94
+
95
+ If you really want to just keep on with the array based interface and make only minimal changes
96
+ to existing code, there are two simple steps:
97
+
98
+ 1. The northbound interfaces that are provided by the generated package expect lists of integers
99
+ rather than array. The old interfaces can be retained by using the ``legacy_block_access``
100
+ build option.
101
+ 2. The southbound interfaces into the callbacks again need to use lists for the
102
+ ``read_block_callback`` and ``write_block_callback`` methods. If you want to continue to use
103
+ the old scheme use the following callback classes which are part of the callbacks:
104
+ * ``NormalCallbackSetLegacy`` for standard python function callbacks
105
+ * ``AsyncCallbackSetLegacy`` for async python function callbacks, these are called from the library using ``await``
106
+
107
+ .. versionchanged:: 3.0.0
108
+
109
+ The ``legacy_block_access`` will now default to ``False``
110
+
111
+ .. versionchanged:: 4.0.0
112
+
113
+ The ``legacy_block_access`` was removed, the ``NormalCallbackSetLegacy`` and ``AsyncCallbackSetLegacy`` are no longer supported
@@ -0,0 +1,132 @@
1
+ Output Structure
2
+ ****************
3
+
4
+ PeakRDL Python generates a python Register Access Layer (RAL) from a System RDL design. The
5
+ generated python code is contained in a package, structured as shown below. The ``root_name``
6
+ will be based on the top level address map name with the package was generated
7
+
8
+ | ``<root_name>``
9
+ | ├── ``lib``
10
+ | ├── ``lib_test``
11
+ | ├── ``sim_lib``
12
+ | ├── ``reg_model``
13
+ | │ └── ``<root_name>.py``
14
+ | ├── ``sim``
15
+ | │ └── ``<root_name>.py``
16
+ | └── ``tests``
17
+ | └── ``test_<root_name>.py``
18
+
19
+ In the folder structure above:
20
+
21
+ - ``<root_name>.py`` - This is the register access layer code for the design
22
+ - ``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``)
23
+ - ``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`)
24
+ - ``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
+ - ``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
+
27
+ .. versionchanged:: 2.0.0
28
+
29
+ The ``reg_model`` was changed in version 2.0.0 to split it out into multiple modules rather
30
+ than building the whole register model in a single python module. This helps avoid
31
+ excessively large files which helps speed up the generation and loading time.
32
+
33
+ .. versionchanged:: 3.0.0
34
+
35
+ The auto-generated unit tests were changed in version 3.0.0 to split to make use
36
+ of a test library, which significantly reduced the size of the generated code.
37
+
38
+ Top Level Classes
39
+ =================
40
+
41
+ In order to use the generated packages, the Top Level Class needs to be imported.
42
+
43
+ .. versionchanged:: 2.0.0
44
+
45
+ A new class aliases were added to the ``reg_model`` and ``sim`` packages to allow the register
46
+ model and simulator to be imported more easily. See the example below using ``RegModel`` and
47
+ ``Simulator``.
48
+
49
+ .. warning:: It is not recommended to import the child classes. If a sub-section of the register
50
+ model is all that is needed, it is better to only build the section needed.
51
+
52
+ Class Names
53
+ ===========
54
+
55
+ PeakRDL Python generates python classes to model the parts of the register model. These can not
56
+ always map to the names in the code, especially if attributes are overridden. Therefore PeakRDL
57
+ Python generates new names.
58
+
59
+ .. versionchanged:: 2.0.0
60
+
61
+ In order to reduce duplication within the generated model a hashing algortihm is applied to the
62
+ nodes in the design to determine which nodes are unique. This hash is appended to the name
63
+ of all the python classes in the register model
64
+
65
+ .. versionadded:: 2.1.0
66
+
67
+ There are two possible algorithms for the hashing, this is selectable by the user:
68
+
69
+ * The builtin python ``hash`` function, this is fast but is a salted hash so changes hashes export to
70
+ export
71
+ * Use the ``SHA256`` hash from the python ``hashlib`` standard library, this may slow down the export
72
+ of large register models but will be consistent, therefore is useful if the resultant code is being
73
+ checked into a version control system (such as GIT) and the differences are being reviewed
74
+
75
+ .. tip::
76
+
77
+ Use the default builtin ``hash`` option unless you need to use the alternative
78
+
79
+ Unit Tests
80
+ ==========
81
+
82
+ In addition to the Register Model a set od unit tests are made that test that the register model has been
83
+ built correctly
84
+
85
+ Running the Unit Tests
86
+ ----------------------
87
+
88
+ There are many ways to run Python Unit tests. A good place to start is the ``unittest`` module
89
+ included in the Python standard installation.
90
+
91
+
92
+ Simulator
93
+ =========
94
+
95
+ PeakRDL Python also generates an simulator, this can be used to test and develop using the
96
+ generated package. The simulator is used in a the examples shown earlier in this section. The
97
+ simulator has the option to attach a callback to the read and write operations of either a
98
+ register or field. In addition there is a ``value`` property that allows access to the register
99
+ or field content, this allows the contents to be accessed or updated without activating the
100
+ callbacks, this is intended to allow the simulator to be extended with behaviour that is not
101
+ fully described by the systemRDL.
102
+
103
+ .. warning:: The PeakRDL Python simulator is not intended to replace an RTL simulation of the
104
+ design. It does not simulate the hardware, it is intended as a simple tool for
105
+ development and testing of the python wrappers or code that uses them.
106
+
107
+ .. _skipping-lib-copy:
108
+
109
+ Skipping the Library Copy
110
+ =========================
111
+
112
+ In some cases it may be desirable to skip the copy of the library from the generated pacakge.
113
+ This may be useful in development of PeakRDL-python. It can also be used to avoid distributing
114
+ licensed code.
115
+
116
+ .. warning:: If the libraries are not distributed with the package, it is very important to
117
+ ensure users download the matching version of the PeakRDL-python package to use it
118
+
119
+ Autoformatting
120
+ ==============
121
+
122
+ The generated code is not perfect it often has lots of spare black lines, over time this will
123
+ improve but the quickest way to resolve these issue is to include an autoformatter
124
+ post-generation. Previous versions of peakrdl-python included the option to run an autoformatter
125
+ to clean up the generated code. This had two issues:
126
+
127
+ * It created maintenance issues when the autoformatter changed
128
+ * The choice of autoformatter is an individual one, rather than force an autoformatter on people
129
+ it is better to let people choose their own.
130
+
131
+ peakrdl-python uses the Black `Black <https://pypi.org/project/black/L>`_ in the CI tests to check
132
+ that the generated code is compatible with an autoformatter.