SimplHDL 0.3.0__tar.gz → 0.5.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 (203) hide show
  1. {simplhdl-0.3.0 → simplhdl-0.5.0}/PKG-INFO +2 -1
  2. {simplhdl-0.3.0 → simplhdl-0.5.0}/pyproject.toml +1 -0
  3. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/SimplHDL.egg-info/PKG-INFO +2 -1
  4. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/SimplHDL.egg-info/SOURCES.txt +4 -0
  5. simplhdl-0.5.0/src/simplhdl/__init__.py +1 -0
  6. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/cocotb.py +6 -3
  7. simplhdl-0.5.0/src/simplhdl/flows/encrypt/encryptflow.py +129 -0
  8. simplhdl-0.5.0/src/simplhdl/flows/quartusexport/quartusexportflow.py +157 -0
  9. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/quartusflow.py +7 -6
  10. simplhdl-0.5.0/src/simplhdl/generators/spd.py +362 -0
  11. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/plugins.py +2 -0
  12. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/pyedaa/__init__.py +11 -0
  13. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/pyedaa/design.py +15 -1
  14. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/quartus/project.tcl.j2 +16 -2
  15. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/questasim/project.qrun.j2 +2 -0
  16. simplhdl-0.5.0/src/simplhdl/resources/templates/vsg/__init__.py +0 -0
  17. simplhdl-0.5.0/src/simplhdl/resources/templates/xsim/__init__.py +0 -0
  18. simplhdl-0.3.0/src/simplhdl/__init__.py +0 -1
  19. simplhdl-0.3.0/src/simplhdl/generators/spd.py +0 -211
  20. {simplhdl-0.3.0 → simplhdl-0.5.0}/.github/workflows/publish.yml +0 -0
  21. {simplhdl-0.3.0 → simplhdl-0.5.0}/.gitignore +0 -0
  22. {simplhdl-0.3.0 → simplhdl-0.5.0}/.readthedocs.yaml +0 -0
  23. {simplhdl-0.3.0 → simplhdl-0.5.0}/LICENSE +0 -0
  24. {simplhdl-0.3.0 → simplhdl-0.5.0}/README.md +0 -0
  25. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/_static/simplhdl_dark.png +0 -0
  26. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/_static/simplhdl_light.png +0 -0
  27. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/_static/simplhdl_light_1.png +0 -0
  28. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/conf.py +0 -0
  29. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/drawing.svg +0 -0
  30. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/flows/ghdl.rst +0 -0
  31. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/flows/icarus.rst +0 -0
  32. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/flows/quartus.rst +0 -0
  33. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/flows/questasim.rst +0 -0
  34. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/flows/vcs.rst +0 -0
  35. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/flows/vivado.rst +0 -0
  36. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/flows/xsim.rst +0 -0
  37. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/flows.rst +0 -0
  38. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/index.rst +0 -0
  39. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/intel-ips.md +0 -0
  40. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/introduction.rst +0 -0
  41. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/plugins.rst +0 -0
  42. {simplhdl-0.3.0 → simplhdl-0.5.0}/docs/requirements.txt +0 -0
  43. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/adder/adder.yml +0 -0
  44. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/adder/hdl/adder.sv +0 -0
  45. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/adder/sim/testbench.sv +0 -0
  46. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/adder/sim/testbench.yml +0 -0
  47. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/adder/syn/build.yml +0 -0
  48. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/adder/syn/placement.xdc +0 -0
  49. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/adder/syn/timing.xdc +0 -0
  50. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/adder/syn/top.sv +0 -0
  51. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/alu.yml +0 -0
  52. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/hdl/add.sv +0 -0
  53. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/hdl/alu.sv +0 -0
  54. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/hdl/mul.sv +0 -0
  55. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/hdl/sub.sv +0 -0
  56. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/alu_vip/__init__.py +0 -0
  57. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/alu_vip/agent.py +0 -0
  58. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/alu_vip/aluif.py +0 -0
  59. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/alu_vip/driver.py +0 -0
  60. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/alu_vip/monitor.py +0 -0
  61. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/alu_vip/sequenceitem.py +0 -0
  62. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/alu_vip/sequencer.py +0 -0
  63. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/clock_vip/__init__.py +0 -0
  64. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/clock_vip/agent.py +0 -0
  65. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/clock_vip/clockif.py +0 -0
  66. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/pyuvm.yml +0 -0
  67. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/test/__init__.py +0 -0
  68. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/test/env.py +0 -0
  69. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/test/seq_lib.py +0 -0
  70. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/test/test.py +0 -0
  71. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/pyuvm/testbench.py +0 -0
  72. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/alu_vip/agent.svh +0 -0
  73. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/alu_vip/alu_vip.sv +0 -0
  74. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/alu_vip/alu_vip.yml +0 -0
  75. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/alu_vip/driver.svh +0 -0
  76. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/alu_vip/env.svh +0 -0
  77. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/alu_vip/monitor.svh +0 -0
  78. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/alu_vip/sequence_item.svh +0 -0
  79. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/tb_env/seq_lib/add_seq.svh +0 -0
  80. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/tb_env/seq_lib/base_seq.svh +0 -0
  81. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/tb_env/tb_env.sv +0 -0
  82. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/tb_env/tb_env.yml +0 -0
  83. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/tb_env/test/base_test.svh +0 -0
  84. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/tb_env/test/test_add.svh +0 -0
  85. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/testbench/alu_if.sv +0 -0
  86. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/testbench/testbench.sv +0 -0
  87. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/testbench/testbench.yml +0 -0
  88. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/sim/uvm/testcases/test_add/test_add.yml +0 -0
  89. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/syn/build.yml +0 -0
  90. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/syn/placement.xdc +0 -0
  91. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/alu/syn/timing.xdc +0 -0
  92. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/hello/build.sbt +0 -0
  93. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/hello/hello.yml +0 -0
  94. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/hello/src/main/scala/Hello.scala +0 -0
  95. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/hdl/hello/syn/build.yml +0 -0
  96. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/plugins/simple_parser/setup.py +0 -0
  97. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/plugins/simple_parser/src/simple_parser/__init__.py +0 -0
  98. {simplhdl-0.3.0 → simplhdl-0.5.0}/examples/plugins/simple_parser/src/simple_parser/simple_parser.py +0 -0
  99. {simplhdl-0.3.0 → simplhdl-0.5.0}/setup.cfg +0 -0
  100. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/SimplHDL.egg-info/dependency_links.txt +0 -0
  101. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/SimplHDL.egg-info/entry_points.txt +0 -0
  102. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/SimplHDL.egg-info/requires.txt +0 -0
  103. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/SimplHDL.egg-info/top_level.txt +0 -0
  104. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/__main__.py +0 -0
  105. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flow.py +0 -0
  106. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/__init__.py +0 -0
  107. {simplhdl-0.3.0/src/simplhdl/flows/modelsim → simplhdl-0.5.0/src/simplhdl/flows/encrypt}/__init__.py +0 -0
  108. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/flake8/flake8flow.py +0 -0
  109. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/implementationflow.py +0 -0
  110. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/lint/lintflow.py +0 -0
  111. {simplhdl-0.3.0/src/simplhdl/flows/quartusdse → simplhdl-0.5.0/src/simplhdl/flows/modelsim}/__init__.py +0 -0
  112. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/modelsim/modelsimflow.py +0 -0
  113. {simplhdl-0.3.0/src/simplhdl/flows/questasim → simplhdl-0.5.0/src/simplhdl/flows/quartusdse}/__init__.py +0 -0
  114. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/quartusdse/quartusdseflow.py +0 -0
  115. {simplhdl-0.3.0/src/simplhdl/flows/rivierapro → simplhdl-0.5.0/src/simplhdl/flows/quartusexport}/__init__.py +0 -0
  116. {simplhdl-0.3.0/src/simplhdl/flows/vcs → simplhdl-0.5.0/src/simplhdl/flows/questasim}/__init__.py +0 -0
  117. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/questasim/questasimflow.py +0 -0
  118. {simplhdl-0.3.0/src/simplhdl/flows/verible → simplhdl-0.5.0/src/simplhdl/flows/rivierapro}/__init__.py +0 -0
  119. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/rivierapro/rivieraproflow.py +0 -0
  120. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/simulationflow.py +0 -0
  121. {simplhdl-0.3.0/src/simplhdl/flows/vsg → simplhdl-0.5.0/src/simplhdl/flows/vcs}/__init__.py +0 -0
  122. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/vcs/vcsflow.py +0 -0
  123. {simplhdl-0.3.0/src/simplhdl/flows/xsim → simplhdl-0.5.0/src/simplhdl/flows/verible}/__init__.py +0 -0
  124. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/verible/veribleflow.py +0 -0
  125. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/vivadoflow.py +0 -0
  126. {simplhdl-0.3.0/src/simplhdl/generators → simplhdl-0.5.0/src/simplhdl/flows/vsg}/__init__.py +0 -0
  127. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/vsg/vsgflow.py +0 -0
  128. {simplhdl-0.3.0/src/simplhdl/parsers → simplhdl-0.5.0/src/simplhdl/flows/xsim}/__init__.py +0 -0
  129. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/flows/xsim/xsimflow.py +0 -0
  130. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/generator.py +0 -0
  131. {simplhdl-0.3.0/src/simplhdl/resources → simplhdl-0.5.0/src/simplhdl/generators}/__init__.py +0 -0
  132. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/generators/chisel.py +0 -0
  133. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/generators/ipxact.py +0 -0
  134. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/generators/systemrdl.py +0 -0
  135. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/info.py +0 -0
  136. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/parser.py +0 -0
  137. {simplhdl-0.3.0/src/simplhdl/resources/templates → simplhdl-0.5.0/src/simplhdl/parsers}/__init__.py +0 -0
  138. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/parsers/fusesocparser.py +0 -0
  139. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/parsers/simplhdlparser.py +0 -0
  140. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/pyedaa/attributes.py +0 -0
  141. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/pyedaa/fileset.py +0 -0
  142. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/pyedaa/filetypes.py +0 -0
  143. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/pyedaa/project.py +0 -0
  144. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/pyedaa/target.py +0 -0
  145. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/pyedaa/vhdllibrary.py +0 -0
  146. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/repo.py +0 -0
  147. {simplhdl-0.3.0/src/simplhdl/resources/templates/flake8 → simplhdl-0.5.0/src/simplhdl/resources}/__init__.py +0 -0
  148. {simplhdl-0.3.0/src/simplhdl/resources/templates/modelsim → simplhdl-0.5.0/src/simplhdl/resources/templates}/__init__.py +0 -0
  149. {simplhdl-0.3.0/src/simplhdl/resources/templates/quartus → simplhdl-0.5.0/src/simplhdl/resources/templates/flake8}/__init__.py +0 -0
  150. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/flake8/setup.cfg.j2 +0 -0
  151. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/modelsim/Makefile.j2 +0 -0
  152. {simplhdl-0.3.0/src/simplhdl/resources/templates/questasim → simplhdl-0.5.0/src/simplhdl/resources/templates/modelsim}/__init__.py +0 -0
  153. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/modelsim/cocotb.mk.j2 +0 -0
  154. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/modelsim/dependencies.mk.j2 +0 -0
  155. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/modelsim/files.j2 +0 -0
  156. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/modelsim/fileset.j2 +0 -0
  157. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/modelsim/modelsim.tcl.j2 +0 -0
  158. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/modelsim/project.mk.j2 +0 -0
  159. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/modelsim/run.do.j2 +0 -0
  160. {simplhdl-0.3.0/src/simplhdl/resources/templates/rivierapro → simplhdl-0.5.0/src/simplhdl/resources/templates/quartus}/__init__.py +0 -0
  161. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/quartus/run.tcl.j2 +0 -0
  162. {simplhdl-0.3.0/src/simplhdl/resources/templates/vcs → simplhdl-0.5.0/src/simplhdl/resources/templates/questasim}/__init__.py +0 -0
  163. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/questasim/modelsim.tcl.j2 +0 -0
  164. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/questasim/visualizer.tcl.j2 +0 -0
  165. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/questasim/vsim-run.do.j2 +0 -0
  166. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/rivierapro/Makefile.j2 +0 -0
  167. {simplhdl-0.3.0/src/simplhdl/resources/templates/verible → simplhdl-0.5.0/src/simplhdl/resources/templates/rivierapro}/__init__.py +0 -0
  168. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/rivierapro/cocotb.mk.j2 +0 -0
  169. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/rivierapro/dependencies.mk.j2 +0 -0
  170. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/rivierapro/files.j2 +0 -0
  171. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/rivierapro/fileset.j2 +0 -0
  172. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/rivierapro/project.mk.j2 +0 -0
  173. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vcs/Makefile.j2 +0 -0
  174. {simplhdl-0.3.0/src/simplhdl/resources/templates/vivado → simplhdl-0.5.0/src/simplhdl/resources/templates/vcs}/__init__.py +0 -0
  175. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vcs/cocotb.mk.j2 +0 -0
  176. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vcs/dependencies.mk.j2 +0 -0
  177. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vcs/files.j2 +0 -0
  178. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vcs/fileset.j2 +0 -0
  179. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vcs/pli.tab.j2 +0 -0
  180. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vcs/project.mk.j2 +0 -0
  181. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vcs/synopsys_sim.setup.j2 +0 -0
  182. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vcs/vcs.parameters.j2 +0 -0
  183. {simplhdl-0.3.0/src/simplhdl/resources/templates/vsg → simplhdl-0.5.0/src/simplhdl/resources/templates/verible}/__init__.py +0 -0
  184. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/verible/rules.cfg.j2 +0 -0
  185. {simplhdl-0.3.0/src/simplhdl/resources/templates/xsim → simplhdl-0.5.0/src/simplhdl/resources/templates/vivado}/__init__.py +0 -0
  186. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vivado/launch_run.sh.j2 +0 -0
  187. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vivado/project.tcl.j2 +0 -0
  188. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vivado/run.tcl.j2 +0 -0
  189. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vivado/steps.tcl.j2 +0 -0
  190. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vsg/files.json.j2 +0 -0
  191. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/vsg/rules.yml.j2 +0 -0
  192. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/xsim/Makefile.j2 +0 -0
  193. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/xsim/cocotb.mk.j2 +0 -0
  194. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/xsim/dependencies.mk.j2 +0 -0
  195. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/xsim/files.j2 +0 -0
  196. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/xsim/fileset.j2 +0 -0
  197. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/resources/templates/xsim/project.mk.j2 +0 -0
  198. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/run.py +0 -0
  199. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/simplhdl.py +0 -0
  200. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/tools.py +0 -0
  201. {simplhdl-0.3.0 → simplhdl-0.5.0}/src/simplhdl/utils.py +0 -0
  202. {simplhdl-0.3.0 → simplhdl-0.5.0}/tests/test_dummy.py +0 -0
  203. {simplhdl-0.3.0 → simplhdl-0.5.0}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: SimplHDL
3
- Version: 0.3.0
3
+ Version: 0.5.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>
@@ -37,6 +37,7 @@ Classifier: Programming Language :: Python :: 3.9
37
37
  Classifier: Programming Language :: Python :: 3.10
38
38
  Classifier: Programming Language :: Python :: 3.11
39
39
  Classifier: Programming Language :: Python :: 3.12
40
+ Classifier: Programming Language :: Python :: 3.13
40
41
  Classifier: Intended Audience :: Developers
41
42
  Classifier: License :: OSI Approved :: MIT License
42
43
  Classifier: Operating System :: OS Independent
@@ -43,6 +43,7 @@ classifiers = [
43
43
  "Programming Language :: Python :: 3.10",
44
44
  "Programming Language :: Python :: 3.11",
45
45
  "Programming Language :: Python :: 3.12",
46
+ "Programming Language :: Python :: 3.13",
46
47
  "Intended Audience :: Developers",
47
48
  "License :: OSI Approved :: MIT License",
48
49
  "Operating System :: OS Independent",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: SimplHDL
3
- Version: 0.3.0
3
+ Version: 0.5.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>
@@ -37,6 +37,7 @@ Classifier: Programming Language :: Python :: 3.9
37
37
  Classifier: Programming Language :: Python :: 3.10
38
38
  Classifier: Programming Language :: Python :: 3.11
39
39
  Classifier: Programming Language :: Python :: 3.12
40
+ Classifier: Programming Language :: Python :: 3.13
40
41
  Classifier: Intended Audience :: Developers
41
42
  Classifier: License :: OSI Approved :: MIT License
42
43
  Classifier: Operating System :: OS Independent
@@ -103,12 +103,16 @@ src/simplhdl/flows/implementationflow.py
103
103
  src/simplhdl/flows/quartusflow.py
104
104
  src/simplhdl/flows/simulationflow.py
105
105
  src/simplhdl/flows/vivadoflow.py
106
+ src/simplhdl/flows/encrypt/__init__.py
107
+ src/simplhdl/flows/encrypt/encryptflow.py
106
108
  src/simplhdl/flows/flake8/flake8flow.py
107
109
  src/simplhdl/flows/lint/lintflow.py
108
110
  src/simplhdl/flows/modelsim/__init__.py
109
111
  src/simplhdl/flows/modelsim/modelsimflow.py
110
112
  src/simplhdl/flows/quartusdse/__init__.py
111
113
  src/simplhdl/flows/quartusdse/quartusdseflow.py
114
+ src/simplhdl/flows/quartusexport/__init__.py
115
+ src/simplhdl/flows/quartusexport/quartusexportflow.py
112
116
  src/simplhdl/flows/questasim/__init__.py
113
117
  src/simplhdl/flows/questasim/questasimflow.py
114
118
  src/simplhdl/flows/rivierapro/__init__.py
@@ -0,0 +1 @@
1
+ __version__ = "0.5.0"
@@ -64,9 +64,12 @@ class Cocotb:
64
64
  return ' '.join(tops)
65
65
 
66
66
  def get_dut(self) -> str:
67
- for top in self.project.DefaultDesign._topLevel.split():
68
- if top != self.top:
69
- return top
67
+ try:
68
+ for top in self.project.DefaultDesign._topLevel.split():
69
+ if top != self.top:
70
+ return top
71
+ except AttributeError:
72
+ raise FlowError("No top levels found")
70
73
 
71
74
  def hdltype(self): # noqa: C901
72
75
  logger.debug(f"Cocotb hdl dut '{self.dut}'")
@@ -0,0 +1,129 @@
1
+ import shutil
2
+ import logging
3
+
4
+ from typing import List
5
+ from argparse import Namespace
6
+ from pathlib import Path
7
+
8
+ from simplhdl.flow import FlowFactory, FlowTools, FlowError
9
+ from simplhdl.flows.implementationflow import ImplementationFlow
10
+ from simplhdl.utils import sh
11
+ from simplhdl.pyedaa.project import Project
12
+ from simplhdl.pyedaa import SystemVerilogSourceFile, VerilogSourceFile, VHDLSourceFile, VerilogIncludeFile
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ VENDORS = ["cadence", "mentor", "synopsys", "spyglass", "dsim", "veloce", "dcfcf"]
18
+
19
+
20
+ @FlowFactory.register('encrypt')
21
+ class EncryptFlow(ImplementationFlow):
22
+
23
+ @classmethod
24
+ def parse_args(self, subparsers) -> None:
25
+ parser = subparsers.add_parser('encrypt', help='Encrypt HDL source for diffent tool vendors')
26
+ parser.add_argument(
27
+ '--inplace',
28
+ action='store_true',
29
+ help="Place the encrypted file next to the source file"
30
+ )
31
+ parser.add_argument(
32
+ '--no-encrypt',
33
+ action='store_true',
34
+ help="Disable encryption"
35
+ )
36
+ parser.add_argument(
37
+ '--vendors',
38
+ action='store',
39
+ nargs='+',
40
+ choices=VENDORS,
41
+ help="Vendor list to support"
42
+ )
43
+ parser.add_argument(
44
+ '--outputdir',
45
+ type=Path,
46
+ dest='outdir',
47
+ action='store',
48
+ help='Output directory'
49
+ )
50
+
51
+ def __init__(self, name, args: Namespace, project: Project, builddir: Path):
52
+ super().__init__(name, args, project, builddir)
53
+ self.tools.add(FlowTools.QUARTUS)
54
+ if self.args.inplace and self.args.no_encrypt:
55
+ raise FlowError("Both --inplace and --no-encrypt options are enabled.")
56
+
57
+ def run(self) -> None:
58
+ self.configure()
59
+ self.execute()
60
+
61
+ def configure(self) -> None:
62
+ self.is_tool_setup()
63
+
64
+ def execute(self):
65
+ outputdir = self.args.outdir or self.builddir
66
+ outputdir.mkdir(parents=True, exist_ok=True)
67
+
68
+ for file in self.project.DefaultDesign.Files():
69
+ if file.FileType in [SystemVerilogSourceFile, VerilogIncludeFile]:
70
+ language = "systemverilog"
71
+ elif file.FileType == VerilogSourceFile:
72
+ language = "verilog"
73
+ elif file.FileType == VHDLSourceFile:
74
+ language = "vhdl"
75
+ else:
76
+ continue
77
+
78
+ if self.args.no_encrypt:
79
+ destFile = outputdir.joinpath(file.Path.name)
80
+ elif self.args.inplace:
81
+ destFile = file.Path.with_suffix(f"{file.Path.suffix}p")
82
+ else:
83
+ destFile = outputdir.joinpath(file.Path.name).with_suffix(f"{file.Path.suffix}p")
84
+
85
+ if self.args.vendors:
86
+ vendors = self.args.vendors
87
+ else:
88
+ vendors = VENDORS
89
+
90
+ if self.args.no_encrypt:
91
+ shutil.copyfile(file.Path.absolute(), destFile.absolute())
92
+ else:
93
+ encrypt(file.Path, destFile, language, vendors)
94
+
95
+ def is_tool_setup(self) -> None:
96
+ exit: bool = False
97
+ if shutil.which('encrypt_1735') is None:
98
+ logger.error('encrypt_1735: not found in PATH')
99
+ exit = True
100
+ if exit:
101
+ raise FileNotFoundError("Quartus is not setup correctly")
102
+
103
+
104
+ def encrypt(src: Path, dst: Path, language: str, vendors: List[str]) -> Path:
105
+ """
106
+ Encrypt a HDL source file using the 'encrypt_1735' tool.
107
+
108
+ Parameters:
109
+ src (Path): The source file path of the HDL file to be encrypted.
110
+ dst (Path): The destination file path or directory for the encrypted file.
111
+ If dst is a directory, the source file name is appended.
112
+ language (str): The language type of the HDL file (e.g., "systemverilog", "verilog", "vhdl").
113
+ vendors (List[str]): A list of vendor names used to set up the simulation options.
114
+
115
+ Returns:
116
+ Path: The absolute path to the encrypted file.
117
+
118
+ Example:
119
+ encrypted_path = encrypt(Path("/path/to/source.v"), Path("/path/to/output"), "verilog", ["cadence", "mentor"])
120
+ """
121
+ destFile = dst.joinpath(src.name) if dst.is_dir() else dst
122
+ command = [
123
+ "encrypt_1735", str(src.absolute()),
124
+ "--language", language,
125
+ "--quartus",
126
+ f"--simulation={','.join(vendors)}",
127
+ "-of", f"{destFile.absolute()}"
128
+ ]
129
+ sh(command, output=True)
@@ -0,0 +1,157 @@
1
+ import shutil
2
+ import logging
3
+ import zipfile
4
+
5
+ from argparse import Namespace
6
+ from pathlib import Path
7
+
8
+ from simplhdl.flow import FlowFactory, FlowTools
9
+ from simplhdl.flows.implementationflow import ImplementationFlow
10
+ from simplhdl.flows.quartusflow import QuartusFlow
11
+ from simplhdl.resources.templates import quartus as templates
12
+ from simplhdl.flows.encrypt.encryptflow import encrypt
13
+ from simplhdl.pyedaa.project import Project
14
+ from simplhdl.pyedaa.attributes import UsedIn
15
+ from simplhdl.pyedaa import (
16
+ File,
17
+ HDLSearchPath,
18
+ HDLIncludeFile,
19
+ HDLSourceFile,
20
+ VerilogIncludeFile,
21
+ VerilogSourceFile,
22
+ SystemVerilogSourceFile,
23
+ VHDLSourceFile,
24
+ ConstraintFile,
25
+ QuartusQIPSpecificationFile,
26
+ QuartusIPSpecificationFile,
27
+ SettingFile
28
+ )
29
+
30
+ logger = logging.getLogger(__name__)
31
+
32
+
33
+ @FlowFactory.register('quartus-export')
34
+ class QuartusExportFlow(ImplementationFlow):
35
+
36
+ @classmethod
37
+ def parse_args(self, subparsers) -> None:
38
+ parser = subparsers.add_parser('quartus-export', help='Export Quartus project')
39
+ parser.add_argument(
40
+ '--encrypt',
41
+ action='store_true',
42
+ help="Encrypt HDL source files"
43
+ )
44
+ parser.add_argument(
45
+ '-o',
46
+ '--output',
47
+ action='store',
48
+ metavar='FILE',
49
+ dest='archivefile',
50
+ type=Path,
51
+ help="Output zip file"
52
+ )
53
+
54
+ def __init__(self, name, args: Namespace, project: Project, builddir: Path):
55
+ super().__init__(name, args, project, builddir)
56
+ self.vendors = ['mentor', 'synopsys']
57
+ self.templates = templates
58
+ self.tools.add(FlowTools.QUARTUS)
59
+
60
+ def copy_files(self):
61
+ seen = dict()
62
+ files = [f for f in self.project.DefaultDesign.Files() if 'implementation' in f[UsedIn]]
63
+ for file in files:
64
+ fileid = str(file.Path.resolve())
65
+ if fileid in seen:
66
+ file._path = seen.get(fileid)._path
67
+ continue
68
+ elif isinstance(file, SettingFile):
69
+ continue
70
+ elif isinstance(file, (ConstraintFile, QuartusQIPSpecificationFile)):
71
+ dest = self.builddir.joinpath('constraints', file.Path.name)
72
+ dest.parent.mkdir(parents=True, exist_ok=True)
73
+ shutil.copyfile(file.Path, dest)
74
+ elif isinstance(file, (HDLSearchPath, QuartusIPSpecificationFile)):
75
+ dest = file.Path
76
+ elif isinstance(file, (HDLSourceFile, HDLIncludeFile)):
77
+ if isinstance(file, HDLSourceFile):
78
+ dest = self.builddir.joinpath('rtl', file.Path.name)
79
+ else:
80
+ dest = self.builddir.joinpath('rtl', 'include', file.Path.name)
81
+ dest.parent.mkdir(parents=True, exist_ok=True)
82
+ if self.args.encrypt:
83
+ encrypt(file.Path, dest, language=get_language(file), vendors=self.vendors)
84
+ else:
85
+ shutil.copyfile(file.Path, dest)
86
+ else:
87
+ dest = self.builddir.joinpath('misc', file.Path.name)
88
+ dest.parent.mkdir(parents=True, exist_ok=True)
89
+ shutil.copyfile(file.Path, dest)
90
+ file._path = dest.absolute().relative_to(self.builddir.absolute())
91
+ # Convert to relative path
92
+ file._path = dest.absolute().relative_to(self.builddir.absolute())
93
+ seen[fileid] = file
94
+
95
+ def create_project(self) -> None:
96
+ args = Namespace(step='project', archive=False, gui=False)
97
+ quartus = QuartusFlow('quartus', args, self.project, self.builddir)
98
+ quartus.run()
99
+
100
+ def archive_project(self) -> None:
101
+ if self.args.archivefile:
102
+ archive(self.builddir, self.args.archivefile)
103
+ else:
104
+ output = self.builddir.parrent.joinpath(self.project.Name).with_suffix('.zip')
105
+ archive(self.builddir, output)
106
+ shutil.move(output, self.builddir)
107
+
108
+ def run(self) -> None:
109
+ self.copy_files()
110
+ self.create_project()
111
+ self.archive_project()
112
+
113
+ def is_tool_setup(self) -> None:
114
+ exit: bool = False
115
+ if shutil.which('quartus_sh') is None:
116
+ logger.error('quartus_sh: not found in PATH')
117
+ exit = True
118
+ if shutil.which('quartus') is None:
119
+ logger.error('quartus: not found in PATH')
120
+ exit = True
121
+ if exit:
122
+ raise FileNotFoundError("Quartus is not setup correctly")
123
+
124
+
125
+ def get_language(file: File) -> str:
126
+ fileMap = {
127
+ SystemVerilogSourceFile: 'systemverilog',
128
+ VerilogSourceFile: 'verilog',
129
+ VerilogIncludeFile: 'systemverilog',
130
+ VHDLSourceFile: 'vhdl'
131
+ }
132
+ return fileMap[file.FileType]
133
+
134
+
135
+ def archive(directory: Path, destination: Path) -> Path:
136
+ """
137
+ Recursively zip all contents of the given folder into a zip file.
138
+ The zip archive will contain a top-level folder with the same name
139
+ as the zip file (excluding the extension).
140
+
141
+ Parameters:
142
+ directory (Path): The folder whose contents will be zipped.
143
+ destination (Path): The path to the resulting zip file.
144
+ Its stem will be used as the top-level folder name.
145
+
146
+ Returns:
147
+ Path: The path to the created zip archive.
148
+ """
149
+ top_folder = destination.stem # top folder inside the archive
150
+ with zipfile.ZipFile(destination, 'w', zipfile.ZIP_DEFLATED) as zipf:
151
+ # Walk through all files in the directory
152
+ for file in directory.rglob('*'):
153
+ if file.is_file():
154
+ # Place each file under the top_folder
155
+ arcname = Path(top_folder) / file.relative_to(directory)
156
+ zipf.write(file, arcname=arcname)
157
+ return destination
@@ -18,7 +18,7 @@ from ..pyedaa import (QuartusIPSpecificationFile, VerilogIncludeFile, VerilogSou
18
18
  SystemVerilogSourceFile, VHDLSourceFile, ConstraintFile,
19
19
  EDIFNetlistFile, NetlistFile, SettingFile, QuartusSignalTapFile,
20
20
  QuartusIniFile, QuartusQIPSpecificationFile, QuartusQSYSSpecificationFile,
21
- HDLSearchPath, VerilogIncludeSearchPath)
21
+ HDLSearchPath, VerilogIncludeSearchPath, MemoryInitFile)
22
22
  from ..pyedaa.project import Project
23
23
  from ..pyedaa.attributes import UsedIn
24
24
 
@@ -62,10 +62,11 @@ class QuartusFlow(ImplementationFlow):
62
62
  def run(self) -> None:
63
63
  if self.args.archive:
64
64
  self.archive()
65
- self.validate()
66
- self.configure()
67
- self.generate()
68
- self.execute(self.args.step)
65
+ else:
66
+ self.validate()
67
+ self.configure()
68
+ self.generate()
69
+ self.execute(self.args.step)
69
70
 
70
71
  def archive(self) -> None:
71
72
  name = self.project.Name
@@ -79,7 +80,6 @@ class QuartusFlow(ImplementationFlow):
79
80
  raise Exception("Unknown value for argument --archive: {self.args.archive}")
80
81
  command = f"quartus_sh --archive -use_file_set {fileset} -revision {name} -no_discover -output {name}.qar {name}" # noqa
81
82
  sh(command.split(), output=True, cwd=self.builddir)
82
- raise SystemExit
83
83
 
84
84
  def validate(self):
85
85
  if self.project.DefaultDesign.DefaultFileSet.TopLevel is None:
@@ -113,6 +113,7 @@ class QuartusFlow(ImplementationFlow):
113
113
  QuartusQIPSpecificationFile=QuartusQIPSpecificationFile,
114
114
  QuartusQSYSSpecificationFile=QuartusQSYSSpecificationFile,
115
115
  QuartusIniFile=QuartusIniFile,
116
+ MemoryInitFile=MemoryInitFile,
116
117
  project=self.project,
117
118
  UsedIn=UsedIn)
118
119
  template = environment.get_template('run.tcl.j2')