Merge pull request #1514 from ucb-bar/klayout-docs

KLayout section of Sky130+OpenROAD tutorial
This commit is contained in:
Jerry Zhao
2023-09-05 11:41:09 -07:00
committed by GitHub
7 changed files with 101 additions and 86 deletions

View File

@@ -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:

View File

@@ -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

View File

@@ -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'

View File

@@ -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'

View File

@@ -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 <https://anaconda.org/litex-hub/yosys>`__ or `from source <https://yosyshq.net/yosys/download.html>`__
* OpenROAD (place-and-route), install `using conda <https://anaconda.org/litex-hub/openroad>`__ (note that GUI is disabled in conda package) or `from source <https://openroad.readthedocs.io/en/latest/main/README.html#install-dependencies>`__
* KLayout (DEF to GDSII conversion), install `using conda <https://anaconda.org/litex-hub/klayout>`__ or `from source <https://www.klayout.de/build.html>`__
* Magic (DRC), , install `using conda <https://anaconda.org/litex-hub/magic>`__ or `from source <http://www.opencircuitdesign.com/magic/install.html>`__
* NetGen (LVS), , install `using conda <https://anaconda.org/litex-hub/netgen>`__ or `from source <http://www.opencircuitdesign.com/netgen/install.html>`__
* **Yosys 0.27+3** (synthesis), install `using conda <https://anaconda.org/litex-hub/yosys>`__ or `from source <https://yosyshq.net/yosys/download.html>`__
* **OpenROAD v2.0-7070-g0264023b6** (place-and-route), install `using conda <https://anaconda.org/litex-hub/openroad>`__ (note that GUI is disabled in conda package) or
`from source <https://github.com/The-OpenROAD-Project/OpenROAD/blob/master/docs/user/Build.md>`__ (git hash: 0264023b6c2a8ae803b8d440478d657387277d93)
* **KLayout 0.28.5** (DEF to GDSII conversion, DRC), install `using conda <https://anaconda.org/litex-hub/klayout>`__ or `from source <https://www.klayout.de/build.html>`__
* **Magic 8.3.376** (DRC), install `using conda <https://anaconda.org/litex-hub/magic>`__ or `from source <http://www.opencircuitdesign.com/magic/install.html>`__
* **NetGen 1.5.250** (LVS), install `using conda <https://anaconda.org/litex-hub/netgen>`__ or `from source <http://www.opencircuitdesign.com/netgen/install.html>`__
* Sky130A PDK, install `using conda <https://anaconda.org/litex-hub/open_pdks.sky130a>`__ or `these directions <https://github.com/ucb-bar/hammer/blob/master/hammer/technology/sky130>`__
* `Sram22 Sky130 SRAM macros <https://github.com/rahulk29/sram22_sky130_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 <https://github.com/ucb-bar/hammer/blob/master/hammer/drc/magic>`__
We welcome any contributions to improving our `KLayout tool plugin <https://github.com/ucb-bar/hammer/blob/master/hammer/drc/klayout>`__,
`Magic tool plugin <https://github.com/ucb-bar/hammer/blob/master/hammer/drc/magic>`__,
and `Netgen tool plugin <https://github.com/ucb-bar/hammer/blob/master/hammer/lvs/netgen>`__.
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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

View File

@@ -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"