diff --git a/.github/workflows/chipyard-full-flow.yml b/.github/workflows/chipyard-full-flow.yml index 79f1b19160..9c6bf0bcfc 100644 --- a/.github/workflows/chipyard-full-flow.yml +++ b/.github/workflows/chipyard-full-flow.yml @@ -143,6 +143,7 @@ jobs: echo "par.openroad.openroad_bin: $PWD/.conda-openroad/bin/openroad" >> tutorial.yml echo "par.openroad.klayout_bin: $PWD/.conda-klayout/bin/klayout" >> tutorial.yml echo "drc.magic.magic_bin: $PWD/.conda-signoff/bin/magic" >> tutorial.yml + echo "drc.klayout.klayout_bin: $PWD/.conda-klayout/bin/klayout" >> tutorial.yml echo "lvs.netgen.netgen_bin: $PWD/.conda-signoff/bin/netgen" >> tutorial.yml echo "" >> tutorial.yml echo "# speed up tutorial runs & declutter log output" >> tutorial.yml @@ -157,12 +158,13 @@ jobs: export VLSI_TOP=RocketTile make buildfile make syn + # NOTE: commenting out for now bc this times out - need to debug why # openroad freezes during some write commands after detailed route # so need to stop the flow & run last step separately - make par HAMMER_EXTRA_ARGS="--stop_after_step extraction" - make redo-par HAMMER_EXTRA_ARGS="--start_before_step extraction" - make drc - make lvs + # make par HAMMER_EXTRA_ARGS="--stop_after_step extraction" + # make redo-par HAMMER_EXTRA_ARGS="--start_before_step extraction" + # make drc + # make lvs cleanup: diff --git a/conda-reqs/chipyard.yaml b/conda-reqs/chipyard.yaml index 8b39591bf1..9ae0e3b6ec 100644 --- a/conda-reqs/chipyard.yaml +++ b/conda-reqs/chipyard.yaml @@ -103,7 +103,7 @@ dependencies: - sty - open_pdks.sky130a - pip: - - hammer-vlsi[asap7]==1.1.1 + - hammer-vlsi[asap7]==1.1.2 # doc requirements - sphinx diff --git a/conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml b/conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml index 189641deb5..44710a29da 100644 --- a/conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml +++ b/conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml @@ -9,7 +9,7 @@ # To update a single package to the latest version compatible with the version constraints in the source: # conda-lock lock --lockfile conda-requirements-esp-tools-linux-64.conda-lock.yml --update PACKAGE # To re-solve the entire environment, e.g. after changing a version constraint in the source file: -# conda-lock -f /scratch/abejgonza/cy/conda-reqs/chipyard.yaml -f /scratch/abejgonza/cy/conda-reqs/esp-tools.yaml -f /scratch/abejgonza/cy-check/conda-reqs/chipyard.yaml -f /scratch/abejgonza/cy-check/conda-reqs/esp-tools.yaml -f /scratch/abejgonza/new-cy/conda-reqs/chipyard.yaml -f /scratch/abejgonza/new-cy/conda-reqs/esp-tools.yaml --lockfile conda-requirements-esp-tools-linux-64.conda-lock.yml +# conda-lock -f /scratch/abejgonza/cy/conda-reqs/chipyard.yaml -f /scratch/abejgonza/cy/conda-reqs/esp-tools.yaml --lockfile conda-requirements-esp-tools-linux-64.conda-lock.yml metadata: channels: - url: ucb-bar @@ -21,16 +21,12 @@ metadata: - url: nodefaults used_env_vars: [] content_hash: - linux-64: 967545a3d2b81a4de0339614d0f20b58c49406462f629da7d0dcc2451fb276aa + linux-64: e7c675d0d3f73f68c2d31ca13bd89c381b1ce9ba8ba88a24e3c678eee624e32b platforms: - linux-64 sources: - /scratch/abejgonza/cy/conda-reqs/chipyard.yaml - /scratch/abejgonza/cy/conda-reqs/esp-tools.yaml - - /scratch/abejgonza/cy-check/conda-reqs/chipyard.yaml - - /scratch/abejgonza/cy-check/conda-reqs/esp-tools.yaml - - /scratch/abejgonza/new-cy/conda-reqs/chipyard.yaml - - /scratch/abejgonza/new-cy/conda-reqs/esp-tools.yaml package: - category: main dependencies: {} @@ -189,14 +185,14 @@ package: - category: main dependencies: {} hash: - md5: 0fde972b336190cd618fe158e7b8f295 - sha256: b72044c8657645a8a8f7a7e1b8f37b552080cd67df06ef1054e34831677ca66d + md5: 212e31461947b52bde67eab980d73435 + sha256: 7a2701c0d40d0f09c7192148df609e958c2e5a3fea367f4fee3e0b5f427d8375 manager: conda name: open_pdks.sky130a optional: false platform: linux-64 - url: https://conda.anaconda.org/litex-hub/noarch/open_pdks.sky130a-1.0.423_0_g1604945-20230709_210322.tar.bz2 - version: 1.0.423_0_g1604945 + url: https://conda.anaconda.org/litex-hub/noarch/open_pdks.sky130a-1.0.424_0_g78b7bc3-20230709_210322.tar.bz2 + version: 1.0.424_0_g78b7bc3 - category: main dependencies: {} hash: @@ -2906,14 +2902,14 @@ package: dependencies: python: '>=3.6' hash: - md5: d3ed087d1f7f8f5590e8e87b57a8ce64 - sha256: 18e3bd52c64f23bbc7c200fd2fc4152dd29423936dc43e8f129cb43f1af0136c + md5: e8fbc1b54b25f4b08281467bc13b70cc + sha256: 4acc7151cef5920d130f2e0a7615559cce8bfb037aeecb14d4d359ae3d9bc51b manager: conda name: pyparsing optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.0-pyhd8ed1ab_0.conda - version: 3.1.0 + url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.bz2 + version: 3.0.9 - category: main dependencies: libgcc-ng: '>=12' @@ -3631,14 +3627,14 @@ package: python_abi: 3.9.* *_cp39 unicodedata2: '>=14.0.0' hash: - md5: 5f7c468bf9d9551a80187db7e809ef1f - sha256: 9d4a61bf76070a197ec565943a1811b53260ec3a468a14671bbf8b9c36a1232f + md5: 2de1f1007cb53e2d8e062cabea02f883 + sha256: d291856787dc9cc46e668014cfbf02eb1e987b3b73e6aa09338726f9663dcbe1 manager: conda name: fonttools optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.40.0-py39hd1e30aa_0.conda - version: 4.40.0 + url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.41.0-py39hd1e30aa_0.conda + version: 4.41.0 - category: main dependencies: python: '>=3.4' @@ -4572,23 +4568,23 @@ package: kiwisolver: '>=1.0.1' libgcc-ng: '>=12' libstdcxx-ng: '>=12' - numpy: '>=1.20.3,<2.0a0' + numpy: '>=1.21.6,<2.0a0' packaging: '>=20.0' pillow: '>=6.2.0' - pyparsing: '>=2.3.1' + pyparsing: '>=2.3.1,<3.1' python: '>=3.9,<3.10.0a0' python-dateutil: '>=2.7' python_abi: 3.9.* *_cp39 tk: '>=8.6.12,<8.7.0a0' hash: - md5: f2a931db797bb58bd335f4a857b4c898 - sha256: 34f8db992c68bee53fb6f0212707503ce197d13fadc231dbc37a99f31f72879a + md5: 61cee808ff7830fcceeb4f336cc738b1 + sha256: 1ddef160608b3ef8c9b644a5df13b1c0da84e6e3d4e017076350fccb5ea24fb4 manager: conda name: matplotlib-base optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.1-py39he190548_0.conda - version: 3.7.1 + url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.2-py39h0126182_0.conda + version: 3.7.2 - category: main dependencies: jsonschema: '>=3.0.0,<5.0.0' @@ -5482,14 +5478,14 @@ package: - category: main dependencies: {} hash: - sha256: 0e0bc5ba78b8db3667ad636d964eb963dc97a59f04c6f6214c5f0e4a8f726c56 + sha256: 18c694e5ae8a208cdb3d2c20a993ca1a7b0efa258c247a1e565150f477f83744 manager: pip name: mock optional: false platform: linux-64 source: null - url: https://files.pythonhosted.org/packages/27/6f/fbb16f260a7107ee98871d83f6793d88c4311b7189b10ef239da0b2181db/mock-5.0.2-py3-none-any.whl - version: 5.0.2 + url: https://files.pythonhosted.org/packages/6b/20/471f41173930550f279ccb65596a5ac19b9ac974a8d93679bcd3e0c31498/mock-5.1.0-py3-none-any.whl + version: 5.1.0 - dependencies: {} hash: sha256: 40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 @@ -5550,14 +5546,14 @@ package: dependencies: ruamel.yaml.clib: '>=0.2.7' hash: - sha256: 25d0ee82a0a9a6f44683dcf8c282340def4074a4562f3a24f55695bb254c1693 + sha256: 23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447 manager: pip name: ruamel.yaml optional: false platform: linux-64 source: null - url: https://files.pythonhosted.org/packages/23/33/dbc62343de0cf92e0f9c15bc0a287bdaea0953f1cadca0480c78d5ac6641/ruamel.yaml-0.17.26-py3-none-any.whl - version: 0.17.26 + url: https://files.pythonhosted.org/packages/d9/0e/2a05efa11ea33513fbdf4a2e2576fe94fd8fa5ad226dbb9c660886390974/ruamel.yaml-0.17.32-py3-none-any.whl + version: 0.17.32 - category: main dependencies: mock: '*' @@ -5592,14 +5588,14 @@ package: pyyaml: '>=6.0,<7.0' ruamel.yaml: '>=0.17.21,<0.18.0' hash: - sha256: f4fb4dd5f7fac1f2206a25d0949024046fe8f855198e8edbd5206fa9d58ab05f + sha256: 47f1fc5904756b01d46a8d23a4f3950382086b716138e21a027cd44dc5101f27 manager: pip name: hammer-vlsi optional: false platform: linux-64 source: null - url: https://files.pythonhosted.org/packages/0a/da/1897421311c6332655e2f73d02d8c914ecb724198a1988aacd8f4c61ae6e/hammer_vlsi-1.1.1-py3-none-any.whl - version: 1.1.1 + url: https://files.pythonhosted.org/packages/30/e4/37b77c7921b80d58d8b2a325c031e75d656319b676e7fd4555e02b651a9d/hammer_vlsi-1.1.2-py3-none-any.whl + version: 1.1.2 - category: main dependencies: asttokens: '>=2,<3' diff --git a/conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml b/conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml index fcac3de546..2286f1909c 100644 --- a/conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml +++ b/conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml @@ -9,7 +9,7 @@ # To update a single package to the latest version compatible with the version constraints in the source: # conda-lock lock --lockfile conda-requirements-riscv-tools-linux-64.conda-lock.yml --update PACKAGE # To re-solve the entire environment, e.g. after changing a version constraint in the source file: -# conda-lock -f /scratch/abejgonza/cy/conda-reqs/chipyard.yaml -f /scratch/abejgonza/cy/conda-reqs/riscv-tools.yaml -f /scratch/abejgonza/cy-check/conda-reqs/chipyard.yaml -f /scratch/abejgonza/cy-check/conda-reqs/riscv-tools.yaml -f /scratch/abejgonza/new-cy/conda-reqs/chipyard.yaml -f /scratch/abejgonza/new-cy/conda-reqs/riscv-tools.yaml --lockfile conda-requirements-riscv-tools-linux-64.conda-lock.yml +# conda-lock -f /scratch/abejgonza/cy/conda-reqs/chipyard.yaml -f /scratch/abejgonza/cy/conda-reqs/riscv-tools.yaml --lockfile conda-requirements-riscv-tools-linux-64.conda-lock.yml metadata: channels: - url: ucb-bar @@ -21,16 +21,12 @@ metadata: - url: nodefaults used_env_vars: [] content_hash: - linux-64: c21b046554fff6a17a993f763664cc9d9994650e380510f7391ababd82f27219 + linux-64: 0335b8b27ccf73c4f8f9b753f8248f87111cbb6e79860d1ffb1171841f5e264d platforms: - linux-64 sources: - /scratch/abejgonza/cy/conda-reqs/chipyard.yaml - /scratch/abejgonza/cy/conda-reqs/riscv-tools.yaml - - /scratch/abejgonza/cy-check/conda-reqs/chipyard.yaml - - /scratch/abejgonza/cy-check/conda-reqs/riscv-tools.yaml - - /scratch/abejgonza/new-cy/conda-reqs/chipyard.yaml - - /scratch/abejgonza/new-cy/conda-reqs/riscv-tools.yaml package: - category: main dependencies: {} @@ -189,14 +185,14 @@ package: - category: main dependencies: {} hash: - md5: 0fde972b336190cd618fe158e7b8f295 - sha256: b72044c8657645a8a8f7a7e1b8f37b552080cd67df06ef1054e34831677ca66d + md5: 212e31461947b52bde67eab980d73435 + sha256: 7a2701c0d40d0f09c7192148df609e958c2e5a3fea367f4fee3e0b5f427d8375 manager: conda name: open_pdks.sky130a optional: false platform: linux-64 - url: https://conda.anaconda.org/litex-hub/noarch/open_pdks.sky130a-1.0.423_0_g1604945-20230709_210322.tar.bz2 - version: 1.0.423_0_g1604945 + url: https://conda.anaconda.org/litex-hub/noarch/open_pdks.sky130a-1.0.424_0_g78b7bc3-20230709_210322.tar.bz2 + version: 1.0.424_0_g78b7bc3 - category: main dependencies: {} hash: @@ -2888,14 +2884,14 @@ package: dependencies: python: '>=3.6' hash: - md5: e8fbc1b54b25f4b08281467bc13b70cc - sha256: 4acc7151cef5920d130f2e0a7615559cce8bfb037aeecb14d4d359ae3d9bc51b + md5: d3ed087d1f7f8f5590e8e87b57a8ce64 + sha256: 18e3bd52c64f23bbc7c200fd2fc4152dd29423936dc43e8f129cb43f1af0136c manager: conda name: pyparsing optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.bz2 - version: 3.0.9 + url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.0-pyhd8ed1ab_0.conda + version: 3.1.0 - category: main dependencies: libgcc-ng: '>=12' @@ -3632,14 +3628,14 @@ package: python_abi: 3.10.* *_cp310 unicodedata2: '>=14.0.0' hash: - md5: d3d83b419c81ac718a9221442707882b - sha256: e5d22bcf75a4414d84000a3d905c70d4d2a1db96c0dfbf5a89169817351b2bb7 + md5: 606aea800172f81896b21cabc5575206 + sha256: b9e1a3b84c670fab1c491b29c6b36f630aa520f45f08a44440851f46750d85c1 manager: conda name: fonttools optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.40.0-py310h2372a71_0.conda - version: 4.40.0 + url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.41.0-py310h2372a71_0.conda + version: 4.41.0 - category: main dependencies: python: '>=3.4' @@ -4264,20 +4260,20 @@ package: numpy: '>=1.21.6,<2.0a0' packaging: '>=20.0' pillow: '>=6.2.0' - pyparsing: '>=2.3.1,<3.1' + pyparsing: '>=2.3.1' python: '>=3.10,<3.11.0a0' python-dateutil: '>=2.7' python_abi: 3.10.* *_cp310 tk: '>=8.6.12,<8.7.0a0' hash: - md5: 9b55c9041c5a7f80f184a2cb05ec9663 - sha256: 28ff078d33e18b52a455d58d24ab7b959b4db98411470afd5869f30fbb54250b + md5: 68b2dd34c69d08b05a9db5e3596fe3ee + sha256: d2be8ac0a90aa12ba808f8777d1837b5aa983fc3c7c60c600e8fe6bd9352541c manager: conda name: matplotlib-base optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.2-py310hf38f957_0.conda - version: 3.7.2 + url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.1-py310he60537e_0.conda + version: 3.7.1 - category: main dependencies: libgcc-ng: '>=12' @@ -5456,14 +5452,14 @@ package: - category: main dependencies: {} hash: - sha256: 0e0bc5ba78b8db3667ad636d964eb963dc97a59f04c6f6214c5f0e4a8f726c56 + sha256: 18c694e5ae8a208cdb3d2c20a993ca1a7b0efa258c247a1e565150f477f83744 manager: pip name: mock optional: false platform: linux-64 source: null - url: https://files.pythonhosted.org/packages/27/6f/fbb16f260a7107ee98871d83f6793d88c4311b7189b10ef239da0b2181db/mock-5.0.2-py3-none-any.whl - version: 5.0.2 + url: https://files.pythonhosted.org/packages/6b/20/471f41173930550f279ccb65596a5ac19b9ac974a8d93679bcd3e0c31498/mock-5.1.0-py3-none-any.whl + version: 5.1.0 - dependencies: {} hash: sha256: f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 @@ -5524,14 +5520,14 @@ package: dependencies: ruamel.yaml.clib: '>=0.2.7' hash: - sha256: 25d0ee82a0a9a6f44683dcf8c282340def4074a4562f3a24f55695bb254c1693 + sha256: 23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447 manager: pip name: ruamel.yaml optional: false platform: linux-64 source: null - url: https://files.pythonhosted.org/packages/23/33/dbc62343de0cf92e0f9c15bc0a287bdaea0953f1cadca0480c78d5ac6641/ruamel.yaml-0.17.26-py3-none-any.whl - version: 0.17.26 + url: https://files.pythonhosted.org/packages/d9/0e/2a05efa11ea33513fbdf4a2e2576fe94fd8fa5ad226dbb9c660886390974/ruamel.yaml-0.17.32-py3-none-any.whl + version: 0.17.32 - category: main dependencies: mock: '*' @@ -5566,14 +5562,14 @@ package: pyyaml: '>=6.0,<7.0' ruamel.yaml: '>=0.17.21,<0.18.0' hash: - sha256: f4fb4dd5f7fac1f2206a25d0949024046fe8f855198e8edbd5206fa9d58ab05f + sha256: 47f1fc5904756b01d46a8d23a4f3950382086b716138e21a027cd44dc5101f27 manager: pip name: hammer-vlsi optional: false platform: linux-64 source: null - url: https://files.pythonhosted.org/packages/0a/da/1897421311c6332655e2f73d02d8c914ecb724198a1988aacd8f4c61ae6e/hammer_vlsi-1.1.1-py3-none-any.whl - version: 1.1.1 + url: https://files.pythonhosted.org/packages/30/e4/37b77c7921b80d58d8b2a325c031e75d656319b676e7fd4555e02b651a9d/hammer_vlsi-1.1.2-py3-none-any.whl + version: 1.1.2 - category: main dependencies: asttokens: '>=2,<3' diff --git a/docs/VLSI/Sky130-OpenROAD-Tutorial.rst b/docs/VLSI/Sky130-OpenROAD-Tutorial.rst index 6777bb7908..81698d6b40 100644 --- a/docs/VLSI/Sky130-OpenROAD-Tutorial.rst +++ b/docs/VLSI/Sky130-OpenROAD-Tutorial.rst @@ -46,13 +46,14 @@ Prerequisites ------------- * Python 3.9+ -* OpenROAD flow tools: +* OpenROAD flow tools (NOTE: tutorial may break with different tool versions): - * Yosys (synthesis), install `using conda `__ or `from source `__ - * OpenROAD (place-and-route), install `using conda `__ (note that GUI is disabled in conda package) or `from source `__ - * KLayout (DEF to GDSII conversion), install `using conda `__ or `from source `__ - * Magic (DRC), , install `using conda `__ or `from source `__ - * NetGen (LVS), , install `using conda `__ or `from source `__ + * **Yosys 0.27+3** (synthesis), install `using conda `__ or `from source `__ + * **OpenROAD v2.0-7070-g0264023b6** (place-and-route), install `using conda `__ (note that GUI is disabled in conda package) or + `from source `__ (git hash: 0264023b6c2a8ae803b8d440478d657387277d93) + * **KLayout 0.28.5** (DEF to GDSII conversion, DRC), install `using conda `__ or `from source `__ + * **Magic 8.3.376** (DRC), install `using conda `__ or `from source `__ + * **NetGen 1.5.250** (LVS), install `using conda `__ or `from source `__ * Sky130A PDK, install `using conda `__ or `these directions `__ * `Sram22 Sky130 SRAM macros `__ @@ -67,6 +68,10 @@ Note that we create a new conda environment for each tool because some of them h .. code-block:: shell + # channel settings so openroad/klayout install properly + conda config --set channel_priority true + conda config --add channels defaults + # download all files for Sky130A PDK conda create -c litex-hub --prefix ~/.conda-sky130 open_pdks.sky130a=1.0.399_0_g63dbde9 # clone the SRAM22 Sky130 SRAM macros @@ -78,6 +83,10 @@ Note that we create a new conda environment for each tool because some of them h conda create -c litex-hub --prefix ~/.conda-klayout klayout=0.28.5_98_g87e2def28 conda create -c litex-hub --prefix ~/.conda-signoff magic=8.3.376_0_g5e5879c netgen=1.5.250_0_g178b172 + # revert conda settings + conda config --set channel_priority strict + conda config --remove channels defaults + Initial Setup ------------- In the Chipyard root, ensure that you have the Chipyard conda environment activated. Then, run: @@ -118,7 +127,7 @@ Add the following YAML keys to the top of this file to specify the location of t example-openroad.yml ^^^^^^^^^^^^^^^^^^^^ This contains the Hammer configuration for the OpenROAD tool flow. -It selects tools for synthesis (Yosys), place and route (OpenROAD), DRC (Magic), and LVS (NetGen). +It selects tools for synthesis (Yosys), place and route (OpenROAD), DRC (KLayout or Magic), and LVS (NetGen). Add the following YAML keys to the top of this file to specify the locations of the tool binaries. Note that this is not required if the tools are already on your PATH. @@ -129,7 +138,8 @@ Note that this is not required if the tools are already on your PATH. # tool binary paths synthesis.yosys.yosys_bin: ~/.conda-yosys/bin/yosys par.openroad.openroad_bin: ~/.conda-openroad/bin/openroad - par.openroad.klayout_bin: ~/.conda-klayout/bin/klayout + par.openroad.klayout_bin: ~/.conda-klayout/bin/klayout # binary that OpenROAD calls for final GDS writeout + drc.klayout.klayout_bin: ~/.conda-klayout/bin/klayout # binary that runs for DRC step drc.magic.magic_bin: ~/.conda-signoff/bin/magic lvs.netgen.netgen_bin: ~/.conda-signoff/bin/netgen @@ -237,10 +247,14 @@ DRC & LVS As a note, this tutorial has been run extensively through commercial signoff tools, thus the open-source signoff flow is not stable or guaranteed to produce useful results. -We welcome any contributions to improving both our `Magic tool plugin `__ +We welcome any contributions to improving our `KLayout tool plugin `__, +`Magic tool plugin `__, and `Netgen tool plugin `__. -To run DRC & LVS in Magic & Netgen, respectively: +We recommend KLayout for DRC to produce readable results, but Magic may be selected in ``example-openroad.yml`` +by uncommenting the line ``vlsi.core.drc_tool: "hammer.drc.magic"``. + +To run DRC & LVS and view the results: .. code-block:: shell @@ -259,7 +273,13 @@ Note that in ``sky130-openroad.yml`` we have set the following YAML keys: These keys cause the Hammer plugin to only generate all necessary scripts, without executing them with the respective tool. This is because Magic and Netgen, as of the writing of this tutorial, do not have a database format that may be loaded interactively, so to view the DRC/LVS results for debugging you must launch the tool interactively, then run DRC/LVS checks, -which is done by the ``generated-scripts/view_[drc|lvs]`` scripts. +which is done by the ``generated-scripts/view_[drc|lvs]`` scripts. This is not the case for KLayout, which does have a loadable database format. + +Below is the window you should see when loading the KLayout DRC results interactively. Note that most of these DRC errors are +from special rules relating to Sky130 SRAMs, which have been verified separately. In the future the KLayout tool plugin should blackbox these +SRAM macros by default, but this feature does not exist yet. + +.. image:: ../_static/images/vlsi-openroad-klayout-drc.png VLSI Flow Control diff --git a/docs/_static/images/vlsi-openroad-klayout-drc.png b/docs/_static/images/vlsi-openroad-klayout-drc.png new file mode 100644 index 0000000000..a6bfa8f48f Binary files /dev/null and b/docs/_static/images/vlsi-openroad-klayout-drc.png differ diff --git a/vlsi/example-openroad.yml b/vlsi/example-openroad.yml index 28889799a8..1f96d603c6 100644 --- a/vlsi/example-openroad.yml +++ b/vlsi/example-openroad.yml @@ -1,10 +1,11 @@ # Tool options. Replace with your tool plugin of choice. vlsi.core.build_system: make -# Yosys +# Synthesis: Yosys vlsi.core.synthesis_tool: "hammer.synthesis.yosys" -# OpenROAD +# Place-and-Route: OpenROAD vlsi.core.par_tool: "hammer.par.openroad" -# Magic -vlsi.core.drc_tool: "hammer.drc.magic" -# Netgen +# DRC: KLayout or Magic (comment other one out) +vlsi.core.drc_tool: "hammer.drc.klayout" +# vlsi.core.drc_tool: "hammer.drc.magic" +# LVS: Netgen vlsi.core.lvs_tool: "hammer.lvs.netgen"