SimplHDL 0.6.0__tar.gz → 0.7.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {simplhdl-0.6.0 → simplhdl-0.7.1}/PKG-INFO +4 -1
- {simplhdl-0.6.0 → simplhdl-0.7.1}/pyproject.toml +3 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/SimplHDL.egg-info/PKG-INFO +4 -1
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/SimplHDL.egg-info/requires.txt +2 -0
- simplhdl-0.7.1/src/simplhdl/__init__.py +1 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/cocotb.py +20 -3
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/quartusflow.py +3 -2
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/questasim/questasimflow.py +1 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/simulationflow.py +8 -3
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/vivadoflow.py +3 -2
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/generators/systemrdl.py +101 -14
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/__init__.py +2 -1
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/attributes.py +5 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/vhdllibrary.py +12 -3
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/quartus/project.tcl.j2 +4 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/questasim/project.qrun.j2 +3 -3
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/cocotb.mk.j2 +3 -1
- {simplhdl-0.6.0 → simplhdl-0.7.1}/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.1}/.github/workflows/publish.yml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/.gitignore +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/.readthedocs.yaml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/LICENSE +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/README.md +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/_static/simplhdl_dark.png +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/_static/simplhdl_light.png +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/_static/simplhdl_light_1.png +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/conf.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/drawing.svg +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/ghdl.rst +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/icarus.rst +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/quartus.rst +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/questasim.rst +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/vcs.rst +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/vivado.rst +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows/xsim.rst +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/flows.rst +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/index.rst +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/intel-ips.md +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/introduction.rst +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/plugins.rst +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/docs/requirements.txt +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/adder.yml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/hdl/adder.sv +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/sim/testbench.sv +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/sim/testbench.yml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/syn/build.yml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/syn/placement.xdc +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/syn/timing.xdc +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/adder/syn/top.sv +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/alu.yml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/hdl/add.sv +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/hdl/alu.sv +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/hdl/mul.sv +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/hdl/sub.sv +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/agent.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/aluif.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/driver.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/monitor.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/sequenceitem.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/alu_vip/sequencer.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/clock_vip/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/clock_vip/agent.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/clock_vip/clockif.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/pyuvm.yml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/test/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/test/env.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/test/seq_lib.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/test/test.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/pyuvm/testbench.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/agent.svh +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/alu_vip.sv +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/alu_vip.yml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/driver.svh +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/env.svh +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/monitor.svh +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/alu_vip/sequence_item.svh +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/tb_env/seq_lib/add_seq.svh +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/tb_env/seq_lib/base_seq.svh +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/tb_env/tb_env.sv +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/tb_env/tb_env.yml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/tb_env/test/base_test.svh +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/tb_env/test/test_add.svh +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/testbench/alu_if.sv +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/testbench/testbench.sv +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/testbench/testbench.yml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/sim/uvm/testcases/test_add/test_add.yml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/syn/build.yml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/syn/placement.xdc +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/alu/syn/timing.xdc +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/hello/build.sbt +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/hello/hello.yml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/hello/src/main/scala/Hello.scala +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/hdl/hello/syn/build.yml +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/plugins/simple_parser/setup.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/plugins/simple_parser/src/simple_parser/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/examples/plugins/simple_parser/src/simple_parser/simple_parser.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/setup.cfg +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/SimplHDL.egg-info/SOURCES.txt +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/SimplHDL.egg-info/dependency_links.txt +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/SimplHDL.egg-info/entry_points.txt +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/SimplHDL.egg-info/top_level.txt +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/__main__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flow.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/encrypt/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/encrypt/encryptflow.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/flake8/flake8flow.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/implementationflow.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/lint/lintflow.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/modelsim/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/modelsim/modelsimflow.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/quartusdse/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/quartusdse/quartusdseflow.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/quartusexport/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/quartusexport/quartusexportflow.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/questasim/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/rivierapro/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/rivierapro/rivieraproflow.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/vcs/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/vcs/vcsflow.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/verible/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/verible/veribleflow.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/vsg/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/vsg/vsgflow.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/xsim/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/flows/xsim/xsimflow.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/generator.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/generators/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/generators/chisel.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/generators/ipxact.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/generators/spd.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/info.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/parser.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/parsers/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/parsers/fusesocparser.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/parsers/simplhdlparser.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/plugins.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/design.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/fileset.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/filetypes.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/project.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/pyedaa/target.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/repo.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/flake8/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/flake8/setup.cfg.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/Makefile.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/cocotb.mk.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/dependencies.mk.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/files.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/fileset.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/modelsim.tcl.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/project.mk.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/modelsim/run.do.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/quartus/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/quartus/run.tcl.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/questasim/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/questasim/modelsim.tcl.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/questasim/visualizer.tcl.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/questasim/vsim-run.do.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/Makefile.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/cocotb.mk.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/dependencies.mk.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/files.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/fileset.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/rivierapro/project.mk.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/Makefile.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/dependencies.mk.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/files.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/fileset.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/pli.tab.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/project.mk.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/simv-run.do.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/synopsys_sim.setup.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vcs/vcs.parameters.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/verible/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/verible/rules.cfg.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vivado/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vivado/launch_run.sh.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vivado/run.tcl.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vivado/steps.tcl.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vsg/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vsg/files.json.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/vsg/rules.yml.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/Makefile.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/__init__.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/cocotb.mk.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/dependencies.mk.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/files.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/fileset.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/resources/templates/xsim/project.mk.j2 +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/run.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/simplhdl.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/tools.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/src/simplhdl/utils.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/tests/test_dummy.py +0 -0
- {simplhdl-0.6.0 → simplhdl-0.7.1}/tox.ini +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: SimplHDL
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.1
|
|
4
4
|
Summary: A framework for simulating and implementing HDL designs
|
|
5
5
|
Author-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
|
|
6
6
|
Maintainer-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
|
|
@@ -38,6 +38,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
38
38
|
Classifier: Programming Language :: Python :: 3.11
|
|
39
39
|
Classifier: Programming Language :: Python :: 3.12
|
|
40
40
|
Classifier: Programming Language :: Python :: 3.13
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
41
42
|
Classifier: Intended Audience :: Developers
|
|
42
43
|
Classifier: License :: OSI Approved :: MIT License
|
|
43
44
|
Classifier: Operating System :: OS Independent
|
|
@@ -58,6 +59,8 @@ Requires-Dist: flake8
|
|
|
58
59
|
Requires-Dist: black
|
|
59
60
|
Requires-Dist: systemrdl-compiler
|
|
60
61
|
Requires-Dist: peakrdl-html
|
|
62
|
+
Requires-Dist: peakrdl-regblock>=1.2.0
|
|
63
|
+
Requires-Dist: peakrdl-pyuvm
|
|
61
64
|
Dynamic: license-file
|
|
62
65
|
|
|
63
66
|
## Introduction
|
|
@@ -26,6 +26,8 @@ dependencies = [
|
|
|
26
26
|
"black",
|
|
27
27
|
"systemrdl-compiler",
|
|
28
28
|
"peakrdl-html",
|
|
29
|
+
"peakrdl-regblock>=1.2.0",
|
|
30
|
+
"peakrdl-pyuvm",
|
|
29
31
|
]
|
|
30
32
|
requires-python = ">=3.8"
|
|
31
33
|
authors = [
|
|
@@ -46,6 +48,7 @@ classifiers = [
|
|
|
46
48
|
"Programming Language :: Python :: 3.11",
|
|
47
49
|
"Programming Language :: Python :: 3.12",
|
|
48
50
|
"Programming Language :: Python :: 3.13",
|
|
51
|
+
"Programming Language :: Python :: 3.14",
|
|
49
52
|
"Intended Audience :: Developers",
|
|
50
53
|
"License :: OSI Approved :: MIT License",
|
|
51
54
|
"Operating System :: OS Independent",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: SimplHDL
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.1
|
|
4
4
|
Summary: A framework for simulating and implementing HDL designs
|
|
5
5
|
Author-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
|
|
6
6
|
Maintainer-email: Rasmus Grøndahl Olsen <simplhdl@gmail.com>
|
|
@@ -38,6 +38,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
38
38
|
Classifier: Programming Language :: Python :: 3.11
|
|
39
39
|
Classifier: Programming Language :: Python :: 3.12
|
|
40
40
|
Classifier: Programming Language :: Python :: 3.13
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
41
42
|
Classifier: Intended Audience :: Developers
|
|
42
43
|
Classifier: License :: OSI Approved :: MIT License
|
|
43
44
|
Classifier: Operating System :: OS Independent
|
|
@@ -58,6 +59,8 @@ Requires-Dist: flake8
|
|
|
58
59
|
Requires-Dist: black
|
|
59
60
|
Requires-Dist: systemrdl-compiler
|
|
60
61
|
Requires-Dist: peakrdl-html
|
|
62
|
+
Requires-Dist: peakrdl-regblock>=1.2.0
|
|
63
|
+
Requires-Dist: peakrdl-pyuvm
|
|
61
64
|
Dynamic: license-file
|
|
62
65
|
|
|
63
66
|
## Introduction
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.7.1"
|
|
@@ -2,6 +2,8 @@ import logging
|
|
|
2
2
|
import re
|
|
3
3
|
import os
|
|
4
4
|
|
|
5
|
+
from packaging.version import Version
|
|
6
|
+
from pkg_resources import get_distribution
|
|
5
7
|
from pathlib import Path
|
|
6
8
|
from typing import Optional, Dict
|
|
7
9
|
|
|
@@ -15,8 +17,9 @@ logger = logging.getLogger(__name__)
|
|
|
15
17
|
|
|
16
18
|
class Cocotb:
|
|
17
19
|
|
|
18
|
-
def __init__(self, project: Project) -> None:
|
|
20
|
+
def __init__(self, project: Project, seed: int) -> None:
|
|
19
21
|
self.project = project
|
|
22
|
+
self.seed = seed
|
|
20
23
|
self.top = self.module()
|
|
21
24
|
self.dut = self.get_dut()
|
|
22
25
|
self.toplevels = self.hdltoplevels()
|
|
@@ -36,6 +39,13 @@ class Cocotb:
|
|
|
36
39
|
raise FileNotFoundError(f"{path}: not found")
|
|
37
40
|
return path
|
|
38
41
|
|
|
42
|
+
def pythonbin(self) -> str:
|
|
43
|
+
output = sh(['cocotb-config', '--python-bin'])
|
|
44
|
+
path = Path(output)
|
|
45
|
+
if not path.exists():
|
|
46
|
+
raise FileNotFoundError(f"{path}: not found")
|
|
47
|
+
return path
|
|
48
|
+
|
|
39
49
|
def module(self) -> Optional[str]:
|
|
40
50
|
if not self.enabled:
|
|
41
51
|
return None
|
|
@@ -140,9 +150,16 @@ class Cocotb:
|
|
|
140
150
|
return f'-pli {lib_name_path}'
|
|
141
151
|
|
|
142
152
|
def env(self) -> Dict[str, str]:
|
|
153
|
+
cocotb_version = Version(get_distribution('cocotb').version)
|
|
143
154
|
e = os.environ.copy()
|
|
144
|
-
|
|
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)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import logging
|
|
3
3
|
import jinja2
|
|
4
|
+
import tomllib
|
|
4
5
|
|
|
5
6
|
from typing import List
|
|
6
7
|
from pathlib import Path
|
|
@@ -8,17 +9,25 @@ from systemrdl import RDLCompiler, RDLCompileError, RDLListener, RDLWalker
|
|
|
8
9
|
from systemrdl.node import AddrmapNode
|
|
9
10
|
from systemrdl.rdltypes import AccessType, OnReadType, OnWriteType
|
|
10
11
|
from peakrdl_html import HTMLExporter
|
|
12
|
+
from peakrdl_regblock.exporter import RegblockExporter
|
|
13
|
+
from peakrdl_regblock.cpuif.axi4lite import AXI4Lite_Cpuif_flattened
|
|
14
|
+
from peakrdl_regblock.udps import ALL_UDPS
|
|
15
|
+
from peakrdl_pyuvm.exporter import PyUVMExporter
|
|
11
16
|
|
|
17
|
+
from ..pyedaa.fileset import FileSet
|
|
12
18
|
from ..generator import GeneratorFactory, GeneratorBase
|
|
13
|
-
from ..pyedaa import SystemRDLSourceFile, SystemVerilogSourceFile, VerilogSourceFile
|
|
14
|
-
from ..flow import FlowBase
|
|
19
|
+
from ..pyedaa import SystemRDLSourceFile, SystemVerilogSourceFile, VerilogSourceFile, CocotbPythonFile
|
|
20
|
+
from ..flow import FlowBase, FlowCategory
|
|
15
21
|
|
|
16
22
|
|
|
17
23
|
logger = logging.getLogger(__name__)
|
|
18
24
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
25
|
+
seennodetypes: List[AddrmapNode] = []
|
|
26
|
+
leafnodetypes: List[AddrmapNode] = []
|
|
27
|
+
hierachynodetypes: List[AddrmapNode] = []
|
|
28
|
+
leafnodes: List[AddrmapNode] = []
|
|
29
|
+
hierachynodes: List[AddrmapNode] = []
|
|
30
|
+
nodes: List[AddrmapNode] = []
|
|
22
31
|
|
|
23
32
|
|
|
24
33
|
class Environment(jinja2.Environment):
|
|
@@ -33,13 +42,18 @@ class Environment(jinja2.Environment):
|
|
|
33
42
|
|
|
34
43
|
class Listener(RDLListener):
|
|
35
44
|
def exit_Addrmap(self, node: AddrmapNode):
|
|
36
|
-
|
|
45
|
+
nodes.append(node)
|
|
46
|
+
if is_leaf(node):
|
|
47
|
+
leafnodes.append(node)
|
|
48
|
+
else:
|
|
49
|
+
hierachynodes.append(node)
|
|
50
|
+
seen = [n for n in seennodetypes if n.type_name == node.type_name]
|
|
37
51
|
if not seen:
|
|
38
|
-
|
|
39
|
-
if
|
|
40
|
-
|
|
52
|
+
seennodetypes.append(node)
|
|
53
|
+
if is_leaf(node):
|
|
54
|
+
leafnodetypes.append(node)
|
|
41
55
|
else:
|
|
42
|
-
|
|
56
|
+
hierachynodetypes.append(node)
|
|
43
57
|
|
|
44
58
|
|
|
45
59
|
def get_template_dirs() -> List[Path]:
|
|
@@ -143,10 +157,27 @@ def get_field_access(field) -> str: # noqa: C901
|
|
|
143
157
|
return "NOACCESS"
|
|
144
158
|
|
|
145
159
|
|
|
160
|
+
def is_leaf(node):
|
|
161
|
+
"""
|
|
162
|
+
Check if node is leaf, meaning it has no children address maps
|
|
163
|
+
"""
|
|
164
|
+
if AddrmapNode not in [type(c) for c in node.children()]:
|
|
165
|
+
return True
|
|
166
|
+
else:
|
|
167
|
+
return False
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def mask(node):
|
|
171
|
+
m = ~(node.size - 1) & 0xFFFFFFFF
|
|
172
|
+
return m
|
|
173
|
+
|
|
174
|
+
|
|
146
175
|
@GeneratorFactory.register('SystemRDL')
|
|
147
176
|
class SystemRDL(GeneratorBase):
|
|
148
177
|
|
|
149
|
-
def render_template(self, template, node, outputdir) -> Path:
|
|
178
|
+
def render_template(self, template: jinja2.Template, node, outputdir) -> Path:
|
|
179
|
+
if not template.filename.endswith('.j2'):
|
|
180
|
+
return
|
|
150
181
|
context = template.render(node=node)
|
|
151
182
|
outputdir.mkdir(parents=True, exist_ok=True)
|
|
152
183
|
outputfile: Path = outputdir.joinpath(f'{node.type_name}__{Path(template.filename).name[:-3]}').absolute()
|
|
@@ -159,14 +190,51 @@ class SystemRDL(GeneratorBase):
|
|
|
159
190
|
if outputfile.suffix == '.v':
|
|
160
191
|
fileset.InsertFileAfter(rdlfile, VerilogSourceFile(outputfile))
|
|
161
192
|
|
|
193
|
+
def peakrdl_regmodel(self, node, outputdir, config) -> None:
|
|
194
|
+
RegblockExporter().export(
|
|
195
|
+
node=node,
|
|
196
|
+
output_dir=str(outputdir.absolute()),
|
|
197
|
+
cpuif_cls=AXI4Lite_Cpuif_flattened,
|
|
198
|
+
module_name=config.get('module_name', f'{node.type_name}_addrmap'),
|
|
199
|
+
package_name=config.get('package_name', f'{node.type_name}_pkg'),
|
|
200
|
+
address_width=config.get('address_width', 32),
|
|
201
|
+
default_reset_activelow=config.get('default_reset_activelow', True),
|
|
202
|
+
err_if_bad_addr=config.get('err_if_bad_addr', False),
|
|
203
|
+
err_if_bad_rw=config.get('err_if_bad_rw', False)
|
|
204
|
+
)
|
|
205
|
+
modulefile: Path = outputdir.joinpath(f'{node.type_name}_pkg.sv').absolute()
|
|
206
|
+
packetfile: Path = outputdir.joinpath(f'{node.type_name}_addrmap.sv').absolute()
|
|
207
|
+
rdlfile = self.project.DefaultDesign.GetFile(node.inst.def_src_ref.path)
|
|
208
|
+
parent_fileset = rdlfile.FileSet
|
|
209
|
+
fileset = FileSet(name=rdlfile.Path, vhdlLibrary=parent_fileset.VHDLLibrary)
|
|
210
|
+
fileset.AddFile(SystemVerilogSourceFile(modulefile))
|
|
211
|
+
fileset.AddFile(SystemVerilogSourceFile(packetfile))
|
|
212
|
+
parent_fileset.AddFileSet(fileset)
|
|
213
|
+
|
|
162
214
|
def run(self, flow: FlowBase):
|
|
163
215
|
rdlfiles = list(self.project.DefaultDesign.DefaultFileSet.Files(fileType=SystemRDLSourceFile))
|
|
164
216
|
output_dir = self.builddir.joinpath('systemrdl')
|
|
217
|
+
config = dict()
|
|
218
|
+
if os.getenv('SIMPLHDL_CONFIG'):
|
|
219
|
+
tomlfile = Path(os.getenv('SIMPLHDL_CONFIG'))
|
|
220
|
+
try:
|
|
221
|
+
with tomlfile.open('rb') as f:
|
|
222
|
+
config = tomllib.load(f)
|
|
223
|
+
except FileNotFoundError:
|
|
224
|
+
raise FileNotFoundError(f"SimplHDL config file set by environment 'SIMPLHDL_CONFIG={tomlfile}' does not exist")
|
|
225
|
+
|
|
226
|
+
pearkdl_config = config.get('peakrdl', {})
|
|
227
|
+
html_config = pearkdl_config.get('html', {})
|
|
228
|
+
regblock_config = pearkdl_config.get('regblock', {})
|
|
165
229
|
|
|
166
230
|
if not rdlfiles:
|
|
167
231
|
return
|
|
168
232
|
|
|
169
233
|
rdlc = RDLCompiler()
|
|
234
|
+
|
|
235
|
+
for udp in ALL_UDPS:
|
|
236
|
+
rdlc.register_udp(udp)
|
|
237
|
+
|
|
170
238
|
try:
|
|
171
239
|
for rdlfile in rdlfiles:
|
|
172
240
|
rdlc.compile_file(rdlfile.Path, defines=self.project.Defines)
|
|
@@ -188,15 +256,34 @@ class SystemRDL(GeneratorBase):
|
|
|
188
256
|
loader=jinja2.FileSystemLoader(templatedir),
|
|
189
257
|
trim_blocks=True)
|
|
190
258
|
env.globals['hex'] = hex
|
|
259
|
+
env.globals['len'] = len
|
|
191
260
|
env.globals['get_field_access'] = get_field_access
|
|
192
261
|
env.globals['get_reg_access'] = get_reg_access
|
|
262
|
+
env.globals['nodes'] = nodes
|
|
263
|
+
env.globals['leafnodes'] = leafnodes
|
|
264
|
+
env.globals['hierachynodes'] = hierachynodes
|
|
265
|
+
env.globals['is_leaf'] = is_leaf
|
|
266
|
+
env.globals['mask'] = mask
|
|
193
267
|
template = env.find_template('registermap')
|
|
194
|
-
for node in
|
|
268
|
+
for node in leafnodetypes:
|
|
195
269
|
self.render_template(template=template, node=node, outputdir=sub_dir)
|
|
270
|
+
self.peakrdl_regmodel(node=node, outputdir=output_dir.joinpath('hdl'), config=regblock_config)
|
|
196
271
|
|
|
197
272
|
template = env.find_template('hierachymap')
|
|
198
|
-
for node in
|
|
273
|
+
for node in hierachynodetypes:
|
|
199
274
|
self.render_template(template=template, node=node, outputdir=sub_dir)
|
|
200
275
|
|
|
276
|
+
if flow.category == FlowCategory.SIMULATION:
|
|
277
|
+
logger.info("Generate PyUVM Register Model")
|
|
278
|
+
output = output_dir.joinpath('pyuvm', 'ralmodel.py')
|
|
279
|
+
output.parent.mkdir(parents=True, exist_ok=True)
|
|
280
|
+
PyUVMExporter().export(root, str(output))
|
|
281
|
+
fileset = rdlfiles[-1].FileSet
|
|
282
|
+
fileset.InsertFileAfter(rdlfile, CocotbPythonFile(output))
|
|
283
|
+
|
|
201
284
|
logger.info("Generate HTML Documentation")
|
|
202
|
-
|
|
285
|
+
HTMLExporter().export(
|
|
286
|
+
root,
|
|
287
|
+
output_dir.joinpath('docs'),
|
|
288
|
+
skip_not_present=html_config.get('skip_not_present', False),
|
|
289
|
+
)
|
|
@@ -3,7 +3,7 @@ import pyEDAA.ProjectModel as pm
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import Optional
|
|
5
5
|
from pyTooling.MetaClasses import ExtendedType
|
|
6
|
-
from .attributes import Encrypt, UsedIn, SIMULATION, IMPLEMENTATION
|
|
6
|
+
from .attributes import Encrypt, UsedIn, SIMULATION, IMPLEMENTATION, Scope
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class FileMixIn(metaclass=ExtendedType, mixin=True):
|
|
@@ -176,6 +176,7 @@ class ConstraintFile(pm.ConstraintFile, FileMixIn):
|
|
|
176
176
|
super()._registerAttributes()
|
|
177
177
|
FileMixIn._registerAttributes(self)
|
|
178
178
|
self[UsedIn] = {IMPLEMENTATION}
|
|
179
|
+
self[Scope] = None
|
|
179
180
|
|
|
180
181
|
|
|
181
182
|
class QuartusSignalTapFile(File):
|
|
@@ -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.1}/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
|
|
@@ -9,6 +9,8 @@ export LIBPYTHON_LOC := $(shell cocotb-config --libpython)
|
|
|
9
9
|
VCS_FLAGS += +warn=noVPI-CT-NS +vpi -P pli.tab -load $(shell cocotb-config --lib-name-path vpi vcs)
|
|
10
10
|
VCS_FLAGS += -debug_access+r+w+nomemcbk -debug_region+cell+encrypt -debug_acc+pp+f+dmptf
|
|
11
11
|
|
|
12
|
+
export PYGPI_PYTHON_BIN := $(shell cocotb-config --python-bin)
|
|
13
|
+
export COCOTB_TEST_MODULES := {{cocotbtop}}
|
|
14
|
+
export COCOTB_TOPLEVEL := {{cocotbdut}}
|
|
12
15
|
export MODULE := {{cocotbtop}}
|
|
13
16
|
export TOPLEVEL := {{cocotbdut}}
|
|
14
|
-
|
|
@@ -11,12 +11,23 @@ proc source_bd_script {filename} {
|
|
|
11
11
|
# Fail if bd script return an error code or a non zero value
|
|
12
12
|
if {[catch {source -notrace $filename} err]} {
|
|
13
13
|
return -code 1
|
|
14
|
-
} elseif {$err !=
|
|
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
|