SimplHDL 0.12.1__tar.gz → 0.13.2__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.
- {simplhdl-0.12.1/src/simplhdl.egg-info → simplhdl-0.13.2}/PKG-INFO +1 -1
- {simplhdl-0.12.1 → simplhdl-0.13.2}/pyproject.toml +2 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/__init__.py +1 -1
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/cli/info.py +6 -2
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/cocotb.py +13 -2
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/project/files.py +6 -2
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/utils.py +24 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2/src/simplhdl.egg-info}/PKG-INFO +1 -1
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl.egg-info/SOURCES.txt +1 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl.egg-info/entry_points.txt +1 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl.egg-info/top_level.txt +1 -0
- simplhdl-0.13.2/src/simplhdl_jinja2/jinja2.py +25 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/quartusexport/quartusexportflow.py +19 -6
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/spd.py +5 -4
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/vivadoexport/vivadoexportflow.py +15 -5
- {simplhdl-0.12.1 → simplhdl-0.13.2}/LICENSE +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/README.md +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/setup.cfg +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/__main__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/_compat.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/cli/arguments.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/cli/run.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/plugin/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/plugin/flow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/plugin/generator.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/plugin/implementationflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/plugin/loader.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/plugin/parser.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/plugin/simulationflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/project/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/project/attributes.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/project/base.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/project/design.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/project/fileset.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/project/project.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/simplhdl.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl/tools.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl.egg-info/dependency_links.txt +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl.egg-info/requires.txt +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_chisel/chisel.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_encrypt/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_encrypt/encrypt/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_encrypt/encrypt/encryptflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_fusesocparser/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_fusesocparser/fusesocparser.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/icarusflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/resources/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/resources/templates/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/resources/templates/icarus/Makefile.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/resources/templates/icarus/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/resources/templates/icarus/cmds.f.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/resources/templates/icarus/cocotb.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/resources/templates/icarus/simplhdl_iverilog_dump.v.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/resources/templates/icarus/sources.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/flake8/flake8flow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/lint/lintflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/resources/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/resources/templates/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/resources/templates/flake8/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/resources/templates/flake8/setup.cfg.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/resources/templates/verible/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/resources/templates/verible/rules.cfg.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/resources/templates/vsg/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/resources/templates/vsg/files.json.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/resources/templates/vsg/rules.yml.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/verible/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/verible/veribleflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/vsg/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/vsg/vsgflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/modelsim/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/modelsim/modelsimflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/Makefile.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/cocotb.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/dependencies.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/files.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/fileset.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/modelsim.tcl.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/project.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/run.do.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_parser/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_parser/simplhdlparser.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_peakrdl/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_peakrdl/systemrdl.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/quartusdse/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/quartusdse/quartusdseflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/quartusexport/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/quartusflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/resources/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/resources/templates/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/resources/templates/quartus/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/resources/templates/quartus/project.tcl.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/resources/templates/quartus/run.tcl.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_questasim/questasim/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_questasim/questasim/questasimflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_questasim/resources/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_questasim/resources/templates/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_questasim/resources/templates/questasim/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_questasim/resources/templates/questasim/modelsim.tcl.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_questasim/resources/templates/questasim/project.qrun.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_questasim/resources/templates/questasim/visualizer.tcl.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_questasim/resources/templates/questasim/vsim-run.do.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_rivierapro/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_rivierapro/resources/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_rivierapro/resources/templates/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_rivierapro/resources/templates/rivierapro/Makefile.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_rivierapro/resources/templates/rivierapro/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_rivierapro/resources/templates/rivierapro/cocotb.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_rivierapro/resources/templates/rivierapro/dependencies.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_rivierapro/resources/templates/rivierapro/files.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_rivierapro/resources/templates/rivierapro/fileset.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_rivierapro/resources/templates/rivierapro/project.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_rivierapro/rivierapro/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_rivierapro/rivierapro/rivieraproflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/Makefile.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/cocotb.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/dependencies.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/files.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/fileset.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/pli.tab.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/project.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/simv-run.do.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/synopsys_sim.setup.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/vcs.parameters.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/vcs/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/vcs/vcsflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/ipxact.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/vivado/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/vivado/project.tcl.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/vivado/run.tcl.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/vivado/steps.tcl.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/xsim/Makefile.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/xsim/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/xsim/cocotb.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/xsim/dependencies.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/xsim/files.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/xsim/fileset.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/xsim/project.mk.j2 +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/vivadoexport/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/vivadoflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/xsim/__init__.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/xsim/xsimflow.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/tests/test_design.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/tests/test_files.py +0 -0
- {simplhdl-0.12.1 → simplhdl-0.13.2}/tests/test_fileset.py +0 -0
|
@@ -73,6 +73,7 @@ entry-points."simplhdl.plugins".chisel_generator = "simplhdl_chisel.chisel:Chise
|
|
|
73
73
|
entry-points."simplhdl.plugins".encrypt = "simplhdl_encrypt.encrypt.encryptflow:EncryptFlow"
|
|
74
74
|
entry-points."simplhdl.plugins".fusersoc_parser = "simplhdl_fusesocparser.fusesocparser:FuseSocParser"
|
|
75
75
|
entry-points."simplhdl.plugins".icarus = "simplhdl_icarus.icarusflow:IcarusFlow"
|
|
76
|
+
entry-points."simplhdl.plugins".jinja2 = "simplhdl_jinja2.jinja2:Jinja2Generator"
|
|
76
77
|
entry-points."simplhdl.plugins".lint = "simplhdl_lint.lint.lintflow:LintFlow"
|
|
77
78
|
entry-points."simplhdl.plugins".modelsim = "simplhdl_modelsim.modelsim.modelsimflow:ModelSimFlow"
|
|
78
79
|
entry-points."simplhdl.plugins".peakrdl_generator = "simplhdl_peakrdl.systemrdl:PeakRdlGenerator"
|
|
@@ -108,6 +109,7 @@ lint.isort = { known-first-party = [
|
|
|
108
109
|
"simplhdl_encrypt",
|
|
109
110
|
"simplhdl_fusesocparser",
|
|
110
111
|
"simplhdl_icarus",
|
|
112
|
+
"simplhdl_jinja2",
|
|
111
113
|
"simplhdl_lint",
|
|
112
114
|
"simplhdl_modelsim",
|
|
113
115
|
"simplhdl_parser",
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import os
|
|
2
4
|
from argparse import Namespace
|
|
3
5
|
from pathlib import Path
|
|
@@ -28,11 +30,13 @@ class Info(FlowBase):
|
|
|
28
30
|
def import_matplotlib(self):
|
|
29
31
|
if "MPLCONFIGDIR" not in os.environ:
|
|
30
32
|
os.environ["MPLCONFIGDIR"] = str(self.builddir.resolve())
|
|
33
|
+
import matplotlib
|
|
31
34
|
import matplotlib.pyplot as plt
|
|
32
|
-
|
|
35
|
+
from matplotlib import cm
|
|
33
36
|
|
|
34
37
|
self.plt = plt
|
|
35
38
|
self.cm = cm
|
|
39
|
+
self.colormaps = matplotlib.colormaps
|
|
36
40
|
|
|
37
41
|
@classmethod
|
|
38
42
|
def parse_args(self, subparsers) -> None:
|
|
@@ -75,7 +79,7 @@ class Info(FlowBase):
|
|
|
75
79
|
list(set(getattr(n, "parent", None) for n in G.nodes() if getattr(n, "parent", None))),
|
|
76
80
|
key=lambda p: str(p),
|
|
77
81
|
)
|
|
78
|
-
cmap = self.
|
|
82
|
+
cmap = self.colormaps["tab20"].resampled(len(unique_parents))
|
|
79
83
|
parent_to_color = {p: cmap(i) for i, p in enumerate(unique_parents)}
|
|
80
84
|
node_colors = [parent_to_color.get(getattr(n, "parent", None), (0.5, 0.5, 0.5, 1.0)) for n in G.nodes()]
|
|
81
85
|
|
|
@@ -54,6 +54,10 @@ class Cocotb:
|
|
|
54
54
|
raise FileNotFoundError(f"{path}: not found")
|
|
55
55
|
return path
|
|
56
56
|
|
|
57
|
+
def pygpi_entry_point(self) -> str:
|
|
58
|
+
output = sh(["cocotb-config", "--pygpi-entry-point"])
|
|
59
|
+
return output.strip()
|
|
60
|
+
|
|
57
61
|
def pythonbin(self) -> str:
|
|
58
62
|
output = sh(["cocotb-config", "--python-bin"])
|
|
59
63
|
path = Path(output)
|
|
@@ -167,16 +171,23 @@ class Cocotb:
|
|
|
167
171
|
def env(self) -> dict[str, str]:
|
|
168
172
|
cocotb_version = Version(version("cocotb"))
|
|
169
173
|
e = os.environ.copy()
|
|
170
|
-
if cocotb_version >= Version("2.
|
|
174
|
+
if cocotb_version >= Version("2.1.0"):
|
|
175
|
+
e["COCOTB_TEST_MODULES"] = self.top
|
|
176
|
+
e["COCOTB_TOPLEVEL"] = self.dut
|
|
177
|
+
e["PYGPI_PYTHON_BIN"] = self.pythonbin()
|
|
178
|
+
e["COCOTB_RANDOM_SEED"] = str(self.seed)
|
|
179
|
+
e["GPI_USERS"] = f"{self.libpython()};{self.pygpi_entry_point()}"
|
|
180
|
+
elif cocotb_version >= Version("2.0.0"):
|
|
171
181
|
e["COCOTB_TEST_MODULES"] = self.top
|
|
172
182
|
e["COCOTB_TOPLEVEL"] = self.dut
|
|
173
183
|
e["PYGPI_PYTHON_BIN"] = self.pythonbin()
|
|
174
184
|
e["COCOTB_RANDOM_SEED"] = str(self.seed)
|
|
185
|
+
e["LIBPYTHON_LOC"] = self.libpython()
|
|
175
186
|
else:
|
|
176
187
|
e["MODULE"] = self.top
|
|
177
188
|
e["TOPLEVEL"] = self.dut
|
|
189
|
+
e["LIBPYTHON_LOC"] = self.libpython()
|
|
178
190
|
e["PYTHONPYCACHEPREFIX"] = "./pycache"
|
|
179
|
-
e["LIBPYTHON_LOC"] = self.libpython()
|
|
180
191
|
e["GPI_EXTRA"] = ""
|
|
181
192
|
if self.has_verilog and self.has_vhdl:
|
|
182
193
|
if self.duttype == VhdlFile:
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from enum import Enum
|
|
4
3
|
import logging
|
|
4
|
+
from enum import Enum
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import TYPE_CHECKING, Callable,
|
|
6
|
+
from typing import TYPE_CHECKING, Callable, Generator, Iterable, Type
|
|
7
7
|
from weakref import WeakValueDictionary
|
|
8
8
|
|
|
9
9
|
if TYPE_CHECKING:
|
|
@@ -448,3 +448,7 @@ class SystemRdlFile(File): ...
|
|
|
448
448
|
|
|
449
449
|
@FileFactory.register(extension=".tcl")
|
|
450
450
|
class TclFile(File): ...
|
|
451
|
+
|
|
452
|
+
|
|
453
|
+
@FileFactory.register(extension=".j2")
|
|
454
|
+
class Jinja2File(File): ...
|
|
@@ -10,6 +10,7 @@ from subprocess import PIPE, STDOUT, Popen
|
|
|
10
10
|
from time import sleep
|
|
11
11
|
from typing import Generator, Union
|
|
12
12
|
|
|
13
|
+
import jinja2
|
|
13
14
|
from jinja2 import Template
|
|
14
15
|
|
|
15
16
|
logger = logging.getLogger(__name__)
|
|
@@ -165,3 +166,26 @@ def chdir(directory: Path) -> Generator[Path, None, None]:
|
|
|
165
166
|
yield directory
|
|
166
167
|
finally:
|
|
167
168
|
os.chdir(old)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def jinja2_copy(src: Path, dest: Path, **kwargs) -> None:
|
|
172
|
+
"""
|
|
173
|
+
Copy a file or directory to a destination using Jinja2.
|
|
174
|
+
"""
|
|
175
|
+
template_loader = jinja2.FileSystemLoader(searchpath=src.parent)
|
|
176
|
+
template_env = jinja2.Environment(loader=template_loader, undefined=jinja2.StrictUndefined)
|
|
177
|
+
|
|
178
|
+
if src.is_file():
|
|
179
|
+
template = template_env.get_template(src.name)
|
|
180
|
+
text = template.render(**kwargs)
|
|
181
|
+
with src.open("r") as f:
|
|
182
|
+
src_text = f.read()
|
|
183
|
+
if text != src_text:
|
|
184
|
+
logger.debug(f"Render {src} to {dest}")
|
|
185
|
+
else:
|
|
186
|
+
logger.debug(f"Copy {src} to {dest}")
|
|
187
|
+
|
|
188
|
+
with dest.open("w") as f:
|
|
189
|
+
f.write(text)
|
|
190
|
+
else:
|
|
191
|
+
raise ValueError(f"{src} is not a file")
|
|
@@ -47,6 +47,7 @@ src/simplhdl_icarus/resources/templates/icarus/cmds.f.j2
|
|
|
47
47
|
src/simplhdl_icarus/resources/templates/icarus/cocotb.mk.j2
|
|
48
48
|
src/simplhdl_icarus/resources/templates/icarus/simplhdl_iverilog_dump.v.j2
|
|
49
49
|
src/simplhdl_icarus/resources/templates/icarus/sources.mk.j2
|
|
50
|
+
src/simplhdl_jinja2/jinja2.py
|
|
50
51
|
src/simplhdl_lint/__init__.py
|
|
51
52
|
src/simplhdl_lint/flake8/flake8flow.py
|
|
52
53
|
src/simplhdl_lint/lint/lintflow.py
|
|
@@ -6,6 +6,7 @@ chisel_generator = simplhdl_chisel.chisel:ChiselGenerator
|
|
|
6
6
|
encrypt = simplhdl_encrypt.encrypt.encryptflow:EncryptFlow
|
|
7
7
|
fusersoc_parser = simplhdl_fusesocparser.fusesocparser:FuseSocParser
|
|
8
8
|
icarus = simplhdl_icarus.icarusflow:IcarusFlow
|
|
9
|
+
jinja2 = simplhdl_jinja2.jinja2:Jinja2Generator
|
|
9
10
|
lint = simplhdl_lint.lint.lintflow:LintFlow
|
|
10
11
|
modelsim = simplhdl_modelsim.modelsim.modelsimflow:ModelSimFlow
|
|
11
12
|
peakrdl_generator = simplhdl_peakrdl.systemrdl:PeakRdlGenerator
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
from simplhdl.plugin import FlowBase, GeneratorBase
|
|
7
|
+
from simplhdl.project.files import Jinja2File
|
|
8
|
+
from simplhdl.utils import jinja2_copy
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Jinja2Generator(GeneratorBase):
|
|
14
|
+
def run(self, flow: FlowBase):
|
|
15
|
+
files = list(self.project.defaultDesign.files(type=Jinja2File))
|
|
16
|
+
if files:
|
|
17
|
+
logger.debug("Running Jinja2 Generator")
|
|
18
|
+
dest_dir = self.builddir.joinpath("jinja2")
|
|
19
|
+
dest_dir.mkdir(parents=True, exist_ok=True)
|
|
20
|
+
|
|
21
|
+
kwargs = {"os": os}
|
|
22
|
+
for file in files:
|
|
23
|
+
dest_file = dest_dir.joinpath(file.path.name).with_suffix("").resolve()
|
|
24
|
+
jinja2_copy(file.path, dest_file, **kwargs)
|
|
25
|
+
file._path = dest_file
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import logging
|
|
2
4
|
import os
|
|
3
5
|
import shutil
|
|
@@ -15,10 +17,10 @@ from simplhdl.project.files import (
|
|
|
15
17
|
QuartusQipFile,
|
|
16
18
|
QuartusQsfFile,
|
|
17
19
|
SystemVerilogFile,
|
|
18
|
-
|
|
20
|
+
UsedIn,
|
|
19
21
|
VerilogFile,
|
|
22
|
+
VerilogIncludeFile,
|
|
20
23
|
VhdlFile,
|
|
21
|
-
UsedIn,
|
|
22
24
|
)
|
|
23
25
|
from simplhdl_encrypt.encrypt.encryptflow import encrypt
|
|
24
26
|
|
|
@@ -59,25 +61,36 @@ class QuartusExportFlow(ImplementationFlow):
|
|
|
59
61
|
self.rootdir = self.directory_root()
|
|
60
62
|
|
|
61
63
|
def directory_root(self):
|
|
62
|
-
files =
|
|
64
|
+
files = []
|
|
63
65
|
for file in [f for f in self.project.defaultDesign.files(usedin=UsedIn.IMPLEMENTATION)]:
|
|
66
|
+
resolved = file.path.resolve()
|
|
64
67
|
if isinstance(file, QuartusQsfFile):
|
|
65
68
|
continue
|
|
66
69
|
elif isinstance(file, (ConstraintFile, QuartusQipFile)):
|
|
67
70
|
pass
|
|
68
71
|
elif isinstance(file, (HdlSearchPath, QuartusIpFile)):
|
|
69
72
|
continue
|
|
70
|
-
files
|
|
73
|
+
# Ignore files generated inside builddir when determining source root
|
|
74
|
+
if not resolved.is_relative_to(self.builddir.resolve()):
|
|
75
|
+
files.append(resolved)
|
|
71
76
|
return Path(os.path.commonpath(files))
|
|
72
77
|
|
|
73
78
|
def copy_files(self):
|
|
74
|
-
seen =
|
|
79
|
+
seen = {}
|
|
75
80
|
files = [f for f in self.project.defaultDesign.files(usedin=UsedIn.IMPLEMENTATION)]
|
|
76
81
|
for file in files:
|
|
77
82
|
fileid = str(file.path.resolve())
|
|
78
|
-
|
|
83
|
+
resolved_path = file.path.resolve()
|
|
84
|
+
|
|
85
|
+
# Determine destination based on structure or relative path existence
|
|
79
86
|
if self.args.structure == "flat":
|
|
80
87
|
dest = self.builddir.joinpath("src", file.path.name)
|
|
88
|
+
elif resolved_path.is_relative_to(self.rootdir):
|
|
89
|
+
dest = self.builddir.joinpath("src", resolved_path.relative_to(self.rootdir))
|
|
90
|
+
else:
|
|
91
|
+
# Fallback for builddir/generated files outside rootdir
|
|
92
|
+
dest = self.builddir.joinpath("src", file.path.name)
|
|
93
|
+
|
|
81
94
|
if fileid in seen:
|
|
82
95
|
file._path = seen.get(fileid)._path
|
|
83
96
|
continue
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
+
import os
|
|
4
5
|
import re
|
|
5
6
|
from pathlib import Path
|
|
6
7
|
from shutil import copy, copytree, ignore_patterns, rmtree
|
|
@@ -28,11 +29,11 @@ from simplhdl.project.files import (
|
|
|
28
29
|
QuartusQsysZipFile,
|
|
29
30
|
SdcFile,
|
|
30
31
|
SystemVerilogFile,
|
|
32
|
+
UsedIn,
|
|
31
33
|
VerilogFile,
|
|
32
34
|
VhdlFile,
|
|
33
|
-
UsedIn,
|
|
34
35
|
)
|
|
35
|
-
from simplhdl.utils import md5check, md5write, sh
|
|
36
|
+
from simplhdl.utils import jinja2_copy, md5check, md5write, sh
|
|
36
37
|
|
|
37
38
|
logger = logging.getLogger(__name__)
|
|
38
39
|
|
|
@@ -322,9 +323,9 @@ def copy_ipfile(file: QuartusIpFile, dest: Path) -> QuartusIpFile:
|
|
|
322
323
|
md5write(file.path, srcdir, filename=md5file)
|
|
323
324
|
else:
|
|
324
325
|
if not md5file.exists() or not md5check(file.path, filename=md5file):
|
|
325
|
-
logger.debug(f"Copy {file.path} to {destfile}")
|
|
326
326
|
rmtree(destdir, ignore_errors=True)
|
|
327
|
-
|
|
327
|
+
kwargs = {"os": os}
|
|
328
|
+
jinja2_copy(file.path, destfile, **kwargs)
|
|
328
329
|
md5write(file.path, filename=md5file)
|
|
329
330
|
file.__class__ = QuartusIpFile
|
|
330
331
|
file._path = destfile.resolve()
|
|
@@ -59,19 +59,28 @@ class VivadoExportFlow(ImplementationFlow):
|
|
|
59
59
|
def directory_root(self):
|
|
60
60
|
files = []
|
|
61
61
|
for file in [f for f in self.project.defaultDesign.files(usedin=UsedIn.IMPLEMENTATION)]:
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
resolved = file.path.resolve()
|
|
63
|
+
# Ignore files generated inside builddir when determining source root
|
|
64
|
+
if not resolved.is_relative_to(self.builddir.resolve()):
|
|
65
|
+
files.append(resolved)
|
|
66
|
+
return Path(os.path.commonpath(files)) if files else self.builddir
|
|
66
67
|
|
|
67
68
|
def copy_files(self):
|
|
68
69
|
seen = {}
|
|
69
70
|
files = [f for f in self.project.defaultDesign.files(usedin=UsedIn.IMPLEMENTATION)]
|
|
70
71
|
for file in files:
|
|
71
72
|
fileid = str(file.path.resolve())
|
|
72
|
-
|
|
73
|
+
resolved_path = file.path.resolve()
|
|
74
|
+
|
|
75
|
+
# Determine destination based on structure or relative path existence
|
|
73
76
|
if self.args.structure == "flat":
|
|
74
77
|
dest = self.builddir.joinpath("src", file.path.name)
|
|
78
|
+
elif resolved_path.is_relative_to(self.rootdir):
|
|
79
|
+
dest = self.builddir.joinpath("src", resolved_path.relative_to(self.rootdir))
|
|
80
|
+
else:
|
|
81
|
+
# Fallback for builddir/generated files outside rootdir
|
|
82
|
+
dest = self.builddir.joinpath("src", file.path.name)
|
|
83
|
+
|
|
75
84
|
if fileid in seen:
|
|
76
85
|
file._path = seen.get(fileid)._path
|
|
77
86
|
continue
|
|
@@ -93,6 +102,7 @@ class VivadoExportFlow(ImplementationFlow):
|
|
|
93
102
|
else:
|
|
94
103
|
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
95
104
|
shutil.copyfile(file.path, dest)
|
|
105
|
+
|
|
96
106
|
# Convert to relative path
|
|
97
107
|
file._path = dest
|
|
98
108
|
seen[fileid] = file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/resources/templates/icarus/Makefile.j2
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/resources/templates/icarus/__init__.py
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/resources/templates/icarus/cmds.f.j2
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/resources/templates/icarus/cocotb.mk.j2
RENAMED
|
File without changes
|
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_icarus/resources/templates/icarus/sources.mk.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/resources/templates/flake8/__init__.py
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/resources/templates/flake8/setup.cfg.j2
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/resources/templates/verible/__init__.py
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_lint/resources/templates/verible/rules.cfg.j2
RENAMED
|
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
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/Makefile.j2
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/__init__.py
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/cocotb.mk.j2
RENAMED
|
File without changes
|
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/files.j2
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/fileset.j2
RENAMED
|
File without changes
|
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/project.mk.j2
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_modelsim/resources/templates/modelsim/run.do.j2
RENAMED
|
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
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/resources/templates/quartus/__init__.py
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/resources/templates/quartus/project.tcl.j2
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_quartus/resources/templates/quartus/run.tcl.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_questasim/resources/templates/questasim/__init__.py
RENAMED
|
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
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_rivierapro/resources/templates/rivierapro/files.j2
RENAMED
|
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
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/dependencies.mk.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/synopsys_sim.setup.j2
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vcs/resources/templates/vcs/vcs.parameters.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/vivado/__init__.py
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/vivado/project.tcl.j2
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/vivado/run.tcl.j2
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/vivado/steps.tcl.j2
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/xsim/Makefile.j2
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/xsim/__init__.py
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/xsim/cocotb.mk.j2
RENAMED
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/xsim/dependencies.mk.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplhdl-0.12.1 → simplhdl-0.13.2}/src/simplhdl_vivado/resources/templates/xsim/project.mk.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|