SimplHDL 0.0.3__tar.gz → 0.0.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/PKG-INFO +2 -1
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/pyproject.toml +1 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/SimplHDL.egg-info/PKG-INFO +2 -1
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/SimplHDL.egg-info/SOURCES.txt +1 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/SimplHDL.egg-info/requires.txt +1 -0
- simplhdl-0.0.5/src/simplhdl/__init__.py +1 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/quartusflow.py +5 -1
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/questasim/questasimflow.py +15 -4
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/simulationflow.py +1 -1
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/vcs/vcsflow.py +27 -5
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/generators/spd.py +17 -10
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/info.py +64 -39
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/pyedaa/__init__.py +23 -1
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/pyedaa/fileset.py +22 -4
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/quartus/project.tcl.j2 +11 -18
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/questasim/Makefile.j2 +7 -5
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/rivierapro/Makefile.j2 +5 -5
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vcs/Makefile.j2 +4 -4
- simplhdl-0.0.5/src/simplhdl/resources/templates/vcs/vcs.parameters.j2 +3 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vivado/project.tcl.j2 +1 -1
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/xsim/Makefile.j2 +4 -4
- SimplHDL-0.0.3/src/simplhdl/__init__.py +0 -1
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/.github/workflows/publish.yml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/.gitignore +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/.readthedocs.yaml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/LICENSE +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/README.md +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/_static/simplhdl_dark.png +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/_static/simplhdl_light.png +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/_static/simplhdl_light_1.png +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/conf.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/drawing.svg +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/flows/ghdl.rst +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/flows/icarus.rst +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/flows/quartus.rst +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/flows/questasim.rst +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/flows/vcs.rst +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/flows/vivado.rst +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/flows/xsim.rst +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/flows.rst +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/index.rst +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/intel-ips.md +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/introduction.rst +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/plugins.rst +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/docs/requirements.txt +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/adder/adder.yml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/adder/hdl/adder.sv +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/adder/sim/testbench.sv +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/adder/sim/testbench.yml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/adder/syn/build.yml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/adder/syn/placement.xdc +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/adder/syn/timing.xdc +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/adder/syn/top.sv +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/alu.yml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/hdl/add.sv +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/hdl/alu.sv +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/hdl/mul.sv +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/hdl/sub.sv +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/alu_vip/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/alu_vip/agent.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/alu_vip/aluif.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/alu_vip/driver.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/alu_vip/monitor.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/alu_vip/sequenceitem.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/alu_vip/sequencer.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/clock_vip/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/clock_vip/agent.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/clock_vip/clockif.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/pyuvm.yml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/test/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/test/env.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/test/seq_lib.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/test/test.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/pyuvm/testbench.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/alu_vip/agent.svh +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/alu_vip/alu_vip.sv +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/alu_vip/alu_vip.yml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/alu_vip/driver.svh +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/alu_vip/env.svh +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/alu_vip/monitor.svh +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/alu_vip/sequence_item.svh +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/tb_env/seq_lib/add_seq.svh +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/tb_env/seq_lib/base_seq.svh +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/tb_env/tb_env.sv +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/tb_env/tb_env.yml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/tb_env/test/base_test.svh +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/tb_env/test/test_add.svh +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/testbench/alu_if.sv +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/testbench/testbench.sv +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/testbench/testbench.yml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/sim/uvm/testcases/test_add/test_add.yml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/syn/build.yml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/syn/placement.xdc +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/alu/syn/timing.xdc +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/hello/build.sbt +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/hello/hello.yml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/hello/src/main/scala/Hello.scala +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/hdl/hello/syn/build.yml +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/plugins/simple_parser/setup.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/plugins/simple_parser/src/simple_parser/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/examples/plugins/simple_parser/src/simple_parser/simple_parser.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/setup.cfg +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/SimplHDL.egg-info/dependency_links.txt +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/SimplHDL.egg-info/entry_points.txt +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/SimplHDL.egg-info/top_level.txt +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/__main__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/cocotb.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flow.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/implementationflow.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/modelsimflow.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/questasim/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/rivierapro/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/rivierapro/rivieraproflow.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/vcs/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/vivadoflow.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/xsim/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/flows/xsim/xsimflow.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/generator.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/generators/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/generators/chisel.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/generators/ipxact.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/generators/systemrdl.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/parser.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/parsers/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/parsers/fusesocparser.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/parsers/simplhdlparser.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/plugins.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/pyedaa/attributes.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/pyedaa/design.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/pyedaa/filetypes.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/pyedaa/project.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/pyedaa/vhdllibrary.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/repo.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/quartus/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/quartus/run.tcl.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/questasim/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/questasim/cocotb.mk.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/questasim/dependencies.mk.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/questasim/files.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/questasim/fileset.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/questasim/project.mk.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/rivierapro/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/rivierapro/cocotb.mk.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/rivierapro/dependencies.mk.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/rivierapro/files.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/rivierapro/fileset.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/rivierapro/project.mk.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vcs/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vcs/cocotb.mk.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vcs/dependencies.mk.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vcs/files.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vcs/fileset.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vcs/pli.tab.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vcs/project.mk.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vcs/synopsys_sim.setup.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vivado/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vivado/launch_run.sh.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vivado/run.tcl.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/vivado/steps.tcl.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/xsim/__init__.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/xsim/cocotb.mk.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/xsim/dependencies.mk.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/xsim/files.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/xsim/fileset.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/resources/templates/xsim/project.mk.j2 +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/simplhdl.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/tools.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/src/simplhdl/utils.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/tests/test_dummy.py +0 -0
- {SimplHDL-0.0.3 → simplhdl-0.0.5}/tox.ini +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: SimplHDL
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.5
|
|
4
4
|
Summary: A framework for simulating and implementing HDL designs
|
|
5
5
|
Author-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
|
|
6
6
|
Maintainer-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
|
|
@@ -51,6 +51,7 @@ Requires-Dist: types-PyYAML
|
|
|
51
51
|
Requires-Dist: argcomplete
|
|
52
52
|
Requires-Dist: jinja2
|
|
53
53
|
Requires-Dist: GitPython
|
|
54
|
+
Requires-Dist: rich
|
|
54
55
|
|
|
55
56
|
## Introduction
|
|
56
57
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: SimplHDL
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.5
|
|
4
4
|
Summary: A framework for simulating and implementing HDL designs
|
|
5
5
|
Author-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
|
|
6
6
|
Maintainer-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
|
|
@@ -51,6 +51,7 @@ Requires-Dist: types-PyYAML
|
|
|
51
51
|
Requires-Dist: argcomplete
|
|
52
52
|
Requires-Dist: jinja2
|
|
53
53
|
Requires-Dist: GitPython
|
|
54
|
+
Requires-Dist: rich
|
|
54
55
|
|
|
55
56
|
## Introduction
|
|
56
57
|
|
|
@@ -154,6 +154,7 @@ src/simplhdl/resources/templates/vcs/fileset.j2
|
|
|
154
154
|
src/simplhdl/resources/templates/vcs/pli.tab.j2
|
|
155
155
|
src/simplhdl/resources/templates/vcs/project.mk.j2
|
|
156
156
|
src/simplhdl/resources/templates/vcs/synopsys_sim.setup.j2
|
|
157
|
+
src/simplhdl/resources/templates/vcs/vcs.parameters.j2
|
|
157
158
|
src/simplhdl/resources/templates/vivado/__init__.py
|
|
158
159
|
src/simplhdl/resources/templates/vivado/launch_run.sh.j2
|
|
159
160
|
src/simplhdl/resources/templates/vivado/project.tcl.j2
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.0.5"
|
|
@@ -16,7 +16,8 @@ from ..resources.templates import quartus as templates
|
|
|
16
16
|
from ..utils import sh, generate_from_template
|
|
17
17
|
from ..pyedaa import (QuartusIPSpecificationFile, VerilogIncludeFile, VerilogSourceFile,
|
|
18
18
|
SystemVerilogSourceFile, VHDLSourceFile, ConstraintFile,
|
|
19
|
-
EDIFNetlistFile, NetlistFile, SettingFile, QuartusSignalTapFile
|
|
19
|
+
EDIFNetlistFile, NetlistFile, SettingFile, QuartusSignalTapFile,
|
|
20
|
+
QuartusIniFile, QuartusQIPSpecificationFile, QuartusQSYSSpecificationFile)
|
|
20
21
|
from ..pyedaa.project import Project
|
|
21
22
|
from ..pyedaa.attributes import UsedIn
|
|
22
23
|
|
|
@@ -94,6 +95,9 @@ class QuartusFlow(ImplementationFlow):
|
|
|
94
95
|
NetlistFile=NetlistFile,
|
|
95
96
|
SettingFile=SettingFile,
|
|
96
97
|
QuartusSignalTapFile=QuartusSignalTapFile,
|
|
98
|
+
QuartusQIPSpecificationFile=QuartusQIPSpecificationFile,
|
|
99
|
+
QuartusQSYSSpecificationFile=QuartusQSYSSpecificationFile,
|
|
100
|
+
QuartusIniFile=QuartusIniFile,
|
|
97
101
|
project=self.project,
|
|
98
102
|
UsedIn=UsedIn)
|
|
99
103
|
template = environment.get_template('run.tcl.j2')
|
|
@@ -3,7 +3,7 @@ import logging
|
|
|
3
3
|
import shutil
|
|
4
4
|
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Any, List, Dict
|
|
6
|
+
from typing import Any, List, Dict, Optional
|
|
7
7
|
from argparse import Namespace
|
|
8
8
|
from jinja2 import Template
|
|
9
9
|
from simplhdl.pyedaa.project import Project
|
|
@@ -143,8 +143,6 @@ class QuestaSimFlow(SimulationFlow):
|
|
|
143
143
|
args = set()
|
|
144
144
|
if self.args.verbose == 0:
|
|
145
145
|
args.add('-quiet')
|
|
146
|
-
for name in self.get_libraries().keys():
|
|
147
|
-
args.add(f"-L {name}")
|
|
148
146
|
for name, value in self.project.Defines.items():
|
|
149
147
|
args.add(f"+define+{name}={value}")
|
|
150
148
|
return ' '.join(list(args) + [self.args.vlog_args])
|
|
@@ -171,13 +169,16 @@ class QuestaSimFlow(SimulationFlow):
|
|
|
171
169
|
args.add(f"-g{name}={value}")
|
|
172
170
|
for name, value in self.project.Parameters.items():
|
|
173
171
|
args.add(f"-g{name}={value}")
|
|
174
|
-
if self.args.gui or self.cocotb.enabled:
|
|
172
|
+
if self.args.gui or self.args.do or self.args.wave or self.cocotb.enabled:
|
|
175
173
|
args.add('+acc=npr')
|
|
176
174
|
return ' '.join(list(args) + [self.args.vopt_args])
|
|
177
175
|
|
|
178
176
|
def vsim_args(self) -> str:
|
|
179
177
|
args = set()
|
|
180
178
|
args.add(f"-sv_seed {self.args.seed}")
|
|
179
|
+
timescale = self.timescale()
|
|
180
|
+
if timescale:
|
|
181
|
+
args.add(timescale)
|
|
181
182
|
if self.args.verbose == 0:
|
|
182
183
|
args.add('-quiet')
|
|
183
184
|
for name, value in self.project.PlusArgs.items():
|
|
@@ -228,6 +229,16 @@ class QuestaSimFlow(SimulationFlow):
|
|
|
228
229
|
# NOTE: Continue if no hook is registret
|
|
229
230
|
pass
|
|
230
231
|
|
|
232
|
+
def timescale(self) -> Optional[str]:
|
|
233
|
+
"""
|
|
234
|
+
Sets the timescale for VHDL based on the Verilog timescale
|
|
235
|
+
resolution.
|
|
236
|
+
"""
|
|
237
|
+
if self.args.timescale.endswith('ps'):
|
|
238
|
+
return "-t ps"
|
|
239
|
+
elif self.args.timescale.endswith('fs'):
|
|
240
|
+
return "-t fs"
|
|
241
|
+
|
|
231
242
|
def is_tool_setup(self) -> None:
|
|
232
243
|
if (shutil.which('vlog') is None or
|
|
233
244
|
shutil.which('vsim') is None or
|
|
@@ -97,7 +97,7 @@ class SimulationFlow(FlowBase):
|
|
|
97
97
|
name = md5sum(fileset.Name)
|
|
98
98
|
dependencies = []
|
|
99
99
|
for language_fileset in [f for f in filelist if f.stem.startswith(name)]:
|
|
100
|
-
for child in fileset.
|
|
100
|
+
for child in fileset.Dependencies(usedin='simulation'):
|
|
101
101
|
child_name = md5sum(child.Name)
|
|
102
102
|
dependencies += [append_suffix(f, '.com').name for f in filelist
|
|
103
103
|
if f.stem.startswith(child_name)]
|
|
@@ -3,6 +3,7 @@ import os
|
|
|
3
3
|
import logging
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
import shutil
|
|
6
|
+
import re
|
|
6
7
|
|
|
7
8
|
from typing import Dict, Any, List
|
|
8
9
|
from jinja2 import Template
|
|
@@ -95,13 +96,34 @@ class VcsFlow(SimulationFlow):
|
|
|
95
96
|
globals['vhdlan_args'] = self.vhdlan_args()
|
|
96
97
|
globals['vcs_args'] = self.vcs_args()
|
|
97
98
|
globals['simv_args'] = self.simv_args()
|
|
99
|
+
globals['parameters'] = {**self.project.Generics, **self.project.Parameters}
|
|
100
|
+
globals['format'] = self.format
|
|
98
101
|
return globals
|
|
99
102
|
|
|
103
|
+
def format(self, value: str) -> str:
|
|
104
|
+
"""
|
|
105
|
+
Format the parameter value in relation to it's type.
|
|
106
|
+
"""
|
|
107
|
+
isformat_a = re.compile(r"^\d+#[0-9a-gA-G]+#")
|
|
108
|
+
isformat_b = re.compile(r"^\d*'(h|d|b)[0-9a-fA-F]+")
|
|
109
|
+
isformat_c = re.compile(r"^\d+\.\d+")
|
|
110
|
+
|
|
111
|
+
if (
|
|
112
|
+
value.isnumeric() or
|
|
113
|
+
isformat_a.match(value) or
|
|
114
|
+
isformat_b.match(value) or
|
|
115
|
+
isformat_c.match(value)
|
|
116
|
+
):
|
|
117
|
+
return value
|
|
118
|
+
else:
|
|
119
|
+
return f'"{value}"'
|
|
120
|
+
|
|
100
121
|
def get_project_templates(self, environment) -> List[Template]:
|
|
101
122
|
return [
|
|
102
123
|
environment.get_template('Makefile.j2'),
|
|
103
124
|
environment.get_template('synopsys_sim.setup.j2'),
|
|
104
|
-
environment.get_template('project.mk.j2')
|
|
125
|
+
environment.get_template('project.mk.j2'),
|
|
126
|
+
environment.get_template('vcs.parameters.j2'),
|
|
105
127
|
]
|
|
106
128
|
|
|
107
129
|
def get_cocotb_templates(self, environment):
|
|
@@ -161,10 +183,10 @@ class VcsFlow(SimulationFlow):
|
|
|
161
183
|
args.add('-debug_access+all')
|
|
162
184
|
if self.is_verdi():
|
|
163
185
|
args.add('-kdb')
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
186
|
+
parameters = {**self.project.Generics, **self.project.Parameters}
|
|
187
|
+
if parameters:
|
|
188
|
+
args.add('-gfile vcs.parameters -lca')
|
|
189
|
+
|
|
168
190
|
return ' '.join(list(args) + [self.args.vcs_args])
|
|
169
191
|
|
|
170
192
|
def simv_args(self) -> str:
|
|
@@ -10,7 +10,8 @@ from shutil import copy, copytree
|
|
|
10
10
|
|
|
11
11
|
from ..pyedaa import (
|
|
12
12
|
File, SystemVerilogSourceFile, VHDLSourceFile, VerilogSourceFile,
|
|
13
|
-
QuartusIPSpecificationFile, HDLLibrary, ConstraintFile, HDLSourceFile
|
|
13
|
+
QuartusIPSpecificationFile, HDLLibrary, ConstraintFile, HDLSourceFile,
|
|
14
|
+
QuartusIPCompressedSpecificationFile, QuartusQSYSSpecificationFile
|
|
14
15
|
)
|
|
15
16
|
from ..pyedaa.fileset import FileSet
|
|
16
17
|
from ..flow import FlowBase, FlowCategory, FlowTools
|
|
@@ -111,14 +112,15 @@ class Spd:
|
|
|
111
112
|
@GeneratorFactory.register('QuartusIP')
|
|
112
113
|
class QuartusIP(GeneratorBase):
|
|
113
114
|
|
|
114
|
-
def unpack_ip(self, filename: QuartusIPSpecificationFile) -> QuartusIPSpecificationFile:
|
|
115
|
+
def unpack_ip(self, filename: QuartusIPSpecificationFile) -> QuartusIPSpecificationFile: # noqa: C901
|
|
115
116
|
ipdir = self.builddir.joinpath('ips')
|
|
116
117
|
dest = ipdir.joinpath(filename.Path.name).with_suffix('')
|
|
117
118
|
md5file = dest.with_suffix('.md5')
|
|
118
119
|
ipdir.mkdir(exist_ok=True)
|
|
119
|
-
if filename.
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
if filename.FileType == QuartusQSYSSpecificationFile:
|
|
121
|
+
pass
|
|
122
|
+
|
|
123
|
+
elif filename.FileType == QuartusIPCompressedSpecificationFile:
|
|
122
124
|
update = True
|
|
123
125
|
if md5file.exists():
|
|
124
126
|
update = not md5check(filename.Path, filename=md5file)
|
|
@@ -127,7 +129,14 @@ class QuartusIP(GeneratorBase):
|
|
|
127
129
|
zip.extractall(ipdir)
|
|
128
130
|
md5write(filename.Path, filename=md5file)
|
|
129
131
|
logger.debug(f"Copy {filename.Path} to {dest}")
|
|
130
|
-
|
|
132
|
+
|
|
133
|
+
if filename.Path.suffix == '.zip':
|
|
134
|
+
filename._path = dest.absolute()
|
|
135
|
+
else:
|
|
136
|
+
filename._path = dest.with_suffix('.ip').absolute()
|
|
137
|
+
filename._fileType = QuartusIPSpecificationFile
|
|
138
|
+
|
|
139
|
+
elif filename.FileType == QuartusIPSpecificationFile:
|
|
131
140
|
update = True
|
|
132
141
|
dir = filename.Path.with_suffix('')
|
|
133
142
|
if dir.exists():
|
|
@@ -140,10 +149,8 @@ class QuartusIP(GeneratorBase):
|
|
|
140
149
|
copytree(str(dir), str(dest.with_suffix('')), dirs_exist_ok=True)
|
|
141
150
|
md5write(filename.Path, dir, filename=md5file)
|
|
142
151
|
logger.debug(f"Copy {filename.Path} to {dest}")
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
return filename
|
|
146
|
-
filename._path = dest.absolute()
|
|
152
|
+
filename._path = dest.with_suffix('.ip').absolute()
|
|
153
|
+
|
|
147
154
|
return filename
|
|
148
155
|
|
|
149
156
|
def run(self, flow: FlowBase):
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
from argparse import Namespace
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from rich.console import Console
|
|
4
|
+
from rich.tree import Tree
|
|
5
|
+
from rich.style import Style
|
|
6
|
+
|
|
7
|
+
from simplhdl.pyedaa.project import Project
|
|
1
8
|
from .flow import FlowBase, FlowFactory
|
|
2
9
|
from .pyedaa.attributes import UsedIn
|
|
3
10
|
from .pyedaa.fileset import FileSet
|
|
@@ -6,6 +13,16 @@ from .pyedaa.fileset import FileSet
|
|
|
6
13
|
@FlowFactory.register('info')
|
|
7
14
|
class Info(FlowBase):
|
|
8
15
|
|
|
16
|
+
def __init__(self, name, args: Namespace, project: Project, builddir: Path):
|
|
17
|
+
super().__init__(name, args, project, builddir)
|
|
18
|
+
self.console = Console()
|
|
19
|
+
self.style = {
|
|
20
|
+
'fileset': Style(color="color(4)", reverse=True),
|
|
21
|
+
'ifile': Style(color="color(2)", reverse=False),
|
|
22
|
+
'sfile': Style(color="color(3)", reverse=False),
|
|
23
|
+
'file': Style(color="default", reverse=False),
|
|
24
|
+
}
|
|
25
|
+
|
|
9
26
|
@classmethod
|
|
10
27
|
def parse_args(self, subparsers) -> None:
|
|
11
28
|
parser = subparsers.add_parser('info', help='Project infomations')
|
|
@@ -48,90 +65,98 @@ class Info(FlowBase):
|
|
|
48
65
|
self.print_info()
|
|
49
66
|
|
|
50
67
|
def print_files(self) -> None:
|
|
51
|
-
print('FILES:')
|
|
68
|
+
self.console.print('FILES:')
|
|
52
69
|
for file in self.project.DefaultDesign.Files():
|
|
53
|
-
print(f"{file.Path}")
|
|
70
|
+
self.console.print(f"{file.Path}")
|
|
54
71
|
|
|
55
|
-
def print_fileset(self, fileset: FileSet, level:
|
|
56
|
-
indent = ' '*level
|
|
57
|
-
|
|
72
|
+
def print_fileset(self, fileset: FileSet, level: Tree) -> None:
|
|
73
|
+
# indent = ' '*level
|
|
74
|
+
tree = level.add(f"[bold]{fileset.Name}[/bold] ({fileset.VHDLLibrary})", style=self.style['fileset'])
|
|
58
75
|
for file in fileset.GetFiles():
|
|
59
|
-
|
|
76
|
+
if "implementation" in file[UsedIn] and "simulation" not in file[UsedIn]:
|
|
77
|
+
style = self.style['ifile']
|
|
78
|
+
elif "simulation" in file[UsedIn] and "implementation" not in file[UsedIn]:
|
|
79
|
+
style = self.style['sfile']
|
|
80
|
+
else:
|
|
81
|
+
style = self.style['file']
|
|
82
|
+
|
|
83
|
+
tree.add(f"{file.Path}", style=style)
|
|
60
84
|
for child_filset in fileset.FileSets.values():
|
|
61
|
-
self.print_fileset(child_filset,
|
|
85
|
+
self.print_fileset(child_filset, tree)
|
|
62
86
|
|
|
63
87
|
def print_filesets(self) -> None:
|
|
64
|
-
|
|
88
|
+
tree = Tree('FILESETS:')
|
|
65
89
|
for fileset in self.project.DefaultDesign.FileSets.values():
|
|
66
|
-
self.print_fileset(fileset,
|
|
90
|
+
self.print_fileset(fileset, tree)
|
|
91
|
+
self.console.print(tree)
|
|
67
92
|
|
|
68
93
|
def print_hooks(self) -> None:
|
|
69
|
-
print('HOOKS:')
|
|
94
|
+
self.console.print('HOOKS:')
|
|
70
95
|
for name, value in self.project.Hooks.items():
|
|
71
|
-
print(f" - {name}: {value}")
|
|
96
|
+
self.console.print(f" - {name}: {value}")
|
|
72
97
|
|
|
73
98
|
def print_libraries(self) -> None:
|
|
74
|
-
print('LIBRARIES:')
|
|
99
|
+
self.console.print('LIBRARIES:')
|
|
75
100
|
for library in self.project.DefaultDesign.VHDLLibraries.values():
|
|
76
|
-
print(f" - {library.Name}")
|
|
101
|
+
self.console.print(f" - {library.Name}")
|
|
77
102
|
|
|
78
103
|
def print_parameters(self) -> None:
|
|
79
|
-
print('PARAMETERS')
|
|
104
|
+
self.console.print('PARAMETERS')
|
|
80
105
|
for name, value in self.project.Parameters.items():
|
|
81
|
-
print(f" - {name}: {value}")
|
|
106
|
+
self.console.print(f" - {name}: {value}")
|
|
82
107
|
|
|
83
108
|
def print_generics(self) -> None:
|
|
84
|
-
print('GENERICS')
|
|
109
|
+
self.console.print('GENERICS')
|
|
85
110
|
for name, value in self.project.Generics.items():
|
|
86
|
-
print(f" - {name}: {value}")
|
|
111
|
+
self.console.print(f" - {name}: {value}")
|
|
87
112
|
|
|
88
113
|
def print_defines(self) -> None:
|
|
89
|
-
print('DEFINES')
|
|
114
|
+
self.console.print('DEFINES')
|
|
90
115
|
for name, value in self.project.Defines.items():
|
|
91
|
-
print(f" - {name}: {value}")
|
|
116
|
+
self.console.print(f" - {name}: {value}")
|
|
92
117
|
|
|
93
118
|
def print_plusargs(self) -> None:
|
|
94
|
-
print('PLUSARGS')
|
|
119
|
+
self.console.print('PLUSARGS')
|
|
95
120
|
for name, value in self.project.PlusArgs.items():
|
|
96
|
-
print(f" - {name}: {value}")
|
|
121
|
+
self.console.print(f" - {name}: {value}")
|
|
97
122
|
|
|
98
123
|
def print_toplevels(self) -> None:
|
|
99
|
-
print('TOPLEVELS')
|
|
124
|
+
self.console.print('TOPLEVELS')
|
|
100
125
|
for top in self.project.DefaultDesign.TopLevel.split():
|
|
101
|
-
print(f" - {top}")
|
|
126
|
+
self.console.print(f" - {top}")
|
|
102
127
|
|
|
103
128
|
def print_resources(self) -> None:
|
|
104
|
-
print('RESOURCES')
|
|
129
|
+
self.console.print('RESOURCES')
|
|
105
130
|
for resource in self.project.DefaultDesign.ExternalVHDLLibraries.values():
|
|
106
|
-
print(f" - {resource.Name}: {resource.Path}")
|
|
131
|
+
self.console.print(f" - {resource.Name}: {resource.Path}")
|
|
107
132
|
|
|
108
133
|
def print_project(self) -> None:
|
|
109
|
-
print('PROJECTNAME')
|
|
110
|
-
print(f" - {self.project.Name}")
|
|
134
|
+
self.console.print('PROJECTNAME')
|
|
135
|
+
self.console.print(f" - {self.project.Name}")
|
|
111
136
|
|
|
112
137
|
def print_part(self) -> None:
|
|
113
|
-
print('PART')
|
|
114
|
-
print(f" - {self.project.Part}")
|
|
138
|
+
self.console.print('PART')
|
|
139
|
+
self.console.print(f" - {self.project.Part}")
|
|
115
140
|
|
|
116
141
|
def print_info(self) -> None:
|
|
117
142
|
self.print_project()
|
|
118
|
-
print()
|
|
143
|
+
self.console.print()
|
|
119
144
|
self.print_part()
|
|
120
|
-
print()
|
|
145
|
+
self.console.print()
|
|
121
146
|
self.print_toplevels()
|
|
122
|
-
print()
|
|
147
|
+
self.console.print()
|
|
123
148
|
self.print_plusargs()
|
|
124
|
-
print()
|
|
149
|
+
self.console.print()
|
|
125
150
|
self.print_defines()
|
|
126
|
-
print()
|
|
151
|
+
self.console.print()
|
|
127
152
|
self.print_parameters()
|
|
128
|
-
print()
|
|
153
|
+
self.console.print()
|
|
129
154
|
self.print_generics()
|
|
130
|
-
print()
|
|
155
|
+
self.console.print()
|
|
131
156
|
self.print_hooks()
|
|
132
|
-
print()
|
|
157
|
+
self.console.print()
|
|
133
158
|
self.print_resources()
|
|
134
|
-
print()
|
|
159
|
+
self.console.print()
|
|
135
160
|
self.print_libraries()
|
|
136
|
-
print()
|
|
161
|
+
self.console.print()
|
|
137
162
|
self.print_filesets()
|
|
@@ -47,7 +47,10 @@ class HDLSourceFile(pm.HDLSourceFile, FileMixIn):
|
|
|
47
47
|
|
|
48
48
|
@property
|
|
49
49
|
def Library(self) -> HDLLibrary:
|
|
50
|
-
|
|
50
|
+
if self._library is not None:
|
|
51
|
+
return self._library
|
|
52
|
+
elif self.FileSet.VHDLLibrary is not None:
|
|
53
|
+
return self.FileSet.VHDLLibrary
|
|
51
54
|
|
|
52
55
|
@Library.setter
|
|
53
56
|
def Library(self, value) -> None:
|
|
@@ -128,6 +131,25 @@ class QuartusIPSpecificationFile(IPSpecificationFile):
|
|
|
128
131
|
pass
|
|
129
132
|
|
|
130
133
|
|
|
134
|
+
class QuartusIPCompressedSpecificationFile(QuartusIPSpecificationFile):
|
|
135
|
+
pass
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
class QuartusQSYSSpecificationFile(QuartusIPSpecificationFile):
|
|
139
|
+
pass
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
class QuartusQIPSpecificationFile(QuartusIPSpecificationFile):
|
|
143
|
+
pass
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
class QuartusIniFile(File):
|
|
147
|
+
def _registerAttributes(self):
|
|
148
|
+
super()._registerAttributes()
|
|
149
|
+
FileMixIn._registerAttributes(self)
|
|
150
|
+
self[UsedIn] = {'implementation'}
|
|
151
|
+
|
|
152
|
+
|
|
131
153
|
class VivadoIPSpecificationFile(IPSpecificationFile):
|
|
132
154
|
pass
|
|
133
155
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import pyEDAA.ProjectModel as pm # type: ignore
|
|
2
|
+
from simplhdl.pyedaa.attributes import UsedIn
|
|
3
|
+
from simplhdl.pyedaa import File
|
|
2
4
|
|
|
3
|
-
from typing import Dict, Generator
|
|
5
|
+
from typing import Dict, Generator, List, Optional
|
|
4
6
|
|
|
5
7
|
|
|
6
8
|
class FileSet(pm.FileSet):
|
|
@@ -31,7 +33,7 @@ class FileSet(pm.FileSet):
|
|
|
31
33
|
def VHDLLibrary(self, value: 'VHDLLibrary') -> None:
|
|
32
34
|
self._vhdlLibrary = value
|
|
33
35
|
|
|
34
|
-
def GetFiles(self) -> Generator[
|
|
36
|
+
def GetFiles(self) -> Generator[File, None, None]:
|
|
35
37
|
for file in self._files:
|
|
36
38
|
yield file
|
|
37
39
|
|
|
@@ -44,10 +46,26 @@ class FileSet(pm.FileSet):
|
|
|
44
46
|
libraries.update(fileset.VHDLLibraries)
|
|
45
47
|
return libraries
|
|
46
48
|
|
|
47
|
-
def InsertFile(self, position: int, file:
|
|
49
|
+
def InsertFile(self, position: int, file: File) -> None:
|
|
48
50
|
# file.FileSet = self
|
|
49
51
|
self._files.insert(position, file)
|
|
50
52
|
|
|
51
|
-
def InsertFileAfter(self, listfile:
|
|
53
|
+
def InsertFileAfter(self, listfile: File, newfile: File) -> None:
|
|
52
54
|
position = self._files.index(listfile)
|
|
53
55
|
self.InsertFile(position, newfile)
|
|
56
|
+
|
|
57
|
+
def Dependencies(self, usedin: Optional[str] = None, isrecursive: bool = False) -> List['FileSet']:
|
|
58
|
+
"""
|
|
59
|
+
Return a list of filesets that this fileset depends on. if dependent fileset is empty search recursive
|
|
60
|
+
in children until a fileset that is not empty is found.
|
|
61
|
+
"""
|
|
62
|
+
if isrecursive:
|
|
63
|
+
files = [f for f in self.GetFiles()]
|
|
64
|
+
if usedin:
|
|
65
|
+
files = [f for f in files if usedin in f[UsedIn]]
|
|
66
|
+
if files:
|
|
67
|
+
return [self]
|
|
68
|
+
dependencies = list()
|
|
69
|
+
for fileset in self.FileSets.values():
|
|
70
|
+
dependencies += fileset.Dependencies(usedin=usedin, isrecursive=True)
|
|
71
|
+
return dependencies
|
|
@@ -14,33 +14,26 @@ set_global_assignment -name VERILOG_MACRO "{{define}}={{value}}"
|
|
|
14
14
|
{% for file in project.DefaultDesign.Files() if 'implementation' in file[UsedIn] %}
|
|
15
15
|
{% if file.FileType == VerilogIncludeFile %}
|
|
16
16
|
set_global_assignment -name VERILOG_INCLUDE_FILE "{{file.Path}}"
|
|
17
|
-
{%
|
|
18
|
-
{% if file.FileType == SystemVerilogSourceFile %}
|
|
17
|
+
{% elif file.FileType == SystemVerilogSourceFile %}
|
|
19
18
|
set_global_assignment -name SYSTEMVERILOG_FILE "{{file.Path}}"
|
|
20
|
-
{%
|
|
21
|
-
{% if file.FileType == VerilogSourceFile %}
|
|
19
|
+
{% elif file.FileType == VerilogSourceFile %}
|
|
22
20
|
set_global_assignment -name VERILOG_FILE "{{file.Path}}"
|
|
23
|
-
{%
|
|
24
|
-
{% if file.FileType == VHDLSourceFile %}
|
|
21
|
+
{% elif file.FileType == VHDLSourceFile %}
|
|
25
22
|
set_global_assignment -name VHDL_FILE "{{file.Path}}"
|
|
26
|
-
{%
|
|
27
|
-
{% if file.FileType == ConstraintFile %}
|
|
23
|
+
{% elif file.FileType == ConstraintFile %}
|
|
28
24
|
set_global_assignment -name SDC_FILE "{{file.Path}}"
|
|
29
|
-
{%
|
|
30
|
-
{% if file.FileType == TCLSourceFile %}
|
|
25
|
+
{% elif file.FileType == TCLSourceFile %}
|
|
31
26
|
set_global_assignment -name TCL_FILE "{{file.Path}}"
|
|
32
|
-
{%
|
|
33
|
-
{% if file.FileType == QuartusIPSpecificationFile and file.Path.suffix == '.ip' %}
|
|
27
|
+
{% elif file.FileType == QuartusIPSpecificationFile %}
|
|
34
28
|
set_global_assignment -name IP_FILE "{{file.Path}}"
|
|
35
|
-
{%
|
|
36
|
-
{% if file.FileType == QuartusIPSpecificationFile and file.Path.suffix == '.qip' %}
|
|
29
|
+
{% elif file.FileType == QuartusQIPSpecificationFile %}
|
|
37
30
|
set_global_assignment -name QIP_FILE "{{file.Path}}"
|
|
38
|
-
{%
|
|
39
|
-
{% if file.FileType == QuartusIPSpecificationFile and file.Path.suffix == '.qsys' %}
|
|
31
|
+
{% elif file.FileType == QuartusQSYSSpecificationFile %}
|
|
40
32
|
set_global_assignment -name QSYS_FILE "{{file.Path}}"
|
|
41
|
-
{%
|
|
42
|
-
{% if file.FileType == SettingFile and file.Path.suffix == '.qsf' %}
|
|
33
|
+
{% elif file.FileType == SettingFile and file.Path.suffix == '.qsf' %}
|
|
43
34
|
source "{{file.Path}}"
|
|
35
|
+
{% elif file.FileType == QuartusIniFile %}
|
|
36
|
+
file copy -force "{{file.Path}}" "quartus.ini"
|
|
44
37
|
{% endif %}
|
|
45
38
|
{% endfor %}
|
|
46
39
|
|
|
@@ -6,11 +6,11 @@ VOPT := vopt
|
|
|
6
6
|
VSIM := vsim
|
|
7
7
|
|
|
8
8
|
VLIB_FLAGS :=
|
|
9
|
-
VMAP_FLAGS := {{vmap_args}}
|
|
10
|
-
VCOM_FLAGS := {{vcom_args}}
|
|
11
|
-
VLOG_FLAGS := {{vlog_args}}
|
|
12
|
-
VOPT_FLAGS := {{vopt_args}}
|
|
13
|
-
VSIM_FLAGS := {{vsim_args}}
|
|
9
|
+
VMAP_FLAGS := {{vmap_args|replace('#', '\#')}}
|
|
10
|
+
VCOM_FLAGS := {{vcom_args|replace('#', '\#')}}
|
|
11
|
+
VLOG_FLAGS := {{vlog_args|replace('#', '\#')}}
|
|
12
|
+
VOPT_FLAGS := {{vopt_args|replace('#', '\#')}}
|
|
13
|
+
VSIM_FLAGS := {{vsim_args|replace('#', '\#')}}
|
|
14
14
|
|
|
15
15
|
VOPT_DESIGN ?= simvopt
|
|
16
16
|
|
|
@@ -29,6 +29,8 @@ endif
|
|
|
29
29
|
simulate: $(VOPT_DESIGN)
|
|
30
30
|
$(VSIM) $(VSIM_FLAGS) $< -c $(DO_CMD)
|
|
31
31
|
|
|
32
|
+
elaborate: $(VOPT_DESIGN)
|
|
33
|
+
|
|
32
34
|
$(VOPT_DESIGN): compile
|
|
33
35
|
$(VOPT) $(VOPT_FLAGS) $(TOPLEVELS) -o $@
|
|
34
36
|
|
|
@@ -7,11 +7,11 @@ VOPT := :
|
|
|
7
7
|
VSIM := vsim
|
|
8
8
|
|
|
9
9
|
VLIB_FLAGS :=
|
|
10
|
-
VMAP_FLAGS := {{vmap_args}}
|
|
11
|
-
VCOM_FLAGS := {{vcom_args}}
|
|
12
|
-
VLOG_FLAGS := {{vlog_args}}
|
|
13
|
-
VOPT_FLAGS := {{vopt_args}}
|
|
14
|
-
VSIM_FLAGS := {{vsim_args}}
|
|
10
|
+
VMAP_FLAGS := {{vmap_args|replace('#', '\#')}}
|
|
11
|
+
VCOM_FLAGS := {{vcom_args|replace('#', '\#')}}
|
|
12
|
+
VLOG_FLAGS := {{vlog_args|replace('#', '\#')}}
|
|
13
|
+
VOPT_FLAGS := {{vopt_args|replace('#', '\#')}}
|
|
14
|
+
VSIM_FLAGS := {{vsim_args|replace('#', '\#')}}
|
|
15
15
|
|
|
16
16
|
VOPT_DESIGN ?= simvopt
|
|
17
17
|
|
|
@@ -8,10 +8,10 @@ UVM := uvm.com
|
|
|
8
8
|
UVM :=
|
|
9
9
|
{% endif %}
|
|
10
10
|
|
|
11
|
-
VLOGAN_FLAGS := -full64 +warn=noLNX_OS_VERUN {{vlogan_args}}
|
|
12
|
-
VHDLAN_FLAGS := -full64 {{vhdlan_args}}
|
|
13
|
-
VCS_FLAGS := -full64 -licqueue +warn=noLINX_KRNL {{vcs_args}}
|
|
14
|
-
SIMV_FLAGS := -licqueue {{simv_args}}
|
|
11
|
+
VLOGAN_FLAGS := -full64 +warn=noLNX_OS_VERUN {{vlogan_args|replace('#', '\#')}}
|
|
12
|
+
VHDLAN_FLAGS := -full64 {{vhdlan_args|replace('#', '\#')}}
|
|
13
|
+
VCS_FLAGS := -full64 -licqueue +warn=noLINX_KRNL {{vcs_args|replace('#', '\#')}}
|
|
14
|
+
SIMV_FLAGS := -licqueue {{simv_args|replace('#', '\#')}}
|
|
15
15
|
|
|
16
16
|
include project.mk
|
|
17
17
|
-include cocotb.mk
|
|
@@ -85,7 +85,7 @@ read_verilog -sv "{{file.Path}}"
|
|
|
85
85
|
{% elif file.FileType == VerilogSourceFile %}
|
|
86
86
|
read_verilog "{{file.Path}}"
|
|
87
87
|
{% elif file.FileType == VHDLSourceFile %}
|
|
88
|
-
read_vhdl -vhdl2008 "{{file.Path}}"
|
|
88
|
+
read_vhdl -vhdl2008 -library {{file.Library}} "{{file.Path}}"
|
|
89
89
|
{% elif file.FileType == ConstraintFile %}
|
|
90
90
|
read_xdc "{{file.Path}}"
|
|
91
91
|
{% elif file.FileType == VivadoIPSpecificationFile %}
|
|
@@ -3,10 +3,10 @@ XVHDL := xvhdl
|
|
|
3
3
|
XELAB := xelab
|
|
4
4
|
XSIM := xsim
|
|
5
5
|
|
|
6
|
-
XVLOG_FLAGS := {{xvlog_args}}
|
|
7
|
-
XVHDL_FLAGS := {{xvhdl_args}}
|
|
8
|
-
XELAB_FLAGS := {{xelab_args}}
|
|
9
|
-
XSIM_FLAGS := {{xsim_args}}
|
|
6
|
+
XVLOG_FLAGS := {{xvlog_args|replace('#', '\#')}}
|
|
7
|
+
XVHDL_FLAGS := {{xvhdl_args|replace('#', '\#')}}
|
|
8
|
+
XELAB_FLAGS := {{xelab_args|replace('#', '\#')}}
|
|
9
|
+
XSIM_FLAGS := {{xsim_args|replace('#', '\#')}}
|
|
10
10
|
|
|
11
11
|
include project.mk
|
|
12
12
|
-include cocotb.mk
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.0.3"
|
|
File without changes
|
|
File without changes
|