peakrdl-python 1.2.1rc4__tar.gz → 1.2.1rc5__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 (161) hide show
  1. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/PKG-INFO +1 -1
  2. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/__about__.py +1 -1
  3. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/exporter.py +24 -0
  4. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/sim_lib/simulator.py +52 -16
  5. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/sim_addrmap.py.jinja +14 -8
  6. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python.egg-info/PKG-INFO +1 -1
  7. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python.egg-info/SOURCES.txt +1 -0
  8. peakrdl_python-1.2.1rc5/tests/testcases/shared_register_issue_202 +24 -0
  9. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/.github/workflows/action.yaml +0 -0
  10. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/.gitignore +0 -0
  11. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/.readthedocs.yaml +0 -0
  12. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/LICENSE +0 -0
  13. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/MANIFEST.in +0 -0
  14. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/README.md +0 -0
  15. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/docs/api.rst +0 -0
  16. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/docs/api_components.rst +0 -0
  17. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/docs/command_line.rst +0 -0
  18. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/docs/conf.py +0 -0
  19. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/docs/customisation.rst +0 -0
  20. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/docs/design_decisions.rst +0 -0
  21. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/docs/design_tools.rst +0 -0
  22. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/docs/generated_package.rst +0 -0
  23. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/docs/genindex.rst +0 -0
  24. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/docs/index.rst +0 -0
  25. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/docs/installation.rst +0 -0
  26. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/docs/requirements.txt +0 -0
  27. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/array_access/array_access.rdl +0 -0
  28. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/array_access/demo_array_access.py +0 -0
  29. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/enumerated_fields/demo_enumerated_fields.py +0 -0
  30. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/enumerated_fields/enumerated_fields.rdl +0 -0
  31. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/optimised_access/demo_optimised_access.py +0 -0
  32. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/optimised_access/demo_optimised_array_access.py +0 -0
  33. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/optimised_access/optimised_access.rdl +0 -0
  34. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/optimised_access/optimised_array_access.rdl +0 -0
  35. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/overridden_names/demo_over_ridden_names.py +0 -0
  36. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/overridden_names/overridden_names.rdl +0 -0
  37. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/simulating_callbacks/chip_with_a_GPIO.rdl +0 -0
  38. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/simulating_callbacks/flashing_the_LED.py +0 -0
  39. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/tranversing_address_map/chip_with_registers.rdl +0 -0
  40. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/tranversing_address_map/dumping_register_state_to_json_file.py +0 -0
  41. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/tranversing_address_map/reg_dump.json +0 -0
  42. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/tranversing_address_map/reseting_registers.py +0 -0
  43. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/tranversing_address_map/writing_register_state_from_json_file.py +0 -0
  44. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/user_defined_properties/demo_user_defined_properties.py +0 -0
  45. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/user_defined_properties/user_defined_properties.rdl +0 -0
  46. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/why_ral/__init__.py +0 -0
  47. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/why_ral/gpio.rdl +0 -0
  48. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/why_ral/with_hal.py +0 -0
  49. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/why_ral/with_ral.py +0 -0
  50. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/example/why_ral/without_ral.py +0 -0
  51. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/generate_and_test.py +0 -0
  52. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/generate_testcases.py +0 -0
  53. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/pyproject.toml +0 -0
  54. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/setup.cfg +0 -0
  55. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/.coveragerc +0 -0
  56. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/__init__.py +0 -0
  57. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/__peakrdl__.py +0 -0
  58. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/_node_walkers.py +0 -0
  59. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/compiler_udp.py +0 -0
  60. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/lib/__init__.py +0 -0
  61. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/lib/async_memory.py +0 -0
  62. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/lib/async_register_and_field.py +0 -0
  63. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/lib/base.py +0 -0
  64. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/lib/base_field.py +0 -0
  65. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/lib/base_register.py +0 -0
  66. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/lib/callbacks.py +0 -0
  67. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/lib/field_encoding.py +0 -0
  68. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/lib/memory.py +0 -0
  69. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/lib/py.typed +0 -0
  70. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/lib/register_and_field.py +0 -0
  71. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/lib/utility_functions.py +0 -0
  72. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/py.typed +0 -0
  73. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/safe_name_utility.py +0 -0
  74. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/sim_lib/__init__.py +0 -0
  75. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/sim_lib/_callbacks.py +0 -0
  76. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/sim_lib/base.py +0 -0
  77. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/sim_lib/dummy_callbacks.py +0 -0
  78. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/sim_lib/field.py +0 -0
  79. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/sim_lib/memory.py +0 -0
  80. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/sim_lib/py.typed +0 -0
  81. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/sim_lib/register.py +0 -0
  82. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/systemrdl_node_utility_functions.py +0 -0
  83. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/__init__.py +0 -0
  84. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/addrmap.py.jinja +0 -0
  85. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/addrmap_field.py.jinja +0 -0
  86. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/addrmap_memory.py.jinja +0 -0
  87. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/addrmap_register.py.jinja +0 -0
  88. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/addrmap_simulation.py.jinja +0 -0
  89. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/addrmap_simulation_tb.py.jinja +0 -0
  90. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/addrmap_system_rdl_name_mapping.py.jinja +0 -0
  91. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/addrmap_tb.py.jinja +0 -0
  92. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/addrmap_udp_property.py.jinja +0 -0
  93. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/addrmap_universal_property.py.jinja +0 -0
  94. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/baseclass_simulation_tb.py.jinja +0 -0
  95. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/baseclass_tb.py.jinja +0 -0
  96. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/example.py.jinja +0 -0
  97. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/header.py.jinja +0 -0
  98. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/header_tb.py.jinja +0 -0
  99. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python/templates/reg_definitions.py.jinja +0 -0
  100. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python.egg-info/dependency_links.txt +0 -0
  101. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python.egg-info/entry_points.txt +0 -0
  102. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python.egg-info/requires.txt +0 -0
  103. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/src/peakrdl_python.egg-info/top_level.txt +0 -0
  104. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/alternative_templates/header.py.jinja +0 -0
  105. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/alternative_templates/header_tb.py.jinja +0 -0
  106. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/alternative_templates_dynamic/header.py.jinja +0 -0
  107. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/alternative_templates_dynamic/header_tb.py.jinja +0 -0
  108. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/alternative_templates_dynamic_toml/header_check.py +0 -0
  109. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/alternative_templates_dynamic_toml/peakrdl.toml +0 -0
  110. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/alternative_templates_toml/header_check.py +0 -0
  111. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/alternative_templates_toml/peakrdl.toml +0 -0
  112. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/RDLFormatCode_example.rdl +0 -0
  113. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/addr_map.rdl +0 -0
  114. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/all_register_access_types.rdl +0 -0
  115. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/basic.rdl +0 -0
  116. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/block_a.xml +0 -0
  117. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/block_b.xml +0 -0
  118. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/different_array_types.rdl +0 -0
  119. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/enum_example.rdl +0 -0
  120. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/example_issue_106.rdl +0 -0
  121. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/extended_memories.rdl +0 -0
  122. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/extended_sizes_registers_array.rdl +0 -0
  123. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/field_scope.rdl +0 -0
  124. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/field_with_overridden_reset.rdl +0 -0
  125. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/fields_with_HW_write.rdl +0 -0
  126. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/fields_with_reset_values.rdl +0 -0
  127. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/hidden_property.rdl +0 -0
  128. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/large_field_combinations.rdl +0 -0
  129. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/memories.rdl +0 -0
  130. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/memories_with_registers.rdl +0 -0
  131. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/msb0_and_lsb0.rdl +0 -0
  132. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/multi_block.rdl +0 -0
  133. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/multifile.rdl +0 -0
  134. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/name_clash.rdl +0 -0
  135. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/name_desc_all_levels.rdl +0 -0
  136. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/overridden_python_name.rdl +0 -0
  137. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/parametrised_readonly_and_readwrite.rdl +0 -0
  138. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/parametrised_top.rdl +0 -0
  139. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/reg_name_stress.rdl +0 -0
  140. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/regfile_and_arrays.rdl +0 -0
  141. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/reserved_elements.rdl +0 -0
  142. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/same_but_different_enum.rdl +0 -0
  143. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/signals_definitions_at_various_levels.rdl +0 -0
  144. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/simple.rdl +0 -0
  145. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/simple.xml +0 -0
  146. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/simulator_test.rdl +0 -0
  147. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/sizes_registers.rdl +0 -0
  148. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/sizes_registers_array.rdl +0 -0
  149. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/sparse_enum_issue_200.rdl +0 -0
  150. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/user_defined_properties.rdl +0 -0
  151. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/testcases/write_only_enum_with_undefined_reset.rdl +0 -0
  152. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/unit_tests/__init__.py +0 -0
  153. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/unit_tests/simple_components.py +0 -0
  154. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/unit_tests/test_array_indexing.py +0 -0
  155. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/unit_tests/test_building_inner_addrmap.py +0 -0
  156. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/unit_tests/test_export.py +0 -0
  157. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/unit_tests/test_field.py +0 -0
  158. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/unit_tests/test_name_desc_export.py +0 -0
  159. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/unit_tests/test_optimised_reg_array.py +0 -0
  160. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/unit_tests/test_reg.py +0 -0
  161. {peakrdl_python-1.2.1rc4 → peakrdl_python-1.2.1rc5}/tests/unit_tests/test_system_rdl_enum.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: peakrdl-python
3
- Version: 1.2.1rc4
3
+ Version: 1.2.1rc5
4
4
  Summary: Generate Python Register Access Layer (RAL) from SystemRDL
5
5
  Author: Keith Brady
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -17,4 +17,4 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
17
17
 
18
18
  Variables that describes the peakrdl-python Package
19
19
  """
20
- __version__ = "1.2.1rc4"
20
+ __version__ = "1.2.1rc5"
@@ -380,8 +380,31 @@ class PythonExporter:
380
380
  asyncoutput: bool,
381
381
  legacy_block_access: bool) -> None:
382
382
 
383
+ # as a result of issue 202, where two registers existed at that same address,
384
+ # rather than iterating through the registers within the Jinja template
385
+ # we iterate through them in in advance so that cases of two registers at that same
386
+ # address can be identified
387
+ reg_dict:dict[int, Union[list[RegNode],RegNode]] = {}
388
+ for node in filter(lambda x : isinstance(x, RegNode), top_block.descendants(unroll=True)):
389
+ if not isinstance(node, RegNode):
390
+ raise TypeError(f'node should be a register, got {type(node)}')
391
+ reg_addr = node.absolute_address
392
+ if reg_addr in reg_dict:
393
+ existing_entry = reg_dict[reg_addr]
394
+ # if the entry is already list simply append to it
395
+ if isinstance(existing_entry, list):
396
+ existing_entry.append(node)
397
+ elif isinstance(existing_entry, RegNode):
398
+ reg_dict[reg_addr] = [existing_entry, node]
399
+ else:
400
+ raise TypeError(f'exiting entry of unexpected type: {type(existing_entry)}')
401
+ else:
402
+ reg_dict[reg_addr] = node
403
+
404
+
383
405
  context = {
384
406
  'top_node': top_block,
407
+ 'reg_dict': reg_dict,
385
408
  'systemrdlRegNode': RegNode,
386
409
  'systemrdlMemNode': MemNode,
387
410
  'isinstance': isinstance,
@@ -389,6 +412,7 @@ class PythonExporter:
389
412
  'skip_lib_copy': skip_lib_copy,
390
413
  'version': __version__,
391
414
  'legacy_block_access': legacy_block_access,
415
+ 'list': list
392
416
  }
393
417
 
394
418
  context.update(self.user_template_context)
@@ -81,10 +81,11 @@ class BaseSimulator(ABC):
81
81
  self.address = address
82
82
 
83
83
  @abstractmethod
84
- def _build_registers(self) -> dict[int, Union[MemoryRegister, Register]]:
84
+ def _build_registers(self) -> dict[int, Union[list[Union[MemoryRegister, Register]],
85
+ Union[MemoryRegister, Register]]]:
85
86
  """
86
- populate the register structure, this method is intended to written by the generated code
87
- based on then design
87
+ populate the register structure, this method is intended to implemented by the generated
88
+ code based on then design
88
89
  """
89
90
 
90
91
  @abstractmethod
@@ -145,7 +146,15 @@ class BaseSimulator(ABC):
145
146
  # see if the address is a register first this ensures that registers in memories are
146
147
  # accessed directly
147
148
  if addr in self._registers:
148
- return self._registers[addr].read()
149
+ addr_entry = self._registers[addr]
150
+ if isinstance(addr_entry, list):
151
+ # search the list for a readable register
152
+ for inner_reg in addr_entry:
153
+ # pylint: disable-next=protected-access
154
+ if inner_reg._readable:
155
+ return inner_reg.read()
156
+ else:
157
+ return addr_entry.read()
149
158
 
150
159
  potential_memory = self.memory_for_address(address=addr)
151
160
  if potential_memory is not None:
@@ -164,7 +173,14 @@ class BaseSimulator(ABC):
164
173
  # see if the address is a register first this ensures that registers in memories are
165
174
  # accessed directly
166
175
  if addr in self._registers:
167
- self._registers[addr].write(data)
176
+ addr_entry = self._registers[addr]
177
+ if isinstance(addr_entry, list):
178
+ for inner_reg in addr_entry:
179
+ # pylint: disable-next=protected-access
180
+ if inner_reg._writable:
181
+ inner_reg.write(data)
182
+ else:
183
+ addr_entry.write(data)
168
184
  else:
169
185
  potential_memory = self.memory_for_address(address=addr)
170
186
  if potential_memory is not None:
@@ -244,8 +260,13 @@ class BaseSimulator(ABC):
244
260
 
245
261
  """
246
262
  for reg in self._registers.values():
247
- if reg.full_inst_name == name:
248
- return reg
263
+ if isinstance(reg, list):
264
+ for reg_list_entry in reg:
265
+ if reg_list_entry.full_inst_name == name:
266
+ return reg_list_entry
267
+ else:
268
+ if reg.full_inst_name == name:
269
+ return reg
249
270
 
250
271
  raise ValueError(f'register name not matched: {name}')
251
272
 
@@ -260,9 +281,15 @@ class BaseSimulator(ABC):
260
281
 
261
282
  """
262
283
  for reg in self._registers.values():
263
- for field in reg.fields:
264
- if field.full_inst_name == name:
265
- return field
284
+ if isinstance(reg, list):
285
+ for reg_list_entry in reg:
286
+ for field in reg_list_entry.fields:
287
+ if field.full_inst_name == name:
288
+ return field
289
+ else:
290
+ for field in reg.fields:
291
+ if field.full_inst_name == name:
292
+ return field
266
293
 
267
294
  raise ValueError(f'field name not matched: {name}')
268
295
 
@@ -282,12 +309,21 @@ class BaseSimulator(ABC):
282
309
  return mem.memory
283
310
 
284
311
  for reg in self._registers.values():
285
- if reg.full_inst_name == name:
286
- return reg
287
-
288
- for field in reg.fields:
289
- if field.full_inst_name == name:
290
- return field
312
+ if isinstance(reg, list):
313
+ for reg_list_entry in reg:
314
+ if reg_list_entry.full_inst_name == name:
315
+ return reg_list_entry
316
+
317
+ for field in reg_list_entry.fields:
318
+ if field.full_inst_name == name:
319
+ return field
320
+ else:
321
+ if reg.full_inst_name == name:
322
+ return reg
323
+
324
+ for field in reg.fields:
325
+ if field.full_inst_name == name:
326
+ return field
291
327
 
292
328
  raise ValueError(f'node name not matched: {name}')
293
329
 
@@ -30,18 +30,24 @@ from {% if skip_lib_copy %}peakrdl_python.{% else %}..{% endif %}sim_lib.simulat
30
30
  from {% if skip_lib_copy %}peakrdl_python.{% else %}..{% endif %}sim_lib.simulator import Simulator{% if legacy_block_access %}Legacy{% endif %}
31
31
  {%- endif %}
32
32
 
33
- class {{top_node.inst_name}}_simulator_cls(Simulator{% if legacy_block_access %}Legacy{% endif %}):
34
-
35
- def _build_registers(self) -> dict[int, Union[MemoryRegister, Register]]:
36
- return {
37
- {%- for node in top_node.descendants(unroll=True) -%}
38
- {% if isinstance(node, systemrdlRegNode) %}
39
- {{node.absolute_address}} : {% if isinstance(node.parent, systemrdlMemNode) %}MemoryRegister(memory=self.memory_for_address_with_exception({{node.absolute_address}}).memory,memory_address_offset={{node.address_offset}},{% else %}Register({% endif %}width={{node.size*8}}, full_inst_name='{{'.'.join(node.get_path_segments())}}', readable={{node.has_sw_readable}}, writable={{node.has_sw_writable}},
33
+ {%- macro single_reg_entry(node) %}
34
+ {% if isinstance(node.parent, systemrdlMemNode) %}MemoryRegister(memory=self.memory_for_address_with_exception({{node.absolute_address}}).memory,memory_address_offset={{node.address_offset}},{% else %}Register({% endif %}width={{node.size*8}}, full_inst_name='{{'.'.join(node.get_path_segments())}}', readable={{node.has_sw_readable}}, writable={{node.has_sw_writable}},
40
35
  fields=[
41
36
  {%- for field in node.fields() -%}
42
37
  FieldDefinition(high={{field.high}}, low={{field.low}}, msb={{field.msb}}, lsb={{field.lsb}}, inst_name='{{field.inst_name}}'),
43
38
  {%- endfor %}
44
- ]),
39
+ ])
40
+ {%- endmacro %}
41
+
42
+ class {{top_node.inst_name}}_simulator_cls(Simulator{% if legacy_block_access %}Legacy{% endif %}):
43
+
44
+ def _build_registers(self) -> dict[int, Union[list[Union[MemoryRegister, Register]], Union[MemoryRegister, Register]]]:
45
+ return {
46
+ {%- for addr, addr_entry in reg_dict.items() -%}
47
+ {% if isinstance(addr_entry, list) %}
48
+ {{addr}} : [{% for node in addr_entry %}{{single_reg_entry(node)}},{% endfor %}],
49
+ {% else %}
50
+ {{addr}} : {{single_reg_entry(addr_entry)}},
45
51
  {%- endif %}
46
52
  {%- endfor %}
47
53
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: peakrdl-python
3
- Version: 1.2.1rc4
3
+ Version: 1.2.1rc5
4
4
  Summary: Generate Python Register Access Layer (RAL) from SystemRDL
5
5
  Author: Keith Brady
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -137,6 +137,7 @@ tests/testcases/reg_name_stress.rdl
137
137
  tests/testcases/regfile_and_arrays.rdl
138
138
  tests/testcases/reserved_elements.rdl
139
139
  tests/testcases/same_but_different_enum.rdl
140
+ tests/testcases/shared_register_issue_202
140
141
  tests/testcases/signals_definitions_at_various_levels.rdl
141
142
  tests/testcases/simple.rdl
142
143
  tests/testcases/simple.xml
@@ -0,0 +1,24 @@
1
+ addrmap shared_register_issue_202 {
2
+
3
+ reg {
4
+ field { fieldwidth=1; sw=rw; } enable;
5
+ } control ;
6
+
7
+ reg {
8
+ field { fieldwidth=16; sw=w; hw=r; } data;
9
+ } tx @ 4;
10
+
11
+ reg {
12
+ field { fieldwidth=16; sw=r; hw=w; } data;
13
+ } rx @ 4;
14
+
15
+ reg {
16
+ field { fieldwidth=8; sw=r; hw=w; } count;
17
+ } rx_fifo_fill;
18
+
19
+ reg {
20
+ field { fieldwidth=8; sw=r; hw=w; } count;
21
+ } tx_fifo_fill;
22
+
23
+ };
24
+