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