SimplHDL 0.5.3__tar.gz → 0.5.5__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 (202) hide show
  1. {simplhdl-0.5.3 → simplhdl-0.5.5}/PKG-INFO +1 -1
  2. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/SimplHDL.egg-info/PKG-INFO +1 -1
  3. simplhdl-0.5.5/src/simplhdl/__init__.py +1 -0
  4. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/__main__.py +14 -2
  5. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/cocotb.py +4 -4
  6. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flow.py +7 -0
  7. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/flake8/flake8flow.py +1 -1
  8. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/modelsim/modelsimflow.py +17 -0
  9. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/quartusexport/quartusexportflow.py +1 -1
  10. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/questasim/questasimflow.py +14 -0
  11. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/verible/veribleflow.py +7 -4
  12. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/vsg/vsgflow.py +5 -2
  13. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/generators/ipxact.py +6 -1
  14. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/generators/spd.py +36 -27
  15. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/pyedaa/__init__.py +10 -1
  16. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/pyedaa/design.py +5 -4
  17. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/utils.py +2 -2
  18. simplhdl-0.5.3/src/simplhdl/__init__.py +0 -1
  19. {simplhdl-0.5.3 → simplhdl-0.5.5}/.github/workflows/publish.yml +0 -0
  20. {simplhdl-0.5.3 → simplhdl-0.5.5}/.gitignore +0 -0
  21. {simplhdl-0.5.3 → simplhdl-0.5.5}/.readthedocs.yaml +0 -0
  22. {simplhdl-0.5.3 → simplhdl-0.5.5}/LICENSE +0 -0
  23. {simplhdl-0.5.3 → simplhdl-0.5.5}/README.md +0 -0
  24. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/_static/simplhdl_dark.png +0 -0
  25. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/_static/simplhdl_light.png +0 -0
  26. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/_static/simplhdl_light_1.png +0 -0
  27. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/conf.py +0 -0
  28. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/drawing.svg +0 -0
  29. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/flows/ghdl.rst +0 -0
  30. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/flows/icarus.rst +0 -0
  31. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/flows/quartus.rst +0 -0
  32. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/flows/questasim.rst +0 -0
  33. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/flows/vcs.rst +0 -0
  34. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/flows/vivado.rst +0 -0
  35. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/flows/xsim.rst +0 -0
  36. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/flows.rst +0 -0
  37. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/index.rst +0 -0
  38. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/intel-ips.md +0 -0
  39. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/introduction.rst +0 -0
  40. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/plugins.rst +0 -0
  41. {simplhdl-0.5.3 → simplhdl-0.5.5}/docs/requirements.txt +0 -0
  42. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/adder/adder.yml +0 -0
  43. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/adder/hdl/adder.sv +0 -0
  44. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/adder/sim/testbench.sv +0 -0
  45. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/adder/sim/testbench.yml +0 -0
  46. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/adder/syn/build.yml +0 -0
  47. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/adder/syn/placement.xdc +0 -0
  48. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/adder/syn/timing.xdc +0 -0
  49. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/adder/syn/top.sv +0 -0
  50. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/alu.yml +0 -0
  51. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/hdl/add.sv +0 -0
  52. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/hdl/alu.sv +0 -0
  53. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/hdl/mul.sv +0 -0
  54. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/hdl/sub.sv +0 -0
  55. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/alu_vip/__init__.py +0 -0
  56. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/alu_vip/agent.py +0 -0
  57. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/alu_vip/aluif.py +0 -0
  58. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/alu_vip/driver.py +0 -0
  59. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/alu_vip/monitor.py +0 -0
  60. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/alu_vip/sequenceitem.py +0 -0
  61. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/alu_vip/sequencer.py +0 -0
  62. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/clock_vip/__init__.py +0 -0
  63. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/clock_vip/agent.py +0 -0
  64. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/clock_vip/clockif.py +0 -0
  65. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/pyuvm.yml +0 -0
  66. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/test/__init__.py +0 -0
  67. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/test/env.py +0 -0
  68. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/test/seq_lib.py +0 -0
  69. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/test/test.py +0 -0
  70. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/pyuvm/testbench.py +0 -0
  71. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/alu_vip/agent.svh +0 -0
  72. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/alu_vip/alu_vip.sv +0 -0
  73. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/alu_vip/alu_vip.yml +0 -0
  74. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/alu_vip/driver.svh +0 -0
  75. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/alu_vip/env.svh +0 -0
  76. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/alu_vip/monitor.svh +0 -0
  77. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/alu_vip/sequence_item.svh +0 -0
  78. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/tb_env/seq_lib/add_seq.svh +0 -0
  79. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/tb_env/seq_lib/base_seq.svh +0 -0
  80. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/tb_env/tb_env.sv +0 -0
  81. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/tb_env/tb_env.yml +0 -0
  82. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/tb_env/test/base_test.svh +0 -0
  83. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/tb_env/test/test_add.svh +0 -0
  84. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/testbench/alu_if.sv +0 -0
  85. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/testbench/testbench.sv +0 -0
  86. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/testbench/testbench.yml +0 -0
  87. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/sim/uvm/testcases/test_add/test_add.yml +0 -0
  88. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/syn/build.yml +0 -0
  89. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/syn/placement.xdc +0 -0
  90. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/alu/syn/timing.xdc +0 -0
  91. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/hello/build.sbt +0 -0
  92. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/hello/hello.yml +0 -0
  93. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/hello/src/main/scala/Hello.scala +0 -0
  94. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/hdl/hello/syn/build.yml +0 -0
  95. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/plugins/simple_parser/setup.py +0 -0
  96. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/plugins/simple_parser/src/simple_parser/__init__.py +0 -0
  97. {simplhdl-0.5.3 → simplhdl-0.5.5}/examples/plugins/simple_parser/src/simple_parser/simple_parser.py +0 -0
  98. {simplhdl-0.5.3 → simplhdl-0.5.5}/pyproject.toml +0 -0
  99. {simplhdl-0.5.3 → simplhdl-0.5.5}/setup.cfg +0 -0
  100. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/SimplHDL.egg-info/SOURCES.txt +0 -0
  101. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/SimplHDL.egg-info/dependency_links.txt +0 -0
  102. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/SimplHDL.egg-info/entry_points.txt +0 -0
  103. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/SimplHDL.egg-info/requires.txt +0 -0
  104. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/SimplHDL.egg-info/top_level.txt +0 -0
  105. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/__init__.py +0 -0
  106. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/encrypt/__init__.py +0 -0
  107. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/encrypt/encryptflow.py +0 -0
  108. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/implementationflow.py +0 -0
  109. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/lint/lintflow.py +0 -0
  110. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/modelsim/__init__.py +0 -0
  111. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/quartusdse/__init__.py +0 -0
  112. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/quartusdse/quartusdseflow.py +0 -0
  113. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/quartusexport/__init__.py +0 -0
  114. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/quartusflow.py +0 -0
  115. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/questasim/__init__.py +0 -0
  116. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/rivierapro/__init__.py +0 -0
  117. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/rivierapro/rivieraproflow.py +0 -0
  118. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/simulationflow.py +0 -0
  119. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/vcs/__init__.py +0 -0
  120. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/vcs/vcsflow.py +0 -0
  121. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/verible/__init__.py +0 -0
  122. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/vivadoflow.py +0 -0
  123. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/vsg/__init__.py +0 -0
  124. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/xsim/__init__.py +0 -0
  125. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/flows/xsim/xsimflow.py +0 -0
  126. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/generator.py +0 -0
  127. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/generators/__init__.py +0 -0
  128. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/generators/chisel.py +0 -0
  129. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/generators/systemrdl.py +0 -0
  130. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/info.py +0 -0
  131. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/parser.py +0 -0
  132. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/parsers/__init__.py +0 -0
  133. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/parsers/fusesocparser.py +0 -0
  134. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/parsers/simplhdlparser.py +0 -0
  135. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/plugins.py +0 -0
  136. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/pyedaa/attributes.py +0 -0
  137. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/pyedaa/fileset.py +0 -0
  138. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/pyedaa/filetypes.py +0 -0
  139. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/pyedaa/project.py +0 -0
  140. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/pyedaa/target.py +0 -0
  141. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/pyedaa/vhdllibrary.py +0 -0
  142. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/repo.py +0 -0
  143. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/__init__.py +0 -0
  144. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/__init__.py +0 -0
  145. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/flake8/__init__.py +0 -0
  146. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/flake8/setup.cfg.j2 +0 -0
  147. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/modelsim/Makefile.j2 +0 -0
  148. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/modelsim/__init__.py +0 -0
  149. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/modelsim/cocotb.mk.j2 +0 -0
  150. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/modelsim/dependencies.mk.j2 +0 -0
  151. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/modelsim/files.j2 +0 -0
  152. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/modelsim/fileset.j2 +0 -0
  153. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/modelsim/modelsim.tcl.j2 +0 -0
  154. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/modelsim/project.mk.j2 +0 -0
  155. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/modelsim/run.do.j2 +0 -0
  156. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/quartus/__init__.py +0 -0
  157. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/quartus/project.tcl.j2 +0 -0
  158. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/quartus/run.tcl.j2 +0 -0
  159. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/questasim/__init__.py +0 -0
  160. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/questasim/modelsim.tcl.j2 +0 -0
  161. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/questasim/project.qrun.j2 +0 -0
  162. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/questasim/visualizer.tcl.j2 +0 -0
  163. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/questasim/vsim-run.do.j2 +0 -0
  164. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/rivierapro/Makefile.j2 +0 -0
  165. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/rivierapro/__init__.py +0 -0
  166. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/rivierapro/cocotb.mk.j2 +0 -0
  167. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/rivierapro/dependencies.mk.j2 +0 -0
  168. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/rivierapro/files.j2 +0 -0
  169. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/rivierapro/fileset.j2 +0 -0
  170. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/rivierapro/project.mk.j2 +0 -0
  171. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vcs/Makefile.j2 +0 -0
  172. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vcs/__init__.py +0 -0
  173. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vcs/cocotb.mk.j2 +0 -0
  174. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vcs/dependencies.mk.j2 +0 -0
  175. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vcs/files.j2 +0 -0
  176. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vcs/fileset.j2 +0 -0
  177. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vcs/pli.tab.j2 +0 -0
  178. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vcs/project.mk.j2 +0 -0
  179. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vcs/synopsys_sim.setup.j2 +0 -0
  180. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vcs/vcs.parameters.j2 +0 -0
  181. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/verible/__init__.py +0 -0
  182. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/verible/rules.cfg.j2 +0 -0
  183. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vivado/__init__.py +0 -0
  184. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vivado/launch_run.sh.j2 +0 -0
  185. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vivado/project.tcl.j2 +0 -0
  186. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vivado/run.tcl.j2 +0 -0
  187. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vivado/steps.tcl.j2 +0 -0
  188. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vsg/__init__.py +0 -0
  189. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vsg/files.json.j2 +0 -0
  190. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/vsg/rules.yml.j2 +0 -0
  191. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/xsim/Makefile.j2 +0 -0
  192. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/xsim/__init__.py +0 -0
  193. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/xsim/cocotb.mk.j2 +0 -0
  194. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/xsim/dependencies.mk.j2 +0 -0
  195. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/xsim/files.j2 +0 -0
  196. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/xsim/fileset.j2 +0 -0
  197. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/resources/templates/xsim/project.mk.j2 +0 -0
  198. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/run.py +0 -0
  199. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/simplhdl.py +0 -0
  200. {simplhdl-0.5.3 → simplhdl-0.5.5}/src/simplhdl/tools.py +0 -0
  201. {simplhdl-0.5.3 → simplhdl-0.5.5}/tests/test_dummy.py +0 -0
  202. {simplhdl-0.5.3 → simplhdl-0.5.5}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SimplHDL
3
- Version: 0.5.3
3
+ Version: 0.5.5
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>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SimplHDL
3
- Version: 0.5.3
3
+ Version: 0.5.5
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>
@@ -0,0 +1 @@
1
+ __version__ = "0.5.5"
@@ -5,8 +5,9 @@ import logging
5
5
  import traceback
6
6
 
7
7
  from typing import Sequence
8
-
9
8
  from pathlib import Path
9
+ from rich.logging import RichHandler
10
+
10
11
  from . import __version__
11
12
  from .simplhdl import Simplhdl
12
13
  from .plugins import load_plugins
@@ -67,7 +68,18 @@ def main():
67
68
  args = parse_arguments()
68
69
  levels = [logging.INFO, logging.DEBUG, logging.NOTSET]
69
70
  level = levels[min(args.verbose, len(levels)-1)]
70
- logging.basicConfig(level=level)
71
+ if level < logging.INFO:
72
+ show_path = True
73
+ else:
74
+ show_path = False
75
+
76
+ FORMAT = "[simplhdl.%(module)s] - %(message)s"
77
+ console = RichHandler(level=level, show_time=False, rich_tracebacks=True, show_path=show_path)
78
+ logging.basicConfig(
79
+ level=5,
80
+ format=FORMAT,
81
+ handlers=[console]
82
+ )
71
83
  simpl = Simplhdl(args)
72
84
  simpl.run()
73
85
  except (NotImplementedError, FileNotFoundError, CalledShError,
@@ -41,7 +41,7 @@ class Cocotb:
41
41
  return None
42
42
  set_ = set()
43
43
  try:
44
- modules = self.project.DefaultDesign._topLevel.split()
44
+ modules = self.project.DefaultDesign.TopLevel.split()
45
45
  except AttributeError:
46
46
  raise FlowError("No top levels found")
47
47
 
@@ -58,14 +58,14 @@ class Cocotb:
58
58
 
59
59
  def hdltoplevels(self) -> str:
60
60
  tops = []
61
- for t in self.project.DefaultDesign._topLevel.split():
61
+ for t in self.project.DefaultDesign.TopLevel.split():
62
62
  if t != self.top:
63
63
  tops.append(t)
64
64
  return ' '.join(tops)
65
65
 
66
66
  def get_dut(self) -> str:
67
67
  try:
68
- for top in self.project.DefaultDesign._topLevel.split():
68
+ for top in self.project.DefaultDesign.TopLevel.split():
69
69
  if top != self.top:
70
70
  return top
71
71
  except AttributeError:
@@ -97,7 +97,7 @@ class Cocotb:
97
97
  with open(file.Path, 'r', errors='replace') as f:
98
98
  lines = f.readlines()
99
99
  for line in lines:
100
- if re.search(rf'^\s*module\s+{name}(\s+|\(|;|$)', line):
100
+ if re.search(rf'^\s*module\s+{name}(\s+|#\(|\(|;|$)', line):
101
101
  if file.Library.Name == lib:
102
102
  logger.info(f"Cocotb dut '{self.dut}' is Verilog")
103
103
  return VerilogSourceFile
@@ -1,3 +1,5 @@
1
+ import logging
2
+
1
3
  from argparse import Namespace
2
4
  from pathlib import Path
3
5
  from typing import Callable, Dict, Set
@@ -16,6 +18,11 @@ class FlowBase(metaclass=ABCMeta):
16
18
  self.builddir: Path = builddir
17
19
  self.category: FlowCategory = FlowCategory.DEFAULT
18
20
  self.tools: Set = set()
21
+ self.builddir.mkdir(parents=True, exist_ok=True)
22
+ file = logging.FileHandler(self.builddir.joinpath('simplhdl.log'), mode='w')
23
+ file.setLevel(logging.NOTSET)
24
+ file.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s:%(filename)s:%(lineno)d - %(message)s'))
25
+ logging.getLogger().addHandler(file)
19
26
 
20
27
  @classmethod
21
28
  @abstractmethod
@@ -49,7 +49,7 @@ class Flake8Flow(FlowBase):
49
49
  self.files = [f.Path for f in self.project.DefaultDesign.DefaultFileSet.Files(PythonSourceFile)]
50
50
 
51
51
  def generate(self):
52
- config = os.getenv('SIMPLHDL_FLAKE8_RULES')
52
+ config = os.getenv('SIMPLHDL_FLAKE8_CONFIG')
53
53
  if config:
54
54
  shutil.copy(config, self.builddir.joinpath('setup.cfg'))
55
55
  else:
@@ -6,6 +6,7 @@ from pathlib import Path
6
6
  from typing import Any, List, Dict, Optional
7
7
  from argparse import Namespace
8
8
  from jinja2 import Template
9
+ from simplhdl.pyedaa import ModelsimIniFile
9
10
  from simplhdl.pyedaa.project import Project
10
11
  from simplhdl.pyedaa.fileset import FileSet
11
12
  from simplhdl.utils import sh, escape
@@ -225,6 +226,22 @@ class ModelSimFlow(SimulationFlow):
225
226
  library = ''
226
227
  return library
227
228
 
229
+ def generate(self):
230
+ super().generate()
231
+ self.copy_modelsim_ini()
232
+
233
+ def copy_modelsim_ini(self):
234
+ files = list(self.project.DefaultDesign.Files(ModelsimIniFile))
235
+ if len(files) > 1:
236
+ logger.warning("Multiple modelsim.ini files found in project. Only the first file will be used.")
237
+ for i, file in enumerate(reversed(files)):
238
+ if i > 0:
239
+ logger.warning(f"ignore {file.Path}")
240
+ else:
241
+ logger.debug(f"Copy {file.Path} to {self.builddir}")
242
+ logger.info(f"Use {file.Path}")
243
+ shutil.copy(file.Path.absolute(), self.builddir.absolute())
244
+
228
245
  def execute(self, step: str) -> None:
229
246
  self.run_hooks('pre')
230
247
 
@@ -108,7 +108,7 @@ class QuartusExportFlow(ImplementationFlow):
108
108
  shutil.rmtree(self.builddir.joinpath('dni'))
109
109
  shutil.rmtree(self.builddir.joinpath('qdb'))
110
110
  os.remove(self.builddir.joinpath('project.tcl'))
111
- except FileNotFoundError as e:
111
+ except FileNotFoundError:
112
112
  pass
113
113
 
114
114
  def archive_project(self) -> None:
@@ -14,6 +14,7 @@ from typing import Any, List, Dict, Optional
14
14
  from argparse import Namespace
15
15
  from jinja2 import Template
16
16
  from simplhdl.pyedaa.project import Project
17
+ from simplhdl.pyedaa import ModelsimIniFile
17
18
  from simplhdl.utils import sh, escape
18
19
  from simplhdl.flow import FlowFactory, FlowTools
19
20
  from simplhdl.info import Info
@@ -348,6 +349,18 @@ class QuestaSimFlow(SimulationFlow):
348
349
  logger.warning("Visualizer is not setup correctly")
349
350
  return False
350
351
 
352
+ def copy_modelsim_ini(self):
353
+ files = list(self.project.DefaultDesign.Files(ModelsimIniFile))
354
+ if len(files) > 1:
355
+ logger.warning("Multiple modelsim.ini files found in project. Only the first file will be used.")
356
+ for i, file in enumerate(reversed(files)):
357
+ if i > 0:
358
+ logger.warning(f"ignore {file.Path}")
359
+ else:
360
+ logger.debug(f"Copy {file.Path} to {self.builddir}")
361
+ logger.info(f"Use {file.Path}")
362
+ shutil.copy(file.Path.absolute(), self.builddir.absolute())
363
+
351
364
  def generate(self):
352
365
  templatedir = resources_files(self.templates)
353
366
  env = Environment(
@@ -362,6 +375,7 @@ class QuestaSimFlow(SimulationFlow):
362
375
  for template in templates:
363
376
  generate_from_template(template, self.builddir, self.get_globals())
364
377
  self.copy_memory_files()
378
+ self.copy_modelsim_ini()
365
379
 
366
380
  def get_qrun_version(self) -> float:
367
381
  output = sh(['qrun', '-version'], self.builddir)
@@ -8,7 +8,7 @@ from argparse import Namespace
8
8
  from pathlib import Path
9
9
  from jinja2 import Environment, FileSystemLoader
10
10
 
11
- from simplhdl.flow import FlowFactory, FlowBase
11
+ from simplhdl.flow import FlowFactory, FlowBase, FlowError
12
12
  from simplhdl.resources.templates import verible as templates
13
13
  from simplhdl.utils import sh, CalledShError, generate_from_template
14
14
  from simplhdl.pyedaa import VerilogIncludeFile, VerilogSourceFile, SystemVerilogSourceFile
@@ -51,8 +51,11 @@ class VeribleFlow(FlowBase):
51
51
  def generate(self):
52
52
  if self.args.rules:
53
53
  self.rules = self.args.rules
54
- elif os.getenv('SIMPLHDL_VERIBLE_RULES'):
55
- self.rules = self.args.rules
54
+ elif os.getenv('SIMPLHDL_VERIBLE_CONFIG'):
55
+ rules = os.getenv('SIMPLHDL_VERIBLE_CONFIG')
56
+ if not Path(rules).exists():
57
+ raise FlowError(f"Rules file {rules} does not exist")
58
+ self.rules = rules
56
59
  else:
57
60
  templatedir = resources_files(self.templates)
58
61
  environment = Environment(
@@ -67,7 +70,7 @@ class VeribleFlow(FlowBase):
67
70
  command = [
68
71
  "verible-verilog-lint",
69
72
  "--check_syntax=false",
70
- "--ruleset=all",
73
+ "--ruleset=none",
71
74
  "--rules_config", self.rules
72
75
  ]
73
76
 
@@ -74,8 +74,11 @@ class VsgFlow(FlowBase):
74
74
  UsedIn=UsedIn)
75
75
  if self.args.rules:
76
76
  self.rules = self.args.rules
77
- elif os.getenv('SIMPLHDL_VSG_RULES'):
78
- self.rules = self.args.rules
77
+ elif os.getenv('SIMPLHDL_VSG_CONFIG'):
78
+ rules = os.getenv('SIMPLHDL_VSG_CONFIG')
79
+ if not Path(rules).exists():
80
+ raise FlowError(f"Rules file {rules} does not exist")
81
+ self.rules = rules
79
82
  else:
80
83
  template = environment.get_template('rules.yml.j2')
81
84
  generate_from_template(template, self.builddir)
@@ -10,7 +10,9 @@ from zipfile import ZipFile
10
10
  from ..generator import GeneratorFactory, GeneratorBase
11
11
  from ..utils import md5write, md5check
12
12
  from ..flow import FlowBase, FlowCategory
13
+ from ..pyedaa import SIMULATION
13
14
  from ..pyedaa.fileset import FileSet
15
+ from ..pyedaa.attributes import UsedIn
14
16
  from ..pyedaa.vhdllibrary import VHDLLibrary
15
17
  from ..pyedaa import (
16
18
  File, SystemVerilogSourceFile, TCLSourceFile, ConstraintFile, HDLSourceFile,
@@ -198,7 +200,10 @@ class VivadoIP(GeneratorBase):
198
200
  def run(self, flow: FlowBase):
199
201
  if flow.category == FlowCategory.SIMULATION:
200
202
  os.makedirs(self.builddir, exist_ok=True)
201
- for ipfile in self.project.DefaultDesign.DefaultFileSet.Files(fileType=VivadoIPSpecificationFile):
203
+ ipfiles = list(self.project.DefaultDesign.DefaultFileSet.Files(fileType=VivadoIPSpecificationFile))
204
+ ipfiles = [f for f in ipfiles if SIMULATION in f[UsedIn]]
205
+
206
+ for ipfile in ipfiles:
202
207
  newipfile = self.unpack_ip(ipfile)
203
208
  files = self.get_files(newipfile.Path)
204
209
  last_lib = ''
@@ -23,6 +23,7 @@ from simplhdl.pyedaa import (
23
23
  QuartusQSYSCompressedSpecificationFile,
24
24
  QuartusQIPSpecificationFile
25
25
  )
26
+ from simplhdl.pyedaa import SIMULATION, IMPLEMENTATION
26
27
  from simplhdl.pyedaa.fileset import FileSet
27
28
  from simplhdl.pyedaa.attributes import UsedIn
28
29
  from simplhdl.flow import FlowBase, FlowCategory, FlowTools
@@ -183,34 +184,42 @@ class QuartusIP(GeneratorBase):
183
184
  filename._path = dest.with_suffix('.ip').absolute()
184
185
  return filename
185
186
 
186
- def run(self, flow: FlowBase) -> None:
187
+ def run(self, flow: FlowBase) -> None: # noqa: C901
187
188
  seen = dict()
188
189
  self.flow = flow
189
190
  ip_dir = self.builddir.joinpath('ips')
190
191
  qsys_dir = self.builddir.joinpath('qsys')
191
- files = list(self.project.DefaultDesign.DefaultFileSet.Files(fileType=QuartusIPSpecificationFile))
192
- # files = filter_duplicated_files(files)
193
- if not flow.category == FlowCategory.DEFAULT:
194
- for file in files:
195
- # The second time we see a file it is already proccessed and we just
196
- # Update the file path
197
- fileid = str(file.Path.resolve())
198
- if fileid in seen:
199
- file._path = seen.get(fileid)._path
200
- continue
201
- if file.FileType == QuartusQIPSpecificationFile:
202
- continue
203
- elif file.FileType == QuartusIPCompressedSpecificationFile:
204
- file = unpack_ipfile(file, ip_dir)
205
- elif file.FileType == QuartusIPSpecificationFile:
206
- file = copy_ipfile(file, ip_dir)
207
- elif file.FileType == QuartusQSYSCompressedSpecificationFile:
208
- file = unpack_qsysfile(file, qsys_dir)
209
- elif file.FileType == QuartusQSYSSpecificationFile:
210
- file = copy_qsysfile(file, qsys_dir)
211
- parse_file(file, flow, self.project.DefaultDesign.DefaultFileSet.VHDLLibrary)
212
- # register the file as seen
213
- seen[fileid] = file
192
+ all_files = list(self.project.DefaultDesign.DefaultFileSet.Files(fileType=QuartusIPSpecificationFile))
193
+
194
+ if flow.category == FlowCategory.SIMULATION:
195
+ files = [f for f in all_files if SIMULATION in f[UsedIn]]
196
+ elif flow.category == FlowCategory.IMPLEMENTATION:
197
+ files = [f for f in all_files if IMPLEMENTATION in f[UsedIn]]
198
+ elif flow.category == FlowCategory.DEFAULT:
199
+ return
200
+ else:
201
+ files = all_files
202
+
203
+ for file in files:
204
+ # The second time we see a file it is already proccessed and we just
205
+ # Update the file path
206
+ fileid = str(file.Path.resolve())
207
+ if fileid in seen:
208
+ file._path = seen.get(fileid)._path
209
+ continue
210
+ if file.FileType == QuartusQIPSpecificationFile:
211
+ continue
212
+ elif file.FileType == QuartusIPCompressedSpecificationFile:
213
+ file = unpack_ipfile(file, ip_dir)
214
+ elif file.FileType == QuartusIPSpecificationFile:
215
+ file = copy_ipfile(file, ip_dir)
216
+ elif file.FileType == QuartusQSYSCompressedSpecificationFile:
217
+ file = unpack_qsysfile(file, qsys_dir)
218
+ elif file.FileType == QuartusQSYSSpecificationFile:
219
+ file = copy_qsysfile(file, qsys_dir)
220
+ parse_file(file, flow, self.project.DefaultDesign.DefaultFileSet.VHDLLibrary)
221
+ # register the file as seen
222
+ seen[fileid] = file
214
223
 
215
224
 
216
225
  def parse_qsys(filename: QuartusQSYSSpecificationFile) -> List[File]:
@@ -281,14 +290,14 @@ def copy_ipfile(file: QuartusIPSpecificationFile, dest: Path) -> QuartusIPSpecif
281
290
  destfile = dest.joinpath(file.Path.name)
282
291
  if srcdir.exists():
283
292
  if not md5file.exists() or not md5check(file.Path, srcdir, filename=md5file):
284
- logger.info(f"Copy {file.Path} to {destfile}")
285
- logger.info(f"Copy {srcdir} to {destdir}")
293
+ logger.debug(f"Copy {file.Path} to {destfile}")
294
+ logger.debug(f"Copy {srcdir} to {destdir}")
286
295
  copy(str(file.Path), str(destfile))
287
296
  copytree(str(srcdir), str(destdir), dirs_exist_ok=True)
288
297
  md5write(file.Path, srcdir, filename=md5file)
289
298
  else:
290
299
  if not md5file.exists() or not md5check(file.Path, filename=md5file):
291
- logger.info(f"Copy {file.Path} to {destfile}")
300
+ logger.debug(f"Copy {file.Path} to {destfile}")
292
301
  rmtree(destdir, ignore_errors=True)
293
302
  copy(str(file.Path), str(destfile))
294
303
  md5write(file.Path, filename=md5file)
@@ -102,7 +102,9 @@ class TCLSourceFile(pm.TCLSourceFile):
102
102
 
103
103
 
104
104
  class IPSpecificationFile(File, pm.XMLContent):
105
- pass
105
+ def _registerAttributes(self):
106
+ super()._registerAttributes()
107
+ FileMixIn._registerAttributes(self)
106
108
 
107
109
 
108
110
  class NetlistFile(pm.NetlistFile, FileMixIn):
@@ -204,3 +206,10 @@ class MemoryInitFile(File):
204
206
  def _registerAttributes(self):
205
207
  super()._registerAttributes()
206
208
  FileMixIn._registerAttributes(self)
209
+
210
+
211
+ class ModelsimIniFile(File):
212
+ def _registerAttributes(self):
213
+ super()._registerAttributes()
214
+ FileMixIn._registerAttributes(self)
215
+ self[UsedIn] = {SIMULATION}
@@ -39,15 +39,16 @@ class Design(pm.Design):
39
39
  @property
40
40
  def TopLevel(self) -> str:
41
41
  """Property setting or returning the fileset's toplevel."""
42
- top = set()
42
+ top = list()
43
43
  if self._topLevel is not None:
44
44
  for t in self._topLevel.split():
45
- top.add(t)
45
+ top.append(t)
46
46
  for fileset in self._fileSets.values():
47
47
  if fileset.TopLevel is not None:
48
48
  for t in fileset.TopLevel.split():
49
- top.add(t)
50
- return ' '.join(top)
49
+ top.append(t)
50
+ # remove duplicates without changing the order
51
+ return ' '.join(list(dict.fromkeys(top)))
51
52
 
52
53
  @TopLevel.setter
53
54
  def TopLevel(self, value: str) -> None:
@@ -17,7 +17,7 @@ class CalledShError(Exception):
17
17
  pass
18
18
 
19
19
 
20
- def sh(command: List[str], cwd: Optional[Path] = None, output=False, shell=False, env=None):
20
+ def sh(command: List[str], cwd: Optional[Path] = None, output=False, shell=False, env=None, indent=2):
21
21
  if os.name == 'nt':
22
22
  shell = True
23
23
 
@@ -26,7 +26,7 @@ def sh(command: List[str], cwd: Optional[Path] = None, output=False, shell=False
26
26
  if output:
27
27
  stdout: str = ''
28
28
  for line in p.stdout:
29
- sys.stdout.buffer.write(line)
29
+ sys.stdout.buffer.write(b' '*indent + line)
30
30
  sys.stdout.buffer.flush()
31
31
  stdout += line.decode()
32
32
  _, stderr = p.communicate()
@@ -1 +0,0 @@
1
- __version__ = "0.5.3"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes