SimplHDL 0.6.0__tar.gz → 0.7.1__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.6.0 → simplhdl-0.7.1}/PKG-INFO +4 -1
  2. {simplhdl-0.6.0 → simplhdl-0.7.1}/pyproject.toml +3 -0
  3. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/SimplHDL.egg-info/PKG-INFO +4 -1
  4. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/SimplHDL.egg-info/requires.txt +2 -0
  5. simplhdl-0.7.1/src/simplhdl/__init__.py +1 -0
  6. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/cocotb.py +20 -3
  7. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/quartusflow.py +3 -2
  8. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/questasim/questasimflow.py +1 -0
  9. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/simulationflow.py +8 -3
  10. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/vivadoflow.py +3 -2
  11. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/generators/systemrdl.py +101 -14
  12. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/__init__.py +2 -1
  13. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/attributes.py +5 -0
  14. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/vhdllibrary.py +12 -3
  15. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/quartus/project.tcl.j2 +4 -0
  16. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/questasim/project.qrun.j2 +3 -3
  17. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/cocotb.mk.j2 +3 -1
  18. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vivado/project.tcl.j2 +20 -4
  19. simplhdl-0.6.0/src/simplhdl/__init__.py +0 -1
  20. {simplhdl-0.6.0 → simplhdl-0.7.1}/.github/workflows/publish.yml +0 -0
  21. {simplhdl-0.6.0 → simplhdl-0.7.1}/.gitignore +0 -0
  22. {simplhdl-0.6.0 → simplhdl-0.7.1}/.readthedocs.yaml +0 -0
  23. {simplhdl-0.6.0 → simplhdl-0.7.1}/LICENSE +0 -0
  24. {simplhdl-0.6.0 → simplhdl-0.7.1}/README.md +0 -0
  25. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/_static/simplhdl_dark.png +0 -0
  26. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/_static/simplhdl_light.png +0 -0
  27. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/_static/simplhdl_light_1.png +0 -0
  28. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/conf.py +0 -0
  29. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/drawing.svg +0 -0
  30. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/ghdl.rst +0 -0
  31. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/icarus.rst +0 -0
  32. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/quartus.rst +0 -0
  33. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/questasim.rst +0 -0
  34. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/vcs.rst +0 -0
  35. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/vivado.rst +0 -0
  36. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/xsim.rst +0 -0
  37. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows.rst +0 -0
  38. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/index.rst +0 -0
  39. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/intel-ips.md +0 -0
  40. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/introduction.rst +0 -0
  41. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/plugins.rst +0 -0
  42. {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/requirements.txt +0 -0
  43. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/adder.yml +0 -0
  44. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/hdl/adder.sv +0 -0
  45. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/sim/testbench.sv +0 -0
  46. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/sim/testbench.yml +0 -0
  47. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/syn/build.yml +0 -0
  48. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/syn/placement.xdc +0 -0
  49. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/syn/timing.xdc +0 -0
  50. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/syn/top.sv +0 -0
  51. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/alu.yml +0 -0
  52. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/hdl/add.sv +0 -0
  53. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/hdl/alu.sv +0 -0
  54. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/hdl/mul.sv +0 -0
  55. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/hdl/sub.sv +0 -0
  56. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/__init__.py +0 -0
  57. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/agent.py +0 -0
  58. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/aluif.py +0 -0
  59. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/driver.py +0 -0
  60. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/monitor.py +0 -0
  61. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/sequenceitem.py +0 -0
  62. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/sequencer.py +0 -0
  63. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/clock_vip/__init__.py +0 -0
  64. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/clock_vip/agent.py +0 -0
  65. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/clock_vip/clockif.py +0 -0
  66. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/pyuvm.yml +0 -0
  67. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/test/__init__.py +0 -0
  68. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/test/env.py +0 -0
  69. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/test/seq_lib.py +0 -0
  70. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/test/test.py +0 -0
  71. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/testbench.py +0 -0
  72. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/agent.svh +0 -0
  73. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/alu_vip.sv +0 -0
  74. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/alu_vip.yml +0 -0
  75. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/driver.svh +0 -0
  76. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/env.svh +0 -0
  77. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/monitor.svh +0 -0
  78. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/sequence_item.svh +0 -0
  79. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/tb_env/seq_lib/add_seq.svh +0 -0
  80. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/tb_env/seq_lib/base_seq.svh +0 -0
  81. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/tb_env/tb_env.sv +0 -0
  82. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/tb_env/tb_env.yml +0 -0
  83. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/tb_env/test/base_test.svh +0 -0
  84. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/tb_env/test/test_add.svh +0 -0
  85. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/testbench/alu_if.sv +0 -0
  86. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/testbench/testbench.sv +0 -0
  87. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/testbench/testbench.yml +0 -0
  88. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/testcases/test_add/test_add.yml +0 -0
  89. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/syn/build.yml +0 -0
  90. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/syn/placement.xdc +0 -0
  91. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/syn/timing.xdc +0 -0
  92. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/hello/build.sbt +0 -0
  93. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/hello/hello.yml +0 -0
  94. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/hello/src/main/scala/Hello.scala +0 -0
  95. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/hello/syn/build.yml +0 -0
  96. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/plugins/simple_parser/setup.py +0 -0
  97. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/plugins/simple_parser/src/simple_parser/__init__.py +0 -0
  98. {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/plugins/simple_parser/src/simple_parser/simple_parser.py +0 -0
  99. {simplhdl-0.6.0 → simplhdl-0.7.1}/setup.cfg +0 -0
  100. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/SimplHDL.egg-info/SOURCES.txt +0 -0
  101. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/SimplHDL.egg-info/dependency_links.txt +0 -0
  102. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/SimplHDL.egg-info/entry_points.txt +0 -0
  103. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/SimplHDL.egg-info/top_level.txt +0 -0
  104. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/__main__.py +0 -0
  105. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flow.py +0 -0
  106. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/__init__.py +0 -0
  107. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/encrypt/__init__.py +0 -0
  108. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/encrypt/encryptflow.py +0 -0
  109. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/flake8/flake8flow.py +0 -0
  110. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/implementationflow.py +0 -0
  111. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/lint/lintflow.py +0 -0
  112. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/modelsim/__init__.py +0 -0
  113. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/modelsim/modelsimflow.py +0 -0
  114. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/quartusdse/__init__.py +0 -0
  115. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/quartusdse/quartusdseflow.py +0 -0
  116. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/quartusexport/__init__.py +0 -0
  117. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/quartusexport/quartusexportflow.py +0 -0
  118. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/questasim/__init__.py +0 -0
  119. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/rivierapro/__init__.py +0 -0
  120. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/rivierapro/rivieraproflow.py +0 -0
  121. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/vcs/__init__.py +0 -0
  122. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/vcs/vcsflow.py +0 -0
  123. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/verible/__init__.py +0 -0
  124. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/verible/veribleflow.py +0 -0
  125. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/vsg/__init__.py +0 -0
  126. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/vsg/vsgflow.py +0 -0
  127. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/xsim/__init__.py +0 -0
  128. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/xsim/xsimflow.py +0 -0
  129. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/generator.py +0 -0
  130. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/generators/__init__.py +0 -0
  131. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/generators/chisel.py +0 -0
  132. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/generators/ipxact.py +0 -0
  133. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/generators/spd.py +0 -0
  134. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/info.py +0 -0
  135. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/parser.py +0 -0
  136. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/parsers/__init__.py +0 -0
  137. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/parsers/fusesocparser.py +0 -0
  138. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/parsers/simplhdlparser.py +0 -0
  139. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/plugins.py +0 -0
  140. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/design.py +0 -0
  141. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/fileset.py +0 -0
  142. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/filetypes.py +0 -0
  143. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/project.py +0 -0
  144. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/target.py +0 -0
  145. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/repo.py +0 -0
  146. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/__init__.py +0 -0
  147. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/__init__.py +0 -0
  148. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/flake8/__init__.py +0 -0
  149. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/flake8/setup.cfg.j2 +0 -0
  150. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/Makefile.j2 +0 -0
  151. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/__init__.py +0 -0
  152. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/cocotb.mk.j2 +0 -0
  153. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/dependencies.mk.j2 +0 -0
  154. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/files.j2 +0 -0
  155. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/fileset.j2 +0 -0
  156. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/modelsim.tcl.j2 +0 -0
  157. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/project.mk.j2 +0 -0
  158. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/run.do.j2 +0 -0
  159. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/quartus/__init__.py +0 -0
  160. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/quartus/run.tcl.j2 +0 -0
  161. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/questasim/__init__.py +0 -0
  162. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/questasim/modelsim.tcl.j2 +0 -0
  163. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/questasim/visualizer.tcl.j2 +0 -0
  164. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/questasim/vsim-run.do.j2 +0 -0
  165. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/Makefile.j2 +0 -0
  166. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/__init__.py +0 -0
  167. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/cocotb.mk.j2 +0 -0
  168. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/dependencies.mk.j2 +0 -0
  169. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/files.j2 +0 -0
  170. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/fileset.j2 +0 -0
  171. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/project.mk.j2 +0 -0
  172. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/Makefile.j2 +0 -0
  173. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/__init__.py +0 -0
  174. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/dependencies.mk.j2 +0 -0
  175. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/files.j2 +0 -0
  176. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/fileset.j2 +0 -0
  177. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/pli.tab.j2 +0 -0
  178. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/project.mk.j2 +0 -0
  179. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/simv-run.do.j2 +0 -0
  180. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/synopsys_sim.setup.j2 +0 -0
  181. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/vcs.parameters.j2 +0 -0
  182. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/verible/__init__.py +0 -0
  183. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/verible/rules.cfg.j2 +0 -0
  184. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vivado/__init__.py +0 -0
  185. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vivado/launch_run.sh.j2 +0 -0
  186. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vivado/run.tcl.j2 +0 -0
  187. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vivado/steps.tcl.j2 +0 -0
  188. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vsg/__init__.py +0 -0
  189. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vsg/files.json.j2 +0 -0
  190. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vsg/rules.yml.j2 +0 -0
  191. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/Makefile.j2 +0 -0
  192. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/__init__.py +0 -0
  193. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/cocotb.mk.j2 +0 -0
  194. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/dependencies.mk.j2 +0 -0
  195. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/files.j2 +0 -0
  196. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/fileset.j2 +0 -0
  197. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/project.mk.j2 +0 -0
  198. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/run.py +0 -0
  199. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/simplhdl.py +0 -0
  200. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/tools.py +0 -0
  201. {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/utils.py +0 -0
  202. {simplhdl-0.6.0 → simplhdl-0.7.1}/tests/test_dummy.py +0 -0
  203. {simplhdl-0.6.0 → simplhdl-0.7.1}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SimplHDL
3
- Version: 0.6.0
3
+ Version: 0.7.1
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>
@@ -38,6 +38,7 @@ Classifier: Programming Language :: Python :: 3.10
38
38
  Classifier: Programming Language :: Python :: 3.11
39
39
  Classifier: Programming Language :: Python :: 3.12
40
40
  Classifier: Programming Language :: Python :: 3.13
41
+ Classifier: Programming Language :: Python :: 3.14
41
42
  Classifier: Intended Audience :: Developers
42
43
  Classifier: License :: OSI Approved :: MIT License
43
44
  Classifier: Operating System :: OS Independent
@@ -58,6 +59,8 @@ Requires-Dist: flake8
58
59
  Requires-Dist: black
59
60
  Requires-Dist: systemrdl-compiler
60
61
  Requires-Dist: peakrdl-html
62
+ Requires-Dist: peakrdl-regblock>=1.2.0
63
+ Requires-Dist: peakrdl-pyuvm
61
64
  Dynamic: license-file
62
65
 
63
66
  ## Introduction
@@ -26,6 +26,8 @@ dependencies = [
26
26
  "black",
27
27
  "systemrdl-compiler",
28
28
  "peakrdl-html",
29
+ "peakrdl-regblock>=1.2.0",
30
+ "peakrdl-pyuvm",
29
31
  ]
30
32
  requires-python = ">=3.8"
31
33
  authors = [
@@ -46,6 +48,7 @@ classifiers = [
46
48
  "Programming Language :: Python :: 3.11",
47
49
  "Programming Language :: Python :: 3.12",
48
50
  "Programming Language :: Python :: 3.13",
51
+ "Programming Language :: Python :: 3.14",
49
52
  "Intended Audience :: Developers",
50
53
  "License :: OSI Approved :: MIT License",
51
54
  "Operating System :: OS Independent",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SimplHDL
3
- Version: 0.6.0
3
+ Version: 0.7.1
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>
@@ -38,6 +38,7 @@ Classifier: Programming Language :: Python :: 3.10
38
38
  Classifier: Programming Language :: Python :: 3.11
39
39
  Classifier: Programming Language :: Python :: 3.12
40
40
  Classifier: Programming Language :: Python :: 3.13
41
+ Classifier: Programming Language :: Python :: 3.14
41
42
  Classifier: Intended Audience :: Developers
42
43
  Classifier: License :: OSI Approved :: MIT License
43
44
  Classifier: Operating System :: OS Independent
@@ -58,6 +59,8 @@ Requires-Dist: flake8
58
59
  Requires-Dist: black
59
60
  Requires-Dist: systemrdl-compiler
60
61
  Requires-Dist: peakrdl-html
62
+ Requires-Dist: peakrdl-regblock>=1.2.0
63
+ Requires-Dist: peakrdl-pyuvm
61
64
  Dynamic: license-file
62
65
 
63
66
  ## Introduction
@@ -11,6 +11,8 @@ flake8
11
11
  black
12
12
  systemrdl-compiler
13
13
  peakrdl-html
14
+ peakrdl-regblock>=1.2.0
15
+ peakrdl-pyuvm
14
16
 
15
17
  [:python_version < "3.9"]
16
18
  importlib-resources
@@ -0,0 +1 @@
1
+ __version__ = "0.7.1"
@@ -2,6 +2,8 @@ import logging
2
2
  import re
3
3
  import os
4
4
 
5
+ from packaging.version import Version
6
+ from pkg_resources import get_distribution
5
7
  from pathlib import Path
6
8
  from typing import Optional, Dict
7
9
 
@@ -15,8 +17,9 @@ logger = logging.getLogger(__name__)
15
17
 
16
18
  class Cocotb:
17
19
 
18
- def __init__(self, project: Project) -> None:
20
+ def __init__(self, project: Project, seed: int) -> None:
19
21
  self.project = project
22
+ self.seed = seed
20
23
  self.top = self.module()
21
24
  self.dut = self.get_dut()
22
25
  self.toplevels = self.hdltoplevels()
@@ -36,6 +39,13 @@ class Cocotb:
36
39
  raise FileNotFoundError(f"{path}: not found")
37
40
  return path
38
41
 
42
+ def pythonbin(self) -> str:
43
+ output = sh(['cocotb-config', '--python-bin'])
44
+ path = Path(output)
45
+ if not path.exists():
46
+ raise FileNotFoundError(f"{path}: not found")
47
+ return path
48
+
39
49
  def module(self) -> Optional[str]:
40
50
  if not self.enabled:
41
51
  return None
@@ -140,9 +150,16 @@ class Cocotb:
140
150
  return f'-pli {lib_name_path}'
141
151
 
142
152
  def env(self) -> Dict[str, str]:
153
+ cocotb_version = Version(get_distribution('cocotb').version)
143
154
  e = os.environ.copy()
144
- e['MODULE'] = self.top
145
- e['TOPLEVEL'] = self.dut
155
+ if cocotb_version >= Version('2.0.0'):
156
+ e['COCOTB_TEST_MODULES'] = self.top
157
+ e['COCOTB_TOPLEVEL'] = self.dut
158
+ e['PYGPI_PYTHON_BIN'] = self.pythonbin()
159
+ e['COCOTB_RANDOM_SEED'] = str(self.seed)
160
+ else:
161
+ e['MODULE'] = self.top
162
+ e['TOPLEVEL'] = self.dut
146
163
  e['PYTHONPYCACHEPREFIX'] = './pycache'
147
164
  e['LIBPYTHON_LOC'] = self.libpython()
148
165
  if self.duttype == VHDLSourceFile:
@@ -34,7 +34,7 @@ from ..pyedaa import (
34
34
  QuartusSourceTCLFile
35
35
  )
36
36
  from ..pyedaa.project import Project
37
- from ..pyedaa.attributes import UsedIn
37
+ from ..pyedaa.attributes import UsedIn, Scope
38
38
 
39
39
  logger = logging.getLogger(__name__)
40
40
 
@@ -130,7 +130,8 @@ class QuartusFlow(ImplementationFlow):
130
130
  QuartusIniFile=QuartusIniFile,
131
131
  MemoryInitFile=MemoryInitFile,
132
132
  project=self.project,
133
- UsedIn=UsedIn)
133
+ UsedIn=UsedIn,
134
+ Scope=Scope)
134
135
  template = environment.get_template('run.tcl.j2')
135
136
  generate_from_template(template, self.builddir,
136
137
  project=self.project)
@@ -362,6 +362,7 @@ class QuestaSimFlow(SimulationFlow):
362
362
  shutil.copy(file.Path.absolute(), self.builddir.absolute())
363
363
 
364
364
  def generate(self):
365
+ self.check_external_libraries()
365
366
  templatedir = resources_files(self.templates)
366
367
  env = Environment(
367
368
  loader=FileSystemLoader(templatedir),
@@ -35,7 +35,7 @@ class SimulationFlow(FlowBase):
35
35
  self.hashfile = self.builddir.joinpath('filesets.hash')
36
36
 
37
37
  def run(self) -> None:
38
- self.cocotb = Cocotb(self.project)
38
+ self.cocotb = Cocotb(self.project, self.args.seed)
39
39
  self.validate()
40
40
  self.configure()
41
41
  self.generate()
@@ -52,8 +52,6 @@ class SimulationFlow(FlowBase):
52
52
  os.makedirs(self.builddir, exist_ok=True)
53
53
  self.is_tool_setup()
54
54
  os.environ['RANDOM_SEED'] = str(self.args.seed)
55
- if self.cocotb.enabled:
56
- os.environ['MODULE'] = self.cocotb.module()
57
55
 
58
56
  def get_globals(self) -> Dict[str, Any]:
59
57
  incdirs = self.project.DefaultDesign.DefaultFileSet.IncludeDirs(usedin='simulation', isrecursive=True)
@@ -76,7 +74,14 @@ class SimulationFlow(FlowBase):
76
74
  globals['isinstance'] = isinstance
77
75
  return globals
78
76
 
77
+ def check_external_libraries(self):
78
+ for library in self.project.DefaultDesign.ExternalVHDLLibraries.values():
79
+ print(f"{library.Name}: {library.Path}")
80
+ if not library.Path.exists():
81
+ raise FlowError(f"External library {library.Name} doesn't exist at {library.Path.absolute()}")
82
+
79
83
  def generate(self):
84
+ self.check_external_libraries()
80
85
  templatedir = resources_files(self.templates)
81
86
  env = Environment(
82
87
  loader=FileSystemLoader(templatedir),
@@ -16,7 +16,7 @@ from ..pyedaa import (VivadoIPSpecificationFile, VerilogIncludeFile, VerilogSour
16
16
  SystemVerilogSourceFile, VHDLSourceFile, ConstraintFile,
17
17
  EDIFNetlistFile, NetlistFile, VivadoBDTclFile, VivadoProjectStepFile)
18
18
  from ..pyedaa.project import Project
19
- from ..pyedaa.attributes import UsedIn
19
+ from ..pyedaa.attributes import UsedIn, Scope
20
20
 
21
21
  logger = logging.getLogger(__name__)
22
22
 
@@ -118,7 +118,8 @@ class VivadoFlow(FlowBase):
118
118
  EDIFNetlistFile=EDIFNetlistFile,
119
119
  NetlistFile=NetlistFile,
120
120
  project=self.project,
121
- UsedIn=UsedIn)
121
+ UsedIn=UsedIn,
122
+ Scope=Scope)
122
123
  template = environment.get_template('run.tcl.j2')
123
124
  generate_from_template(template, self.builddir,
124
125
  project=self.project)
@@ -1,6 +1,7 @@
1
1
  import os
2
2
  import logging
3
3
  import jinja2
4
+ import tomllib
4
5
 
5
6
  from typing import List
6
7
  from pathlib import Path
@@ -8,17 +9,25 @@ from systemrdl import RDLCompiler, RDLCompileError, RDLListener, RDLWalker
8
9
  from systemrdl.node import AddrmapNode
9
10
  from systemrdl.rdltypes import AccessType, OnReadType, OnWriteType
10
11
  from peakrdl_html import HTMLExporter
12
+ from peakrdl_regblock.exporter import RegblockExporter
13
+ from peakrdl_regblock.cpuif.axi4lite import AXI4Lite_Cpuif_flattened
14
+ from peakrdl_regblock.udps import ALL_UDPS
15
+ from peakrdl_pyuvm.exporter import PyUVMExporter
11
16
 
17
+ from ..pyedaa.fileset import FileSet
12
18
  from ..generator import GeneratorFactory, GeneratorBase
13
- from ..pyedaa import SystemRDLSourceFile, SystemVerilogSourceFile, VerilogSourceFile
14
- from ..flow import FlowBase
19
+ from ..pyedaa import SystemRDLSourceFile, SystemVerilogSourceFile, VerilogSourceFile, CocotbPythonFile
20
+ from ..flow import FlowBase, FlowCategory
15
21
 
16
22
 
17
23
  logger = logging.getLogger(__name__)
18
24
 
19
- seennodes: List[AddrmapNode] = []
20
- addrmapnodes: List[AddrmapNode] = []
21
- hierachymapnodes: List[AddrmapNode] = []
25
+ seennodetypes: List[AddrmapNode] = []
26
+ leafnodetypes: List[AddrmapNode] = []
27
+ hierachynodetypes: List[AddrmapNode] = []
28
+ leafnodes: List[AddrmapNode] = []
29
+ hierachynodes: List[AddrmapNode] = []
30
+ nodes: List[AddrmapNode] = []
22
31
 
23
32
 
24
33
  class Environment(jinja2.Environment):
@@ -33,13 +42,18 @@ class Environment(jinja2.Environment):
33
42
 
34
43
  class Listener(RDLListener):
35
44
  def exit_Addrmap(self, node: AddrmapNode):
36
- seen = [n for n in seennodes if n.type_name == node.type_name]
45
+ nodes.append(node)
46
+ if is_leaf(node):
47
+ leafnodes.append(node)
48
+ else:
49
+ hierachynodes.append(node)
50
+ seen = [n for n in seennodetypes if n.type_name == node.type_name]
37
51
  if not seen:
38
- seennodes.append(node)
39
- if AddrmapNode not in [type(c) for c in node.children()]:
40
- addrmapnodes.append(node)
52
+ seennodetypes.append(node)
53
+ if is_leaf(node):
54
+ leafnodetypes.append(node)
41
55
  else:
42
- hierachymapnodes.append(node)
56
+ hierachynodetypes.append(node)
43
57
 
44
58
 
45
59
  def get_template_dirs() -> List[Path]:
@@ -143,10 +157,27 @@ def get_field_access(field) -> str: # noqa: C901
143
157
  return "NOACCESS"
144
158
 
145
159
 
160
+ def is_leaf(node):
161
+ """
162
+ Check if node is leaf, meaning it has no children address maps
163
+ """
164
+ if AddrmapNode not in [type(c) for c in node.children()]:
165
+ return True
166
+ else:
167
+ return False
168
+
169
+
170
+ def mask(node):
171
+ m = ~(node.size - 1) & 0xFFFFFFFF
172
+ return m
173
+
174
+
146
175
  @GeneratorFactory.register('SystemRDL')
147
176
  class SystemRDL(GeneratorBase):
148
177
 
149
- def render_template(self, template, node, outputdir) -> Path:
178
+ def render_template(self, template: jinja2.Template, node, outputdir) -> Path:
179
+ if not template.filename.endswith('.j2'):
180
+ return
150
181
  context = template.render(node=node)
151
182
  outputdir.mkdir(parents=True, exist_ok=True)
152
183
  outputfile: Path = outputdir.joinpath(f'{node.type_name}__{Path(template.filename).name[:-3]}').absolute()
@@ -159,14 +190,51 @@ class SystemRDL(GeneratorBase):
159
190
  if outputfile.suffix == '.v':
160
191
  fileset.InsertFileAfter(rdlfile, VerilogSourceFile(outputfile))
161
192
 
193
+ def peakrdl_regmodel(self, node, outputdir, config) -> None:
194
+ RegblockExporter().export(
195
+ node=node,
196
+ output_dir=str(outputdir.absolute()),
197
+ cpuif_cls=AXI4Lite_Cpuif_flattened,
198
+ module_name=config.get('module_name', f'{node.type_name}_addrmap'),
199
+ package_name=config.get('package_name', f'{node.type_name}_pkg'),
200
+ address_width=config.get('address_width', 32),
201
+ default_reset_activelow=config.get('default_reset_activelow', True),
202
+ err_if_bad_addr=config.get('err_if_bad_addr', False),
203
+ err_if_bad_rw=config.get('err_if_bad_rw', False)
204
+ )
205
+ modulefile: Path = outputdir.joinpath(f'{node.type_name}_pkg.sv').absolute()
206
+ packetfile: Path = outputdir.joinpath(f'{node.type_name}_addrmap.sv').absolute()
207
+ rdlfile = self.project.DefaultDesign.GetFile(node.inst.def_src_ref.path)
208
+ parent_fileset = rdlfile.FileSet
209
+ fileset = FileSet(name=rdlfile.Path, vhdlLibrary=parent_fileset.VHDLLibrary)
210
+ fileset.AddFile(SystemVerilogSourceFile(modulefile))
211
+ fileset.AddFile(SystemVerilogSourceFile(packetfile))
212
+ parent_fileset.AddFileSet(fileset)
213
+
162
214
  def run(self, flow: FlowBase):
163
215
  rdlfiles = list(self.project.DefaultDesign.DefaultFileSet.Files(fileType=SystemRDLSourceFile))
164
216
  output_dir = self.builddir.joinpath('systemrdl')
217
+ config = dict()
218
+ if os.getenv('SIMPLHDL_CONFIG'):
219
+ tomlfile = Path(os.getenv('SIMPLHDL_CONFIG'))
220
+ try:
221
+ with tomlfile.open('rb') as f:
222
+ config = tomllib.load(f)
223
+ except FileNotFoundError:
224
+ raise FileNotFoundError(f"SimplHDL config file set by environment 'SIMPLHDL_CONFIG={tomlfile}' does not exist")
225
+
226
+ pearkdl_config = config.get('peakrdl', {})
227
+ html_config = pearkdl_config.get('html', {})
228
+ regblock_config = pearkdl_config.get('regblock', {})
165
229
 
166
230
  if not rdlfiles:
167
231
  return
168
232
 
169
233
  rdlc = RDLCompiler()
234
+
235
+ for udp in ALL_UDPS:
236
+ rdlc.register_udp(udp)
237
+
170
238
  try:
171
239
  for rdlfile in rdlfiles:
172
240
  rdlc.compile_file(rdlfile.Path, defines=self.project.Defines)
@@ -188,15 +256,34 @@ class SystemRDL(GeneratorBase):
188
256
  loader=jinja2.FileSystemLoader(templatedir),
189
257
  trim_blocks=True)
190
258
  env.globals['hex'] = hex
259
+ env.globals['len'] = len
191
260
  env.globals['get_field_access'] = get_field_access
192
261
  env.globals['get_reg_access'] = get_reg_access
262
+ env.globals['nodes'] = nodes
263
+ env.globals['leafnodes'] = leafnodes
264
+ env.globals['hierachynodes'] = hierachynodes
265
+ env.globals['is_leaf'] = is_leaf
266
+ env.globals['mask'] = mask
193
267
  template = env.find_template('registermap')
194
- for node in addrmapnodes:
268
+ for node in leafnodetypes:
195
269
  self.render_template(template=template, node=node, outputdir=sub_dir)
270
+ self.peakrdl_regmodel(node=node, outputdir=output_dir.joinpath('hdl'), config=regblock_config)
196
271
 
197
272
  template = env.find_template('hierachymap')
198
- for node in hierachymapnodes:
273
+ for node in hierachynodetypes:
199
274
  self.render_template(template=template, node=node, outputdir=sub_dir)
200
275
 
276
+ if flow.category == FlowCategory.SIMULATION:
277
+ logger.info("Generate PyUVM Register Model")
278
+ output = output_dir.joinpath('pyuvm', 'ralmodel.py')
279
+ output.parent.mkdir(parents=True, exist_ok=True)
280
+ PyUVMExporter().export(root, str(output))
281
+ fileset = rdlfiles[-1].FileSet
282
+ fileset.InsertFileAfter(rdlfile, CocotbPythonFile(output))
283
+
201
284
  logger.info("Generate HTML Documentation")
202
- _ = HTMLExporter().export(root, output_dir.joinpath('docs'))
285
+ HTMLExporter().export(
286
+ root,
287
+ output_dir.joinpath('docs'),
288
+ skip_not_present=html_config.get('skip_not_present', False),
289
+ )
@@ -3,7 +3,7 @@ import pyEDAA.ProjectModel as pm
3
3
  from pathlib import Path
4
4
  from typing import Optional
5
5
  from pyTooling.MetaClasses import ExtendedType
6
- from .attributes import Encrypt, UsedIn, SIMULATION, IMPLEMENTATION
6
+ from .attributes import Encrypt, UsedIn, SIMULATION, IMPLEMENTATION, Scope
7
7
 
8
8
 
9
9
  class FileMixIn(metaclass=ExtendedType, mixin=True):
@@ -176,6 +176,7 @@ class ConstraintFile(pm.ConstraintFile, FileMixIn):
176
176
  super()._registerAttributes()
177
177
  FileMixIn._registerAttributes(self)
178
178
  self[UsedIn] = {IMPLEMENTATION}
179
+ self[Scope] = None
179
180
 
180
181
 
181
182
  class QuartusSignalTapFile(File):
@@ -14,3 +14,8 @@ class UsedIn(pm.Attribute):
14
14
  class Encrypt(pm.Attribute):
15
15
  NAME: 'Encrypt'
16
16
  VALUE_TYPE: bool
17
+
18
+
19
+ class Scope(pm.Attribute):
20
+ NAME: 'Scope'
21
+ VALUE_TYPE: str
@@ -1,3 +1,4 @@
1
+ import logging
1
2
  import pyEDAA.ProjectModel as pm
2
3
 
3
4
  from typing import Optional
@@ -5,6 +6,9 @@ from pathlib import Path
5
6
  from pyVHDLModel import VHDLVersion # type: ignore
6
7
 
7
8
 
9
+ logger = logging.getLogger(__name__)
10
+
11
+
8
12
  class VHDLLibrary(pm.VHDLLibrary):
9
13
 
10
14
  _path: Optional[Path]
@@ -18,9 +22,9 @@ class VHDLLibrary(pm.VHDLLibrary):
18
22
  ):
19
23
  super().__init__(name, project, design, vhdlVersion)
20
24
  if path is None:
21
- self._path = name
25
+ self.Path = Path(name)
22
26
  else:
23
- self._path = path
27
+ self.Path = path
24
28
 
25
29
  @property
26
30
  def Path(self) -> Optional[Path]:
@@ -28,4 +32,9 @@ class VHDLLibrary(pm.VHDLLibrary):
28
32
 
29
33
  @Path.setter
30
34
  def Path(self, path: Path) -> None:
31
- self._path = path
35
+ if isinstance(path, str):
36
+ filename, lineno, funcname, info = logger.findCaller(stacklevel=3)
37
+ logger.debug(f"The VHDL library path is a string in {filename}:{lineno}")
38
+ self._path = Path(path)
39
+ else:
40
+ self._path = path
@@ -25,7 +25,11 @@ set_global_assignment -library {{file.Library}} -name VERILOG_FILE "{{file.Path}
25
25
  {% elif file.FileType == VHDLSourceFile %}
26
26
  set_global_assignment -library {{file.Library}} -name VHDL_FILE "{{file.Path}}"
27
27
  {% elif file.FileType == ConstraintFile %}
28
+ {% if file[Scope] is not none %}
29
+ set_global_assignment -name SDC_ENTITY_FILE "{{file.Path}}" -entity "{{file[Scope]}}"
30
+ {% else %}
28
31
  set_global_assignment -name SDC_FILE "{{file.Path}}"
32
+ {% endif %}
29
33
  {% elif file.FileType == TCLSourceFile %}
30
34
  set_global_assignment -name TCL_SCRIPT_FILE "{{file.Path}}"
31
35
  {% elif file.FileType == QuartusSourceTCLFile %}
@@ -11,18 +11,18 @@
11
11
  +incdir+{{incdir}}
12
12
  {% endfor %}
13
13
  {% for library in external_libraries %}
14
- -makelib {{library.Path}}:{{library.Name}} -endlib
14
+ -makelib "{{library.Path}}":{{library.Name}} -endlib
15
15
  -reflib {{library.Name}}
16
16
  {% endfor %}
17
17
  {% for library in libraries %}
18
18
  -reflib {{library.Name}}
19
19
  {% endfor %}
20
20
  {% for fileset in filesets %}
21
- -makelib {{fileset.VHDLLibrary.Name}}:{{fileset.VHDLLibrary.Path}}
21
+ -makelib {{fileset.VHDLLibrary.Name}}:"{{fileset.VHDLLibrary.Path}}"
22
22
  {% for file in fileset.GetFiles() %}
23
23
 
24
24
  {% if isinstance(file, (SystemVerilogSourceFile, VerilogSourceFile, VHDLSourceFile)) and 'simulation' in file[UsedIn] %}
25
- {{file.Path}}
25
+ "{{file.Path}}"
26
26
  {% endif %}
27
27
  {% endfor %}
28
28
  -endlib
@@ -9,6 +9,8 @@ export LIBPYTHON_LOC := $(shell cocotb-config --libpython)
9
9
  VCS_FLAGS += +warn=noVPI-CT-NS +vpi -P pli.tab -load $(shell cocotb-config --lib-name-path vpi vcs)
10
10
  VCS_FLAGS += -debug_access+r+w+nomemcbk -debug_region+cell+encrypt -debug_acc+pp+f+dmptf
11
11
 
12
+ export PYGPI_PYTHON_BIN := $(shell cocotb-config --python-bin)
13
+ export COCOTB_TEST_MODULES := {{cocotbtop}}
14
+ export COCOTB_TOPLEVEL := {{cocotbdut}}
12
15
  export MODULE := {{cocotbtop}}
13
16
  export TOPLEVEL := {{cocotbdut}}
14
-
@@ -11,12 +11,23 @@ proc source_bd_script {filename} {
11
11
  # Fail if bd script return an error code or a non zero value
12
12
  if {[catch {source -notrace $filename} err]} {
13
13
  return -code 1
14
- } elseif {$err != 0} {
14
+ } elseif {$err != ""} {
15
15
  return -code 1
16
16
  }
17
17
  }
18
18
 
19
19
 
20
+ proc import_bd_file {filename} {
21
+ set_msg_config -suppress -id {BD 41-2576}
22
+ set_msg_config -suppress -id {BD 41-1663}
23
+ set bd [import_files $filename]
24
+ # generate_target all $bd
25
+ # export_ip_user_files -of_objects $bd -no_script -sync -force -quiet
26
+ # reset_msg_config -suppress -id {BD 41-2576}
27
+ reset_msg_config -suppress -id {BD 41-1663}
28
+ }
29
+
30
+
20
31
  proc source_step_script {filename} {
21
32
  # NOTE: make get_files fail if not files are found
22
33
  set_msg_config -id {Vivado 12-818} -new_severity {ERROR}
@@ -76,6 +87,7 @@ proc add_filesets {} {
76
87
 
77
88
 
78
89
  create_project -force -part {{project.Part}} {{project.Name}} [pwd]
90
+ set_msg_config -suppress -id {Board 49-26}
79
91
  add_filesets
80
92
  {% if project.Parameters or project.Generics %}
81
93
  foreach fileset [get_filesets -filter {FILESET_TYPE =~ *Srcs}] {
@@ -97,9 +109,15 @@ read_verilog "{{file.Path|replace('\\', '/')}}"
97
109
  {% elif file.FileType == VHDLSourceFile %}
98
110
  read_vhdl -vhdl2008 -library {{file.Library}} "{{file.Path|replace('\\', '/')}}"
99
111
  {% elif file.FileType == ConstraintFile %}
112
+ {% if file[Scope] is not none %}
113
+ read_xdc "{{file.Path|replace('\\', '/')}}" -ref "{{file[Scope]}}"
114
+ {% else %}
100
115
  read_xdc "{{file.Path|replace('\\', '/')}}"
116
+ {% endif %}
101
117
  {% elif file.FileType == VivadoIPSpecificationFile %}
102
- {% if file.Path.suffix == '.xcix' %}
118
+ {% if file.Path.suffix == '.bd' %}
119
+ import_bd_file "{{file.Path|replace('\\', '/')}}"
120
+ {% elif file.Path.suffix == '.xcix' %}
103
121
  read_ip "{{file.Path|replace('\\', '/')}}"
104
122
  {% else %}
105
123
  import_ip "{{file.Path|replace('\\', '/')}}"
@@ -108,8 +126,6 @@ import_ip "{{file.Path|replace('\\', '/')}}"
108
126
  add_files "{{file.Path|replace('\\', '/')}}"
109
127
  {% elif file.Path.suffix in ['.edif', '.ngc'] %}
110
128
  read_edif "{{file.Path|replace('\\', '/')}}"
111
- {% elif file.Path.suffix == '.bd' %}
112
- read_bd "{{file.Path|replace('\\', '/')}}"
113
129
  {% elif file.FileType == VivadoBDTclFile %}
114
130
  send_msg_id {SimplHDL PRJ-3} {INFO} "Sourcing BD tcl file {{file.Path|replace('\\', '/')}}: this might take some time."
115
131
  source_bd_script "{{file.Path|replace('\\', '/')}}"
@@ -1 +0,0 @@
1
- __version__ = "0.6.0"
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