2.1 Digital design tools on Linux or WSL using Docker

Table of contents

Install and start Docker service

1. Install docker service

Install docker by following the instruction here: https://docs.docker.com/engine/install/ubuntu/

This is the commands to install Docker in Ubuntu 22.04:

sudo apt-get install ca-certificates curl gnupg -q -y
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo   "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update -q
sudo apt-get install -q -y docker-ce docker-ce-cli containerd.io  docker-buildx-plugin docker-compose-plugin
cass@unic-cass:~$ sudo apt-get install ca-certificates curl gnupg -q -y
Reading package lists...
Building dependency tree...
Reading state information...
ca-certificates is already the newest version (20230311ubuntu0.22.04.1).
ca-certificates set to manually installed.
curl is already the newest version (7.81.0-1ubuntu1.16).
curl set to manually installed.
gnupg is already the newest version (2.2.27-3ubuntu2.1).
gnupg set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

cass@unic-cass:~$ sudo install -m 0755 -d /etc/apt/keyrings
cass@unic-cass:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
cass@unic-cass:~$ sudo chmod a+r /etc/apt/keyrings/docker.gpg
cass@unic-cass:~$ echo   "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

cass@unic-cass:~$ sudo apt-get update -q
Get:1 https://download.docker.com/linux/ubuntu jammy InRelease [48.8 kB]
Hit:2 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Get:4 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages [36.4 kB]
Hit:5 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
Hit:6 http://security.ubuntu.com/ubuntu jammy-security InRelease
Fetched 85.3 kB in 1s (157 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...

cass@unic-cass:~$ sudo apt-get install -q -y docker-ce docker-ce-cli containerd.io  docker-buildx-plugin docker-compose-plugin
The following additional packages will be installed:
  docker-ce-rootless-extras libslirp0 pigz slirp4netns
Suggested packages:
  aufs-tools cgroupfs-mount | cgroup-lite
The following NEW packages will be installed:
  containerd.io docker-buildx-plugin docker-ce docker-ce-cli docker-ce-rootless-extras docker-compose-plugin libslirp0 pigz slirp4netns
0 upgraded, 9 newly installed, 0 to remove and 2 not upgraded.
Need to get 122 MB of archives.
After this operation, 436 MB of additional disk space will be used.
Get:1 https://download.docker.com/linux/ubuntu jammy/stable amd64 containerd.io amd64 1.7.19-1 [30.5 MB]
Get:2 http://archive.ubuntu.com/ubuntu jammy/universe amd64 pigz amd64 2.6-1 [63.6 kB]
...
Get:9 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-compose-plugin amd64 2.29.0-1~ubuntu.22.04~jammy [12.5 MB]
Fetched 122 MB in 13s (9488 kB/s)
Selecting previously unselected package pigz.
(Reading database ... 44296 files and directories currently installed.)
Preparing to unpack .../0-pigz_2.6-1_amd64.deb ...
Unpacking pigz (2.6-1) ...
Selecting previously unselected package containerd.io.
Preparing to unpack .../1-containerd.io_1.7.19-1_amd64.deb ...
Unpacking containerd.io (1.7.19-1) ...
...
Selecting previously unselected package slirp4netns.
Preparing to unpack .../8-slirp4netns_1.0.1-2_amd64.deb ...
Unpacking slirp4netns (1.0.1-2) ...
Setting up docker-buildx-plugin (0.16.1-1~ubuntu.22.04~jammy) ...
Setting up containerd.io (1.7.19-1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /lib/systemd/system/containerd.service.
Setting up docker-compose-plugin (2.29.0-1~ubuntu.22.04~jammy) ...
...
Setting up docker-ce (5:27.1.0-1~ubuntu.22.04~jammy) ...
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.
Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket.
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.8) ...
cass@unic-cass-cass:~$ 
2. Start the docker service

If you use a real Linux system or a WSL Linux system with Systemd supported, you can start docker by running these commands:

sudo systemctl start docker
sudo systemctl enable docker
cass@unic-cass:~$ sudo systemctl start docker
cass@unic-cass:~$ sudo systemctl enable docker
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker
3. Add user to docker group

You will also need to add your user to docker group so that you have permission to pull the docker image as normal users:

sudo gpasswd -a $USER docker
cass@unic-cass:~$ sudo gpasswd -a $USER docker
Adding user cass to group docker

To get the above command taking effect, you have to log out:

exit

After that, you can open a new shell and continue to the next section.

For WSL users without Systemd support

If your WSL Ubuntu 22.04 does not have Systemd support, you can still run Docker using System-V init script using the following command:

sudo service docker start

Pull docker image and run a design example

4. Pull the docker image with openlane installed

After Docker has been successfully installed, we can use docker pull command to download the docker image from the Internet into our computer:

docker pull efabless/openlane:latest
cass@unic-cass:~$ docker pull efabless/openlane:latest
latest: Pulling from efabless/openlane
80531649488e: Pull complete
62eac020c046: Pull complete
Digest: sha256:864d0fd6a2ac2e5caf83251dd25161d1049b740c02d16e4bfdfa1af93fc6fdfe
Status: Downloaded newer image for efabless/openlane:latest
docker.io/efabless/openlane:latest
5. Install volare to manage the PDK

The Docker image for Openlane does not contain the PDK. Therefore, we have to install volare to download and install the PDK. Volare can be installed using the following command:

python3 -m pip install --upgrade --no-cache-dir volare
cass@unic-cass:~$ python3 -m pip install --upgrade --no-cache-dir volare
Defaulting to user installation because normal site-packages is not writeable
Collecting volare
  Downloading volare-0.18.1-py3-none-any.whl (35 kB)
Collecting pcpp<2,>=1.2
  Downloading pcpp-1.30-py2.py3-none-any.whl (91 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 91.1/91.1 KB 4.8 MB/s eta 0:00:00
Collecting click<9,>=8.0.0
  Downloading click-8.1.7-py3-none-any.whl (97 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 97.9/97.9 KB 10.8 MB/s eta 0:00:00
Collecting httpx>=0.22.0
  Downloading httpx-0.27.0-py3-none-any.whl (75 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 75.6/75.6 KB 12.1 MB/s eta 0:00:00
Collecting rich<14,>=12
  Downloading rich-13.7.1-py3-none-any.whl (240 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 240.7/240.7 KB 8.1 MB/s eta 0:00:00
Collecting zstandard<1,>=0.19.0
  Downloading zstandard-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.4/5.4 MB 10.4 MB/s eta 0:00:00
Requirement already satisfied: pyyaml<7,>=5 in /usr/lib/python3/dist-packages (from volare) (5.4.1)
Collecting sniffio
  Downloading sniffio-1.3.1-py3-none-any.whl (10 kB)
Collecting certifi
  Downloading certifi-2024.7.4-py3-none-any.whl (162 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 163.0/163.0 KB 12.6 MB/s eta 0:00:00
Collecting httpcore==1.*
  Downloading httpcore-1.0.5-py3-none-any.whl (77 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.9/77.9 KB 14.2 MB/s eta 0:00:00
Collecting anyio
  Downloading anyio-4.4.0-py3-none-any.whl (86 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 86.8/86.8 KB 12.4 MB/s eta 0:00:00
Collecting idna
  Downloading idna-3.7-py3-none-any.whl (66 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 66.8/66.8 KB 19.5 MB/s eta 0:00:00
Collecting h11<0.15,>=0.13
  Downloading h11-0.14.0-py3-none-any.whl (58 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.3/58.3 KB 15.5 MB/s eta 0:00:00
Collecting pygments<3.0.0,>=2.13.0
  Downloading pygments-2.18.0-py3-none-any.whl (1.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 10.6 MB/s eta 0:00:00
Collecting markdown-it-py>=2.2.0
  Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 87.5/87.5 KB 12.7 MB/s eta 0:00:00
Collecting mdurl~=0.1
  Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Collecting typing-extensions>=4.1
  Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Collecting exceptiongroup>=1.0.2
  Downloading exceptiongroup-1.2.2-py3-none-any.whl (16 kB)
Installing collected packages: pcpp, zstandard, typing-extensions, sniffio, pygments, mdurl, idna, h11, exceptiongroup, click, certifi, markdown-it-py, httpcore, anyio, rich, httpx, volare
  WARNING: The script pcpp is installed in '/home/cass/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script pygmentize is installed in '/home/cass/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script markdown-it is installed in '/home/cass/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script httpx is installed in '/home/cass/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script volare is installed in '/home/cass/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed anyio-4.4.0 certifi-2024.7.4 click-8.1.7 exceptiongroup-1.2.2 h11-0.14.0 httpcore-1.0.5 httpx-0.27.0 idna-3.7 markdown-it-py-3.0.0 mdurl-0.1.2 pcpp-1.30 pygments-2.18.0 rich-13.7.1 sniffio-1.3.1 typing-extensions-4.12.2 volare-0.18.1 zstandard-0.23.0

By default, volare will be installed into your home directory ($HOME/.local/bin). This default path might not be in your program search path yet. Therefore, it is recommended to add $HOME/.local/bin into your program search path:

echo 'export PATH=$HOME/.local/bin:$PATH' >> .bashrc
source .bashrc

We can test if volare has been successfully installed by running this command:

volare --version
cass@unic-cass:~$ echo 'export PATH=$HOME/.local/bin:$PATH' >> .bashrc
cass@unic-cass:~$ source .bashrc
cass@unic-cass:~$ volare --version
volare, version 0.18.1
6. Set up the environment variables to install the PDK

Setup the PDK_ROOT and download the PDK using volare:

export PDK_ROOT=$HOME/unic-cass/pdks
export PDK=sky130A
volare ls-remote --pdk sky130
cass@unic-cass:~$ export PDK_ROOT=$HOME/unic-cass/pdks
cass@unic-cass:~$ export PDK=sky130A
cass@unic-cass:~$ volare ls-remote --pdk sky130
Pre-built sky130 PDK versions
├── 0fe599b2afb6708d281543108caf8310912f54af (2024.08.17)
├── PRE-RELEASE c887119ffa27d48613249b973a66dc667fe6ecd3 (2024.07.04)
├── PRE-RELEASE 31f6da2663f392b7472bdba39c1746170d293290 (2024.05.25)
├── PRE-RELEASE 4d5af10bfee4dab799566aaf903bb22aee69bac9 (2024.05.07)
├── PRE-RELEASE 42cd15c469adc1d303ffca4a7d32c29a4564a737 (2024.04.12)
├── 6d4d11780c40b20ee63cc98e645307a9bf2b2ab8 (2024.02.11)
├── bdc9412b3e468c102d01b7cf6337be06ec6e9c9a (2024.01.10)
├── d7979feb24bf08083dcf5c013be51adec8c0bcef (2024.01.08)
├── cd1748bb197f9b7af62a54507de6624e30363943 (2023.12.04)
...
7. Download the latest PDK using volare

The following command will download and install the latest PDK:

volare enable --pdk sky130 0fe599b2afb6708d281543108caf8310912f54af
cass@unic-cass:~$ volare enable --pdk sky130 0fe599b2afb6708d281543108caf8310912f54af
Version 0fe599b2afb6708d281543108caf8310912f54af not found locally, attempting to download…
Downloading common.tar.zst… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Downloading sky130_fd_io.tar.zst… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Downloading sky130_fd_pr.tar.zst… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Downloading sky130_fd_sc_hd.tar.zst… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Downloading sky130_fd_sc_hvl.tar.zst… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Downloading sky130_ml_xx_hd.tar.zst… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Downloading sky130_sram_macros.tar.zst… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Version 0fe599b2afb6708d281543108caf8310912f54af enabled for the sky130 PDK.

Run an example design

8. Generate the openlane configuration files and download the example design

After the PDK has been installed, now we can start a small example project. In this part, we choose to use a GCD design from UC Berkeley. Run the following command to create the Openlane template to implement the GCD design:

mkdir gcd_example
cd gcd_example
docker run -it -v $(pwd):/gcd_example/ -v $PDK_ROOT:$PDK_ROOT \
    -e PDK_ROOT=$PDK_ROOT -u $(id -u $USER):$(id -g $USER) \
    efabless/openlane:latest
cd /gcd_example
flow.tcl -design gcd -init_design_config
cd /gcd_example/openlane/gcd
wget https://unic-cass.github.io/training/files/gcd.tar.gz
tar xvf gcd.tar.gz
rm gcd.tar.gz
exit
cass@unic-cass:~$ mkdir gcd_example
cass@unic-cass:~$ cd gcd_example
cass@unic-cass:~/gcd_example$ docker run -it -v $(pwd):/gcd_example/ -v $PDK_ROOT:$PDK_ROOT \
-e PDK_ROOT=$PDK_ROOT -u $(id -u $USER):$(id -g $USER) \
efabless/openlane:latest
OpenLane Container:/openlane% cd /gcd_example
OpenLane Container:/gcd_example% flow.tcl -design gcd -init_design_config
OpenLane 
All rights reserved. (c) 2020-2023 Efabless Corporation and contributors.
Available under the Apache License, version 2.0. See the LICENSE file for more details.

[SUCCESS]: openlane/gcd/config.json created with the default configuration. Please update the values as you see fit.
OpenLane Container:/gcd_example% cd /gcd_example/openlane/gcd
OpenLane Container:/gcd_example/openlane/gcd% wget https://unic-cass.github.io/training/files/gcd.tar.gz
OpenLane Container:/gcd_example/openlane/gcd% tar xvf gcd.tar.gz 
src/
src/gcd.v
src/gcd_datapath.v
src/gcd_control.v
OpenLane Container:/gcd_example/openlane/gcd% rm gcd.tar.gz
OpenLane Container:/gcd_example/openlane/gcd% exit
9. Modify the templates with the design information

After exiting Docker, we need to modify the config.json file and add a pin_order.cfg file to implement the design. These two files can be created using gedit commands as follows:

gedit openlane/gcd/config.json

The content of openlane/gcd/config.json:

{
	"DESIGN_NAME": "gcd",
	"VERILOG_FILES": "dir::src/*.v",
	"CLOCK_PORT": "clk",
	"CLOCK_NET": "ref::$CLOCK_PORT",
	"FP_PIN_ORDER_CFG": "dir::pin_order.cfg",
	"FP_PDN_VOFFSET": 7,
	"FP_PDN_HOFFSET": 7,
	"FP_PDN_SKIPTRIM": true,
	"FP_CORE_UTIL" : 45,
	"CLOCK_PERIOD": 10.0,
	"DESIGN_IS_CORE": true
}

Create a new file called pin_order.cfg using the following command:

gedit openlane/gcd/pin_order.cfg

Copy and paste the following contents to this file:

#N
clk
reset
operands_val
#S
operands_bits_B.*
#W
operands_bits_A.*
operands_rdy
result_rdy
#E
result_bits_data.*
result_val
10. Run the digital implementation flow with openlane

After finishing creating these files, we now can run the implementation flow:

docker run -it -v $(pwd):/gcd_example -v $PDK_ROOT:$PDK_ROOT -e PDK=$PDK \
    -e PDK_ROOT=$PDK_ROOT -u $(id -u $USER):$(id -g $USER) efabless/openlane:latest
cd /gcd_example/openlane
flow.tcl -design gcd -ignore_mismatches
exit
cass@unic-cass-cass:~/gcd_example$ docker run -it -v $(pwd):/gcd_example -v $PDK_ROOT:$PDK_ROOT -e PDK=$PDK -e PDK_ROOT=$PDK_ROOT -u $(id -u $USER):$(id -g $USER) efabless/openlane:latest
OpenLane Container:/openlane% cd /gcd_example/openlane
OpenLane Container:/gcd_example/openlane% flow.tcl -design gcd -ignore_mismatches
OpenLane 
All rights reserved. (c) 2020-2023 Efabless Corporation and contributors.
Available under the Apache License, version 2.0. See the LICENSE file for more details.

[WARNING]: OpenLane may not function properly: The version of open_pdks used in building the PDK does not match the version OpenLane was tested on (installed: 6d4d11780c40b20ee63cc98e645307a9bf2b2ab8, tested: bdc9412b3e468c102d01b7cf6337be06ec6e9c9a)
This may introduce some issues. You may want to re-install the PDK by invoking `make pdk`.
[INFO]: Using configuration in 'config.json'...
[INFO]: Process Design Kit: sky130A
[INFO]: PDK Root: /home/cass/unic-cass/pdks
[INFO]: Standard Cell Library: sky130_fd_sc_hd
[INFO]: Optimization Standard Cell Library: sky130_fd_sc_hd
[INFO]: Run Directory: /gcd_example/openlane/gcd/runs/RUN_2024.07.23_14.47.18
[WARNING]: The variable name DESIGN_IS_CORE was renamed to FP_PDN_MULTILAYER. Update your configuration file.
[INFO]: Saving runtime environment...
[INFO]: Preparing LEF files for the nom corner...
[INFO]: Preparing LEF files for the min corner...
[INFO]: Preparing LEF files for the max corner...
[WARNING]: PNR_SDC_FILE is not set. It is recommended to write a custom SDC file for the design. Defaulting to BASE_SDC_FILE
[WARNING]: SIGNOFF_SDC_FILE is not set. It is recommended to write a custom SDC file for the design. Defaulting to BASE_SDC_FILE
[INFO]: Running linter (Verilator) (log: runs/RUN_2024.07.23_14.47.18/logs/synthesis/linter.log)...
[INFO]: 0 errors found by linter
[WARNING]: 2 warnings found by linter
[STEP 1]
[INFO]: Running Synthesis (log: runs/RUN_2024.07.23_14.47.18/logs/synthesis/1-synthesis.log)...
[STEP 2]
[INFO]: Running Single-Corner Static Timing Analysis (log: runs/RUN_2024.07.23_14.47.18/logs/synthesis/2-sta.log)...
[STEP 3]
[INFO]: Running Initial Floorplanning (log: runs/RUN_2024.07.23_14.47.18/logs/floorplan/3-initial_fp.log)...
[INFO]: Floorplanned with width 233.68 and height 233.92.
[STEP 4]
[INFO]: Running IO Placement (log: runs/RUN_2024.07.23_14.47.18/logs/floorplan/4-place_io.log)...
[STEP 5]
[INFO]: Running Tap/Decap Insertion (log: runs/RUN_2024.07.23_14.47.18/logs/floorplan/5-tap.log)...
[INFO]: Power planning with power {VPWR} and ground {VGND}...
[STEP 6]
[INFO]: Generating PDN (log: runs/RUN_2024.07.23_14.47.18/logs/floorplan/6-pdn.log)...
[STEP 7]
[INFO]: Running Global Placement (log: runs/RUN_2024.07.23_14.47.18/logs/placement/6-global.log)...
[STEP 8]
[INFO]: Running Single-Corner Static Timing Analysis (log: runs/RUN_2024.07.23_14.47.18/logs/placement/8-gpl_sta.log)...
[STEP 9]
[INFO]: Running Placement Resizer Design Optimizations (log: runs/RUN_2024.07.23_14.47.18/logs/placement/9-resizer.log)...
[STEP 10]
[INFO]: Running Detailed Placement (log: runs/RUN_2024.07.23_14.47.18/logs/placement/10-detailed.log)...
[STEP 11]
[INFO]: Running Single-Corner Static Timing Analysis (log: runs/RUN_2024.07.23_14.47.18/logs/placement/11-dpl_sta.log)...
[STEP 12]
[INFO]: Running Clock Tree Synthesis (log: runs/RUN_2024.07.23_14.47.18/logs/cts/12-cts.log)...
[STEP 13]
[INFO]: Running Single-Corner Static Timing Analysis (log: runs/RUN_2024.07.23_14.47.18/logs/cts/13-cts_sta.log)...
[STEP 14]
[INFO]: Running Placement Resizer Timing Optimizations (log: runs/RUN_2024.07.23_14.47.18/logs/cts/14-resizer.log)...
[STEP 15]
[INFO]: Running Global Routing Resizer Design Optimizations (log: runs/RUN_2024.07.23_14.47.18/logs/routing/15-resizer_design.log)...
[STEP 16]
[INFO]: Running Single-Corner Static Timing Analysis (log: runs/RUN_2024.07.23_14.47.18/logs/routing/16-rsz_design_sta.log)...
[STEP 17]
[INFO]: Running Global Routing Resizer Timing Optimizations (log: runs/RUN_2024.07.23_14.47.18/logs/routing/17-resizer_timing.log)...
[STEP 18]
[INFO]: Running Single-Corner Static Timing Analysis (log: runs/RUN_2024.07.23_14.47.18/logs/routing/18-rsz_timing_sta.log)...
[STEP 19]
[INFO]: Running Global Routing (log: runs/RUN_2024.07.23_14.47.18/logs/routing/19-global.log)...
[STEP 20]
[INFO]: Writing Verilog (log: runs/RUN_2024.07.23_14.47.18/logs/routing/19-global_write_netlist.log)...
[STEP 21]
[INFO]: Running Single-Corner Static Timing Analysis (log: runs/RUN_2024.07.23_14.47.18/logs/routing/21-grt_sta.log)...
[STEP 22]
[INFO]: Running Fill Insertion (log: runs/RUN_2024.07.23_14.47.18/logs/routing/22-fill.log)...
[STEP 23]
[INFO]: Running Detailed Routing (log: runs/RUN_2024.07.23_14.47.18/logs/routing/23-detailed.log)...
[INFO]: No Magic DRC violations after detailed routing.
[STEP 24]
[INFO]: Checking Wire Lengths (log: runs/RUN_2024.07.23_14.47.18/logs/routing/24-wire_lengths.log)...
[STEP 25]
[INFO]: Running SPEF Extraction at the min process corner (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/25-parasitics_extraction.min.log)...
[STEP 26]
[INFO]: Running Multi-Corner Static Timing Analysis at the min process corner (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/26-rcx_mcsta.min.log)...
[STEP 27]
[INFO]: Running SPEF Extraction at the max process corner (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/27-parasitics_extraction.max.log)...
[STEP 28]
[INFO]: Running Multi-Corner Static Timing Analysis at the max process corner (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/28-rcx_mcsta.max.log)...
[STEP 29]
[INFO]: Running SPEF Extraction at the nom process corner (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/29-parasitics_extraction.nom.log)...
[STEP 30]
[INFO]: Running Multi-Corner Static Timing Analysis at the nom process corner (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/30-rcx_mcsta.nom.log)...
[WARNING]: VSRC_LOC_FILES was not given a value, which may make the results of IR drop analysis inaccurate. If you are not integrating a top-level chip for manufacture, you may ignore this warning, otherwise, see the documentation for VSRC_LOC_FILES.
[STEP 31]
[INFO]: Creating IR Drop Report (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/31-irdrop.log)...
[STEP 32]
[INFO]: Running Magic to generate various views...
[INFO]: Streaming out GDSII with Magic (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/32-gdsii.log)...
[INFO]: Generating MAGLEF views...
[INFO]: Generating lef with Magic (/gcd_example/openlane/gcd/runs/RUN_2024.07.23_14.47.18/logs/signoff/32-lef.log)...
[STEP 33]
[INFO]: Streaming out GDSII with KLayout (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/33-gdsii-klayout.log)...
[STEP 34]
[INFO]: Running XOR on the layouts using KLayout (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/34-xor.log)...
[INFO]: No XOR differences between KLayout and Magic gds.
[STEP 35]
[INFO]: Running Magic Spice Export from LEF (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/35-spice.log)...
[STEP 36]
[INFO]: Writing Powered Verilog (logs: runs/RUN_2024.07.23_14.47.18/logs/signoff/36-write_powered_def.log, runs/RUN_2024.07.23_14.47.18/logs/signoff/36-write_powered_verilog.log)...
[STEP 37]
[INFO]: Writing Verilog (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/36-write_powered_verilog.log)...
[STEP 38]
[INFO]: Running LVS (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/38-lvs.lef.log)...
[STEP 39]
[INFO]: Running Magic DRC (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/39-drc.log)...
[INFO]: Converting Magic DRC database to various tool-readable formats...
[INFO]: No Magic DRC violations after GDS streaming out.
[STEP 40]
[INFO]: Running KLayout DRC (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/40-drc-klayout.log)...
[INFO]: No KLayout DRC violations after GDS streaming out.
[STEP 41]
[INFO]: Running OpenROAD Antenna Rule Checker (log: runs/RUN_2024.07.23_14.47.18/logs/signoff/41-arc.log)...
[INFO]: Saving current set of views in 'runs/RUN_2024.07.23_14.47.18/results/final'...
[INFO]: Saving runtime environment...
[INFO]: Generating final set of reports...
[INFO]: Created manufacturability report at 'runs/RUN_2024.07.23_14.47.18/reports/manufacturability.rpt'.
[INFO]: Created metrics report at 'runs/RUN_2024.07.23_14.47.18/reports/metrics.csv'.
[WARNING]: There are max fanout violations in the design at the Typical corner. Please refer to 'runs/RUN_2024.07.23_14.47.18/reports/signoff/30-sta-rcx_nom/multi_corner_sta.checks.rpt'.
[INFO]: There are no hold violations in the design at the Typical corner.
[INFO]: There are no setup violations in the design at the Typical corner.
[SUCCESS]: Flow complete.
[INFO]: Note that the following warnings have been generated:
[WARNING]: The variable name DESIGN_IS_CORE was renamed to FP_PDN_MULTILAYER. Update your configuration file.
[WARNING]: PNR_SDC_FILE is not set. It is recommended to write a custom SDC file for the design. Defaulting to BASE_SDC_FILE
[WARNING]: SIGNOFF_SDC_FILE is not set. It is recommended to write a custom SDC file for the design. Defaulting to BASE_SDC_FILE
[WARNING]: 2 warnings found by linter
[WARNING]: VSRC_LOC_FILES was not given a value, which may make the results of IR drop analysis inaccurate. If you are not integrating a top-level chip for manufacture, you may ignore this warning, otherwise, see the documentation for VSRC_LOC_FILES.
[WARNING]: There are max fanout violations in the design at the Typical corner. Please refer to 'runs/RUN_2024.07.23_14.47.18/reports/signoff/30-sta-rcx_nom/multi_corner_sta.checks.rpt'.

Install Klayout for viewing GDS and DRC debugging

11. Download and install klayout with the required packages
wget https://www.klayout.org/downloads/Ubuntu-22/klayout_0.29.4-1_amd64.deb
sudo apt-get install libqt5designer5 libqt5multimedia5 libqt5opengl5 libqt5multimediawidgets5 \
    libqt5printsupport5 libqt5sql5 libqt5sql5 libqt5xmlpatterns5 libruby3.0 libgit2-1.1
sudo dpkg -i klayout_0.29.4-1_amd64.deb
cass@unic-cass:~/gcd_example$ wget https://www.klayout.org/downloads/Ubuntu-22/klayout_0.29.4-1_amd64.deb
--2024-07-23 22:00:11--  https://www.klayout.org/downloads/Ubuntu-22/klayout_0.29.4-1_amd64.deb
Resolving www.klayout.org (www.klayout.org)... 178.77.102.107
Connecting to www.klayout.org (www.klayout.org)|178.77.102.107|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 62539776 (60M) [application/x-debian-package]
Saving to: ‘klayout_0.29.4-1_amd64.deb’

klayout_0.29.4-1_amd64.deb                             100%[==========================================>]  59.64M  8.90MB/s    in 7.4s    

2024-07-23 22:00:18 (8.07 MB/s) - ‘klayout_0.29.4-1_amd64.deb’ saved [62539776/62539776]

cass@unic-cass:~/gcd_example$ sudo apt-get install libqt5designer5 libqt5multimedia5 libqt5opengl5 libqt5multimediawidgets5 \
    libqt5printsupport5 libqt5sql5 libqt5sql5 libqt5xmlpatterns5 libruby3.0 libgit2-1.1
[sudo] password for cass:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  fonts-lato libdouble-conversion3 libice6 libinput-bin libinput10 libmd4c0 libmtdev1 libpcre2-16-0 libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5sql5-sqlite libqt5svg5 libqt5widgets5 libqt5xml5 libsm6      
  libwacom-bin libwacom-common libwacom9 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-shape0 libxcb-util1 libxcb-xinerama0 libxcb-xinput0 libxcb-xkb1 libxkbcommon-x11-0 qt5-gtk-platformtheme  
  qttranslations5-l10n rake ruby ruby-net-telnet ruby-rubygems ruby-webrick ruby-xmlrpc ruby3.0 rubygems-integration unzip zip
Suggested packages:
  qt5-image-formats-plugins qtwayland5 ri ruby-dev bundler
The following NEW packages will be installed:
  fonts-lato libdouble-conversion3 libice6 libinput-bin libinput10 libmd4c0 libmtdev1 libpcre2-16-0 libqt5core5a libqt5dbus5 libqt5designer5 libqt5gui5 libqt5multimedia5 libqt5multimediawidgets5 libqt5network5
  libqt5opengl5 libqt5printsupport5 libqt5sql5 libqt5sql5-sqlite libqt5svg5 libqt5widgets5 libqt5xml5 libqt5xmlpatterns5 libruby3.0 libsm6 libwacom-bin libwacom-common libwacom9 libxcb-icccm4 libxcb-image0
  libxcb-keysyms1 libxcb-render-util0 libxcb-shape0 libxcb-util1 libxcb-xinerama0 libxcb-xinput0 libxcb-xkb1 libxkbcommon-x11-0 qt5-gtk-platformtheme qttranslations5-l10n rake ruby ruby-net-telnet ruby-rubygems        
  ruby-webrick ruby-xmlrpc ruby3.0 rubygems-integration unzip zip
0 upgraded, 50 newly installed, 0 to remove and 2 not upgraded.
Need to get 25.6 MB of archives.
After this operation, 101 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-lato all 2.0-2.1 [2696 kB]
...
Get:50 http://archive.ubuntu.com/ubuntu jammy/main amd64 zip amd64 3.0-12build2 [176 kB]
Fetched 25.6 MB in 6s (4442 kB/s)
Extracting templates from packages: 100%
Selecting previously unselected package fonts-lato.
(Reading database ... 51612 files and directories currently installed.)
Preparing to unpack .../00-fonts-lato_2.0-2.1_all.deb ...
Unpacking fonts-lato (2.0-2.1) ...
Selecting previously unselected package libdouble-conversion3:amd64.
...
Preparing to unpack .../49-zip_3.0-12build2_amd64.deb ...
Unpacking zip (3.0-12build2) ...
Setting up libice6:amd64 (2:1.0.10-1build2) ...
Setting up libdouble-conversion3:amd64 (3.1.7-4) ...
...
Setting up ruby-rubygems (3.3.5-2) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for udev (249.11-0ubuntu3.12) ...
Processing triggers for fontconfig (2.13.1-4.2ubuntu5) ...
Processing triggers for libc-bin (2.35-0ubuntu3.8) ...
cass@unic-cass:~/gcd_example$ sudo dpkg -i klayout_0.29.4-1_amd64.deb
(Reading database ... 56045 files and directories currently installed.)
Preparing to unpack klayout_0.29.4-1_amd64.deb ...
Unpacking klayout (0.29.4-1) over (0.29.4-1) ...
Setting up klayout (0.29.4-1) ...
cass@unic-cass:~/gcd_example$ klayout openlane/gcd/runs/RUN_*/results/signoff/gcd.gds -nn $PDK_ROOT/$PDK/libs.tech/klayout/tech/$PDK.lyt -l $PDK_ROOT/$PDK/libs.tech/klayout/tech/$PDK.lyp
12. Using klayout to open the gds
klayout openlane/gcd/runs/RUN_*/results/signoff/gcd.gds \
    -nn $PDK_ROOT/$PDK/libs.tech/klayout/tech/$PDK.lyt \
    -l $PDK_ROOT/$PDK/libs.tech/klayout/tech/$PDK.lyp

This is the output gds in Klayout.

Klayout

What’s next?

You have completed the digital design setup using the digital flow. Next you can go ahead to section 4 to learn about how to integrate your design into caravel test harness.