siliconcompiler 0.28.7__tar.gz → 0.28.9__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.
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/Changes +27 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/PKG-INFO +4 -3
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/pyproject.toml +3 -2
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/_metadata.py +1 -1
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/dashboard/components/graph.py +11 -6
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/dashboard/layouts/vertical_flowgraph.py +1 -1
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/dashboard/layouts/vertical_flowgraph_node_tab.py +1 -1
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/dashboard/layouts/vertical_flowgraph_sac_tabs.py +1 -1
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/report.py +20 -1
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/scheduler/send_messages.py +37 -33
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/scheduler/validation/email_credentials.json +7 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/targets/fpgaflow_demo.py +6 -7
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/_common/__init__.py +2 -2
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/_common/asic.py +47 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/klayout_show.py +53 -13
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/openroad.py +121 -4
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_procs.tcl +9 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_report.tcl +19 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vivado/bitstream.py +8 -2
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vivado/place.py +6 -2
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vivado/route.py +6 -2
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vivado/scripts/sc_bitstream.tcl +1 -1
- siliconcompiler-0.28.9/siliconcompiler/tools/vivado/scripts/sc_place.tcl +2 -0
- siliconcompiler-0.28.9/siliconcompiler/tools/vivado/scripts/sc_route.tcl +4 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vivado/scripts/sc_run.tcl +4 -2
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vivado/syn_fpga.py +5 -1
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vivado/vivado.py +26 -10
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vpr/vpr.py +11 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/syn_asic.tcl +3 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/_tools.json +2 -2
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/utils/__init__.py +12 -5
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/utils/showtools.py +2 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler.egg-info/PKG-INFO +4 -3
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler.egg-info/SOURCES.txt +0 -1
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler.egg-info/requires.txt +3 -2
- siliconcompiler-0.28.7/siliconcompiler/tools/vivado/scripts/sc_place.tcl +0 -2
- siliconcompiler-0.28.7/siliconcompiler/tools/vivado/scripts/sc_route.tcl +0 -4
- siliconcompiler-0.28.7/siliconcompiler/toolscripts/ubuntu24/install-openroad.sh +0 -31
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/.dockerignore +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/.flake8 +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/.gitattributes +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/.gitignore +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/.readthedocs.yaml +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/CONTRIBUTING.md +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/LICENSE +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/MANIFEST.in +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/README.md +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/SECURITY.md +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/scripts/.gitignore +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/scripts/profile_sc.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/scripts/report_library.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/setup.cfg +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/__main__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/_common.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/apps/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/apps/_common.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/apps/sc.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/apps/sc_dashboard.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/apps/sc_install.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/apps/sc_issue.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/apps/sc_remote.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/apps/sc_server.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/apps/sc_show.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/apps/smake.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/apps/utils/summarize.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/checklists/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/checklists/oh_tapeout.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/core.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/data/RobotoMono/LICENSE.txt +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/data/RobotoMono/RobotoMono-Regular.ttf +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/data/RobotoMono/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/data/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/data/heartbeat.v +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/data/logo.png +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flowgraph.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/_common.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/asicflow.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/asictopflow.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/drcflow.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/dvflow.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/fpgaflow.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/generate_openroad_rcx.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/interposerflow.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/lintflow.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/screenshotflow.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/showflow.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/signoffflow.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/flows/synflow.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/fpgas/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/fpgas/lattice_ice40.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/fpgas/vpr_example.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/issue.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/libs/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/libs/asap7sc7p5t.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/libs/gf180mcu.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/libs/interposer.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/libs/nangate45.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/libs/sg13g2_stdcell.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/libs/sky130hd.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/libs/sky130io.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/package.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/pdks/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/pdks/asap7.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/pdks/freepdk45.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/pdks/gf180.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/pdks/ihp130.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/pdks/interposer.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/pdks/skywater130.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/client.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/schema.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/requests/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/requests/cancel_job.json +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/requests/check_progress.json +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/requests/check_server.json +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/requests/delete_job.json +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/requests/get_results.json +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/requests/remote_run.json +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/responses/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/responses/cancel_job.json +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/responses/check_progress.json +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/responses/check_server.json +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/responses/delete_job.json +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/responses/get_results.json +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/remote/server_schema/responses/remote_run.json +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/dashboard/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/dashboard/components/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/dashboard/components/flowgraph.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/dashboard/layouts/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/dashboard/layouts/_common.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/dashboard/state.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/dashboard/utils/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/dashboard/utils/file_utils.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/dashboard/viewer.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/html_report.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/summary_image.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/summary_table.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/report/utils.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/scheduler/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/scheduler/docker_runner.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/scheduler/run_node.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/scheduler/slurm.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/scheduler/validation/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/schema/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/schema/schema_cfg.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/schema/schema_obj.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/schema/utils.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/sphinx_ext/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/sphinx_ext/dynamicgen.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/sphinx_ext/schemagen.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/sphinx_ext/utils.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/targets/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/targets/asap7_demo.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/targets/asic_demo.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/targets/freepdk45_demo.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/targets/gf180_demo.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/targets/ihp130_demo.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/targets/interposer_demo.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/targets/skywater130_demo.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/email/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/email/general.j2 +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/email/summary.j2 +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/issue/README.txt +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/issue/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/issue/run.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/report/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/report/bootstrap.min.css +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/report/bootstrap.min.js +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/report/bootstrap_LICENSE.md +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/report/sc_report.j2 +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/slurm/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/slurm/run.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/tcl/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/templates/tcl/manifest.tcl.j2 +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/_common/sdc/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/_common/sdc/sc_constraints.sdc +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/_common/tcl/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/_common/tcl/sc_pin_constraints.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/bambu/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/bambu/bambu.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/bambu/convert.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/bluespec/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/bluespec/bluespec.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/bluespec/convert.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/builtin/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/builtin/_common.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/builtin/builtin.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/builtin/concatenate.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/builtin/join.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/builtin/maximum.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/builtin/minimum.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/builtin/mux.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/builtin/nop.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/builtin/verify.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/chisel/SCDriver.scala +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/chisel/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/chisel/build.sbt +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/chisel/chisel.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/chisel/convert.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/execute/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/execute/exec_input.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/execute/execute.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/genfasm/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/genfasm/bitstream.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/genfasm/genfasm.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/ghdl/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/ghdl/convert.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/ghdl/ghdl.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/icarus/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/icarus/compile.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/icarus/icarus.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/icepack/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/icepack/bitstream.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/icepack/icepack.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/convert_drc_db.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/drc.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/export.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/klayout.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/klayout_convert_drc_db.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/klayout_export.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/klayout_operations.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/klayout_utils.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/operations.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/screenshot.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/show.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/magic/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/magic/drc.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/magic/extspice.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/magic/magic.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/magic/sc_drc.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/magic/sc_extspice.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/magic/sc_magic.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/montage/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/montage/montage.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/montage/tile.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/netgen/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/netgen/count_lvs.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/netgen/lvs.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/netgen/netgen.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/netgen/sc_lvs.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/nextpnr/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/nextpnr/apr.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/nextpnr/nextpnr.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/cts.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/dfm.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/export.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/floorplan.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/metrics.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/physyn.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/place.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/rcx_bench.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/rcx_extract.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/rdlroute.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/route.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/screenshot.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_apr.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_cts.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_dfm.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_export.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_floorplan.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_metrics.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_physyn.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_place.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_rcx_bench.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_rcx_extract.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_route.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_screenshot.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_write.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/scripts/sc_write_images.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/show.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/templates/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/templates/pex.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/opensta/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/opensta/report_libraries.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/opensta/scripts/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/opensta/scripts/sc_procs.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/opensta/scripts/sc_timing.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/opensta/timing.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/slang/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/slang/lint.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/surelog/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/surelog/parse.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/surelog/templates/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/surelog/templates/output.v +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/sv2v/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/sv2v/convert.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/sv2v/sv2v.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/template/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/template/template.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/verilator/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/verilator/compile.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/verilator/lint.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/verilator/parse.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/verilator/verilator.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vivado/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vivado/scripts/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vivado/scripts/sc_syn_fpga.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vpr/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vpr/_json_constraint.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vpr/_xml_constraint.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vpr/place.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vpr/route.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vpr/screenshot.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/vpr/show.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/xdm/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/xdm/convert.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/xyce/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/xyce/simulate.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/lec.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/prepareLib.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/procs.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/sc_lec.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/sc_screenshot.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/sc_syn.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/screenshot.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/syn_asic.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/syn_fpga.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/syn_fpga.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/syn_strategies.tcl +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/techmaps/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/techmaps/lcu_kogge_stone.v +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/templates/__init__.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/templates/abc.const +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/yosys/yosys.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/_tools.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-chisel.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-ghdl.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-icarus.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-klayout.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-magic.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-montage.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-netgen.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-slang.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-surelog.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-sv2v.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-verible.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-verilator.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-xyce.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel8/install-yosys.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-chisel.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-ghdl.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-icarus.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-klayout.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-magic.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-montage.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-netgen.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-slang.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-surelog.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-sv2v.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-verible.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-verilator.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-xdm.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-xyce.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/rhel9/install-yosys.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-bambu.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-bluespec.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-chisel.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-ghdl.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-icarus.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-icepack.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-klayout.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-magic.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-montage.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-netgen.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-nextpnr.sh +0 -0
- {siliconcompiler-0.28.7/siliconcompiler/toolscripts/rhel8 → siliconcompiler-0.28.9/siliconcompiler/toolscripts/ubuntu20}/install-openroad.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-slang.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-slurm.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-surelog.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-sv2v.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-verible.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-verilator.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-vpr.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-xdm.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-xyce.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu20/install-yosys.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-bambu.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-bluespec.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-chisel.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-ghdl.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-icarus.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-icepack.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-klayout.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-magic.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-montage.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-netgen.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-nextpnr.sh +0 -0
- {siliconcompiler-0.28.7/siliconcompiler/toolscripts/ubuntu20 → siliconcompiler-0.28.9/siliconcompiler/toolscripts/ubuntu22}/install-openroad.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-slang.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-slurm.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-surelog.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-sv2v.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-verible.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-verilator.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-vpr.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-xdm.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-xyce.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu22/install-yosys.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-bambu.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-bluespec.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-chisel.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-ghdl.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-icarus.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-icepack.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-klayout.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-magic.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-montage.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-netgen.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-nextpnr.sh +0 -0
- {siliconcompiler-0.28.7/siliconcompiler/toolscripts/ubuntu22 → siliconcompiler-0.28.9/siliconcompiler/toolscripts/ubuntu24}/install-openroad.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-slang.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-slurm.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-surelog.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-sv2v.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-verible.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-verilator.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-vpr.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-xdm.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-xyce.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/toolscripts/ubuntu24/install-yosys.sh +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/units.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/use.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/utils/asic.py +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler.egg-info/dependency_links.txt +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler.egg-info/entry_points.txt +0 -0
- {siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler.egg-info/top_level.txt +0 -0
|
@@ -8,6 +8,33 @@ The changes in each SiliconCompiler release version are described below. Commit
|
|
|
8
8
|
version shown in (). Where applicable, the contributors that suggested a given
|
|
9
9
|
feature are shown in [].
|
|
10
10
|
|
|
11
|
+
SiliconCompiler 0.28.9 (2024-11-27)
|
|
12
|
+
=========================================
|
|
13
|
+
|
|
14
|
+
**Minor:**
|
|
15
|
+
|
|
16
|
+
* Added option to limit size of emailed logs based on number of lines.
|
|
17
|
+
* Fixed handling of `find_files` in frontend tools
|
|
18
|
+
* Removed automatic error when FPGA is not loaded, as this can be handled by the tool/task drivers.
|
|
19
|
+
|
|
20
|
+
* Tools:
|
|
21
|
+
|
|
22
|
+
* vivado: update tool and task drivers to handle v2024.x and cleaned up output filenames.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
SiliconCompiler 0.28.8 (2024-11-20)
|
|
26
|
+
=========================================
|
|
27
|
+
|
|
28
|
+
**Minor:**
|
|
29
|
+
|
|
30
|
+
* Fixed dashboard handling of graph metrics when job history contains different sets.
|
|
31
|
+
|
|
32
|
+
* Tools:
|
|
33
|
+
|
|
34
|
+
* openroad: added reporting of module cell areas.
|
|
35
|
+
* vpr: added options to prevent crashing in designed with dangling ports.
|
|
36
|
+
|
|
37
|
+
|
|
11
38
|
SiliconCompiler 0.28.7 (2024-11-12)
|
|
12
39
|
=========================================
|
|
13
40
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: siliconcompiler
|
|
3
|
-
Version: 0.28.
|
|
3
|
+
Version: 0.28.9
|
|
4
4
|
Summary: A compiler framework that automates translation from source code to silicon.
|
|
5
5
|
Author-email: Andreas Olofsson <andreas.d.olofsson@gmail.com>
|
|
6
6
|
License: Apache License 2.0
|
|
@@ -25,7 +25,8 @@ Classifier: Topic :: Software Development :: Build Tools
|
|
|
25
25
|
Requires-Python: >=3.8
|
|
26
26
|
Description-Content-Type: text/markdown
|
|
27
27
|
License-File: LICENSE
|
|
28
|
-
Requires-Dist: aiohttp==3.10.
|
|
28
|
+
Requires-Dist: aiohttp==3.10.11; python_version <= "3.8"
|
|
29
|
+
Requires-Dist: aiohttp==3.11.2; python_version >= "3.9"
|
|
29
30
|
Requires-Dist: requests==2.32.3
|
|
30
31
|
Requires-Dist: PyYAML==6.0.2
|
|
31
32
|
Requires-Dist: pandas>=1.1.5
|
|
@@ -46,7 +47,7 @@ Requires-Dist: docker==7.1.0
|
|
|
46
47
|
Requires-Dist: importlib_metadata; python_version < "3.10"
|
|
47
48
|
Requires-Dist: sc-surelog==1.84.1
|
|
48
49
|
Requires-Dist: orjson==3.10.11
|
|
49
|
-
Requires-Dist: streamlit==1.40.
|
|
50
|
+
Requires-Dist: streamlit==1.40.1; python_full_version != "3.9.7"
|
|
50
51
|
Requires-Dist: streamlit_agraph==0.0.45; python_full_version != "3.9.7"
|
|
51
52
|
Requires-Dist: streamlit-antd-components==0.3.2; python_full_version != "3.9.7"
|
|
52
53
|
Requires-Dist: streamlit_javascript==0.1.5; python_full_version != "3.9.7"
|
|
@@ -32,7 +32,8 @@ classifiers = [
|
|
|
32
32
|
]
|
|
33
33
|
requires-python = ">= 3.8"
|
|
34
34
|
dependencies = [
|
|
35
|
-
"aiohttp == 3.10.
|
|
35
|
+
"aiohttp == 3.10.11; python_version <= '3.8'",
|
|
36
|
+
"aiohttp == 3.11.2; python_version >= '3.9'",
|
|
36
37
|
"requests == 2.32.3",
|
|
37
38
|
"PyYAML == 6.0.2",
|
|
38
39
|
"pandas >= 1.1.5",
|
|
@@ -55,7 +56,7 @@ dependencies = [
|
|
|
55
56
|
"orjson == 3.10.11",
|
|
56
57
|
|
|
57
58
|
# dashboard, streamlit does not support 3.9.7
|
|
58
|
-
"streamlit == 1.40.
|
|
59
|
+
"streamlit == 1.40.1; python_full_version != '3.9.7'",
|
|
59
60
|
"streamlit_agraph == 0.0.45; python_full_version != '3.9.7'",
|
|
60
61
|
"streamlit-antd-components == 0.3.2; python_full_version != '3.9.7'",
|
|
61
62
|
"streamlit_javascript == 0.1.5; python_full_version != '3.9.7'",
|
|
@@ -133,7 +133,7 @@ def graph(metrics, nodes, node_to_step_index_map, graph_number):
|
|
|
133
133
|
|
|
134
134
|
data, metric_unit = report.get_chart_data(_get_report_chips(), metric, nodes_as_step_and_index)
|
|
135
135
|
if metric_unit:
|
|
136
|
-
y_axis_label = f'{metric}({metric_unit})'
|
|
136
|
+
y_axis_label = f'{metric} ({metric_unit})'
|
|
137
137
|
|
|
138
138
|
# Prepare plot data
|
|
139
139
|
filtered_data = {
|
|
@@ -142,7 +142,12 @@ def graph(metrics, nodes, node_to_step_index_map, graph_number):
|
|
|
142
142
|
color_label: []
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
|
|
145
|
+
labels = {
|
|
146
|
+
"runs": state.get_key(state.GRAPH_JOBS),
|
|
147
|
+
"nodes": [f'{step}{index}' for step, index in data]
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if nodes:
|
|
146
151
|
# filtering through data
|
|
147
152
|
for job_name in state.get_key(state.GRAPH_JOBS):
|
|
148
153
|
for step, index in data:
|
|
@@ -154,7 +159,7 @@ def graph(metrics, nodes, node_to_step_index_map, graph_number):
|
|
|
154
159
|
filtered_data[y_axis_label].append(data[(step, index)][job_name])
|
|
155
160
|
|
|
156
161
|
# Setup chart
|
|
157
|
-
x_axis = altair.X(x_axis_label, axis=altair.Axis(labelAngle=-75))
|
|
162
|
+
x_axis = altair.X(x_axis_label, axis=altair.Axis(labelAngle=-75), sort=labels[x_axis_label])
|
|
158
163
|
|
|
159
164
|
y_axis = y_axis_label
|
|
160
165
|
if log_scale and chart_type != 'bar':
|
|
@@ -183,9 +188,9 @@ def graph(metrics, nodes, node_to_step_index_map, graph_number):
|
|
|
183
188
|
streamlit.altair_chart(chart, use_container_width=True, theme='streamlit')
|
|
184
189
|
|
|
185
190
|
|
|
186
|
-
def viewer(
|
|
187
|
-
metrics =
|
|
188
|
-
|
|
191
|
+
def viewer(node_to_step_index_map):
|
|
192
|
+
nodes, metrics = report.get_chart_selection_options(_get_report_chips())
|
|
193
|
+
metrics = sorted(metrics)
|
|
189
194
|
|
|
190
195
|
job_selector_col, graph_adder_col = streamlit.columns(2, gap='large')
|
|
191
196
|
with job_selector_col:
|
|
@@ -112,6 +112,6 @@ def layout():
|
|
|
112
112
|
components.file_viewer(chip, f'{chip.getworkdir()}/{chip.design}.png')
|
|
113
113
|
|
|
114
114
|
if tab_selected == "Graphs":
|
|
115
|
-
graph.viewer(
|
|
115
|
+
graph.viewer(node_to_step_index_map)
|
|
116
116
|
|
|
117
117
|
_common.check_rerun()
|
|
@@ -105,6 +105,6 @@ def layout():
|
|
|
105
105
|
components.file_viewer(chip, f'{chip.getworkdir()}/{chip.design}.png')
|
|
106
106
|
|
|
107
107
|
if tab_selected == "Graphs":
|
|
108
|
-
graph.viewer(
|
|
108
|
+
graph.viewer(node_to_step_index_map)
|
|
109
109
|
|
|
110
110
|
_common.check_rerun()
|
|
@@ -335,9 +335,28 @@ def get_files(chip, step, index):
|
|
|
335
335
|
return logs_and_reports
|
|
336
336
|
|
|
337
337
|
|
|
338
|
+
def get_chart_selection_options(chips):
|
|
339
|
+
'''
|
|
340
|
+
Returns all the nodes and metrics available in the provided chips
|
|
341
|
+
|
|
342
|
+
Args:
|
|
343
|
+
chips (list) : A list of dictionaries with the form
|
|
344
|
+
{'chip_object': chip, 'chip_name': name}.
|
|
345
|
+
'''
|
|
346
|
+
nodes = set()
|
|
347
|
+
metrics = set()
|
|
348
|
+
for chip_and_chip_name in chips:
|
|
349
|
+
chip = chip_and_chip_name['chip_object']
|
|
350
|
+
nodes_list, _, _, _, chip_metrics, _ = \
|
|
351
|
+
utils._collect_data(chip, format_as_string=False)
|
|
352
|
+
nodes.update(set([f'{step}{index}' for step, index in nodes_list]))
|
|
353
|
+
metrics.update(set(chip_metrics))
|
|
354
|
+
return nodes, metrics
|
|
355
|
+
|
|
356
|
+
|
|
338
357
|
def get_chart_data(chips, metric, nodes):
|
|
339
358
|
'''
|
|
340
|
-
Returns returns a
|
|
359
|
+
Returns returns a tuple where the first element is a 2d dictionary of
|
|
341
360
|
data points, following the forms {step+index: {chip_name: value}} where
|
|
342
361
|
each dictionary can have many keys. The second element is a string that represents the unit.
|
|
343
362
|
|
{siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/scheduler/send_messages.py
RENAMED
|
@@ -81,40 +81,44 @@ def send(chip, msg_type, step, index):
|
|
|
81
81
|
msg['To'] = ", ".join(to)
|
|
82
82
|
msg['X-Entity-Ref-ID'] = uuid.uuid4().hex # keep emails from getting grouped
|
|
83
83
|
|
|
84
|
-
if
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
filename=os.path.basename(layout_img))
|
|
92
|
-
msg.attach(img_attach)
|
|
93
|
-
|
|
94
|
-
nodes_to_execute = get_executed_nodes(chip, flow)
|
|
95
|
-
nodes, errors, metrics, metrics_unit, metrics_to_show, _ = \
|
|
96
|
-
report_utils._collect_data(chip, flow=flow, flowgraph_nodes=nodes_to_execute)
|
|
97
|
-
|
|
98
|
-
text_msg = get_file_template('email/summary.j2').render(
|
|
99
|
-
design=chip.design,
|
|
100
|
-
nodes=nodes,
|
|
101
|
-
errors=errors,
|
|
102
|
-
metrics=metrics,
|
|
103
|
-
metrics_unit=metrics_unit,
|
|
104
|
-
metric_keys=metrics_to_show)
|
|
105
|
-
else:
|
|
106
|
-
# Attach logs
|
|
107
|
-
for log in (f'sc_{step}{index}.log', f'{step}.log'):
|
|
108
|
-
log_file = f'{chip.getworkdir(step=step, index=index)}/{log}'
|
|
109
|
-
if os.path.exists(log_file):
|
|
110
|
-
with sc_open(log_file) as f:
|
|
111
|
-
log_attach = MIMEApplication(f.read())
|
|
112
|
-
log_name, _ = os.path.splitext(log)
|
|
113
|
-
# Make attachment a txt file to avoid issues with tools not loading .log
|
|
114
|
-
log_attach.add_header('Content-Disposition',
|
|
84
|
+
if cred["max_file_size"] > 0:
|
|
85
|
+
if msg_type == "summary":
|
|
86
|
+
layout_img = report_utils._find_summary_image(chip)
|
|
87
|
+
if layout_img and os.path.isfile(layout_img):
|
|
88
|
+
with open(layout_img, 'rb') as img_file:
|
|
89
|
+
img_attach = MIMEApplication(img_file.read())
|
|
90
|
+
img_attach.add_header('Content-Disposition',
|
|
115
91
|
'attachment',
|
|
116
|
-
filename=
|
|
117
|
-
msg.attach(
|
|
92
|
+
filename=os.path.basename(layout_img))
|
|
93
|
+
msg.attach(img_attach)
|
|
94
|
+
|
|
95
|
+
nodes_to_execute = get_executed_nodes(chip, flow)
|
|
96
|
+
nodes, errors, metrics, metrics_unit, metrics_to_show, _ = \
|
|
97
|
+
report_utils._collect_data(chip, flow=flow, flowgraph_nodes=nodes_to_execute)
|
|
98
|
+
|
|
99
|
+
text_msg = get_file_template('email/summary.j2').render(
|
|
100
|
+
design=chip.design,
|
|
101
|
+
nodes=nodes,
|
|
102
|
+
errors=errors,
|
|
103
|
+
metrics=metrics,
|
|
104
|
+
metrics_unit=metrics_unit,
|
|
105
|
+
metric_keys=metrics_to_show)
|
|
106
|
+
else:
|
|
107
|
+
# Attach logs
|
|
108
|
+
for log in (f'sc_{step}{index}.log', f'{step}.log'):
|
|
109
|
+
log_file = f'{chip.getworkdir(step=step, index=index)}/{log}'
|
|
110
|
+
if os.path.exists(log_file):
|
|
111
|
+
with sc_open(log_file) as f:
|
|
112
|
+
file_content = f.read().splitlines()
|
|
113
|
+
# Limit to max_file_size
|
|
114
|
+
file_content = file_content[-cred["max_file_size"]:]
|
|
115
|
+
log_attach = MIMEApplication("\n".join(file_content))
|
|
116
|
+
log_name, _ = os.path.splitext(log)
|
|
117
|
+
# Make attachment a txt file to avoid issues with tools not loading .log
|
|
118
|
+
log_attach.add_header('Content-Disposition',
|
|
119
|
+
'attachment',
|
|
120
|
+
filename=f'{log_name}.txt')
|
|
121
|
+
msg.attach(log_attach)
|
|
118
122
|
|
|
119
123
|
records = {}
|
|
120
124
|
for record in chip.getkeys('record'):
|
|
@@ -47,6 +47,13 @@
|
|
|
47
47
|
"examples": [true],
|
|
48
48
|
"type": "boolean",
|
|
49
49
|
"default": true
|
|
50
|
+
},
|
|
51
|
+
"max_file_size": {
|
|
52
|
+
"title": "Max line in log file",
|
|
53
|
+
"description": "Maximum number of file lines to include in log",
|
|
54
|
+
"examples": [1000],
|
|
55
|
+
"type": "integer",
|
|
56
|
+
"default": 1000
|
|
50
57
|
}
|
|
51
58
|
},
|
|
52
59
|
|
|
@@ -16,25 +16,24 @@ def make_docs(chip):
|
|
|
16
16
|
####################################################
|
|
17
17
|
# Target Setup
|
|
18
18
|
####################################################
|
|
19
|
-
def setup(chip):
|
|
19
|
+
def setup(chip, partname=None):
|
|
20
20
|
'''
|
|
21
21
|
Demonstration target for running the open-source fpgaflow.
|
|
22
22
|
'''
|
|
23
23
|
|
|
24
24
|
# 1. Configure fpga part
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
if not partname:
|
|
26
|
+
partname = chip.get('fpga', 'partname')
|
|
27
|
+
|
|
28
|
+
if not partname:
|
|
27
29
|
raise SiliconCompilerError('FPGA partname has not been set.', chip=chip)
|
|
28
30
|
|
|
29
31
|
# 2. Load all available FPGAs
|
|
30
32
|
chip.use(lattice_ice40)
|
|
31
33
|
chip.use(vpr_example)
|
|
32
34
|
|
|
33
|
-
if part_name not in chip.getkeys('fpga'):
|
|
34
|
-
raise SiliconCompilerError(f'{part_name} has not been loaded', chip=chip)
|
|
35
|
-
|
|
36
35
|
# 3. Load flow
|
|
37
|
-
chip.use(fpgaflow, partname=
|
|
36
|
+
chip.use(fpgaflow, partname=partname)
|
|
38
37
|
|
|
39
38
|
# 4. Select default flow
|
|
40
39
|
chip.set('option', 'flow', 'fpgaflow', clobber=False)
|
|
@@ -115,17 +115,17 @@ def get_input_files(chip, *key, add_library_files=True):
|
|
|
115
115
|
add_library_files (bool): When True, files from library keys
|
|
116
116
|
will be included
|
|
117
117
|
'''
|
|
118
|
-
step = chip.get('arg', 'step')
|
|
119
|
-
index = chip.get('arg', 'index')
|
|
120
118
|
|
|
121
119
|
files = []
|
|
122
120
|
for key in __get_keys(chip, *key, include_library_files=False):
|
|
121
|
+
step, index = __get_step_index(chip, *key)
|
|
123
122
|
files.extend(chip.find_files(*key, step=step, index=index))
|
|
124
123
|
|
|
125
124
|
if add_library_files:
|
|
126
125
|
for item in get_libraries(chip, include_asic=False):
|
|
127
126
|
lib_key = ('library', item, *key)
|
|
128
127
|
if __is_key_valid(chip, *lib_key):
|
|
128
|
+
step, index = __get_step_index(chip, *lib_key)
|
|
129
129
|
files.extend(chip.find_files(*lib_key, step=step, index=index))
|
|
130
130
|
|
|
131
131
|
return __remove_duplicates(chip, files, list(key))
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from .. import _common
|
|
2
|
+
import json
|
|
2
3
|
|
|
3
4
|
|
|
4
5
|
def get_mainlib(chip):
|
|
@@ -169,3 +170,49 @@ def get_tool_task_var(chip,
|
|
|
169
170
|
_, value = _common.pick_key(chip, reversed(check_keys), step=step, index=index)
|
|
170
171
|
|
|
171
172
|
return value
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
class CellArea:
|
|
176
|
+
def __init__(self):
|
|
177
|
+
self.__areas = {}
|
|
178
|
+
|
|
179
|
+
def addCell(self, name=None, module=None,
|
|
180
|
+
cellarea=None, cellcount=None,
|
|
181
|
+
macroarea=None, macrocount=None,
|
|
182
|
+
stdcellarea=None, stdcellcount=None):
|
|
183
|
+
if not name and not module:
|
|
184
|
+
return
|
|
185
|
+
|
|
186
|
+
if all([metric is None for metric in (
|
|
187
|
+
cellarea, cellcount,
|
|
188
|
+
macroarea, macrocount,
|
|
189
|
+
stdcellarea, stdcellcount)]):
|
|
190
|
+
return
|
|
191
|
+
|
|
192
|
+
if not name:
|
|
193
|
+
name = module
|
|
194
|
+
|
|
195
|
+
# ensure name is unique
|
|
196
|
+
check_name = name
|
|
197
|
+
idx = 0
|
|
198
|
+
while check_name in self.__areas:
|
|
199
|
+
check_name = f'{name}{idx}'
|
|
200
|
+
idx += 1
|
|
201
|
+
name = check_name
|
|
202
|
+
|
|
203
|
+
self.__areas[name] = {
|
|
204
|
+
"module": module,
|
|
205
|
+
"cellarea": cellarea,
|
|
206
|
+
"cellcount": cellcount,
|
|
207
|
+
"macroarea": macroarea,
|
|
208
|
+
"macrocount": macrocount,
|
|
209
|
+
"stdcellarea": stdcellarea,
|
|
210
|
+
"stdcellcount": stdcellcount
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
def size(self):
|
|
214
|
+
return len(self.__areas)
|
|
215
|
+
|
|
216
|
+
def writeReport(self, path):
|
|
217
|
+
with open(path, 'w') as f:
|
|
218
|
+
json.dump(self.__areas, f, indent=4)
|
{siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/klayout/klayout_show.py
RENAMED
|
@@ -3,7 +3,7 @@ import os
|
|
|
3
3
|
import sys
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
def show(schema, tech, input_path, output_path, screenshot=False):
|
|
6
|
+
def show(schema, tech, input_path, output_path, screenshot=False, report=None):
|
|
7
7
|
# Extract info from manifest
|
|
8
8
|
flow = schema.get('option', 'flow')
|
|
9
9
|
step = schema.get('arg', 'step')
|
|
@@ -80,6 +80,14 @@ def show(schema, tech, input_path, output_path, screenshot=False):
|
|
|
80
80
|
__screenshot(schema, layout_view, output_path)
|
|
81
81
|
else:
|
|
82
82
|
__screenshot_montage(schema, layout_view, xbins, ybins)
|
|
83
|
+
else:
|
|
84
|
+
if report:
|
|
85
|
+
rdb_id = layout_view.create_rdb(os.path.basename(report))
|
|
86
|
+
rdb = layout_view.rdb(rdb_id)
|
|
87
|
+
print(f"[INFO] reading DRC report: {report}")
|
|
88
|
+
rdb.load(report)
|
|
89
|
+
|
|
90
|
+
layout_view.show_rdb(rdb_id, cell_view.index())
|
|
83
91
|
|
|
84
92
|
|
|
85
93
|
def __screenshot(schema, layout_view, output_path):
|
|
@@ -215,24 +223,56 @@ def main():
|
|
|
215
223
|
if not design:
|
|
216
224
|
design = schema.get('design')
|
|
217
225
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
for
|
|
227
|
-
|
|
228
|
-
|
|
226
|
+
sc_fileext = schema.get('tool', 'klayout', 'task', task, 'var', 'show_filetype',
|
|
227
|
+
step=step, index=index)[0]
|
|
228
|
+
sc_report = None
|
|
229
|
+
if sc_fileext in ('lyrdb', 'ascii'):
|
|
230
|
+
sc_report = schema.get('tool', 'klayout', 'task', task, 'var', 'show_filepath',
|
|
231
|
+
step=step, index=index)[0]
|
|
232
|
+
|
|
233
|
+
sc_filename = None
|
|
234
|
+
for fileext in ('gds', 'oas'):
|
|
235
|
+
for ext in (f'{fileext}.gz', fileext):
|
|
236
|
+
sc_filename = f"inputs/{design}.{ext}"
|
|
237
|
+
if os.path.exists(sc_filename):
|
|
238
|
+
break
|
|
239
|
+
sc_filename = None
|
|
240
|
+
if sc_filename:
|
|
229
241
|
break
|
|
230
242
|
|
|
243
|
+
if not sc_filename:
|
|
244
|
+
show_step = schema.get('arg', 'step')
|
|
245
|
+
if schema.valid('tool', 'klayout', 'task', task, 'var', 'show_step'):
|
|
246
|
+
show_index = schema.get('tool', 'klayout', 'task', task, 'var', 'show_step',
|
|
247
|
+
step=step, index=index)[0]
|
|
248
|
+
show_index = schema.get('arg', 'index')
|
|
249
|
+
if schema.valid('tool', 'klayout', 'task', task, 'var', 'show_index'):
|
|
250
|
+
show_index = schema.get('tool', 'klayout', 'task', task, 'var', 'show_index',
|
|
251
|
+
step=step, index=index)[0]
|
|
252
|
+
for fileext in ('gds', 'oas'):
|
|
253
|
+
if schema.valid('input', 'layout', fileext) and \
|
|
254
|
+
schema.get('input', 'layout', fileext, step=show_step, index=show_index):
|
|
255
|
+
sc_filename = schema.get('input', 'layout', fileext,
|
|
256
|
+
step=show_step, index=show_index)[0]
|
|
257
|
+
if sc_filename:
|
|
258
|
+
break
|
|
259
|
+
else:
|
|
260
|
+
if 'show_filepath' in schema.getkeys('tool', 'klayout', 'task', task, 'var') and \
|
|
261
|
+
schema.get('tool', 'klayout', 'task', task, 'var', 'show_filepath',
|
|
262
|
+
step=step, index=index):
|
|
263
|
+
sc_filename = schema.get('tool', 'klayout', 'task', task, 'var', 'show_filepath',
|
|
264
|
+
step=step, index=index)[0]
|
|
265
|
+
else:
|
|
266
|
+
for ext in (f'{sc_fileext}.gz', sc_fileext):
|
|
267
|
+
sc_filename = f"inputs/{design}.{ext}"
|
|
268
|
+
if os.path.exists(sc_filename):
|
|
269
|
+
break
|
|
270
|
+
|
|
231
271
|
sc_exit = schema.get('tool', 'klayout', 'task', task, 'var', 'show_exit',
|
|
232
272
|
step=step, index=index) == ["true"]
|
|
233
273
|
|
|
234
274
|
show(schema, technology(design, schema), sc_filename, f'outputs/{design}.png',
|
|
235
|
-
screenshot=(task == 'screenshot'))
|
|
275
|
+
screenshot=(task == 'screenshot'), report=sc_report)
|
|
236
276
|
|
|
237
277
|
if sc_exit:
|
|
238
278
|
pya.Application.instance().exit(0)
|
{siliconcompiler-0.28.7 → siliconcompiler-0.28.9}/siliconcompiler/tools/openroad/openroad.py
RENAMED
|
@@ -17,7 +17,8 @@ from siliconcompiler import sc_open
|
|
|
17
17
|
from siliconcompiler import utils
|
|
18
18
|
from siliconcompiler.tools._common import input_provides, add_common_file, \
|
|
19
19
|
get_tool_task, record_metric
|
|
20
|
-
from siliconcompiler.tools._common.asic import get_mainlib, set_tool_task_var, get_libraries
|
|
20
|
+
from siliconcompiler.tools._common.asic import get_mainlib, set_tool_task_var, get_libraries, \
|
|
21
|
+
CellArea
|
|
21
22
|
from siliconcompiler.targets import asap7_demo
|
|
22
23
|
|
|
23
24
|
|
|
@@ -268,8 +269,12 @@ def post_process(chip):
|
|
|
268
269
|
"timing/hold.rpt",
|
|
269
270
|
"timing/hold.topN.rpt"],
|
|
270
271
|
"holdpaths": ["timing/hold.topN.rpt"],
|
|
271
|
-
"unconstrained": ["timing/unconstrained.topN.rpt"],
|
|
272
|
-
"peakpower": [
|
|
272
|
+
"unconstrained": ["timing/unconstrained.rpt", "timing/unconstrained.topN.rpt"],
|
|
273
|
+
"peakpower": [
|
|
274
|
+
*[f"power/{corner}.rpt" for corner in chip.getkeys('constraint', 'timing')],
|
|
275
|
+
*[f"images/heatmap/power_density/{corner}.png"
|
|
276
|
+
for corner in chip.getkeys('constraint', 'timing')]
|
|
277
|
+
],
|
|
273
278
|
"drvs": ["timing/drv_violators.rpt",
|
|
274
279
|
"floating_nets.rpt",
|
|
275
280
|
f"{chip.design}_antenna.rpt",
|
|
@@ -277,7 +282,9 @@ def post_process(chip):
|
|
|
277
282
|
"drcs": [f"{chip.design}_drc.rpt",
|
|
278
283
|
f"markers/{chip.design}.drc.rpt",
|
|
279
284
|
f"markers/{chip.design}.drc.json",
|
|
280
|
-
f"images/markers/{chip.design}.drc.png"]
|
|
285
|
+
f"images/markers/{chip.design}.drc.png"],
|
|
286
|
+
"utilization": ["images/heatmap/placement_density.png"],
|
|
287
|
+
"wirelength": [f"images/{chip.design}.routing.png"]
|
|
281
288
|
}
|
|
282
289
|
metric_reports["leakagepower"] = metric_reports["peakpower"]
|
|
283
290
|
|
|
@@ -300,6 +307,8 @@ def post_process(chip):
|
|
|
300
307
|
chip.logger.error(f'Unable to parse metrics from OpenROAD: {e}')
|
|
301
308
|
metrics = {}
|
|
302
309
|
|
|
310
|
+
_generate_cell_area_report(chip.top(), metrics)
|
|
311
|
+
|
|
303
312
|
or_units = {}
|
|
304
313
|
for unit, or_unit in [('time', 'run__flow__platform__time_units'),
|
|
305
314
|
('capacitance', 'run__flow__platform__capacitance_units'),
|
|
@@ -424,6 +433,114 @@ def post_process(chip):
|
|
|
424
433
|
record_metric(chip, step, index, 'drcs', drcs, get_metric_sources('drcs'))
|
|
425
434
|
|
|
426
435
|
|
|
436
|
+
def _generate_cell_area_report(design, ord_metrics):
|
|
437
|
+
cellarea_report = CellArea()
|
|
438
|
+
|
|
439
|
+
prefix = "sc__cellarea__design__instance"
|
|
440
|
+
|
|
441
|
+
filtered_data = {}
|
|
442
|
+
for key, value in ord_metrics.items():
|
|
443
|
+
if key.startswith(prefix):
|
|
444
|
+
filtered_data[key[len(prefix)+2:]] = value
|
|
445
|
+
|
|
446
|
+
modules = set()
|
|
447
|
+
modules.add("")
|
|
448
|
+
for key in filtered_data.keys():
|
|
449
|
+
if "__in_module:" in key:
|
|
450
|
+
module = key[key.find("__in_module:"):]
|
|
451
|
+
modules.add(module)
|
|
452
|
+
|
|
453
|
+
def process_cell(group):
|
|
454
|
+
data = {}
|
|
455
|
+
for key, value in filtered_data.items():
|
|
456
|
+
if (group != "" and key.endswith(group)):
|
|
457
|
+
key = key[:key.find("__in_module:")]
|
|
458
|
+
data[key] = value
|
|
459
|
+
elif (group == "" and "__in_module" not in key):
|
|
460
|
+
data[key] = value
|
|
461
|
+
|
|
462
|
+
cell_type = None
|
|
463
|
+
cell_name = None
|
|
464
|
+
|
|
465
|
+
if not group:
|
|
466
|
+
cell_type = design
|
|
467
|
+
cell_name = design
|
|
468
|
+
else:
|
|
469
|
+
cell_type = group[len("__in_module:"):]
|
|
470
|
+
|
|
471
|
+
cellarea = None
|
|
472
|
+
cellcount = None
|
|
473
|
+
|
|
474
|
+
macroarea = None
|
|
475
|
+
macrocount = None
|
|
476
|
+
|
|
477
|
+
stdcell_types = (
|
|
478
|
+
'tie_cell',
|
|
479
|
+
'standard_cell',
|
|
480
|
+
'buffer',
|
|
481
|
+
'clock_buffer',
|
|
482
|
+
'timing_repair_buffer',
|
|
483
|
+
'inverter',
|
|
484
|
+
'clock_inverter',
|
|
485
|
+
'timing_Repair_inverter',
|
|
486
|
+
'clock_gate_cell',
|
|
487
|
+
'level_shifter_cell',
|
|
488
|
+
'sequential_cell',
|
|
489
|
+
'multi_input_combinational_cell',
|
|
490
|
+
'other'
|
|
491
|
+
)
|
|
492
|
+
|
|
493
|
+
stdcell_info_area = []
|
|
494
|
+
stdcell_info_count = []
|
|
495
|
+
stdcellarea = None
|
|
496
|
+
stdcellcount = None
|
|
497
|
+
|
|
498
|
+
for key, value in data.items():
|
|
499
|
+
if key == 'name':
|
|
500
|
+
cell_name = value
|
|
501
|
+
elif key == 'count':
|
|
502
|
+
cellcount = value
|
|
503
|
+
elif key == 'area':
|
|
504
|
+
cellarea = value
|
|
505
|
+
elif key.startswith('count__class'):
|
|
506
|
+
_, cell_class = key.split(':')
|
|
507
|
+
if cell_class == 'macro':
|
|
508
|
+
macrocount = value
|
|
509
|
+
elif cell_class in stdcell_types:
|
|
510
|
+
stdcell_info_count.append(value)
|
|
511
|
+
elif key.startswith('area__class'):
|
|
512
|
+
_, cell_class = key.split(':')
|
|
513
|
+
if cell_class == 'macro':
|
|
514
|
+
macroarea = value
|
|
515
|
+
elif cell_class in stdcell_types:
|
|
516
|
+
stdcell_info_area.append(value)
|
|
517
|
+
|
|
518
|
+
if stdcell_info_count:
|
|
519
|
+
stdcellcount = sum(stdcell_info_count)
|
|
520
|
+
if stdcell_info_area:
|
|
521
|
+
stdcellarea = sum(stdcell_info_area)
|
|
522
|
+
|
|
523
|
+
cellarea_report.addCell(
|
|
524
|
+
name=cell_name,
|
|
525
|
+
module=cell_type,
|
|
526
|
+
cellarea=cellarea,
|
|
527
|
+
cellcount=cellcount,
|
|
528
|
+
macroarea=macroarea,
|
|
529
|
+
macrocount=macrocount,
|
|
530
|
+
stdcellarea=stdcellarea,
|
|
531
|
+
stdcellcount=stdcellcount)
|
|
532
|
+
|
|
533
|
+
if filtered_data:
|
|
534
|
+
return True
|
|
535
|
+
return False
|
|
536
|
+
|
|
537
|
+
for module in modules:
|
|
538
|
+
process_cell(module)
|
|
539
|
+
|
|
540
|
+
if cellarea_report.size() > 0:
|
|
541
|
+
cellarea_report.writeReport("reports/hierarchical_cell_area.json")
|
|
542
|
+
|
|
543
|
+
|
|
427
544
|
######
|
|
428
545
|
def get_library_timing_keypaths(chip, lib):
|
|
429
546
|
step = chip.get('arg', 'step')
|
|
@@ -483,3 +483,12 @@ proc sc_convert_rotation { rot } {
|
|
|
483
483
|
default { utl::error FLW 1 "$rot not recognized" }
|
|
484
484
|
}
|
|
485
485
|
}
|
|
486
|
+
|
|
487
|
+
proc sc_check_version { min_required } {
|
|
488
|
+
set version [split [ord::openroad_version] "-"]
|
|
489
|
+
if { [lindex $version 0] != "v2.0" } {
|
|
490
|
+
return false
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
return [expr { [lindex $version 1] >= $min_required }]
|
|
494
|
+
}
|