SimplHDL 0.5.7__tar.gz → 0.6.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.5.7 → simplhdl-0.6.0}/PKG-INFO +3 -1
- {simplhdl-0.5.7 → simplhdl-0.6.0}/pyproject.toml +2 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/SimplHDL.egg-info/PKG-INFO +3 -1
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/SimplHDL.egg-info/SOURCES.txt +1 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/SimplHDL.egg-info/requires.txt +2 -0
- simplhdl-0.6.0/src/simplhdl/__init__.py +1 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/quartusexport/quartusexportflow.py +13 -2
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/simulationflow.py +1 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/vcs/vcsflow.py +13 -4
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/generators/ipxact.py +8 -3
- simplhdl-0.6.0/src/simplhdl/generators/systemrdl.py +202 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/pyedaa/__init__.py +15 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/pyedaa/design.py +6 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/questasim/project.qrun.j2 +2 -1
- simplhdl-0.6.0/src/simplhdl/resources/templates/vcs/simv-run.do.j2 +6 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vivado/project.tcl.j2 +12 -1
- simplhdl-0.5.7/src/simplhdl/__init__.py +0 -1
- simplhdl-0.5.7/src/simplhdl/generators/systemrdl.py +0 -27
- {simplhdl-0.5.7 → simplhdl-0.6.0}/.github/workflows/publish.yml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/.gitignore +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/.readthedocs.yaml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/LICENSE +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/README.md +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/_static/simplhdl_dark.png +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/_static/simplhdl_light.png +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/_static/simplhdl_light_1.png +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/conf.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/drawing.svg +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/flows/ghdl.rst +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/flows/icarus.rst +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/flows/quartus.rst +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/flows/questasim.rst +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/flows/vcs.rst +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/flows/vivado.rst +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/flows/xsim.rst +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/flows.rst +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/index.rst +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/intel-ips.md +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/introduction.rst +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/plugins.rst +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/docs/requirements.txt +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/adder/adder.yml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/adder/hdl/adder.sv +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/adder/sim/testbench.sv +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/adder/sim/testbench.yml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/adder/syn/build.yml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/adder/syn/placement.xdc +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/adder/syn/timing.xdc +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/adder/syn/top.sv +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/alu.yml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/hdl/add.sv +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/hdl/alu.sv +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/hdl/mul.sv +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/hdl/sub.sv +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/alu_vip/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/alu_vip/agent.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/alu_vip/aluif.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/alu_vip/driver.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/alu_vip/monitor.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/alu_vip/sequenceitem.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/alu_vip/sequencer.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/clock_vip/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/clock_vip/agent.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/clock_vip/clockif.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/pyuvm.yml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/test/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/test/env.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/test/seq_lib.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/test/test.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/pyuvm/testbench.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/alu_vip/agent.svh +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/alu_vip/alu_vip.sv +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/alu_vip/alu_vip.yml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/alu_vip/driver.svh +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/alu_vip/env.svh +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/alu_vip/monitor.svh +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/alu_vip/sequence_item.svh +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/tb_env/seq_lib/add_seq.svh +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/tb_env/seq_lib/base_seq.svh +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/tb_env/tb_env.sv +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/tb_env/tb_env.yml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/tb_env/test/base_test.svh +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/tb_env/test/test_add.svh +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/testbench/alu_if.sv +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/testbench/testbench.sv +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/testbench/testbench.yml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/sim/uvm/testcases/test_add/test_add.yml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/syn/build.yml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/syn/placement.xdc +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/alu/syn/timing.xdc +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/hello/build.sbt +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/hello/hello.yml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/hello/src/main/scala/Hello.scala +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/hdl/hello/syn/build.yml +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/plugins/simple_parser/setup.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/plugins/simple_parser/src/simple_parser/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/examples/plugins/simple_parser/src/simple_parser/simple_parser.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/setup.cfg +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/SimplHDL.egg-info/dependency_links.txt +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/SimplHDL.egg-info/entry_points.txt +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/SimplHDL.egg-info/top_level.txt +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/__main__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/cocotb.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/encrypt/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/encrypt/encryptflow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/flake8/flake8flow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/implementationflow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/lint/lintflow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/modelsim/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/modelsim/modelsimflow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/quartusdse/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/quartusdse/quartusdseflow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/quartusexport/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/quartusflow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/questasim/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/questasim/questasimflow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/rivierapro/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/rivierapro/rivieraproflow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/vcs/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/verible/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/verible/veribleflow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/vivadoflow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/vsg/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/vsg/vsgflow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/xsim/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/flows/xsim/xsimflow.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/generator.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/generators/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/generators/chisel.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/generators/spd.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/info.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/parser.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/parsers/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/parsers/fusesocparser.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/parsers/simplhdlparser.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/plugins.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/pyedaa/attributes.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/pyedaa/fileset.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/pyedaa/filetypes.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/pyedaa/project.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/pyedaa/target.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/pyedaa/vhdllibrary.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/repo.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/flake8/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/flake8/setup.cfg.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/modelsim/Makefile.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/modelsim/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/modelsim/cocotb.mk.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/modelsim/dependencies.mk.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/modelsim/files.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/modelsim/fileset.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/modelsim/modelsim.tcl.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/modelsim/project.mk.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/modelsim/run.do.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/quartus/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/quartus/project.tcl.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/quartus/run.tcl.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/questasim/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/questasim/modelsim.tcl.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/questasim/visualizer.tcl.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/questasim/vsim-run.do.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/rivierapro/Makefile.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/rivierapro/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/rivierapro/cocotb.mk.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/rivierapro/dependencies.mk.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/rivierapro/files.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/rivierapro/fileset.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/rivierapro/project.mk.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vcs/Makefile.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vcs/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vcs/cocotb.mk.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vcs/dependencies.mk.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vcs/files.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vcs/fileset.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vcs/pli.tab.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vcs/project.mk.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vcs/synopsys_sim.setup.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vcs/vcs.parameters.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/verible/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/verible/rules.cfg.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vivado/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vivado/launch_run.sh.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vivado/run.tcl.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vivado/steps.tcl.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vsg/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vsg/files.json.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/vsg/rules.yml.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/xsim/Makefile.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/xsim/__init__.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/xsim/cocotb.mk.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/xsim/dependencies.mk.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/xsim/files.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/xsim/fileset.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/xsim/project.mk.j2 +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/run.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/simplhdl.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/tools.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/utils.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.0}/tests/test_dummy.py +0 -0
- {simplhdl-0.5.7 → simplhdl-0.6.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.6.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>
|
|
@@ -56,6 +56,8 @@ Requires-Dist: rich
|
|
|
56
56
|
Requires-Dist: vsg
|
|
57
57
|
Requires-Dist: flake8
|
|
58
58
|
Requires-Dist: black
|
|
59
|
+
Requires-Dist: systemrdl-compiler
|
|
60
|
+
Requires-Dist: peakrdl-html
|
|
59
61
|
Dynamic: license-file
|
|
60
62
|
|
|
61
63
|
## Introduction
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: SimplHDL
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.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>
|
|
@@ -56,6 +56,8 @@ Requires-Dist: rich
|
|
|
56
56
|
Requires-Dist: vsg
|
|
57
57
|
Requires-Dist: flake8
|
|
58
58
|
Requires-Dist: black
|
|
59
|
+
Requires-Dist: systemrdl-compiler
|
|
60
|
+
Requires-Dist: peakrdl-html
|
|
59
61
|
Dynamic: license-file
|
|
60
62
|
|
|
61
63
|
## Introduction
|
|
@@ -177,6 +177,7 @@ src/simplhdl/resources/templates/vcs/files.j2
|
|
|
177
177
|
src/simplhdl/resources/templates/vcs/fileset.j2
|
|
178
178
|
src/simplhdl/resources/templates/vcs/pli.tab.j2
|
|
179
179
|
src/simplhdl/resources/templates/vcs/project.mk.j2
|
|
180
|
+
src/simplhdl/resources/templates/vcs/simv-run.do.j2
|
|
180
181
|
src/simplhdl/resources/templates/vcs/synopsys_sim.setup.j2
|
|
181
182
|
src/simplhdl/resources/templates/vcs/vcs.parameters.j2
|
|
182
183
|
src/simplhdl/resources/templates/verible/__init__.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.6.0"
|
|
@@ -12,7 +12,7 @@ from simplhdl.flows.quartusflow import QuartusFlow
|
|
|
12
12
|
from simplhdl.resources.templates import quartus as templates
|
|
13
13
|
from simplhdl.flows.encrypt.encryptflow import encrypt
|
|
14
14
|
from simplhdl.pyedaa.project import Project
|
|
15
|
-
from simplhdl.pyedaa.attributes import UsedIn
|
|
15
|
+
from simplhdl.pyedaa.attributes import UsedIn, Encrypt
|
|
16
16
|
from simplhdl.pyedaa import (
|
|
17
17
|
File,
|
|
18
18
|
HDLSearchPath,
|
|
@@ -51,6 +51,14 @@ class QuartusExportFlow(ImplementationFlow):
|
|
|
51
51
|
type=Path,
|
|
52
52
|
help="Output zip file"
|
|
53
53
|
)
|
|
54
|
+
parser.add_argument(
|
|
55
|
+
'-s',
|
|
56
|
+
'--structure',
|
|
57
|
+
action='store',
|
|
58
|
+
choices=['flat', 'hierarchy'],
|
|
59
|
+
default='hierarchy',
|
|
60
|
+
help="Output zip file"
|
|
61
|
+
)
|
|
54
62
|
|
|
55
63
|
def __init__(self, name, args: Namespace, project: Project, builddir: Path):
|
|
56
64
|
super().__init__(name, args, project, builddir)
|
|
@@ -77,6 +85,9 @@ class QuartusExportFlow(ImplementationFlow):
|
|
|
77
85
|
for file in files:
|
|
78
86
|
fileid = str(file.Path.resolve())
|
|
79
87
|
dest = self.builddir.joinpath('src', file.Path.relative_to(self.rootdir))
|
|
88
|
+
if self.args.structure == 'flat':
|
|
89
|
+
dest = self.builddir.joinpath('src', file.Path.name)
|
|
90
|
+
print(f'{dest=}')
|
|
80
91
|
if fileid in seen:
|
|
81
92
|
file._path = seen.get(fileid)._path
|
|
82
93
|
continue
|
|
@@ -89,7 +100,7 @@ class QuartusExportFlow(ImplementationFlow):
|
|
|
89
100
|
dest = file.Path
|
|
90
101
|
elif isinstance(file, (HDLSourceFile, HDLIncludeFile)):
|
|
91
102
|
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
92
|
-
if self.args.encrypt:
|
|
103
|
+
if self.args.encrypt and file[Encrypt]:
|
|
93
104
|
encrypt(file.Path, dest, language=get_language(file), vendors=self.vendors)
|
|
94
105
|
else:
|
|
95
106
|
shutil.copyfile(file.Path, dest)
|
|
@@ -34,9 +34,11 @@ class VcsFlow(SimulationFlow):
|
|
|
34
34
|
)
|
|
35
35
|
parser.add_argument(
|
|
36
36
|
'-w',
|
|
37
|
-
'--
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
'--wavedump',
|
|
38
|
+
nargs='?',
|
|
39
|
+
const='vpd',
|
|
40
|
+
choices=['vpd', 'evcd', 'fsdb'],
|
|
41
|
+
help="Dump waveforms using vpd, evcd or fsdb format"
|
|
40
42
|
)
|
|
41
43
|
parser.add_argument(
|
|
42
44
|
'--gui',
|
|
@@ -92,6 +94,7 @@ class VcsFlow(SimulationFlow):
|
|
|
92
94
|
|
|
93
95
|
def get_globals(self) -> Dict[str, Any]:
|
|
94
96
|
globals = super().get_globals()
|
|
97
|
+
globals['wavedump'] = self.args.wavedump
|
|
95
98
|
globals['vlogan_args'] = self.vlogan_args()
|
|
96
99
|
globals['vhdlan_args'] = self.vhdlan_args()
|
|
97
100
|
globals['vcs_args'] = self.vcs_args()
|
|
@@ -124,6 +127,8 @@ class VcsFlow(SimulationFlow):
|
|
|
124
127
|
environment.get_template('synopsys_sim.setup.j2'),
|
|
125
128
|
environment.get_template('project.mk.j2'),
|
|
126
129
|
environment.get_template('vcs.parameters.j2'),
|
|
130
|
+
environment.get_template('simv-run.do.j2'),
|
|
131
|
+
|
|
127
132
|
]
|
|
128
133
|
|
|
129
134
|
def get_cocotb_templates(self, environment):
|
|
@@ -179,7 +184,7 @@ class VcsFlow(SimulationFlow):
|
|
|
179
184
|
args.add(f"-timescale={self.args.timescale}")
|
|
180
185
|
if self.is_uvm():
|
|
181
186
|
args.add('-ntb_opts uvm')
|
|
182
|
-
if self.args.gui:
|
|
187
|
+
if self.args.gui or self.args.wavedump:
|
|
183
188
|
args.add('-debug_access+all')
|
|
184
189
|
if self.is_verdi():
|
|
185
190
|
args.add('-kdb')
|
|
@@ -195,6 +200,10 @@ class VcsFlow(SimulationFlow):
|
|
|
195
200
|
args.add(f"+ntb_random_seed={self.args.seed}")
|
|
196
201
|
for name, value in self.project.PlusArgs.items():
|
|
197
202
|
args.add(f"+{name}={escape(value)}")
|
|
203
|
+
if self.args.wavedump == 'vpd':
|
|
204
|
+
args.add('-ucli -do simv-run.do')
|
|
205
|
+
if self.args.wavedump == 'evcd' or self.args.wavedump == 'fsdb':
|
|
206
|
+
raise NotImplementedError(f"Wavedump for {self.args.wavedump} format is not yet implemented")
|
|
198
207
|
return ' '.join(list(args) + [self.args.simv_args])
|
|
199
208
|
|
|
200
209
|
def get_library(self, fileset: FileSet) -> str:
|
|
@@ -17,7 +17,7 @@ from ..pyedaa.vhdllibrary import VHDLLibrary
|
|
|
17
17
|
from ..pyedaa import (
|
|
18
18
|
File, SystemVerilogSourceFile, TCLSourceFile, ConstraintFile, HDLSourceFile,
|
|
19
19
|
VHDLSourceFile, VerilogSourceFile, VivadoIPSpecificationFile,
|
|
20
|
-
VerilogIncludeFile
|
|
20
|
+
VerilogIncludeFile, SystemCSourceFile, SystemCHeaderFile
|
|
21
21
|
)
|
|
22
22
|
|
|
23
23
|
logger = logging.getLogger(__name__)
|
|
@@ -40,6 +40,8 @@ FILETYPE_2014_MAP = {
|
|
|
40
40
|
'.tcl': TCLSourceFile,
|
|
41
41
|
'SDC': ConstraintFile,
|
|
42
42
|
'.sdc': ConstraintFile,
|
|
43
|
+
'systemCSource': SystemCSourceFile,
|
|
44
|
+
'systemCSourceInclude': SystemCHeaderFile,
|
|
43
45
|
'unknown': File,
|
|
44
46
|
}
|
|
45
47
|
|
|
@@ -191,7 +193,7 @@ class VivadoIP(GeneratorBase):
|
|
|
191
193
|
file = component.filepath(file_element).with_suffix('.xml')
|
|
192
194
|
if file.exists():
|
|
193
195
|
files += self.get_files(file)
|
|
194
|
-
for view in component.views('.*simulation.*'):
|
|
196
|
+
for view in component.views('.*(verilog|vhdl)simulation.*'):
|
|
195
197
|
filesets = component.filesets(view)
|
|
196
198
|
for fileset in filesets:
|
|
197
199
|
files += component.pyedaa_files(fileset)
|
|
@@ -217,6 +219,9 @@ class VivadoIP(GeneratorBase):
|
|
|
217
219
|
i += 1
|
|
218
220
|
filesets.append(fileset)
|
|
219
221
|
last_lib = file.Library.Name
|
|
220
|
-
|
|
222
|
+
try:
|
|
223
|
+
fileset.AddFile(file)
|
|
224
|
+
except Exception:
|
|
225
|
+
logger.warning(f"Failed to add {file.Path}")
|
|
221
226
|
for fileset in filesets:
|
|
222
227
|
newipfile.FileSet._fileSets[fileset.Name] = fileset
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import logging
|
|
3
|
+
import jinja2
|
|
4
|
+
|
|
5
|
+
from typing import List
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from systemrdl import RDLCompiler, RDLCompileError, RDLListener, RDLWalker
|
|
8
|
+
from systemrdl.node import AddrmapNode
|
|
9
|
+
from systemrdl.rdltypes import AccessType, OnReadType, OnWriteType
|
|
10
|
+
from peakrdl_html import HTMLExporter
|
|
11
|
+
|
|
12
|
+
from ..generator import GeneratorFactory, GeneratorBase
|
|
13
|
+
from ..pyedaa import SystemRDLSourceFile, SystemVerilogSourceFile, VerilogSourceFile
|
|
14
|
+
from ..flow import FlowBase
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
seennodes: List[AddrmapNode] = []
|
|
20
|
+
addrmapnodes: List[AddrmapNode] = []
|
|
21
|
+
hierachymapnodes: List[AddrmapNode] = []
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class Environment(jinja2.Environment):
|
|
25
|
+
def find_template(self, name):
|
|
26
|
+
list = [i for i in self.list_templates() if i.startswith(name)]
|
|
27
|
+
if len(list) == 0:
|
|
28
|
+
raise jinja2.TemplateNotFound(name)
|
|
29
|
+
if len(list) > 1:
|
|
30
|
+
logger.warning(f"Multiple templates found ({list}) for {name}")
|
|
31
|
+
return self.get_template(list[0])
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class Listener(RDLListener):
|
|
35
|
+
def exit_Addrmap(self, node: AddrmapNode):
|
|
36
|
+
seen = [n for n in seennodes if n.type_name == node.type_name]
|
|
37
|
+
if not seen:
|
|
38
|
+
seennodes.append(node)
|
|
39
|
+
if AddrmapNode not in [type(c) for c in node.children()]:
|
|
40
|
+
addrmapnodes.append(node)
|
|
41
|
+
else:
|
|
42
|
+
hierachymapnodes.append(node)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def get_template_dirs() -> List[Path]:
|
|
46
|
+
string = os.getenv('SIMPLHDL_SYSTEMRDL_TEMPLATES')
|
|
47
|
+
if string:
|
|
48
|
+
templates = [Path(p) for p in string.split(':')]
|
|
49
|
+
for t in templates:
|
|
50
|
+
if not t.is_dir():
|
|
51
|
+
logger.error(f"Directory {t} does not exist")
|
|
52
|
+
raise SystemError
|
|
53
|
+
else:
|
|
54
|
+
logger.error("SIMPLHDL_SYSTEMRDL_TEMPLATES is not set, no templates found")
|
|
55
|
+
raise SystemError
|
|
56
|
+
return templates
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def get_reg_access(reg) -> str:
|
|
60
|
+
if reg.has_sw_readable and reg.has_sw_writable:
|
|
61
|
+
return "RW"
|
|
62
|
+
elif reg.has_sw_writable:
|
|
63
|
+
return "WO"
|
|
64
|
+
elif reg.has_sw_readable:
|
|
65
|
+
return "RO"
|
|
66
|
+
else:
|
|
67
|
+
return "RW"
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def get_field_access(field) -> str: # noqa: C901
|
|
71
|
+
"""
|
|
72
|
+
Get field's UVM access string
|
|
73
|
+
"""
|
|
74
|
+
sw = field.get_property("sw")
|
|
75
|
+
onread = field.get_property("onread")
|
|
76
|
+
onwrite = field.get_property("onwrite")
|
|
77
|
+
|
|
78
|
+
if sw == AccessType.rw:
|
|
79
|
+
if (onwrite is None) and (onread is None):
|
|
80
|
+
return "RW"
|
|
81
|
+
elif (onread == OnReadType.rclr) and (onwrite == OnWriteType.woset):
|
|
82
|
+
return "W1SRC"
|
|
83
|
+
elif (onread == OnReadType.rclr) and (onwrite == OnWriteType.wzs):
|
|
84
|
+
return "W0SRC"
|
|
85
|
+
elif (onread == OnReadType.rclr) and (onwrite == OnWriteType.wset):
|
|
86
|
+
return "WSRC"
|
|
87
|
+
elif (onread == OnReadType.rset) and (onwrite == OnWriteType.woclr):
|
|
88
|
+
return "W1CRS"
|
|
89
|
+
elif (onread == OnReadType.rset) and (onwrite == OnWriteType.wzc):
|
|
90
|
+
return "W0CRS"
|
|
91
|
+
elif (onread == OnReadType.rset) and (onwrite == OnWriteType.wclr):
|
|
92
|
+
return "WCRS"
|
|
93
|
+
elif onwrite == OnWriteType.woclr:
|
|
94
|
+
return "W1C"
|
|
95
|
+
elif onwrite == OnWriteType.woset:
|
|
96
|
+
return "W1S"
|
|
97
|
+
elif onwrite == OnWriteType.wot:
|
|
98
|
+
return "W1T"
|
|
99
|
+
elif onwrite == OnWriteType.wzc:
|
|
100
|
+
return "W0C"
|
|
101
|
+
elif onwrite == OnWriteType.wzs:
|
|
102
|
+
return "W0S"
|
|
103
|
+
elif onwrite == OnWriteType.wzt:
|
|
104
|
+
return "W0T"
|
|
105
|
+
elif onwrite == OnWriteType.wclr:
|
|
106
|
+
return "WC"
|
|
107
|
+
elif onwrite == OnWriteType.wset:
|
|
108
|
+
return "WS"
|
|
109
|
+
elif onread == OnReadType.rclr:
|
|
110
|
+
return "WRC"
|
|
111
|
+
elif onread == OnReadType.rset:
|
|
112
|
+
return "WRS"
|
|
113
|
+
else:
|
|
114
|
+
return "RW"
|
|
115
|
+
|
|
116
|
+
elif sw == AccessType.r:
|
|
117
|
+
if onread is None:
|
|
118
|
+
return "RO"
|
|
119
|
+
elif onread == OnReadType.rclr:
|
|
120
|
+
return "RC"
|
|
121
|
+
elif onread == OnReadType.rset:
|
|
122
|
+
return "RS"
|
|
123
|
+
else:
|
|
124
|
+
return "RO"
|
|
125
|
+
|
|
126
|
+
elif sw == AccessType.w:
|
|
127
|
+
if onwrite is None:
|
|
128
|
+
return "WO"
|
|
129
|
+
elif onwrite == OnWriteType.wclr:
|
|
130
|
+
return "WOC"
|
|
131
|
+
elif onwrite == OnWriteType.wset:
|
|
132
|
+
return "WOS"
|
|
133
|
+
else:
|
|
134
|
+
return "WO"
|
|
135
|
+
|
|
136
|
+
elif sw == AccessType.rw1:
|
|
137
|
+
return "W1"
|
|
138
|
+
|
|
139
|
+
elif sw == AccessType.w1:
|
|
140
|
+
return "WO1"
|
|
141
|
+
|
|
142
|
+
else:
|
|
143
|
+
return "NOACCESS"
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
@GeneratorFactory.register('SystemRDL')
|
|
147
|
+
class SystemRDL(GeneratorBase):
|
|
148
|
+
|
|
149
|
+
def render_template(self, template, node, outputdir) -> Path:
|
|
150
|
+
context = template.render(node=node)
|
|
151
|
+
outputdir.mkdir(parents=True, exist_ok=True)
|
|
152
|
+
outputfile: Path = outputdir.joinpath(f'{node.type_name}__{Path(template.filename).name[:-3]}').absolute()
|
|
153
|
+
with outputfile.open('w') as f:
|
|
154
|
+
f.write(context)
|
|
155
|
+
rdlfile = self.project.DefaultDesign.GetFile(node.inst.def_src_ref.path)
|
|
156
|
+
fileset = rdlfile.FileSet
|
|
157
|
+
if outputfile.suffix == '.sv':
|
|
158
|
+
fileset.InsertFileAfter(rdlfile, SystemVerilogSourceFile(outputfile))
|
|
159
|
+
if outputfile.suffix == '.v':
|
|
160
|
+
fileset.InsertFileAfter(rdlfile, VerilogSourceFile(outputfile))
|
|
161
|
+
|
|
162
|
+
def run(self, flow: FlowBase):
|
|
163
|
+
rdlfiles = list(self.project.DefaultDesign.DefaultFileSet.Files(fileType=SystemRDLSourceFile))
|
|
164
|
+
output_dir = self.builddir.joinpath('systemrdl')
|
|
165
|
+
|
|
166
|
+
if not rdlfiles:
|
|
167
|
+
return
|
|
168
|
+
|
|
169
|
+
rdlc = RDLCompiler()
|
|
170
|
+
try:
|
|
171
|
+
for rdlfile in rdlfiles:
|
|
172
|
+
rdlc.compile_file(rdlfile.Path, defines=self.project.Defines)
|
|
173
|
+
root = rdlc.elaborate()
|
|
174
|
+
except RDLCompileError as e:
|
|
175
|
+
logger.error(str(e))
|
|
176
|
+
raise SystemError
|
|
177
|
+
|
|
178
|
+
walker = RDLWalker()
|
|
179
|
+
walker.walk(root, Listener())
|
|
180
|
+
|
|
181
|
+
templatedirs = get_template_dirs()
|
|
182
|
+
|
|
183
|
+
for templatedir in templatedirs:
|
|
184
|
+
logger.info(f"Generate from template {templatedir}")
|
|
185
|
+
sub_dir = output_dir.joinpath(templatedir.name)
|
|
186
|
+
|
|
187
|
+
env = Environment(
|
|
188
|
+
loader=jinja2.FileSystemLoader(templatedir),
|
|
189
|
+
trim_blocks=True)
|
|
190
|
+
env.globals['hex'] = hex
|
|
191
|
+
env.globals['get_field_access'] = get_field_access
|
|
192
|
+
env.globals['get_reg_access'] = get_reg_access
|
|
193
|
+
template = env.find_template('registermap')
|
|
194
|
+
for node in addrmapnodes:
|
|
195
|
+
self.render_template(template=template, node=node, outputdir=sub_dir)
|
|
196
|
+
|
|
197
|
+
template = env.find_template('hierachymap')
|
|
198
|
+
for node in hierachymapnodes:
|
|
199
|
+
self.render_template(template=template, node=node, outputdir=sub_dir)
|
|
200
|
+
|
|
201
|
+
logger.info("Generate HTML Documentation")
|
|
202
|
+
_ = HTMLExporter().export(root, output_dir.joinpath('docs'))
|
|
@@ -144,10 +144,25 @@ class EDIFNetlistFile(pm.EDIFNetlistFile, FileMixIn):
|
|
|
144
144
|
FileMixIn._registerAttributes(self)
|
|
145
145
|
|
|
146
146
|
|
|
147
|
+
class CHeaderFile(SourceFile):
|
|
148
|
+
def _registerAttributes(self):
|
|
149
|
+
super()._registerAttributes()
|
|
150
|
+
self[UsedIn] = {SIMULATION}
|
|
151
|
+
|
|
152
|
+
|
|
147
153
|
class CSourceFile(pm.CSourceFile, FileMixIn):
|
|
148
154
|
def _registerAttributes(self):
|
|
149
155
|
super()._registerAttributes()
|
|
150
156
|
FileMixIn._registerAttributes(self)
|
|
157
|
+
self[UsedIn] = {SIMULATION}
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
class SystemCSourceFile(CSourceFile):
|
|
161
|
+
pass
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
class SystemCHeaderFile(CHeaderFile):
|
|
165
|
+
pass
|
|
151
166
|
|
|
152
167
|
|
|
153
168
|
class SettingFile(pm.SettingFile, FileMixIn):
|
|
@@ -3,6 +3,7 @@ import pyEDAA.ProjectModel as pm
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import Dict, Union, Generator
|
|
5
5
|
|
|
6
|
+
from . import File
|
|
6
7
|
from .vhdllibrary import VHDLLibrary
|
|
7
8
|
|
|
8
9
|
|
|
@@ -82,3 +83,8 @@ class Design(pm.Design):
|
|
|
82
83
|
continue
|
|
83
84
|
seen.append(fileid)
|
|
84
85
|
yield file
|
|
86
|
+
|
|
87
|
+
def GetFile(self, path: Path) -> File:
|
|
88
|
+
for file in self.Files():
|
|
89
|
+
if file.Path.absolute() == path.absolute():
|
|
90
|
+
return file
|
{simplhdl-0.5.7 → simplhdl-0.6.0}/src/simplhdl/resources/templates/questasim/project.qrun.j2
RENAMED
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
{% for fileset in filesets %}
|
|
21
21
|
-makelib {{fileset.VHDLLibrary.Name}}:{{fileset.VHDLLibrary.Path}}
|
|
22
22
|
{% for file in fileset.GetFiles() %}
|
|
23
|
-
|
|
23
|
+
|
|
24
|
+
{% if isinstance(file, (SystemVerilogSourceFile, VerilogSourceFile, VHDLSourceFile)) and 'simulation' in file[UsedIn] %}
|
|
24
25
|
{{file.Path}}
|
|
25
26
|
{% endif %}
|
|
26
27
|
{% endfor %}
|
|
@@ -6,6 +6,17 @@ proc source_script {filename} {
|
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
+
|
|
10
|
+
proc source_bd_script {filename} {
|
|
11
|
+
# Fail if bd script return an error code or a non zero value
|
|
12
|
+
if {[catch {source -notrace $filename} err]} {
|
|
13
|
+
return -code 1
|
|
14
|
+
} elseif {$err != 0} {
|
|
15
|
+
return -code 1
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
9
20
|
proc source_step_script {filename} {
|
|
10
21
|
# NOTE: make get_files fail if not files are found
|
|
11
22
|
set_msg_config -id {Vivado 12-818} -new_severity {ERROR}
|
|
@@ -101,7 +112,7 @@ read_edif "{{file.Path|replace('\\', '/')}}"
|
|
|
101
112
|
read_bd "{{file.Path|replace('\\', '/')}}"
|
|
102
113
|
{% elif file.FileType == VivadoBDTclFile %}
|
|
103
114
|
send_msg_id {SimplHDL PRJ-3} {INFO} "Sourcing BD tcl file {{file.Path|replace('\\', '/')}}: this might take some time."
|
|
104
|
-
|
|
115
|
+
source_bd_script "{{file.Path|replace('\\', '/')}}"
|
|
105
116
|
{% elif file.FileType == VivadoProjectStepFile %}
|
|
106
117
|
add_files -fileset utils_1 "{{file.Path|replace('\\', '/')}}"
|
|
107
118
|
global step
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.5.7"
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from ..generator import GeneratorFactory, GeneratorBase
|
|
4
|
-
from ..pyedaa import SystemRDLSourceFile, SystemVerilogSourceFile
|
|
5
|
-
from ..flow import FlowBase
|
|
6
|
-
from ..utils import sh
|
|
7
|
-
|
|
8
|
-
logger = logging.getLogger(__name__)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
@GeneratorFactory.register('SystemRDL')
|
|
12
|
-
class SystemRDL(GeneratorBase):
|
|
13
|
-
|
|
14
|
-
def run(self, flow: FlowBase):
|
|
15
|
-
rdlfiles = self.project.DefaultDesign.DefaultFileSet.Files(fileType=SystemRDLSourceFile)
|
|
16
|
-
output_dir = self.builddir.joinpath('systemrdl')
|
|
17
|
-
|
|
18
|
-
for rdlfile in rdlfiles:
|
|
19
|
-
logger.debug("Running SystemRDL Generator")
|
|
20
|
-
output_dir.mkdir(exist_ok=True)
|
|
21
|
-
sh(f'peakrdl regblock {rdlfile.Path} -o {output_dir} --cpuif axi4-lite'.split())
|
|
22
|
-
pkgfile = SystemVerilogSourceFile(output_dir.joinpath(f'{rdlfile.Path.stem}_pkg.sv'))
|
|
23
|
-
svfile = SystemVerilogSourceFile(output_dir.joinpath(f'{rdlfile.Path.stem}.sv'))
|
|
24
|
-
rdlfile.FileSet.InsertFileAfter(rdlfile, pkgfile)
|
|
25
|
-
rdlfile.FileSet.InsertFileAfter(rdlfile, svfile)
|
|
26
|
-
# NOTE: After inserting files call next to prevent infinit iterations
|
|
27
|
-
next(rdlfiles)
|
|
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
|