simplhdl 0.10.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 (143) hide show
  1. simplhdl-0.10.1/LICENSE +21 -0
  2. simplhdl-0.10.1/PKG-INFO +180 -0
  3. simplhdl-0.10.1/README.md +105 -0
  4. simplhdl-0.10.1/pyproject.toml +128 -0
  5. simplhdl-0.10.1/setup.cfg +4 -0
  6. simplhdl-0.10.1/src/simplhdl/__init__.py +6 -0
  7. simplhdl-0.10.1/src/simplhdl/__main__.py +52 -0
  8. simplhdl-0.10.1/src/simplhdl/cli/arguments.py +38 -0
  9. simplhdl-0.10.1/src/simplhdl/cli/info.py +220 -0
  10. simplhdl-0.10.1/src/simplhdl/cli/run.py +45 -0
  11. simplhdl-0.10.1/src/simplhdl/cocotb.py +192 -0
  12. simplhdl-0.10.1/src/simplhdl/plugin/__init__.py +5 -0
  13. simplhdl-0.10.1/src/simplhdl/plugin/flow.py +86 -0
  14. simplhdl-0.10.1/src/simplhdl/plugin/generator.py +50 -0
  15. simplhdl-0.10.1/src/simplhdl/plugin/implementationflow.py +19 -0
  16. simplhdl-0.10.1/src/simplhdl/plugin/loader.py +80 -0
  17. simplhdl-0.10.1/src/simplhdl/plugin/parser.py +68 -0
  18. simplhdl-0.10.1/src/simplhdl/plugin/simulationflow.py +231 -0
  19. simplhdl-0.10.1/src/simplhdl/project/__init__.py +0 -0
  20. simplhdl-0.10.1/src/simplhdl/project/attributes.py +64 -0
  21. simplhdl-0.10.1/src/simplhdl/project/base.py +68 -0
  22. simplhdl-0.10.1/src/simplhdl/project/design.py +141 -0
  23. simplhdl-0.10.1/src/simplhdl/project/files.py +446 -0
  24. simplhdl-0.10.1/src/simplhdl/project/fileset.py +220 -0
  25. simplhdl-0.10.1/src/simplhdl/project/project.py +150 -0
  26. simplhdl-0.10.1/src/simplhdl/simplhdl.py +52 -0
  27. simplhdl-0.10.1/src/simplhdl/tools.py +16 -0
  28. simplhdl-0.10.1/src/simplhdl/utils.py +166 -0
  29. simplhdl-0.10.1/src/simplhdl.egg-info/PKG-INFO +180 -0
  30. simplhdl-0.10.1/src/simplhdl.egg-info/SOURCES.txt +141 -0
  31. simplhdl-0.10.1/src/simplhdl.egg-info/dependency_links.txt +1 -0
  32. simplhdl-0.10.1/src/simplhdl.egg-info/entry_points.txt +21 -0
  33. simplhdl-0.10.1/src/simplhdl.egg-info/requires.txt +30 -0
  34. simplhdl-0.10.1/src/simplhdl.egg-info/top_level.txt +13 -0
  35. simplhdl-0.10.1/src/simplhdl_chisel/chisel.py +44 -0
  36. simplhdl-0.10.1/src/simplhdl_encrypt/__init__.py +0 -0
  37. simplhdl-0.10.1/src/simplhdl_encrypt/encrypt/__init__.py +0 -0
  38. simplhdl-0.10.1/src/simplhdl_encrypt/encrypt/encryptflow.py +137 -0
  39. simplhdl-0.10.1/src/simplhdl_fusesocparser/__init__.py +0 -0
  40. simplhdl-0.10.1/src/simplhdl_fusesocparser/fusesocparser.py +35 -0
  41. simplhdl-0.10.1/src/simplhdl_lint/__init__.py +0 -0
  42. simplhdl-0.10.1/src/simplhdl_lint/flake8/flake8flow.py +82 -0
  43. simplhdl-0.10.1/src/simplhdl_lint/lint/lintflow.py +77 -0
  44. simplhdl-0.10.1/src/simplhdl_lint/resources/__init__.py +0 -0
  45. simplhdl-0.10.1/src/simplhdl_lint/resources/templates/__init__.py +0 -0
  46. simplhdl-0.10.1/src/simplhdl_lint/resources/templates/flake8/__init__.py +0 -0
  47. simplhdl-0.10.1/src/simplhdl_lint/resources/templates/flake8/setup.cfg.j2 +10 -0
  48. simplhdl-0.10.1/src/simplhdl_lint/resources/templates/verible/__init__.py +0 -0
  49. simplhdl-0.10.1/src/simplhdl_lint/resources/templates/verible/rules.cfg.j2 +58 -0
  50. simplhdl-0.10.1/src/simplhdl_lint/resources/templates/vsg/__init__.py +0 -0
  51. simplhdl-0.10.1/src/simplhdl_lint/resources/templates/vsg/files.json.j2 +7 -0
  52. simplhdl-0.10.1/src/simplhdl_lint/resources/templates/vsg/rules.yml.j2 +15 -0
  53. simplhdl-0.10.1/src/simplhdl_lint/verible/__init__.py +0 -0
  54. simplhdl-0.10.1/src/simplhdl_lint/verible/veribleflow.py +96 -0
  55. simplhdl-0.10.1/src/simplhdl_lint/vsg/__init__.py +0 -0
  56. simplhdl-0.10.1/src/simplhdl_lint/vsg/vsgflow.py +109 -0
  57. simplhdl-0.10.1/src/simplhdl_modelsim/__init__.py +0 -0
  58. simplhdl-0.10.1/src/simplhdl_modelsim/modelsim/__init__.py +0 -0
  59. simplhdl-0.10.1/src/simplhdl_modelsim/modelsim/modelsimflow.py +298 -0
  60. simplhdl-0.10.1/src/simplhdl_modelsim/resources/__init__.py +0 -0
  61. simplhdl-0.10.1/src/simplhdl_modelsim/resources/templates/__init__.py +0 -0
  62. simplhdl-0.10.1/src/simplhdl_modelsim/resources/templates/modelsim/Makefile.j2 +63 -0
  63. simplhdl-0.10.1/src/simplhdl_modelsim/resources/templates/modelsim/__init__.py +0 -0
  64. simplhdl-0.10.1/src/simplhdl_modelsim/resources/templates/modelsim/cocotb.mk.j2 +29 -0
  65. simplhdl-0.10.1/src/simplhdl_modelsim/resources/templates/modelsim/dependencies.mk.j2 +6 -0
  66. simplhdl-0.10.1/src/simplhdl_modelsim/resources/templates/modelsim/files.j2 +5 -0
  67. simplhdl-0.10.1/src/simplhdl_modelsim/resources/templates/modelsim/fileset.j2 +7 -0
  68. simplhdl-0.10.1/src/simplhdl_modelsim/resources/templates/modelsim/modelsim.tcl.j2 +32 -0
  69. simplhdl-0.10.1/src/simplhdl_modelsim/resources/templates/modelsim/project.mk.j2 +25 -0
  70. simplhdl-0.10.1/src/simplhdl_modelsim/resources/templates/modelsim/run.do.j2 +12 -0
  71. simplhdl-0.10.1/src/simplhdl_parser/__init__.py +0 -0
  72. simplhdl-0.10.1/src/simplhdl_parser/simplhdlparser.py +117 -0
  73. simplhdl-0.10.1/src/simplhdl_peakrdl/__init__.py +0 -0
  74. simplhdl-0.10.1/src/simplhdl_peakrdl/systemrdl.py +305 -0
  75. simplhdl-0.10.1/src/simplhdl_quartus/quartusdse/__init__.py +0 -0
  76. simplhdl-0.10.1/src/simplhdl_quartus/quartusdse/quartusdseflow.py +75 -0
  77. simplhdl-0.10.1/src/simplhdl_quartus/quartusexport/__init__.py +0 -0
  78. simplhdl-0.10.1/src/simplhdl_quartus/quartusexport/quartusexportflow.py +187 -0
  79. simplhdl-0.10.1/src/simplhdl_quartus/quartusflow.py +155 -0
  80. simplhdl-0.10.1/src/simplhdl_quartus/resources/__init__.py +0 -0
  81. simplhdl-0.10.1/src/simplhdl_quartus/resources/templates/__init__.py +0 -0
  82. simplhdl-0.10.1/src/simplhdl_quartus/resources/templates/quartus/__init__.py +0 -0
  83. simplhdl-0.10.1/src/simplhdl_quartus/resources/templates/quartus/project.tcl.j2 +67 -0
  84. simplhdl-0.10.1/src/simplhdl_quartus/resources/templates/quartus/run.tcl.j2 +51 -0
  85. simplhdl-0.10.1/src/simplhdl_quartus/spd.py +412 -0
  86. simplhdl-0.10.1/src/simplhdl_questasim/questasim/__init__.py +0 -0
  87. simplhdl-0.10.1/src/simplhdl_questasim/questasim/questasimflow.py +367 -0
  88. simplhdl-0.10.1/src/simplhdl_questasim/resources/__init__.py +0 -0
  89. simplhdl-0.10.1/src/simplhdl_questasim/resources/templates/__init__.py +0 -0
  90. simplhdl-0.10.1/src/simplhdl_questasim/resources/templates/questasim/__init__.py +0 -0
  91. simplhdl-0.10.1/src/simplhdl_questasim/resources/templates/questasim/modelsim.tcl.j2 +32 -0
  92. simplhdl-0.10.1/src/simplhdl_questasim/resources/templates/questasim/project.qrun.j2 +26 -0
  93. simplhdl-0.10.1/src/simplhdl_questasim/resources/templates/questasim/visualizer.tcl.j2 +31 -0
  94. simplhdl-0.10.1/src/simplhdl_questasim/resources/templates/questasim/vsim-run.do.j2 +12 -0
  95. simplhdl-0.10.1/src/simplhdl_rivierapro/__init__.py +0 -0
  96. simplhdl-0.10.1/src/simplhdl_rivierapro/resources/__init__.py +0 -0
  97. simplhdl-0.10.1/src/simplhdl_rivierapro/resources/templates/__init__.py +0 -0
  98. simplhdl-0.10.1/src/simplhdl_rivierapro/resources/templates/rivierapro/Makefile.j2 +63 -0
  99. simplhdl-0.10.1/src/simplhdl_rivierapro/resources/templates/rivierapro/__init__.py +0 -0
  100. simplhdl-0.10.1/src/simplhdl_rivierapro/resources/templates/rivierapro/cocotb.mk.j2 +27 -0
  101. simplhdl-0.10.1/src/simplhdl_rivierapro/resources/templates/rivierapro/dependencies.mk.j2 +6 -0
  102. simplhdl-0.10.1/src/simplhdl_rivierapro/resources/templates/rivierapro/files.j2 +5 -0
  103. simplhdl-0.10.1/src/simplhdl_rivierapro/resources/templates/rivierapro/fileset.j2 +7 -0
  104. simplhdl-0.10.1/src/simplhdl_rivierapro/resources/templates/rivierapro/project.mk.j2 +23 -0
  105. simplhdl-0.10.1/src/simplhdl_rivierapro/rivierapro/__init__.py +0 -0
  106. simplhdl-0.10.1/src/simplhdl_rivierapro/rivierapro/rivieraproflow.py +241 -0
  107. simplhdl-0.10.1/src/simplhdl_vcs/__init__.py +0 -0
  108. simplhdl-0.10.1/src/simplhdl_vcs/resources/__init__.py +0 -0
  109. simplhdl-0.10.1/src/simplhdl_vcs/resources/templates/__init__.py +0 -0
  110. simplhdl-0.10.1/src/simplhdl_vcs/resources/templates/vcs/Makefile.j2 +66 -0
  111. simplhdl-0.10.1/src/simplhdl_vcs/resources/templates/vcs/__init__.py +0 -0
  112. simplhdl-0.10.1/src/simplhdl_vcs/resources/templates/vcs/cocotb.mk.j2 +16 -0
  113. simplhdl-0.10.1/src/simplhdl_vcs/resources/templates/vcs/dependencies.mk.j2 +6 -0
  114. simplhdl-0.10.1/src/simplhdl_vcs/resources/templates/vcs/files.j2 +5 -0
  115. simplhdl-0.10.1/src/simplhdl_vcs/resources/templates/vcs/fileset.j2 +7 -0
  116. simplhdl-0.10.1/src/simplhdl_vcs/resources/templates/vcs/pli.tab.j2 +1 -0
  117. simplhdl-0.10.1/src/simplhdl_vcs/resources/templates/vcs/project.mk.j2 +4 -0
  118. simplhdl-0.10.1/src/simplhdl_vcs/resources/templates/vcs/simv-run.do.j2 +6 -0
  119. simplhdl-0.10.1/src/simplhdl_vcs/resources/templates/vcs/synopsys_sim.setup.j2 +7 -0
  120. simplhdl-0.10.1/src/simplhdl_vcs/resources/templates/vcs/vcs.parameters.j2 +3 -0
  121. simplhdl-0.10.1/src/simplhdl_vcs/vcs/__init__.py +0 -0
  122. simplhdl-0.10.1/src/simplhdl_vcs/vcs/vcsflow.py +236 -0
  123. simplhdl-0.10.1/src/simplhdl_vivado/__init__.py +0 -0
  124. simplhdl-0.10.1/src/simplhdl_vivado/ipxact.py +237 -0
  125. simplhdl-0.10.1/src/simplhdl_vivado/resources/__init__.py +0 -0
  126. simplhdl-0.10.1/src/simplhdl_vivado/resources/templates/__init__.py +0 -0
  127. simplhdl-0.10.1/src/simplhdl_vivado/resources/templates/vivado/__init__.py +0 -0
  128. simplhdl-0.10.1/src/simplhdl_vivado/resources/templates/vivado/project.tcl.j2 +173 -0
  129. simplhdl-0.10.1/src/simplhdl_vivado/resources/templates/vivado/run.tcl.j2 +80 -0
  130. simplhdl-0.10.1/src/simplhdl_vivado/resources/templates/vivado/steps.tcl.j2 +19 -0
  131. simplhdl-0.10.1/src/simplhdl_vivado/resources/templates/xsim/Makefile.j2 +56 -0
  132. simplhdl-0.10.1/src/simplhdl_vivado/resources/templates/xsim/__init__.py +0 -0
  133. simplhdl-0.10.1/src/simplhdl_vivado/resources/templates/xsim/cocotb.mk.j2 +12 -0
  134. simplhdl-0.10.1/src/simplhdl_vivado/resources/templates/xsim/dependencies.mk.j2 +6 -0
  135. simplhdl-0.10.1/src/simplhdl_vivado/resources/templates/xsim/files.j2 +4 -0
  136. simplhdl-0.10.1/src/simplhdl_vivado/resources/templates/xsim/fileset.j2 +7 -0
  137. simplhdl-0.10.1/src/simplhdl_vivado/resources/templates/xsim/project.mk.j2 +4 -0
  138. simplhdl-0.10.1/src/simplhdl_vivado/vivadoflow.py +153 -0
  139. simplhdl-0.10.1/src/simplhdl_vivado/xsim/__init__.py +0 -0
  140. simplhdl-0.10.1/src/simplhdl_vivado/xsim/xsimflow.py +209 -0
  141. simplhdl-0.10.1/tests/test_design.py +232 -0
  142. simplhdl-0.10.1/tests/test_files.py +158 -0
  143. simplhdl-0.10.1/tests/test_fileset.py +109 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 SimplHDL
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,180 @@
1
+ Metadata-Version: 2.4
2
+ Name: simplhdl
3
+ Version: 0.10.1
4
+ Summary: A framework for simulating and implementing HDL designs
5
+ Author-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
6
+ Maintainer-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
7
+ License: MIT License
8
+
9
+ Copyright (c) 2024 SimplHDL
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of this software and associated documentation files (the "Software"), to deal
13
+ in the Software without restriction, including without limitation the rights
14
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ copies of the Software, and to permit persons to whom the Software is
16
+ furnished to do so, subject to the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included in all
19
+ copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ SOFTWARE.
28
+
29
+ Project-URL: Documentation, https://simplhdl.readthedocs.io/en/latest/
30
+ Project-URL: Homepage, https://github.com/SimplHDL
31
+ Project-URL: Issues, https://github.com/SimplHDL/simplhdl/issues
32
+ Project-URL: Repository, https://github.com/SimplHDL/simplhdl.git
33
+ Classifier: Development Status :: 4 - Beta
34
+ Classifier: Intended Audience :: Developers
35
+ Classifier: License :: OSI Approved :: MIT License
36
+ Classifier: Operating System :: OS Independent
37
+ Classifier: Programming Language :: Python :: 3 :: Only
38
+ Classifier: Programming Language :: Python :: 3.8
39
+ Classifier: Programming Language :: Python :: 3.9
40
+ Classifier: Programming Language :: Python :: 3.10
41
+ Classifier: Programming Language :: Python :: 3.11
42
+ Classifier: Programming Language :: Python :: 3.12
43
+ Classifier: Programming Language :: Python :: 3.13
44
+ Classifier: Programming Language :: Python :: 3.14
45
+ Requires-Python: >=3.8
46
+ Description-Content-Type: text/markdown
47
+ License-File: LICENSE
48
+ Requires-Dist: argcomplete
49
+ Requires-Dist: black
50
+ Requires-Dist: flake8
51
+ Requires-Dist: gitpython
52
+ Requires-Dist: importlib-resources; python_version < "3.9"
53
+ Requires-Dist: jinja2
54
+ Requires-Dist: matplotlib
55
+ Requires-Dist: networkx
56
+ Requires-Dist: peakrdl-html
57
+ Requires-Dist: peakrdl-pyuvm
58
+ Requires-Dist: peakrdl-regblock>=1.2
59
+ Requires-Dist: pyyaml
60
+ Requires-Dist: rich
61
+ Requires-Dist: singleton-decorator
62
+ Requires-Dist: systemrdl-compiler
63
+ Requires-Dist: types-pyyaml
64
+ Requires-Dist: vsg
65
+ Provides-Extra: dev
66
+ Requires-Dist: flake8; extra == "dev"
67
+ Requires-Dist: mypy; extra == "dev"
68
+ Requires-Dist: robotframework; extra == "dev"
69
+ Requires-Dist: tox; extra == "dev"
70
+ Provides-Extra: docs
71
+ Requires-Dist: furo; extra == "docs"
72
+ Requires-Dist: sphinx; extra == "docs"
73
+ Requires-Dist: sphinx-pyproject; extra == "docs"
74
+ Dynamic: license-file
75
+
76
+ ## Introduction
77
+
78
+ SimplHDL is a plugin-based command-line application for simplifying FPGA and ASIC development regardless of EDA tools
79
+ and flows.
80
+
81
+ The goal is to embrase structured and reusable designs by creating a generic project model that can be used in any hdl
82
+ development flow regardless of project structure and EDA tool requirements.
83
+
84
+ The plugin based architecture allows for SimplHDL to be migrated into any existing project, replacing ad-hoc simulation
85
+ and implementation scripts while providing a intuitive command-line interface for HDL design and verification engineers.
86
+
87
+ I wide vararity of languages, standards and tools are supported.
88
+
89
+ ### HDL languages
90
+
91
+ - Verilog / System Verilog
92
+ - VHDL
93
+ - Chisel
94
+ - SystemRDL
95
+ - IPXact
96
+ - Vivado IP containers (.xci, .xcix)
97
+ - Quartus IP containers (.ip)
98
+
99
+ ### Methodologies
100
+
101
+ - UVM
102
+ - OSVMM
103
+ - UVVM
104
+ - Cocotb
105
+ - pyuvm
106
+
107
+ ### EDA Tools
108
+
109
+ - Vivado
110
+ - Quartus
111
+ - Modelsim
112
+ - Questasim
113
+ - Xsim
114
+ - Vcs
115
+ - Riviera Pro
116
+ - Xcelium (coming)
117
+ - Verilator (coming)
118
+ - Icarus (coming)
119
+ - GHDL (coming)
120
+
121
+ ## Getting Started
122
+
123
+ SimplHDL currently works on Linux and Windows WSL. It is written in Python and can be installed with _pip_. To run
124
+ SimplHDL Python 3.8 or later is required. The tools for the flows you wish to run also need to be installed and set up
125
+ correctly in the shell environment. SimplHDL can be installed on your system's Python installation, but it is highly
126
+ recommended to install and run SimplHDL in a Python virtual environment or a Conda environment.
127
+
128
+ ## Example
129
+
130
+ To quickly try out SimplHDL follow these steps. In this example, we will use Vivado and QuestaSim. The prerequisites are
131
+ that SimplHDL install installed and Vivado and QuestaSim are correctly set up in your shell environment.
132
+
133
+ 1. Clone Git repository from GitHub
134
+
135
+ ```console
136
+ git clone https://github.com/SimplHDL/simplhdl.git
137
+ ```
138
+
139
+ 2. install SimplHDL from source
140
+
141
+ ```console
142
+ pip install ./simplhdl
143
+ ```
144
+
145
+ 3. Run simulation
146
+
147
+ ```console
148
+ cd simplhdl/examples/hdl/alu/sim
149
+ simpl questasim
150
+ ```
151
+
152
+ 4. Run simulation interactively in Gui.
153
+
154
+ ```console
155
+ cd simplhdl/examples/hdl/alu/sim
156
+ simpl questasim --gui
157
+ ```
158
+
159
+ 5. Run implementation
160
+
161
+ ```console
162
+ cd ../syn
163
+ simpl vivado
164
+ ```
165
+
166
+ 6. Run implementation interactively in Gui.
167
+
168
+ ```console
169
+ simpl vivado --gui
170
+ ```
171
+
172
+ In this example, the project specification is written in Yaml. This format is only meant as a demonstration. To
173
+ integrate SimplHDL into your project, you have to write a parser plugin for your specific project specification format.
174
+ See the documentation and plugin examples for more information.
175
+
176
+ ## Links
177
+
178
+ - Homepage:
179
+ - Source: <https://github.com/SimplHDL/simplhdl>
180
+ - Tracker: <https://github.com/SimplHDL/simplhdl/issues>
@@ -0,0 +1,105 @@
1
+ ## Introduction
2
+
3
+ SimplHDL is a plugin-based command-line application for simplifying FPGA and ASIC development regardless of EDA tools
4
+ and flows.
5
+
6
+ The goal is to embrase structured and reusable designs by creating a generic project model that can be used in any hdl
7
+ development flow regardless of project structure and EDA tool requirements.
8
+
9
+ The plugin based architecture allows for SimplHDL to be migrated into any existing project, replacing ad-hoc simulation
10
+ and implementation scripts while providing a intuitive command-line interface for HDL design and verification engineers.
11
+
12
+ I wide vararity of languages, standards and tools are supported.
13
+
14
+ ### HDL languages
15
+
16
+ - Verilog / System Verilog
17
+ - VHDL
18
+ - Chisel
19
+ - SystemRDL
20
+ - IPXact
21
+ - Vivado IP containers (.xci, .xcix)
22
+ - Quartus IP containers (.ip)
23
+
24
+ ### Methodologies
25
+
26
+ - UVM
27
+ - OSVMM
28
+ - UVVM
29
+ - Cocotb
30
+ - pyuvm
31
+
32
+ ### EDA Tools
33
+
34
+ - Vivado
35
+ - Quartus
36
+ - Modelsim
37
+ - Questasim
38
+ - Xsim
39
+ - Vcs
40
+ - Riviera Pro
41
+ - Xcelium (coming)
42
+ - Verilator (coming)
43
+ - Icarus (coming)
44
+ - GHDL (coming)
45
+
46
+ ## Getting Started
47
+
48
+ SimplHDL currently works on Linux and Windows WSL. It is written in Python and can be installed with _pip_. To run
49
+ SimplHDL Python 3.8 or later is required. The tools for the flows you wish to run also need to be installed and set up
50
+ correctly in the shell environment. SimplHDL can be installed on your system's Python installation, but it is highly
51
+ recommended to install and run SimplHDL in a Python virtual environment or a Conda environment.
52
+
53
+ ## Example
54
+
55
+ To quickly try out SimplHDL follow these steps. In this example, we will use Vivado and QuestaSim. The prerequisites are
56
+ that SimplHDL install installed and Vivado and QuestaSim are correctly set up in your shell environment.
57
+
58
+ 1. Clone Git repository from GitHub
59
+
60
+ ```console
61
+ git clone https://github.com/SimplHDL/simplhdl.git
62
+ ```
63
+
64
+ 2. install SimplHDL from source
65
+
66
+ ```console
67
+ pip install ./simplhdl
68
+ ```
69
+
70
+ 3. Run simulation
71
+
72
+ ```console
73
+ cd simplhdl/examples/hdl/alu/sim
74
+ simpl questasim
75
+ ```
76
+
77
+ 4. Run simulation interactively in Gui.
78
+
79
+ ```console
80
+ cd simplhdl/examples/hdl/alu/sim
81
+ simpl questasim --gui
82
+ ```
83
+
84
+ 5. Run implementation
85
+
86
+ ```console
87
+ cd ../syn
88
+ simpl vivado
89
+ ```
90
+
91
+ 6. Run implementation interactively in Gui.
92
+
93
+ ```console
94
+ simpl vivado --gui
95
+ ```
96
+
97
+ In this example, the project specification is written in Yaml. This format is only meant as a demonstration. To
98
+ integrate SimplHDL into your project, you have to write a parser plugin for your specific project specification format.
99
+ See the documentation and plugin examples for more information.
100
+
101
+ ## Links
102
+
103
+ - Homepage:
104
+ - Source: <https://github.com/SimplHDL/simplhdl>
105
+ - Tracker: <https://github.com/SimplHDL/simplhdl/issues>
@@ -0,0 +1,128 @@
1
+ [build-system]
2
+ build-backend = "setuptools.build_meta"
3
+ requires = [
4
+ "setuptools>=64",
5
+ "wheel",
6
+ ]
7
+
8
+ [project]
9
+ name = "simplhdl"
10
+ description = "A framework for simulating and implementing HDL designs"
11
+ readme = "README.md"
12
+ license = { file = "LICENSE" }
13
+ maintainers = [
14
+ { name = "Rasmus Grøndahl Olsen", email = "simplhdl@gmail.com" },
15
+ ]
16
+ authors = [
17
+ { name = "Rasmus Grøndahl Olsen", email = "simplhdl@gmail.com" },
18
+ ]
19
+ requires-python = ">=3.8"
20
+ classifiers = [
21
+ "Development Status :: 4 - Beta",
22
+ "Intended Audience :: Developers",
23
+ "License :: OSI Approved :: MIT License",
24
+ "Operating System :: OS Independent",
25
+ "Programming Language :: Python :: 3 :: Only",
26
+ "Programming Language :: Python :: 3.8",
27
+ "Programming Language :: Python :: 3.9",
28
+ "Programming Language :: Python :: 3.10",
29
+ "Programming Language :: Python :: 3.11",
30
+ "Programming Language :: Python :: 3.12",
31
+ "Programming Language :: Python :: 3.13",
32
+ "Programming Language :: Python :: 3.14",
33
+ ]
34
+
35
+ dynamic = [ "version" ]
36
+ dependencies = [
37
+ "argcomplete",
38
+ "black",
39
+ "flake8",
40
+ "gitpython",
41
+ "importlib-resources; python_version<'3.9'",
42
+ "jinja2",
43
+ "matplotlib",
44
+ "networkx",
45
+ "peakrdl-html",
46
+ "peakrdl-pyuvm",
47
+ "peakrdl-regblock>=1.2",
48
+ "pyyaml",
49
+ "rich",
50
+ "singleton-decorator",
51
+ "systemrdl-compiler",
52
+ "types-pyyaml",
53
+ "vsg",
54
+ ]
55
+
56
+ optional-dependencies.dev = [
57
+ "flake8",
58
+ "mypy",
59
+ "robotframework",
60
+ "tox",
61
+ ]
62
+ optional-dependencies.docs = [
63
+ "furo",
64
+ "sphinx",
65
+ "sphinx-pyproject",
66
+ ]
67
+ urls.Documentation = "https://simplhdl.readthedocs.io/en/latest/"
68
+ urls.Homepage = "https://github.com/SimplHDL"
69
+ urls.Issues = "https://github.com/SimplHDL/simplhdl/issues"
70
+ urls.Repository = "https://github.com/SimplHDL/simplhdl.git"
71
+ scripts.simpl = "simplhdl.__main__:main"
72
+ entry-points."simplhdl.plugins".chisel_generator = "simplhdl_chisel.chisel:ChiselGenerator"
73
+ entry-points."simplhdl.plugins".encrypt = "simplhdl_encrypt.encrypt.encryptflow:EncryptFlow"
74
+ entry-points."simplhdl.plugins".fusersoc_parser = "simplhdl_fusesocparser.fusesocparser:FuseSocParser"
75
+ entry-points."simplhdl.plugins".lint = "simplhdl_lint.lint.lintflow:LintFlow"
76
+ entry-points."simplhdl.plugins".modelsim = "simplhdl_modelsim.modelsim.modelsimflow:ModelSimFlow"
77
+ entry-points."simplhdl.plugins".peakrdl_generator = "simplhdl_peakrdl.systemrdl:PeakRdlGenerator"
78
+ entry-points."simplhdl.plugins".quartus = "simplhdl_quartus.quartusflow:QuartusFlow"
79
+ entry-points."simplhdl.plugins".quartus-dse = "simplhdl_quartus.quartusdse.quartusdseflow:QuartusDseFlow"
80
+ entry-points."simplhdl.plugins".quartus-export = "simplhdl_quartus.quartusexport.quartusexportflow:QuartusExportFlow"
81
+ entry-points."simplhdl.plugins".quartus_generator = "simplhdl_quartus.spd:QuartusGenerator"
82
+ entry-points."simplhdl.plugins".questasim = "simplhdl_questasim.questasim.questasimflow:QuestaSimFlow"
83
+ entry-points."simplhdl.plugins".rivierapro = "simplhdl_rivierapro.rivierapro.rivieraproflow:RivieraProFlow"
84
+ entry-points."simplhdl.plugins".simplhdl_parser = "simplhdl_parser.simplhdlparser:SimplHdlParser"
85
+ entry-points."simplhdl.plugins".vcs = "simplhdl_vcs.vcs.vcsflow:VcsFlow"
86
+ entry-points."simplhdl.plugins".vivado = "simplhdl_vivado.vivadoflow:VivadoFlow"
87
+ entry-points."simplhdl.plugins".vivado_generator = "simplhdl_vivado.ipxact:VivadoGenerator"
88
+ entry-points."simplhdl.plugins".xsim = "simplhdl_vivado.xsim.xsimflow:XsimFlow"
89
+
90
+ [tool.setuptools.dynamic]
91
+ version = { attr = "simplhdl.__version__" }
92
+
93
+ [tool.setuptools.package-data]
94
+ "*" = [ "*.j2" ]
95
+
96
+ [tool.ruff]
97
+ line-length = 120
98
+ fix = true
99
+ lint.per-file-ignores."__init__.py" = [
100
+ "F401", # don't care about unused imports
101
+ "F403", # don't care about 'from module import *'
102
+ ]
103
+ lint.isort = { known-first-party = [
104
+ "simplhdl",
105
+ "simplhdl_chisel",
106
+ "simplhdl_encrypt",
107
+ "simplhdl_fusesocparser",
108
+ "simplhdl_lint",
109
+ "simplhdl_modelsim",
110
+ "simplhdl_parser",
111
+ "simplhdl_peakrdl",
112
+ "simplhdl_quartus",
113
+ "simplhdl_questasim",
114
+ "simplhdl_rivierapro",
115
+ "simplhdl_vcs",
116
+ "simplhdl_vivado",
117
+ "tests",
118
+ ], required-imports = [
119
+ "from __future__ import annotations",
120
+ ] }
121
+ lint.preview = true
122
+
123
+ [tool.codespell]
124
+ ignore-words-list = "synopsys, edn"
125
+
126
+ [[tool.mypy.overrides]]
127
+ module = "networkx.*"
128
+ ignore_missing_imports = true
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,6 @@
1
+ __version__ = "0.10.1"
2
+
3
+ from .__main__ import parse_arguments
4
+ from .project.project import *
5
+ from .project.fileset import *
6
+ from .project.design import *
@@ -0,0 +1,52 @@
1
+ import logging
2
+ import sys
3
+ import traceback
4
+
5
+ from rich.logging import RichHandler
6
+
7
+ from .cli.arguments import parse_arguments
8
+ from .project.project import ProjectError
9
+ from .plugin.flow import FlowError
10
+ from .plugin.generator import GeneratorError
11
+ from .plugin.loader import load_plugins
12
+ from .plugin.parser import ParserError
13
+ from .simplhdl import Simplhdl
14
+ from .utils import CalledShError
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ def main():
20
+ try:
21
+ load_plugins()
22
+ args = parse_arguments()
23
+ levels = [logging.INFO, logging.DEBUG, logging.NOTSET]
24
+ level = levels[min(args.verbose, len(levels) - 1)]
25
+ if level < logging.INFO:
26
+ show_path = True
27
+ else:
28
+ show_path = False
29
+
30
+ FORMAT = "[simplhdl.%(module)s] - %(message)s"
31
+ console = RichHandler(level=level, show_time=False, rich_tracebacks=True, show_path=show_path)
32
+ logging.basicConfig(level=5, format=FORMAT, handlers=[console])
33
+ simpl = Simplhdl(args)
34
+ simpl.run()
35
+ except (
36
+ NotImplementedError,
37
+ FileNotFoundError,
38
+ CalledShError,
39
+ ParserError,
40
+ FlowError,
41
+ GeneratorError,
42
+ ProjectError,
43
+ ) as e:
44
+ logger.debug(traceback.format_exc())
45
+ logger.error(e)
46
+ return 1
47
+ except SystemError:
48
+ return 1
49
+
50
+
51
+ if __name__ == "__main__":
52
+ sys.exit(main())
@@ -0,0 +1,38 @@
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ from pathlib import Path
5
+ from typing import Sequence
6
+
7
+ import argcomplete
8
+
9
+ from .. import __version__
10
+ from ..plugin.flow import FlowFactory
11
+
12
+
13
+ def parse_arguments(args: Sequence[str] = None, namespace: None = None) -> argparse.Namespace:
14
+ parser = argparse.ArgumentParser(
15
+ prog="simpl",
16
+ description="Simple framework for simulation and implementation of HDL designs",
17
+ )
18
+ parser.add_argument("--projectspec", type=Path, help="Project specification file")
19
+ parser.add_argument("--version", action="version", version=f"SimplHDL version {__version__}")
20
+ parser.add_argument("-v", "--verbose", action="count", default=0, help="Increase verbosity")
21
+ parser.add_argument(
22
+ "-o",
23
+ "--outputdir",
24
+ default="_build",
25
+ type=Path,
26
+ help="output directory for build files",
27
+ )
28
+ subparsers = parser.add_subparsers(
29
+ title="Flows",
30
+ description="""Different work flows for simulation and implementation
31
+ of HDL designs""",
32
+ dest="flow",
33
+ )
34
+ for flow_class in FlowFactory.get_flows().values():
35
+ flow_class.parse_args(subparsers)
36
+
37
+ argcomplete.autocomplete(parser)
38
+ return parser.parse_args(args=args, namespace=namespace)