SimplHDL 0.8.2__tar.gz → 0.10.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 (159) hide show
  1. {simplhdl-0.8.2/src/SimplHDL.egg-info → simplhdl-0.10.0}/PKG-INFO +23 -13
  2. {simplhdl-0.8.2 → simplhdl-0.10.0}/pyproject.toml +54 -42
  3. {simplhdl-0.8.2 → simplhdl-0.10.0/src/SimplHDL.egg-info}/PKG-INFO +23 -13
  4. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/SimplHDL.egg-info/SOURCES.txt +11 -11
  5. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/SimplHDL.egg-info/entry_points.txt +2 -2
  6. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/SimplHDL.egg-info/requires.txt +23 -11
  7. simplhdl-0.10.0/src/simplhdl/__init__.py +6 -0
  8. simplhdl-0.10.0/src/simplhdl/__main__.py +49 -0
  9. simplhdl-0.10.0/src/simplhdl/cli/arguments.py +53 -0
  10. simplhdl-0.10.0/src/simplhdl/cli/info.py +235 -0
  11. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl/cli/run.py +2 -2
  12. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl/cocotb.py +39 -35
  13. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl/plugin/flow.py +1 -1
  14. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl/plugin/generator.py +1 -1
  15. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl/plugin/implementationflow.py +1 -1
  16. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl/plugin/parser.py +5 -5
  17. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl/plugin/simulationflow.py +86 -82
  18. simplhdl-0.10.0/src/simplhdl/project/attributes.py +68 -0
  19. simplhdl-0.10.0/src/simplhdl/project/base.py +67 -0
  20. simplhdl-0.10.0/src/simplhdl/project/design.py +139 -0
  21. simplhdl-0.10.0/src/simplhdl/project/files.py +478 -0
  22. simplhdl-0.10.0/src/simplhdl/project/fileset.py +221 -0
  23. simplhdl-0.10.0/src/simplhdl/project/project.py +149 -0
  24. simplhdl-0.10.0/src/simplhdl/simplhdl.py +53 -0
  25. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl/utils.py +13 -1
  26. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_chisel/chisel.py +8 -8
  27. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_encrypt/encrypt/encryptflow.py +16 -17
  28. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_fusesocparser/fusesocparser.py +6 -5
  29. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_lint/flake8/flake8flow.py +2 -2
  30. simplhdl-0.10.0/src/simplhdl_lint/resources/templates/vsg/files.json.j2 +7 -0
  31. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_lint/verible/veribleflow.py +6 -6
  32. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_lint/vsg/vsgflow.py +4 -6
  33. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_modelsim/modelsim/modelsimflow.py +34 -33
  34. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_modelsim/resources/templates/modelsim/cocotb.mk.j2 +5 -2
  35. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_modelsim/resources/templates/modelsim/project.mk.j2 +6 -6
  36. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_parser/simplhdlparser.py +31 -73
  37. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_peakrdl/systemrdl.py +36 -37
  38. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_quartus/quartusdse/quartusdseflow.py +1 -1
  39. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_quartus/quartusexport/quartusexportflow.py +36 -37
  40. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_quartus/quartusflow.py +47 -43
  41. simplhdl-0.10.0/src/simplhdl_quartus/resources/templates/quartus/project.tcl.j2 +67 -0
  42. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_quartus/resources/templates/quartus/run.tcl.j2 +1 -1
  43. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_quartus/spd.py +139 -139
  44. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_questasim/questasim/questasimflow.py +22 -28
  45. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_questasim/resources/templates/questasim/project.qrun.j2 +6 -9
  46. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_rivierapro/resources/templates/rivierapro/cocotb.mk.j2 +2 -2
  47. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_rivierapro/resources/templates/rivierapro/project.mk.j2 +7 -7
  48. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_rivierapro/rivierapro/rivieraproflow.py +23 -35
  49. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vcs/resources/templates/vcs/project.mk.j2 +1 -1
  50. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vcs/resources/templates/vcs/synopsys_sim.setup.j2 +2 -2
  51. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vcs/vcs/vcsflow.py +22 -20
  52. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vivado/ipxact.py +64 -63
  53. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vivado/resources/templates/vivado/project.tcl.j2 +64 -42
  54. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vivado/resources/templates/vivado/run.tcl.j2 +13 -1
  55. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vivado/resources/templates/vivado/steps.tcl.j2 +3 -3
  56. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vivado/resources/templates/xsim/project.mk.j2 +1 -1
  57. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vivado/vivadoflow.py +32 -30
  58. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vivado/xsim/xsimflow.py +21 -19
  59. simplhdl-0.10.0/tests/test_design.py +220 -0
  60. simplhdl-0.10.0/tests/test_files.py +155 -0
  61. simplhdl-0.10.0/tests/test_fileset.py +109 -0
  62. simplhdl-0.8.2/src/simplhdl/__init__.py +0 -5
  63. simplhdl-0.8.2/src/simplhdl/__main__.py +0 -95
  64. simplhdl-0.8.2/src/simplhdl/cli/info.py +0 -161
  65. simplhdl-0.8.2/src/simplhdl/pyedaa/__init__.py +0 -256
  66. simplhdl-0.8.2/src/simplhdl/pyedaa/attributes.py +0 -21
  67. simplhdl-0.8.2/src/simplhdl/pyedaa/design.py +0 -90
  68. simplhdl-0.8.2/src/simplhdl/pyedaa/fileset.py +0 -89
  69. simplhdl-0.8.2/src/simplhdl/pyedaa/project.py +0 -197
  70. simplhdl-0.8.2/src/simplhdl/pyedaa/repo.py +0 -93
  71. simplhdl-0.8.2/src/simplhdl/pyedaa/target.py +0 -31
  72. simplhdl-0.8.2/src/simplhdl/pyedaa/vhdllibrary.py +0 -40
  73. simplhdl-0.8.2/src/simplhdl/simplhdl.py +0 -47
  74. simplhdl-0.8.2/src/simplhdl_lint/resources/templates/vsg/files.json.j2 +0 -7
  75. simplhdl-0.8.2/src/simplhdl_quartus/resources/templates/quartus/project.tcl.j2 +0 -67
  76. simplhdl-0.8.2/src/simplhdl_vivado/resources/templates/vivado/launch_run.sh.j2 +0 -12
  77. simplhdl-0.8.2/tests/test_dummy.py +0 -3
  78. {simplhdl-0.8.2 → simplhdl-0.10.0}/LICENSE +0 -0
  79. {simplhdl-0.8.2 → simplhdl-0.10.0}/README.md +0 -0
  80. {simplhdl-0.8.2 → simplhdl-0.10.0}/setup.cfg +0 -0
  81. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/SimplHDL.egg-info/dependency_links.txt +0 -0
  82. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/SimplHDL.egg-info/top_level.txt +0 -0
  83. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl/plugin/__init__.py +0 -0
  84. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl/plugin/loader.py +0 -0
  85. {simplhdl-0.8.2/src/simplhdl_encrypt → simplhdl-0.10.0/src/simplhdl/project}/__init__.py +0 -0
  86. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl/tools.py +0 -0
  87. {simplhdl-0.8.2/src/simplhdl_encrypt/encrypt → simplhdl-0.10.0/src/simplhdl_encrypt}/__init__.py +0 -0
  88. {simplhdl-0.8.2/src/simplhdl_fusesocparser → simplhdl-0.10.0/src/simplhdl_encrypt/encrypt}/__init__.py +0 -0
  89. {simplhdl-0.8.2/src/simplhdl_lint → simplhdl-0.10.0/src/simplhdl_fusesocparser}/__init__.py +0 -0
  90. {simplhdl-0.8.2/src/simplhdl_lint/resources → simplhdl-0.10.0/src/simplhdl_lint}/__init__.py +0 -0
  91. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_lint/lint/lintflow.py +0 -0
  92. {simplhdl-0.8.2/src/simplhdl_lint/resources/templates → simplhdl-0.10.0/src/simplhdl_lint/resources}/__init__.py +0 -0
  93. {simplhdl-0.8.2/src/simplhdl_lint/resources/templates/flake8 → simplhdl-0.10.0/src/simplhdl_lint/resources/templates}/__init__.py +0 -0
  94. {simplhdl-0.8.2/src/simplhdl_lint/resources/templates/verible → simplhdl-0.10.0/src/simplhdl_lint/resources/templates/flake8}/__init__.py +0 -0
  95. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_lint/resources/templates/flake8/setup.cfg.j2 +0 -0
  96. {simplhdl-0.8.2/src/simplhdl_lint/resources/templates/vsg → simplhdl-0.10.0/src/simplhdl_lint/resources/templates/verible}/__init__.py +0 -0
  97. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_lint/resources/templates/verible/rules.cfg.j2 +0 -0
  98. {simplhdl-0.8.2/src/simplhdl_lint/verible → simplhdl-0.10.0/src/simplhdl_lint/resources/templates/vsg}/__init__.py +0 -0
  99. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_lint/resources/templates/vsg/rules.yml.j2 +0 -0
  100. {simplhdl-0.8.2/src/simplhdl_lint/vsg → simplhdl-0.10.0/src/simplhdl_lint/verible}/__init__.py +0 -0
  101. {simplhdl-0.8.2/src/simplhdl_modelsim → simplhdl-0.10.0/src/simplhdl_lint/vsg}/__init__.py +0 -0
  102. {simplhdl-0.8.2/src/simplhdl_modelsim/modelsim → simplhdl-0.10.0/src/simplhdl_modelsim}/__init__.py +0 -0
  103. {simplhdl-0.8.2/src/simplhdl_modelsim/resources → simplhdl-0.10.0/src/simplhdl_modelsim/modelsim}/__init__.py +0 -0
  104. {simplhdl-0.8.2/src/simplhdl_modelsim/resources/templates → simplhdl-0.10.0/src/simplhdl_modelsim/resources}/__init__.py +0 -0
  105. {simplhdl-0.8.2/src/simplhdl_modelsim/resources/templates/modelsim → simplhdl-0.10.0/src/simplhdl_modelsim/resources/templates}/__init__.py +0 -0
  106. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_modelsim/resources/templates/modelsim/Makefile.j2 +0 -0
  107. {simplhdl-0.8.2/src/simplhdl_parser → simplhdl-0.10.0/src/simplhdl_modelsim/resources/templates/modelsim}/__init__.py +0 -0
  108. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_modelsim/resources/templates/modelsim/dependencies.mk.j2 +0 -0
  109. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_modelsim/resources/templates/modelsim/files.j2 +0 -0
  110. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_modelsim/resources/templates/modelsim/fileset.j2 +0 -0
  111. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_modelsim/resources/templates/modelsim/modelsim.tcl.j2 +0 -0
  112. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_modelsim/resources/templates/modelsim/run.do.j2 +0 -0
  113. {simplhdl-0.8.2/src/simplhdl_peakrdl → simplhdl-0.10.0/src/simplhdl_parser}/__init__.py +0 -0
  114. {simplhdl-0.8.2/src/simplhdl_quartus/quartusdse → simplhdl-0.10.0/src/simplhdl_peakrdl}/__init__.py +0 -0
  115. {simplhdl-0.8.2/src/simplhdl_quartus/quartusexport → simplhdl-0.10.0/src/simplhdl_quartus/quartusdse}/__init__.py +0 -0
  116. {simplhdl-0.8.2/src/simplhdl_quartus/resources → simplhdl-0.10.0/src/simplhdl_quartus/quartusexport}/__init__.py +0 -0
  117. {simplhdl-0.8.2/src/simplhdl_quartus/resources/templates → simplhdl-0.10.0/src/simplhdl_quartus/resources}/__init__.py +0 -0
  118. {simplhdl-0.8.2/src/simplhdl_quartus/resources/templates/quartus → simplhdl-0.10.0/src/simplhdl_quartus/resources/templates}/__init__.py +0 -0
  119. {simplhdl-0.8.2/src/simplhdl_questasim/questasim → simplhdl-0.10.0/src/simplhdl_quartus/resources/templates/quartus}/__init__.py +0 -0
  120. {simplhdl-0.8.2/src/simplhdl_questasim/resources → simplhdl-0.10.0/src/simplhdl_questasim/questasim}/__init__.py +0 -0
  121. {simplhdl-0.8.2/src/simplhdl_questasim/resources/templates → simplhdl-0.10.0/src/simplhdl_questasim/resources}/__init__.py +0 -0
  122. {simplhdl-0.8.2/src/simplhdl_questasim/resources/templates/questasim → simplhdl-0.10.0/src/simplhdl_questasim/resources/templates}/__init__.py +0 -0
  123. {simplhdl-0.8.2/src/simplhdl_rivierapro → simplhdl-0.10.0/src/simplhdl_questasim/resources/templates/questasim}/__init__.py +0 -0
  124. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_questasim/resources/templates/questasim/modelsim.tcl.j2 +0 -0
  125. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_questasim/resources/templates/questasim/visualizer.tcl.j2 +0 -0
  126. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_questasim/resources/templates/questasim/vsim-run.do.j2 +0 -0
  127. {simplhdl-0.8.2/src/simplhdl_rivierapro/resources → simplhdl-0.10.0/src/simplhdl_rivierapro}/__init__.py +0 -0
  128. {simplhdl-0.8.2/src/simplhdl_rivierapro/resources/templates → simplhdl-0.10.0/src/simplhdl_rivierapro/resources}/__init__.py +0 -0
  129. {simplhdl-0.8.2/src/simplhdl_rivierapro/resources/templates/rivierapro → simplhdl-0.10.0/src/simplhdl_rivierapro/resources/templates}/__init__.py +0 -0
  130. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_rivierapro/resources/templates/rivierapro/Makefile.j2 +0 -0
  131. {simplhdl-0.8.2/src/simplhdl_rivierapro → simplhdl-0.10.0/src/simplhdl_rivierapro/resources/templates}/rivierapro/__init__.py +0 -0
  132. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_rivierapro/resources/templates/rivierapro/dependencies.mk.j2 +0 -0
  133. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_rivierapro/resources/templates/rivierapro/files.j2 +0 -0
  134. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_rivierapro/resources/templates/rivierapro/fileset.j2 +0 -0
  135. {simplhdl-0.8.2/src/simplhdl_vcs → simplhdl-0.10.0/src/simplhdl_rivierapro/rivierapro}/__init__.py +0 -0
  136. {simplhdl-0.8.2/src/simplhdl_vcs/resources → simplhdl-0.10.0/src/simplhdl_vcs}/__init__.py +0 -0
  137. {simplhdl-0.8.2/src/simplhdl_vcs/resources/templates → simplhdl-0.10.0/src/simplhdl_vcs/resources}/__init__.py +0 -0
  138. {simplhdl-0.8.2/src/simplhdl_vcs/resources/templates/vcs → simplhdl-0.10.0/src/simplhdl_vcs/resources/templates}/__init__.py +0 -0
  139. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vcs/resources/templates/vcs/Makefile.j2 +0 -0
  140. {simplhdl-0.8.2/src/simplhdl_vcs → simplhdl-0.10.0/src/simplhdl_vcs/resources/templates}/vcs/__init__.py +0 -0
  141. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vcs/resources/templates/vcs/cocotb.mk.j2 +0 -0
  142. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vcs/resources/templates/vcs/dependencies.mk.j2 +0 -0
  143. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vcs/resources/templates/vcs/files.j2 +0 -0
  144. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vcs/resources/templates/vcs/fileset.j2 +0 -0
  145. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vcs/resources/templates/vcs/pli.tab.j2 +0 -0
  146. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vcs/resources/templates/vcs/simv-run.do.j2 +0 -0
  147. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vcs/resources/templates/vcs/vcs.parameters.j2 +0 -0
  148. {simplhdl-0.8.2/src/simplhdl_vivado → simplhdl-0.10.0/src/simplhdl_vcs/vcs}/__init__.py +0 -0
  149. {simplhdl-0.8.2/src/simplhdl_vivado/resources → simplhdl-0.10.0/src/simplhdl_vivado}/__init__.py +0 -0
  150. {simplhdl-0.8.2/src/simplhdl_vivado/resources/templates → simplhdl-0.10.0/src/simplhdl_vivado/resources}/__init__.py +0 -0
  151. {simplhdl-0.8.2/src/simplhdl_vivado/resources/templates/vivado → simplhdl-0.10.0/src/simplhdl_vivado/resources/templates}/__init__.py +0 -0
  152. {simplhdl-0.8.2/src/simplhdl_vivado/resources/templates/xsim → simplhdl-0.10.0/src/simplhdl_vivado/resources/templates/vivado}/__init__.py +0 -0
  153. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vivado/resources/templates/xsim/Makefile.j2 +0 -0
  154. {simplhdl-0.8.2/src/simplhdl_vivado → simplhdl-0.10.0/src/simplhdl_vivado/resources/templates}/xsim/__init__.py +0 -0
  155. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vivado/resources/templates/xsim/cocotb.mk.j2 +0 -0
  156. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vivado/resources/templates/xsim/dependencies.mk.j2 +0 -0
  157. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vivado/resources/templates/xsim/files.j2 +0 -0
  158. {simplhdl-0.8.2 → simplhdl-0.10.0}/src/simplhdl_vivado/resources/templates/xsim/fileset.j2 +0 -0
  159. /simplhdl-0.8.2/src/simplhdl/pyedaa/filetypes.py → /simplhdl-0.10.0/src/simplhdl_vivado/xsim/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SimplHDL
3
- Version: 0.8.2
3
+ Version: 0.10.0
4
4
  Summary: A framework for simulating and implementing HDL designs
5
5
  Author-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
6
6
  Maintainer-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
@@ -45,22 +45,32 @@ Classifier: Operating System :: OS Independent
45
45
  Requires-Python: >=3.8
46
46
  Description-Content-Type: text/markdown
47
47
  License-File: LICENSE
48
- Requires-Dist: importlib-resources; python_version < "3.9"
49
- Requires-Dist: pySVModel==0.3.5
50
- Requires-Dist: pyEDAA.ProjectModel==0.4.3
51
- Requires-Dist: pyyaml
52
- Requires-Dist: types-PyYAML
53
48
  Requires-Dist: argcomplete
54
- Requires-Dist: jinja2
55
- Requires-Dist: GitPython
56
- Requires-Dist: rich
57
- Requires-Dist: vsg
58
- Requires-Dist: flake8
59
49
  Requires-Dist: black
60
- Requires-Dist: systemrdl-compiler
50
+ Requires-Dist: flake8
51
+ Requires-Dist: GitPython
52
+ Requires-Dist: importlib-resources; python_version < "3.9"
53
+ Requires-Dist: jinja2
54
+ Requires-Dist: matplotlib
55
+ Requires-Dist: networkx
61
56
  Requires-Dist: peakrdl-html
62
- Requires-Dist: peakrdl-regblock>=1.2.0
63
57
  Requires-Dist: peakrdl-pyuvm
58
+ Requires-Dist: peakrdl-regblock>=1.2.0
59
+ Requires-Dist: pyyaml
60
+ Requires-Dist: rich
61
+ Requires-Dist: singleton-decorator
62
+ Requires-Dist: systemrdl-compiler
63
+ Requires-Dist: types-PyYAML
64
+ Requires-Dist: vsg
65
+ Provides-Extra: dev
66
+ Requires-Dist: flake8; extra == "dev"
67
+ Requires-Dist: mypy; extra == "dev"
68
+ Requires-Dist: robotframework; extra == "dev"
69
+ Requires-Dist: tox; extra == "dev"
70
+ Provides-Extra: docs
71
+ Requires-Dist: furo; extra == "docs"
72
+ Requires-Dist: Sphinx; extra == "docs"
73
+ Requires-Dist: sphinx_pyproject; extra == "docs"
64
74
  Dynamic: license-file
65
75
 
66
76
  ## Introduction
@@ -4,52 +4,19 @@ requires = [
4
4
  "wheel"]
5
5
  build-backend = "setuptools.build_meta"
6
6
 
7
- [tool.setuptools.dynamic]
8
- version = {attr = "simplhdl.__version__"}
9
-
10
- [tool.setuptools.package-data]
11
- "*" = ["*.j2"]
12
-
13
- [tool.flake8]
14
- max-line-length = 120
15
- max_complexity = 10
16
- per-file-ignores = [
17
- # Ignore the F401 (unused import) error in all __init__.py files
18
- "__init__.py:F401",
19
- ]
20
-
21
7
  [project]
22
8
  name = "SimplHDL"
23
- description = "A framework for simulating and implementing HDL designs"
24
9
  dynamic = ["version"]
25
- dependencies = [
26
- "importlib-resources;python_version<'3.9'",
27
- "pySVModel==0.3.5",
28
- "pyEDAA.ProjectModel==0.4.3",
29
- "pyyaml",
30
- "types-PyYAML",
31
- "argcomplete",
32
- "jinja2",
33
- "GitPython",
34
- "rich",
35
- "vsg",
36
- "flake8",
37
- "black",
38
- "systemrdl-compiler",
39
- "peakrdl-html",
40
- "peakrdl-regblock>=1.2.0",
41
- "peakrdl-pyuvm",
42
- ]
43
- requires-python = ">=3.8"
10
+ description = "A framework for simulating and implementing HDL designs"
11
+ readme = "README.md"
44
12
  authors = [
45
- {name = "Rasmus Grøndahl Olsen", email = "simplhdl@gmail.com"},
13
+ {name = "Rasmus Grøndahl Olsen", email = "simplhdl@gmail.com"},
46
14
  ]
47
15
  maintainers = [
48
- {name = "Rasmus Grøndahl Olsen", email = "simplhdl@gmail.com"},
16
+ {name = "Rasmus Grøndahl Olsen", email = "simplhdl@gmail.com"},
49
17
  ]
50
-
51
- readme = "README.md"
52
18
  license = {file = "LICENSE"}
19
+ requires-python = ">=3.8"
53
20
  classifiers = [
54
21
  "Development Status :: 4 - Beta",
55
22
  "Programming Language :: Python :: 3",
@@ -65,8 +32,25 @@ classifiers = [
65
32
  "Operating System :: OS Independent",
66
33
  ]
67
34
 
68
- [project.scripts]
69
- simpl = "simplhdl.__main__:main"
35
+ dependencies = [
36
+ "argcomplete",
37
+ "black",
38
+ "flake8",
39
+ "GitPython",
40
+ "importlib-resources;python_version<'3.9'",
41
+ "jinja2",
42
+ "matplotlib",
43
+ "networkx",
44
+ "peakrdl-html",
45
+ "peakrdl-pyuvm",
46
+ "peakrdl-regblock>=1.2.0",
47
+ "pyyaml",
48
+ "rich",
49
+ "singleton-decorator",
50
+ "systemrdl-compiler",
51
+ "types-PyYAML",
52
+ "vsg",
53
+ ]
70
54
 
71
55
  [project.urls]
72
56
  Homepage = "https://github.com/SimplHDL"
@@ -74,12 +58,27 @@ Documentation = "https://simplhdl.readthedocs.io/en/latest/"
74
58
  Repository = "https://github.com/SimplHDL/simplhdl.git"
75
59
  Issues = "https://github.com/SimplHDL/simplhdl/issues"
76
60
 
61
+ [project.scripts]
62
+ simpl = "simplhdl.__main__:main"
63
+
64
+ [project.optional-dependencies]
65
+ dev = [
66
+ "flake8",
67
+ "mypy",
68
+ "robotframework",
69
+ "tox",
70
+ ]
71
+ docs = [
72
+ "furo",
73
+ "Sphinx",
74
+ "sphinx_pyproject",
75
+ ]
77
76
 
78
77
  [project.entry-points."simplhdl.plugins"]
79
78
  chisel_generator = "simplhdl_chisel.chisel:ChiselGenerator"
80
- encrypt_flow = "simplhdl_encrypt.encrypt.encryptflow:EncryptFlow"
79
+ encrypt = "simplhdl_encrypt.encrypt.encryptflow:EncryptFlow"
81
80
  fusersoc_parser = "simplhdl_fusesocparser.fusesocparser:FuseSocParser"
82
- lint_flow = "simplhdl_lint.lint.lintflow:LintFlow"
81
+ lint = "simplhdl_lint.lint.lintflow:LintFlow"
83
82
  modelsim = "simplhdl_modelsim.modelsim.modelsimflow:ModelSimFlow"
84
83
  peakrdl_generator = "simplhdl_peakrdl.systemrdl:PeakRdlGenerator"
85
84
  quartus = "simplhdl_quartus.quartusflow:QuartusFlow"
@@ -93,3 +92,16 @@ vcs = "simplhdl_vcs.vcs.vcsflow:VcsFlow"
93
92
  vivado = "simplhdl_vivado.vivadoflow:VivadoFlow"
94
93
  vivado_generator = "simplhdl_vivado.ipxact:VivadoGenerator"
95
94
  xsim = "simplhdl_vivado.xsim.xsimflow:XsimFlow"
95
+
96
+ [tool.setuptools.dynamic]
97
+ version = {attr = "simplhdl.__version__"}
98
+
99
+ [tool.setuptools.package-data]
100
+ "*" = ["*.j2"]
101
+
102
+ [tool.flake8]
103
+ max-line-length = 120
104
+ max_complexity = 10
105
+ per-file-ignores = [
106
+ "__init__.py:F401",
107
+ ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SimplHDL
3
- Version: 0.8.2
3
+ Version: 0.10.0
4
4
  Summary: A framework for simulating and implementing HDL designs
5
5
  Author-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
6
6
  Maintainer-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
@@ -45,22 +45,32 @@ Classifier: Operating System :: OS Independent
45
45
  Requires-Python: >=3.8
46
46
  Description-Content-Type: text/markdown
47
47
  License-File: LICENSE
48
- Requires-Dist: importlib-resources; python_version < "3.9"
49
- Requires-Dist: pySVModel==0.3.5
50
- Requires-Dist: pyEDAA.ProjectModel==0.4.3
51
- Requires-Dist: pyyaml
52
- Requires-Dist: types-PyYAML
53
48
  Requires-Dist: argcomplete
54
- Requires-Dist: jinja2
55
- Requires-Dist: GitPython
56
- Requires-Dist: rich
57
- Requires-Dist: vsg
58
- Requires-Dist: flake8
59
49
  Requires-Dist: black
60
- Requires-Dist: systemrdl-compiler
50
+ Requires-Dist: flake8
51
+ Requires-Dist: GitPython
52
+ Requires-Dist: importlib-resources; python_version < "3.9"
53
+ Requires-Dist: jinja2
54
+ Requires-Dist: matplotlib
55
+ Requires-Dist: networkx
61
56
  Requires-Dist: peakrdl-html
62
- Requires-Dist: peakrdl-regblock>=1.2.0
63
57
  Requires-Dist: peakrdl-pyuvm
58
+ Requires-Dist: peakrdl-regblock>=1.2.0
59
+ Requires-Dist: pyyaml
60
+ Requires-Dist: rich
61
+ Requires-Dist: singleton-decorator
62
+ Requires-Dist: systemrdl-compiler
63
+ Requires-Dist: types-PyYAML
64
+ Requires-Dist: vsg
65
+ Provides-Extra: dev
66
+ Requires-Dist: flake8; extra == "dev"
67
+ Requires-Dist: mypy; extra == "dev"
68
+ Requires-Dist: robotframework; extra == "dev"
69
+ Requires-Dist: tox; extra == "dev"
70
+ Provides-Extra: docs
71
+ Requires-Dist: furo; extra == "docs"
72
+ Requires-Dist: Sphinx; extra == "docs"
73
+ Requires-Dist: sphinx_pyproject; extra == "docs"
64
74
  Dynamic: license-file
65
75
 
66
76
  ## Introduction
@@ -13,6 +13,7 @@ src/simplhdl/cocotb.py
13
13
  src/simplhdl/simplhdl.py
14
14
  src/simplhdl/tools.py
15
15
  src/simplhdl/utils.py
16
+ src/simplhdl/cli/arguments.py
16
17
  src/simplhdl/cli/info.py
17
18
  src/simplhdl/cli/run.py
18
19
  src/simplhdl/plugin/__init__.py
@@ -22,15 +23,13 @@ src/simplhdl/plugin/implementationflow.py
22
23
  src/simplhdl/plugin/loader.py
23
24
  src/simplhdl/plugin/parser.py
24
25
  src/simplhdl/plugin/simulationflow.py
25
- src/simplhdl/pyedaa/__init__.py
26
- src/simplhdl/pyedaa/attributes.py
27
- src/simplhdl/pyedaa/design.py
28
- src/simplhdl/pyedaa/fileset.py
29
- src/simplhdl/pyedaa/filetypes.py
30
- src/simplhdl/pyedaa/project.py
31
- src/simplhdl/pyedaa/repo.py
32
- src/simplhdl/pyedaa/target.py
33
- src/simplhdl/pyedaa/vhdllibrary.py
26
+ src/simplhdl/project/__init__.py
27
+ src/simplhdl/project/attributes.py
28
+ src/simplhdl/project/base.py
29
+ src/simplhdl/project/design.py
30
+ src/simplhdl/project/files.py
31
+ src/simplhdl/project/fileset.py
32
+ src/simplhdl/project/project.py
34
33
  src/simplhdl_chisel/chisel.py
35
34
  src/simplhdl_encrypt/__init__.py
36
35
  src/simplhdl_encrypt/encrypt/__init__.py
@@ -125,7 +124,6 @@ src/simplhdl_vivado/vivadoflow.py
125
124
  src/simplhdl_vivado/resources/__init__.py
126
125
  src/simplhdl_vivado/resources/templates/__init__.py
127
126
  src/simplhdl_vivado/resources/templates/vivado/__init__.py
128
- src/simplhdl_vivado/resources/templates/vivado/launch_run.sh.j2
129
127
  src/simplhdl_vivado/resources/templates/vivado/project.tcl.j2
130
128
  src/simplhdl_vivado/resources/templates/vivado/run.tcl.j2
131
129
  src/simplhdl_vivado/resources/templates/vivado/steps.tcl.j2
@@ -138,4 +136,6 @@ src/simplhdl_vivado/resources/templates/xsim/fileset.j2
138
136
  src/simplhdl_vivado/resources/templates/xsim/project.mk.j2
139
137
  src/simplhdl_vivado/xsim/__init__.py
140
138
  src/simplhdl_vivado/xsim/xsimflow.py
141
- tests/test_dummy.py
139
+ tests/test_design.py
140
+ tests/test_files.py
141
+ tests/test_fileset.py
@@ -3,9 +3,9 @@ simpl = simplhdl.__main__:main
3
3
 
4
4
  [simplhdl.plugins]
5
5
  chisel_generator = simplhdl_chisel.chisel:ChiselGenerator
6
- encrypt_flow = simplhdl_encrypt.encrypt.encryptflow:EncryptFlow
6
+ encrypt = simplhdl_encrypt.encrypt.encryptflow:EncryptFlow
7
7
  fusersoc_parser = simplhdl_fusesocparser.fusesocparser:FuseSocParser
8
- lint_flow = simplhdl_lint.lint.lintflow:LintFlow
8
+ lint = simplhdl_lint.lint.lintflow:LintFlow
9
9
  modelsim = simplhdl_modelsim.modelsim.modelsimflow:ModelSimFlow
10
10
  peakrdl_generator = simplhdl_peakrdl.systemrdl:PeakRdlGenerator
11
11
  quartus = simplhdl_quartus.quartusflow:QuartusFlow
@@ -1,18 +1,30 @@
1
- pySVModel==0.3.5
2
- pyEDAA.ProjectModel==0.4.3
3
- pyyaml
4
- types-PyYAML
5
1
  argcomplete
6
- jinja2
7
- GitPython
8
- rich
9
- vsg
10
- flake8
11
2
  black
12
- systemrdl-compiler
3
+ flake8
4
+ GitPython
5
+ jinja2
6
+ matplotlib
7
+ networkx
13
8
  peakrdl-html
14
- peakrdl-regblock>=1.2.0
15
9
  peakrdl-pyuvm
10
+ peakrdl-regblock>=1.2.0
11
+ pyyaml
12
+ rich
13
+ singleton-decorator
14
+ systemrdl-compiler
15
+ types-PyYAML
16
+ vsg
16
17
 
17
18
  [:python_version < "3.9"]
18
19
  importlib-resources
20
+
21
+ [dev]
22
+ flake8
23
+ mypy
24
+ robotframework
25
+ tox
26
+
27
+ [docs]
28
+ furo
29
+ Sphinx
30
+ sphinx_pyproject
@@ -0,0 +1,6 @@
1
+ __version__ = "0.10.0"
2
+
3
+ from .__main__ import parse_arguments
4
+ from .project.project import Project
5
+ from .project.fileset import Fileset, FileOrder, FilesetOrder
6
+ from .project.design import Design
@@ -0,0 +1,49 @@
1
+ import logging
2
+ import sys
3
+ import traceback
4
+
5
+ from rich.logging import RichHandler
6
+
7
+ from .cli.arguments import parse_arguments
8
+ from .project.project import ProjectError
9
+ from .plugin.flow import FlowError
10
+ from .plugin.generator import GeneratorError
11
+ from .plugin.loader import load_plugins
12
+ from .plugin.parser import ParserError
13
+ from .simplhdl import Simplhdl
14
+ from .utils import CalledShError
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ def main():
20
+ try:
21
+ load_plugins()
22
+ args = parse_arguments()
23
+ levels = [logging.INFO, logging.DEBUG, logging.NOTSET]
24
+ level = levels[min(args.verbose, len(levels)-1)]
25
+ if level < logging.INFO:
26
+ show_path = True
27
+ else:
28
+ show_path = False
29
+
30
+ FORMAT = "[simplhdl.%(module)s] - %(message)s"
31
+ console = RichHandler(level=level, show_time=False, rich_tracebacks=True, show_path=show_path)
32
+ logging.basicConfig(
33
+ level=5,
34
+ format=FORMAT,
35
+ handlers=[console]
36
+ )
37
+ simpl = Simplhdl(args)
38
+ simpl.run()
39
+ except (NotImplementedError, FileNotFoundError, CalledShError,
40
+ ParserError, FlowError, GeneratorError, ProjectError) as e:
41
+ logger.debug(traceback.format_exc())
42
+ logger.error(e)
43
+ return 1
44
+ except SystemError:
45
+ return 1
46
+
47
+
48
+ if __name__ == '__main__':
49
+ sys.exit(main())
@@ -0,0 +1,53 @@
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ from pathlib import Path
5
+ from typing import Sequence
6
+
7
+ import argcomplete
8
+
9
+ from .. import __version__
10
+ from ..plugin.flow import FlowFactory
11
+
12
+
13
+ def parse_arguments(args: Sequence[str] = None, namespace: None = None) -> argparse.Namespace:
14
+
15
+ parser = argparse.ArgumentParser(
16
+ prog="simpl",
17
+ description="Simple framework for simulation and implementation of HDL designs"
18
+ )
19
+ parser.add_argument(
20
+ '--projectspec',
21
+ type=Path,
22
+ help="Project specification file"
23
+ )
24
+ parser.add_argument(
25
+ '--version',
26
+ action='version',
27
+ version=f"SimplHDL version {__version__}"
28
+ )
29
+ parser.add_argument(
30
+ '-v', '--verbose',
31
+ action='count',
32
+ default=0,
33
+ help="Increase verbosity"
34
+
35
+ )
36
+ parser.add_argument(
37
+ '-o',
38
+ '--outputdir',
39
+ default='_build',
40
+ type=Path,
41
+ help="output directory for build files"
42
+ )
43
+ subparsers = parser.add_subparsers(
44
+ title="Flows",
45
+ description="""Different work flows for simulation and implementation
46
+ of HDL designs""",
47
+ dest='flow'
48
+ )
49
+ for flow_class in FlowFactory.get_flows().values():
50
+ flow_class.parse_args(subparsers)
51
+
52
+ argcomplete.autocomplete(parser)
53
+ return parser.parse_args(args=args, namespace=namespace)
@@ -0,0 +1,235 @@
1
+ import networkx as nx
2
+ import matplotlib.pyplot as plt
3
+ import matplotlib.cm as cm
4
+
5
+ from argparse import Namespace
6
+ from pathlib import Path
7
+
8
+ from rich.console import Console
9
+ from rich.style import Style
10
+ from rich.tree import Tree
11
+
12
+ from ..plugin.flow import FlowBase
13
+ from ..project.fileset import Fileset, FileOrder
14
+ from ..project.project import Project
15
+ from ..project.files import UsedIn
16
+
17
+
18
+ class Info(FlowBase):
19
+
20
+ def __init__(self, name, args: Namespace, project: Project, builddir: Path):
21
+ super().__init__(name, args, project, builddir)
22
+ self.console = Console()
23
+ self.style = {
24
+ 'fileset': Style(color="color(4)", reverse=True),
25
+ 'ifile': Style(color="color(2)", reverse=False),
26
+ 'sfile': Style(color="color(3)", reverse=False),
27
+ 'file': Style(color="default", reverse=False),
28
+ }
29
+
30
+ @classmethod
31
+ def parse_args(self, subparsers) -> None:
32
+ parser = subparsers.add_parser('info', help='Project infomations')
33
+ parser.add_argument(
34
+ '--files',
35
+ action='store_true',
36
+ help="List files in project"
37
+ )
38
+ parser.add_argument(
39
+ '--filesets',
40
+ action='store_true',
41
+ help="List files sets in project"
42
+ )
43
+ parser.add_argument(
44
+ '--libraries',
45
+ action='store_true',
46
+ help="List libraries in project"
47
+ )
48
+ parser.add_argument(
49
+ '--hooks',
50
+ action='store_true',
51
+ help="List hooks in project"
52
+ )
53
+ parser.add_argument(
54
+ '--flow',
55
+ dest='infoflow',
56
+ help="List project based on flow"
57
+ )
58
+
59
+ def run(self) -> None:
60
+ self.project.validate()
61
+ if self.args.files:
62
+ self.print_files()
63
+ elif self.args.filesets:
64
+ self.print_filesets()
65
+ elif self.args.libraries:
66
+ self.print_libraries()
67
+ elif self.args.hooks:
68
+ self.print_hooks()
69
+ else:
70
+ self.print_info()
71
+
72
+ def graph_files(self) -> None:
73
+ G = self.project.defaultDesign._files
74
+
75
+ # 1. Assign layers and labels
76
+ labels = {}
77
+ for layer, nodes in enumerate(nx.topological_generations(G)):
78
+ # Sort nodes within this layer by their parent's string representation
79
+ # This ensures parent-groups are adjacent
80
+ sorted_nodes = sorted(nodes, key=lambda n: str(getattr(n, 'parent', '')))
81
+
82
+ for node in sorted_nodes:
83
+ G.nodes[node]["layer"] = layer
84
+ labels[node] = str(node.path.name)
85
+
86
+ # 2. Dynamic Color Mapping (from previous step)
87
+ unique_parents = sorted(
88
+ list(set(getattr(n, 'parent', None) for n in G.nodes() if getattr(n, 'parent', None))),
89
+ key=lambda p: str(p))
90
+ cmap = cm.get_cmap('tab20', len(unique_parents))
91
+ parent_to_color = {p: cmap(i) for i, p in enumerate(unique_parents)}
92
+ node_colors = [parent_to_color.get(getattr(n, 'parent', None), (0.5, 0.5, 0.5, 1.0)) for n in G.nodes()]
93
+
94
+ # 3. Compute Layout
95
+ # By default, multipartite_layout respects the order of G.nodes()
96
+ # To ensure the 'parent' grouping is reflected, we can use the 'layer' as a subset.
97
+ pos = nx.multipartite_layout(G, subset_key="layer")
98
+
99
+ # 4. Apply Stretching
100
+ # Increase X-multiplier to give grouped nodes more breathing room
101
+ pos = {n: (x * 4.0, y * 1.5) for n, (x, y) in pos.items()}
102
+
103
+ # 5. Plot
104
+ plt.figure(figsize=(25, 15))
105
+ nx.draw_networkx(
106
+ G, pos=pos, labels=labels,
107
+ node_color=node_colors,
108
+ node_size=3500,
109
+ arrowsize=20,
110
+ font_size=9
111
+ )
112
+
113
+ plt.margins(0.15)
114
+ plt.savefig(self.builddir.joinpath("files.png"), format="PNG", bbox_inches="tight")
115
+ plt.close()
116
+
117
+ def graph_filesets(self) -> None:
118
+ G = self.project.defaultDesign._filesets
119
+
120
+ labels = {}
121
+ for layer, nodes in enumerate(nx.topological_generations(G)):
122
+ # `multipartite_layout` expects the layer as a node attribute, so add the
123
+ # numeric layer value as a node attribute
124
+ for node in nodes:
125
+ G.nodes[node]["layer"] = layer
126
+ labels[node] = str(node.name)
127
+
128
+ # Compute the multipartite_layout using the "layer" node attribute
129
+ pos = nx.multipartite_layout(G, subset_key="layer")
130
+ fig, ax = plt.subplots()
131
+ nx.draw_networkx(G, pos=pos, ax=ax, labels=labels, with_labels=False)
132
+ ax.set_title("DAG layout in topological order")
133
+ fig.tight_layout()
134
+ plt.savefig(self.builddir.joinpath("filesets.png"), format="PNG")
135
+
136
+ def print_files(self) -> None:
137
+ for file in self.project.defaultDesign.files(order=FileOrder.COMPILE):
138
+ self.console.print(f"{file.path}")
139
+ self.project.validate()
140
+ self.graph_files()
141
+
142
+ def print_fileset(self, fileset: Fileset, level: Tree) -> None:
143
+ # indent = ' '*level
144
+ tree = level.add(f"[bold]{fileset.name}[/bold] ({fileset.library})", style=self.style['fileset'])
145
+ for file in fileset.files():
146
+ if UsedIn.IMPLEMENTATION in file.usedin and UsedIn.SIMULATION not in file.usedin:
147
+ style = self.style['ifile']
148
+ elif UsedIn.SIMULATION in file.usedin and UsedIn.IMPLEMENTATION not in file.usedin:
149
+ style = self.style['sfile']
150
+ else:
151
+ style = self.style['file']
152
+
153
+ tree.add(f"{file.path}", style=style)
154
+ for child_filset in fileset.children:
155
+ self.print_fileset(child_filset, tree)
156
+
157
+ def print_filesets(self) -> None:
158
+ tree = Tree('FILESETS:')
159
+ for fileset in self.project.defaultDesign.roots:
160
+ self.print_fileset(fileset, tree)
161
+ break
162
+ self.console.print(tree)
163
+ self.graph_files()
164
+ self.graph_filesets()
165
+
166
+ def print_hooks(self) -> None:
167
+ self.console.print('HOOKS:')
168
+ for name, value in self.project.hooks.items():
169
+ self.console.print(f" - {name}: {value}")
170
+
171
+ def print_libraries(self) -> None:
172
+ self.console.print('LIBRARIES:')
173
+ for library in self.project.defaultDesign.libraries:
174
+ self.console.print(f" - {library.name}")
175
+
176
+ def print_parameters(self) -> None:
177
+ self.console.print('PARAMETERS')
178
+ for name, value in self.project.parameters.items():
179
+ self.console.print(f" - {name}: {value}")
180
+
181
+ def print_generics(self) -> None:
182
+ self.console.print('GENERICS')
183
+ for name, value in self.project.generics.items():
184
+ self.console.print(f" - {name}: {value}")
185
+
186
+ def print_defines(self) -> None:
187
+ self.console.print('DEFINES')
188
+ for name, value in self.project.defines.items():
189
+ self.console.print(f" - {name}: {value}")
190
+
191
+ def print_plusargs(self) -> None:
192
+ self.console.print('PLUSARGS')
193
+ for name, value in self.project.plusargs.items():
194
+ self.console.print(f" - {name}: {value}")
195
+
196
+ def print_toplevels(self) -> None:
197
+ self.console.print('TOPLEVELS')
198
+ for top in self.project.defaultDesign.toplevels:
199
+ self.console.print(f" - {top}")
200
+
201
+ def print_resources(self) -> None:
202
+ self.console.print('RESOURCES')
203
+ for resource in [lib for lib in self.project.defaultDesign.libraries if lib.external is True]:
204
+ self.console.print(f" - {resource.name}: {resource.path}")
205
+
206
+ def print_project(self) -> None:
207
+ self.console.print('PROJECTNAME')
208
+ self.console.print(f" - {self.project.name}")
209
+
210
+ def print_part(self) -> None:
211
+ self.console.print('PART')
212
+ self.console.print(f" - {self.project.part}")
213
+
214
+ def print_info(self) -> None:
215
+ self.print_project()
216
+ self.console.print()
217
+ self.print_part()
218
+ self.console.print()
219
+ self.print_toplevels()
220
+ self.console.print()
221
+ self.print_plusargs()
222
+ self.console.print()
223
+ self.print_defines()
224
+ self.console.print()
225
+ self.print_parameters()
226
+ self.console.print()
227
+ self.print_generics()
228
+ self.console.print()
229
+ self.print_hooks()
230
+ self.console.print()
231
+ self.print_resources()
232
+ self.console.print()
233
+ self.print_libraries()
234
+ self.console.print()
235
+ self.print_filesets()