Merge pull request #203 from antmicro/160-fix-sphinx-warnings

Removed duplicated keys from previous.rst
diff --git a/.github/autolabeler.yml b/.github/autolabeler.yml
deleted file mode 100644
index e3c99a4..0000000
--- a/.github/autolabeler.yml
+++ /dev/null
@@ -1,76 +0,0 @@
-documentation:                  ["*.rst", "docs"]
-
-files-definition:               ["definition.json"]
-
-files-layout-gds:               ["*Makefile"]
-
-files-layout-gds:               ["*.gds"]
-files-layout-lef-magic:         ["*.magic.lef"]
-files-layout-lef:               ["*.lef"]
-files-layout-tlef:              ["*.tlef"]
-
-files-model-behavioral-verilog: ["*.behavioral.v"]
-files-model-functional-verilog: ["*.functional.v"]
-files-model-spice:              ["*.spice"]
-# files-model-verilog
-
-files-netlist-cdl:              ["*.cdl"]
-files-netlist-tsv:              ["*.netlist.tsv"]
-
-files-powerpins:                ["*.pp.*"]
-
-files-schematic-svg:            ["*.schematic.svg"]
-
-files-symbol-svg:               ["*.symbol.svg"]
-files-symbol-verilog:           ["*.symbol.v"]
-
-files-timing-json:              ["*.lib.json"]
-# files-timing-liberty:         ["*.lib"]
-
-files-testbench-verilog:        ["*.tb.v"]
-
-infrastructure:                 [".github", "travis", "kokoro"]
-
-lib-sky130_ef_io:               ["sky130_fd_ef_io"]
-
-lib-sky130_fd_pr_base:          ["sky130_fd_pr_base"]
-lib-sky130_fd_pr_rf:            ["sky130_fd_pr_rf"]
-lib-sky130_fd_pr_rf2:           ["sky130_fd_pr_rf2"]
-
-lib-sky130_fd_sc_hd:            ["sky130_fd_sc_hd"]
-lib-sky130_fd_sc_hdll:          ["sky130_fd_sc_hdll"]
-lib-sky130_fd_sc_hs:            ["sky130_fd_sc_hs"]
-lib-sky130_fd_sc_hvl:           ["sky130_fd_sc_hvl"]
-lib-sky130_fd_sc_lp:            ["sky130_fd_sc_lp"]
-lib-sky130_fd_sc_ls:            ["sky130_fd_sc_ls"]
-lib-sky130_fd_sc_ms:            ["sky130_fd_sc_ms"]
-
-lib-sky130_fd_sp_flash:         ["sky130_fd_sp_flash"]
-lib-sky130_fd_sp_sram:          ["sky130_fd_sp_sram"]
-
-lib-sky130_osu_sc:              ["sky130_osu_sc"]
-
-# scripts-documentation
-scripts-python:                 ["*.py"]
-scripts-python-liberty:         ["liberty.py", "corners.py"]
-scripts-python-verilog:
- - "skywater_pdk/verilog"  # Script itself
- - "*.blackbox.v"          # Generated blackbox files
- - "*.symbol.v"            # Generated symbol files
- - "*.tb.v"                # Generated test bench
- - "*_[0-9].v"             # Generated strength driver wrappers
-
-# tools-BAG
-# tools-Cadence-Innovus
-# tools-Cadence-Virtuoso
-# tools-FASoC
-# tools-Magic
-# tools-Mentor-Calibre
-# tools-OpenRAM
-# tools-OpenROAD
-
-# type-bug
-# type-duplicate
-# type-enhancement
-# type-question
-# type-todo
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..c39f10a
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,9 @@
+# Set update schedule for GitHub Actions
+version: 2
+updates:
+
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      # Check for updates to GitHub Actions every weekday
+      interval: "daily"
diff --git a/.github/kokoro/continuous.cfg b/.github/kokoro/continuous.cfg
new file mode 100644
index 0000000..8e80887
--- /dev/null
+++ b/.github/kokoro/continuous.cfg
@@ -0,0 +1,13 @@
+# Format: kokoro/config/proto/build.proto
+
+build_file: "skywater-pdk/.github/kokoro/run.sh"
+
+env_vars {
+  key: "KOKORO_TYPE"
+  value: "continuous"
+}
+
+env_vars {
+  key: "KOKORO_DIR"
+  value: "skywater-pdk"
+}
diff --git a/.github/kokoro/presubmit.cfg b/.github/kokoro/presubmit.cfg
new file mode 100644
index 0000000..5a36428
--- /dev/null
+++ b/.github/kokoro/presubmit.cfg
@@ -0,0 +1,13 @@
+# Format: kokoro/config/proto/build.proto
+
+build_file: "skywater-pdk/.github/kokoro/run.sh"
+
+env_vars {
+  key: "KOKORO_TYPE"
+  value: "presubmit"
+}
+
+env_vars {
+  key: "KOKORO_DIR"
+  value: "skywater-pdk"
+}
diff --git a/.github/kokoro/run.sh b/.github/kokoro/run.sh
new file mode 100755
index 0000000..f3de16a
--- /dev/null
+++ b/.github/kokoro/run.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+# -*- coding: utf-8 -*-
+#
+# Copyright 2020 Regents of the University of California
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+set -e
+
+CALLED=$_
+[[ "${BASH_SOURCE[0]}" != "${0}" ]] && SOURCED=1 || SOURCED=0
+
+SCRIPT_SRC="$(realpath ${BASH_SOURCE[0]})"
+SCRIPT_DIR="$(dirname "${SCRIPT_SRC}")"
+
+export PATH="/usr/sbin:/usr/bin:/sbin:/bin"
+
+cd github/$KOKORO_DIR
+
+. $SCRIPT_DIR/steps/auth.sh
+. $SCRIPT_DIR/steps/git.sh
+. $SCRIPT_DIR/steps/hostsetup.sh
+. $SCRIPT_DIR/steps/hostinfo.sh
+
+set -e
+
+echo
+echo "========================================"
+echo "Setting up build environment"
+echo "----------------------------------------"
+make env
+echo "----------------------------------------"
+
+echo
+echo "========================================"
+echo "Checkout all the submodules"
+echo "----------------------------------------"
+DOWNLOAD_JOBS=$(($CORES*2))
+git submodule update --init --jobs $DOWNLOAD_JOBS
+
+echo
+echo "========================================"
+echo "Build the timing libraries"
+echo "----------------------------------------"
+make -j timing
diff --git a/.github/kokoro/steps/auth.sh b/.github/kokoro/steps/auth.sh
new file mode 100755
index 0000000..c7d9583
--- /dev/null
+++ b/.github/kokoro/steps/auth.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+# -*- coding: utf-8 -*-
+#
+# Copyright 2020 Regents of the University of California
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+set -e
+
+echo
+echo "========================================"
+echo "Setting up authentication"
+echo "----------------------------------------"
+(
+	cd $KOKORO_ARTIFACTS_DIR
+	ls -l
+	# Run the GOB cookie daemon to allow cloning from
+	# foss-eda-tools.googlesource.com
+	git clone https://gerrit.googlesource.com/gcompute-tools \
+		   $KOKORO_ARTIFACTS_DIR/gcompute-tools
+	$KOKORO_ARTIFACTS_DIR/gcompute-tools/git-cookie-authdaemon
+)
+echo "----------------------------------------"
diff --git a/.github/kokoro/steps/git.sh b/.github/kokoro/steps/git.sh
new file mode 100755
index 0000000..3b78cd0
--- /dev/null
+++ b/.github/kokoro/steps/git.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+# -*- coding: utf-8 -*-
+#
+# Copyright 2020 Regents of the University of California
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+set -e
+
+echo
+echo "========================================"
+echo "Git log"
+echo "----------------------------------------"
+git log -n5 --stat
+echo "----------------------------------------"
+
+echo
+echo "========================================"
+echo "Git fetching tags"
+echo "----------------------------------------"
+# Don't fail if there are no tags
+git fetch --tags || true
+echo "----------------------------------------"
+
+echo
+echo "========================================"
+echo "Git version info"
+echo "----------------------------------------"
+git log -n1
+echo "----------------------------------------"
+git describe --tags || true
+echo "----------------------------------------"
+git describe --tags --always || true
+echo "----------------------------------------"
diff --git a/.github/kokoro/steps/hostinfo.sh b/.github/kokoro/steps/hostinfo.sh
new file mode 100755
index 0000000..a4c34f2
--- /dev/null
+++ b/.github/kokoro/steps/hostinfo.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+# -*- coding: utf-8 -*-
+#
+# Copyright 2020 Regents of the University of California
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+set -e
+
+echo
+echo "========================================"
+echo "Host Environment"
+echo "----------------------------------------"
+export
+echo "----------------------------------------"
+
+echo
+echo "========================================"
+echo "Host CPU"
+echo "----------------------------------------"
+export CORES=$(nproc --all)
+echo "Cores: $CORES"
+echo
+echo "Memory"
+echo "----------------------------------------"
+cat /proc/meminfo
+echo "----------------------------------------"
+export MEM_GB=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo)/(1024*1024)))
+echo "Memory (GB): $CORES"
+export MEM_CORES=$(($MEM_GB/4))
+
+echo
+echo "========================================"
+echo "Package version"
+echo "----------------------------------------"
+set -x
+gcc --version
+set +x
+echo "----------------------------------------"
diff --git a/.github/kokoro/steps/hostsetup.sh b/.github/kokoro/steps/hostsetup.sh
new file mode 100755
index 0000000..8caa377
--- /dev/null
+++ b/.github/kokoro/steps/hostsetup.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+# -*- coding: utf-8 -*-
+#
+# Copyright 2020 Regents of the University of California
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+set -e
+
+echo
+echo "========================================"
+echo "Host updating packages"
+echo "----------------------------------------"
+sudo apt-get update
+echo "----------------------------------------"
+
+echo
+echo "========================================"
+echo "Host install packages"
+echo "----------------------------------------"
+sudo apt-get install -y \
+            bash \
+            build-essential \
+            ca-certificates \
+            colordiff \
+            coreutils \
+            git \
+            m4 \
+            make \
+            psmisc \
+            wget
+
+  echo "----------------------------------------"
diff --git a/.github/labeler.yml b/.github/labeler.yml
new file mode 100644
index 0000000..402227b
--- /dev/null
+++ b/.github/labeler.yml
@@ -0,0 +1,123 @@
+# See https://github.com/actions/labeler#common-examples for defining patterns.
+# The globs use "minimatch" syntax found at https://github.com/isaacs/minimatch
+#
+# WARNING: Due to this file being yaml, any string starting with `*` must be
+# wrapped in quotes.
+
+documentation:
+ - "*.rst"
+ - docs
+ - docs/*
+ - docs/**/*
+
+files-definition:
+ - definition.json
+
+files-layout-gds:
+ - "*.gds"
+files-layout-lef-magic:
+ - "*.magic.lef"
+files-layout-lef:
+ - "*.lef"
+files-layout-tlef:
+ - "*.tlef"
+
+files-model-behavioral-verilog:
+ - "*.behavioral.v"
+files-model-functional-verilog:
+ - "*.functional.v"
+files-model-spice:
+ - "*.spice"
+# files-model-verilog
+
+files-netlist-cdl:
+ - "*.cdl"
+files-netlist-tsv:
+ - "*.netlist.tsv"
+
+files-powerpins:
+ - "*.pp.*"
+
+files-schematic-svg:
+ - "*.schematic.svg"
+
+files-symbol-svg:
+ - "*.symbol.svg"
+files-symbol-verilog:
+ - "*.symbol.v"
+
+files-timing-json:
+ - "*.lib.json"
+# files-timing-liberty:
+#  - *.lib
+
+files-testbench-verilog:
+ - "*.tb.v"
+
+infrastructure:
+ - .github/*
+ - .github/**/*
+ - "*travis*"
+ - "*kokoro*"
+
+lib-sky130_ef_io:
+ - sky130_fd_ef_io
+
+lib-sky130_fd_pr_base:
+ - sky130_fd_pr_base
+lib-sky130_fd_pr_rf:
+ - sky130_fd_pr_rf
+lib-sky130_fd_pr_rf2:
+ - sky130_fd_pr_rf2
+
+lib-sky130_fd_sc_hd:
+ - sky130_fd_sc_hd
+lib-sky130_fd_sc_hdll:
+ - sky130_fd_sc_hdll
+lib-sky130_fd_sc_hs:
+ - sky130_fd_sc_hs
+lib-sky130_fd_sc_hvl:
+ - sky130_fd_sc_hvl
+lib-sky130_fd_sc_lp:
+ - sky130_fd_sc_lp
+lib-sky130_fd_sc_ls:
+ - sky130_fd_sc_ls
+lib-sky130_fd_sc_ms:
+ - sky130_fd_sc_ms
+
+lib-sky130_fd_sp_flash:
+ - sky130_fd_sp_flash
+lib-sky130_fd_sp_sram:
+ - sky130_fd_sp_sram
+
+lib-sky130_osu_sc:
+ - sky130_osu_sc*
+
+# scripts-documentation
+scripts-python:
+ - "*.py"
+scripts-python-liberty:
+ - liberty.py
+ - corners.py
+scripts-python-verilog:
+ - skywater_pdk/verilog/*    # Script itself
+ - skywater_pdk/verilog/**/* # Script itself
+ - "*.blackbox.v"            # Generated blackbox files
+ - "*.symbol.v"              # Generated symbol files
+ - "*.tb.v"                  # Generated test bench
+ - "*_[0-9].v"               # Generated strength driver wrappers
+
+# tools-BAG
+# tools-Cadence-Innovus
+# tools-Cadence-Virtuoso
+# tools-FASoC
+# tools-Magic
+# tools-Mentor-Calibre
+# tools-OpenRAM
+# tools-OpenROAD
+
+# type-bug
+# type-duplicate
+# type-enhancement
+# type-question
+# type-todo
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
new file mode 100644
index 0000000..23956a0
--- /dev/null
+++ b/.github/workflows/labeler.yml
@@ -0,0 +1,11 @@
+name: "Pull Request Labeler"
+on:
+- pull_request_target
+
+jobs:
+  triage:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/labeler@main
+      with:
+        repo-token: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/.github/workflows/manage-labels.yml b/.github/workflows/manage-labels.yml
index 4e9bb19..35b6777 100644
--- a/.github/workflows/manage-labels.yml
+++ b/.github/workflows/manage-labels.yml
@@ -12,7 +12,7 @@
       -
         name: Run Labeler
         if: success()
-        uses: crazy-max/ghaction-github-labeler@v2
+        uses: crazy-max/ghaction-github-labeler@v3.1.0
         with:
           yaml_file: .github/labels.yml
         env:
diff --git a/.gitmodules b/.gitmodules
index 3a0a8fa..12f5cd4 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,7 @@
+[submodule "third_party/make-env"]
+	path = third_party/make-env
+	url = https://github.com/SymbiFlow/make-env.git
+
 # sky130_fd_pr
 [submodule "libraries/sky130_fd_pr/latest"]
 	path = libraries/sky130_fd_pr/latest
@@ -156,3 +160,87 @@
 	branch = branch-0.1.0
 	shallow = true
 	fetchRecurseSubmodules = false
+
+# sky130_fd_sc_lp
+[submodule "libraries/sky130_fd_sc_lp/latest"]
+	path = libraries/sky130_fd_sc_lp/latest
+	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_fd_sc_lp.git
+	branch = master
+	shallow = true
+	fetchRecurseSubmodules = true
+[submodule "libraries/sky130_fd_sc_lp/v0.0.2"]
+	path = libraries/sky130_fd_sc_lp/v0.0.2
+	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_fd_sc_lp.git
+	branch = branch-0.0.2
+	shallow = true
+	fetchRecurseSubmodules = false
+[submodule "libraries/sky130_fd_sc_lp/v0.0.1"]
+	path = libraries/sky130_fd_sc_lp/v0.0.1
+	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_fd_sc_lp.git
+	branch = branch-0.0.1
+	shallow = true
+	fetchRecurseSubmodules = false
+
+# sky130_fd_sc_hvl
+[submodule "libraries/sky130_fd_sc_hvl/latest"]
+	path = libraries/sky130_fd_sc_hvl/latest
+	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_fd_sc_hvl.git
+	branch = master
+	shallow = true
+	fetchRecurseSubmodules = true
+[submodule "libraries/sky130_fd_sc_hvl/v0.0.3"]
+	path = libraries/sky130_fd_sc_hvl/v0.0.3
+	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_fd_sc_hvl.git
+	branch = branch-0.0.3
+	shallow = true
+	fetchRecurseSubmodules = false
+[submodule "libraries/sky130_fd_sc_hvl/v0.0.2"]
+	path = libraries/sky130_fd_sc_hvl/v0.0.2
+	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_fd_sc_hvl.git
+	branch = branch-0.0.2
+	shallow = true
+	fetchRecurseSubmodules = false
+[submodule "libraries/sky130_fd_sc_hvl/v0.0.1"]
+	path = libraries/sky130_fd_sc_hvl/v0.0.1
+	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_fd_sc_hvl.git
+	branch = branch-0.0.1
+	shallow = true
+	fetchRecurseSubmodules = false
+
+# sky130_fd_io
+[submodule "libraries/sky130_fd_io/latest"]
+	path = libraries/sky130_fd_io/latest
+	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_fd_io.git
+	branch = master
+	shallow = true
+	fetchRecurseSubmodules = true
+[submodule "libraries/sky130_fd_io/v0.2.1"]
+	path = libraries/sky130_fd_io/v0.2.1
+	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_fd_io.git
+	branch = branch-0.2.1
+	shallow = true
+	fetchRecurseSubmodules = false
+[submodule "libraries/sky130_fd_io/v0.2.0"]
+	path = libraries/sky130_fd_io/v0.2.0
+	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_fd_io.git
+	branch = branch-0.2.0
+	shallow = true
+	fetchRecurseSubmodules = false
+[submodule "libraries/sky130_fd_io/v0.1.0"]
+	path = libraries/sky130_fd_io/v0.1.0
+	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_fd_io.git
+	branch = branch-0.1.0
+	shallow = true
+	fetchRecurseSubmodules = false
+[submodule "libraries/sky130_fd_io/v0.0.2"]
+	path = libraries/sky130_fd_io/v0.0.2
+	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_fd_io.git
+	branch = branch-0.1.0
+	shallow = true
+	fetchRecurseSubmodules = false
+[submodule "libraries/sky130_fd_io/v0.0.1"]
+	path = libraries/sky130_fd_io/v0.0.1
+	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_fd_io.git
+	branch = branch-0.0.1
+	shallow = true
+	fetchRecurseSubmodules = false
diff --git a/.readthedocs.yml b/.readthedocs.yml
index 4b63f51..5321847 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -26,4 +26,9 @@
   configuration: docs/conf.py
 
 conda:
-  environment: environment.yml
+  environment: docs/environment.yml
+
+submodules:
+  include:
+   - libraries/sky130_fd_io/latest
+  recursive: false
diff --git a/Makefile b/Makefile
index 26390f6..1896b7e 100644
--- a/Makefile
+++ b/Makefile
@@ -14,11 +14,25 @@
 #
 # SPDX-License-Identifier: Apache-2.0
 
-include scripts/make/git.mk
-include scripts/make/conda.mk
+# The top directory where environment will be created.
+TOP_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
+
+# A pip `requirements.txt` file.
+# https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format
+REQUIREMENTS_FILE := requirements.txt
+
+# A conda `environment.yml` file.
+# https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html
+ENVIRONMENT_FILE := environment.yml
+
+$(TOP_DIR)/third_party/make-env/conda.mk: $(TOP_DIR)/.gitmodules
+	cd $(TOP_DIR); git submodule update --init third_party/make-env
+
+-include $(TOP_DIR)/third_party/make-env/conda.mk
 
 .DEFAULT_GOAL := all
 
+include $(TOP_DIR)/scripts/make/git.mk
 README.rst: README.src.rst docs/status.rst Makefile | $(CONDA_ENV_PYTHON)
 	@rm -f README.rst
 	$(IN_CONDA_ENV) rst_include include README.src.rst - \
@@ -52,7 +66,7 @@
 
 .PHONY: check-licenses
 
-lint-python:
+lint-python: | $(CONDA_ENV_PYTHON)
 	$(IN_CONDA_ENV) flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
 
 .PHONY: lint-python
diff --git a/README.rst b/README.rst
index 008d8d5..31c2643 100644
--- a/README.rst
+++ b/README.rst
@@ -55,6 +55,15 @@
 
 See both the `Known Issues <docs/known_issues.rst>`_ section and the `SkyWater PDK GitHub issue list <https://github.com/google/skywater-pdk/issues>`_ to get more detailed information around currently known issues.
 
+Resources
+=========
+
+The latest SkyWater SKY130 PDK design resources can be viewed at the following locations:
+
+* `On Github @ google/skywater-pdk <https://github.com/google/skywater-pdk>`_
+* `Google CodeSearch interface @ https://cs.opensource.google/skywater-pdk <https://cs.opensource.google/skywater-pdk>`_
+* `foss-eda-tools.googlesource.com/skywater-pdk <https://foss-eda-tools.googlesource.com/skywater-pdk/>`_
+
 SKY130 Process Node
 ===================
 
diff --git a/README.src.rst b/README.src.rst
index 9f6f63c..694895f 100644
--- a/README.src.rst
+++ b/README.src.rst
@@ -37,6 +37,15 @@
 
 See both the :ref:`Known Issues` section and the `SkyWater PDK GitHub issue list <https://github.com/google/skywater-pdk/issues>`_ to get more detailed information around currently known issues.
 
+Resources
+=========
+
+The latest SkyWater SKY130 PDK design resources can be viewed at the following locations:
+
+* `On Github @ google/skywater-pdk <https://github.com/google/skywater-pdk>`_
+* `Google CodeSearch interface @ https://cs.opensource.google/skywater-pdk <https://cs.opensource.google/skywater-pdk>`_
+* `foss-eda-tools.googlesource.com/skywater-pdk <https://foss-eda-tools.googlesource.com/skywater-pdk/>`_
+
 SKY130 Process Node
 ===================
 
diff --git a/docs/Makefile b/docs/Makefile
index 08af88d..9bc3b5c 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -1,9 +1,35 @@
-# Minimal makefile for Sphinx documentation
+# Copyright 2020 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
 
-DOCSDIR := $(dir $(lastword $(MAKEFILE_LIST)))
-TOPDIR := $(realpath $(DOCSDIR)/..)
+# The top directory where environment will be created.
+DOCS_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
+TOP_DIR := $(realpath $(DOCS_DIR)/..)
 
-include $(TOPDIR)/scripts/make/conda.mk
+# A pip `requirements.txt` file.
+# https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format
+REQUIREMENTS_FILE := requirements.txt
+
+# A conda `environment.yml` file.
+# https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html
+ENVIRONMENT_FILE := environment.yml
+
+$(TOP_DIR)/third_party/make-env/conda.mk: $(TOP_DIR)/.gitmodules
+	cd $(TOP_DIR); git submodule update --init third_party/make-env
+
+-include $(TOP_DIR)/third_party/make-env/conda.mk
 
 SHELL = /bin/bash
 
@@ -16,8 +42,8 @@
 SPHINXBUILD     = $(IN_CONDA_ENV) sphinx-build
 SPHINXAUTOBUILD = $(IN_CONDA_ENV) sphinx-autobuild
 SPHINXPROJ      = SkyWaterPDK
-SOURCEDIR       = $(DOCSDIR)
-BUILDDIR        = $(DOCSDIR)/_build
+SOURCEDIR       = $(DOCS_DIR)
+BUILDDIR        = $(DOCS_DIR)/_build
 
 # Put it first so that "make" without argument is like "make help".
 help: | $(CONDA_ENV_PYTHON)
@@ -69,10 +95,11 @@
 # Catch-all target: route all unknown targets to Sphinx using the new
 # "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
 .DEFAULT: | $(CONDA_ENV_PYTHON)
+	@make env
 	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
 
 
-clean: clean-docs
+clean:: clean-docs
 
 
 clean-docs:
diff --git a/docs/conf.py b/docs/conf.py
index c88cc23..70129cb 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -124,6 +124,9 @@
     'code-of-conduct.rst',
     'rules/periphery-rules.rst',
     'rules/device-details/*/index.rst',
+    'rules/summary/*-key.rst',
+    'rules/layers/*-key.rst',
+    'rules/hv/*-key.rst',
 ]
 
 # The name of the Pygments (syntax highlighting) style to use.
@@ -199,6 +202,7 @@
 
     # Hide the symbiflow links
     'hide_symbiflow_links': True,
+    'license_url' : 'https://www.apache.org/licenses/LICENSE-2.0',
 }
 
 # Add any paths that contain custom static files (such as style sheets) here,
diff --git a/docs/environment.yml b/docs/environment.yml
new file mode 100644
index 0000000..23797fd
--- /dev/null
+++ b/docs/environment.yml
@@ -0,0 +1,28 @@
+# Copyright 2020 SkyWater PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+name: skywater-pdk-docs
+channels:
+- symbiflow
+- conda-forge
+- defaults
+dependencies:
+- python=3.8
+- pip
+- yosys
+- netlistsvg
+# Packages installed from PyPI
+- pip:
+  - -r file:requirements.txt
diff --git a/docs/index.rst b/docs/index.rst
index 1d30453..828ea9b 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -46,6 +46,14 @@
 .. include:: status.rst
     :start-after: current_status_text
 
+Resources
+=========
+
+The latest SkyWater SKY130 PDK design resources can be downloaded from the following repositories:
+
+* `On Github @ google/skywater-pdk <https://github.com/google/skywater-pdk>`_
+* `Google CodeSearch interface @ https://cs.opensource.google/skywater-pdk <https://cs.opensource.google/skywater-pdk>`_
+* `foss-eda-tools.googlesource.com/skywater-pdk <https://foss-eda-tools.googlesource.com/skywater-pdk/>`_
 
 Indices and tables
 ==================
diff --git a/docs/rules/device-details.rst b/docs/rules/device-details.rst
index e6bfd5b..6ae9877 100644
--- a/docs/rules/device-details.rst
+++ b/docs/rules/device-details.rst
@@ -12,7 +12,7 @@
 
 Operating Voltages where SPICE models are valid
 
--  \|V\ :sub:`c0` – V\ :sub:`c1`\ \| = 0 to 5.0V
+-  :math:`|V_{c0} – V_{c1}| = 0` to 5.0V
 
 Details
 ~~~~~~~
@@ -61,7 +61,7 @@
 
 Operating Voltages where SPICE models are valid
 
--  \|V\ :sub:`0` – V\ :sub:`1`\ \| = 0 to 2.0V
+-  :math:`|V_0 – V_1| = 0` to 2.0V
 
 Details
 ~~~~~~~
@@ -110,7 +110,7 @@
 
 Operating Voltages where SPICE models are valid
 
--  \|V\ :sub:`c0` – V\ :sub:`c1`\ \| = 0 to 5.5V
+-  :math:`|V_{c0} – V_{c1}| = 0` to 5.5V
 
 Details
 ~~~~~~~
@@ -200,7 +200,7 @@
 
 Operating regime where SPICE models are valid
 
--  \|V\ :sub:`d0` – V\ :sub:`d1`\ \| = 0 to 5.0V
+-  :math:`|V_{d0} – V_{d1}| = 0` to 5.0V
 
 Details
 ~~~~~~~
@@ -260,9 +260,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to 11.0V (:model:`sky130_fd_pr__nfet_g5v0d10v5*`), 0 to 1.95V (:model:`sky130_fd_pr__nfet_01v8*`)
--  V\ :sub:`GS` = 0 to 5.0V (:model:`sky130_fd_pr__nfet_g5v0d10v5*`), 0 to 1.95V (:model:`sky130_fd_pr__nfet_01v8*`)
--  V\ :sub:`BS` = 0 to -5.5V, (:model:`sky130_fd_pr__nfet_g5v0d10v5`), +0.3 to -5.5V (:model:`sky130_fd_pr__nfet_05v0_nvt`), 0 to -1.95V (:model:`sky130_fd_pr__nfet_01v8*`)
+-  :math:`V_{DS} = 0` to 11.0V (:model:`sky130_fd_pr__nfet_g5v0d10v5*`), 0 to 1.95V (:model:`sky130_fd_pr__nfet_01v8*`)
+-  :math:`V_{GS} = 0` to 5.0V (:model:`sky130_fd_pr__nfet_g5v0d10v5*`), 0 to 1.95V (:model:`sky130_fd_pr__nfet_01v8*`)
+-  :math:`V_{BS} = 0` to -5.5V, (:model:`sky130_fd_pr__nfet_g5v0d10v5`), +0.3 to -5.5V (:model:`sky130_fd_pr__nfet_05v0_nvt`), 0 to -1.95V (:model:`sky130_fd_pr__nfet_01v8*`)
 
 Details
 ~~~~~~~
@@ -304,9 +304,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to 11.0V
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = 0 to -5.5V
+-  :math:`V_{DS} = 0` to 11.0V
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = 0` to -5.5V
 
 Details
 ~~~~~~~
@@ -341,10 +341,10 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to +16V (V:sub:`GS` = 0)
--  V\ :sub:`DS` = 0 to +11V (V:sub:`GS` > 0)
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = 0 to -2.0V
+-  :math:`V_{DS} = 0` to +16V (\ :math:`V_{GS} = 0`\ )
+-  :math:`V_{DS} = 0` to +11V (\ :math:`V_{GS} > 0`\ )
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = 0` to -2.0V
 
 Details
 ~~~~~~~
@@ -379,9 +379,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to 1.95V
--  V\ :sub:`GS` = 0 to 1.95V
--  V\ :sub:`BS` = +0.3 to -1.95V
+-  :math:`V_{DS} = 0` to 1.95V
+-  :math:`V_{GS} = 0` to 1.95V
+-  :math:`V_{BS} = +0.3` to -1.95V
 
 Details
 ~~~~~~~
@@ -404,7 +404,7 @@
 
 |symbol-nfet_01v8_lvt|
 
-The cross-section of the low-VT NMOS FET is shown below. The cross-section is identical to the std NMOS FET except for the V\ :sub:`T` adjust implants (to achieve the lower V\ :sub:`T`)
+The cross-section of the low-VT NMOS FET is shown below. The cross-section is identical to the std NMOS FET except for the :math:`V_T` adjust implants (to achieve the lower :math:`V_T`)
 
 |cross-section-nfet_01v8_lvt|
 
@@ -423,9 +423,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to 1.95V
--  V\ :sub:`GS` = 0 to 1.95V
--  V\ :sub:`BS` = +0.3 to -1.95V
+-  :math:`V_{DS} = 0` to 1.95V
+-  :math:`V_{GS} = 0` to 1.95V
+-  :math:`V_{BS} = +0.3` to -1.95V
 
 Details
 ~~~~~~~
@@ -462,9 +462,9 @@
 
 Operating Voltages where SPICE models are valid for :model:`sky130_fd_pr__nfet_03v3_nvt`
 
--  V\ :sub:`DS` = 0 to 3.3V
--  V\ :sub:`GS` = 0 to 3.3V
--  V\ :sub:`BS` = 0 to -3.3V
+-  :math:`V_{DS} = 0` to 3.3V
+-  :math:`V_{GS} = 0` to 3.3V
+-  :math:`V_{BS} = 0` to -3.3V
 
 Details
 ~~~~~~~
@@ -503,9 +503,9 @@
 
 Operating Voltages where SPICE models are valid for :model:`sky130_fd_pr__nfet_05v0_nvt`
 
--  V\ :sub:`DS` = 0 to 5.5V
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = +0.3 to -5.5V
+-  :math:`V_{DS} = 0` to 5.5V
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = +0.3` to -5.5V
 
 Details
 ~~~~~~~
@@ -545,9 +545,9 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to +22V
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = 0 to -2.0V
+-  :math:`V_{DS} = 0` to +22V
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = 0` to -2.0V
 
 Details
 ~~~~~~~
@@ -589,9 +589,9 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to +22V
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = 0 to -2.0V
+-  :math:`V_{DS} = 0` to +22V
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = 0` to -2.0V
 
 Details
 ~~~~~~~
@@ -628,9 +628,9 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to +22V
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = 0 to -2.0V
+-  :math:`V_{DS} = 0` to +22V
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = 0` to -2.0V
 
 Details
 ~~~~~~~
@@ -667,9 +667,9 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to +22V
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = 0 to -2.0V
+-  :math:`V_{DS} = 0` to +22V
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = 0` to -2.0V
 
 Details
 ~~~~~~~
@@ -703,9 +703,9 @@
 
 Operating regime where SPICE models are valid
 
--  \|V\ :sub:`CE`\ \| = 0 to 5.0V
--  \|V\ :sub:`BE`\ \| = 0 to 5.0V
--  I\ :sub:`CE` = 0.01 to 10 µA/µm\ :sup:`2`
+-  :math:`|V_{CE}| = 0` to 5.0V
+-  :math:`|V_{BE}| = 0` to 5.0V
+-  :math:`I_{CE} = 0.01` to 10 µA/µm\ :sup:`2`
 
 Details
 ~~~~~~~
@@ -755,9 +755,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to -11.0V
--  V\ :sub:`GS` = 0 to -5.5V
--  V\ :sub:`BS` = 0 to +5.5V
+-  :math:`V_{DS} = 0` to -11.0V
+-  :math:`V_{GS} = 0` to -5.5V
+-  :math:`V_{BS} = 0` to +5.5V
 
 Details
 ~~~~~~~
@@ -800,10 +800,10 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to -16V (V:sub:`GS` = 0)
--  V\ :sub:`DS` = 0 to -10V (V:sub:`GS` < 0)
--  V\ :sub:`GS` = 0 to -5.5V
--  V\ :sub:`BS` = 0 to +2.0V
+-  :math:`V_{DS} = 0` to -16V (\ :math:`V_{GS} = 0`\ )
+-  :math:`V_{DS} = 0` to -10V (\ :math:`V_{GS} < 0`\ )
+-  :math:`V_{GS} = 0` to -5.5V
+-  :math:`V_{BS} = 0` to +2.0V
 
 Details
 ~~~~~~~
@@ -838,9 +838,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to -1.95V
--  V\ :sub:`GS` = 0 to -1.95V
--  V\ :sub:`BS` = -0.1 to +1.95V
+-  :math:`V_{DS} = 0` to -1.95V
+-  :math:`V_{GS} = 0` to -1.95V
+-  :math:`V_{BS} = -0.1` to +1.95V
 
 Details
 ~~~~~~~
@@ -863,7 +863,7 @@
 
 |symbol-pfet_01v8_hvt|
 
-The cross-section of the high-VT PMOS FET is shown below. The cross-section is identical to the std PMOS FET except for the V\ :sub:`T` adjust implants (to achieve the higher V\ :sub:`T`)
+The cross-section of the high-VT PMOS FET is shown below. The cross-section is identical to the std PMOS FET except for the :math:`V_T` adjust implants (to achieve the higher :math:`V_T`)
 
 |cross-section-pfet_01v8_hvt|
 
@@ -882,9 +882,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to -1.95V
--  V\ :sub:`GS` = 0 to -1.95V
--  V\ :sub:`BS` = -0.1 to +1.95V
+-  :math:`V_{DS} = 0` to -1.95V
+-  :math:`V_{GS} = 0` to -1.95V
+-  :math:`V_{BS} = -0.1` to +1.95V
 
 Details
 ~~~~~~~
@@ -907,7 +907,7 @@
 
 |symbol-pfet_01v8_lvt|
 
-The cross-section of the low-VT PMOS FET is shown below. The cross-section is identical to the std PMOS FET except for the V\ :sub:`T` adjust implants (to achieve the lower V\ :sub:`T`)
+The cross-section of the low-VT PMOS FET is shown below. The cross-section is identical to the std PMOS FET except for the :math:`V_T` adjust implants (to achieve the lower :math:`V_T`)
 
 |cross-section-pfet_01v8_lvt|
 
@@ -926,9 +926,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to -1.95V
--  V\ :sub:`GS` = 0 to -1.95V
--  V\ :sub:`BS` = -0.1 to +1.95V
+-  :math:`V_{DS} = 0` to -1.95V
+-  :math:`V_{GS} = 0` to -1.95V
+-  :math:`V_{BS} = -0.1` to +1.95V
 
 Details
 ~~~~~~~
@@ -970,9 +970,9 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to -22V
--  V\ :sub:`GS` = 0 to -5.5V
--  V\ :sub:`BS` = 0 to +2.0V
+-  :math:`V_{DS} = 0` to -22V
+-  :math:`V_{GS} = 0` to -5.5V
+-  :math:`V_{BS} = 0` to +2.0V
 
 Details
 ~~~~~~~
@@ -1014,9 +1014,9 @@
 
 Operating regime where SPICE models are valid
 
--  \|V\ :sub:`CE`\ \| = 0 to 5.0V
--  \|V\ :sub:`BE`\ \| = 0 to 5.0V
--  I\ :sub:`CE` = 0.01 to 10 µA/µm\ :sup:`2`
+-  :math:`|V_{CE}| = 0` to 5.0V
+-  :math:`|V_{BE}| = 0` to 5.0V
+-  :math:`I_{CE} = 0.01` to 10 µA/µm\ :sup:`2`
 
 Details
 ~~~~~~~
@@ -1123,7 +1123,7 @@
 
 Operating ranges where SPICE models are valid
 
--  \|V\ :sub:`r0` – V\ :sub:`r1`\ \| = 0 to 5.0V
+-  :math:`|V_{r0} – V_{r1}| = 0` to 5.0V
 -  Currents up to 500 µA/µm of width (preferred use ≤ 100 µA/µm)
 
 Details
@@ -1141,15 +1141,15 @@
 
 The fixed-width resistors are modeled using the equation
 
-*R\ :sub:`0`* = head/tail resistance [Ω] (dominated by the slot licons)
+*\ :math:`R_0`\ * = head/tail resistance [Ω] (dominated by the slot licons)
 
-*R\ :sub:`1`* = body resistance [Ω/µm] = R\ :sub:`SH`/W
+*\ :math:`R_1`\ * = body resistance [Ω/µm] = :math:`R_{SH}`/W
 
 A top-down schematic drawing of the precision resistor is shown below.
 
 |res_high_po|
 
-In addition to the R\ :sub:`0` and R\ :sub:`1` values, several fixed-value resistors are measured at e-test, as shown in the table below:
+In addition to the :math:`R_0` and :math:`R_1` values, several fixed-value resistors are measured at e-test, as shown in the table below:
 
 
 .. include:: device-details/res_high/res_high-table0.rst
@@ -1196,7 +1196,7 @@
 
 Operating ranges where SPICE models are valid
 
--  \|V\ :sub:`r0` – V\ :sub:`r1`\ \| = 0 to 5.0V
+-  :math:`|V_{r0} – V_{r1}| = 0` to 5.0V
 -  Currents up to 500 µA/µm of width (preferred use ≤ 100 µA/µm)
 
 Details
@@ -1304,9 +1304,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to 1.8V
--  V\ :sub:`GS` = 0 to 1.8V
--  V\ :sub:`BS` = 0 to -1.8V
+-  :math:`V_{DS} = 0` to 1.8V
+-  :math:`V_{GS} = 0` to 1.8V
+-  :math:`V_{BS} = 0` to -1.8V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/cap_mim/index.rst b/docs/rules/device-details/cap_mim/index.rst
index 52fc08d..6a3958f 100644
--- a/docs/rules/device-details/cap_mim/index.rst
+++ b/docs/rules/device-details/cap_mim/index.rst
@@ -9,7 +9,7 @@
 
 Operating Voltages where SPICE models are valid
 
--  \|V\ :sub:`c0` – V\ :sub:`c1`\ \| = 0 to 5.0V
+-  :math:`|V_{c0} – V_{c1}| = 0` to 5.0V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/cap_var/index.rst b/docs/rules/device-details/cap_var/index.rst
index d19b5e5..3209cee 100644
--- a/docs/rules/device-details/cap_var/index.rst
+++ b/docs/rules/device-details/cap_var/index.rst
@@ -10,7 +10,7 @@
 
 Operating Voltages where SPICE models are valid
 
--  \|V\ :sub:`0` – V\ :sub:`1`\ \| = 0 to 2.0V
+-  :math:`|V_0 – V_1| = 0` to 2.0V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/cap_vpp/index.rst b/docs/rules/device-details/cap_vpp/index.rst
index 23c349d..5fe1135 100644
--- a/docs/rules/device-details/cap_vpp/index.rst
+++ b/docs/rules/device-details/cap_vpp/index.rst
@@ -15,7 +15,7 @@
 
 Operating Voltages where SPICE models are valid
 
--  \|V\ :sub:`c0` – V\ :sub:`c1`\ \| = 0 to 5.5V
+-  :math:`|V_{c0} – V_{c1}| = 0` to 5.5V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/diodes/index.rst b/docs/rules/device-details/diodes/index.rst
index 5b532d9..3a7e04e 100644
--- a/docs/rules/device-details/diodes/index.rst
+++ b/docs/rules/device-details/diodes/index.rst
@@ -11,7 +11,7 @@
 
 Operating regime where SPICE models are valid
 
--  \|V\ :sub:`d0` – V\ :sub:`d1`\ \| = 0 to 5.0V
+-  :math:`|V_{d0} – V_{d1}| = 0` to 5.0V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/esd_nfet/index.rst b/docs/rules/device-details/esd_nfet/index.rst
index 5957e7b..1d57c06 100644
--- a/docs/rules/device-details/esd_nfet/index.rst
+++ b/docs/rules/device-details/esd_nfet/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to 11.0V (:model:`sky130_fd_pr__nfet_g5v0d10v5*`), 0 to 1.95V (:model:`sky130_fd_pr__nfet_01v8*`)
--  V\ :sub:`GS` = 0 to 5.0V (:model:`sky130_fd_pr__nfet_g5v0d10v5*`), 0 to 1.95V (:model:`sky130_fd_pr__nfet_01v8*`)
--  V\ :sub:`BS` = 0 to -5.5V, (:model:`sky130_fd_pr__nfet_g5v0d10v5`), +0.3 to -5.5V (:model:`sky130_fd_pr__nfet_05v0_nvt`), 0 to -1.95V (:model:`sky130_fd_pr__nfet_01v8*`)
+-  :math:`V_{DS} = 0` to 11.0V (:model:`sky130_fd_pr__nfet_g5v0d10v5*`), 0 to 1.95V (:model:`sky130_fd_pr__nfet_01v8*`)
+-  :math:`V_{GS} = 0` to 5.0V (:model:`sky130_fd_pr__nfet_g5v0d10v5*`), 0 to 1.95V (:model:`sky130_fd_pr__nfet_01v8*`)
+-  :math:`V_{BS} = 0` to -5.5V, (:model:`sky130_fd_pr__nfet_g5v0d10v5`), +0.3 to -5.5V (:model:`sky130_fd_pr__nfet_05v0_nvt`), 0 to -1.95V (:model:`sky130_fd_pr__nfet_01v8*`)
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/nfet_01v8/index.rst b/docs/rules/device-details/nfet_01v8/index.rst
index 2194de0..6d1262e 100644
--- a/docs/rules/device-details/nfet_01v8/index.rst
+++ b/docs/rules/device-details/nfet_01v8/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to 1.95V
--  V\ :sub:`GS` = 0 to 1.95V
--  V\ :sub:`BS` = +0.3 to -1.95V
+-  :math:`V_{DS} = 0` to 1.95V
+-  :math:`V_{GS} = 0` to 1.95V
+-  :math:`V_{BS} = +0.3` to -1.95V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/nfet_01v8_lvt/index.rst b/docs/rules/device-details/nfet_01v8_lvt/index.rst
index 80ab232..760664d 100644
--- a/docs/rules/device-details/nfet_01v8_lvt/index.rst
+++ b/docs/rules/device-details/nfet_01v8_lvt/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to 1.95V
--  V\ :sub:`GS` = 0 to 1.95V
--  V\ :sub:`BS` = +0.3 to -1.95V
+-  :math:`V_{DS} = 0` to 1.95V
+-  :math:`V_{GS} = 0` to 1.95V
+-  :math:`V_{BS} = +0.3` to -1.95V
 
 Details
 ~~~~~~~
@@ -34,7 +34,7 @@
 
 |symbol-nfet_01v8_lvt|
 
-The cross-section of the low-VT NMOS FET is shown below. The cross-section is identical to the std NMOS FET except for the V\ :sub:`T` adjust implants (to achieve the lower V\ :sub:`T`)
+The cross-section of the low-VT NMOS FET is shown below. The cross-section is identical to the std NMOS FET except for the :math:`V_T` adjust implants (to achieve the lower :math:`V_T`)
 
 |cross-section-nfet_01v8_lvt|
 
diff --git a/docs/rules/device-details/nfet_03v3_nvt/index.rst b/docs/rules/device-details/nfet_03v3_nvt/index.rst
index bea9f9d..41e3824 100644
--- a/docs/rules/device-details/nfet_03v3_nvt/index.rst
+++ b/docs/rules/device-details/nfet_03v3_nvt/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid for :model:`sky130_fd_pr__nfet_03v3_nvt`
 
--  V\ :sub:`DS` = 0 to 3.3V
--  V\ :sub:`GS` = 0 to 3.3V
--  V\ :sub:`BS` = 0 to -3.3V
+-  :math:`V_{DS} = 0` to 3.3V
+-  :math:`V_{GS} = 0` to 3.3V
+-  :math:`V_{BS} = 0` to -3.3V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/nfet_05v0_nvt/index.rst b/docs/rules/device-details/nfet_05v0_nvt/index.rst
index c6302f9..a44a233 100644
--- a/docs/rules/device-details/nfet_05v0_nvt/index.rst
+++ b/docs/rules/device-details/nfet_05v0_nvt/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid for :model:`sky130_fd_pr__nfet_05v0_nvt`
 
--  V\ :sub:`DS` = 0 to 5.5V
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = +0.3 to -5.5V
+-  :math:`V_{DS} = 0` to 5.5V
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = +0.3` to -5.5V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/nfet_20v0/index.rst b/docs/rules/device-details/nfet_20v0/index.rst
index 7116e61..0a5e75f 100644
--- a/docs/rules/device-details/nfet_20v0/index.rst
+++ b/docs/rules/device-details/nfet_20v0/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to +22V
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = 0 to -2.0V
+-  :math:`V_{DS} = 0` to +22V
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = 0` to -2.0V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/nfet_20v0_iso/index.rst b/docs/rules/device-details/nfet_20v0_iso/index.rst
index 4b4a9f5..dbc2861 100644
--- a/docs/rules/device-details/nfet_20v0_iso/index.rst
+++ b/docs/rules/device-details/nfet_20v0_iso/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to +22V
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = 0 to -2.0V
+-  :math:`V_{DS} = 0` to +22V
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = 0` to -2.0V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/nfet_20v0_nvt/index.rst b/docs/rules/device-details/nfet_20v0_nvt/index.rst
index af64709..d40569c 100644
--- a/docs/rules/device-details/nfet_20v0_nvt/index.rst
+++ b/docs/rules/device-details/nfet_20v0_nvt/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to +22V
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = 0 to -2.0V
+-  :math:`V_{DS} = 0` to +22V
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = 0` to -2.0V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/nfet_20v0_zvt/index.rst b/docs/rules/device-details/nfet_20v0_zvt/index.rst
index 6a43b88..f02630c 100644
--- a/docs/rules/device-details/nfet_20v0_zvt/index.rst
+++ b/docs/rules/device-details/nfet_20v0_zvt/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to +22V
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = 0 to -2.0V
+-  :math:`V_{DS} = 0` to +22V
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = 0` to -2.0V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/nfet_g11v0d16v0/index.rst b/docs/rules/device-details/nfet_g11v0d16v0/index.rst
index edda3c3..f5f7f2a 100644
--- a/docs/rules/device-details/nfet_g11v0d16v0/index.rst
+++ b/docs/rules/device-details/nfet_g11v0d16v0/index.rst
@@ -9,10 +9,10 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to +16V (V:sub:`GS` = 0)
--  V\ :sub:`DS` = 0 to +11V (V:sub:`GS` > 0)
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = 0 to -2.0V
+-  :math:`V_{DS} = 0` to +16V (\ :math:`V_{GS} = 0`\ )
+-  :math:`V_{DS} = 0` to +11V (\ :math:`V_{GS} > 0`\ )
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = 0` to -2.0V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/nfet_g5v0d10v5/index.rst b/docs/rules/device-details/nfet_g5v0d10v5/index.rst
index 934e31e..fab4a5b 100644
--- a/docs/rules/device-details/nfet_g5v0d10v5/index.rst
+++ b/docs/rules/device-details/nfet_g5v0d10v5/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to 11.0V
--  V\ :sub:`GS` = 0 to 5.5V
--  V\ :sub:`BS` = 0 to -5.5V
+-  :math:`V_{DS} = 0` to 11.0V
+-  :math:`V_{GS} = 0` to 5.5V
+-  :math:`V_{BS} = 0` to -5.5V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/npn_05v0/index.rst b/docs/rules/device-details/npn_05v0/index.rst
index c2745db..7ec820d 100644
--- a/docs/rules/device-details/npn_05v0/index.rst
+++ b/docs/rules/device-details/npn_05v0/index.rst
@@ -9,9 +9,9 @@
 
 Operating regime where SPICE models are valid
 
--  \|V\ :sub:`CE`\ \| = 0 to 5.0V
--  \|V\ :sub:`BE`\ \| = 0 to 5.0V
--  I\ :sub:`CE` = 0.01 to 10 µA/µm\ :sup:`2`
+-  :math:`|V_{CE}| = 0` to 5.0V
+-  :math:`|V_{BE}| = 0` to 5.0V
+-  :math:`I_{CE} = 0.01` to 10 µA/µm\ :sup:`2`
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/npn_05v0/npn_05v0-table0.rst b/docs/rules/device-details/npn_05v0/npn_05v0-table0.rst
index b39ebfa..de7bb2f 100644
--- a/docs/rules/device-details/npn_05v0/npn_05v0-table0.rst
+++ b/docs/rules/device-details/npn_05v0/npn_05v0-table0.rst
@@ -15,82 +15,82 @@
      - 18.14
      - 56.93
      - 
-     - NPN forward Current Gain (I\ :sub:`C`/I\ :sub:`B`) at I\ :sub:`E`\ =10 µA
+     - NPN forward Current Gain (\ :math:`\frac{I_C}{I_B})` at :math:`I_E=10 µA`
 
    * - BFNPN1X1\_1P0
      - 36.72
      - 17.97
      - 55.38
      - 
-     - NPN forward Current Gain (I\ :sub:`C`/I\ :sub:`B`) at I\ :sub:`E`\ =1.0 µA
+     - NPN forward Current Gain (\ :math:`\frac{I_C}{I_B})` at :math:`I_E=1.0 µA`
 
    * - BFNPN1X2\_17P5
      - 35.14
      - 16.98
      - 53.37
      - 
-     - NPN forward Current Gain (I\ :sub:`C`/I\ :sub:`B`) at I\ :sub:`E`\ =17.5 µA
+     - NPN forward Current Gain (\ :math:`\frac{I_C}{I_B})` at :math:`I_E=17.5 µA`
 
    * - BFNPN1X2\_1P75
      - 34.57
      - 16.89
      - 52.2
      - 
-     - NPN forward Current Gain (I\ :sub:`C`/I\ :sub:`B`) at I\ :sub:`E`\ =1.75 µA
+     - NPN forward Current Gain (\ :math:`\frac{I_C}{I_B})` at :math:`I_E=1.75 µA`
 
    * - BFNPNPOLY\_3P16
      - 125.28
      - 62.37
      - 500
      - 
-     - NPN forward Current Gain (I\ :sub:`C`/I\ :sub:`B`) at I\ :sub:`E`\ =3.16 µA
+     - NPN forward Current Gain (\ :math:`\frac{I_C}{I_B})` at :math:`I_E=3.16 µA`
 
    * - BFNPNPOLY\_P316
      - 106.98
      - 55.94
      - 500
      - 
-     - NPN forward Current Gain (I\ :sub:`C`/I\ :sub:`B`) at I\ :sub:`E`\ =0.316 µA
+     - NPN forward Current Gain (\ :math:`\frac{I_C}{I_B})` at :math:`I_E=0.316 µA`
 
    * - VBENPN1X1\_10P0
      - 0.7745
      - 0.7645
      - 0.7845
      - V
-     - NPN emitter-base voltage at I\ :sub:`E`\ =10 µA
+     - NPN emitter-base voltage at :math:`I_E=10 µA`
 
    * - VBENPN1X1\_1P0
      - 0.712
      - 0.702
      - 0.722
      - V
-     - NPN emitter-base voltage at I\ :sub:`E`\ =1.0 µA
+     - NPN emitter-base voltage at :math:`I_E=1.0 µA`
 
    * - VBENPN1X2\_17P5
      - 0.7745
      - 0.7645
      - 0.7845
      - V
-     - NPN emitter-base voltage at I\ :sub:`E`\ =17.5 µA
+     - NPN emitter-base voltage at :math:`I_E=17.5 µA`
 
    * - VBENPN1X2\_1P75
      - 0.712
      - 0.702
      - 0.722
      - V
-     - NPN emitter-base voltage at I\ :sub:`E`\ =1.75 µA
+     - NPN emitter-base voltage at :math:`I_E=1.75 µA`
 
    * - VBENPNPOLY\_3P16
      - 0.7073
      - 0.6933
      - 0.7213
      - V
-     - NPN emitter-base voltage at I\ :sub:`E`\ =3.16 µA
+     - NPN emitter-base voltage at :math:`I_E=3.16 µA`
 
    * - VBENPNPOLY\_P316
      - 0.6452
      - 0.6312
      - 0.6591
      - V
-     - NPN emitter-base voltage at I\ :sub:`E`\ =0.316 µA
+     - NPN emitter-base voltage at :math:`I_E=0.316 µA`
 
diff --git a/docs/rules/device-details/pfet_01v8/index.rst b/docs/rules/device-details/pfet_01v8/index.rst
index 492bfb7..7258e1a 100644
--- a/docs/rules/device-details/pfet_01v8/index.rst
+++ b/docs/rules/device-details/pfet_01v8/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to -1.95V
--  V\ :sub:`GS` = 0 to -1.95V
--  V\ :sub:`BS` = -0.1 to +1.95V
+-  :math:`V_{DS} = 0` to -1.95V
+-  :math:`V_{GS} = 0` to -1.95V
+-  :math:`V_{BS} = -0.1` to +1.95V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/pfet_01v8_hvt/index.rst b/docs/rules/device-details/pfet_01v8_hvt/index.rst
index 605228e..3e98a6e 100644
--- a/docs/rules/device-details/pfet_01v8_hvt/index.rst
+++ b/docs/rules/device-details/pfet_01v8_hvt/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to -1.95V
--  V\ :sub:`GS` = 0 to -1.95V
--  V\ :sub:`BS` = -0.1 to +1.95V
+-  :math:`V_{DS} = 0` to -1.95V
+-  :math:`V_{GS} = 0` to -1.95V
+-  :math:`V_{BS} = -0.1` to +1.95V
 
 Details
 ~~~~~~~
@@ -34,7 +34,7 @@
 
 |symbol-pfet_01v8_hvt|
 
-The cross-section of the high-VT PMOS FET is shown below. The cross-section is identical to the std PMOS FET except for the V\ :sub:`T` adjust implants (to achieve the higher V\ :sub:`T`)
+The cross-section of the high-VT PMOS FET is shown below. The cross-section is identical to the std PMOS FET except for the :math:`V_T` adjust implants (to achieve the higher :math:`V_T`)
 
 |cross-section-pfet_01v8_hvt|
 
diff --git a/docs/rules/device-details/pfet_01v8_lvt/index.rst b/docs/rules/device-details/pfet_01v8_lvt/index.rst
index 7d06605..b924a0b 100644
--- a/docs/rules/device-details/pfet_01v8_lvt/index.rst
+++ b/docs/rules/device-details/pfet_01v8_lvt/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to -1.95V
--  V\ :sub:`GS` = 0 to -1.95V
--  V\ :sub:`BS` = -0.1 to +1.95V
+-  :math:`V_{DS} = 0` to -1.95V
+-  :math:`V_{GS} = 0` to -1.95V
+-  :math:`V_{BS} = -0.1` to +1.95V
 
 Details
 ~~~~~~~
@@ -34,7 +34,7 @@
 
 |symbol-pfet_01v8_lvt|
 
-The cross-section of the low-VT PMOS FET is shown below. The cross-section is identical to the std PMOS FET except for the V\ :sub:`T` adjust implants (to achieve the lower V\ :sub:`T`)
+The cross-section of the low-VT PMOS FET is shown below. The cross-section is identical to the std PMOS FET except for the :math:`V_T` adjust implants (to achieve the lower :math:`V_T`)
 
 |cross-section-pfet_01v8_lvt|
 
diff --git a/docs/rules/device-details/pfet_20v0/index.rst b/docs/rules/device-details/pfet_20v0/index.rst
index c6fc99e..095773f 100644
--- a/docs/rules/device-details/pfet_20v0/index.rst
+++ b/docs/rules/device-details/pfet_20v0/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to -22V
--  V\ :sub:`GS` = 0 to -5.5V
--  V\ :sub:`BS` = 0 to +2.0V
+-  :math:`V_{DS} = 0` to -22V
+-  :math:`V_{GS} = 0` to -5.5V
+-  :math:`V_{BS} = 0` to +2.0V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/pfet_g5v0d10v5/index.rst b/docs/rules/device-details/pfet_g5v0d10v5/index.rst
index 986a947..2a92f21 100644
--- a/docs/rules/device-details/pfet_g5v0d10v5/index.rst
+++ b/docs/rules/device-details/pfet_g5v0d10v5/index.rst
@@ -9,9 +9,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to -11.0V
--  V\ :sub:`GS` = 0 to -5.5V
--  V\ :sub:`BS` = 0 to +5.5V
+-  :math:`V_{DS} = 0` to -11.0V
+-  :math:`V_{GS} = 0` to -5.5V
+-  :math:`V_{BS} = 0` to +5.5V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/pfet_g5v0d16v0/index.rst b/docs/rules/device-details/pfet_g5v0d16v0/index.rst
index ca92173..ed110bc 100644
--- a/docs/rules/device-details/pfet_g5v0d16v0/index.rst
+++ b/docs/rules/device-details/pfet_g5v0d16v0/index.rst
@@ -9,10 +9,10 @@
 
 Operating Voltages where SPICE models are valid, subject to SOA limitations:
 
--  V\ :sub:`DS` = 0 to -16V (V:sub:`GS` = 0)
--  V\ :sub:`DS` = 0 to -10V (V:sub:`GS` < 0)
--  V\ :sub:`GS` = 0 to -5.5V
--  V\ :sub:`BS` = 0 to +2.0V
+-  :math:`V_{DS} = 0` to -16V (\ :math:`V_{GS} = 0`\ )
+-  :math:`V_{DS} = 0` to -10V (\ :math:`V_{GS} < 0`\ )
+-  :math:`V_{GS} = 0` to -5.5V
+-  :math:`V_{BS} = 0` to +2.0V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/pnp_05v0/index.rst b/docs/rules/device-details/pnp_05v0/index.rst
index 243976b..0ffc275 100644
--- a/docs/rules/device-details/pnp_05v0/index.rst
+++ b/docs/rules/device-details/pnp_05v0/index.rst
@@ -9,9 +9,9 @@
 
 Operating regime where SPICE models are valid
 
--  \|V\ :sub:`CE`\ \| = 0 to 5.0V
--  \|V\ :sub:`BE`\ \| = 0 to 5.0V
--  I\ :sub:`CE` = 0.01 to 10 µA/µm\ :sup:`2`
+-  :math:`|V_{CE}| = 0` to 5.0V
+-  :math:`|V_{BE}| = 0` to 5.0V
+-  :math:`I_{CE} = 0.01` to 10 µA/µm\ :sup:`2`
 
 Details
 ~~~~~~~
diff --git a/docs/rules/device-details/pnp_05v0/pnp_05v0-table0.rst b/docs/rules/device-details/pnp_05v0/pnp_05v0-table0.rst
index 3edb969..677f2e7 100644
--- a/docs/rules/device-details/pnp_05v0/pnp_05v0-table0.rst
+++ b/docs/rules/device-details/pnp_05v0/pnp_05v0-table0.rst
@@ -15,54 +15,54 @@
      - 7.51
      - 21.02
      - 
-     - PNP forward current gain (I\ :sub:`C`/I\ :sub:`B`) at I\ :sub:`E`\ =0.5 µA
+     - PNP forward current gain (\ :math:`\frac{I_C}{I_B})` at :math:`I_E=0.5 µA`
 
    * - BF0P68\_5
      - 12.58
      - 6.59
      - 18.59
      - 
-     - PNP forward current gain (I\ :sub:`C`/I\ :sub:`B`) at I\ :sub:`E`\ =5.0 µA
+     - PNP forward current gain (\ :math:`\frac{I_C}{I_B})` at :math:`I_E=5.0 µA`
 
    * - VBE0P68\_0P5
      - 0.7180
      - 0.7120
      - 0.7240
      - V
-     - PNP emitter-base voltage at I\ :sub:`E`\ =0.5 µA
+     - PNP emitter-base voltage at :math:`I_E=0.5 µA`
 
    * - VBE0P68\_5
      - 0.7847
      - 0.7790
      - 0.7904
      - V
-     - PNP emitter-base voltage at I\ :sub:`E`\ =5.0 µA
+     - PNP emitter-base voltage at :math:`I_E=5.0 µA`
 
    * - BF3P4\_0P1
      - 13.20
      - 5.93
      - 20.20
      - 
-     - PNP forward current gain (I\ :sub:`C`/I\ :sub:`B`) at I\ :sub:`E`\ =0.1 µA
+     - PNP forward current gain (\ :math:`\frac{I_C}{I_B})` at :math:`I_E=0.1 µA`
 
    * - BF3P4\_10
      - 14.65
      - 6.10
      - 23.10
      - 
-     - PNP forward current gain (I\ :sub:`C`/I\ :sub:`B`) at I\ :sub:`E`\ =1.0 µA
+     - PNP forward current gain (\ :math:`\frac{I_C}{I_B})` at :math:`I_E=1.0 µA`
 
    * - VBE3P4\_0P1
      - 0.6129
      - 0.6087
      - 0.6172
      - V
-     - PNP emitter-base voltage at I\ :sub:`E`\ =0.1 µA
+     - PNP emitter-base voltage at :math:`I_E=0.1 µA`
 
    * - VBE3P4\_10
      - 0.7351
      - 0.7308
      - 0.7393
      - V
-     - PNP emitter-base voltage at I\ :sub:`E`\ =1.0 µA
+     - PNP emitter-base voltage at :math:`I_E=1.0 µA`
 
diff --git a/docs/rules/device-details/res_high/index.rst b/docs/rules/device-details/res_high/index.rst
index 72a8ae5..f82bd30 100644
--- a/docs/rules/device-details/res_high/index.rst
+++ b/docs/rules/device-details/res_high/index.rst
@@ -9,7 +9,7 @@
 
 Operating ranges where SPICE models are valid
 
--  \|V\ :sub:`r0` – V\ :sub:`r1`\ \| = 0 to 5.0V
+-  :math:`|V_{r0} – V_{r1}| = 0` to 5.0V
 -  Currents up to 500 µA/µm of width (preferred use ≤ 100 µA/µm)
 
 Details
@@ -27,15 +27,15 @@
 
 The fixed-width resistors are modeled using the equation
 
-*R\ :sub:`0`* = head/tail resistance [Ω] (dominated by the slot licons)
+*\ :math:`R_0`\ * = head/tail resistance [Ω] (dominated by the slot licons)
 
-*R\ :sub:`1`* = body resistance [Ω/µm] = R\ :sub:`SH`/W
+*\ :math:`R_1`\ * = body resistance [Ω/µm] = :math:`R_{SH}`/W
 
 A top-down schematic drawing of the precision resistor is shown below.
 
 |res_high_po|
 
-In addition to the R\ :sub:`0` and R\ :sub:`1` values, several fixed-value resistors are measured at e-test, as shown in the table below:
+In addition to the :math:`R_0` and :math:`R_1` values, several fixed-value resistors are measured at e-test, as shown in the table below:
 
 
 .. include:: res_high-table0.rst
diff --git a/docs/rules/device-details/res_xhigh/index.rst b/docs/rules/device-details/res_xhigh/index.rst
index 2542c1b..ceceda4 100644
--- a/docs/rules/device-details/res_xhigh/index.rst
+++ b/docs/rules/device-details/res_xhigh/index.rst
@@ -9,7 +9,7 @@
 
 Operating ranges where SPICE models are valid
 
--  \|V\ :sub:`r0` – V\ :sub:`r1`\ \| = 0 to 5.0V
+-  :math:`|V_{r0} – V_{r1}| = 0` to 5.0V
 -  Currents up to 500 µA/µm of width (preferred use ≤ 100 µA/µm)
 
 Details
diff --git a/docs/rules/device-details/special_sonosfet/special_sonosfet-table1.rst b/docs/rules/device-details/special_sonosfet/special_sonosfet-table1.rst
index 18506ab..b7c8bb7 100644
--- a/docs/rules/device-details/special_sonosfet/special_sonosfet-table1.rst
+++ b/docs/rules/device-details/special_sonosfet/special_sonosfet-table1.rst
@@ -4,11 +4,11 @@
 
 
    * - Condition
-     - V\ :sub:`G`
-     - V\ :sub:`D`
-     - V\ :sub:`B`
-     - V\ :sub:`S`
-     - V\ :sub:`WL`
+     - :math:`V_G`
+     - :math:`V_D`
+     - :math:`V_B`
+     - :math:`V_S`
+     - :math:`V_{WL}`
      - Pulse
 
    * - Read
@@ -36,7 +36,7 @@
      - 6 ms
 
    * - VT meas
-     - I\ :sub:`D` = 2.05µA
+     - :math:`I_D = 2.05`\ µA
      - +1.1
      - 0
      - 0
diff --git a/docs/rules/device-details/special_sram/index.rst b/docs/rules/device-details/special_sram/index.rst
index fb0693f..b2790cf 100644
--- a/docs/rules/device-details/special_sram/index.rst
+++ b/docs/rules/device-details/special_sram/index.rst
@@ -11,9 +11,9 @@
 
 Operating Voltages where SPICE models are valid
 
--  V\ :sub:`DS` = 0 to 1.8V
--  V\ :sub:`GS` = 0 to 1.8V
--  V\ :sub:`BS` = 0 to -1.8V
+-  :math:`V_{DS} = 0` to 1.8V
+-  :math:`V_{GS} = 0` to 1.8V
+-  :math:`V_{BS} = 0` to -1.8V
 
 Details
 ~~~~~~~
diff --git a/docs/rules/layers/table-f2a-lvs-key.rst b/docs/rules/layers/table-f2a-lvs-key.rst
index 5b1f28a..b923848 100644
--- a/docs/rules/layers/table-f2a-lvs-key.rst
+++ b/docs/rules/layers/table-f2a-lvs-key.rst
@@ -1,4 +1,5 @@
 Explanation of symbols:
+
 * ``-`` = Layer illegal for the device
 * ``+`` = Layer allowed to overlap
 * ``D`` = DRAWN indicates that a layer is drawn by Design.
diff --git a/docs/rules/layers/table-f2b-mask-key.rst b/docs/rules/layers/table-f2b-mask-key.rst
index ddbb215..6ebbc21 100644
--- a/docs/rules/layers/table-f2b-mask-key.rst
+++ b/docs/rules/layers/table-f2b-mask-key.rst
@@ -1,4 +1,5 @@
 Explanation of symbols:
+
 * ``-`` = Layer not created for the device
 * ``+`` = Layer allowed to overlap
 * ``C`` = CREATED
diff --git a/docs/rules/periphery-rules.rst b/docs/rules/periphery-rules.rst
index 4535523..4b70e5d 100644
--- a/docs/rules/periphery-rules.rst
+++ b/docs/rules/periphery-rules.rst
@@ -6,7 +6,6 @@
 .. list-table::
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
    :widths: 10 75
 
    * - Use
@@ -114,211 +113,273 @@
 .. list-table:: Function: Defines General (FIXME)
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(x.1a)`
-     - p1m.md (OPC), DECA and AMKOR layers (pi1.dg, pmm.dg, rdl.dg, pi2.dg, ubm.dg, bump.dg) and mask data for p1m, met1, via, met2 must be on a grid of [mm]
+     - p1m.md (OPC), DECA and AMKOR layers (pi1.dg, pmm.dg, rdl.dg, pi2.dg, ubm.dg, bump.dg) and mask data for p1m, met1, via, met2 must be on a grid of mm
      - 
      - 0.001
+     - mm
    * - :drc_rule:`(x.1b)`
-     - Data for SKY130 layout and mask on all layers except those mentioned in 1a must be on a grid of [mm] (except inside Seal ring)
+     - Data for SKY130 layout and mask on all layers except those mentioned in 1a must be on a grid of mm (except inside Seal ring)
      - 
      - 0.005
+     - mm
    * - :drc_rule:`(x.2)`
      - Angles permitted on: diff
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(x.2)`
-     - Angles permitted on: diff except for:\n- diff inside "advSeal_6um* OR cuPillarAdvSeal_6um*" pcell, \n- diff rings around the die at min total L>1000 um and W=0.3 um
+     - Angles permitted on: diff except for:
+         - diff inside "advSeal_6µm* OR cuPillarAdvSeal_6µm*" pcell, 
+         - diff rings around the die at min total L>1000 µm and W=0.3 µm
      - 
      - n x 90
+     - deg
    * - :drc_rule:`(x.2)`
      - Angles permitted on: tap (except inside :drc_tag:`areaid.en`), poly (except for ESD flare gates or gated_npn), li1(periphery), licon1, capm, mcon, via, via2. Anchors are exempted.
      - 
      - n x 90
+     - deg
    * - :drc_rule:`(x.2)`
      - Angles permitted on: via3 and via4. Anchors are exempted.
      - 
      - n x 90
+     - deg
    * - :drc_rule:`(x.2a)`
      - Analog circuits identified by :drc_tag:`areaid.analog` to use rectangular diff and tap geometries only; that are not to be merged into more complex shapes (T's or L's)
      - 
      - 
+     - 
    * - :drc_rule:`(x.2c)`
      - 45 degree angles allowed on diff, tap inside UHVI
      - 
      - 
+     - 
    * - :drc_rule:`(x.3)`
      - Angles permitted on all other layers and in the seal ring for all the layers
      - 
      - 
+     - 
    * - :drc_rule:`(x.3a)`
      - Angles permitted on all other layers except WLCSP layers (pmm, rdl, pmm2, ubm and bump)
      - 
      - n x 45
+     - deg
    * - :drc_rule:`(x.4)`
      - Electrical DR cover layout guidelines for electromigration
      - :drc_flag:`NC`
      - 
+     - 
    * - :drc_rule:`(x.5)`
      - All "pin"polygons must be within the "drawing" polygons of the layer
      - :drc_flag:`AL`
      - 
+     - 
    * - :drc_rule:`(x.6)`
      - All intra-layer separation checks will include a notch check
      - 
      - 
+     - 
    * - :drc_rule:`(x.7)`
      - Mask layer line and space checks must be done on all layers (checked with s.x rules)
      - :drc_flag:`NC`
      - 
+     - 
    * - :drc_rule:`(x.8)`
      - Use of areaid "core" layer ("coreid") must be approved by technology
      - :drc_flag:`NC`
      - 
+     - 
    * - :drc_rule:`(x.9)`
-     - Shapes on maskAdd or maskDrop layers ("serifs") are allowed in core only. Exempted are: \n- cfom md/mp inside "advSeal_6um* OR cuPillarAdvSeal_6um*" pcell \n- diff rings around the die at min total L>1000 um and W=0.3 um, and PMM/PDMM inside areaid:sl
+     - Shapes on maskAdd or maskDrop layers ("serifs") are allowed in core only. Exempted are: 
+         - cfom md/mp inside "advSeal_6um* OR cuPillarAdvSeal_6um*" pcell 
+         - diff rings around the die at min total L>1000 um and W=0.3 um, and PMM/PDMM inside areaid:sl
+     - 
      - 
      - 
    * - :drc_rule:`(x.9)`
      - Shapes on maskAdd or maskDrop layers ("serifs") are allowed in core only. PMM/PDMM inside areaid:sl are excluded.
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(x.10)`
      - Res purpose layer for (diff, poly) cannot overlap licon1
      - 
      - 
+     - 
    * - :drc_rule:`(x.11)`
      - Metal fuses are drawn in met2
      - :drc_flag:`LVS`
      - N/A
+     - N/A
    * - :drc_rule:`(x.11)`
      - Metal fuses are drawn in met3
      - :drc_flag:`LVS`
      - N/A
+     - N/A
    * - :drc_rule:`(x.11)`
      - Metal fuses are drawn in met4
      - :drc_flag:`LVS`
      - 
+     - 
    * - :drc_rule:`(x.\n12a\n12b\n12c)`
-     - To comply with the minimum spacing requirement for layer X in the frame:\n- Spacing of :drc_tag:`areaid.mt` to any non-ID layer\n- Enclosure of any non-ID layer by :drc_tag:`areaid.mt`\n- Rules exempted for cells with name "*_buildspace"
+     - To comply with the minimum spacing requirement for layer X in the frame:
+         - Spacing of :drc_tag:`areaid.mt` to any non-ID layer
+         - Enclosure of any non-ID layer by :drc_tag:`areaid.mt`
+         - Rules exempted for cells with name "*_buildspace"
      - :drc_flag:`F`
      - 
+     - 
    * - :drc_rule:`(x.12d)`
-     - - Spacing of :drc_tag:`areaid.mt` to huge_metX (Exempt met3.dg)
+     - Spacing of :drc_tag:`areaid.mt` to huge_metX (Exempt met3.dg)
      - :drc_flag:`F`
      - N/A
+     - N/A
    * - :drc_rule:`(x.12d)`
-     - - Spacing of :drc_tag:`areaid.mt` to huge_metX (Exempt met5.dg)
+     - Spacing of :drc_tag:`areaid.mt` to huge_metX (Exempt met5.dg)
      - :drc_flag:`F`
      - 
+     - 
    * - :drc_rule:`(x.12e)`
-     - - Enclosure of huge_metX by :drc_tag:`areaid.mt` (Exempt met3.dg)
+     - Enclosure of huge_metX by :drc_tag:`areaid.mt` (Exempt met3.dg)
      - :drc_flag:`F`
      - N/A
+     - N/A
    * - :drc_rule:`(x.12e)`
-     - - Enclosure of huge_metX by :drc_tag:`areaid.mt` (Exempt met5.dg)
+     - Enclosure of huge_metX by :drc_tag:`areaid.mt` (Exempt met5.dg)
      - :drc_flag:`F`
      - 
+     - 
    * - :drc_rule:`(x.13)`
      - Spacing between features located across areaid:ce is checked by …
      - 
      - 
+     - 
    * - :drc_rule:`(x.14)`
      - Width of features straddling areaid:ce is checked by …
      - 
      - 
+     - 
    * - :drc_rule:`(x.15a)`
      - Drawn compatible, mask, and waffle-drop layers are allowed only inside areaid:mt (i.e., etest modules), or inside areaid:sl (i.e., between the outer and inner areaid:sl edges, but not in the die) or inside areaid:ft (i.e., frame, blankings). Exception: FOM/P1M/Metal waffle drop are allowed inside the die
      - :drc_flag:`P`
      - 
+     - 
    * - :drc_rule:`(x.15b)`
      - Rule X.15a exempted for cpmm.dg inside cellnames "PadPLfp", "padPLhp", "padPLstg" and "padPLwlbi" (for the SKY130di-5r-gsmc flow)
      - :drc_flag:`EXEMPT`
      - 
+     - 
    * - :drc_rule:`(x.16)`
      - Die must not overlap :drc_tag:`areaid.mt` (rule waived for test chips and exempted for cellnames "*tech_CD_*", "*_techCD_*", "lazX_*" or "lazY_*" )
      - 
      - 
+     - 
    * - :drc_rule:`(x.17)`
      - All labels must be within the "drawing" polygons of the layer; This check is enabled by using switch "floating_labels"; Identifies floating labels which appear as warnings in LVS. Using this check would enable cleaner LVS run; Not a gate for tapeout
      - 
      - 
+     - 
    * - :drc_rule:`(x.18)`
-     - Use redundant mcon, via, via2, via3 and via4 (Locations where additional vias/contacts can be added to existing single vias/contacts will be identified by this rule).\nSingle via under :drc_tag:`areaid.core` and :drc_tag:`areaid.standarc` are excluded from the single via check
+     - | Use redundant mcon, via, via2, via3 and via4 (Locations where additional vias/contacts can be added to existing single vias/contacts will be identified by this rule).
+       | Single via under :drc_tag:`areaid.core` and :drc_tag:`areaid.standarc` are excluded from the single via check
      - :drc_flag:`RR`
      - 
+     - 
    * - :drc_rule:`(x.19)`
      - Lower left corner of the seal ring should be at origin i.e (0,0)
      - 
      - 
+     - 
    * - :drc_rule:`(x.20)`
      - Min spacing between pins on the same layer (center to center); Check enabled by switch "IP_block"
      - 
      - 
+     - 
    * - :drc_rule:`(x.21)`
      - prunde.dg is allowed only inside :drc_tag:`areaid.mt` or :drc_tag:`areaid.sc`
      - 
      - 
+     - 
    * - :drc_rule:`(x.22)`
-     - No floating interconnects (poly, li1, met1-met5) or capm allowed; Rule flags interconnects with no path to poly, difftap or metal pins. Exempt floating layers can be excluded using poly_float, li1_float, m1_float, m2_float, m3_float, m4_float and m5_float text labels. Also flags an error if these text labels are placed on connected layers (not floating) and if the labels are not over the appropriate metal layer.  \nIf floating interconnects need to be connected at a higher level (Parent IP or Full chip), such floating interconnects can be exempted using poly_tie, li1_tie, m1_tie, m2_tie, m3_tie, m4_tie and m5_tie text labels.\nIt is the responsibility of the IP owner and chip/product owner to communicate and agree to the node each of these texted lines is connected to, if there is any risk to how a line is tied, and to what node.\nOnly metals outside :drc_tag:`areaid.stdcell` are checked.\n
-        The following are exempt from x.22 violations: _techCD_ , inductor.dg, modulecut, capacitors and s8blerf
-        The 'notPublicCell' switch will deactivate this rule
+     - | No floating interconnects (poly, li1, met1-met5) or capm allowed; Rule flags interconnects with no path to poly, difftap or metal pins. Exempt floating layers can be excluded using poly_float, li1_float, m1_float, m2_float, m3_float, m4_float and m5_float text labels. Also flags an error if these text labels are placed on connected layers (not floating) and if the labels are not over the appropriate metal layer.  
+       | If floating interconnects need to be connected at a higher level (Parent IP or Full chip), such floating interconnects can be exempted using poly_tie, li1_tie, m1_tie, m2_tie, m3_tie, m4_tie and m5_tie text labels.
+       | It is the responsibility of the IP owner and chip/product owner to communicate and agree to the node each of these texted lines is connected to, if there is any risk to how a line is tied, and to what node.
+       | Only metals outside :drc_tag:`areaid.stdcell` are checked.
+       | 
+       The following are exempt from x.22 violations: _techCD_ , inductor.dg, modulecut, capacitors and s8blerf
+       The 'notPublicCell' switch will deactivate this rule
      - :drc_flag:`RC`
      - 
+     - 
    * - :drc_rule:`(x.23a)`
      - :drc_tag:`areaid.sl` must not overlap diff
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(x.23b)`
      - diff cannot straddle :drc_tag:`areaid.sl`
      - 
      - 
+     - 
    * - :drc_rule:`(x.23c)`
      - :drc_tag:`areaid.sl` must not overlap tap, poly, li1 and metX
      - 
      - 
+     - 
    * - :drc_rule:`(x.23d)`
      - :drc_tag:`areaid.sl` must not overlap tap, poly
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(x.23e)`
      - areaid:sl must not overlap li1 and metX for pcell "advSeal_6um"
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(x.23f)`
      - areaid:SubstrateCut (:drc_tag:`areaid.st`, local_sub) must not straddle p+ tap
      - :drc_flag:`RR`
      - 
+     - 
    * - :drc_rule:`(x.24)`
      - condiode label must be in iso_pwell
      - 
      - 
+     - 
    * - :drc_rule:`(x.25)`
      - pnp.dg must be only within cell name "s8rf_pnp", "s8rf_pnp5x" or "s8tesd_iref_pnp", "stk14ecx_*"
      - 
      - 
+     - 
    * - :drc_rule:`(x.26)`
      - "advSeal_6um" pcell must overlap diff
      - 
      - 
+     - 
    * - :drc_rule:`(x.27)`
-     - If the sealring is present, then partnum is required.  To exempt the requirement, place text.dg saying "partnum_not_necessary".\n"partnum*block" pcell should be used instead of "partnum*" pcells
+     - | If the sealring is present, then partnum is required.  To exempt the requirement, place text.dg saying "partnum_not_necessary".
+       | "partnum*block" pcell should be used instead of "partnum*" pcells
      - :drc_flag:`RR`
      - N/A
+     - N/A
    * - :drc_rule:`(x.28)`
      - Min width of :drc_tag:`areaid.sl`
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(x.29)`
      - nfet must be enclosed by dnwell. Rule is checked when switch nfet_in_dnwell is turned on.
      - 
      - 
+     - 
 
 
 .. figure:: periphery/p018-x_dotdash.svg
@@ -333,53 +394,63 @@
 .. list-table:: Function: Define deep nwell for isolating pwell and noise immunity
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(dnwell.2)`
      - Min width of deep nwell
      - 
      - 3.000
+     - µm
    * - :drc_rule:`(dnwell.3)`
      - Min spacing between deep nwells. Rule exempt inside UHVI.
      - 
      - 6.300
+     - µm
    * - :drc_rule:`(dnwell.3a)`
      - Min spacing between deep nwells on same net inside UHVI.
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(dnwell.3b)`
      - Min spacing between deep-nwells inside UHVI and deep-nwell outside UHVI
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(dnwell.3c)`
      - Min spacing between deep-nwells inside UHVI and nwell outsideUHVI
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(dnwell.3d)`
      - Min spacing between deep-nwells inside UHVI on different nets
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(dnwell.4)`
      - Dnwell can not overlap pnp:dg
      - 
      - 
+     - 
    * - :drc_rule:`(dnwell.5)`
      - P+_diff can not straddle Dnwell
      - 
      - 
+     - 
    * - :drc_rule:`(dnwell.6)`
      - RF NMOS must be enclosed by deep nwell (RF FETs are listed in $DESIGN/config/tech/model_set/calibre/fixed_layout_model_map of corresponding techs)
      - 
      - 
+     - 
    * - :drc_rule:`(dnwell.7)`
      - Dnwell can not straddle areaid:substratecut
      - 
      - 
+     - 
 
 
 .. figure:: periphery/p020-dnwell_dotdash.svg
@@ -394,52 +465,61 @@
 .. list-table:: Function: Define nwell implant regions
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(nwell.1)`
      - Width of nwell
      - 
      - 0.840
+     - µm
    * - :drc_rule:`(nwell.2a)`
      - Spacing between two n-wells
      - 
      - 1.270
+     - µm
    * - :drc_rule:`(nwell.2b)`
      - Manual merge wells if less than minimum
      - 
      - 
+     - 
    * - :drc_rule:`(nwell.4)`
      - All n-wells will contain metal-contacted tap  (rule checks only for licon on tap) . Rule exempted from high voltage cells inside UHVI
      - 
      - 
+     - 
    * - :drc_rule:`(nwell.5)`
      - Deep nwell must be enclosed by nwell by atleast... Exempted inside UHVI or :drc_tag:`areaid.lw`
-        Nwells can merge over deep nwell if spacing too small (as in rule nwell.2)
+       Nwells can merge over deep nwell if spacing too small (as in rule nwell.2)
      - :drc_flag:`TC`
      - 0.400
+     - µm
    * - :drc_rule:`(nwell.5a)`
      - min enclosure of nwell by dnwell inside UHVI
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(nwell.5b)`
      - nwell inside UHVI must not be on the same net as nwell outside UHVI
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(nwell.6)`
      - Min enclosure of nwell hole by deep nwell outside UHVI
      - :drc_flag:`TC`
      - 1.030
+     - µm
    * - :drc_rule:`(nwell.7)`
      - Min spacing between nwell and deep nwell on separate nets
-        Spacing between nwell and deep nwell on the same net is set by the sum of the rules nwell.2 and nwell.5. By default, DRC run on a cell checks for the separate-net spacing, when nwell and deep nwell nets are separate within the cell hierarchy and are joined in the upper hierarchy. To allow net names to be joined and make the same-net rule applicable in this case, the "joinNets" switch should be turned on.
-        waffle_chip
+       Spacing between nwell and deep nwell on the same net is set by the sum of the rules nwell.2 and nwell.5. By default, DRC run on a cell checks for the separate-net spacing, when nwell and deep nwell nets are separate within the cell hierarchy and are joined in the upper hierarchy. To allow net names to be joined and make the same-net rule applicable in this case, the "joinNets" switch should be turned on.
+       waffle_chip
      - :drc_flag:`TC`
      - 4.500
+     - µm
 
 
 .. figure:: periphery/p021-nwell_dotdash.svg
@@ -454,33 +534,38 @@
 .. list-table:: Function: Define p-well block
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(pwbm.1)`
      - Min width of pwbm.dg
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(pwbm.2)`
      - Min spacing between two pwbm.dg inside UHVI
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(pwbm.3)`
      - Min enclosure of dnwell:dg by pwbm.dg inside UHVI (exempt pwbm hole inside dnwell)
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(pwbm.4)`
      - dnwell inside UHVI must be enclosed by pwbm (exempt pwbm hole inside dnwell)
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(pwbm.5)`
      - Min Space between two pwbm holes inside UHVI
      - 
      - N/A
+     - N/A
 
 
 .. figure:: periphery/p022-pwbm_dotdash.svg
@@ -495,37 +580,43 @@
 .. list-table:: Function: Defines Pwdem (FIXME)
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(pwdem.1)`
      - Min width of pwdem.dg
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(pwdem.2)`
      - Min spacing between two pwdem.dg inside UHVI on same net
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(pwdem.3)`
      - Min enclosure of pwdem:dg by pwbm.dg inside UHVI
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(pwdem.4)`
      - pwdem.dg must be enclosed by UHVI
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(pwdem.5)`
      - pwdem.dg inside UHVI must be enclosed by deep nwell
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(pwdem.6)`
      - Min enclosure of pwdem:dg by deep nwell inside UHVI
      - 
      - N/A
+     - N/A
 
 
 .. figure:: periphery/p022-pwdem_dotdash.svg
@@ -540,37 +631,43 @@
 .. list-table:: Function: Define Vt adjust implant region for high Vt LV PMOS; 
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(hvtp.1)`
      - Min width of hvtp
      - 
      - 0.380
+     - µm
    * - :drc_rule:`(hvtp.2)`
      - Min spacing between hvtp to hvtp
      - 
      - 0.380
+     - µm
    * - :drc_rule:`(hvtp.3)`
      - Min enclosure of pfet by hvtp
      - :drc_flag:`P`
      - 0.180
+     - µm
    * - :drc_rule:`(hvtp.4)`
      - Min spacing between pfet and hvtp
      - :drc_flag:`P`
      - 0.180
+     - µm
    * - :drc_rule:`(hvtp.5)`
-     - Min area of hvtp (um^2)
+     - Min area of hvtp
      - 
      - 0.265
+     - µm²
    * - :drc_rule:`(hvtp.6)`
-     - Min area of hvtp Holes (um^2)
+     - Min area of hvtp Holes
      - 
      - 0.265
+     - µm²
 
 
 .. figure:: periphery/p023-hvtp_dotdash.svg
@@ -585,25 +682,28 @@
 .. list-table:: Function: Define low VT adjust implant region for pmedlvtrf; 
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(hvtr.1)`
      - Min width of hvtr
      - 
      - 0.380
+     - µm
    * - :drc_rule:`(hvtr.2)`
      - Min spacing between hvtp to hvtr
      - 
      - 0.380
+     - µm
    * - :drc_rule:`(hvtr.3)`
      - Min enclosure of pfet by hvtr
      - :drc_flag:`P`
      - 0.180
+     - µm
 
 
 
@@ -613,53 +713,63 @@
 .. list-table:: Function: Define regions to block Vt adjust implant for low Vt LV PMOS/NMOS, SONOS FETs and Native NMOS
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(lvtn.1a)`
      - Min width of lvtn
      - 
      - 0.380
+     - µm
    * - :drc_rule:`(lvtn.2)`
      - Min space lvtn to lvtn
      - 
      - 0.380
+     - µm
    * - :drc_rule:`(lvtn.3a)`
      - Min spacing of lvtn to gate. Rule exempted inside UHVI.
      - :drc_flag:`P`
      - 0.180
+     - µm
    * - :drc_rule:`(lvtn.3b)`
      - Min spacing of lvtn to pfet along the S/D direction
      - :drc_flag:`P`
      - 0.235
+     - µm
    * - :drc_rule:`(lvtn.4b)`
      - Min enclosure of gate by lvtn. Rule exempted inside UHVI.
      - :drc_flag:`P`
      - 0.180
+     - µm
    * - :drc_rule:`(lvtn.9)`
      - Min spacing, no overlap, between lvtn and hvtp
      - 
      - 0.380
+     - µm
    * - :drc_rule:`(lvtn.10)`
      - Min enclosure of lvtn by (nwell not overlapping Var_channel) (exclude coincident edges)
      - 
      - 0.380
+     - µm
    * - :drc_rule:`(lvtn.12)`
      - Min spacing between lvtn and (nwell inside :drc_tag:`areaid.ce`)
      - 
      - 0.380
+     - µm
    * - :drc_rule:`(lvtn.13)`
-     - Min area of lvtn (um^2)
+     - Min area of lvtn
      - 
      - 0.265
+     - µm²
    * - :drc_rule:`(lvtn.14)`
-     - Min area of lvtn Holes (um^2)
+     - Min area of lvtn Holes
      - 
      - 0.265
+     - µm²
 
 
 .. figure:: periphery/p024-lvtn_dotdash.svg
@@ -674,57 +784,68 @@
 .. list-table:: Function: Define Vt adjust implant region for LV NMOS in the core of NVSRAM
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(ncm.X.2)`
      - Ncm overlapping areaid:ce is checked for core rules only
      - 
      - 
+     - 
    * - :drc_rule:`(ncm.X.3)`
      - Ncm overlapping core cannot overlap N+diff in periphery
      - :drc_flag:`TC`
      - 
+     - 
    * - :drc_rule:`(ncm.1)`
      - Width of ncm
      - 
      - 0.380
+     - µm
    * - :drc_rule:`(ncm.2a)`
      - Spacing of ncm to ncm
      - 
      - 0.380
+     - µm
    * - :drc_rule:`(ncm.2b)`
      - Manual merge ncm if space is below minimum
      - 
      - 
+     - 
    * - :drc_rule:`(ncm.3)`
      - Min enclosure of P+diff by Ncm
      - :drc_flag:`P`
      - 0.180
+     - µm
    * - :drc_rule:`(ncm.4)`
      - Min enclosure of P+diff within (areaid:ed AndNot areaid:de) by Ncm
      - :drc_flag:`P`
      - 0.180
+     - µm
    * - :drc_rule:`(ncm.5)`
      - Min space, no overlap, between ncm and (LVTN_gate) OR (diff containing lvtn)
      - :drc_flag:`P`
      - 0.230
+     - µm
    * - :drc_rule:`(ncm.6)`
      - Min space, no overlap, between ncm and nfet
      - :drc_flag:`P`
      - 0.200
+     - µm
    * - :drc_rule:`(ncm.7)`
-     - Min area of ncm (um^2)
+     - Min area of ncm
      - 
      - 0.265
+     - µm²
    * - :drc_rule:`(ncm.8)`
-     - Min area of ncm Holes (um^2)
+     - Min area of ncm Holes
      - 
      - 0.265
+     - µm²
 
 
 .. figure:: periphery/p025-ncm_dotdash.svg
@@ -739,73 +860,88 @@
 .. list-table:: Function: Defines active regions and contacts to substrate
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(difftap.1)`
      - Width of diff or tap
      - :drc_flag:`P`
      - 0.150
+     - µm
    * - :drc_rule:`(difftap.2)`
      - Minimum channel width (Diff And Poly) except for FETs inside :drc_tag:`areaid.sc`: Rule exempted in the SP8* flows only, for the cells listed in rule difftap.2a
      - :drc_flag:`P`
      - 0.420
+     - µm
    * - :drc_rule:`(difftap.2a)`
      - Minimum channel width (Diff And Poly) for cell names "s8cell_ee_plus_sseln_a", "s8cell_ee_plus_sseln_b", "s8cell_ee_plus_sselp_a", "s8cell_ee_plus_sselp_b" , "s8fpls_pl8", "s8fpls_rdrv4" , "s8fpls_rdrv4f" and "s8fpls_rdrv8"
      - :drc_flag:`P`
      - NA
+     - µm
    * - :drc_rule:`(difftap.2b)`
      - Minimum channel width (Diff And Poly) for FETs inside :drc_tag:`areaid.sc`
      - :drc_flag:`P`
      - 0.360
+     - µm
    * - :drc_rule:`(difftap.3)`
      - Spacing of diff to diff, tap to tap, or non-abutting diff to tap
      - 
      - 0.270
+     - µm
    * - :drc_rule:`(difftap.4)`
      - Min tap bound by one diffusion
      - 
      - 0.290
+     - 
    * - :drc_rule:`(difftap.5)`
      - Min tap bound by two diffusions
      - :drc_flag:`P`
      - 0.400
+     - 
    * - :drc_rule:`(difftap.6)`
      - Diff and tap are not allowed to extend beyond their abutting edge
      - 
      - 
+     - 
    * - :drc_rule:`(difftap.7)`
      - Spacing of diff/tap abutting edge to a non-conciding diff or tap edge
      - :drc_flag:`NE`
      - 0.130
+     - µm
    * - :drc_rule:`(difftap.8)`
      - Enclosure of (p+) diffusion by N-well. Rule exempted inside UHVI.
      - :drc_flag:`DE` :drc_flag:`NE` :drc_flag:`P`
      - 0.180
+     - µm
    * - :drc_rule:`(difftap.9)`
      - Spacing of (n+) diffusion to N-well outside UHVI
      - :drc_flag:`DE` :drc_flag:`NE` :drc_flag:`P`
      - 0.340
+     - µm
    * - :drc_rule:`(difftap.10)`
      - Enclosure of (n+)  tap by N-well. Rule exempted inside UHVI.
      - :drc_flag:`NE` :drc_flag:`P`
      - 0.180
+     - µm
    * - :drc_rule:`(difftap.11)`
      - Spacing of (p+) tap to  N-well. Rule exempted inside UHVI.
      - 
      - 0.130
+     - µm
    * - :drc_rule:`(difftap.12)`
      - ESD_nwell_tap is considered shorted to the abutting diff
      - :drc_flag:`NC`
      - 
+     - 
    * - :drc_rule:`(difftap.13)`
      - Diffusion or the RF FETS in Table H5 is defined by Ldiff and Wdiff.
      - 
      - 
+     - 
 
 
 .. figure:: periphery/p026-difftap_dotdash.svg
@@ -820,45 +956,53 @@
 .. list-table:: Function: Defines SONOS FETs 
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(tunm.1)`
      - Min width of tunm
      - 
      - 0.410
+     - µm
    * - :drc_rule:`(tunm.2)`
      - Min spacing of tunm to tunm
      - 
      - 0.500
+     - µm
    * - :drc_rule:`(tunm.3)`
      - Extension of tunm beyond (poly and diff)
      - 
      - 0.095
+     - 
    * - :drc_rule:`(tunm.4)`
      - Min spacing of tunm to (poly and diff) outside tunm
      - 
      - 0.095
+     - µm
    * - :drc_rule:`(tunm.5)`
      - (poly and diff) may not straddle tunm
      - 
      - 
+     - 
    * - :drc_rule:`(tunm.6a)`
      - Tunm outside deep n-well is not allowed
      - :drc_flag:`TC`
      - 
+     - 
    * - :drc_rule:`(tunm.7)`
      - Min tunm area
      - 
      - 0.672
+     - µm²
    * - :drc_rule:`(tunm.8)`
      - tunm must be enclosed by :drc_tag:`areaid.ce`
      - 
      - 
+     - 
 
 
 .. figure:: periphery/p027-tunm_dotdash.svg
@@ -873,81 +1017,98 @@
 .. list-table:: Function: Defines FET gates, interconnects and resistors
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(poly.X.1)`
      - All FETs would be checked for W/Ls as documented in spec 001-02735  (Exempt FETs that are pruned; exempt for W/L's inside :drc_tag:`areaid.sc` and inside cell name scs8*decap* and listed in the MRGA as a decap only W/L)
      - 
      - 
+     - 
    * - :drc_rule:`(poly.X.1a)`
      - Min & max dummy_poly L is equal to min L allowed for corresponding device type (exempt rule for dummy_poly in cells listed on Table H3)
      - 
      - 
+     - 
    * - :drc_rule:`(poly.1a)`
      - Width of poly
      - 
      - 0.150
+     - µm
    * - :drc_rule:`(poly.1b)`
      - Min channel length (poly width) for pfet overlapping lvtn (exempt rule for dummy_poly in cells listed on Table H3)
      - 
      - 0.350
+     - µm
    * - :drc_rule:`(poly.2)`
      - Spacing of poly to poly except for poly.c2 and poly.c3; Exempt cell: sr_bltd_eq where it is same as poly.c2
      - 
      - 0.210
+     - µm
    * - :drc_rule:`(poly.3)`
      - Min poly resistor width
      - 
      - 0.330
+     - µm
    * - :drc_rule:`(poly.4)`
      - Spacing of poly on field to diff (parallel edges only)
      - :drc_flag:`P`
      - 0.075
+     - µm
    * - :drc_rule:`(poly.5)`
      - Spacing of poly on field to tap
      - :drc_flag:`P`
      - 0.055
+     - µm
    * - :drc_rule:`(poly.6)`
      - Spacing of poly on diff to abutting tap (min source)
      - :drc_flag:`P`
      - 0.300
+     - µm
    * - :drc_rule:`(poly.7)`
      - Extension of diff beyond poly (min drain)
      - :drc_flag:`P`
      - 0.250
+     - 
    * - :drc_rule:`(poly.8)`
      - Extension of poly beyond diffusion (endcap)
      - :drc_flag:`P`
      - 0.130
+     - 
    * - :drc_rule:`(poly.9)`
      - Poly resistor spacing to poly or spacing (no overlap) to diff/tap
      - 
      - 0.480
+     - µm
    * - :drc_rule:`(poly.10)`
      - Poly can't overlap inner corners of diff
      - 
      - 
+     - 
    * - :drc_rule:`(poly.11)`
      - No 90 deg turns of poly on diff
      - 
      - 
+     - 
    * - :drc_rule:`(poly.12)`
      - (Poly NOT (nwell NOT hvi)) may not overlap tap; Rule exempted for cell name "s8fgvr_n_fg2" and gated_npn and inside UHVI.
      - :drc_flag:`P`
      - 
+     - 
    * - :drc_rule:`(poly.15)`
      - Poly must not overlap diff:rs
      - 
      - 
+     - 
    * - :drc_rule:`(poly.16)`
      - Inside RF FETs defined in Table H5, poly cannot overlap poly across multiple adjacent instances
      - 
      - 
+     - 
 
 
 .. figure:: periphery/p028-poly_dotdash.svg
@@ -962,97 +1123,122 @@
 .. list-table:: Function: Defines p+ poly resistors
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(rpm.1a)`
      - Min width of rpm
      - 
      - 1.270
+     - µm
    * - :drc_rule:`(rpm.1b)`
      - Min/Max prec_resistor width xhrpoly_0p35
      - 
      - 0.350
+     - µm
    * - :drc_rule:`(rpm.1c)`
      - Min/Max prec_resistor width xhrpoly_0p69
      - 
      - 0.690
+     - µm
    * - :drc_rule:`(rpm.1d)`
      - Min/Max prec_resistor width xhrpoly_1p41
      - 
      - 1.410
+     - µm
    * - :drc_rule:`(rpm.1e)`
      - Min/Max prec_resistor width xhrpoly_2p85
      - 
      - 2.850
+     - µm
    * - :drc_rule:`(rpm.1f)`
      - Min/Max prec_resistor width xhrpoly_5p73
      - 
      - 5.730
+     - µm
    * - :drc_rule:`(rpm.1g)`
      - Only 1 licon is allowed in xhrpoly_0p35 prec_resistor_terminal
      - 
      - 
+     - 
    * - :drc_rule:`(rpm.1h)`
      - Only 1 licon is allowed in xhrpoly_0p69 prec_resistor_terminal
      - 
      - 
+     - 
    * - :drc_rule:`(rpm.1i)`
      - Only 2 licons are allowed in xhrpoly_1p41 prec_resistor_terminal
      - 
      - 
+     - 
    * - :drc_rule:`(rpm.1j)`
      - Only 4 licons are allowed in xhrpoly_2p85 prec_resistor_terminal
      - 
      - 
+     - 
    * - :drc_rule:`(rpm.1k)`
      - Only 8 licons are allowed in xhrpoly_5p73 prec_resistor_terminal
      - 
      - 
+     - 
    * - :drc_rule:`(rpm.2)`
      - Min spacing of rpm to rpm
      - 
      - 0.840
+     - µm
    * - :drc_rule:`(rpm.3)`
      - rpm must enclose prec_resistor by atleast
      - 
      - 0.200
+     - 
    * - :drc_rule:`(rpm.4)`
      - prec_resistor must be enclosed by psdm by atleast
      - 
      - 0.110
+     - µm
    * - :drc_rule:`(rpm.5)`
      - prec_resistor must be enclosed by npc by atleast
      - 
      - 0.095
+     - µm
    * - :drc_rule:`(rpm.6)`
      - Min spacing, no overlap, of rpm and nsdm
      - 
      - 0.200
+     - µm
    * - :drc_rule:`(rpm.7)`
      - Min spacing between rpm and poly
      - 
      - 0.200
+     - µm
    * - :drc_rule:`(rpm.8)`
      - poly must not straddle rpm
      - 
      - 
+     - 
    * - :drc_rule:`(rpm.9)`
      - Min space, no overlap, between prec_resistor and hvntm
      - 
      - 0.185
+     - µm
    * - :drc_rule:`(rpm.10)`
      - Min spacing of rpm to pwbm
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(rpm.11)`
-     - rpm should not overlap or straddle pwbm except cells\ns8usbpdv2_csa_top\ns8usbpdv2_20vconn_sw_300ma_ovp_ngate_unit\ns8usbpdv2_20vconn_sw_300ma_ovp\ns8usbpdv2_20sbu_sw_300ma_ovp
+     - | rpm should not overlap or straddle pwbm except cells
+       | s8usbpdv2_csa_top
+       | s8usbpdv2_20vconn_sw_300ma_ovp_ngate_unit
+       | s8usbpdv2_20vconn_sw_300ma_ovp
+       | s8usbpdv2_20sbu_sw_300ma_ovp
      - 
      - N/A
+     - N/A
 
 
 .. figure:: periphery/p029-rpm_dotdash.svg
@@ -1067,45 +1253,53 @@
 .. list-table:: Function: Defines varactors
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(varac.1)`
      - Min channel length (poly width) of Var_channel
      - 
      - 0.180
+     - µm
    * - :drc_rule:`(varac.2)`
      - Min channel width (tap width) of Var_channel
      - 
      - 1.000
+     - µm
    * - :drc_rule:`(varac.3)`
      - Min spacing between hvtp to Var_channel
      - 
      - 0.180
+     - µm
    * - :drc_rule:`(varac.4)`
      - Min spacing of licon on tap to Var_channel
      - 
      - 0.250
+     - µm
    * - :drc_rule:`(varac.5)`
      - Min enclosure of poly overlapping Var_channel by nwell
      - 
      - 0.150
+     - µm
    * - :drc_rule:`(varac.6)`
      - Min spacing between VaracTap and difftap
      - 
      - 0.270
+     - µm
    * - :drc_rule:`(varac.7)`
      - Nwell overlapping Var_channel must not overlap P+ diff
      - 
      - 
+     - 
    * - :drc_rule:`(varac.8)`
      - Min enclosure of Var_channel by hvtp
      - 
      - 0.255
+     - µm
 
 
 .. figure:: periphery/p030-varac_dotdash.svg
@@ -1120,57 +1314,68 @@
 .. list-table:: Function: Photo diode for sensing light
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(photo.1)`
      - Rules dnwell.3 and nwell.5 are exempted for photoDiode
      - 
      - 
+     - 
    * - :drc_rule:`(photo.2)`
      - Min/Max width of photoDiode
      - 
      - 3.000
+     - µm
    * - :drc_rule:`(photo.3)`
      - Min spacing between photoDiode
      - 
      - 5.000
+     - µm
    * - :drc_rule:`(photo.4)`
      - Min spacing between photoDiode and deep nwell
      - 
      - 5.300
+     - µm
    * - :drc_rule:`(photo.5)`
      - photoDiode edges must be coincident with :drc_tag:`areaid.po`
      - 
      - 
+     - 
    * - :drc_rule:`(photo.6)`
      - photoDiode must be enclosed by dnwell ring
      - 
      - 
+     - 
    * - :drc_rule:`(photo.7)`
      - photoDiode must be enclosed by p+ tap ring
      - 
      - 
+     - 
    * - :drc_rule:`(photo.8)`
      - Min/Max width of nwell inside photoDiode
      - 
      - 0.840
+     - µm
    * - :drc_rule:`(photo.9)`
      - Min/Max enclosure of nwell by photoDiode
      - 
      - 1.080
+     - µm
    * - :drc_rule:`(photo.10)`
      - Min/Max width of tap inside photoDiode
      - 
      - 0.410
+     - µm
    * - :drc_rule:`(photo.11)`
      - Min/Max enclosure of tap by nwell inside photoDiode
      - 
      - 0.215
+     - µm
 
 
 .. figure:: periphery/p031-photo_dotdash.svg
@@ -1185,33 +1390,38 @@
 .. list-table:: Function: Defines nitride openings to contact poly and Li1
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(npc.1)`
      - Min width of NPC
      - 
      - 0.270
+     - µm
    * - :drc_rule:`(npc.2)`
      - Min spacing of NPC to NPC
      - 
      - 0.270
+     - µm
    * - :drc_rule:`(npc.3)`
      - Manual merge if less than minimum
      - 
      - 
+     - 
    * - :drc_rule:`(npc.4)`
      - Spacing (no overlap) of NPC to Gate
      - 
      - 0.090
+     - µm
    * - :drc_rule:`(npc.5)`
      - Max enclosure of poly overlapping slotted_licon by npcm (merge between adjacent short edges of the slotted_licons if space < min)
      - 
      - 0.095
+     - µm
 
 
 .. figure:: periphery/p032-npc_dotdash.svg
@@ -1226,61 +1436,77 @@
 .. list-table:: Function: Defines opening for N+/P+ implants
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(n/ psd.1)`
      - Width of nsdm(psdm)
      - :drc_flag:`P`
      - 0.380
+     - µm
    * - :drc_rule:`(n/ psd.2)`
      - Spacing of nsdm(psdm) to nsdm(psdm)
      - :drc_flag:`P`
      - 0.380
+     - µm
    * - :drc_rule:`(n/ psd.3)`
      - Manual merge if less than minimum
      - 
      - 
+     - 
    * - :drc_rule:`(n/ psd.5a)`
      - Enclosure of diff by nsdm(psdm), except for butting edge
      - 
      - 0.125
+     - µm
    * - :drc_rule:`(n/ psd.5b)`
      - Enclosure of tap by nsdm(psdm), except for butting edge
      - :drc_flag:`P`
      - 0.125
+     - µm
    * - :drc_rule:`(n/ psd.6)`
      - Enclosure of diff/tap butting edge by nsdm (psdm)
      - 
      - 0.000
+     - µm
    * - :drc_rule:`(n/ psd.7)`
      - Spacing of NSDM/PSDM to opposite implant diff or tap (for non-abutting diff/tap edges)
      - 
      - 0.130
+     - µm
    * - :drc_rule:`(n/ psd.8)`
      - Nsdm and psdm cannot overlap diff/tap regions of opposite doping
      - :drc_flag:`DE`
      - 
+     - 
    * - :drc_rule:`(n/ psd.9)`
-     - Diff and tap must be enclosed by their corresponding implant layers. Rule exempted for\n- diff inside "advSeal_6um* OR cuPillarAdvSeal_6um*" pcell for SKY130P*/SP8P*/SKY130DI-5R-CSMC flows\n- diff rings around the die at min total L>1000 um and W=0.3 um\n- gated_npn \n- :drc_tag:`areaid.zer`.
+     - Diff and tap must be enclosed by their corresponding implant layers. Rule exempted for
+         - diff inside "advSeal_6um* OR cuPillarAdvSeal_6um*" pcell for SKY130P*/SP8P*/SKY130DI-5R-CSMC flows
+         - diff rings around the die at min total L>1000 um and W=0.3 um
+         - gated_npn 
+         - :drc_tag:`areaid.zer`.
      - :drc_flag:`DE`
      - 
+     - 
    * - :drc_rule:`(n/ psd.10a)`
-     - Min area of Nsdm (um^2)
+     - Min area of Nsdm
      - 
      - 0.265
+     - µm²
    * - :drc_rule:`(n/ psd.10b)`
-     - Min area of Psdm (um^2)
+     - Min area of Psdm
      - 
      - 0.255
+     - µm²
    * - :drc_rule:`(n/ psd.11)`
-     - Min area of n/psdmHoles (um^2)
+     - Min area of n/psdmHoles
      - 
      - 0.265
+     - µm²
 
 
 .. figure:: periphery/p032-n_psd_dotdash.svg
@@ -1295,137 +1521,169 @@
 .. list-table:: Function: Defines contacts between poly/diff/tap and Li1
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(licon.1)`
      - Min and max L and W of licon (exempt licons inside prec_resistor)
      - 
      - 0.170
+     - µm
    * - :drc_rule:`(licon.1b)`
      - Min and max width of licon inside prec_resistor
      - 
      - 0.190
+     - µm
    * - :drc_rule:`(licon.1c)`
      - Min and max length of licon inside prec_resistor
      - 
      - 2.000
+     - µm
    * - :drc_rule:`(licon.2)`
      - Spacing of licon to licon
      - :drc_flag:`P`
      - 0.170
+     - µm
    * - :drc_rule:`(licon.2b)`
      - Min spacing between two slotted_licon (when the both the edges are 0.19um in length)
      - 
      - 0.350
+     - µm
    * - :drc_rule:`(licon.2c)`
      - Min spacing between two slotted_licon (except for rule licon.2b)
      - 
      - 0.510
+     - µm
    * - :drc_rule:`(licon.2d)`
      - Min spacing between a slotted_licon and 0.17um square licon
      - 
      - 0.510
+     - µm
    * - :drc_rule:`(licon.3)`
      - Only min. square licons are allowed except die seal ring where licons are (licon CD)*L
      - 
      - 0.170 *L
+     - 
    * - :drc_rule:`(licon.4)`
      - Licon1 must overlap li1 and (poly or diff or tap)
      - 
      - 
+     - 
    * - :drc_rule:`(licon.5a)`
      - Enclosure of licon by diff
      - :drc_flag:`P`
      - 0.040
+     - µm
    * - :drc_rule:`(licon.5b)`
      - Min space between tap_licon and diff-abutting tap edge
      - :drc_flag:`P`
      - 0.060
+     - µm
    * - :drc_rule:`(licon.5c)`
      - Enclosure of licon by diff on one of two adjacent sides
      - :drc_flag:`P`
      - 0.060
+     - µm
    * - :drc_rule:`(licon.6)`
      - Licon cannot straddle tap
      - :drc_flag:`P`
      - 
+     - 
    * - :drc_rule:`(licon.7)`
      - Enclosure of licon by one of two adjacent edges of isolated tap
      - :drc_flag:`P`
      - 0.120
+     - µm
    * - :drc_rule:`(licon.8)`
      - Enclosure of poly_licon by poly
      - :drc_flag:`P`
      - 0.050
+     - µm
    * - :drc_rule:`(licon.8a)`
      - Enclosure of poly_licon by poly on one of two adjacent sides
      - :drc_flag:`P`
      - 0.080
+     - µm
    * - :drc_rule:`(licon.9)`
      - Spacing, no overlap, between poly_licon and psdm; In SKY130DIA/SKY130TMA/SKY130PIR-10 flows, the rule is checked only between (poly_licon outside rpm) and psdm
      - :drc_flag:`P`
      - 0.110
+     - µm
    * - :drc_rule:`(licon.10)`
      - Spacing of licon on (tap AND (nwell NOT hvi)) to Var_channel
      - :drc_flag:`P`
      - 0.250
+     - µm
    * - :drc_rule:`(licon.11)`
      - Spacing of licon on diff or tap to poly on diff (except for all FETs inside :drc_tag:`areaid.sc` and except s8spf-10r flow for 0.5um phv inside cell names "s8fs_gwdlvx4", "s8fs_gwdlvx8", "s8fs_hvrsw_x4", "s8fs_hvrsw8", "s8fs_hvrsw264", and "s8fs_hvrsw520" and for 0.15um nshort inside cell names "s8fs_rdecdrv", "s8fs_rdec8", "s8fs_rdec32", "s8fs_rdec264", "s8fs_rdec520")
      - :drc_flag:`P`
      - 0.055
+     - µm
    * - :drc_rule:`(licon.11a)`
      - Spacing of licon on diff or tap to poly on diff (for all FETs inside :drc_tag:`areaid.sc` except 0.15um phighvt)
      - :drc_flag:`P`
      - 0.050
+     - µm
    * - :drc_rule:`(licon.11b)`
      - Spacing of licon on diff or tap to poly on diff (for 0.15um phighvt inside :drc_tag:`areaid.sc`)
      - :drc_flag:`P`
      - 0.050
+     - µm
    * - :drc_rule:`(licon.11c)`
      - Spacing of licon on diff or tap to poly on diff (for 0.5um phv inside cell names "s8fs_gwdlvx4", "s8fs_gwdlvx8", "s8fs_hvrsw_x4", "s8fs_hvrsw8", "s8fs_hvrsw264", and "s8fs_hvrsw520")
      - :drc_flag:`P`
      - 0.040
+     - µm
    * - :drc_rule:`(licon.11d)`
      - Spacing of licon on diff or tap to poly on diff (for 0.15um nshort inside cell names "s8fs_rdecdrv", "s8fs_rdec8", "s8fs_rdec32", "s8fs_rdec264", "s8fs_rdec520")
      - :drc_flag:`P`
      - 0.045
+     - µm
    * - :drc_rule:`(licon.12)`
      - Max SD width without licon
      - :drc_flag:`NC`
      - 5.700
+     - µm
    * - :drc_rule:`(licon.13)`
      - Spacing (no overlap) of NPC to licon on diff or tap
      - :drc_flag:`P`
      - 0.090
+     - µm
    * - :drc_rule:`(licon.14)`
      - Spacing of poly_licon to diff or tap
      - :drc_flag:`P`
      - 0.190
+     - µm
    * - :drc_rule:`(licon.15)`
      - poly_licon must be enclosed by npc by…
      - :drc_flag:`P`
      - 0.100
+     - µm
    * - :drc_rule:`(licon.16)`
-     - Every source_diff and every tap must enclose at least one licon1, including the diff/tap straddling areaid:ce. \nRule exempted inside UHVI.
+     - | Every source_diff and every tap must enclose at least one licon1, including the diff/tap straddling areaid:ce. 
+       | Rule exempted inside UHVI.
      - :drc_flag:`P`
      - 
+     - 
    * - :drc_rule:`(licon.17)`
      - Licons may not overlap both poly and (diff or tap)
      - 
      - 
+     - 
    * - :drc_rule:`(licon.18)`
      - Npc must enclose poly_licon
      - 
      - 
+     - 
    * - :drc_rule:`(licon.19)`
      - poly of the HV varactor must not interact with licon
      - :drc_flag:`P`
      - 
+     - 
 
 
 .. figure:: periphery/p034-licon_dotdash.svg
@@ -1440,45 +1698,53 @@
 .. list-table:: Function: Defines local interconnect to diff/tap and poly
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(li.1.-)`
      - Width of LI (except for li.1a)
      - :drc_flag:`P`
      - 0.170
+     - µm
    * - :drc_rule:`(li.1a.-)`
      - Width of LI inside of cells with name s8rf2_xcmvpp_hd5_*
      - :drc_flag:`P`
      - 0.140
+     - µm
    * - :drc_rule:`(li.2.-)`
      - Max ratio of length to width of LI without licon or mcon
      - :drc_flag:`NC`
      - 10.000
+     - µm
    * - :drc_rule:`(li.3.-)`
      - Spacing of LI to LI (except for li.3a)
      - :drc_flag:`P`
      - 0.170
+     - µm
    * - :drc_rule:`(li.3a.-)`
      - Spacing of LI to LI inside cells with names s8rf2_xcmvpp_hd5_*
      - :drc_flag:`P`
      - 0.140
+     - µm
    * - :drc_rule:`(li.5.-)`
      - Enclosure of licon by one of two adjacent LI sides
      - :drc_flag:`P`
      - 0.080
+     - µm
    * - :drc_rule:`(li.6.-)`
      - Min area of LI
      - :drc_flag:`P`
      - 0.0561
+     - µm²
    * - :drc_rule:`(li.7.-)`
      - Min LI resistor width (rule exempted within :drc_tag:`areaid.ed`; Inside :drc_tag:`areaid.ed`, min width of the li resistor is determined by rule li.1)
      - 
      - 0.290
+     - µm
 
 
 .. figure:: periphery/p035-li_dotdash_dotdash.svg
@@ -1493,41 +1759,48 @@
 .. list-table:: Function: Defines contact between Li1 and met1
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(ct.1)`
      - Min and max L and W of mcon
      - :drc_flag:`DNF`
      - 0.170
+     - µm
    * - :drc_rule:`(ct.2)`
      - Spacing of mcon to mcon
      - :drc_flag:`DNF`
      - 0.190
+     - µm
    * - :drc_rule:`(ct.3)`
      - Only min. square mcons are allowed except die seal ring where mcons are…
      - 
      - 0.170*L
+     - 
    * - :drc_rule:`(ct.4)`
      - Mcon must be enclosed by LI by at least …
      - :drc_flag:`P`
      - 0.000
+     - µm
    * - :drc_rule:`(ct.irdrop.1)`
      - For 1 <= n <= 10 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.2
+     - µm
    * - :drc_rule:`(ct.irdrop.2)`
      - For 11 <= n <= 100 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.3
+     - µm
    * - :drc_rule:`(ct.irdrop.3)`
      - For n > 100 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.7
+     - µm
 
 
 .. figure:: periphery/p035-ct_dotdash.svg
@@ -1542,61 +1815,73 @@
 .. list-table:: Function: Defines MIM capacitor
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(capm.1)`
      - Min width of capm
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(capm.2a)`
      - Min spacing of capm to capm
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(capm.2b)`
      - Minimum spacing of capacitor bottom_plate to bottom plate
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(capm.3)`
      - Minimum enclosure of capm (top_plate) by met2
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(capm.4)`
      - Min enclosure of via2 by capm
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(capm.5)`
      - Min spacing between capm and via2
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(capm.6)`
      - Maximum Aspect Ratio (Length/Width)
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(capm.7)`
      - Only rectangular capacitors are allowed
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(capm.8)`
      - Min space, no overlap, between via and capm
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(capm.10)`
      - capm must not straddle nwell, diff, tap, poly, li1 and met1 (Rule exempted for capm overlapping capm_2t.dg)
      - :drc_flag:`TC`
      - N/A
+     - N/A
    * - :drc_rule:`(capm.11)`
      - Min spacing between capm to (met2 not overlapping capm)
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(capm.12)`
      - Max area of capm (um^2)
      - 
      - N/A
+     - N/A
 
 
 .. figure:: periphery/p036-capm_dotdash.svg
@@ -1611,85 +1896,103 @@
 .. list-table:: Function: Defines VPP capacitor
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(vpp.1)`
      - Min width of capacitor:dg
      - 
      - 1.430
+     - µm
    * - :drc_rule:`(vpp.1b)`
      - Max width of capacitor:dg; Rule not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5 and vpp_with_noLi
      - 
      - 11.350
+     - µm
    * - :drc_rule:`(vpp.1c)`
      - Min/Max width of cell name "s8rf_xcmvpp1p8x1p8_m3shield "
      - 
      - 3.880
+     - µm
    * - :drc_rule:`(vpp.3)`
      - capacitor:dg must not overlap (tap or diff or poly); (one exception: Poly is allowed to overlap  vpp_with_Met3Shield and vpp_with_Met5PolyShield); (not applicable for vpp_over_Moscap or "s8rf2_xcmvppx4_2xnhvnative10x4" or vpp_with_LiShield)
      - 
      - 
+     - 
    * - :drc_rule:`(vpp.4)`
      - capacitor:dg must not straddle (nwell or dnwell)
      - 
      - 
+     - 
    * - :drc_rule:`(vpp.5)`
-     - Min spacing between (capacitor:dg edge and (poly or li1 or met1 or met2)) to (poly or li1 or met1 or met2) on separate nets (Exempt area of the error shape less than 2.25 (um^2) and run length less than 2.0um); Rule not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5 and vpp_with_noLi
+     - Min spacing between (capacitor:dg edge and (poly or li1 or met1 or met2)) to (poly or li1 or met1 or met2) on separate nets (Exempt area of the error shape less than 2.25 µm² and run length less than 2.0um); Rule not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5 and vpp_with_noLi
      - 
      - 1.500
+     - µm
    * - :drc_rule:`(vpp.5a)`
      - Max pattern density of met3.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5)
      - 
      - 0.25
+     - \-
    * - :drc_rule:`(vpp.5b)`
      - Max pattern density of met4.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_Met5 and vpp_over_MOSCAP)
      - 
      - 0.3
+     - \-
    * - :drc_rule:`(vpp.5c)`
      - Max pattern density of met5.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_Met5 and vpp_over_MOSCAP and vpp_with_noLi); (one exception: rules does apply to cell "s8rf2_xcmvpp11p5x11p7_m1m4" and "s8rf2_xcmvpp_hd5_atlas*")
      - 
      - 0.4
+     - \-
    * - :drc_rule:`(vpp.8)`
      - Min enclosure of capacitor:dg by nwell
      - 
      - 1.500
+     - µm
    * - :drc_rule:`(vpp.9)`
      - Min spacing of capacitor:dg to nwell (not applicable for vpp_over_MOSCAP)
      - 
      - 1.500
+     - µm
    * - :drc_rule:`(vpp.10)`
      - vpp capacitors must not overlap; Rule checks for capacitor.dg overlapping more than one pwell pin
      - 
      - 
+     - 
    * - :drc_rule:`(vpp.11)`
      - Min pattern density of (poly and diff) over capacitor.dg; (vpp_over_Moscap only)
      - 
      - 0.87
+     - \-
    * - :drc_rule:`(vpp.12a)`
      - Number of met4 shapes inside capacitor.dg of cell "s8rf2_xcmvpp8p6x7p9_m3_lim5shield"  must overlap with size 2.01 x 2.01 (no other met4 shapes allowed)
      - 
      - 9.00
+     - µm
    * - :drc_rule:`(vpp.12b)`
      - Number of met4 shapes inside capacitor.dg of cell "s8rf2_xcmvpp11p5x11p7_m3_lim5shield"  must overlap with size 2.01 x 2.01 (no other met4 shapes allowed)
      - 
      - 16.00
+     - µm
    * - :drc_rule:`(vpp.12c)`
      - Number of met4 shapes inside capacitor.dg of cell "s8rf2_xcmvpp4p4x4p6_m3_lim5shield"  must overlap with size 1.5 x 1.5 (no other met4 shapes allowed)
      - 
      - 4.00
+     - µm
    * - :drc_rule:`(vpp.13)`
      - Min space of met1 to met1inside VPP capacitor
      - :drc_flag:`CU`
      - 0.160
+     - µm
    * - :drc_rule:`(vpp.14)`
      - Min space of met2 to met2 inside VPP capacitor
      - :drc_flag:`CU`
      - 0.160
+     - µm
 
 
 .. figure:: periphery/p037-vpp_dotdash.svg
@@ -1704,89 +2007,115 @@
 .. list-table:: Function: Defines first level of metal interconnects, buses etc;
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(m1.-)`
-     - Algorithm should flag errors, for met1, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm1 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. NOTE: Required for IP, Recommended for Chip-level.
+     - | Algorithm should flag errors, for met1, if ANY of the following is true:
+       | An entire 700x700 window is covered by cmm1 waffleDrop, and metX PD < 70% for same window.
+       | 80-100% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 65% for same window.
+       | 60-80% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 60% for same window.
+       | 50-60% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 50% for same window.
+       | 40-50% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 40% for same window.
+       | 30-40% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 30% for same window.
+       | Exclude cells whose area is below 40Kum2. NOTE: Required for IP, Recommended for Chip-level.
      - :drc_flag:`RC`
      - 
+     - 
    * - :drc_rule:`(m1.1)`
      - Width of metal1
      - 
      - 0.140
+     - µm
    * - :drc_rule:`(m1.2)`
      - Spacing of metal1 to metal1
      - 
      - 0.140
+     - µm
    * - :drc_rule:`(m1.3a)`
-     - Min. spacing of features attached to or extending from huge_met1 for a distance of up to  0.280 um to metal1 (rule not checked over non-huge met1 features)
+     - Min. spacing of features attached to or extending from huge_met1 for a distance of up to  0.280 µm to metal1 (rule not checked over non-huge met1 features)
      - 
      - 0.280
+     - µm
    * - :drc_rule:`(m1.3b)`
      - Min. spacing of huge_met1 to metal1 excluding features checked by m1.3a
      - 
      - 0.280
+     - µm
    * - :drc_rule:`(m1.4)`
      - Mcon must be enclosed by Met1 by at least …(Rule exempted for cell names documented in rule m1.4a)
      - :drc_flag:`P`
      - 0.030
+     - µm
    * - :drc_rule:`(m1.4a)`
      - Mcon must be enclosed by Met1 by at least (for cell names "s8cell_ee_plus_sseln_a", "s8cell_ee_plus_sseln_b", "s8cell_ee_plus_sselp_a", "s8cell_ee_plus_sselp_b", "s8fpls_pl8", and "s8fs_cmux4_fm")
      - :drc_flag:`P`
      - 0.005
+     - µm
    * - :drc_rule:`(m1.5)`
      - Mcon must be enclosed by Met1 on one of two adjacent sides by at least …
      - :drc_flag:`P` :drc_flag:`AL`
      - 0.060
+     - µm
    * - :drc_rule:`(m1.6)`
-     - Min metal 1 area [um2]
+     - Min metal 1 area
      - 
      - 0.083
+     - µm²
    * - :drc_rule:`(m1.7)`
-     - Min area of metal1 holes [um2]
+     - Min area of metal1 holes
      - 
      - 0.140
+     - µm²
    * - :drc_rule:`(m1.pd.1)`
      - Min MM1_oxide_Pattern_density
      - :drc_flag:`RR` :drc_flag:`AL`
      - 0.7
+     - \-
    * - :drc_rule:`(m1.pd.2a)`
      - Rule m1.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …
      - :drc_flag:`A` :drc_flag:`AL`
      - 700
+     - µm
    * - :drc_rule:`(m1.pd.2b)`
      - Rule m1.pd.1 has to be checked by dividing the chip into steps of …
      - :drc_flag:`A` :drc_flag:`AL`
      - 70
+     - 
    * - :drc_rule:`(m1.11)`
      - Max width of metal1after slotting
      - :drc_flag:`CU` :drc_flag:`NC`
      - 4.000
+     - µm
    * - :drc_rule:`(m1.12)`
      - Add slots and remove vias and contacts if met1 wider than…..
      - :drc_flag:`CU`
      - 3.200
+     - 
    * - :drc_rule:`(m1.13)`
      - Max pattern density (PD) of met1
      - :drc_flag:`CU`
      - 0.77
+     - \-
    * - :drc_rule:`(m1.14)`
      - Met1 PD window size
      - :drc_flag:`CU`
      - 50.000
+     - µm
    * - :drc_rule:`(m1.14a)`
      - Met1 PD window step
      - :drc_flag:`CU`
      - 25.000
+     - µm
    * - :drc_rule:`(m1.15)`
      - Mcon must be enclosed by met1 on one of two adjacent sides by at least …
      - :drc_flag:`CU`
      - 0.030
+     - µm
 
 
 .. figure:: periphery/p038-m1_dotdash.svg
@@ -1801,89 +2130,108 @@
 .. list-table:: Function: Defines contact between met1  and met2
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(via.1a)`
      - Min and max L and W of via outside :drc_tag:`areaid.mt`
      - :drc_flag:`AL`
      - 0.150
+     - µm
    * - :drc_rule:`(via.1b)`
      - Three sizes of square Vias allowed inside areaid:mt: 0.150um, 0.230um and 0.280um
      - :drc_flag:`AL`
      - 
+     - 
    * - :drc_rule:`(via.2)`
      - Spacing of via to via
      - :drc_flag:`AL`
      - 0.170
+     - µm
    * - :drc_rule:`(via.3)`
      - Only min. square vias are allowed except die seal ring where vias are (Via CD)*L
      - 
      - 0.2*L
+     - 
    * - :drc_rule:`(via.4a)`
-     - 0.150 um Via must be enclosed by Met1 by at least …
+     - 0.150 µm Via must be enclosed by Met1 by at least …
      - 
      - 0.055
+     - µm
    * - :drc_rule:`(via.4b)`
-     - Inside :drc_tag:`areaid.mt`, 0.230 um Via must be enclosed by met1 by atleast
+     - Inside :drc_tag:`areaid.mt`, 0.230 µm Via must be enclosed by met1 by atleast
      - :drc_flag:`AL`
      - 0.030
+     - µm
    * - :drc_rule:`(via.4c)`
-     - Inside :drc_tag:`areaid.mt`, 0.280 um Via must be enclosed by met1 by atleast
+     - Inside :drc_tag:`areaid.mt`, 0.280 µm Via must be enclosed by met1 by atleast
      - :drc_flag:`AL`
      - 0.000
+     - µm
    * - :drc_rule:`(via.5a)`
-     - 0.150 um Via must be enclosed by Met1 on one of two adjacent sides by at least …
+     - 0.150 µm Via must be enclosed by Met1 on one of two adjacent sides by at least …
      - 
      - 0.085
+     - µm
    * - :drc_rule:`(via.5b)`
-     - Inside :drc_tag:`areaid.mt`, 0.230 um Via must be enclosed by met1 on one of two adjacent sides by at least …
+     - Inside :drc_tag:`areaid.mt`, 0.230 µm Via must be enclosed by met1 on one of two adjacent sides by at least …
      - :drc_flag:`AL`
      - 0.060
+     - µm
    * - :drc_rule:`(via.5c)`
-     - Inside :drc_tag:`areaid.mt`, 0.280 um Via must be enclosed by met1 on one of two adjacent sides by at least …
+     - Inside :drc_tag:`areaid.mt`, 0.280 µm Via must be enclosed by met1 on one of two adjacent sides by at least …
      - :drc_flag:`AL`
      - 0.000
+     - µm
    * - :drc_rule:`(via.11)`
      - Min and max L and W of via outside :drc_tag:`areaid.mt`
      - :drc_flag:`CU`
      - 0.180
+     - µm
    * - :drc_rule:`(via.12)`
      - Min spacing between vias
      - :drc_flag:`CU`
      - 0.130
+     - µm
    * - :drc_rule:`(via.13)`
      - Max of 5 vias within …
      - :drc_flag:`CU`
      - 0.350
+     - µm
    * - :drc_rule:`(via.14)`
-     - 0.180 um Via must be enclosed by parallel edges of Met1 by at least …
+     - 0.180 µm Via must be enclosed by parallel edges of Met1 by at least …
      - :drc_flag:`CU`
      - 0.040
+     - µm
    * - :drc_rule:`(via.irdrop.1)`
      - For 1 <= n <= 2 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.0
+     - µm
    * - :drc_rule:`(via.irdrop.2)`
      - For 3 <= n <= 15 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.6
+     - µm
    * - :drc_rule:`(via.irdrop.3)`
      - For 16 <= n <= 30 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.8
+     - µm
    * - :drc_rule:`(via.irdrop.4)`
      - For n > 30 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.9
+     - µm
    * - :drc_rule:`(via.14a)`
-     - 0.180 um Via must be enclosed by 45 deg edges of Met1 by at least …
+     - 0.180 µm Via must be enclosed by 45 deg edges of Met1 by at least …
      - :drc_flag:`CU`
      - 0.037
+     - deg µm
 
 
 .. figure:: periphery/p039-via_dotdash.svg
@@ -1898,89 +2246,115 @@
 .. list-table:: Function: Defines second level of metal interconnects, buses etc
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(m2.-)`
-     - Algorithm should flag errors, for met2, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm2 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. Required for IP, Recommended for Chip-level.
+     - | Algorithm should flag errors, for met2, if ANY of the following is true:
+       | An entire 700x700 window is covered by cmm2 waffleDrop, and metX PD < 70% for same window.
+       | 80-100% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 65% for same window.
+       | 60-80% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 60% for same window.
+       | 50-60% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 50% for same window.
+       | 40-50% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 40% for same window.
+       | 30-40% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 30% for same window.
+       | Exclude cells whose area is below 40Kum2. Required for IP, Recommended for Chip-level.
      - :drc_flag:`RC`
      - 
+     - 
    * - :drc_rule:`(m2.1)`
      - Width of metal 2
      - 
      - 0.140
+     - µm
    * - :drc_rule:`(m2.2)`
      - Spacing of metal 2 to metal 2
      - 
      - 0.140
+     - µm
    * - :drc_rule:`(m2.3a)`
-     - Min. spacing of features attached to or extending from huge_met2 for a distance of up to  0.280 um to metal2 (rule not checked over non-huge met2 features)
+     - Min. spacing of features attached to or extending from huge_met2 for a distance of up to  0.280 µm to metal2 (rule not checked over non-huge met2 features)
      - 
      - 0.280
+     - µm
    * - :drc_rule:`(m2.3b)`
      - Min. spacing of huge_met2 to metal2 excluding features checked by m2.3a
      - 
      - 0.280
+     - µm
    * - :drc_rule:`(m2.3c)`
      - Min spacing between floating_met2 with AR_met2_A >= 0.05 and AR_met2_B =< 0.032, outside areaid:sc must be greater than
      - :drc_flag:`RR`
      - 0.145
+     - µm
    * - :drc_rule:`(m2.4)`
      - Via must be enclosed by Met2 by at least …
      - :drc_flag:`P` :drc_flag:`AL`
      - 0.055
+     - µm
    * - :drc_rule:`(m2.5)`
      - Via must be enclosed by Met2 on one of two adjacent sides by at least …
      - :drc_flag:`AL`
      - 0.085
+     - µm
    * - :drc_rule:`(m2.6)`
-     - Min metal2 area [um2]
+     - Min metal2 area
      - 
      - 0.0676
+     - µm²
    * - :drc_rule:`(m2.7)`
-     - Min area of metal2 holes [um2]
+     - Min area of metal2 holes
      - 
      - 0.140
+     - µm²
    * - :drc_rule:`(m2.pd.1)`
      - Min MM2_oxide_Pattern_density
      - :drc_flag:`RR`
      - 0.7
+     - \-
    * - :drc_rule:`(m2.pd.2a)`
      - Rule m2.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …
      - :drc_flag:`A`
      - 700
+     - µm
    * - :drc_rule:`(m2.pd.2b)`
      - Rule m2.pd.1 has to be checked by dividing the chip into steps of …
      - :drc_flag:`A`
      - 70
+     - 
    * - :drc_rule:`(m2.11)`
      - Max width of metal2
      - :drc_flag:`CU`
      - 4.000
+     - µm
    * - :drc_rule:`(m2.12)`
      - Add slots and remove vias and contacts if met2 wider than…..
      - :drc_flag:`CU`
      - 3.200
+     - 
    * - :drc_rule:`(m2.13)`
      - Max pattern density (PD) of metal2
      - :drc_flag:`CU`
      - 0.77
+     - \-
    * - :drc_rule:`(m2.14)`
      - Met2 PD window size
      - :drc_flag:`CU`
      - 50.000
+     - µm
    * - :drc_rule:`(m2.14a)`
      - Met2 PD window step
      - :drc_flag:`CU`
      - 25.000
+     - µm
    * - :drc_rule:`(m2.15)`
      - Via must be enclosed by met2 by at least…
      - :drc_flag:`CU`
      - 0.040
+     - µm
 
 
 .. figure:: periphery/p040-m2_dotdash.svg
@@ -1995,93 +2369,113 @@
 .. list-table:: Function: Via2 connects met2 to met3 in the SKY130T*/SKY130P*/SP8Q/SP8P* flows and met2/capm to met3 in the SKY130DI* flow.
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(via2.X.1)`
      - Via2 connects met2 to met3 in the SKY130T*/SKY130P*/SP8Q/SP8P* flow and met2/capm to met3 in the SKY130DI* flow.
      - 
      - 
+     - 
    * - :drc_rule:`(via2.1a)`
      - Min and max L and W of via2 (except for rule via2.1b/1c/1d/1e/1f)
      - :drc_flag:`AL`
      - 0.200
+     - µm
    * - :drc_rule:`(via2.1b)`
      - Three sizes of square Vias allowed inside areaid:mt: 0.280um, 1.2 um and 1.5 um
      - :drc_flag:`AL`
      - N/A
+     - N/A
    * - :drc_rule:`(via2.1c)`
      - Two sizes of square Vias allowed inside areaid:mt: 1.2 um and 1.5 um
      - :drc_flag:`AL`
      - N/A
+     - N/A
    * - :drc_rule:`(via2.1d)`
      - Four sizes of square Vias allowed inside areaid:mt: 0.2um, 0.280um, 1.2 um and 1.5 um
      - :drc_flag:`AL`
      - 
+     - 
    * - :drc_rule:`(via2.1e)`
      - Three sizes of square Vias allowed inside areaid:mt: 0.8um, 1.2 um and 1.5 um
      - :drc_flag:`AL`
      - N/A
+     - N/A
    * - :drc_rule:`(via2.1f)`
      - Two sizes of square Vias allowed outside areaid:mt: 0.8um and 1.2 um
      - :drc_flag:`AL`
      - N/A
+     - N/A
    * - :drc_rule:`(via2.2)`
      - Spacing of via2 to via2
      - :drc_flag:`AL`
      - 0.200
+     - µm
    * - :drc_rule:`(via2.3)`
      - Only min. square via2s are allowed except die seal ring where via2s are (Via2 CD)*L
      - :drc_flag:`AL`
      - 0.2*L
+     - 
    * - :drc_rule:`(via2.4)`
      - Via2 must be enclosed by Met2 by at least …
      - :drc_flag:`AL`
      - 0.040
+     - µm
    * - :drc_rule:`(via2.4a)`
-     - Inside :drc_tag:`areaid.mt`, 1.5 um Via2 must be enclosed by met2 by atleast
+     - Inside :drc_tag:`areaid.mt`, 1.5 µm Via2 must be enclosed by met2 by atleast
      - 
      - 0.140
+     - µm
    * - :drc_rule:`(via2.5)`
      - Via2 must be enclosed by Met2 on one of two adjacent sides by at least …
      - :drc_flag:`AL`
      - 0.085
+     - µm
    * - :drc_rule:`(via2.11)`
      - Min and max L and W of via2
      - :drc_flag:`CU`
      - 0.210
+     - µm
    * - :drc_rule:`(via2.12)`
      - Min spacing between via2's
      - :drc_flag:`CU`
      - 0.180
+     - µm
    * - :drc_rule:`(via2.13)`
      - Min spacing between via2 rows
      - :drc_flag:`CU`
      - 0.200
+     - µm
    * - :drc_rule:`(via2.14)`
      - Via2 must be enclosed by met2 by atleast
      - :drc_flag:`CU`
      - 0.035
+     - µm
    * - :drc_rule:`(via2.irdrop.1)`
      - For 1 <= n <= 2 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.0
+     - µm
    * - :drc_rule:`(via2.irdrop.2)`
      - For 3 <= n <= 4 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.6
+     - µm
    * - :drc_rule:`(via2.irdrop.3)`
      - For 5 <= n <= 30 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.79
+     - µm
    * - :drc_rule:`(via2.irdrop.4)`
      - For n > 30 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.9
+     - µm
 
 
 .. figure:: periphery/p041-via2_dotdash.svg
@@ -2096,97 +2490,125 @@
 .. list-table:: Function: Defines third level of metal interconnects, buses etc
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(m3.-)`
-     - Algorithm should flag errors, for met3, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm3 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. NOTE: Required for IP, Recommended for Chip-level.
+     - | Algorithm should flag errors, for met3, if ANY of the following is true:
+       | An entire 700x700 window is covered by cmm3 waffleDrop, and metX PD < 70% for same window.
+       | 80-100% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 65% for same window.
+       | 60-80% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 60% for same window.
+       | 50-60% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 50% for same window.
+       | 40-50% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 40% for same window.
+       | 30-40% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 30% for same window.
+       | Exclude cells whose area is below 40Kum2. NOTE: Required for IP, Recommended for Chip-level.
      - :drc_flag:`RC`
      - 
+     - 
    * - :drc_rule:`(m3.1)`
      - Width of metal 3
      - 
      - 0.300
+     - µm
    * - :drc_rule:`(m3.2)`
      - Spacing of metal 3 to metal 3
      - 
      - 0.300
+     - µm
    * - :drc_rule:`(m3.3a)`
      - Min. spacing of features attached to or extending from huge_met3 for a distance of up to 0.480 um to metal3  (rule not checked over non-huge met3 features)
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(m3.3b)`
      - Min. spacing of huge_met3 to metal3 excluding features checked by m3.3a
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(m3.3c)`
-     - Min. spacing of features attached to or extending from huge_met3 for a distance of up to 0.400 um to metal3  (rule not checked over non-huge met3 features)
+     - Min. spacing of features attached to or extending from huge_met3 for a distance of up to 0.400 µm to metal3  (rule not checked over non-huge met3 features)
      - 
      - 0.400
+     - µm
    * - :drc_rule:`(m3.3d)`
      - Min. spacing of huge_met3 to metal3 excluding features checked by m3.3a
      - 
      - 0.400
+     - µm
    * - :drc_rule:`(m3.4)`
      - Via2 must be enclosed by Met3 by at least …
      - :drc_flag:`AL`
      - 0.065
+     - µm
    * - :drc_rule:`(m3.5)`
      - Via2 must be enclosed by Met3 on one of two adjacent sides by at least …
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(m3.5a)`
      - Via2 must be enclosed by Met3 on all sides by at least …(Rule not checked on a layout when it satisfies both rules m3.4 and m3.5)
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(m3.6)`
      - Min area of metal3
      - 
      - 0.240
+     - µm²
    * - :drc_rule:`(m3.7)`
-     - Min area of metal3 holes [um2]
+     - Min area of metal3 holes
      - :drc_flag:`CU`
      - 0.200
+     - µm²
    * - :drc_rule:`(m3.pd.1)`
      - Min MM3_oxide_Pattern_density
      - :drc_flag:`RR`
      - 0.7
+     - \-
    * - :drc_rule:`(m3.pd.2a)`
      - Rule m3.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …
      - :drc_flag:`A`
      - 700
+     - µm
    * - :drc_rule:`(m3.pd.2b)`
      - Rule m3.pd.1 has to be checked by dividing the chip into steps of …
      - :drc_flag:`A`
      - 70
+     - 
    * - :drc_rule:`(m3.11)`
      - Max width of metal3
      - :drc_flag:`CU`
      - 4.000
+     - µm
    * - :drc_rule:`(m3.12)`
      - Add slots and remove vias and contacts if wider than…..
      - :drc_flag:`CU`
      - 3.200
+     - 
    * - :drc_rule:`(m3.13)`
      - Max pattern density (PD) of metal3
      - :drc_flag:`CU`
      - 0.77
+     - \-
    * - :drc_rule:`(m3.14)`
      - Met3 PD window size
      - :drc_flag:`CU`
      - 50.000
+     - µm
    * - :drc_rule:`(m3.14a)`
      - Met3 PD window step
      - :drc_flag:`CU`
      - 25.000
+     - µm
    * - :drc_rule:`(m3.15)`
      - Via2 must be enclosed by met3 by at least…
      - :drc_flag:`CU`
      - 0.060
+     - µm
 
 
 .. figure:: periphery/p042-m3_dotdash.svg
@@ -2201,69 +2623,83 @@
 .. list-table:: Function: Via3 connects met3 to met4 in the SKY130Q*/SKY130P*/SP8Q/SP8P* flow 
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(via3.1)`
      - Min and max L and W of via3 (except for rule via3.1a)
      - :drc_flag:`AL`
      - 0.200
+     - µm
    * - :drc_rule:`(via3.1a)`
      - Two sizes of square via3 allowed inside :drc_tag:`areaid.mt`: 0.200um and 0.800um
      - :drc_flag:`AL`
      - 
+     - 
    * - :drc_rule:`(via3.2)`
      - Spacing of via3 to via3
      - :drc_flag:`AL`
      - 0.200
+     - µm
    * - :drc_rule:`(via3.3)`
      - Only min. square via3s are allowed except die seal ring where via3s are (Via3 CD)*L
      - 
      - 0.2*L
+     - 
    * - :drc_rule:`(via3.4)`
      - Via3 must be enclosed by Met3 by at least …
      - :drc_flag:`AL`
      - 0.060
+     - µm
    * - :drc_rule:`(via3.5)`
      - Via3 must be enclosed by Met3 on one of two adjacent sides by at least …
      - :drc_flag:`AL`
      - 0.090
+     - µm
    * - :drc_rule:`(via3.11)`
      - Min and max L and W of via3
      - :drc_flag:`CU`
      - 0.210
+     - µm
    * - :drc_rule:`(via3.12)`
      - Min spacing between via2's
      - :drc_flag:`CU`
      - 0.180
+     - µm
    * - :drc_rule:`(via3.13)`
      - Via3 must be enclosed by Met3 by at least …
      - :drc_flag:`CU`
      - 0.055
+     - µm
    * - :drc_rule:`(via3.14)`
      - Min spacing between via3 rows
      - :drc_flag:`CU`
      - 0.350
+     - µm
    * - :drc_rule:`(via3.irdrop.1)`
      - For 1 <= n <= 2 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.0
+     - µm
    * - :drc_rule:`(via3.irdrop.2)`
      - For 3 <= n <= 15 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.6
+     - µm
    * - :drc_rule:`(via3.irdrop.3)`
      - For 16 <= n <= 30 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.8
+     - µm
    * - :drc_rule:`(via3.irdrop.4)`
      - For n > 30 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.9
+     - µm
 
 
 
@@ -2273,33 +2709,38 @@
 .. list-table:: Function: Defines Nitride Seal Mask (FIXME)
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(nsm.1)`
      - Min. width of nsm
      - 
      - 3.000
+     - µm
    * - :drc_rule:`(nsm.2)`
      - Min. spacing of nsm to nsm
      - 
      - 4.000
+     - µm
    * - :drc_rule:`(nsm.3)`
      - Min spacing, no overlap, between NSM_keepout to diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5). Exempt the following from the check: (a) cell name "nikon*" and (b) diff ring inside :drc_tag:`areaid.sl`
      - :drc_flag:`AL`
      - 1.000
+     - µm
    * - :drc_rule:`(nsm.3a)`
      - Min enclosure of diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5) by :drc_tag:`areaid.ft`. Exempt the following from the check: (a) cell name "s8Fab_crntic*"  (b)  blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption)
      - 
      - 3.000
+     - µm
    * - :drc_rule:`(nsm.3b)`
      - Min spacing between :drc_tag:`areaid.dt` to diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5). Exempt the following from the check: (a) blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption)
      - 
      - 3.000
+     - µm
 
 
 
@@ -2309,29 +2750,33 @@
 .. list-table:: Function: Defines third level of metal interconnects, buses and inductor; top_indmMetal is met3 for SKY130D* flows; Similarly top_padVia is Via2 for SKY130D*
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(indm.1)`
      - Min width of top_indmMetal
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(indm.2)`
      - Min spacing between two top_indmMetal
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(indm.3)`
      - top_padVia must  be enclosed by top_indmMetal by atleast
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(indm.4)`
      - Min area of top_indmMetal
      - 
      - N/A
+     - N/A
 
 
 .. figure:: periphery/p043-indm_dotdash.svg
@@ -2346,89 +2791,115 @@
 .. list-table:: Function: Defines Fourth level of metal interconnects;
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(m4.-)`
-     - Algorithm should flag errors, for met4, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm4 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. Required for IP, Recommended for Chip-level.
+     - | Algorithm should flag errors, for met4, if ANY of the following is true:
+       | An entire 700x700 window is covered by cmm4 waffleDrop, and metX PD < 70% for same window.
+       | 80-100% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 65% for same window.
+       | 60-80% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 60% for same window.
+       | 50-60% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 50% for same window.
+       | 40-50% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 40% for same window.
+       | 30-40% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 30% for same window.
+       | Exclude cells whose area is below 40Kum2. Required for IP, Recommended for Chip-level.
      - :drc_flag:`RC`
      - 
+     - 
    * - :drc_rule:`(m4.1)`
      - Min width of met4
      - 
      - 0.300
+     - µm
    * - :drc_rule:`(m4.2)`
      - Min spacing between two met4
      - 
      - 0.300
+     - µm
    * - :drc_rule:`(m4.3)`
      - via3 must  be enclosed by met4 by atleast
      - :drc_flag:`AL`
      - 0.065
+     - µm
    * - :drc_rule:`(m4.4)`
      - Min area of met4 (rule exempted for probe pads which are exactly 1.42um by 1.42um)
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(m4.4a)`
      - Min area of met4
      - 
      - 0.240
+     - µm²
    * - :drc_rule:`(m4.5a)`
-     - Min. spacing of features attached to or extending from huge_met4 for a distance of up to  0.400 um to metal4 (rule not checked over non-huge met4 features)
+     - Min. spacing of features attached to or extending from huge_met4 for a distance of up to  0.400 µm to metal4 (rule not checked over non-huge met4 features)
      - 
      - 0.400
+     - µm
    * - :drc_rule:`(m4.5b)`
      - Min. spacing of huge_met4 to metal4 excluding features checked by m4.5a
      - 
      - 0.400
+     - µm
    * - :drc_rule:`(m4.7)`
-     - Min area of meta4 holes [um2]
+     - Min area of meta4 holes
      - :drc_flag:`CU`
      - 0.200
+     - µm²
    * - :drc_rule:`(m4.pd.1)`
      - Min MM4_oxide_Pattern_density
      - :drc_flag:`RR`
      - 0.7
+     - \-
    * - :drc_rule:`(m4.pd.2a)`
      - Rule m4.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …
      - :drc_flag:`A`
      - 700
+     - µm
    * - :drc_rule:`(m4.pd.2b)`
      - Rule m4.pd.1 has to be checked by dividing the chip into steps of …
      - :drc_flag:`A`
      - 70
+     - 
    * - :drc_rule:`(m4.11)`
      - Max width of metal4
      - :drc_flag:`CU`
      - 10.000
+     - µm
    * - :drc_rule:`(m4.12)`
      - Add slots and remove vias and contacts if wider than…..
      - :drc_flag:`CU`
      - 10.000
+     - 
    * - :drc_rule:`(m4.13)`
      - Max pattern density (PD) of metal4; met4 overlapping pdm areas are excluded from the check
      - :drc_flag:`CU`
      - 0.77
+     - \-
    * - :drc_rule:`(m4.14)`
      - Met4 PD window size
      - :drc_flag:`CU`
      - 50.000
+     - µm
    * - :drc_rule:`(m4.14a)`
      - Met4 PD window step
      - :drc_flag:`CU`
      - 25.000
+     - µm
    * - :drc_rule:`(m4.15)`
      - Via3 must be enclosed by met4 by at least…
      - :drc_flag:`CU`
      - 0.060
+     - µm
    * - :drc_rule:`(m4.16)`
      - Min enclosure of pad by met4
      - :drc_flag:`CU`
      - 0.850
+     - µm
 
 
 .. figure:: periphery/p044-m4_dotdash.svg
@@ -2443,45 +2914,53 @@
 .. list-table:: Function: Via4 connects met4 to met5 in the SKY130P*/SP8P* flow 
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(via4.1)`
      - Min and max L and W of via4
      - 
      - 0.800
+     - µm
    * - :drc_rule:`(via4.2)`
      - Spacing of via4 to via4
      - 
      - 0.800
+     - µm
    * - :drc_rule:`(via4.3)`
      - Only min. square via4s are allowed except die seal ring where via4s are (Via4 CD)*L
      - 
      - 0.8*L
+     - 
    * - :drc_rule:`(via4.4)`
      - Via4 must be enclosed by Met4 by at least …
      - 
      - 0.190
+     - µm
    * - :drc_rule:`(via4.irdrop.1)`
      - For 1 <= n <= 4 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.0
+     - µm
    * - :drc_rule:`(via4.irdrop.2)`
      - For 5 <= n <= 10 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.2
+     - µm
    * - :drc_rule:`(via4.irdrop.3)`
      - For 11 <= n <= 100 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.5
+     - µm
    * - :drc_rule:`(via4.irdrop.4)`
      - For n > 100 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…
      - :drc_flag:`CU` :drc_flag:`IR`
      - 0.8
+     - µm
 
 
 
@@ -2491,29 +2970,33 @@
 .. list-table:: Function: Defines Fifth level of metal interconnects;
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(m5.1)`
      - Min width of met5
      - 
      - 1.600
+     - µm
    * - :drc_rule:`(m5.2)`
      - Min spacing between two met5
      - 
      - 1.600
+     - µm
    * - :drc_rule:`(m5.3)`
      - via4 must  be enclosed by met5 by atleast
      - 
      - 0.310
+     - µm
    * - :drc_rule:`(m5.4)`
      - Min area of met5 (For all flows except SKY130PIR*/SKY130PF*, the rule is exempted for probe pads which are exactly 1.42um by 1.42um)
      - 
      - 4.000
+     - µm²
 
 
 
@@ -2523,21 +3006,23 @@
 .. list-table:: Function: Opens the passivation
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(pad.2)`
      - Min spacing of pad:dg to pad:dg
      - 
      - 1.270
+     - µm
    * - :drc_rule:`(pad.3)`
      - Max area of hugePad NOT top_metal
      - 
      - 30000
+     - µm²
 
 
 
@@ -2547,37 +3032,43 @@
 .. list-table:: Function: Defines the Cu Inductor. Connects to met5 through the pad opening
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(rdl.1)`
      - Min width of rdl
      - 
      - 10
+     - µm
    * - :drc_rule:`(rdl.2)`
      - Min spacing between two rdl
      - 
      - 10
+     - µm
    * - :drc_rule:`(rdl.3)`
      - Min enclosure of pad by rdl, except rdl interacting with bump
      - 
      - 10.750
+     - µm
    * - :drc_rule:`(rdl.4)`
      - Min spacing between rdl and outer edge of the seal ring
      - 
      - 15.000
+     - µm
    * - :drc_rule:`(rdl.5)`
      - (rdl OR ccu1m.mk) must not overlap :drc_tag:`areaid.ft`. Exempt the following from the check: (a)  blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption)
      - 
      - 
+     - 
    * - :drc_rule:`(rdl.6)`
      - Min spacing of rdl to pad, except rdl interacting with bump
      - 
      - 19.660
+     - µm
 
 
 
@@ -2594,109 +3085,133 @@
 .. list-table:: Function: Defines metal fuses
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(mf.1)`
      - Min. and max width of fuse
      - 
      - 0.800
+     - µm
    * - :drc_rule:`(mf.2)`
      - Length of fuse
      - 
      - 7.200
+     - µm
    * - :drc_rule:`(mf.3)`
      - Spacing between centers of adjacent fuses
      - 
      - 2.760
+     - µm
    * - :drc_rule:`(mf.4)`
      - Spacing between center of fuse and fuse_metal (fuse shields are exempted)
      - 
      - 3.300
+     - µm
    * - :drc_rule:`(mf.5)`
      - Max. extension of fuse_metal beyond fuse boundary
      - 
      - 0.830
+     - 
    * - :drc_rule:`(mf.6)`
      - Spacing (no overlapping) between fuse center and Metal1
      - 
      - 3.300
+     - µm
    * - :drc_rule:`(mf.7)`
      - Spacing (no overlapping) between fuse center and LI
      - 
      - 3.300
+     - µm
    * - :drc_rule:`(mf.8)`
      - Spacing (no overlapping) between fuse center and poly
      - 
      - 2.660
+     - µm
    * - :drc_rule:`(mf.9)`
      - Spacing (no overlapping) between fuse center and tap
      - 
      - 2.640
+     - µm
    * - :drc_rule:`(mf.10)`
      - Spacing (no overlapping) between fuse center and diff
      - 
      - 3.250
+     - µm
    * - :drc_rule:`(mf.11)`
      - Spacing (no overlapping) between fuse center and nwell
      - 
      - 3.320
+     - µm
    * - :drc_rule:`(mf.12)`
      - Size of  fuse_shield
      - 
      - 0.5x2.4
+     - µm
    * - :drc_rule:`(mf.13)`
      - Min. spacing of center of fuse to fuse_shield
      - 
      - 2.200
+     - µm
    * - :drc_rule:`(mf.14)`
      - Max. spacing of center of fuse to fuse_shield
      - 
      - 3.300
+     - µm
    * - :drc_rule:`(mf.15)`
      - Fuse_shields are only placed between periphery metal (i.e., without fuse:dg) and non-isolated edges of fuse as defined by mf.16
      - 
      - 
+     - 
    * - :drc_rule:`(mf.16)`
      - The edge of a fuse is considered non-isolated if wider than or equal to mf.2 and spaced to fuse_metal by less than …
      - 
      - 4.000
+     - 
    * - :drc_rule:`(mf.17)`
      - Offset between fuse_shields center and fuse center
      - :drc_flag:`NC`
      - 0.000
+     - 
    * - :drc_rule:`(mf.18)`
      - Min and max space between fuse_shield and fuse_metal (opposite edges). Rule checked within 1 gridpoint.
      - 
      - 0.600
+     - µm
    * - :drc_rule:`(mf.19)`
      - Spacing (no overlapping) between fuse center and Metal2
      - 
      - 3.300
+     - µm
    * - :drc_rule:`(mf.20)`
      - Only one fuse per metal line allowed
      - 
      - 
+     - 
    * - :drc_rule:`(mf.21)`
      - Min spacing , no overlap, between metal3 and fuse center
      - 
      - 3.300
+     - µm
    * - :drc_rule:`(mf.22)`
      - Min spacing between fuse_contact to fuse_contact
      - 
      - 1.960
+     - µm
    * - :drc_rule:`(mf.23)`
      - Spacing (no overlapping) between fuse center and Metal4
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(mf.24)`
      - Spacing (no overlapping) between fuse center and Metal5
      - 
      - 3.300
+     - µm
 
 
 .. figure:: periphery/p046-mf_dotdash.svg
@@ -2711,33 +3226,38 @@
 .. list-table:: Function: Defines thick oxide for high voltage devices
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(hvi.1)`
      - Min width of Hvi
      - :drc_flag:`P`
      - 0.600
+     - µm
    * - :drc_rule:`(hvi.2a)`
      - Min spacing of Hvi to Hvi
      - :drc_flag:`P`
      - 0.700
+     - µm
    * - :drc_rule:`(hvi.2b)`
      - Manual merge if space is below minimum
      - 
      - 
+     - 
    * - :drc_rule:`(hvi.4)`
      - Hvi must not overlap tunm
      - 
      - 
+     - 
    * - :drc_rule:`(hvi.5)`
      - Min space between hvi and nwell (exclude coincident edges)
      - 
      - 0.700
+     - µm
 
 
 .. figure:: periphery/p047-hvi_dotdash.svg
@@ -2752,29 +3272,33 @@
 .. list-table:: Function: Defines rules for HV nwell; All nwell connected to voltages greater than 1.8V must be enclosed by hvi; Nets connected to LV nwell or nwell overlapping hvi but connected to LV voltages (i.e 1.8V) should be tagged "lv_net" using text.dg; This tag should be only on Li layer
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(hvnwell.8)`
      - Min space between HV_nwell  and any nwell on different nets
      - 
      - 2.000
+     - µm
    * - :drc_rule:`(hvnwell.9)`
      - (Nwell overlapping hvi) must be enclosed by hvi
      - 
      - 
+     - 
    * - :drc_rule:`(hvnwell.10)`
      - LVnwell and HnWell should not be on the same net (for the purposes of this check, short the connectivity through resistors); Exempt HnWell with li nets tagged "lv_net" using text.dg and Hnwell connected to nwell overlapping :drc_tag:`areaid.hl`
      - :drc_flag:`TC`
      - 
+     - 
    * - :drc_rule:`(hvnwell.11)`
      - Nwell connected to the nets mentioned in the "Power_Net_Hv" field of the latcup GUI must be enclosed by hvi (exempt nwell inside :drc_tag:`areaid.hl`). Also for the purposes of this check, short the connectivity through resistors. The rule will be checked in the latchup run and exempted for cells "s8tsg5_tx_ibias_gen" and "s8bbcnv_psoc3p_top_18",  "rainier_top, indus_top*", "rainier_top, manas_top, ccg3_top"
      - 
      - 
+     - 
 
 
 .. figure:: periphery/p047-hvnwell_dotdash.svg
@@ -2789,73 +3313,88 @@
 .. list-table:: Function: Defines rules for HV diff/tap
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(hvdifftap.14)`
      - Min width of diff inside Hvi, except HV Pdiff resistors (difftap.14a)
      - :drc_flag:`P`
      - 0.290
+     - µm
    * - :drc_rule:`(hvdifftap.14a)`
      - Min width of diff inside Hvi, HV Pdiff resistors only
      - :drc_flag:`P`
      - 0.150
+     - µm
    * - :drc_rule:`(hvdifftap.15a)`
      - Min space of Hdiff to Hdiff
      - :drc_flag:`P`
      - 0.300
+     - µm
    * - :drc_rule:`(hvdifftap.15b)`
      - Min space of n+diff to non-abutting p+tap inside Hvi
      - :drc_flag:`P`
      - 0.370
+     - µm
    * - :drc_rule:`(hvdifftap.16)`
      - Min width tap butting diff on one or two sides inside Hvi (rule exempted inside UHVI)
      - 
      - 0.700
+     - µm
    * - :drc_rule:`(hvdifftap.17)`
      - P+ Hdiff or Pdiff inside areaid:hvnwell must be enclosed by Hv_nwell by at least ….[Rule exempted inside UHVI]
      - :drc_flag:`DE` :drc_flag:`NE`
      - 0.330
+     - µm
    * - :drc_rule:`(hvdifftap.18)`
      - Spacing of N+ diff to HV_nwell (rule exempted inside UHVI)
      - :drc_flag:`DE` :drc_flag:`NE`
      - 0.430
+     - µm
    * - :drc_rule:`(hvdifftap.19)`
      - N+ Htap must be enclosed by Hv_nwell by at least …Rule exempted inside UHVI.
      - :drc_flag:`NE`
      - 0.330
+     - µm
    * - :drc_rule:`(hvdifftap.20)`
      - Spacing of P+ tap to HV_nwell (Exempted for p+tap butting pwell.rs; rule exempted inside UHVI)
      - 
      - 0.430
+     - µm
    * - :drc_rule:`(hvdifftap.21)`
      - Diff or tap cannot straddle Hvi
      - :drc_flag:`P`
      - 
+     - 
    * - :drc_rule:`(hvdifftap.22)`
      - Min enclosure of Hdiff or Htap by Hvi. Rule exempted inside UHVI.
      - :drc_flag:`P`
      - 0.180
+     - µm
    * - :drc_rule:`(hvdifftap.23)`
      - Space between diff or tap outside Hvi and Hvi
      - :drc_flag:`P`
      - 0.180
+     - µm
    * - :drc_rule:`(hvdifftap.24)`
      - Spacing of nwell to N+ Hdiff (rule exempted inside UHVI)
      - :drc_flag:`DE` :drc_flag:`NE`
      - 0.430
+     - µm
    * - :drc_rule:`(hvdifftap.25)`
      - Min space of N+ Hdiff inside HVI across non-abutting P+_tap
      - :drc_flag:`NC`
      - 1.070
+     - µm
    * - :drc_rule:`(hvdifftap.26)`
      - Min spacing between pwbm to difftap outside UHVI
      - 
      - N/A
+     - N/A
 
 
 .. figure:: periphery/p048-hvdifftap_dotdash.svg
@@ -2870,21 +3409,23 @@
 .. list-table:: Function: Defines rules for HV poly
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(hvpoly.13)`
      - Min width of poly over diff inside Hvi
      - :drc_flag:`P`
      - 0.500
+     - µm
    * - :drc_rule:`(hvpoly.14)`
      - (poly and diff) cannot straddle Hvi
      - 
      - 
+     - 
 
 
 .. figure:: periphery/p049-hvpoly_dotdash.svg
@@ -2899,57 +3440,68 @@
 .. list-table:: Function: Defines tip implants for the HV NMOS
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
-   * - :drc_rule:`(hvntm.X.1 )`
+     - Unit
+   * - :drc_rule:`(hvntm.X.1)`
      - Hvntm can be drawn inside HVI. Drawn layer will be OR-ed with the CL and rechecked for CLDRC
      - 
      - 
+     - 
    * - :drc_rule:`(hvntm.1)`
      - Width of hvntm
      - :drc_flag:`P`
      - 0.700
+     - µm
    * - :drc_rule:`(hvntm.2)`
      - Spacing of hvntm to hvntm
      - :drc_flag:`P`
      - 0.700
+     - µm
    * - :drc_rule:`(hvntm.3)`
      - Min. enclosure of (n+_diff inside Hvi) but not overlapping :drc_tag:`areaid.ce` by hvntm
      - :drc_flag:`P`
      - 0.185
+     - µm
    * - :drc_rule:`(hvntm.4)`
      - Space, no overlap, between n+_diff outside Hvi and hvntm
      - :drc_flag:`P`
      - 0.185
+     - µm
    * - :drc_rule:`(hvntm.5)`
      - Space, no overlap, between p+_diff  and hvntm
      - :drc_flag:`P` :drc_flag:`DE`
      - 0.185
+     - µm
    * - :drc_rule:`(hvntm.6a)`
      - Space, no overlap, between p+_tap and hvntm (except along the diff-butting edge)
      - :drc_flag:`P`
      - 0.185
+     - µm
    * - :drc_rule:`(hvntm.6b)`
      - Space, no overlap, between p+_tap and hvntm along the diff-butting edge
      - :drc_flag:`P`
      - 0.000
+     - µm
    * - :drc_rule:`(hvntm.7)`
      - hvntm must enclose ESD_nwell_tap inside hvi by atleast
      - :drc_flag:`P`
      - 0.000
+     - 
    * - :drc_rule:`(hvntm.9)`
      - Hvntm must not overlap :drc_tag:`areaid.ce`
      - 
      - 
+     - 
    * - :drc_rule:`(hvntm.10)`
      - Hvntm must overlap hvi
      - 
      - 
+     - 
 
 
 .. figure:: periphery/p049-hvntm_dotdash.svg
@@ -2964,73 +3516,88 @@
 .. list-table:: Function: Defines rules for the 16V Drain extended NMOS devices
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(denmos.1)`
      - Min width of de_nFet_gate
      - 
      - 1.055
+     - µm
    * - :drc_rule:`(denmos.2)`
      - Min width of de_nFet_source not overlapping poly
      - 
      - 0.280
+     - µm
    * - :drc_rule:`(denmos.3)`
      - Min width of de_nFet_source overlapping poly
      - 
      - 0.925
+     - µm
    * - :drc_rule:`(denmos.4)`
      - Min width of the de_nFet_drain
      - 
      - 0.170
+     - µm
    * - :drc_rule:`(denmos.5)`
      - Min/Max extension of de_nFet_source over nwell
      - 
      - 0.225
+     - 
    * - :drc_rule:`(denmos.6)`
      - Min/Max spacing between de_nFet_drain and de_nFet_source
      - 
      - 1.585
+     - µm
    * - :drc_rule:`(denmos.7)`
      - Min channel width for de_nFet_gate
      - 
      - 5.000
+     - µm
    * - :drc_rule:`(denmos.8)`
      - 90 degree angles are not permitted for nwell overlapping de_nFET_drain
      - 
      - 
+     - 
    * - :drc_rule:`(denmos.9a)`
-     - All bevels on nwell are 45 degree, 0.43 um from corners
+     - All bevels on nwell are 45 degree, 0.43 µm from corners
      - :drc_flag:`NC`
      - 
+     - µm
    * - :drc_rule:`(denmos.9b)`
-     - All bevels on de_nFet_drain are 45 degree, 0.05 um from corners
+     - All bevels on de_nFet_drain are 45 degree, 0.05 µm from corners
      - :drc_flag:`NC`
      - 
+     - µm
    * - :drc_rule:`(denmos.10)`
      - Min enclosure of de_nFet_drain by nwell
      - 
      - 0.660
+     - µm
    * - :drc_rule:`(denmos.11)`
      - Min spacing between p+ tap and (nwell overlapping de_nFet_drain)
      - 
      - 0.860
+     - µm
    * - :drc_rule:`(denmos.12)`
      - Min spacing between nwells overlapping de_nFET_drain
      - 
      - 2.400
+     - µm
    * - :drc_rule:`(denmos.13)`
      - de_nFet_source must be enclosed by nsdm by
      - 
      - 0.130
+     - µm
    * - :drc_rule:`(denmos.14)`
      - nvhv FETs must be enclosed by :drc_tag:`areaid.mt`
      - 
      - N/A
+     - N/A
 
 
 .. figure:: periphery/p050-denmos_dotdash.svg
@@ -3045,69 +3612,83 @@
 .. list-table:: Function: Defines rules for the 16V Drain extended NMOS devices
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(depmos.1)`
      - Min width of de_pFet_gate
      - 
      - 1.050
+     - µm
    * - :drc_rule:`(depmos.2)`
      - Min width of de_pFet_source not overlapping poly
      - 
      - 0.280
+     - µm
    * - :drc_rule:`(depmos.3)`
      - Min width of de_pFet_source overlapping poly
      - 
      - 0.920
+     - µm
    * - :drc_rule:`(depmos.4)`
      - Min width of the de_pFet_drain
      - 
      - 0.170
+     - µm
    * - :drc_rule:`(depmos.5)`
      - Min/Max extension of de_pFet_source beyond nwell
      - 
      - 0.260
+     - 
    * - :drc_rule:`(depmos.6)`
      - Min/Max spacing between de_pFet_drain and de_pFet_source
      - 
      - 1.190
+     - µm
    * - :drc_rule:`(depmos.7)`
      - Min channel width for de_pFet_gate
      - 
      - 5.000
+     - µm
    * - :drc_rule:`(depmos.8)`
      - 90 degree angles are not permitted for nwell hole overlapping de_pFET_drain
      - 
      - 
+     - 
    * - :drc_rule:`(depmos.9a)`
-     - All bevels on nwell hole are 45 degree, 0.43 um from corners
+     - All bevels on nwell hole are 45 degree, 0.43 µm from corners
      - :drc_flag:`NC`
      - 
+     - µm
    * - :drc_rule:`(depmos.9b)`
-     - All bevels on de_pFet_drain are 45 degree, 0.05 um from corners
+     - All bevels on de_pFet_drain are 45 degree, 0.05 µm from corners
      - :drc_flag:`NC`
      - 
+     - µm
    * - :drc_rule:`(depmos.10)`
      - Min enclosure of de_pFet_drain by nwell hole
      - 
      - 0.860
+     - µm
    * - :drc_rule:`(depmos.11)`
      - Min spacing between n+ tap and (nwell hole enclosing de_pFET_drain)
      - 
      - 0.660
+     - µm
    * - :drc_rule:`(depmos.12)`
      - de_pFet_source must be enclosed by psdm by
      - 
      - 0.130
+     - µm
    * - :drc_rule:`(depmos.13)`
      - pvhv fets( except those with W/L = 5.0/0.66) must be enclosed by :drc_tag:`areaid.mt`
      - 
      - N/A
+     - N/A
 
 
 .. figure:: periphery/p051-depmos_dotdash.svg
@@ -3122,45 +3703,53 @@
 .. list-table:: Function: Defines rules :drc_tag:`areaid.en`
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(extd.1)`
      - Difftap cannot straddle areaid:en
      - 
      - 
+     - 
    * - :drc_rule:`(extd.2)`
      - DiffTap must have 2 or 3 coincident edges with areaid:en if enclosed by areaid:en
      - 
      - 
+     - 
    * - :drc_rule:`(extd.3)`
      - Poly must not be entirely overlapping difftap in areaid:en
      - 
      - 
+     - 
    * - :drc_rule:`(extd.4)`
      - Only cell name "s8rf_n20vhv1*" is a valid cell name for n20vhv1 device  (Check in LVS as invalid device)
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(extd.5)`
      - Only cell name "s8rf_n20vhviso1" is a valid cell name for n20vhviso1 device  (Check in LVS as invalid device)
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(extd.6)`
      - Only cell name "s8rf_p20vhv1" is a valid cell name for p20vhv1 device  (Check in LVS as invalid device)
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(extd.7)`
      - Only cell name "s8rf_n20nativevhv1*" is a valid cell name for n20nativevhv1 device  (Check in LVS as invalid device)
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(extd.8)`
      - Only cell name "s8rf_n20zvtvhv1*" is a valid cell name for n20zvtvhv1 device  (Check in LVS as invalid device)
      - 
      - N/A
+     - N/A
 
 
 .. figure:: periphery/p052-extd_dotdash.svg
@@ -3180,89 +3769,108 @@
 .. list-table:: Function: Defines High Voltage Rules (FIXME)
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(hv.X.1)`
      - High voltage source/drain regions must be tagged by diff:hv
      - 
      - 
+     - 
    * - :drc_rule:`(hv.X.3)`
      - High voltage poly can be drawn over multiple diff regions that are ALL reverse-biased by at least 300 mV (existence of reverse-bias is not checked by the CAD flow).  It can also be drawn over multiple diffs when all sources and all drain are shorted together. In these case, the high voltage poly can be tagged with the text:dg label with a value “hv_bb”.  Exceptions to this use of the hv_bb label must be approved by technology.  Under certain bias conditions, high voltage poly tagged with hv_bb can cross an nwell boundary. The poly of the drain extended device crosses nwell by construction and can be tagged with the "hv_bb" label. Use of the hv_bb label on high voltage poly crossing an nwell boundary must be approved by technology. All high voltage poly tagged with hv_bb will not be checked to hv.poly.1, hv.poly.2, hv.poly.3 and hv.poly.4.
      - 
      - 
+     - 
    * - :drc_rule:`(hv.X.4)`
      - Any piece of layout that is shorted to hv_source/drain becomes a high voltage feature.
      - 
      - 
+     - 
    * - :drc_rule:`(hv.X.5)`
      - In cases where an hv poly gate abuts only low voltage source and drain, the poly gate can be tagged with the text:dg label with a value "hv_lv".  In this case, the "hv_lv" tagged poly gate and its extensions will not be checked to hv.poly.6, but is checked by rules in the poly.-.- section.  The use of the hv_lv label must be approved by technology.
      - 
      - 
+     - 
    * - :drc_rule:`(hv.X.6)`
      - Nwell biased at voltages >= 7.2V must be tagged with text "shv_nwell"
      - :drc_flag:`NC`
      - 
+     - 
    * - :drc_rule:`(hv.nwell.1)`
      - Min spacing of nwell tagged with text "shv_nwell" to any nwell on different nets
      - 
      - 2.500
+     - µm
    * - :drc_rule:`(hv.diff.1a)`
      - Minimum hv_source/drain spacing to diff for edges of hv_source/drain and diff not butting tap
      - 
      - 0.300
+     - µm
    * - :drc_rule:`(hv.diff.1b)`
      - Minimum spacing of (n+/p+ diff resistors and diodes) connected to hv_source/drain to diff
      - 
      - 0.300
+     - µm
    * - :drc_rule:`(hv.diff.2)`
      - Minimum spacing of nwell connected to hv_source/drain to n+ diff
      - :drc_flag:`DE`
      - 0.430
+     - µm
    * - :drc_rule:`(hv.diff.3a)`
      - Minimum n+ hv_source/drain spacing to nwell
      - 
      - 0.550
+     - µm
    * - :drc_rule:`(hv.diff.3b)`
      - Minimum spacing of (n+ diff resistors and diodes) connected to hv_source/drain to nwell
      - 
      - 0.550
+     - µm
    * - :drc_rule:`(hv.poly.1)`
      - Hv poly feature hvPoly (including hv poly resistors) can be drawn over only one diff region and is not allowed to cross nwell boundary except (1) as allowed in rule .X.3 and (2) nwell hole boundary in depmos
      - 
      - 
+     - 
    * - :drc_rule:`(hv.poly.2)`
      - Min spacing of hvPoly (including hv poly resistor) on field to diff (diff butting hvPoly are excluded)
      - 
      - 0.300
+     - µm
    * - :drc_rule:`(hv.poly.3)`
      - Min spacing of hvPoly (including hv poly resistor) on field to n-well (exempt poly stradding nwell in a denmos/depmos)
      - 
      - 0.550
+     - µm
    * - :drc_rule:`(hv.poly.4)`
      - Enclosure of hvPoly (including hv poly resistor) on field by n-well (exempt poly stradding nwell in a denmos/depmos)
      - 
      - 0.300
+     - µm
    * - :drc_rule:`(hv.poly.6a)`
      - Min extension of poly beyond hvFET_gate (exempt poly extending beyond diff along the S/D direction in a denmos/depmos)
      - 
      - 0.160
+     - 
    * - :drc_rule:`(hv.poly.6b)`
      - Extension of hv poly beyond FET_gate (including hvFET_gate; exempt poly extending beyond diff along the S/D direction in a denmos/depmos)
      - 
      - 0.160
+     - 
    * - :drc_rule:`(hv.poly.7)`
      - Minimum overlap of hv poly ring_FET and diff
      - 
      - 
+     - 
    * - :drc_rule:`(hv.poly.8)`
      - Any poly gate abutting hv_source/drain becomes a hvFET_gate
      - 
      - 
+     - 
 
 
 .. figure:: periphery/p054-hv_dotdash_dotdash.svg
@@ -3277,69 +3885,83 @@
 .. list-table:: Function: Identify nets working between 12-16V
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(vhvi.vhv.1)`
      - Terminals operating at nominal 12V (maximum 16V) bias must be tagged as Very-High-Voltage (VHV) using vhvi:dg layer
      - :drc_flag:`NC`
      - 
+     - 
    * - :drc_rule:`(vhvi.vhv.2)`
      - A source or drain of a drain-extended device can be tagged by vhvi:dg. A device with either source or drain (not both) tagged with vhvi:dg serves as a VHV propagation stopper
      - :drc_flag:`NC`
      - 
+     - 
    * - :drc_rule:`(vhvi.vhv.3)`
      - Any feature connected to VHVSourceDrain becomes a very-high-voltage feature
      - :drc_flag:`NC`
      - 
+     - 
    * - :drc_rule:`(vhvi.vhv.4)`
      - Any feature connected to VHVPoly becomes a very-high-voltage feature
      - :drc_flag:`NC`
      - 
+     - 
    * - :drc_rule:`(vhvi.vhv.5)`
      - Diffusion that is not a part of a drain-extended device (i.e., diff not areaid:en) must not be on the same net as VHVSourceDrain. Only diffusion inside :drc_tag:`areaid.ed` and LV diffusion tagged with vhvi:dg are exempted.
      - 
      - 
+     - 
    * - :drc_rule:`(vhvi.vhv.6)`
      - Poly resistor can act as a VHV propagation stopper. For this, it should be tagged with text "vhv_block"
      - :drc_flag:`NC`
      - 
+     - 
    * - :drc_rule:`(vhvi.1.-)`
      - Min width of vhvi:dg
      - 
      - 0.020
+     - µm
    * - :drc_rule:`(vhvi.2.-)`
      - Vhvi:dg cannot overlap areaid:ce
      - 
      - 
+     - 
    * - :drc_rule:`(vhvi.3.-)`
      - VHVGate must overlap hvi:dg
      - 
      - 
+     - 
    * - :drc_rule:`(vhvi.4.-)`
      - Poly connected to the same net as a VHVSourceDrain must be tagged with vhvi:dg layer
      - 
      - 
+     - 
    * - :drc_rule:`(vhvi.5.-)`
      - Vhvi:dg cannot straddle VHVSourceDrain
      - 
      - 
+     - 
    * - :drc_rule:`(vhvi.6.-)`
      - Vhvi:dg overlapping VHVSourceDrain must not overlap poly
      - 
      - 
+     - 
    * - :drc_rule:`(vhvi.7.-)`
      - Vhvi:dg cannot straddle VHVPoly
      - 
      - 
+     - 
    * - :drc_rule:`(vhvi.8.-)`
      - Min space between nwell tagged with vhvi:dg and deep nwell, nwell, or n+diff on a separate net (except for n+diff overlapping nwell tagged with vhvi:dg).
      - 
      - 11.240
+     - µm
 
 
 
@@ -3349,53 +3971,63 @@
 .. list-table:: Function: Identify nets working between 20V
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(uhvi.1.-)`
      - diff/tap can not straddle UHVI
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(uhvi.2.-)`
      - poly can not straddle UHVI
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(uhvi.3.-)`
      - pwbm.dg must be enclosed by UHVI (exempt inside :drc_tag:`areaid.lw`)
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(uhvi.4.-)`
      - dnw.dg can not straddle UHVI
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(uhvi.5.-)`
      - UHVI must enclose :drc_tag:`areaid.ext`
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(uhvi.6.-)`
      - UHVI must enclose dnwell
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(uhvi.7.-)`
      - natfet.dg must be enclosed by UHVI layer by at least
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(uhvi.8.-)`
      - Minimum width of natfet.dg
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(uhvi.9.-)`
      - Minimum Space spacing of natfet.dg
      - 
      - N/A
+     - N/A
    * - :drc_rule:`(uhvi.10.-)`
      - natfet.dg layer is not allowed
      - 
      - N/A
+     - N/A
 
 
 
@@ -3405,25 +4037,28 @@
 .. list-table:: Function: Identify dnwdiodehv_Psub(BV~60V)
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(ulvt-.1)`
      - :drc_tag:`areaid.low_vt` must enclose dnw for the UHV dnw-psub diode texted "condiodeHvPsub"
      - 
      - NA
+     - 
    * - :drc_rule:`(ulvt-.2)`
      - :drc_tag:`areaid.low_vt` must enclose pwbm.dg for the UHV dnw-psub diode texted "condiodeHvPsub"
      - 
      - NA
+     - 
    * - :drc_rule:`(ulvt-.3)`
      - :drc_tag:`areaid.low_vt` can not straddle UHVI
      - 
      - NA
+     - 
 
 
 
@@ -3433,61 +4068,73 @@
 .. list-table:: Function: Identify pwell resistors
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(pwres.1.-)`
      - Pwell resistor has to be enclosed by the res layer
      - :drc_flag:`NC`
      - 
+     - 
    * - :drc_rule:`(pwres.2.-)`
      - Min/Max width of pwell resistor
      - 
      - 2.650
+     - µm
    * - :drc_rule:`(pwres.3.-)`
      - Min length of pwell resistor
      - 
      - 26.500
+     - µm
    * - :drc_rule:`(pwres.4.-)`
      - Max length of pwell resistor
      - 
      - 265.00
+     - µm
    * - :drc_rule:`(pwres.5.-)`
      - Min/Max spacing of tap inside the pwell resistor to nwell
      - 
      - 0.220
+     - µm
    * - :drc_rule:`(pwres.6.-)`
      - Min/Max width of tap inside the pwell resistor
      - 
      - 0.530
+     - µm
    * - :drc_rule:`(pwres.7a.-)`
      - Every pwres_terminal must enclose 12 licon1
      - 
      - 
+     - 
    * - :drc_rule:`(pwres.7b.-)`
      - Every pwres_terminal must enclose 12 mcons if routed through metal1
      - 
      - 
+     - 
    * - :drc_rule:`(pwres.8.-)`
      - Diff or poly is not allowed in the pwell resistor.
      - 
      - 
+     - 
    * - :drc_rule:`(pwres.9.-)`
      - Nwell surrounding the pwell resistor must have a full ring of contacted tap strapped with metal.
      - 
      - 
+     - 
    * - :drc_rule:`(pwres.10.-)`
      - The res layer must abut pwres_terminal on opposite and parallel edges
      - 
      - 
+     - 
    * - :drc_rule:`(pwres.11.-)`
      - The res layer must abut nwell on opposite and parallel edges not checked in Rule pwres.10
      - 
      - 
+     - 
 
 
 .. figure:: periphery/p056-pwres_dotdash_dotdash.svg
@@ -3502,27 +4149,30 @@
 .. list-table:: Function: Identify RF diodes; Used for RCX
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - :drc_rule:`Name`
      - Description
      - :drc_flag:`Flags`
      - Value
+     - Unit
    * - :drc_rule:`(rfdiode.1.-)`
      - Only 90 degrees allowed for :drc_tag:`areaid.re`
      - 
      - 
+     - 
    * - :drc_rule:`(rfdiode.2.-)`
      - :drc_tag:`areaid.re` must be coincident with nwell for the rf nwell diode
      - 
      - 
+     - 
    * - :drc_rule:`(rfdiode.3.-)`
      - :drc_tag:`areaid.re` must be coincident with innwer edge of the nwell ring for the rf pwell-deep nwell diode
-        Allowed PNP layout
-        Layout: pnppar
-        Allowed NPN layout
-        Layout: npnpar1x1
+       Allowed PNP layout
+       Layout: pnppar
+       Allowed NPN layout
+       Layout: npnpar1x1
+     - 
      - 
      - 
 
diff --git a/docs/rules/periphery/p018-x_dotdash.csv b/docs/rules/periphery/p018-x_dotdash.csv
index cd22507..12da3ec 100644
--- a/docs/rules/periphery/p018-x_dotdash.csv
+++ b/docs/rules/periphery/p018-x_dotdash.csv
@@ -1,52 +1,65 @@
-Name,Description,Flags,Value

-(x.1a),"p1m.md (OPC), DECA and AMKOR layers (pi1.dg, pmm.dg, rdl.dg, pi2.dg, ubm.dg, bump.dg) and mask data for p1m, met1, via, met2 must be on a grid of [mm]",,0.001

-(x.1b),Data for SKY130 layout and mask on all layers except those mentioned in 1a must be on a grid of [mm] (except inside Seal ring),,0.005

-(x.2),Angles permitted on: diff,,N/A

-(x.2),"Angles permitted on: diff except for:\n- diff inside ""advSeal_6um* OR cuPillarAdvSeal_6um*"" pcell, \n- diff rings around the die at min total L>1000 um and W=0.3 um",,n x 90

-(x.2),"Angles permitted on: tap (except inside :drc_tag:`areaid.en`), poly (except for ESD flare gates or gated_npn), li1(periphery), licon1, capm, mcon, via, via2. Anchors are exempted.",,n x 90

-(x.2),Angles permitted on: via3 and via4. Anchors are exempted.,,n x 90

-(x.2a),Analog circuits identified by :drc_tag:`areaid.analog` to use rectangular diff and tap geometries only; that are not to be merged into more complex shapes (T's or L's),,

-(x.2c),"45 degree angles allowed on diff, tap inside UHVI",,

-(x.3),Angles permitted on all other layers and in the seal ring for all the layers,,

-(x.3a),"Angles permitted on all other layers except WLCSP layers (pmm, rdl, pmm2, ubm and bump)",,n x 45

-(x.4),Electrical DR cover layout guidelines for electromigration,NC,

-(x.5),"All ""pin""polygons must be within the ""drawing"" polygons of the layer",AL,

-(x.6),All intra-layer separation checks will include a notch check,,

-(x.7),Mask layer line and space checks must be done on all layers (checked with s.x rules),NC,

-(x.8),"Use of areaid ""core"" layer (""coreid"") must be approved by technology",NC,

-(x.9),"Shapes on maskAdd or maskDrop layers (""serifs"") are allowed in core only. Exempted are: \n- cfom md/mp inside ""advSeal_6um* OR cuPillarAdvSeal_6um*"" pcell \n- diff rings around the die at min total L>1000 um and W=0.3 um, and PMM/PDMM inside areaid:sl",,

-(x.9),"Shapes on maskAdd or maskDrop layers (""serifs"") are allowed in core only. PMM/PDMM inside areaid:sl are excluded.",,N/A

-(x.10),"Res purpose layer for (diff, poly) cannot overlap licon1",,

-(x.11),Metal fuses are drawn in met2,LVS,N/A

-(x.11),Metal fuses are drawn in met3,LVS,N/A

-(x.11),Metal fuses are drawn in met4,LVS,

-(x.\n12a\n12b\n12c),"To comply with the minimum spacing requirement for layer X in the frame:\n- Spacing of :drc_tag:`areaid.mt` to any non-ID layer\n- Enclosure of any non-ID layer by :drc_tag:`areaid.mt`\n- Rules exempted for cells with name ""*_buildspace""",F,

-(x.12d),- Spacing of :drc_tag:`areaid.mt` to huge_metX (Exempt met3.dg),F,N/A

-(x.12d),- Spacing of :drc_tag:`areaid.mt` to huge_metX (Exempt met5.dg),F,

-(x.12e),- Enclosure of huge_metX by :drc_tag:`areaid.mt` (Exempt met3.dg),F,N/A

-(x.12e),- Enclosure of huge_metX by :drc_tag:`areaid.mt` (Exempt met5.dg),F,

-(x.13),Spacing between features located across areaid:ce is checked by …,,

-(x.14),Width of features straddling areaid:ce is checked by …,,

-(x.15a),"Drawn compatible, mask, and waffle-drop layers are allowed only inside areaid:mt (i.e., etest modules), or inside areaid:sl (i.e., between the outer and inner areaid:sl edges, but not in the die) or inside areaid:ft (i.e., frame, blankings). Exception: FOM/P1M/Metal waffle drop are allowed inside the die",P,

-(x.15b),"Rule X.15a exempted for cpmm.dg inside cellnames ""PadPLfp"", ""padPLhp"", ""padPLstg"" and ""padPLwlbi"" (for the SKY130di-5r-gsmc flow)",EXEMPT,

-(x.16),"Die must not overlap :drc_tag:`areaid.mt` (rule waived for test chips and exempted for cellnames ""*tech_CD_*"", ""*_techCD_*"", ""lazX_*"" or ""lazY_*"" )",,

-(x.17),"All labels must be within the ""drawing"" polygons of the layer; This check is enabled by using switch ""floating_labels""; Identifies floating labels which appear as warnings in LVS. Using this check would enable cleaner LVS run; Not a gate for tapeout",,

-(x.18),"Use redundant mcon, via, via2, via3 and via4 (Locations where additional vias/contacts can be added to existing single vias/contacts will be identified by this rule).\nSingle via under :drc_tag:`areaid.core` and :drc_tag:`areaid.standarc` are excluded from the single via check",RR,

-(x.19),"Lower left corner of the seal ring should be at origin i.e (0,0)",,

-(x.20),"Min spacing between pins on the same layer (center to center); Check enabled by switch ""IP_block""",,

-(x.21),prunde.dg is allowed only inside :drc_tag:`areaid.mt` or :drc_tag:`areaid.sc`,,

-(x.22),"No floating interconnects (poly, li1, met1-met5) or capm allowed; Rule flags interconnects with no path to poly, difftap or metal pins. Exempt floating layers can be excluded using poly_float, li1_float, m1_float, m2_float, m3_float, m4_float and m5_float text labels. Also flags an error if these text labels are placed on connected layers (not floating) and if the labels are not over the appropriate metal layer.  \nIf floating interconnects need to be connected at a higher level (Parent IP or Full chip), such floating interconnects can be exempted using poly_tie, li1_tie, m1_tie, m2_tie, m3_tie, m4_tie and m5_tie text labels.\nIt is the responsibility of the IP owner and chip/product owner to communicate and agree to the node each of these texted lines is connected to, if there is any risk to how a line is tied, and to what node.\nOnly metals outside :drc_tag:`areaid.stdcell` are checked.\n
+Name,Description,Flags,Value,Unit
+(x.1a),"p1m.md (OPC), DECA and AMKOR layers (pi1.dg, pmm.dg, rdl.dg, pi2.dg, ubm.dg, bump.dg) and mask data for p1m, met1, via, met2 must be on a grid of mm",,0.001,mm
+(x.1b),Data for SKY130 layout and mask on all layers except those mentioned in 1a must be on a grid of mm (except inside Seal ring),,0.005,mm
+(x.2),Angles permitted on: diff,,N/A,N/A
+(x.2),"Angles permitted on: diff except for:
+  - diff inside ""advSeal_6µm* OR cuPillarAdvSeal_6µm*"" pcell, 
+  - diff rings around the die at min total L>1000 µm and W=0.3 µm",,n x 90,deg
+(x.2),"Angles permitted on: tap (except inside :drc_tag:`areaid.en`), poly (except for ESD flare gates or gated_npn), li1(periphery), licon1, capm, mcon, via, via2. Anchors are exempted.",,n x 90,deg
+(x.2),Angles permitted on: via3 and via4. Anchors are exempted.,,n x 90,deg
+(x.2a),Analog circuits identified by :drc_tag:`areaid.analog` to use rectangular diff and tap geometries only; that are not to be merged into more complex shapes (T's or L's),,,
+(x.2c),"45 degree angles allowed on diff, tap inside UHVI",,,
+(x.3),Angles permitted on all other layers and in the seal ring for all the layers,,,
+(x.3a),"Angles permitted on all other layers except WLCSP layers (pmm, rdl, pmm2, ubm and bump)",,n x 45,deg
+(x.4),Electrical DR cover layout guidelines for electromigration,NC,,
+(x.5),"All ""pin""polygons must be within the ""drawing"" polygons of the layer",AL,,
+(x.6),All intra-layer separation checks will include a notch check,,,
+(x.7),Mask layer line and space checks must be done on all layers (checked with s.x rules),NC,,
+(x.8),"Use of areaid ""core"" layer (""coreid"") must be approved by technology",NC,,
+(x.9),"Shapes on maskAdd or maskDrop layers (""serifs"") are allowed in core only. Exempted are: 
+  - cfom md/mp inside ""advSeal_6um* OR cuPillarAdvSeal_6um*"" pcell 
+  - diff rings around the die at min total L>1000 um and W=0.3 um, and PMM/PDMM inside areaid:sl",,,
+(x.9),"Shapes on maskAdd or maskDrop layers (""serifs"") are allowed in core only. PMM/PDMM inside areaid:sl are excluded.",,N/A,N/A
+(x.10),"Res purpose layer for (diff, poly) cannot overlap licon1",,,
+(x.11),Metal fuses are drawn in met2,LVS,N/A,N/A
+(x.11),Metal fuses are drawn in met3,LVS,N/A,N/A
+(x.11),Metal fuses are drawn in met4,LVS,,
+(x.\n12a\n12b\n12c),"To comply with the minimum spacing requirement for layer X in the frame:
+  - Spacing of :drc_tag:`areaid.mt` to any non-ID layer
+  - Enclosure of any non-ID layer by :drc_tag:`areaid.mt`
+  - Rules exempted for cells with name ""*_buildspace""",F,,
+(x.12d),Spacing of :drc_tag:`areaid.mt` to huge_metX (Exempt met3.dg),F,N/A,N/A
+(x.12d),Spacing of :drc_tag:`areaid.mt` to huge_metX (Exempt met5.dg),F,,
+(x.12e),Enclosure of huge_metX by :drc_tag:`areaid.mt` (Exempt met3.dg),F,N/A,N/A
+(x.12e),Enclosure of huge_metX by :drc_tag:`areaid.mt` (Exempt met5.dg),F,,
+(x.13),Spacing between features located across areaid:ce is checked by …,,,
+(x.14),Width of features straddling areaid:ce is checked by …,,,
+(x.15a),"Drawn compatible, mask, and waffle-drop layers are allowed only inside areaid:mt (i.e., etest modules), or inside areaid:sl (i.e., between the outer and inner areaid:sl edges, but not in the die) or inside areaid:ft (i.e., frame, blankings). Exception: FOM/P1M/Metal waffle drop are allowed inside the die",P,,
+(x.15b),"Rule X.15a exempted for cpmm.dg inside cellnames ""PadPLfp"", ""padPLhp"", ""padPLstg"" and ""padPLwlbi"" (for the SKY130di-5r-gsmc flow)",EXEMPT,,
+(x.16),"Die must not overlap :drc_tag:`areaid.mt` (rule waived for test chips and exempted for cellnames ""*tech_CD_*"", ""*_techCD_*"", ""lazX_*"" or ""lazY_*"" )",,,
+(x.17),"All labels must be within the ""drawing"" polygons of the layer; This check is enabled by using switch ""floating_labels""; Identifies floating labels which appear as warnings in LVS. Using this check would enable cleaner LVS run; Not a gate for tapeout",,,
+(x.18),"| Use redundant mcon, via, via2, via3 and via4 (Locations where additional vias/contacts can be added to existing single vias/contacts will be identified by this rule).
+| Single via under :drc_tag:`areaid.core` and :drc_tag:`areaid.standarc` are excluded from the single via check",RR,,
+(x.19),"Lower left corner of the seal ring should be at origin i.e (0,0)",,,
+(x.20),"Min spacing between pins on the same layer (center to center); Check enabled by switch ""IP_block""",,,
+(x.21),prunde.dg is allowed only inside :drc_tag:`areaid.mt` or :drc_tag:`areaid.sc`,,,
+(x.22),"| No floating interconnects (poly, li1, met1-met5) or capm allowed; Rule flags interconnects with no path to poly, difftap or metal pins. Exempt floating layers can be excluded using poly_float, li1_float, m1_float, m2_float, m3_float, m4_float and m5_float text labels. Also flags an error if these text labels are placed on connected layers (not floating) and if the labels are not over the appropriate metal layer.  
+| If floating interconnects need to be connected at a higher level (Parent IP or Full chip), such floating interconnects can be exempted using poly_tie, li1_tie, m1_tie, m2_tie, m3_tie, m4_tie and m5_tie text labels.
+| It is the responsibility of the IP owner and chip/product owner to communicate and agree to the node each of these texted lines is connected to, if there is any risk to how a line is tied, and to what node.
+| Only metals outside :drc_tag:`areaid.stdcell` are checked.
+| 
 The following are exempt from x.22 violations: _techCD_ , inductor.dg, modulecut, capacitors and s8blerf
-The 'notPublicCell' switch will deactivate this rule",RC,

-(x.23a),:drc_tag:`areaid.sl` must not overlap diff,,N/A

-(x.23b),diff cannot straddle :drc_tag:`areaid.sl`,,

-(x.23c),":drc_tag:`areaid.sl` must not overlap tap, poly, li1 and metX",,

-(x.23d),":drc_tag:`areaid.sl` must not overlap tap, poly",,N/A

-(x.23e),"areaid:sl must not overlap li1 and metX for pcell ""advSeal_6um""",,N/A

-(x.23f),"areaid:SubstrateCut (:drc_tag:`areaid.st`, local_sub) must not straddle p+ tap",RR,

-(x.24),condiode label must be in iso_pwell,,

-(x.25),"pnp.dg must be only within cell name ""s8rf_pnp"", ""s8rf_pnp5x"" or ""s8tesd_iref_pnp"", ""stk14ecx_*""",,

-(x.26),"""advSeal_6um"" pcell must overlap diff",,

-(x.27),"If the sealring is present, then partnum is required.  To exempt the requirement, place text.dg saying ""partnum_not_necessary"".\n""partnum*block"" pcell should be used instead of ""partnum*"" pcells",RR,N/A

-(x.28),Min width of :drc_tag:`areaid.sl`,,N/A

-(x.29),nfet must be enclosed by dnwell. Rule is checked when switch nfet_in_dnwell is turned on.,,

+The 'notPublicCell' switch will deactivate this rule",RC,,
+(x.23a),:drc_tag:`areaid.sl` must not overlap diff,,N/A,N/A
+(x.23b),diff cannot straddle :drc_tag:`areaid.sl`,,,
+(x.23c),":drc_tag:`areaid.sl` must not overlap tap, poly, li1 and metX",,,
+(x.23d),":drc_tag:`areaid.sl` must not overlap tap, poly",,N/A,N/A
+(x.23e),"areaid:sl must not overlap li1 and metX for pcell ""advSeal_6um""",,N/A,N/A
+(x.23f),"areaid:SubstrateCut (:drc_tag:`areaid.st`, local_sub) must not straddle p+ tap",RR,,
+(x.24),condiode label must be in iso_pwell,,,
+(x.25),"pnp.dg must be only within cell name ""s8rf_pnp"", ""s8rf_pnp5x"" or ""s8tesd_iref_pnp"", ""stk14ecx_*""",,,
+(x.26),"""advSeal_6um"" pcell must overlap diff",,,
+(x.27),"| If the sealring is present, then partnum is required.  To exempt the requirement, place text.dg saying ""partnum_not_necessary"".
+| ""partnum*block"" pcell should be used instead of ""partnum*"" pcells",RR,N/A,N/A
+(x.28),Min width of :drc_tag:`areaid.sl`,,N/A,N/A
+(x.29),nfet must be enclosed by dnwell. Rule is checked when switch nfet_in_dnwell is turned on.,,,
diff --git a/docs/rules/periphery/p020-dnwell_dotdash.csv b/docs/rules/periphery/p020-dnwell_dotdash.csv
index d87b1d6..b537658 100644
--- a/docs/rules/periphery/p020-dnwell_dotdash.csv
+++ b/docs/rules/periphery/p020-dnwell_dotdash.csv
@@ -1,11 +1,11 @@
-Name,Description,Flags,Value

-(dnwell.2),Min width of deep nwell,,3.000

-(dnwell.3),Min spacing between deep nwells. Rule exempt inside UHVI.,,6.300

-(dnwell.3a),Min spacing between deep nwells on same net inside UHVI.,,N/A

-(dnwell.3b),Min spacing between deep-nwells inside UHVI and deep-nwell outside UHVI,,N/A

-(dnwell.3c),Min spacing between deep-nwells inside UHVI and nwell outsideUHVI,,N/A

-(dnwell.3d),Min spacing between deep-nwells inside UHVI on different nets,,N/A

-(dnwell.4),Dnwell can not overlap pnp:dg,,

-(dnwell.5),P+_diff can not straddle Dnwell,,

-(dnwell.6),RF NMOS must be enclosed by deep nwell (RF FETs are listed in $DESIGN/config/tech/model_set/calibre/fixed_layout_model_map of corresponding techs),,

-(dnwell.7),Dnwell can not straddle areaid:substratecut,,

+Name,Description,Flags,Value,Unit
+(dnwell.2),Min width of deep nwell,,3.000,µm
+(dnwell.3),Min spacing between deep nwells. Rule exempt inside UHVI.,,6.300,µm
+(dnwell.3a),Min spacing between deep nwells on same net inside UHVI.,,N/A,N/A
+(dnwell.3b),Min spacing between deep-nwells inside UHVI and deep-nwell outside UHVI,,N/A,N/A
+(dnwell.3c),Min spacing between deep-nwells inside UHVI and nwell outsideUHVI,,N/A,N/A
+(dnwell.3d),Min spacing between deep-nwells inside UHVI on different nets,,N/A,N/A
+(dnwell.4),Dnwell can not overlap pnp:dg,,,
+(dnwell.5),P+_diff can not straddle Dnwell,,,
+(dnwell.6),RF NMOS must be enclosed by deep nwell (RF FETs are listed in $DESIGN/config/tech/model_set/calibre/fixed_layout_model_map of corresponding techs),,,
+(dnwell.7),Dnwell can not straddle areaid:substratecut,,,
diff --git a/docs/rules/periphery/p021-nwell_dotdash.csv b/docs/rules/periphery/p021-nwell_dotdash.csv
index 12bece3..136e250 100644
--- a/docs/rules/periphery/p021-nwell_dotdash.csv
+++ b/docs/rules/periphery/p021-nwell_dotdash.csv
@@ -1,13 +1,13 @@
-Name,Description,Flags,Value

-(nwell.1),Width of nwell,,0.840

-(nwell.2a),Spacing between two n-wells,,1.270

-(nwell.2b),Manual merge wells if less than minimum,,

-(nwell.4),All n-wells will contain metal-contacted tap  (rule checks only for licon on tap) . Rule exempted from high voltage cells inside UHVI,,

+Name,Description,Flags,Value,Unit
+(nwell.1),Width of nwell,,0.840,µm
+(nwell.2a),Spacing between two n-wells,,1.270,µm
+(nwell.2b),Manual merge wells if less than minimum,,,
+(nwell.4),All n-wells will contain metal-contacted tap  (rule checks only for licon on tap) . Rule exempted from high voltage cells inside UHVI,,,
 (nwell.5),"Deep nwell must be enclosed by nwell by atleast... Exempted inside UHVI or :drc_tag:`areaid.lw`
-Nwells can merge over deep nwell if spacing too small (as in rule nwell.2)",TC,0.400

-(nwell.5a),min enclosure of nwell by dnwell inside UHVI,,N/A

-(nwell.5b),nwell inside UHVI must not be on the same net as nwell outside UHVI,,N/A

-(nwell.6),Min enclosure of nwell hole by deep nwell outside UHVI,TC,1.030

+Nwells can merge over deep nwell if spacing too small (as in rule nwell.2)",TC,0.400,µm
+(nwell.5a),min enclosure of nwell by dnwell inside UHVI,,N/A,N/A
+(nwell.5b),nwell inside UHVI must not be on the same net as nwell outside UHVI,,N/A,N/A
+(nwell.6),Min enclosure of nwell hole by deep nwell outside UHVI,TC,1.030,µm
 (nwell.7),"Min spacing between nwell and deep nwell on separate nets
 Spacing between nwell and deep nwell on the same net is set by the sum of the rules nwell.2 and nwell.5. By default, DRC run on a cell checks for the separate-net spacing, when nwell and deep nwell nets are separate within the cell hierarchy and are joined in the upper hierarchy. To allow net names to be joined and make the same-net rule applicable in this case, the ""joinNets"" switch should be turned on.
-waffle_chip",TC,4.500

+waffle_chip",TC,4.500,µm
diff --git a/docs/rules/periphery/p022-pwbm_dotdash.csv b/docs/rules/periphery/p022-pwbm_dotdash.csv
index cbbf5da..bce812d 100644
--- a/docs/rules/periphery/p022-pwbm_dotdash.csv
+++ b/docs/rules/periphery/p022-pwbm_dotdash.csv
@@ -1,6 +1,6 @@
-Name,Description,Flags,Value

-(pwbm.1),Min width of pwbm.dg,,N/A

-(pwbm.2),Min spacing between two pwbm.dg inside UHVI,,N/A

-(pwbm.3),Min enclosure of dnwell:dg by pwbm.dg inside UHVI (exempt pwbm hole inside dnwell),,N/A

-(pwbm.4),dnwell inside UHVI must be enclosed by pwbm (exempt pwbm hole inside dnwell),,N/A

-(pwbm.5),Min Space between two pwbm holes inside UHVI,,N/A

+Name,Description,Flags,Value,Unit
+(pwbm.1),Min width of pwbm.dg,,N/A,N/A
+(pwbm.2),Min spacing between two pwbm.dg inside UHVI,,N/A,N/A
+(pwbm.3),Min enclosure of dnwell:dg by pwbm.dg inside UHVI (exempt pwbm hole inside dnwell),,N/A,N/A
+(pwbm.4),dnwell inside UHVI must be enclosed by pwbm (exempt pwbm hole inside dnwell),,N/A,N/A
+(pwbm.5),Min Space between two pwbm holes inside UHVI,,N/A,N/A
diff --git a/docs/rules/periphery/p022-pwdem_dotdash.csv b/docs/rules/periphery/p022-pwdem_dotdash.csv
index 7f181a9..e657786 100644
--- a/docs/rules/periphery/p022-pwdem_dotdash.csv
+++ b/docs/rules/periphery/p022-pwdem_dotdash.csv
@@ -1,7 +1,7 @@
-Name,Description,Flags,Value

-(pwdem.1),Min width of pwdem.dg,,N/A

-(pwdem.2),Min spacing between two pwdem.dg inside UHVI on same net,,N/A

-(pwdem.3),Min enclosure of pwdem:dg by pwbm.dg inside UHVI,,N/A

-(pwdem.4),pwdem.dg must be enclosed by UHVI,,N/A

-(pwdem.5),pwdem.dg inside UHVI must be enclosed by deep nwell,,N/A

-(pwdem.6),Min enclosure of pwdem:dg by deep nwell inside UHVI,,N/A

+Name,Description,Flags,Value,Unit
+(pwdem.1),Min width of pwdem.dg,,N/A,N/A
+(pwdem.2),Min spacing between two pwdem.dg inside UHVI on same net,,N/A,N/A
+(pwdem.3),Min enclosure of pwdem:dg by pwbm.dg inside UHVI,,N/A,N/A
+(pwdem.4),pwdem.dg must be enclosed by UHVI,,N/A,N/A
+(pwdem.5),pwdem.dg inside UHVI must be enclosed by deep nwell,,N/A,N/A
+(pwdem.6),Min enclosure of pwdem:dg by deep nwell inside UHVI,,N/A,N/A
diff --git a/docs/rules/periphery/p023-hvtp_dotdash.csv b/docs/rules/periphery/p023-hvtp_dotdash.csv
index 1290173..341e2a2 100644
--- a/docs/rules/periphery/p023-hvtp_dotdash.csv
+++ b/docs/rules/periphery/p023-hvtp_dotdash.csv
@@ -1,7 +1,7 @@
-Name,Description,Flags,Value

-(hvtp.1),Min width of hvtp,,0.380

-(hvtp.2),Min spacing between hvtp to hvtp,,0.380

-(hvtp.3),Min enclosure of pfet by hvtp,P,0.180

-(hvtp.4),Min spacing between pfet and hvtp,P,0.180

-(hvtp.5),Min area of hvtp (um^2),,0.265

-(hvtp.6),Min area of hvtp Holes (um^2),,0.265

+Name,Description,Flags,Value,Unit
+(hvtp.1),Min width of hvtp,,0.380,µm
+(hvtp.2),Min spacing between hvtp to hvtp,,0.380,µm
+(hvtp.3),Min enclosure of pfet by hvtp,P,0.180,µm
+(hvtp.4),Min spacing between pfet and hvtp,P,0.180,µm
+(hvtp.5),Min area of hvtp,,0.265,µm²
+(hvtp.6),Min area of hvtp Holes,,0.265,µm²
diff --git a/docs/rules/periphery/p024-hvtr_dotdash.csv b/docs/rules/periphery/p024-hvtr_dotdash.csv
index 98b5bc4..ac0d962 100644
--- a/docs/rules/periphery/p024-hvtr_dotdash.csv
+++ b/docs/rules/periphery/p024-hvtr_dotdash.csv
@@ -1,4 +1,4 @@
-Name,Description,Flags,Value

-(hvtr.1),Min width of hvtr,,0.380

-(hvtr.2),Min spacing between hvtp to hvtr,,0.380

-(hvtr.3),Min enclosure of pfet by hvtr,P,0.180

+Name,Description,Flags,Value,Unit
+(hvtr.1),Min width of hvtr,,0.380,µm
+(hvtr.2),Min spacing between hvtp to hvtr,,0.380,µm
+(hvtr.3),Min enclosure of pfet by hvtr,P,0.180,µm
diff --git a/docs/rules/periphery/p024-lvtn_dotdash.csv b/docs/rules/periphery/p024-lvtn_dotdash.csv
index ac4693d..37dd940 100644
--- a/docs/rules/periphery/p024-lvtn_dotdash.csv
+++ b/docs/rules/periphery/p024-lvtn_dotdash.csv
@@ -1,11 +1,11 @@
-Name,Description,Flags,Value

-(lvtn.1a),Min width of lvtn,,0.380

-(lvtn.2),Min space lvtn to lvtn,,0.380

-(lvtn.3a),Min spacing of lvtn to gate. Rule exempted inside UHVI.,P,0.180

-(lvtn.3b),Min spacing of lvtn to pfet along the S/D direction,P,0.235

-(lvtn.4b),Min enclosure of gate by lvtn. Rule exempted inside UHVI.,P,0.180

-(lvtn.9),"Min spacing, no overlap, between lvtn and hvtp",,0.380

-(lvtn.10),Min enclosure of lvtn by (nwell not overlapping Var_channel) (exclude coincident edges),,0.380

-(lvtn.12),Min spacing between lvtn and (nwell inside :drc_tag:`areaid.ce`),,0.380

-(lvtn.13),Min area of lvtn (um^2),,0.265

-(lvtn.14),Min area of lvtn Holes (um^2),,0.265

+Name,Description,Flags,Value,Unit
+(lvtn.1a),Min width of lvtn,,0.380,µm
+(lvtn.2),Min space lvtn to lvtn,,0.380,µm
+(lvtn.3a),Min spacing of lvtn to gate. Rule exempted inside UHVI.,P,0.180,µm
+(lvtn.3b),Min spacing of lvtn to pfet along the S/D direction,P,0.235,µm
+(lvtn.4b),Min enclosure of gate by lvtn. Rule exempted inside UHVI.,P,0.180,µm
+(lvtn.9),"Min spacing, no overlap, between lvtn and hvtp",,0.380,µm
+(lvtn.10),Min enclosure of lvtn by (nwell not overlapping Var_channel) (exclude coincident edges),,0.380,µm
+(lvtn.12),Min spacing between lvtn and (nwell inside :drc_tag:`areaid.ce`),,0.380,µm
+(lvtn.13),Min area of lvtn,,0.265,µm²
+(lvtn.14),Min area of lvtn Holes,,0.265,µm²
diff --git a/docs/rules/periphery/p025-ncm_dotdash.csv b/docs/rules/periphery/p025-ncm_dotdash.csv
index 4493c40..e59cb84 100644
--- a/docs/rules/periphery/p025-ncm_dotdash.csv
+++ b/docs/rules/periphery/p025-ncm_dotdash.csv
@@ -1,12 +1,12 @@
-Name,Description,Flags,Value

-(ncm.X.2),Ncm overlapping areaid:ce is checked for core rules only,,

-(ncm.X.3),Ncm overlapping core cannot overlap N+diff in periphery,TC,

-(ncm.1),Width of ncm,,0.380

-(ncm.2a),Spacing of ncm to ncm,,0.380

-(ncm.2b),Manual merge ncm if space is below minimum,,

-(ncm.3),Min enclosure of P+diff by Ncm,P,0.180

-(ncm.4),Min enclosure of P+diff within (areaid:ed AndNot areaid:de) by Ncm,P,0.180

-(ncm.5),"Min space, no overlap, between ncm and (LVTN_gate) OR (diff containing lvtn)",P,0.230

-(ncm.6),"Min space, no overlap, between ncm and nfet",P,0.200

-(ncm.7),Min area of ncm (um^2),,0.265

-(ncm.8),Min area of ncm Holes (um^2),,0.265

+Name,Description,Flags,Value,Unit
+(ncm.X.2),Ncm overlapping areaid:ce is checked for core rules only,,,
+(ncm.X.3),Ncm overlapping core cannot overlap N+diff in periphery,TC,,
+(ncm.1),Width of ncm,,0.380,µm
+(ncm.2a),Spacing of ncm to ncm,,0.380,µm
+(ncm.2b),Manual merge ncm if space is below minimum,,,
+(ncm.3),Min enclosure of P+diff by Ncm,P,0.180,µm
+(ncm.4),Min enclosure of P+diff within (areaid:ed AndNot areaid:de) by Ncm,P,0.180,µm
+(ncm.5),"Min space, no overlap, between ncm and (LVTN_gate) OR (diff containing lvtn)",P,0.230,µm
+(ncm.6),"Min space, no overlap, between ncm and nfet",P,0.200,µm
+(ncm.7),Min area of ncm,,0.265,µm²
+(ncm.8),Min area of ncm Holes,,0.265,µm²
diff --git a/docs/rules/periphery/p026-difftap_dotdash.csv b/docs/rules/periphery/p026-difftap_dotdash.csv
index 664bbca..408fd9b 100644
--- a/docs/rules/periphery/p026-difftap_dotdash.csv
+++ b/docs/rules/periphery/p026-difftap_dotdash.csv
@@ -1,16 +1,16 @@
-Name,Description,Flags,Value

-(difftap.1),Width of diff or tap,P,0.150

-(difftap.2),"Minimum channel width (Diff And Poly) except for FETs inside :drc_tag:`areaid.sc`: Rule exempted in the SP8* flows only, for the cells listed in rule difftap.2a",P,0.420

-(difftap.2a),"Minimum channel width (Diff And Poly) for cell names ""s8cell_ee_plus_sseln_a"", ""s8cell_ee_plus_sseln_b"", ""s8cell_ee_plus_sselp_a"", ""s8cell_ee_plus_sselp_b"" , ""s8fpls_pl8"", ""s8fpls_rdrv4"" , ""s8fpls_rdrv4f"" and ""s8fpls_rdrv8""",P,NA

-(difftap.2b),Minimum channel width (Diff And Poly) for FETs inside :drc_tag:`areaid.sc`,P,0.360

-(difftap.3),"Spacing of diff to diff, tap to tap, or non-abutting diff to tap",,0.270

-(difftap.4),Min tap bound by one diffusion,,0.290

-(difftap.5),Min tap bound by two diffusions,P,0.400

-(difftap.6),Diff and tap are not allowed to extend beyond their abutting edge,,

-(difftap.7),Spacing of diff/tap abutting edge to a non-conciding diff or tap edge,NE,0.130

-(difftap.8),Enclosure of (p+) diffusion by N-well. Rule exempted inside UHVI.,DE NE P,0.180

-(difftap.9),Spacing of (n+) diffusion to N-well outside UHVI,DE NE P,0.340

-(difftap.10),Enclosure of (n+)  tap by N-well. Rule exempted inside UHVI.,NE P,0.180

-(difftap.11),Spacing of (p+) tap to  N-well. Rule exempted inside UHVI.,,0.130

-(difftap.12),ESD_nwell_tap is considered shorted to the abutting diff,NC,

-(difftap.13),Diffusion or the RF FETS in Table H5 is defined by Ldiff and Wdiff.,,

+Name,Description,Flags,Value,Unit
+(difftap.1),Width of diff or tap,P,0.150,µm
+(difftap.2),"Minimum channel width (Diff And Poly) except for FETs inside :drc_tag:`areaid.sc`: Rule exempted in the SP8* flows only, for the cells listed in rule difftap.2a",P,0.420,µm
+(difftap.2a),"Minimum channel width (Diff And Poly) for cell names ""s8cell_ee_plus_sseln_a"", ""s8cell_ee_plus_sseln_b"", ""s8cell_ee_plus_sselp_a"", ""s8cell_ee_plus_sselp_b"" , ""s8fpls_pl8"", ""s8fpls_rdrv4"" , ""s8fpls_rdrv4f"" and ""s8fpls_rdrv8""",P,NA,µm
+(difftap.2b),Minimum channel width (Diff And Poly) for FETs inside :drc_tag:`areaid.sc`,P,0.360,µm
+(difftap.3),"Spacing of diff to diff, tap to tap, or non-abutting diff to tap",,0.270,µm
+(difftap.4),Min tap bound by one diffusion,,0.290,
+(difftap.5),Min tap bound by two diffusions,P,0.400,
+(difftap.6),Diff and tap are not allowed to extend beyond their abutting edge,,,
+(difftap.7),Spacing of diff/tap abutting edge to a non-conciding diff or tap edge,NE,0.130,µm
+(difftap.8),Enclosure of (p+) diffusion by N-well. Rule exempted inside UHVI.,DE NE P,0.180,µm
+(difftap.9),Spacing of (n+) diffusion to N-well outside UHVI,DE NE P,0.340,µm
+(difftap.10),Enclosure of (n+)  tap by N-well. Rule exempted inside UHVI.,NE P,0.180,µm
+(difftap.11),Spacing of (p+) tap to  N-well. Rule exempted inside UHVI.,,0.130,µm
+(difftap.12),ESD_nwell_tap is considered shorted to the abutting diff,NC,,
+(difftap.13),Diffusion or the RF FETS in Table H5 is defined by Ldiff and Wdiff.,,,
diff --git a/docs/rules/periphery/p027-tunm_dotdash.csv b/docs/rules/periphery/p027-tunm_dotdash.csv
index 06f5e7a..627ce78 100644
--- a/docs/rules/periphery/p027-tunm_dotdash.csv
+++ b/docs/rules/periphery/p027-tunm_dotdash.csv
@@ -1,9 +1,9 @@
-Name,Description,Flags,Value

-(tunm.1),Min width of tunm,,0.410

-(tunm.2),Min spacing of tunm to tunm,,0.500

-(tunm.3),Extension of tunm beyond (poly and diff),,0.095

-(tunm.4),Min spacing of tunm to (poly and diff) outside tunm,,0.095

-(tunm.5),(poly and diff) may not straddle tunm,,

-(tunm.6a),Tunm outside deep n-well is not allowed,TC,

-(tunm.7),Min tunm area,,0.672

-(tunm.8),tunm must be enclosed by :drc_tag:`areaid.ce`,,

+Name,Description,Flags,Value,Unit
+(tunm.1),Min width of tunm,,0.410,µm
+(tunm.2),Min spacing of tunm to tunm,,0.500,µm
+(tunm.3),Extension of tunm beyond (poly and diff),,0.095,
+(tunm.4),Min spacing of tunm to (poly and diff) outside tunm,,0.095,µm
+(tunm.5),(poly and diff) may not straddle tunm,,,
+(tunm.6a),Tunm outside deep n-well is not allowed,TC,,
+(tunm.7),Min tunm area,,0.672,µm²
+(tunm.8),tunm must be enclosed by :drc_tag:`areaid.ce`,,,
diff --git a/docs/rules/periphery/p028-poly_dotdash.csv b/docs/rules/periphery/p028-poly_dotdash.csv
index 9f04c28..224fef5 100644
--- a/docs/rules/periphery/p028-poly_dotdash.csv
+++ b/docs/rules/periphery/p028-poly_dotdash.csv
@@ -1,18 +1,18 @@
-Name,Description,Flags,Value

-(poly.X.1),All FETs would be checked for W/Ls as documented in spec 001-02735  (Exempt FETs that are pruned; exempt for W/L's inside :drc_tag:`areaid.sc` and inside cell name scs8*decap* and listed in the MRGA as a decap only W/L),,

-(poly.X.1a),Min & max dummy_poly L is equal to min L allowed for corresponding device type (exempt rule for dummy_poly in cells listed on Table H3),,

-(poly.1a),Width of poly,,0.150

-(poly.1b),Min channel length (poly width) for pfet overlapping lvtn (exempt rule for dummy_poly in cells listed on Table H3),,0.350

-(poly.2),Spacing of poly to poly except for poly.c2 and poly.c3; Exempt cell: sr_bltd_eq where it is same as poly.c2,,0.210

-(poly.3),Min poly resistor width,,0.330

-(poly.4),Spacing of poly on field to diff (parallel edges only),P,0.075

-(poly.5),Spacing of poly on field to tap,P,0.055

-(poly.6),Spacing of poly on diff to abutting tap (min source),P,0.300

-(poly.7),Extension of diff beyond poly (min drain),P,0.250

-(poly.8),Extension of poly beyond diffusion (endcap),P,0.130

-(poly.9),Poly resistor spacing to poly or spacing (no overlap) to diff/tap,,0.480

-(poly.10),Poly can't overlap inner corners of diff,,

-(poly.11),No 90 deg turns of poly on diff,,

-(poly.12),"(Poly NOT (nwell NOT hvi)) may not overlap tap; Rule exempted for cell name ""s8fgvr_n_fg2"" and gated_npn and inside UHVI.",P,

-(poly.15),Poly must not overlap diff:rs,,

-(poly.16),"Inside RF FETs defined in Table H5, poly cannot overlap poly across multiple adjacent instances",,

+Name,Description,Flags,Value,Unit
+(poly.X.1),All FETs would be checked for W/Ls as documented in spec 001-02735  (Exempt FETs that are pruned; exempt for W/L's inside :drc_tag:`areaid.sc` and inside cell name scs8*decap* and listed in the MRGA as a decap only W/L),,,
+(poly.X.1a),Min & max dummy_poly L is equal to min L allowed for corresponding device type (exempt rule for dummy_poly in cells listed on Table H3),,,
+(poly.1a),Width of poly,,0.150,µm
+(poly.1b),Min channel length (poly width) for pfet overlapping lvtn (exempt rule for dummy_poly in cells listed on Table H3),,0.350,µm
+(poly.2),Spacing of poly to poly except for poly.c2 and poly.c3; Exempt cell: sr_bltd_eq where it is same as poly.c2,,0.210,µm
+(poly.3),Min poly resistor width,,0.330,µm
+(poly.4),Spacing of poly on field to diff (parallel edges only),P,0.075,µm
+(poly.5),Spacing of poly on field to tap,P,0.055,µm
+(poly.6),Spacing of poly on diff to abutting tap (min source),P,0.300,µm
+(poly.7),Extension of diff beyond poly (min drain),P,0.250,
+(poly.8),Extension of poly beyond diffusion (endcap),P,0.130,
+(poly.9),Poly resistor spacing to poly or spacing (no overlap) to diff/tap,,0.480,µm
+(poly.10),Poly can't overlap inner corners of diff,,,
+(poly.11),No 90 deg turns of poly on diff,,,
+(poly.12),"(Poly NOT (nwell NOT hvi)) may not overlap tap; Rule exempted for cell name ""s8fgvr_n_fg2"" and gated_npn and inside UHVI.",P,,
+(poly.15),Poly must not overlap diff:rs,,,
+(poly.16),"Inside RF FETs defined in Table H5, poly cannot overlap poly across multiple adjacent instances",,,
diff --git a/docs/rules/periphery/p029-rpm_dotdash.csv b/docs/rules/periphery/p029-rpm_dotdash.csv
index ce67a05..46bedd2 100644
--- a/docs/rules/periphery/p029-rpm_dotdash.csv
+++ b/docs/rules/periphery/p029-rpm_dotdash.csv
@@ -1,22 +1,26 @@
-Name,Description,Flags,Value

-(rpm.1a),Min width of rpm,,1.270

-(rpm.1b),Min/Max prec_resistor width xhrpoly_0p35,,0.350

-(rpm.1c),Min/Max prec_resistor width xhrpoly_0p69,,0.690

-(rpm.1d),Min/Max prec_resistor width xhrpoly_1p41,,1.410

-(rpm.1e),Min/Max prec_resistor width xhrpoly_2p85,,2.850

-(rpm.1f),Min/Max prec_resistor width xhrpoly_5p73,,5.730

-(rpm.1g),Only 1 licon is allowed in xhrpoly_0p35 prec_resistor_terminal,,

-(rpm.1h),Only 1 licon is allowed in xhrpoly_0p69 prec_resistor_terminal,,

-(rpm.1i),Only 2 licons are allowed in xhrpoly_1p41 prec_resistor_terminal,,

-(rpm.1j),Only 4 licons are allowed in xhrpoly_2p85 prec_resistor_terminal,,

-(rpm.1k),Only 8 licons are allowed in xhrpoly_5p73 prec_resistor_terminal,,

-(rpm.2),Min spacing of rpm to rpm,,0.840

-(rpm.3),rpm must enclose prec_resistor by atleast,,0.200

-(rpm.4),prec_resistor must be enclosed by psdm by atleast,,0.110

-(rpm.5),prec_resistor must be enclosed by npc by atleast,,0.095

-(rpm.6),"Min spacing, no overlap, of rpm and nsdm",,0.200

-(rpm.7),Min spacing between rpm and poly,,0.200

-(rpm.8),poly must not straddle rpm,,

-(rpm.9),"Min space, no overlap, between prec_resistor and hvntm",,0.185

-(rpm.10),Min spacing of rpm to pwbm,,N/A

-(rpm.11),rpm should not overlap or straddle pwbm except cells\ns8usbpdv2_csa_top\ns8usbpdv2_20vconn_sw_300ma_ovp_ngate_unit\ns8usbpdv2_20vconn_sw_300ma_ovp\ns8usbpdv2_20sbu_sw_300ma_ovp,,N/A

+Name,Description,Flags,Value,Unit
+(rpm.1a),Min width of rpm,,1.270,µm
+(rpm.1b),Min/Max prec_resistor width xhrpoly_0p35,,0.350,µm
+(rpm.1c),Min/Max prec_resistor width xhrpoly_0p69,,0.690,µm
+(rpm.1d),Min/Max prec_resistor width xhrpoly_1p41,,1.410,µm
+(rpm.1e),Min/Max prec_resistor width xhrpoly_2p85,,2.850,µm
+(rpm.1f),Min/Max prec_resistor width xhrpoly_5p73,,5.730,µm
+(rpm.1g),Only 1 licon is allowed in xhrpoly_0p35 prec_resistor_terminal,,,
+(rpm.1h),Only 1 licon is allowed in xhrpoly_0p69 prec_resistor_terminal,,,
+(rpm.1i),Only 2 licons are allowed in xhrpoly_1p41 prec_resistor_terminal,,,
+(rpm.1j),Only 4 licons are allowed in xhrpoly_2p85 prec_resistor_terminal,,,
+(rpm.1k),Only 8 licons are allowed in xhrpoly_5p73 prec_resistor_terminal,,,
+(rpm.2),Min spacing of rpm to rpm,,0.840,µm
+(rpm.3),rpm must enclose prec_resistor by atleast,,0.200,
+(rpm.4),prec_resistor must be enclosed by psdm by atleast,,0.110,µm
+(rpm.5),prec_resistor must be enclosed by npc by atleast,,0.095,µm
+(rpm.6),"Min spacing, no overlap, of rpm and nsdm",,0.200,µm
+(rpm.7),Min spacing between rpm and poly,,0.200,µm
+(rpm.8),poly must not straddle rpm,,,
+(rpm.9),"Min space, no overlap, between prec_resistor and hvntm",,0.185,µm
+(rpm.10),Min spacing of rpm to pwbm,,N/A,N/A
+(rpm.11),"| rpm should not overlap or straddle pwbm except cells
+| s8usbpdv2_csa_top
+| s8usbpdv2_20vconn_sw_300ma_ovp_ngate_unit
+| s8usbpdv2_20vconn_sw_300ma_ovp
+| s8usbpdv2_20sbu_sw_300ma_ovp",,N/A,N/A
diff --git a/docs/rules/periphery/p030-varac_dotdash.csv b/docs/rules/periphery/p030-varac_dotdash.csv
index 57bcd5d..469f67a 100644
--- a/docs/rules/periphery/p030-varac_dotdash.csv
+++ b/docs/rules/periphery/p030-varac_dotdash.csv
@@ -1,9 +1,9 @@
-Name,Description,Flags,Value

-(varac.1),Min channel length (poly width) of Var_channel,,0.180

-(varac.2),Min channel width (tap width) of Var_channel,,1.000

-(varac.3),Min spacing between hvtp to Var_channel,,0.180

-(varac.4),Min spacing of licon on tap to Var_channel,,0.250

-(varac.5),Min enclosure of poly overlapping Var_channel by nwell,,0.150

-(varac.6),Min spacing between VaracTap and difftap,,0.270

-(varac.7),Nwell overlapping Var_channel must not overlap P+ diff,,

-(varac.8),Min enclosure of Var_channel by hvtp,,0.255

+Name,Description,Flags,Value,Unit
+(varac.1),Min channel length (poly width) of Var_channel,,0.180,µm
+(varac.2),Min channel width (tap width) of Var_channel,,1.000,µm
+(varac.3),Min spacing between hvtp to Var_channel,,0.180,µm
+(varac.4),Min spacing of licon on tap to Var_channel,,0.250,µm
+(varac.5),Min enclosure of poly overlapping Var_channel by nwell,,0.150,µm
+(varac.6),Min spacing between VaracTap and difftap,,0.270,µm
+(varac.7),Nwell overlapping Var_channel must not overlap P+ diff,,,
+(varac.8),Min enclosure of Var_channel by hvtp,,0.255,µm
diff --git a/docs/rules/periphery/p031-photo_dotdash.csv b/docs/rules/periphery/p031-photo_dotdash.csv
index 3813d11..4912b21 100644
--- a/docs/rules/periphery/p031-photo_dotdash.csv
+++ b/docs/rules/periphery/p031-photo_dotdash.csv
@@ -1,12 +1,12 @@
-Name,Description,Flags,Value

-(photo.1),Rules dnwell.3 and nwell.5 are exempted for photoDiode,,

-(photo.2),Min/Max width of photoDiode,,3.000

-(photo.3),Min spacing between photoDiode,,5.000

-(photo.4),Min spacing between photoDiode and deep nwell,,5.300

-(photo.5),photoDiode edges must be coincident with :drc_tag:`areaid.po`,,

-(photo.6),photoDiode must be enclosed by dnwell ring,,

-(photo.7),photoDiode must be enclosed by p+ tap ring,,

-(photo.8),Min/Max width of nwell inside photoDiode,,0.840

-(photo.9),Min/Max enclosure of nwell by photoDiode,,1.080

-(photo.10),Min/Max width of tap inside photoDiode,,0.410

-(photo.11),Min/Max enclosure of tap by nwell inside photoDiode,,0.215

+Name,Description,Flags,Value,Unit
+(photo.1),Rules dnwell.3 and nwell.5 are exempted for photoDiode,,,
+(photo.2),Min/Max width of photoDiode,,3.000,µm
+(photo.3),Min spacing between photoDiode,,5.000,µm
+(photo.4),Min spacing between photoDiode and deep nwell,,5.300,µm
+(photo.5),photoDiode edges must be coincident with :drc_tag:`areaid.po`,,,
+(photo.6),photoDiode must be enclosed by dnwell ring,,,
+(photo.7),photoDiode must be enclosed by p+ tap ring,,,
+(photo.8),Min/Max width of nwell inside photoDiode,,0.840,µm
+(photo.9),Min/Max enclosure of nwell by photoDiode,,1.080,µm
+(photo.10),Min/Max width of tap inside photoDiode,,0.410,µm
+(photo.11),Min/Max enclosure of tap by nwell inside photoDiode,,0.215,µm
diff --git a/docs/rules/periphery/p032-n_psd_dotdash.csv b/docs/rules/periphery/p032-n_psd_dotdash.csv
index a5e9488..efbb570 100644
--- a/docs/rules/periphery/p032-n_psd_dotdash.csv
+++ b/docs/rules/periphery/p032-n_psd_dotdash.csv
@@ -1,13 +1,17 @@
-Name,Description,Flags,Value

-(n/ psd.1),Width of nsdm(psdm),P,0.380

-(n/ psd.2),Spacing of nsdm(psdm) to nsdm(psdm),P,0.380

-(n/ psd.3),Manual merge if less than minimum,,

-(n/ psd.5a),"Enclosure of diff by nsdm(psdm), except for butting edge",,0.125

-(n/ psd.5b),"Enclosure of tap by nsdm(psdm), except for butting edge",P,0.125

-(n/ psd.6),Enclosure of diff/tap butting edge by nsdm (psdm),,0.000

-(n/ psd.7),Spacing of NSDM/PSDM to opposite implant diff or tap (for non-abutting diff/tap edges),,0.130

-(n/ psd.8),Nsdm and psdm cannot overlap diff/tap regions of opposite doping,DE,

-(n/ psd.9),"Diff and tap must be enclosed by their corresponding implant layers. Rule exempted for\n- diff inside ""advSeal_6um* OR cuPillarAdvSeal_6um*"" pcell for SKY130P*/SP8P*/SKY130DI-5R-CSMC flows\n- diff rings around the die at min total L>1000 um and W=0.3 um\n- gated_npn \n- :drc_tag:`areaid.zer`.",DE,

-(n/ psd.10a),Min area of Nsdm (um^2),,0.265

-(n/ psd.10b),Min area of Psdm (um^2),,0.255

-(n/ psd.11),Min area of n/psdmHoles (um^2),,0.265

+Name,Description,Flags,Value,Unit
+(n/ psd.1),Width of nsdm(psdm),P,0.380,µm
+(n/ psd.2),Spacing of nsdm(psdm) to nsdm(psdm),P,0.380,µm
+(n/ psd.3),Manual merge if less than minimum,,,
+(n/ psd.5a),"Enclosure of diff by nsdm(psdm), except for butting edge",,0.125,µm
+(n/ psd.5b),"Enclosure of tap by nsdm(psdm), except for butting edge",P,0.125,µm
+(n/ psd.6),Enclosure of diff/tap butting edge by nsdm (psdm),,0.000,µm
+(n/ psd.7),Spacing of NSDM/PSDM to opposite implant diff or tap (for non-abutting diff/tap edges),,0.130,µm
+(n/ psd.8),Nsdm and psdm cannot overlap diff/tap regions of opposite doping,DE,,
+(n/ psd.9),"Diff and tap must be enclosed by their corresponding implant layers. Rule exempted for
+  - diff inside ""advSeal_6um* OR cuPillarAdvSeal_6um*"" pcell for SKY130P*/SP8P*/SKY130DI-5R-CSMC flows
+  - diff rings around the die at min total L>1000 um and W=0.3 um
+  - gated_npn 
+  - :drc_tag:`areaid.zer`.",DE,,
+(n/ psd.10a),Min area of Nsdm,,0.265,µm²
+(n/ psd.10b),Min area of Psdm,,0.255,µm²
+(n/ psd.11),Min area of n/psdmHoles,,0.265,µm²
diff --git a/docs/rules/periphery/p032-npc_dotdash.csv b/docs/rules/periphery/p032-npc_dotdash.csv
index c6e5b82..65262c4 100644
--- a/docs/rules/periphery/p032-npc_dotdash.csv
+++ b/docs/rules/periphery/p032-npc_dotdash.csv
@@ -1,6 +1,6 @@
-Name,Description,Flags,Value

-(npc.1),Min width of NPC,,0.270

-(npc.2),Min spacing of NPC to NPC,,0.270

-(npc.3),Manual merge if less than minimum,,

-(npc.4),Spacing (no overlap) of NPC to Gate,,0.090

-(npc.5),Max enclosure of poly overlapping slotted_licon by npcm (merge between adjacent short edges of the slotted_licons if space < min),,0.095

+Name,Description,Flags,Value,Unit
+(npc.1),Min width of NPC,,0.270,µm
+(npc.2),Min spacing of NPC to NPC,,0.270,µm
+(npc.3),Manual merge if less than minimum,,,
+(npc.4),Spacing (no overlap) of NPC to Gate,,0.090,µm
+(npc.5),Max enclosure of poly overlapping slotted_licon by npcm (merge between adjacent short edges of the slotted_licons if space < min),,0.095,µm
diff --git a/docs/rules/periphery/p034-licon_dotdash.csv b/docs/rules/periphery/p034-licon_dotdash.csv
index 519ce9d..01c0124 100644
--- a/docs/rules/periphery/p034-licon_dotdash.csv
+++ b/docs/rules/periphery/p034-licon_dotdash.csv
@@ -1,32 +1,33 @@
-Name,Description,Flags,Value

-(licon.1),Min and max L and W of licon (exempt licons inside prec_resistor),,0.170

-(licon.1b),Min and max width of licon inside prec_resistor,,0.190

-(licon.1c),Min and max length of licon inside prec_resistor,,2.000

-(licon.2),Spacing of licon to licon,P,0.170

-(licon.2b),Min spacing between two slotted_licon (when the both the edges are 0.19um in length),,0.350

-(licon.2c),Min spacing between two slotted_licon (except for rule licon.2b),,0.510

-(licon.2d),Min spacing between a slotted_licon and 0.17um square licon,,0.510

-(licon.3),Only min. square licons are allowed except die seal ring where licons are (licon CD)*L,,0.170 *L

-(licon.4),Licon1 must overlap li1 and (poly or diff or tap),,

-(licon.5a),Enclosure of licon by diff,P,0.040

-(licon.5b),Min space between tap_licon and diff-abutting tap edge,P,0.060

-(licon.5c),Enclosure of licon by diff on one of two adjacent sides,P,0.060

-(licon.6),Licon cannot straddle tap,P,

-(licon.7),Enclosure of licon by one of two adjacent edges of isolated tap,P,0.120

-(licon.8),Enclosure of poly_licon by poly,P,0.050

-(licon.8a),Enclosure of poly_licon by poly on one of two adjacent sides,P,0.080

-(licon.9),"Spacing, no overlap, between poly_licon and psdm; In SKY130DIA/SKY130TMA/SKY130PIR-10 flows, the rule is checked only between (poly_licon outside rpm) and psdm",P,0.110

-(licon.10),Spacing of licon on (tap AND (nwell NOT hvi)) to Var_channel,P,0.250

-(licon.11),"Spacing of licon on diff or tap to poly on diff (except for all FETs inside :drc_tag:`areaid.sc` and except s8spf-10r flow for 0.5um phv inside cell names ""s8fs_gwdlvx4"", ""s8fs_gwdlvx8"", ""s8fs_hvrsw_x4"", ""s8fs_hvrsw8"", ""s8fs_hvrsw264"", and ""s8fs_hvrsw520"" and for 0.15um nshort inside cell names ""s8fs_rdecdrv"", ""s8fs_rdec8"", ""s8fs_rdec32"", ""s8fs_rdec264"", ""s8fs_rdec520"")",P,0.055

-(licon.11a),Spacing of licon on diff or tap to poly on diff (for all FETs inside :drc_tag:`areaid.sc` except 0.15um phighvt),P,0.050

-(licon.11b),Spacing of licon on diff or tap to poly on diff (for 0.15um phighvt inside :drc_tag:`areaid.sc`),P,0.050

-(licon.11c),"Spacing of licon on diff or tap to poly on diff (for 0.5um phv inside cell names ""s8fs_gwdlvx4"", ""s8fs_gwdlvx8"", ""s8fs_hvrsw_x4"", ""s8fs_hvrsw8"", ""s8fs_hvrsw264"", and ""s8fs_hvrsw520"")",P,0.040

-(licon.11d),"Spacing of licon on diff or tap to poly on diff (for 0.15um nshort inside cell names ""s8fs_rdecdrv"", ""s8fs_rdec8"", ""s8fs_rdec32"", ""s8fs_rdec264"", ""s8fs_rdec520"")",P,0.045

-(licon.12),Max SD width without licon,NC,5.700

-(licon.13),Spacing (no overlap) of NPC to licon on diff or tap,P,0.090

-(licon.14),Spacing of poly_licon to diff or tap,P,0.190

-(licon.15),poly_licon must be enclosed by npc by…,P,0.100

-(licon.16),"Every source_diff and every tap must enclose at least one licon1, including the diff/tap straddling areaid:ce. \nRule exempted inside UHVI.",P,

-(licon.17),Licons may not overlap both poly and (diff or tap),,

-(licon.18),Npc must enclose poly_licon,,

-(licon.19),poly of the HV varactor must not interact with licon,P,

+Name,Description,Flags,Value,Unit
+(licon.1),Min and max L and W of licon (exempt licons inside prec_resistor),,0.170,µm
+(licon.1b),Min and max width of licon inside prec_resistor,,0.190,µm
+(licon.1c),Min and max length of licon inside prec_resistor,,2.000,µm
+(licon.2),Spacing of licon to licon,P,0.170,µm
+(licon.2b),Min spacing between two slotted_licon (when the both the edges are 0.19um in length),,0.350,µm
+(licon.2c),Min spacing between two slotted_licon (except for rule licon.2b),,0.510,µm
+(licon.2d),Min spacing between a slotted_licon and 0.17um square licon,,0.510,µm
+(licon.3),Only min. square licons are allowed except die seal ring where licons are (licon CD)*L,,0.170 *L,
+(licon.4),Licon1 must overlap li1 and (poly or diff or tap),,,
+(licon.5a),Enclosure of licon by diff,P,0.040,µm
+(licon.5b),Min space between tap_licon and diff-abutting tap edge,P,0.060,µm
+(licon.5c),Enclosure of licon by diff on one of two adjacent sides,P,0.060,µm
+(licon.6),Licon cannot straddle tap,P,,
+(licon.7),Enclosure of licon by one of two adjacent edges of isolated tap,P,0.120,µm
+(licon.8),Enclosure of poly_licon by poly,P,0.050,µm
+(licon.8a),Enclosure of poly_licon by poly on one of two adjacent sides,P,0.080,µm
+(licon.9),"Spacing, no overlap, between poly_licon and psdm; In SKY130DIA/SKY130TMA/SKY130PIR-10 flows, the rule is checked only between (poly_licon outside rpm) and psdm",P,0.110,µm
+(licon.10),Spacing of licon on (tap AND (nwell NOT hvi)) to Var_channel,P,0.250,µm
+(licon.11),"Spacing of licon on diff or tap to poly on diff (except for all FETs inside :drc_tag:`areaid.sc` and except s8spf-10r flow for 0.5um phv inside cell names ""s8fs_gwdlvx4"", ""s8fs_gwdlvx8"", ""s8fs_hvrsw_x4"", ""s8fs_hvrsw8"", ""s8fs_hvrsw264"", and ""s8fs_hvrsw520"" and for 0.15um nshort inside cell names ""s8fs_rdecdrv"", ""s8fs_rdec8"", ""s8fs_rdec32"", ""s8fs_rdec264"", ""s8fs_rdec520"")",P,0.055,µm
+(licon.11a),Spacing of licon on diff or tap to poly on diff (for all FETs inside :drc_tag:`areaid.sc` except 0.15um phighvt),P,0.050,µm
+(licon.11b),Spacing of licon on diff or tap to poly on diff (for 0.15um phighvt inside :drc_tag:`areaid.sc`),P,0.050,µm
+(licon.11c),"Spacing of licon on diff or tap to poly on diff (for 0.5um phv inside cell names ""s8fs_gwdlvx4"", ""s8fs_gwdlvx8"", ""s8fs_hvrsw_x4"", ""s8fs_hvrsw8"", ""s8fs_hvrsw264"", and ""s8fs_hvrsw520"")",P,0.040,µm
+(licon.11d),"Spacing of licon on diff or tap to poly on diff (for 0.15um nshort inside cell names ""s8fs_rdecdrv"", ""s8fs_rdec8"", ""s8fs_rdec32"", ""s8fs_rdec264"", ""s8fs_rdec520"")",P,0.045,µm
+(licon.12),Max SD width without licon,NC,5.700,µm
+(licon.13),Spacing (no overlap) of NPC to licon on diff or tap,P,0.090,µm
+(licon.14),Spacing of poly_licon to diff or tap,P,0.190,µm
+(licon.15),poly_licon must be enclosed by npc by…,P,0.100,µm
+(licon.16),"| Every source_diff and every tap must enclose at least one licon1, including the diff/tap straddling areaid:ce. 
+| Rule exempted inside UHVI.",P,,
+(licon.17),Licons may not overlap both poly and (diff or tap),,,
+(licon.18),Npc must enclose poly_licon,,,
+(licon.19),poly of the HV varactor must not interact with licon,P,,
diff --git a/docs/rules/periphery/p035-ct_dotdash.csv b/docs/rules/periphery/p035-ct_dotdash.csv
index 3beb869..c8c9696 100644
--- a/docs/rules/periphery/p035-ct_dotdash.csv
+++ b/docs/rules/periphery/p035-ct_dotdash.csv
@@ -1,8 +1,8 @@
-Name,Description,Flags,Value

-(ct.1),Min and max L and W of mcon,DNF,0.170

-(ct.2),Spacing of mcon to mcon,DNF,0.190

-(ct.3),Only min. square mcons are allowed except die seal ring where mcons are…,,0.170*L

-(ct.4),Mcon must be enclosed by LI by at least …,P,0.000

-(ct.irdrop.1),"For 1 <= n <= 10 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.2

-(ct.irdrop.2),"For 11 <= n <= 100 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.3

-(ct.irdrop.3),"For n > 100 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.7

+Name,Description,Flags,Value,Unit
+(ct.1),Min and max L and W of mcon,DNF,0.170,µm
+(ct.2),Spacing of mcon to mcon,DNF,0.190,µm
+(ct.3),Only min. square mcons are allowed except die seal ring where mcons are…,,0.170*L,
+(ct.4),Mcon must be enclosed by LI by at least …,P,0.000,µm
+(ct.irdrop.1),"For 1 <= n <= 10 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.2,µm
+(ct.irdrop.2),"For 11 <= n <= 100 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.3,µm
+(ct.irdrop.3),"For n > 100 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.7,µm
diff --git a/docs/rules/periphery/p035-li_dotdash_dotdash.csv b/docs/rules/periphery/p035-li_dotdash_dotdash.csv
index 77fcfb3..de222fc 100644
--- a/docs/rules/periphery/p035-li_dotdash_dotdash.csv
+++ b/docs/rules/periphery/p035-li_dotdash_dotdash.csv
@@ -1,9 +1,9 @@
-Name,Description,Flags,Value

-(li.1.-),Width of LI (except for li.1a),P,0.170

-(li.1a.-),Width of LI inside of cells with name s8rf2_xcmvpp_hd5_*,P,0.140

-(li.2.-),Max ratio of length to width of LI without licon or mcon,NC,10.000

-(li.3.-),Spacing of LI to LI (except for li.3a),P,0.170

-(li.3a.-),Spacing of LI to LI inside cells with names s8rf2_xcmvpp_hd5_*,P,0.140

-(li.5.-),Enclosure of licon by one of two adjacent LI sides,P,0.080

-(li.6.-),Min area of LI,P,0.0561

-(li.7.-),"Min LI resistor width (rule exempted within :drc_tag:`areaid.ed`; Inside :drc_tag:`areaid.ed`, min width of the li resistor is determined by rule li.1)",,0.290

+Name,Description,Flags,Value,Unit
+(li.1.-),Width of LI (except for li.1a),P,0.170,µm
+(li.1a.-),Width of LI inside of cells with name s8rf2_xcmvpp_hd5_*,P,0.140,µm
+(li.2.-),Max ratio of length to width of LI without licon or mcon,NC,10.000,µm
+(li.3.-),Spacing of LI to LI (except for li.3a),P,0.170,µm
+(li.3a.-),Spacing of LI to LI inside cells with names s8rf2_xcmvpp_hd5_*,P,0.140,µm
+(li.5.-),Enclosure of licon by one of two adjacent LI sides,P,0.080,µm
+(li.6.-),Min area of LI,P,0.0561,µm²
+(li.7.-),"Min LI resistor width (rule exempted within :drc_tag:`areaid.ed`; Inside :drc_tag:`areaid.ed`, min width of the li resistor is determined by rule li.1)",,0.290,µm
diff --git a/docs/rules/periphery/p036-capm_dotdash.csv b/docs/rules/periphery/p036-capm_dotdash.csv
index 8960a83..7261f43 100644
--- a/docs/rules/periphery/p036-capm_dotdash.csv
+++ b/docs/rules/periphery/p036-capm_dotdash.csv
@@ -1,13 +1,13 @@
-Name,Description,Flags,Value

-(capm.1),Min width of capm,,N/A

-(capm.2a),Min spacing of capm to capm,,N/A

-(capm.2b),Minimum spacing of capacitor bottom_plate to bottom plate,,N/A

-(capm.3),Minimum enclosure of capm (top_plate) by met2,,N/A

-(capm.4),Min enclosure of via2 by capm,,N/A

-(capm.5),Min spacing between capm and via2,,N/A

-(capm.6),Maximum Aspect Ratio (Length/Width),,N/A

-(capm.7),Only rectangular capacitors are allowed,,N/A

-(capm.8),"Min space, no overlap, between via and capm",,N/A

-(capm.10),"capm must not straddle nwell, diff, tap, poly, li1 and met1 (Rule exempted for capm overlapping capm_2t.dg)",TC,N/A

-(capm.11),Min spacing between capm to (met2 not overlapping capm),,N/A

-(capm.12),Max area of capm (um^2),,N/A

+Name,Description,Flags,Value,Unit
+(capm.1),Min width of capm,,N/A,N/A
+(capm.2a),Min spacing of capm to capm,,N/A,N/A
+(capm.2b),Minimum spacing of capacitor bottom_plate to bottom plate,,N/A,N/A
+(capm.3),Minimum enclosure of capm (top_plate) by met2,,N/A,N/A
+(capm.4),Min enclosure of via2 by capm,,N/A,N/A
+(capm.5),Min spacing between capm and via2,,N/A,N/A
+(capm.6),Maximum Aspect Ratio (Length/Width),,N/A,N/A
+(capm.7),Only rectangular capacitors are allowed,,N/A,N/A
+(capm.8),"Min space, no overlap, between via and capm",,N/A,N/A
+(capm.10),"capm must not straddle nwell, diff, tap, poly, li1 and met1 (Rule exempted for capm overlapping capm_2t.dg)",TC,N/A,N/A
+(capm.11),Min spacing between capm to (met2 not overlapping capm),,N/A,N/A
+(capm.12),Max area of capm (um^2),,N/A,N/A
diff --git a/docs/rules/periphery/p037-vpp_dotdash.csv b/docs/rules/periphery/p037-vpp_dotdash.csv
index a9c9ea0..f772569 100644
--- a/docs/rules/periphery/p037-vpp_dotdash.csv
+++ b/docs/rules/periphery/p037-vpp_dotdash.csv
@@ -1,19 +1,19 @@
-Name,Description,Flags,Value

-(vpp.1),Min width of capacitor:dg,,1.430

-(vpp.1b),Max width of capacitor:dg; Rule not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5 and vpp_with_noLi,,11.350

-(vpp.1c),"Min/Max width of cell name ""s8rf_xcmvpp1p8x1p8_m3shield """,,3.880

-(vpp.3),"capacitor:dg must not overlap (tap or diff or poly); (one exception: Poly is allowed to overlap  vpp_with_Met3Shield and vpp_with_Met5PolyShield); (not applicable for vpp_over_Moscap or ""s8rf2_xcmvppx4_2xnhvnative10x4"" or vpp_with_LiShield)",,

-(vpp.4),capacitor:dg must not straddle (nwell or dnwell),,

-(vpp.5),Min spacing between (capacitor:dg edge and (poly or li1 or met1 or met2)) to (poly or li1 or met1 or met2) on separate nets (Exempt area of the error shape less than 2.25 (um^2) and run length less than 2.0um); Rule not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5 and vpp_with_noLi,,1.500

-(vpp.5a),Max pattern density of met3.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5),,0.25

-(vpp.5b),Max pattern density of met4.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_Met5 and vpp_over_MOSCAP),,0.3

-(vpp.5c),"Max pattern density of met5.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_Met5 and vpp_over_MOSCAP and vpp_with_noLi); (one exception: rules does apply to cell ""s8rf2_xcmvpp11p5x11p7_m1m4"" and ""s8rf2_xcmvpp_hd5_atlas*"")",,0.4

-(vpp.8),Min enclosure of capacitor:dg by nwell,,1.500

-(vpp.9),Min spacing of capacitor:dg to nwell (not applicable for vpp_over_MOSCAP),,1.500

-(vpp.10),vpp capacitors must not overlap; Rule checks for capacitor.dg overlapping more than one pwell pin,,

-(vpp.11),Min pattern density of (poly and diff) over capacitor.dg; (vpp_over_Moscap only),,0.87

-(vpp.12a),"Number of met4 shapes inside capacitor.dg of cell ""s8rf2_xcmvpp8p6x7p9_m3_lim5shield""  must overlap with size 2.01 x 2.01 (no other met4 shapes allowed)",,9.00

-(vpp.12b),"Number of met4 shapes inside capacitor.dg of cell ""s8rf2_xcmvpp11p5x11p7_m3_lim5shield""  must overlap with size 2.01 x 2.01 (no other met4 shapes allowed)",,16.00

-(vpp.12c),"Number of met4 shapes inside capacitor.dg of cell ""s8rf2_xcmvpp4p4x4p6_m3_lim5shield""  must overlap with size 1.5 x 1.5 (no other met4 shapes allowed)",,4.00

-(vpp.13),Min space of met1 to met1inside VPP capacitor,CU,0.160

-(vpp.14),Min space of met2 to met2 inside VPP capacitor,CU,0.160

+Name,Description,Flags,Value,Unit
+(vpp.1),Min width of capacitor:dg,,1.430,µm
+(vpp.1b),Max width of capacitor:dg; Rule not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5 and vpp_with_noLi,,11.350,µm
+(vpp.1c),"Min/Max width of cell name ""s8rf_xcmvpp1p8x1p8_m3shield """,,3.880,µm
+(vpp.3),"capacitor:dg must not overlap (tap or diff or poly); (one exception: Poly is allowed to overlap  vpp_with_Met3Shield and vpp_with_Met5PolyShield); (not applicable for vpp_over_Moscap or ""s8rf2_xcmvppx4_2xnhvnative10x4"" or vpp_with_LiShield)",,,
+(vpp.4),capacitor:dg must not straddle (nwell or dnwell),,,
+(vpp.5),Min spacing between (capacitor:dg edge and (poly or li1 or met1 or met2)) to (poly or li1 or met1 or met2) on separate nets (Exempt area of the error shape less than 2.25 µm² and run length less than 2.0um); Rule not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5 and vpp_with_noLi,,1.500,µm
+(vpp.5a),Max pattern density of met3.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5),,0.25,\-
+(vpp.5b),Max pattern density of met4.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_Met5 and vpp_over_MOSCAP),,0.3,\-
+(vpp.5c),"Max pattern density of met5.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_Met5 and vpp_over_MOSCAP and vpp_with_noLi); (one exception: rules does apply to cell ""s8rf2_xcmvpp11p5x11p7_m1m4"" and ""s8rf2_xcmvpp_hd5_atlas*"")",,0.4,\-
+(vpp.8),Min enclosure of capacitor:dg by nwell,,1.500,µm
+(vpp.9),Min spacing of capacitor:dg to nwell (not applicable for vpp_over_MOSCAP),,1.500,µm
+(vpp.10),vpp capacitors must not overlap; Rule checks for capacitor.dg overlapping more than one pwell pin,,,
+(vpp.11),Min pattern density of (poly and diff) over capacitor.dg; (vpp_over_Moscap only),,0.87,\-
+(vpp.12a),"Number of met4 shapes inside capacitor.dg of cell ""s8rf2_xcmvpp8p6x7p9_m3_lim5shield""  must overlap with size 2.01 x 2.01 (no other met4 shapes allowed)",,9.00,µm
+(vpp.12b),"Number of met4 shapes inside capacitor.dg of cell ""s8rf2_xcmvpp11p5x11p7_m3_lim5shield""  must overlap with size 2.01 x 2.01 (no other met4 shapes allowed)",,16.00,µm
+(vpp.12c),"Number of met4 shapes inside capacitor.dg of cell ""s8rf2_xcmvpp4p4x4p6_m3_lim5shield""  must overlap with size 1.5 x 1.5 (no other met4 shapes allowed)",,4.00,µm
+(vpp.13),Min space of met1 to met1inside VPP capacitor,CU,0.160,µm
+(vpp.14),Min space of met2 to met2 inside VPP capacitor,CU,0.160,µm
diff --git a/docs/rules/periphery/p038-m1_dotdash.csv b/docs/rules/periphery/p038-m1_dotdash.csv
index 18257df..321c2ff 100644
--- a/docs/rules/periphery/p038-m1_dotdash.csv
+++ b/docs/rules/periphery/p038-m1_dotdash.csv
@@ -1,20 +1,27 @@
-Name,Description,Flags,Value

-(m1.-),"Algorithm should flag errors, for met1, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm1 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. NOTE: Required for IP, Recommended for Chip-level.",RC,

-(m1.1),Width of metal1,,0.140

-(m1.2),Spacing of metal1 to metal1,,0.140

-(m1.3a),Min. spacing of features attached to or extending from huge_met1 for a distance of up to  0.280 um to metal1 (rule not checked over non-huge met1 features),,0.280

-(m1.3b),Min. spacing of huge_met1 to metal1 excluding features checked by m1.3a,,0.280

-(m1.4),Mcon must be enclosed by Met1 by at least …(Rule exempted for cell names documented in rule m1.4a),P,0.030

-(m1.4a),"Mcon must be enclosed by Met1 by at least (for cell names ""s8cell_ee_plus_sseln_a"", ""s8cell_ee_plus_sseln_b"", ""s8cell_ee_plus_sselp_a"", ""s8cell_ee_plus_sselp_b"", ""s8fpls_pl8"", and ""s8fs_cmux4_fm"")",P,0.005

-(m1.5),Mcon must be enclosed by Met1 on one of two adjacent sides by at least …,P AL,0.060

-(m1.6),Min metal 1 area [um2],,0.083

-(m1.7),Min area of metal1 holes [um2],,0.140

-(m1.pd.1),Min MM1_oxide_Pattern_density,RR AL,0.7

-(m1.pd.2a),Rule m1.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A AL,700

-(m1.pd.2b),Rule m1.pd.1 has to be checked by dividing the chip into steps of …,A AL,70

-(m1.11),Max width of metal1after slotting,CU NC,4.000

-(m1.12),Add slots and remove vias and contacts if met1 wider than…..,CU,3.200

-(m1.13),Max pattern density (PD) of met1,CU,0.77

-(m1.14),Met1 PD window size,CU,50.000

-(m1.14a),Met1 PD window step,CU,25.000

-(m1.15),Mcon must be enclosed by met1 on one of two adjacent sides by at least …,CU,0.030

+Name,Description,Flags,Value,Unit
+(m1.-),"| Algorithm should flag errors, for met1, if ANY of the following is true:
+| An entire 700x700 window is covered by cmm1 waffleDrop, and metX PD < 70% for same window.
+| 80-100% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 65% for same window.
+| 60-80% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 60% for same window.
+| 50-60% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 50% for same window.
+| 40-50% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 40% for same window.
+| 30-40% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 30% for same window.
+| Exclude cells whose area is below 40Kum2. NOTE: Required for IP, Recommended for Chip-level.",RC,,
+(m1.1),Width of metal1,,0.140,µm
+(m1.2),Spacing of metal1 to metal1,,0.140,µm
+(m1.3a),Min. spacing of features attached to or extending from huge_met1 for a distance of up to  0.280 µm to metal1 (rule not checked over non-huge met1 features),,0.280,µm
+(m1.3b),Min. spacing of huge_met1 to metal1 excluding features checked by m1.3a,,0.280,µm
+(m1.4),Mcon must be enclosed by Met1 by at least …(Rule exempted for cell names documented in rule m1.4a),P,0.030,µm
+(m1.4a),"Mcon must be enclosed by Met1 by at least (for cell names ""s8cell_ee_plus_sseln_a"", ""s8cell_ee_plus_sseln_b"", ""s8cell_ee_plus_sselp_a"", ""s8cell_ee_plus_sselp_b"", ""s8fpls_pl8"", and ""s8fs_cmux4_fm"")",P,0.005,µm
+(m1.5),Mcon must be enclosed by Met1 on one of two adjacent sides by at least …,P AL,0.060,µm
+(m1.6),Min metal 1 area,,0.083,µm²
+(m1.7),Min area of metal1 holes,,0.140,µm²
+(m1.pd.1),Min MM1_oxide_Pattern_density,RR AL,0.7,\-
+(m1.pd.2a),Rule m1.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A AL,700,µm
+(m1.pd.2b),Rule m1.pd.1 has to be checked by dividing the chip into steps of …,A AL,70,
+(m1.11),Max width of metal1after slotting,CU NC,4.000,µm
+(m1.12),Add slots and remove vias and contacts if met1 wider than…..,CU,3.200,
+(m1.13),Max pattern density (PD) of met1,CU,0.77,\-
+(m1.14),Met1 PD window size,CU,50.000,µm
+(m1.14a),Met1 PD window step,CU,25.000,µm
+(m1.15),Mcon must be enclosed by met1 on one of two adjacent sides by at least …,CU,0.030,µm
diff --git a/docs/rules/periphery/p039-via_dotdash.csv b/docs/rules/periphery/p039-via_dotdash.csv
index e03e2e8..9f2e232 100644
--- a/docs/rules/periphery/p039-via_dotdash.csv
+++ b/docs/rules/periphery/p039-via_dotdash.csv
@@ -1,20 +1,20 @@
-Name,Description,Flags,Value

-(via.1a),Min and max L and W of via outside :drc_tag:`areaid.mt`,AL,0.150

-(via.1b),"Three sizes of square Vias allowed inside areaid:mt: 0.150um, 0.230um and 0.280um",AL,

-(via.2),Spacing of via to via,AL,0.170

-(via.3),Only min. square vias are allowed except die seal ring where vias are (Via CD)*L,,0.2*L

-(via.4a),0.150 um Via must be enclosed by Met1 by at least …,,0.055

-(via.4b),"Inside :drc_tag:`areaid.mt`, 0.230 um Via must be enclosed by met1 by atleast",AL,0.030

-(via.4c),"Inside :drc_tag:`areaid.mt`, 0.280 um Via must be enclosed by met1 by atleast",AL,0.000

-(via.5a),0.150 um Via must be enclosed by Met1 on one of two adjacent sides by at least …,,0.085

-(via.5b),"Inside :drc_tag:`areaid.mt`, 0.230 um Via must be enclosed by met1 on one of two adjacent sides by at least …",AL,0.060

-(via.5c),"Inside :drc_tag:`areaid.mt`, 0.280 um Via must be enclosed by met1 on one of two adjacent sides by at least …",AL,0.000

-(via.11),Min and max L and W of via outside :drc_tag:`areaid.mt`,CU,0.180

-(via.12),Min spacing between vias,CU,0.130

-(via.13),Max of 5 vias within …,CU,0.350

-(via.14),0.180 um Via must be enclosed by parallel edges of Met1 by at least …,CU,0.040

-(via.irdrop.1),"For 1 <= n <= 2 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.0

-(via.irdrop.2),"For 3 <= n <= 15 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.6

-(via.irdrop.3),"For 16 <= n <= 30 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.8

-(via.irdrop.4),"For n > 30 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.9

-(via.14a),0.180 um Via must be enclosed by 45 deg edges of Met1 by at least …,CU,0.037

+Name,Description,Flags,Value,Unit
+(via.1a),Min and max L and W of via outside :drc_tag:`areaid.mt`,AL,0.150,µm
+(via.1b),"Three sizes of square Vias allowed inside areaid:mt: 0.150um, 0.230um and 0.280um",AL,,
+(via.2),Spacing of via to via,AL,0.170,µm
+(via.3),Only min. square vias are allowed except die seal ring where vias are (Via CD)*L,,0.2*L,
+(via.4a),0.150 µm Via must be enclosed by Met1 by at least …,,0.055,µm
+(via.4b),"Inside :drc_tag:`areaid.mt`, 0.230 µm Via must be enclosed by met1 by atleast",AL,0.030,µm
+(via.4c),"Inside :drc_tag:`areaid.mt`, 0.280 µm Via must be enclosed by met1 by atleast",AL,0.000,µm
+(via.5a),0.150 µm Via must be enclosed by Met1 on one of two adjacent sides by at least …,,0.085,µm
+(via.5b),"Inside :drc_tag:`areaid.mt`, 0.230 µm Via must be enclosed by met1 on one of two adjacent sides by at least …",AL,0.060,µm
+(via.5c),"Inside :drc_tag:`areaid.mt`, 0.280 µm Via must be enclosed by met1 on one of two adjacent sides by at least …",AL,0.000,µm
+(via.11),Min and max L and W of via outside :drc_tag:`areaid.mt`,CU,0.180,µm
+(via.12),Min spacing between vias,CU,0.130,µm
+(via.13),Max of 5 vias within …,CU,0.350,µm
+(via.14),0.180 µm Via must be enclosed by parallel edges of Met1 by at least …,CU,0.040,µm
+(via.irdrop.1),"For 1 <= n <= 2 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.0,µm
+(via.irdrop.2),"For 3 <= n <= 15 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.6,µm
+(via.irdrop.3),"For 16 <= n <= 30 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.8,µm
+(via.irdrop.4),"For n > 30 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.9,µm
+(via.14a),0.180 µm Via must be enclosed by 45 deg edges of Met1 by at least …,CU,0.037,deg µm
diff --git a/docs/rules/periphery/p040-m2_dotdash.csv b/docs/rules/periphery/p040-m2_dotdash.csv
index 4304769..cbf83ef 100644
--- a/docs/rules/periphery/p040-m2_dotdash.csv
+++ b/docs/rules/periphery/p040-m2_dotdash.csv
@@ -1,20 +1,27 @@
-Name,Description,Flags,Value

-(m2.-),"Algorithm should flag errors, for met2, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm2 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. Required for IP, Recommended for Chip-level.",RC,

-(m2.1),Width of metal 2,,0.140

-(m2.2),Spacing of metal 2 to metal 2,,0.140

-(m2.3a),Min. spacing of features attached to or extending from huge_met2 for a distance of up to  0.280 um to metal2 (rule not checked over non-huge met2 features),,0.280

-(m2.3b),Min. spacing of huge_met2 to metal2 excluding features checked by m2.3a,,0.280

-(m2.3c),"Min spacing between floating_met2 with AR_met2_A >= 0.05 and AR_met2_B =< 0.032, outside areaid:sc must be greater than",RR,0.145

-(m2.4),Via must be enclosed by Met2 by at least …,P AL,0.055

-(m2.5),Via must be enclosed by Met2 on one of two adjacent sides by at least …,AL,0.085

-(m2.6),Min metal2 area [um2],,0.0676

-(m2.7),Min area of metal2 holes [um2],,0.140

-(m2.pd.1),Min MM2_oxide_Pattern_density,RR,0.7

-(m2.pd.2a),Rule m2.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A,700

-(m2.pd.2b),Rule m2.pd.1 has to be checked by dividing the chip into steps of …,A,70

-(m2.11),Max width of metal2,CU,4.000

-(m2.12),Add slots and remove vias and contacts if met2 wider than…..,CU,3.200

-(m2.13),Max pattern density (PD) of metal2,CU,0.77

-(m2.14),Met2 PD window size,CU,50.000

-(m2.14a),Met2 PD window step,CU,25.000

-(m2.15),Via must be enclosed by met2 by at least…,CU,0.040

+Name,Description,Flags,Value,Unit
+(m2.-),"| Algorithm should flag errors, for met2, if ANY of the following is true:
+| An entire 700x700 window is covered by cmm2 waffleDrop, and metX PD < 70% for same window.
+| 80-100% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 65% for same window.
+| 60-80% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 60% for same window.
+| 50-60% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 50% for same window.
+| 40-50% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 40% for same window.
+| 30-40% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 30% for same window.
+| Exclude cells whose area is below 40Kum2. Required for IP, Recommended for Chip-level.",RC,,
+(m2.1),Width of metal 2,,0.140,µm
+(m2.2),Spacing of metal 2 to metal 2,,0.140,µm
+(m2.3a),Min. spacing of features attached to or extending from huge_met2 for a distance of up to  0.280 µm to metal2 (rule not checked over non-huge met2 features),,0.280,µm
+(m2.3b),Min. spacing of huge_met2 to metal2 excluding features checked by m2.3a,,0.280,µm
+(m2.3c),"Min spacing between floating_met2 with AR_met2_A >= 0.05 and AR_met2_B =< 0.032, outside areaid:sc must be greater than",RR,0.145,µm
+(m2.4),Via must be enclosed by Met2 by at least …,P AL,0.055,µm
+(m2.5),Via must be enclosed by Met2 on one of two adjacent sides by at least …,AL,0.085,µm
+(m2.6),Min metal2 area,,0.0676,µm²
+(m2.7),Min area of metal2 holes,,0.140,µm²
+(m2.pd.1),Min MM2_oxide_Pattern_density,RR,0.7,\-
+(m2.pd.2a),Rule m2.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A,700,µm
+(m2.pd.2b),Rule m2.pd.1 has to be checked by dividing the chip into steps of …,A,70,
+(m2.11),Max width of metal2,CU,4.000,µm
+(m2.12),Add slots and remove vias and contacts if met2 wider than…..,CU,3.200,
+(m2.13),Max pattern density (PD) of metal2,CU,0.77,\-
+(m2.14),Met2 PD window size,CU,50.000,µm
+(m2.14a),Met2 PD window step,CU,25.000,µm
+(m2.15),Via must be enclosed by met2 by at least…,CU,0.040,µm
diff --git a/docs/rules/periphery/p041-via2_dotdash.csv b/docs/rules/periphery/p041-via2_dotdash.csv
index 47ecc00..18afe0a 100644
--- a/docs/rules/periphery/p041-via2_dotdash.csv
+++ b/docs/rules/periphery/p041-via2_dotdash.csv
@@ -1,21 +1,21 @@
-Name,Description,Flags,Value

-(via2.X.1),Via2 connects met2 to met3 in the SKY130T*/SKY130P*/SP8Q/SP8P* flow and met2/capm to met3 in the SKY130DI* flow.,,

-(via2.1a),Min and max L and W of via2 (except for rule via2.1b/1c/1d/1e/1f),AL,0.200

-(via2.1b),"Three sizes of square Vias allowed inside areaid:mt: 0.280um, 1.2 um and 1.5 um",AL,N/A

-(via2.1c),Two sizes of square Vias allowed inside areaid:mt: 1.2 um and 1.5 um,AL,N/A

-(via2.1d),"Four sizes of square Vias allowed inside areaid:mt: 0.2um, 0.280um, 1.2 um and 1.5 um",AL,

-(via2.1e),"Three sizes of square Vias allowed inside areaid:mt: 0.8um, 1.2 um and 1.5 um",AL,N/A

-(via2.1f),Two sizes of square Vias allowed outside areaid:mt: 0.8um and 1.2 um,AL,N/A

-(via2.2),Spacing of via2 to via2,AL,0.200

-(via2.3),Only min. square via2s are allowed except die seal ring where via2s are (Via2 CD)*L,AL,0.2*L

-(via2.4),Via2 must be enclosed by Met2 by at least …,AL,0.040

-(via2.4a),"Inside :drc_tag:`areaid.mt`, 1.5 um Via2 must be enclosed by met2 by atleast",,0.140

-(via2.5),Via2 must be enclosed by Met2 on one of two adjacent sides by at least …,AL,0.085

-(via2.11),Min and max L and W of via2,CU,0.210

-(via2.12),Min spacing between via2's,CU,0.180

-(via2.13),Min spacing between via2 rows,CU,0.200

-(via2.14),Via2 must be enclosed by met2 by atleast,CU,0.035

-(via2.irdrop.1),"For 1 <= n <= 2 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.0

-(via2.irdrop.2),"For 3 <= n <= 4 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.6

-(via2.irdrop.3),"For 5 <= n <= 30 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.79

-(via2.irdrop.4),"For n > 30 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.9

+Name,Description,Flags,Value,Unit
+(via2.X.1),Via2 connects met2 to met3 in the SKY130T*/SKY130P*/SP8Q/SP8P* flow and met2/capm to met3 in the SKY130DI* flow.,,,
+(via2.1a),Min and max L and W of via2 (except for rule via2.1b/1c/1d/1e/1f),AL,0.200,µm
+(via2.1b),"Three sizes of square Vias allowed inside areaid:mt: 0.280um, 1.2 um and 1.5 um",AL,N/A,N/A
+(via2.1c),Two sizes of square Vias allowed inside areaid:mt: 1.2 um and 1.5 um,AL,N/A,N/A
+(via2.1d),"Four sizes of square Vias allowed inside areaid:mt: 0.2um, 0.280um, 1.2 um and 1.5 um",AL,,
+(via2.1e),"Three sizes of square Vias allowed inside areaid:mt: 0.8um, 1.2 um and 1.5 um",AL,N/A,N/A
+(via2.1f),Two sizes of square Vias allowed outside areaid:mt: 0.8um and 1.2 um,AL,N/A,N/A
+(via2.2),Spacing of via2 to via2,AL,0.200,µm
+(via2.3),Only min. square via2s are allowed except die seal ring where via2s are (Via2 CD)*L,AL,0.2*L,
+(via2.4),Via2 must be enclosed by Met2 by at least …,AL,0.040,µm
+(via2.4a),"Inside :drc_tag:`areaid.mt`, 1.5 µm Via2 must be enclosed by met2 by atleast",,0.140,µm
+(via2.5),Via2 must be enclosed by Met2 on one of two adjacent sides by at least …,AL,0.085,µm
+(via2.11),Min and max L and W of via2,CU,0.210,µm
+(via2.12),Min spacing between via2's,CU,0.180,µm
+(via2.13),Min spacing between via2 rows,CU,0.200,µm
+(via2.14),Via2 must be enclosed by met2 by atleast,CU,0.035,µm
+(via2.irdrop.1),"For 1 <= n <= 2 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.0,µm
+(via2.irdrop.2),"For 3 <= n <= 4 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.6,µm
+(via2.irdrop.3),"For 5 <= n <= 30 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.79,µm
+(via2.irdrop.4),"For n > 30 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.9,µm
diff --git a/docs/rules/periphery/p042-m3_dotdash.csv b/docs/rules/periphery/p042-m3_dotdash.csv
index 307b931..2a30266 100644
--- a/docs/rules/periphery/p042-m3_dotdash.csv
+++ b/docs/rules/periphery/p042-m3_dotdash.csv
@@ -1,22 +1,29 @@
-Name,Description,Flags,Value

-(m3.-),"Algorithm should flag errors, for met3, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm3 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. NOTE: Required for IP, Recommended for Chip-level.",RC,

-(m3.1),Width of metal 3,,0.300

-(m3.2),Spacing of metal 3 to metal 3,,0.300

-(m3.3a),Min. spacing of features attached to or extending from huge_met3 for a distance of up to 0.480 um to metal3  (rule not checked over non-huge met3 features),,N/A

-(m3.3b),Min. spacing of huge_met3 to metal3 excluding features checked by m3.3a,,N/A

-(m3.3c),Min. spacing of features attached to or extending from huge_met3 for a distance of up to 0.400 um to metal3  (rule not checked over non-huge met3 features),,0.400

-(m3.3d),Min. spacing of huge_met3 to metal3 excluding features checked by m3.3a,,0.400

-(m3.4),Via2 must be enclosed by Met3 by at least …,AL,0.065

-(m3.5),Via2 must be enclosed by Met3 on one of two adjacent sides by at least …,,N/A

-(m3.5a),Via2 must be enclosed by Met3 on all sides by at least …(Rule not checked on a layout when it satisfies both rules m3.4 and m3.5),,N/A

-(m3.6),Min area of metal3,,0.240

-(m3.7),Min area of metal3 holes [um2],CU,0.200

-(m3.pd.1),Min MM3_oxide_Pattern_density,RR,0.7

-(m3.pd.2a),Rule m3.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A,700

-(m3.pd.2b),Rule m3.pd.1 has to be checked by dividing the chip into steps of …,A,70

-(m3.11),Max width of metal3,CU,4.000

-(m3.12),Add slots and remove vias and contacts if wider than…..,CU,3.200

-(m3.13),Max pattern density (PD) of metal3,CU,0.77

-(m3.14),Met3 PD window size,CU,50.000

-(m3.14a),Met3 PD window step,CU,25.000

-(m3.15),Via2 must be enclosed by met3 by at least…,CU,0.060

+Name,Description,Flags,Value,Unit
+(m3.-),"| Algorithm should flag errors, for met3, if ANY of the following is true:
+| An entire 700x700 window is covered by cmm3 waffleDrop, and metX PD < 70% for same window.
+| 80-100% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 65% for same window.
+| 60-80% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 60% for same window.
+| 50-60% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 50% for same window.
+| 40-50% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 40% for same window.
+| 30-40% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 30% for same window.
+| Exclude cells whose area is below 40Kum2. NOTE: Required for IP, Recommended for Chip-level.",RC,,
+(m3.1),Width of metal 3,,0.300,µm
+(m3.2),Spacing of metal 3 to metal 3,,0.300,µm
+(m3.3a),Min. spacing of features attached to or extending from huge_met3 for a distance of up to 0.480 um to metal3  (rule not checked over non-huge met3 features),,N/A,N/A
+(m3.3b),Min. spacing of huge_met3 to metal3 excluding features checked by m3.3a,,N/A,N/A
+(m3.3c),Min. spacing of features attached to or extending from huge_met3 for a distance of up to 0.400 µm to metal3  (rule not checked over non-huge met3 features),,0.400,µm
+(m3.3d),Min. spacing of huge_met3 to metal3 excluding features checked by m3.3a,,0.400,µm
+(m3.4),Via2 must be enclosed by Met3 by at least …,AL,0.065,µm
+(m3.5),Via2 must be enclosed by Met3 on one of two adjacent sides by at least …,,N/A,N/A
+(m3.5a),Via2 must be enclosed by Met3 on all sides by at least …(Rule not checked on a layout when it satisfies both rules m3.4 and m3.5),,N/A,N/A
+(m3.6),Min area of metal3,,0.240,µm²
+(m3.7),Min area of metal3 holes,CU,0.200,µm²
+(m3.pd.1),Min MM3_oxide_Pattern_density,RR,0.7,\-
+(m3.pd.2a),Rule m3.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A,700,µm
+(m3.pd.2b),Rule m3.pd.1 has to be checked by dividing the chip into steps of …,A,70,
+(m3.11),Max width of metal3,CU,4.000,µm
+(m3.12),Add slots and remove vias and contacts if wider than…..,CU,3.200,
+(m3.13),Max pattern density (PD) of metal3,CU,0.77,\-
+(m3.14),Met3 PD window size,CU,50.000,µm
+(m3.14a),Met3 PD window step,CU,25.000,µm
+(m3.15),Via2 must be enclosed by met3 by at least…,CU,0.060,µm
diff --git a/docs/rules/periphery/p042-via3_dotdash.csv b/docs/rules/periphery/p042-via3_dotdash.csv
index 3488b8b..67eecd8 100644
--- a/docs/rules/periphery/p042-via3_dotdash.csv
+++ b/docs/rules/periphery/p042-via3_dotdash.csv
@@ -1,15 +1,15 @@
-Name,Description,Flags,Value

-(via3.1),Min and max L and W of via3 (except for rule via3.1a),AL,0.200

-(via3.1a),Two sizes of square via3 allowed inside :drc_tag:`areaid.mt`: 0.200um and 0.800um,AL,

-(via3.2),Spacing of via3 to via3,AL,0.200

-(via3.3),Only min. square via3s are allowed except die seal ring where via3s are (Via3 CD)*L,,0.2*L

-(via3.4),Via3 must be enclosed by Met3 by at least …,AL,0.060

-(via3.5),Via3 must be enclosed by Met3 on one of two adjacent sides by at least …,AL,0.090

-(via3.11),Min and max L and W of via3,CU,0.210

-(via3.12),Min spacing between via2's,CU,0.180

-(via3.13),Via3 must be enclosed by Met3 by at least …,CU,0.055

-(via3.14),Min spacing between via3 rows,CU,0.350

-(via3.irdrop.1),"For 1 <= n <= 2 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.0

-(via3.irdrop.2),"For 3 <= n <= 15 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.6

-(via3.irdrop.3),"For 16 <= n <= 30 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.8

-(via3.irdrop.4),"For n > 30 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.9

+Name,Description,Flags,Value,Unit
+(via3.1),Min and max L and W of via3 (except for rule via3.1a),AL,0.200,µm
+(via3.1a),Two sizes of square via3 allowed inside :drc_tag:`areaid.mt`: 0.200um and 0.800um,AL,,
+(via3.2),Spacing of via3 to via3,AL,0.200,µm
+(via3.3),Only min. square via3s are allowed except die seal ring where via3s are (Via3 CD)*L,,0.2*L,
+(via3.4),Via3 must be enclosed by Met3 by at least …,AL,0.060,µm
+(via3.5),Via3 must be enclosed by Met3 on one of two adjacent sides by at least …,AL,0.090,µm
+(via3.11),Min and max L and W of via3,CU,0.210,µm
+(via3.12),Min spacing between via2's,CU,0.180,µm
+(via3.13),Via3 must be enclosed by Met3 by at least …,CU,0.055,µm
+(via3.14),Min spacing between via3 rows,CU,0.350,µm
+(via3.irdrop.1),"For 1 <= n <= 2 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.0,µm
+(via3.irdrop.2),"For 3 <= n <= 15 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.6,µm
+(via3.irdrop.3),"For 16 <= n <= 30 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.8,µm
+(via3.irdrop.4),"For n > 30 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.9,µm
diff --git a/docs/rules/periphery/p043-indm_dotdash.csv b/docs/rules/periphery/p043-indm_dotdash.csv
index cecef25..ac543bd 100644
--- a/docs/rules/periphery/p043-indm_dotdash.csv
+++ b/docs/rules/periphery/p043-indm_dotdash.csv
@@ -1,5 +1,5 @@
-Name,Description,Flags,Value

-(indm.1),Min width of top_indmMetal,,N/A

-(indm.2),Min spacing between two top_indmMetal,,N/A

-(indm.3),top_padVia must  be enclosed by top_indmMetal by atleast,,N/A

-(indm.4),Min area of top_indmMetal,,N/A

+Name,Description,Flags,Value,Unit
+(indm.1),Min width of top_indmMetal,,N/A,N/A
+(indm.2),Min spacing between two top_indmMetal,,N/A,N/A
+(indm.3),top_padVia must  be enclosed by top_indmMetal by atleast,,N/A,N/A
+(indm.4),Min area of top_indmMetal,,N/A,N/A
diff --git a/docs/rules/periphery/p043-nsm_dotdash.csv b/docs/rules/periphery/p043-nsm_dotdash.csv
index df82f45..cd68216 100644
--- a/docs/rules/periphery/p043-nsm_dotdash.csv
+++ b/docs/rules/periphery/p043-nsm_dotdash.csv
@@ -1,6 +1,6 @@
-Name,Description,Flags,Value

-(nsm.1),Min. width of nsm,,3.000

-(nsm.2),Min. spacing of nsm to nsm,,4.000

-(nsm.3),"Min spacing, no overlap, between NSM_keepout to diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5). Exempt the following from the check: (a) cell name ""nikon*"" and (b) diff ring inside :drc_tag:`areaid.sl`",AL,1.000

-(nsm.3a),"Min enclosure of diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5) by :drc_tag:`areaid.ft`. Exempt the following from the check: (a) cell name ""s8Fab_crntic*""  (b)  blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption)",,3.000

-(nsm.3b),"Min spacing between :drc_tag:`areaid.dt` to diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5). Exempt the following from the check: (a) blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption)",,3.000

+Name,Description,Flags,Value,Unit
+(nsm.1),Min. width of nsm,,3.000,µm
+(nsm.2),Min. spacing of nsm to nsm,,4.000,µm
+(nsm.3),"Min spacing, no overlap, between NSM_keepout to diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5). Exempt the following from the check: (a) cell name ""nikon*"" and (b) diff ring inside :drc_tag:`areaid.sl`",AL,1.000,µm
+(nsm.3a),"Min enclosure of diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5) by :drc_tag:`areaid.ft`. Exempt the following from the check: (a) cell name ""s8Fab_crntic*""  (b)  blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption)",,3.000,µm
+(nsm.3b),"Min spacing between :drc_tag:`areaid.dt` to diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5). Exempt the following from the check: (a) blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption)",,3.000,µm
diff --git a/docs/rules/periphery/p044-m4_dotdash.csv b/docs/rules/periphery/p044-m4_dotdash.csv
index d36b918..087e99d 100644
--- a/docs/rules/periphery/p044-m4_dotdash.csv
+++ b/docs/rules/periphery/p044-m4_dotdash.csv
@@ -1,20 +1,27 @@
-Name,Description,Flags,Value

-(m4.-),"Algorithm should flag errors, for met4, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm4 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. Required for IP, Recommended for Chip-level.",RC,

-(m4.1),Min width of met4,,0.300

-(m4.2),Min spacing between two met4,,0.300

-(m4.3),via3 must  be enclosed by met4 by atleast,AL,0.065

-(m4.4),Min area of met4 (rule exempted for probe pads which are exactly 1.42um by 1.42um),,N/A

-(m4.4a),Min area of met4,,0.240

-(m4.5a),Min. spacing of features attached to or extending from huge_met4 for a distance of up to  0.400 um to metal4 (rule not checked over non-huge met4 features),,0.400

-(m4.5b),Min. spacing of huge_met4 to metal4 excluding features checked by m4.5a,,0.400

-(m4.7),Min area of meta4 holes [um2],CU,0.200

-(m4.pd.1),Min MM4_oxide_Pattern_density,RR,0.7

-(m4.pd.2a),Rule m4.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A,700

-(m4.pd.2b),Rule m4.pd.1 has to be checked by dividing the chip into steps of …,A,70

-(m4.11),Max width of metal4,CU,10.000

-(m4.12),Add slots and remove vias and contacts if wider than…..,CU,10.000

-(m4.13),Max pattern density (PD) of metal4; met4 overlapping pdm areas are excluded from the check,CU,0.77

-(m4.14),Met4 PD window size,CU,50.000

-(m4.14a),Met4 PD window step,CU,25.000

-(m4.15),Via3 must be enclosed by met4 by at least…,CU,0.060

-(m4.16),Min enclosure of pad by met4,CU,0.850

+Name,Description,Flags,Value,Unit
+(m4.-),"| Algorithm should flag errors, for met4, if ANY of the following is true:
+| An entire 700x700 window is covered by cmm4 waffleDrop, and metX PD < 70% for same window.
+| 80-100% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 65% for same window.
+| 60-80% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 60% for same window.
+| 50-60% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 50% for same window.
+| 40-50% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 40% for same window.
+| 30-40% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 30% for same window.
+| Exclude cells whose area is below 40Kum2. Required for IP, Recommended for Chip-level.",RC,,
+(m4.1),Min width of met4,,0.300,µm
+(m4.2),Min spacing between two met4,,0.300,µm
+(m4.3),via3 must  be enclosed by met4 by atleast,AL,0.065,µm
+(m4.4),Min area of met4 (rule exempted for probe pads which are exactly 1.42um by 1.42um),,N/A,N/A
+(m4.4a),Min area of met4,,0.240,µm²
+(m4.5a),Min. spacing of features attached to or extending from huge_met4 for a distance of up to  0.400 µm to metal4 (rule not checked over non-huge met4 features),,0.400,µm
+(m4.5b),Min. spacing of huge_met4 to metal4 excluding features checked by m4.5a,,0.400,µm
+(m4.7),Min area of meta4 holes,CU,0.200,µm²
+(m4.pd.1),Min MM4_oxide_Pattern_density,RR,0.7,\-
+(m4.pd.2a),Rule m4.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A,700,µm
+(m4.pd.2b),Rule m4.pd.1 has to be checked by dividing the chip into steps of …,A,70,
+(m4.11),Max width of metal4,CU,10.000,µm
+(m4.12),Add slots and remove vias and contacts if wider than…..,CU,10.000,
+(m4.13),Max pattern density (PD) of metal4; met4 overlapping pdm areas are excluded from the check,CU,0.77,\-
+(m4.14),Met4 PD window size,CU,50.000,µm
+(m4.14a),Met4 PD window step,CU,25.000,µm
+(m4.15),Via3 must be enclosed by met4 by at least…,CU,0.060,µm
+(m4.16),Min enclosure of pad by met4,CU,0.850,µm
diff --git a/docs/rules/periphery/p044-m5_dotdash.csv b/docs/rules/periphery/p044-m5_dotdash.csv
index 6cdb44e..bcc9a74 100644
--- a/docs/rules/periphery/p044-m5_dotdash.csv
+++ b/docs/rules/periphery/p044-m5_dotdash.csv
@@ -1,5 +1,5 @@
-Name,Description,Flags,Value

-(m5.1),Min width of met5,,1.600

-(m5.2),Min spacing between two met5,,1.600

-(m5.3),via4 must  be enclosed by met5 by atleast,,0.310

-(m5.4),"Min area of met5 (For all flows except SKY130PIR*/SKY130PF*, the rule is exempted for probe pads which are exactly 1.42um by 1.42um)",,4.000

+Name,Description,Flags,Value,Unit
+(m5.1),Min width of met5,,1.600,µm
+(m5.2),Min spacing between two met5,,1.600,µm
+(m5.3),via4 must  be enclosed by met5 by atleast,,0.310,µm
+(m5.4),"Min area of met5 (For all flows except SKY130PIR*/SKY130PF*, the rule is exempted for probe pads which are exactly 1.42um by 1.42um)",,4.000,µm²
diff --git a/docs/rules/periphery/p044-via4_dotdash.csv b/docs/rules/periphery/p044-via4_dotdash.csv
index 2b82f7e..4b49c3d 100644
--- a/docs/rules/periphery/p044-via4_dotdash.csv
+++ b/docs/rules/periphery/p044-via4_dotdash.csv
@@ -1,9 +1,9 @@
-Name,Description,Flags,Value

-(via4.1),Min and max L and W of via4,,0.800

-(via4.2),Spacing of via4 to via4,,0.800

-(via4.3),Only min. square via4s are allowed except die seal ring where via4s are (Via4 CD)*L,,0.8*L

-(via4.4),Via4 must be enclosed by Met4 by at least …,,0.190

-(via4.irdrop.1),"For 1 <= n <= 4 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.0

-(via4.irdrop.2),"For 5 <= n <= 10 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.2

-(via4.irdrop.3),"For 11 <= n <= 100 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.5

-(via4.irdrop.4),"For n > 100 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.8

+Name,Description,Flags,Value,Unit
+(via4.1),Min and max L and W of via4,,0.800,µm
+(via4.2),Spacing of via4 to via4,,0.800,µm
+(via4.3),Only min. square via4s are allowed except die seal ring where via4s are (Via4 CD)*L,,0.8*L,
+(via4.4),Via4 must be enclosed by Met4 by at least …,,0.190,µm
+(via4.irdrop.1),"For 1 <= n <= 4 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.0,µm
+(via4.irdrop.2),"For 5 <= n <= 10 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.2,µm
+(via4.irdrop.3),"For 11 <= n <= 100 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.5,µm
+(via4.irdrop.4),"For n > 100 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than…",CU IR,0.8,µm
diff --git a/docs/rules/periphery/p045-pad_dotdash.csv b/docs/rules/periphery/p045-pad_dotdash.csv
index f47d603..51dd837 100644
--- a/docs/rules/periphery/p045-pad_dotdash.csv
+++ b/docs/rules/periphery/p045-pad_dotdash.csv
@@ -1,3 +1,3 @@
-Name,Description,Flags,Value

-(pad.2),Min spacing of pad:dg to pad:dg,,1.270

-(pad.3),Max area of hugePad NOT top_metal,,30000

+Name,Description,Flags,Value,Unit
+(pad.2),Min spacing of pad:dg to pad:dg,,1.270,µm
+(pad.3),Max area of hugePad NOT top_metal,,30000,µm²
diff --git a/docs/rules/periphery/p045-rdl_dotdash.csv b/docs/rules/periphery/p045-rdl_dotdash.csv
index 1e36463..60ffe46 100644
--- a/docs/rules/periphery/p045-rdl_dotdash.csv
+++ b/docs/rules/periphery/p045-rdl_dotdash.csv
@@ -1,7 +1,7 @@
-Name,Description,Flags,Value

-(rdl.1),Min width of rdl,,10

-(rdl.2),Min spacing between two rdl,,10

-(rdl.3),"Min enclosure of pad by rdl, except rdl interacting with bump",,10.750

-(rdl.4),Min spacing between rdl and outer edge of the seal ring,,15.000

-(rdl.5),(rdl OR ccu1m.mk) must not overlap :drc_tag:`areaid.ft`. Exempt the following from the check: (a)  blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption),,

-(rdl.6),"Min spacing of rdl to pad, except rdl interacting with bump",,19.660

+Name,Description,Flags,Value,Unit
+(rdl.1),Min width of rdl,,10,µm
+(rdl.2),Min spacing between two rdl,,10,µm
+(rdl.3),"Min enclosure of pad by rdl, except rdl interacting with bump",,10.750,µm
+(rdl.4),Min spacing between rdl and outer edge of the seal ring,,15.000,µm
+(rdl.5),(rdl OR ccu1m.mk) must not overlap :drc_tag:`areaid.ft`. Exempt the following from the check: (a)  blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption),,,
+(rdl.6),"Min spacing of rdl to pad, except rdl interacting with bump",,19.660,µm
diff --git a/docs/rules/periphery/p046-mf_dotdash.csv b/docs/rules/periphery/p046-mf_dotdash.csv
index 41272d2..29cdc6d 100644
--- a/docs/rules/periphery/p046-mf_dotdash.csv
+++ b/docs/rules/periphery/p046-mf_dotdash.csv
@@ -1,25 +1,25 @@
-Name,Description,Flags,Value

-(mf.1),Min. and max width of fuse,,0.800

-(mf.2),Length of fuse,,7.200

-(mf.3),Spacing between centers of adjacent fuses,,2.760

-(mf.4),Spacing between center of fuse and fuse_metal (fuse shields are exempted),,3.300

-(mf.5),Max. extension of fuse_metal beyond fuse boundary,,0.830

-(mf.6),Spacing (no overlapping) between fuse center and Metal1,,3.300

-(mf.7),Spacing (no overlapping) between fuse center and LI,,3.300

-(mf.8),Spacing (no overlapping) between fuse center and poly,,2.660

-(mf.9),Spacing (no overlapping) between fuse center and tap,,2.640

-(mf.10),Spacing (no overlapping) between fuse center and diff,,3.250

-(mf.11),Spacing (no overlapping) between fuse center and nwell,,3.320

-(mf.12),Size of  fuse_shield,,0.5x2.4

-(mf.13),Min. spacing of center of fuse to fuse_shield,,2.200

-(mf.14),Max. spacing of center of fuse to fuse_shield,,3.300

-(mf.15),"Fuse_shields are only placed between periphery metal (i.e., without fuse:dg) and non-isolated edges of fuse as defined by mf.16",,

-(mf.16),The edge of a fuse is considered non-isolated if wider than or equal to mf.2 and spaced to fuse_metal by less than …,,4.000

-(mf.17),Offset between fuse_shields center and fuse center,NC,0.000

-(mf.18),Min and max space between fuse_shield and fuse_metal (opposite edges). Rule checked within 1 gridpoint.,,0.600

-(mf.19),Spacing (no overlapping) between fuse center and Metal2,,3.300

-(mf.20),Only one fuse per metal line allowed,,

-(mf.21),"Min spacing , no overlap, between metal3 and fuse center",,3.300

-(mf.22),Min spacing between fuse_contact to fuse_contact,,1.960

-(mf.23),Spacing (no overlapping) between fuse center and Metal4,,N/A

-(mf.24),Spacing (no overlapping) between fuse center and Metal5,,3.300

+Name,Description,Flags,Value,Unit
+(mf.1),Min. and max width of fuse,,0.800,µm
+(mf.2),Length of fuse,,7.200,µm
+(mf.3),Spacing between centers of adjacent fuses,,2.760,µm
+(mf.4),Spacing between center of fuse and fuse_metal (fuse shields are exempted),,3.300,µm
+(mf.5),Max. extension of fuse_metal beyond fuse boundary,,0.830,
+(mf.6),Spacing (no overlapping) between fuse center and Metal1,,3.300,µm
+(mf.7),Spacing (no overlapping) between fuse center and LI,,3.300,µm
+(mf.8),Spacing (no overlapping) between fuse center and poly,,2.660,µm
+(mf.9),Spacing (no overlapping) between fuse center and tap,,2.640,µm
+(mf.10),Spacing (no overlapping) between fuse center and diff,,3.250,µm
+(mf.11),Spacing (no overlapping) between fuse center and nwell,,3.320,µm
+(mf.12),Size of  fuse_shield,,0.5x2.4,µm
+(mf.13),Min. spacing of center of fuse to fuse_shield,,2.200,µm
+(mf.14),Max. spacing of center of fuse to fuse_shield,,3.300,µm
+(mf.15),"Fuse_shields are only placed between periphery metal (i.e., without fuse:dg) and non-isolated edges of fuse as defined by mf.16",,,
+(mf.16),The edge of a fuse is considered non-isolated if wider than or equal to mf.2 and spaced to fuse_metal by less than …,,4.000,
+(mf.17),Offset between fuse_shields center and fuse center,NC,0.000,
+(mf.18),Min and max space between fuse_shield and fuse_metal (opposite edges). Rule checked within 1 gridpoint.,,0.600,µm
+(mf.19),Spacing (no overlapping) between fuse center and Metal2,,3.300,µm
+(mf.20),Only one fuse per metal line allowed,,,
+(mf.21),"Min spacing , no overlap, between metal3 and fuse center",,3.300,µm
+(mf.22),Min spacing between fuse_contact to fuse_contact,,1.960,µm
+(mf.23),Spacing (no overlapping) between fuse center and Metal4,,N/A,N/A
+(mf.24),Spacing (no overlapping) between fuse center and Metal5,,3.300,µm
diff --git a/docs/rules/periphery/p047-hvi_dotdash.csv b/docs/rules/periphery/p047-hvi_dotdash.csv
index 858bbf1..d460a13 100644
--- a/docs/rules/periphery/p047-hvi_dotdash.csv
+++ b/docs/rules/periphery/p047-hvi_dotdash.csv
@@ -1,6 +1,6 @@
-Name,Description,Flags,Value

-(hvi.1),Min width of Hvi,P,0.600

-(hvi.2a),Min spacing of Hvi to Hvi,P,0.700

-(hvi.2b),Manual merge if space is below minimum,,

-(hvi.4),Hvi must not overlap tunm,,

-(hvi.5),Min space between hvi and nwell (exclude coincident edges),,0.700

+Name,Description,Flags,Value,Unit
+(hvi.1),Min width of Hvi,P,0.600,µm
+(hvi.2a),Min spacing of Hvi to Hvi,P,0.700,µm
+(hvi.2b),Manual merge if space is below minimum,,,
+(hvi.4),Hvi must not overlap tunm,,,
+(hvi.5),Min space between hvi and nwell (exclude coincident edges),,0.700,µm
diff --git a/docs/rules/periphery/p047-hvnwell_dotdash.csv b/docs/rules/periphery/p047-hvnwell_dotdash.csv
index 7288fd9..8f59308 100644
--- a/docs/rules/periphery/p047-hvnwell_dotdash.csv
+++ b/docs/rules/periphery/p047-hvnwell_dotdash.csv
@@ -1,5 +1,5 @@
-Name,Description,Flags,Value

-(hvnwell.8),Min space between HV_nwell  and any nwell on different nets,,2.000

-(hvnwell.9),(Nwell overlapping hvi) must be enclosed by hvi,,

-(hvnwell.10),"LVnwell and HnWell should not be on the same net (for the purposes of this check, short the connectivity through resistors); Exempt HnWell with li nets tagged ""lv_net"" using text.dg and Hnwell connected to nwell overlapping :drc_tag:`areaid.hl`",TC,

-(hvnwell.11),"Nwell connected to the nets mentioned in the ""Power_Net_Hv"" field of the latcup GUI must be enclosed by hvi (exempt nwell inside :drc_tag:`areaid.hl`). Also for the purposes of this check, short the connectivity through resistors. The rule will be checked in the latchup run and exempted for cells ""s8tsg5_tx_ibias_gen"" and ""s8bbcnv_psoc3p_top_18"",  ""rainier_top, indus_top*"", ""rainier_top, manas_top, ccg3_top""",,

+Name,Description,Flags,Value,Unit
+(hvnwell.8),Min space between HV_nwell  and any nwell on different nets,,2.000,µm
+(hvnwell.9),(Nwell overlapping hvi) must be enclosed by hvi,,,
+(hvnwell.10),"LVnwell and HnWell should not be on the same net (for the purposes of this check, short the connectivity through resistors); Exempt HnWell with li nets tagged ""lv_net"" using text.dg and Hnwell connected to nwell overlapping :drc_tag:`areaid.hl`",TC,,
+(hvnwell.11),"Nwell connected to the nets mentioned in the ""Power_Net_Hv"" field of the latcup GUI must be enclosed by hvi (exempt nwell inside :drc_tag:`areaid.hl`). Also for the purposes of this check, short the connectivity through resistors. The rule will be checked in the latchup run and exempted for cells ""s8tsg5_tx_ibias_gen"" and ""s8bbcnv_psoc3p_top_18"",  ""rainier_top, indus_top*"", ""rainier_top, manas_top, ccg3_top""",,,
diff --git a/docs/rules/periphery/p048-hvdifftap_dotdash.csv b/docs/rules/periphery/p048-hvdifftap_dotdash.csv
index f9f0068..8013ce4 100644
--- a/docs/rules/periphery/p048-hvdifftap_dotdash.csv
+++ b/docs/rules/periphery/p048-hvdifftap_dotdash.csv
@@ -1,16 +1,16 @@
-Name,Description,Flags,Value

-(hvdifftap.14),"Min width of diff inside Hvi, except HV Pdiff resistors (difftap.14a)",P,0.290

-(hvdifftap.14a),"Min width of diff inside Hvi, HV Pdiff resistors only",P,0.150

-(hvdifftap.15a),Min space of Hdiff to Hdiff,P,0.300

-(hvdifftap.15b),Min space of n+diff to non-abutting p+tap inside Hvi,P,0.370

-(hvdifftap.16),Min width tap butting diff on one or two sides inside Hvi (rule exempted inside UHVI),,0.700

-(hvdifftap.17),P+ Hdiff or Pdiff inside areaid:hvnwell must be enclosed by Hv_nwell by at least ….[Rule exempted inside UHVI],DE NE,0.330

-(hvdifftap.18),Spacing of N+ diff to HV_nwell (rule exempted inside UHVI),DE NE,0.430

-(hvdifftap.19),N+ Htap must be enclosed by Hv_nwell by at least …Rule exempted inside UHVI.,NE,0.330

-(hvdifftap.20),Spacing of P+ tap to HV_nwell (Exempted for p+tap butting pwell.rs; rule exempted inside UHVI),,0.430

-(hvdifftap.21),Diff or tap cannot straddle Hvi,P,

-(hvdifftap.22),Min enclosure of Hdiff or Htap by Hvi. Rule exempted inside UHVI.,P,0.180

-(hvdifftap.23),Space between diff or tap outside Hvi and Hvi,P,0.180

-(hvdifftap.24),Spacing of nwell to N+ Hdiff (rule exempted inside UHVI),DE NE,0.430

-(hvdifftap.25),Min space of N+ Hdiff inside HVI across non-abutting P+_tap,NC,1.070

-(hvdifftap.26),Min spacing between pwbm to difftap outside UHVI,,N/A

+Name,Description,Flags,Value,Unit
+(hvdifftap.14),"Min width of diff inside Hvi, except HV Pdiff resistors (difftap.14a)",P,0.290,µm
+(hvdifftap.14a),"Min width of diff inside Hvi, HV Pdiff resistors only",P,0.150,µm
+(hvdifftap.15a),Min space of Hdiff to Hdiff,P,0.300,µm
+(hvdifftap.15b),Min space of n+diff to non-abutting p+tap inside Hvi,P,0.370,µm
+(hvdifftap.16),Min width tap butting diff on one or two sides inside Hvi (rule exempted inside UHVI),,0.700,µm
+(hvdifftap.17),P+ Hdiff or Pdiff inside areaid:hvnwell must be enclosed by Hv_nwell by at least ….[Rule exempted inside UHVI],DE NE,0.330,µm
+(hvdifftap.18),Spacing of N+ diff to HV_nwell (rule exempted inside UHVI),DE NE,0.430,µm
+(hvdifftap.19),N+ Htap must be enclosed by Hv_nwell by at least …Rule exempted inside UHVI.,NE,0.330,µm
+(hvdifftap.20),Spacing of P+ tap to HV_nwell (Exempted for p+tap butting pwell.rs; rule exempted inside UHVI),,0.430,µm
+(hvdifftap.21),Diff or tap cannot straddle Hvi,P,,
+(hvdifftap.22),Min enclosure of Hdiff or Htap by Hvi. Rule exempted inside UHVI.,P,0.180,µm
+(hvdifftap.23),Space between diff or tap outside Hvi and Hvi,P,0.180,µm
+(hvdifftap.24),Spacing of nwell to N+ Hdiff (rule exempted inside UHVI),DE NE,0.430,µm
+(hvdifftap.25),Min space of N+ Hdiff inside HVI across non-abutting P+_tap,NC,1.070,µm
+(hvdifftap.26),Min spacing between pwbm to difftap outside UHVI,,N/A,N/A
diff --git a/docs/rules/periphery/p049-hvntm_dotdash.csv b/docs/rules/periphery/p049-hvntm_dotdash.csv
index 0824cc4..9708a99 100644
--- a/docs/rules/periphery/p049-hvntm_dotdash.csv
+++ b/docs/rules/periphery/p049-hvntm_dotdash.csv
@@ -1,12 +1,12 @@
-Name,Description,Flags,Value

-(hvntm.X.1 ),Hvntm can be drawn inside HVI. Drawn layer will be OR-ed with the CL and rechecked for CLDRC,,

-(hvntm.1),Width of hvntm,P,0.700

-(hvntm.2),Spacing of hvntm to hvntm,P,0.700

-(hvntm.3),Min. enclosure of (n+_diff inside Hvi) but not overlapping :drc_tag:`areaid.ce` by hvntm,P,0.185

-(hvntm.4),"Space, no overlap, between n+_diff outside Hvi and hvntm",P,0.185

-(hvntm.5),"Space, no overlap, between p+_diff  and hvntm",P DE,0.185

-(hvntm.6a),"Space, no overlap, between p+_tap and hvntm (except along the diff-butting edge)",P,0.185

-(hvntm.6b),"Space, no overlap, between p+_tap and hvntm along the diff-butting edge",P,0.000

-(hvntm.7),hvntm must enclose ESD_nwell_tap inside hvi by atleast,P,0.000

-(hvntm.9),Hvntm must not overlap :drc_tag:`areaid.ce`,,

-(hvntm.10),Hvntm must overlap hvi,,

+Name,Description,Flags,Value,Unit
+(hvntm.X.1),Hvntm can be drawn inside HVI. Drawn layer will be OR-ed with the CL and rechecked for CLDRC,,,
+(hvntm.1),Width of hvntm,P,0.700,µm
+(hvntm.2),Spacing of hvntm to hvntm,P,0.700,µm
+(hvntm.3),Min. enclosure of (n+_diff inside Hvi) but not overlapping :drc_tag:`areaid.ce` by hvntm,P,0.185,µm
+(hvntm.4),"Space, no overlap, between n+_diff outside Hvi and hvntm",P,0.185,µm
+(hvntm.5),"Space, no overlap, between p+_diff  and hvntm",P DE,0.185,µm
+(hvntm.6a),"Space, no overlap, between p+_tap and hvntm (except along the diff-butting edge)",P,0.185,µm
+(hvntm.6b),"Space, no overlap, between p+_tap and hvntm along the diff-butting edge",P,0.000,µm
+(hvntm.7),hvntm must enclose ESD_nwell_tap inside hvi by atleast,P,0.000,
+(hvntm.9),Hvntm must not overlap :drc_tag:`areaid.ce`,,,
+(hvntm.10),Hvntm must overlap hvi,,,
diff --git a/docs/rules/periphery/p049-hvpoly_dotdash.csv b/docs/rules/periphery/p049-hvpoly_dotdash.csv
index c4dd20b..69fe5eb 100644
--- a/docs/rules/periphery/p049-hvpoly_dotdash.csv
+++ b/docs/rules/periphery/p049-hvpoly_dotdash.csv
@@ -1,3 +1,3 @@
-Name,Description,Flags,Value

-(hvpoly.13),Min width of poly over diff inside Hvi,P,0.500

-(hvpoly.14),(poly and diff) cannot straddle Hvi,,

+Name,Description,Flags,Value,Unit
+(hvpoly.13),Min width of poly over diff inside Hvi,P,0.500,µm
+(hvpoly.14),(poly and diff) cannot straddle Hvi,,,
diff --git a/docs/rules/periphery/p050-denmos_dotdash.csv b/docs/rules/periphery/p050-denmos_dotdash.csv
index e31fd61..8c53323 100644
--- a/docs/rules/periphery/p050-denmos_dotdash.csv
+++ b/docs/rules/periphery/p050-denmos_dotdash.csv
@@ -1,16 +1,16 @@
-Name,Description,Flags,Value

-(denmos.1),Min width of de_nFet_gate,,1.055

-(denmos.2),Min width of de_nFet_source not overlapping poly,,0.280

-(denmos.3),Min width of de_nFet_source overlapping poly,,0.925

-(denmos.4),Min width of the de_nFet_drain,,0.170

-(denmos.5),Min/Max extension of de_nFet_source over nwell,,0.225

-(denmos.6),Min/Max spacing between de_nFet_drain and de_nFet_source,,1.585

-(denmos.7),Min channel width for de_nFet_gate,,5.000

-(denmos.8),90 degree angles are not permitted for nwell overlapping de_nFET_drain,,

-(denmos.9a),"All bevels on nwell are 45 degree, 0.43 um from corners",NC,

-(denmos.9b),"All bevels on de_nFet_drain are 45 degree, 0.05 um from corners",NC,

-(denmos.10),Min enclosure of de_nFet_drain by nwell,,0.660

-(denmos.11),Min spacing between p+ tap and (nwell overlapping de_nFet_drain),,0.860

-(denmos.12),Min spacing between nwells overlapping de_nFET_drain,,2.400

-(denmos.13),de_nFet_source must be enclosed by nsdm by,,0.130

-(denmos.14),nvhv FETs must be enclosed by :drc_tag:`areaid.mt`,,N/A

+Name,Description,Flags,Value,Unit
+(denmos.1),Min width of de_nFet_gate,,1.055,µm
+(denmos.2),Min width of de_nFet_source not overlapping poly,,0.280,µm
+(denmos.3),Min width of de_nFet_source overlapping poly,,0.925,µm
+(denmos.4),Min width of the de_nFet_drain,,0.170,µm
+(denmos.5),Min/Max extension of de_nFet_source over nwell,,0.225,
+(denmos.6),Min/Max spacing between de_nFet_drain and de_nFet_source,,1.585,µm
+(denmos.7),Min channel width for de_nFet_gate,,5.000,µm
+(denmos.8),90 degree angles are not permitted for nwell overlapping de_nFET_drain,,,
+(denmos.9a),"All bevels on nwell are 45 degree, 0.43 µm from corners",NC,,µm
+(denmos.9b),"All bevels on de_nFet_drain are 45 degree, 0.05 µm from corners",NC,,µm
+(denmos.10),Min enclosure of de_nFet_drain by nwell,,0.660,µm
+(denmos.11),Min spacing between p+ tap and (nwell overlapping de_nFet_drain),,0.860,µm
+(denmos.12),Min spacing between nwells overlapping de_nFET_drain,,2.400,µm
+(denmos.13),de_nFet_source must be enclosed by nsdm by,,0.130,µm
+(denmos.14),nvhv FETs must be enclosed by :drc_tag:`areaid.mt`,,N/A,N/A
diff --git a/docs/rules/periphery/p051-depmos_dotdash.csv b/docs/rules/periphery/p051-depmos_dotdash.csv
index d573fbf..28e3049 100644
--- a/docs/rules/periphery/p051-depmos_dotdash.csv
+++ b/docs/rules/periphery/p051-depmos_dotdash.csv
@@ -1,15 +1,15 @@
-Name,Description,Flags,Value

-(depmos.1),Min width of de_pFet_gate,,1.050

-(depmos.2),Min width of de_pFet_source not overlapping poly,,0.280

-(depmos.3),Min width of de_pFet_source overlapping poly,,0.920

-(depmos.4),Min width of the de_pFet_drain,,0.170

-(depmos.5),Min/Max extension of de_pFet_source beyond nwell,,0.260

-(depmos.6),Min/Max spacing between de_pFet_drain and de_pFet_source,,1.190

-(depmos.7),Min channel width for de_pFet_gate,,5.000

-(depmos.8),90 degree angles are not permitted for nwell hole overlapping de_pFET_drain,,

-(depmos.9a),"All bevels on nwell hole are 45 degree, 0.43 um from corners",NC,

-(depmos.9b),"All bevels on de_pFet_drain are 45 degree, 0.05 um from corners",NC,

-(depmos.10),Min enclosure of de_pFet_drain by nwell hole,,0.860

-(depmos.11),Min spacing between n+ tap and (nwell hole enclosing de_pFET_drain),,0.660

-(depmos.12),de_pFet_source must be enclosed by psdm by,,0.130

-(depmos.13),pvhv fets( except those with W/L = 5.0/0.66) must be enclosed by :drc_tag:`areaid.mt`,,N/A

+Name,Description,Flags,Value,Unit
+(depmos.1),Min width of de_pFet_gate,,1.050,µm
+(depmos.2),Min width of de_pFet_source not overlapping poly,,0.280,µm
+(depmos.3),Min width of de_pFet_source overlapping poly,,0.920,µm
+(depmos.4),Min width of the de_pFet_drain,,0.170,µm
+(depmos.5),Min/Max extension of de_pFet_source beyond nwell,,0.260,
+(depmos.6),Min/Max spacing between de_pFet_drain and de_pFet_source,,1.190,µm
+(depmos.7),Min channel width for de_pFet_gate,,5.000,µm
+(depmos.8),90 degree angles are not permitted for nwell hole overlapping de_pFET_drain,,,
+(depmos.9a),"All bevels on nwell hole are 45 degree, 0.43 µm from corners",NC,,µm
+(depmos.9b),"All bevels on de_pFet_drain are 45 degree, 0.05 µm from corners",NC,,µm
+(depmos.10),Min enclosure of de_pFet_drain by nwell hole,,0.860,µm
+(depmos.11),Min spacing between n+ tap and (nwell hole enclosing de_pFET_drain),,0.660,µm
+(depmos.12),de_pFet_source must be enclosed by psdm by,,0.130,µm
+(depmos.13),pvhv fets( except those with W/L = 5.0/0.66) must be enclosed by :drc_tag:`areaid.mt`,,N/A,N/A
diff --git a/docs/rules/periphery/p052-extd_dotdash.csv b/docs/rules/periphery/p052-extd_dotdash.csv
index b028bfd..a4060ee 100644
--- a/docs/rules/periphery/p052-extd_dotdash.csv
+++ b/docs/rules/periphery/p052-extd_dotdash.csv
@@ -1,9 +1,9 @@
-Name,Description,Flags,Value

-(extd.1),Difftap cannot straddle areaid:en,,

-(extd.2),DiffTap must have 2 or 3 coincident edges with areaid:en if enclosed by areaid:en,,

-(extd.3),Poly must not be entirely overlapping difftap in areaid:en,,

-(extd.4),"Only cell name ""s8rf_n20vhv1*"" is a valid cell name for n20vhv1 device  (Check in LVS as invalid device)",,N/A

-(extd.5),"Only cell name ""s8rf_n20vhviso1"" is a valid cell name for n20vhviso1 device  (Check in LVS as invalid device)",,N/A

-(extd.6),"Only cell name ""s8rf_p20vhv1"" is a valid cell name for p20vhv1 device  (Check in LVS as invalid device)",,N/A

-(extd.7),"Only cell name ""s8rf_n20nativevhv1*"" is a valid cell name for n20nativevhv1 device  (Check in LVS as invalid device)",,N/A

-(extd.8),"Only cell name ""s8rf_n20zvtvhv1*"" is a valid cell name for n20zvtvhv1 device  (Check in LVS as invalid device)",,N/A

+Name,Description,Flags,Value,Unit
+(extd.1),Difftap cannot straddle areaid:en,,,
+(extd.2),DiffTap must have 2 or 3 coincident edges with areaid:en if enclosed by areaid:en,,,
+(extd.3),Poly must not be entirely overlapping difftap in areaid:en,,,
+(extd.4),"Only cell name ""s8rf_n20vhv1*"" is a valid cell name for n20vhv1 device  (Check in LVS as invalid device)",,N/A,N/A
+(extd.5),"Only cell name ""s8rf_n20vhviso1"" is a valid cell name for n20vhviso1 device  (Check in LVS as invalid device)",,N/A,N/A
+(extd.6),"Only cell name ""s8rf_p20vhv1"" is a valid cell name for p20vhv1 device  (Check in LVS as invalid device)",,N/A,N/A
+(extd.7),"Only cell name ""s8rf_n20nativevhv1*"" is a valid cell name for n20nativevhv1 device  (Check in LVS as invalid device)",,N/A,N/A
+(extd.8),"Only cell name ""s8rf_n20zvtvhv1*"" is a valid cell name for n20zvtvhv1 device  (Check in LVS as invalid device)",,N/A,N/A
diff --git a/docs/rules/periphery/p054-hv_dotdash_dotdash.csv b/docs/rules/periphery/p054-hv_dotdash_dotdash.csv
index 03d9d78..3a06ddb 100644
--- a/docs/rules/periphery/p054-hv_dotdash_dotdash.csv
+++ b/docs/rules/periphery/p054-hv_dotdash_dotdash.csv
@@ -1,20 +1,20 @@
-Name,Description,Flags,Value

-(hv.X.1),High voltage source/drain regions must be tagged by diff:hv,,

-(hv.X.3),"High voltage poly can be drawn over multiple diff regions that are ALL reverse-biased by at least 300 mV (existence of reverse-bias is not checked by the CAD flow).  It can also be drawn over multiple diffs when all sources and all drain are shorted together. In these case, the high voltage poly can be tagged with the text:dg label with a value “hv_bb”.  Exceptions to this use of the hv_bb label must be approved by technology.  Under certain bias conditions, high voltage poly tagged with hv_bb can cross an nwell boundary. The poly of the drain extended device crosses nwell by construction and can be tagged with the ""hv_bb"" label. Use of the hv_bb label on high voltage poly crossing an nwell boundary must be approved by technology. All high voltage poly tagged with hv_bb will not be checked to hv.poly.1, hv.poly.2, hv.poly.3 and hv.poly.4.",,

-(hv.X.4),Any piece of layout that is shorted to hv_source/drain becomes a high voltage feature.,,

-(hv.X.5),"In cases where an hv poly gate abuts only low voltage source and drain, the poly gate can be tagged with the text:dg label with a value ""hv_lv"".  In this case, the ""hv_lv"" tagged poly gate and its extensions will not be checked to hv.poly.6, but is checked by rules in the poly.-.- section.  The use of the hv_lv label must be approved by technology.",,

-(hv.X.6),"Nwell biased at voltages >= 7.2V must be tagged with text ""shv_nwell""",NC,

-(hv.nwell.1),"Min spacing of nwell tagged with text ""shv_nwell"" to any nwell on different nets",,2.500

-(hv.diff.1a),Minimum hv_source/drain spacing to diff for edges of hv_source/drain and diff not butting tap,,0.300

-(hv.diff.1b),Minimum spacing of (n+/p+ diff resistors and diodes) connected to hv_source/drain to diff,,0.300

-(hv.diff.2),Minimum spacing of nwell connected to hv_source/drain to n+ diff,DE,0.430

-(hv.diff.3a),Minimum n+ hv_source/drain spacing to nwell,,0.550

-(hv.diff.3b),Minimum spacing of (n+ diff resistors and diodes) connected to hv_source/drain to nwell,,0.550

-(hv.poly.1),Hv poly feature hvPoly (including hv poly resistors) can be drawn over only one diff region and is not allowed to cross nwell boundary except (1) as allowed in rule .X.3 and (2) nwell hole boundary in depmos,,

-(hv.poly.2),Min spacing of hvPoly (including hv poly resistor) on field to diff (diff butting hvPoly are excluded),,0.300

-(hv.poly.3),Min spacing of hvPoly (including hv poly resistor) on field to n-well (exempt poly stradding nwell in a denmos/depmos),,0.550

-(hv.poly.4),Enclosure of hvPoly (including hv poly resistor) on field by n-well (exempt poly stradding nwell in a denmos/depmos),,0.300

-(hv.poly.6a),Min extension of poly beyond hvFET_gate (exempt poly extending beyond diff along the S/D direction in a denmos/depmos),,0.160

-(hv.poly.6b),Extension of hv poly beyond FET_gate (including hvFET_gate; exempt poly extending beyond diff along the S/D direction in a denmos/depmos),,0.160

-(hv.poly.7),Minimum overlap of hv poly ring_FET and diff,,

-(hv.poly.8),Any poly gate abutting hv_source/drain becomes a hvFET_gate,,

+Name,Description,Flags,Value,Unit
+(hv.X.1),High voltage source/drain regions must be tagged by diff:hv,,,
+(hv.X.3),"High voltage poly can be drawn over multiple diff regions that are ALL reverse-biased by at least 300 mV (existence of reverse-bias is not checked by the CAD flow).  It can also be drawn over multiple diffs when all sources and all drain are shorted together. In these case, the high voltage poly can be tagged with the text:dg label with a value “hv_bb”.  Exceptions to this use of the hv_bb label must be approved by technology.  Under certain bias conditions, high voltage poly tagged with hv_bb can cross an nwell boundary. The poly of the drain extended device crosses nwell by construction and can be tagged with the ""hv_bb"" label. Use of the hv_bb label on high voltage poly crossing an nwell boundary must be approved by technology. All high voltage poly tagged with hv_bb will not be checked to hv.poly.1, hv.poly.2, hv.poly.3 and hv.poly.4.",,,
+(hv.X.4),Any piece of layout that is shorted to hv_source/drain becomes a high voltage feature.,,,
+(hv.X.5),"In cases where an hv poly gate abuts only low voltage source and drain, the poly gate can be tagged with the text:dg label with a value ""hv_lv"".  In this case, the ""hv_lv"" tagged poly gate and its extensions will not be checked to hv.poly.6, but is checked by rules in the poly.-.- section.  The use of the hv_lv label must be approved by technology.",,,
+(hv.X.6),"Nwell biased at voltages >= 7.2V must be tagged with text ""shv_nwell""",NC,,
+(hv.nwell.1),"Min spacing of nwell tagged with text ""shv_nwell"" to any nwell on different nets",,2.500,µm
+(hv.diff.1a),Minimum hv_source/drain spacing to diff for edges of hv_source/drain and diff not butting tap,,0.300,µm
+(hv.diff.1b),Minimum spacing of (n+/p+ diff resistors and diodes) connected to hv_source/drain to diff,,0.300,µm
+(hv.diff.2),Minimum spacing of nwell connected to hv_source/drain to n+ diff,DE,0.430,µm
+(hv.diff.3a),Minimum n+ hv_source/drain spacing to nwell,,0.550,µm
+(hv.diff.3b),Minimum spacing of (n+ diff resistors and diodes) connected to hv_source/drain to nwell,,0.550,µm
+(hv.poly.1),Hv poly feature hvPoly (including hv poly resistors) can be drawn over only one diff region and is not allowed to cross nwell boundary except (1) as allowed in rule .X.3 and (2) nwell hole boundary in depmos,,,
+(hv.poly.2),Min spacing of hvPoly (including hv poly resistor) on field to diff (diff butting hvPoly are excluded),,0.300,µm
+(hv.poly.3),Min spacing of hvPoly (including hv poly resistor) on field to n-well (exempt poly stradding nwell in a denmos/depmos),,0.550,µm
+(hv.poly.4),Enclosure of hvPoly (including hv poly resistor) on field by n-well (exempt poly stradding nwell in a denmos/depmos),,0.300,µm
+(hv.poly.6a),Min extension of poly beyond hvFET_gate (exempt poly extending beyond diff along the S/D direction in a denmos/depmos),,0.160,
+(hv.poly.6b),Extension of hv poly beyond FET_gate (including hvFET_gate; exempt poly extending beyond diff along the S/D direction in a denmos/depmos),,0.160,
+(hv.poly.7),Minimum overlap of hv poly ring_FET and diff,,,
+(hv.poly.8),Any poly gate abutting hv_source/drain becomes a hvFET_gate,,,
diff --git a/docs/rules/periphery/p055-uhvi_dotdash_dotdash.csv b/docs/rules/periphery/p055-uhvi_dotdash_dotdash.csv
index b6ed684..3975773 100644
--- a/docs/rules/periphery/p055-uhvi_dotdash_dotdash.csv
+++ b/docs/rules/periphery/p055-uhvi_dotdash_dotdash.csv
@@ -1,11 +1,11 @@
-Name,Description,Flags,Value

-(uhvi.1.-),diff/tap can not straddle UHVI,,N/A

-(uhvi.2.-),poly can not straddle UHVI,,N/A

-(uhvi.3.-),pwbm.dg must be enclosed by UHVI (exempt inside :drc_tag:`areaid.lw`),,N/A

-(uhvi.4.-),dnw.dg can not straddle UHVI,,N/A

-(uhvi.5.-),UHVI must enclose :drc_tag:`areaid.ext`,,N/A

-(uhvi.6.-),UHVI must enclose dnwell,,N/A

-(uhvi.7.-),natfet.dg must be enclosed by UHVI layer by at least,,N/A

-(uhvi.8.-),Minimum width of natfet.dg,,N/A

-(uhvi.9.-),Minimum Space spacing of natfet.dg,,N/A

-(uhvi.10.-),natfet.dg layer is not allowed,,N/A

+Name,Description,Flags,Value,Unit
+(uhvi.1.-),diff/tap can not straddle UHVI,,N/A,N/A
+(uhvi.2.-),poly can not straddle UHVI,,N/A,N/A
+(uhvi.3.-),pwbm.dg must be enclosed by UHVI (exempt inside :drc_tag:`areaid.lw`),,N/A,N/A
+(uhvi.4.-),dnw.dg can not straddle UHVI,,N/A,N/A
+(uhvi.5.-),UHVI must enclose :drc_tag:`areaid.ext`,,N/A,N/A
+(uhvi.6.-),UHVI must enclose dnwell,,N/A,N/A
+(uhvi.7.-),natfet.dg must be enclosed by UHVI layer by at least,,N/A,N/A
+(uhvi.8.-),Minimum width of natfet.dg,,N/A,N/A
+(uhvi.9.-),Minimum Space spacing of natfet.dg,,N/A,N/A
+(uhvi.10.-),natfet.dg layer is not allowed,,N/A,N/A
diff --git a/docs/rules/periphery/p055-ulvt-_dotdash.csv b/docs/rules/periphery/p055-ulvt-_dotdash.csv
index 32f94b0..d59f02f 100644
--- a/docs/rules/periphery/p055-ulvt-_dotdash.csv
+++ b/docs/rules/periphery/p055-ulvt-_dotdash.csv
@@ -1,4 +1,4 @@
-Name,Description,Flags,Value

-(ulvt-.1),":drc_tag:`areaid.low_vt` must enclose dnw for the UHV dnw-psub diode texted ""condiodeHvPsub""",,NA

-(ulvt-.2),":drc_tag:`areaid.low_vt` must enclose pwbm.dg for the UHV dnw-psub diode texted ""condiodeHvPsub""",,NA

-(ulvt-.3),:drc_tag:`areaid.low_vt` can not straddle UHVI,,NA

+Name,Description,Flags,Value,Unit
+(ulvt-.1),":drc_tag:`areaid.low_vt` must enclose dnw for the UHV dnw-psub diode texted ""condiodeHvPsub""",,NA,
+(ulvt-.2),":drc_tag:`areaid.low_vt` must enclose pwbm.dg for the UHV dnw-psub diode texted ""condiodeHvPsub""",,NA,
+(ulvt-.3),:drc_tag:`areaid.low_vt` can not straddle UHVI,,NA,
diff --git a/docs/rules/periphery/p055-vhvi_dotdash_dotdash.csv b/docs/rules/periphery/p055-vhvi_dotdash_dotdash.csv
index fb0a4e5..90ba2e2 100644
--- a/docs/rules/periphery/p055-vhvi_dotdash_dotdash.csv
+++ b/docs/rules/periphery/p055-vhvi_dotdash_dotdash.csv
@@ -1,15 +1,15 @@
-Name,Description,Flags,Value

-(vhvi.vhv.1),Terminals operating at nominal 12V (maximum 16V) bias must be tagged as Very-High-Voltage (VHV) using vhvi:dg layer,NC,

-(vhvi.vhv.2),A source or drain of a drain-extended device can be tagged by vhvi:dg. A device with either source or drain (not both) tagged with vhvi:dg serves as a VHV propagation stopper,NC,

-(vhvi.vhv.3),Any feature connected to VHVSourceDrain becomes a very-high-voltage feature,NC,

-(vhvi.vhv.4),Any feature connected to VHVPoly becomes a very-high-voltage feature,NC,

-(vhvi.vhv.5),"Diffusion that is not a part of a drain-extended device (i.e., diff not areaid:en) must not be on the same net as VHVSourceDrain. Only diffusion inside :drc_tag:`areaid.ed` and LV diffusion tagged with vhvi:dg are exempted.",,

-(vhvi.vhv.6),"Poly resistor can act as a VHV propagation stopper. For this, it should be tagged with text ""vhv_block""",NC,

-(vhvi.1.-),Min width of vhvi:dg,,0.020

-(vhvi.2.-),Vhvi:dg cannot overlap areaid:ce,,

-(vhvi.3.-),VHVGate must overlap hvi:dg,,

-(vhvi.4.-),Poly connected to the same net as a VHVSourceDrain must be tagged with vhvi:dg layer,,

-(vhvi.5.-),Vhvi:dg cannot straddle VHVSourceDrain,,

-(vhvi.6.-),Vhvi:dg overlapping VHVSourceDrain must not overlap poly,,

-(vhvi.7.-),Vhvi:dg cannot straddle VHVPoly,,

-(vhvi.8.-),"Min space between nwell tagged with vhvi:dg and deep nwell, nwell, or n+diff on a separate net (except for n+diff overlapping nwell tagged with vhvi:dg).",,11.240

+Name,Description,Flags,Value,Unit
+(vhvi.vhv.1),Terminals operating at nominal 12V (maximum 16V) bias must be tagged as Very-High-Voltage (VHV) using vhvi:dg layer,NC,,
+(vhvi.vhv.2),A source or drain of a drain-extended device can be tagged by vhvi:dg. A device with either source or drain (not both) tagged with vhvi:dg serves as a VHV propagation stopper,NC,,
+(vhvi.vhv.3),Any feature connected to VHVSourceDrain becomes a very-high-voltage feature,NC,,
+(vhvi.vhv.4),Any feature connected to VHVPoly becomes a very-high-voltage feature,NC,,
+(vhvi.vhv.5),"Diffusion that is not a part of a drain-extended device (i.e., diff not areaid:en) must not be on the same net as VHVSourceDrain. Only diffusion inside :drc_tag:`areaid.ed` and LV diffusion tagged with vhvi:dg are exempted.",,,
+(vhvi.vhv.6),"Poly resistor can act as a VHV propagation stopper. For this, it should be tagged with text ""vhv_block""",NC,,
+(vhvi.1.-),Min width of vhvi:dg,,0.020,µm
+(vhvi.2.-),Vhvi:dg cannot overlap areaid:ce,,,
+(vhvi.3.-),VHVGate must overlap hvi:dg,,,
+(vhvi.4.-),Poly connected to the same net as a VHVSourceDrain must be tagged with vhvi:dg layer,,,
+(vhvi.5.-),Vhvi:dg cannot straddle VHVSourceDrain,,,
+(vhvi.6.-),Vhvi:dg overlapping VHVSourceDrain must not overlap poly,,,
+(vhvi.7.-),Vhvi:dg cannot straddle VHVPoly,,,
+(vhvi.8.-),"Min space between nwell tagged with vhvi:dg and deep nwell, nwell, or n+diff on a separate net (except for n+diff overlapping nwell tagged with vhvi:dg).",,11.240,µm
diff --git a/docs/rules/periphery/p056-pwres_dotdash_dotdash.csv b/docs/rules/periphery/p056-pwres_dotdash_dotdash.csv
index 168c42c..9a2ff55 100644
--- a/docs/rules/periphery/p056-pwres_dotdash_dotdash.csv
+++ b/docs/rules/periphery/p056-pwres_dotdash_dotdash.csv
@@ -1,13 +1,13 @@
-Name,Description,Flags,Value

-(pwres.1.-),Pwell resistor has to be enclosed by the res layer,NC,

-(pwres.2.-),Min/Max width of pwell resistor,,2.650

-(pwres.3.-),Min length of pwell resistor,,26.500

-(pwres.4.-),Max length of pwell resistor,,265.00

-(pwres.5.-),Min/Max spacing of tap inside the pwell resistor to nwell,,0.220

-(pwres.6.-),Min/Max width of tap inside the pwell resistor,,0.530

-(pwres.7a.-),Every pwres_terminal must enclose 12 licon1,,

-(pwres.7b.-),Every pwres_terminal must enclose 12 mcons if routed through metal1,,

-(pwres.8.-),Diff or poly is not allowed in the pwell resistor.,,

-(pwres.9.-),Nwell surrounding the pwell resistor must have a full ring of contacted tap strapped with metal.,,

-(pwres.10.-),The res layer must abut pwres_terminal on opposite and parallel edges,,

-(pwres.11.-),The res layer must abut nwell on opposite and parallel edges not checked in Rule pwres.10,,

+Name,Description,Flags,Value,Unit
+(pwres.1.-),Pwell resistor has to be enclosed by the res layer,NC,,
+(pwres.2.-),Min/Max width of pwell resistor,,2.650,µm
+(pwres.3.-),Min length of pwell resistor,,26.500,µm
+(pwres.4.-),Max length of pwell resistor,,265.00,µm
+(pwres.5.-),Min/Max spacing of tap inside the pwell resistor to nwell,,0.220,µm
+(pwres.6.-),Min/Max width of tap inside the pwell resistor,,0.530,µm
+(pwres.7a.-),Every pwres_terminal must enclose 12 licon1,,,
+(pwres.7b.-),Every pwres_terminal must enclose 12 mcons if routed through metal1,,,
+(pwres.8.-),Diff or poly is not allowed in the pwell resistor.,,,
+(pwres.9.-),Nwell surrounding the pwell resistor must have a full ring of contacted tap strapped with metal.,,,
+(pwres.10.-),The res layer must abut pwres_terminal on opposite and parallel edges,,,
+(pwres.11.-),The res layer must abut nwell on opposite and parallel edges not checked in Rule pwres.10,,,
diff --git a/docs/rules/periphery/p057-rfdiode_dotdash_dotdash.csv b/docs/rules/periphery/p057-rfdiode_dotdash_dotdash.csv
index f45b91f..ebf7e97 100644
--- a/docs/rules/periphery/p057-rfdiode_dotdash_dotdash.csv
+++ b/docs/rules/periphery/p057-rfdiode_dotdash_dotdash.csv
@@ -1,8 +1,8 @@
-Name,Description,Flags,Value

-(rfdiode.1.-),Only 90 degrees allowed for :drc_tag:`areaid.re`,,

-(rfdiode.2.-),:drc_tag:`areaid.re` must be coincident with nwell for the rf nwell diode,,

+Name,Description,Flags,Value,Unit
+(rfdiode.1.-),Only 90 degrees allowed for :drc_tag:`areaid.re`,,,
+(rfdiode.2.-),:drc_tag:`areaid.re` must be coincident with nwell for the rf nwell diode,,,
 (rfdiode.3.-),":drc_tag:`areaid.re` must be coincident with innwer edge of the nwell ring for the rf pwell-deep nwell diode
 Allowed PNP layout
 Layout: pnppar
 Allowed NPN layout
-Layout: npnpar1x1",,

+Layout: npnpar1x1",,,
diff --git a/docs/rules/periphery/periphery-split-csv.py b/docs/rules/periphery/periphery-split-csv.py
index ba7b03a..9e632d4 100755
--- a/docs/rules/periphery/periphery-split-csv.py
+++ b/docs/rules/periphery/periphery-split-csv.py
@@ -55,7 +55,7 @@
     description: str = ''
     flags: Tuple[RuleFlags] = field(default_factory=tuple)
     value: str = ''
-
+    unit: str = ''
 
 @dataclass
 class RuleTable:
@@ -219,7 +219,7 @@
         rt.enabled = False
 
     for r in rows:
-        assert len(r) == 4, r
+        assert len(r) == 5, r
 
         if r[0] == 'Use' and r[1] == 'Explanation':
             break
@@ -233,6 +233,7 @@
             r[3] = ''
         rc.flags = tuple(flags)
         rc.value = r[3]
+        rc.unit  = r[4].strip()
         rt.rules.append(rc)
 
     if rule_tables:
@@ -254,7 +255,6 @@
 .. list-table::
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
    :widths: 10 75
 
    * - Use
@@ -289,15 +289,14 @@
 
 """.format(textwrap.indent(rt.notes, prefix='    ')))
 
-    headers = ('Name', 'Description', 'Flags', 'Value')
-    headers_fmt = (':drc_rule:`Name`', 'Description', ':drc_flag:`Flags`', 'Value')
+    headers = ('Name', 'Description', 'Flags', 'Value', 'Unit')
+    headers_fmt = (':drc_rule:`Name`', 'Description', ':drc_flag:`Flags`', 'Value', 'Unit')
 
     rst.write("""\
 .. list-table:: {rt.description}
    :header-rows: 1
    :stub-columns: 1
-   :width: 100%
-   :widths: 10 75 5 10
+   :widths: 9 73 6 6 6
 
    * - {h}
 """.format(rt=rt,h='\n     - '.join(headers_fmt)))
@@ -305,18 +304,25 @@
 
     for r in rt.rules:
         f = ' '.join(':drc_flag:`{}`'.format(f.name) for f in r.flags)
-        d = textwrap.indent(r.description, prefix='        ').strip()
+        if '\\n- ' in r.description: # bullet list description
+            r.description = r.description.replace('\\n- ','\n  - ')
+        elif '\\n' in r.description: # multi line description
+            r.description = '\n'.join( [ '| '+l for l in r.description.split('\\n') ] )
+        else:
+            r.description = r.description.lstrip(' -') # one item bullet list to text
+        d = textwrap.indent(r.description, prefix='       ').strip()
         rst.write("""\
    * - :drc_rule:`{r.name}`
      - {d}
      - {f}
      - {r.value}
+     - {r.unit}
 """.format(r=r, d=d, f=f))
 
     rst.write('\n\n')
 
     with open(rt.csv_fname, 'w', newline='', encoding='utf8') as f:
-        w = csv.DictWriter(f, headers)
+        w = csv.DictWriter(f, headers, lineterminator='\n')
         w.writeheader()
         for r in rt.rules:
             d = {f: getattr(r, f.lower()) for f in headers}
@@ -336,3 +342,4 @@
 
 with open(PERIPHERY_RULES_FILE, encoding='utf8') as f:
     print(f.read())
+
diff --git a/docs/rules/periphery/periphery.csv b/docs/rules/periphery/periphery.csv
index d210225..32234f1 100644
--- a/docs/rules/periphery/periphery.csv
+++ b/docs/rules/periphery/periphery.csv
@@ -5,74 +5,74 @@
 , ,,
 (x.-),General,,
 ,,,
-1a,"p1m.md (OPC), DECA and AMKOR layers (pi1.dg, pmm.dg, rdl.dg, pi2.dg, ubm.dg, bump.dg) and mask data for p1m, met1, via, met2 must be on a grid of [mm]",,0.001
-1b,Data for SKY130 layout and mask on all layers except those mentioned in 1a must be on a grid of [mm] (except inside Seal ring),,0.005
-2,Angles permitted on: diff,,N/A
- ,"Angles permitted on: diff except for:\n- diff inside ""advSeal_6um* OR cuPillarAdvSeal_6um*"" pcell, \n- diff rings around the die at min total L>1000 um and W=0.3 um",,n x 90
- ,"Angles permitted on: tap (except inside :drc_tag:`areaid.en`), poly (except for ESD flare gates or gated_npn), li1(periphery), licon1, capm, mcon, via, via2. Anchors are exempted.",,n x 90
- ,Angles permitted on: via3 and via4. Anchors are exempted.,,n x 90
-2a,Analog circuits identified by :drc_tag:`areaid.analog` to use rectangular diff and tap geometries only; that are not to be merged into more complex shapes (T's or L's) ,,
-2c,"45 degree angles allowed on diff, tap inside UHVI",,
+1a,"p1m.md (OPC), DECA and AMKOR layers (pi1.dg, pmm.dg, rdl.dg, pi2.dg, ubm.dg, bump.dg) and mask data for p1m, met1, via, met2 must be on a grid of mm",,0.001,mm
+1b,Data for SKY130 layout and mask on all layers except those mentioned in 1a must be on a grid of mm (except inside Seal ring),,0.005,mm
+2,Angles permitted on: diff,,N/A,N/A
+ ,"Angles permitted on: diff except for:\n- diff inside ""advSeal_6µm* OR cuPillarAdvSeal_6µm*"" pcell, \n- diff rings around the die at min total L>1000 µm and W=0.3 µm",,n x 90,deg
+ ,"Angles permitted on: tap (except inside :drc_tag:`areaid.en`), poly (except for ESD flare gates or gated_npn), li1(periphery), licon1, capm, mcon, via, via2. Anchors are exempted.",,n x 90,deg
+ ,Angles permitted on: via3 and via4. Anchors are exempted.,,n x 90,deg
+2a,Analog circuits identified by :drc_tag:`areaid.analog` to use rectangular diff and tap geometries only; that are not to be merged into more complex shapes (T's or L's),,,
+2c,"45 degree angles allowed on diff, tap inside UHVI",,,
 ,,,
-3,Angles permitted on all other layers and in the seal ring for all the layers,,
-3a,"Angles permitted on all other layers except WLCSP layers (pmm, rdl, pmm2, ubm and bump)",,n x 45
-4,Electrical DR cover layout guidelines for electromigration,NC,
-5,"All ""pin""polygons must be within the ""drawing"" polygons of the layer",Al,
-6,All intra-layer separation checks will include a notch check,,
-7,Mask layer line and space checks must be done on all layers (checked with s.x rules),NC,
-8,"Use of areaid ""core"" layer (""coreid"") must be approved by technology",NC,
-9,"Shapes on maskAdd or maskDrop layers (""serifs"") are allowed in core only. Exempted are: \n- cfom md/mp inside ""advSeal_6um* OR cuPillarAdvSeal_6um*"" pcell \n- diff rings around the die at min total L>1000 um and W=0.3 um, and PMM/PDMM inside areaid:sl",,
- ,"Shapes on maskAdd or maskDrop layers (""serifs"") are allowed in core only. PMM/PDMM inside areaid:sl are excluded.",,N/A
-10,"Res purpose layer for (diff, poly) cannot overlap licon1",,
-11,Metal fuses are drawn in met2,LVS,N/A
- ,Metal fuses are drawn in met3,LVS,N/A
- ,Metal fuses are drawn in met4,LVS,
-\n12a\n12b\n12c,"To comply with the minimum spacing requirement for layer X in the frame:\n- Spacing of :drc_tag:`areaid.mt` to any non-ID layer\n- Enclosure of any non-ID layer by :drc_tag:`areaid.mt`\n- Rules exempted for cells with name ""*_buildspace""",F,
-12d,- Spacing of :drc_tag:`areaid.mt` to huge_metX (Exempt met3.dg),F,N/A
-12d,- Spacing of :drc_tag:`areaid.mt` to huge_metX (Exempt met5.dg),F,
-12e,- Enclosure of huge_metX by :drc_tag:`areaid.mt` (Exempt met3.dg),F,N/A
-12e,- Enclosure of huge_metX by :drc_tag:`areaid.mt` (Exempt met5.dg),F,
-13,Spacing between features located across areaid:ce is checked by …,,
-14,Width of features straddling areaid:ce is checked by …,,
-15a,"Drawn compatible, mask, and waffle-drop layers are allowed only inside areaid:mt (i.e., etest modules), or inside areaid:sl (i.e., between the outer and inner areaid:sl edges, but not in the die) or inside areaid:ft (i.e., frame, blankings). Exception: FOM/P1M/Metal waffle drop are allowed inside the die",P,
-15b,"Rule X.15a exempted for cpmm.dg inside cellnames ""PadPLfp"", ""padPLhp"", ""padPLstg"" and ""padPLwlbi"" (for the SKY130di-5r-gsmc flow)",Exempt,
-16,"Die must not overlap :drc_tag:`areaid.mt` (rule waived for test chips and exempted for cellnames ""*tech_CD_*"", ""*_techCD_*"", ""lazX_*"" or ""lazY_*"" )",,
-17,"All labels must be within the ""drawing"" polygons of the layer; This check is enabled by using switch ""floating_labels""; Identifies floating labels which appear as warnings in LVS. Using this check would enable cleaner LVS run; Not a gate for tapeout",,
-18,"Use redundant mcon, via, via2, via3 and via4 (Locations where additional vias/contacts can be added to existing single vias/contacts will be identified by this rule).\nSingle via under :drc_tag:`areaid.core` and :drc_tag:`areaid.standarc` are excluded from the single via check",RR,
-19,"Lower left corner of the seal ring should be at origin i.e (0,0)",,
-20,"Min spacing between pins on the same layer (center to center); Check enabled by switch ""IP_block""",,
-21,prunde.dg is allowed only inside :drc_tag:`areaid.mt` or :drc_tag:`areaid.sc`,,
-22,"No floating interconnects (poly, li1, met1-met5) or capm allowed; Rule flags interconnects with no path to poly, difftap or metal pins. Exempt floating layers can be excluded using poly_float, li1_float, m1_float, m2_float, m3_float, m4_float and m5_float text labels. Also flags an error if these text labels are placed on connected layers (not floating) and if the labels are not over the appropriate metal layer.  \nIf floating interconnects need to be connected at a higher level (Parent IP or Full chip), such floating interconnects can be exempted using poly_tie, li1_tie, m1_tie, m2_tie, m3_tie, m4_tie and m5_tie text labels.\nIt is the responsibility of the IP owner and chip/product owner to communicate and agree to the node each of these texted lines is connected to, if there is any risk to how a line is tied, and to what node.\nOnly metals outside :drc_tag:`areaid.stdcell` are checked.\n",RC,
+3,Angles permitted on all other layers and in the seal ring for all the layers,,,
+3a,"Angles permitted on all other layers except WLCSP layers (pmm, rdl, pmm2, ubm and bump)",,n x 45,deg
+4,Electrical DR cover layout guidelines for electromigration,NC,,
+5,"All ""pin""polygons must be within the ""drawing"" polygons of the layer",Al,,
+6,All intra-layer separation checks will include a notch check,,,
+7,Mask layer line and space checks must be done on all layers (checked with s.x rules),NC,,
+8,"Use of areaid ""core"" layer (""coreid"") must be approved by technology",NC,,
+9,"Shapes on maskAdd or maskDrop layers (""serifs"") are allowed in core only. Exempted are: \n- cfom md/mp inside ""advSeal_6um* OR cuPillarAdvSeal_6um*"" pcell \n- diff rings around the die at min total L>1000 um and W=0.3 um, and PMM/PDMM inside areaid:sl",,,
+ ,"Shapes on maskAdd or maskDrop layers (""serifs"") are allowed in core only. PMM/PDMM inside areaid:sl are excluded.",,N/A,N/A
+10,"Res purpose layer for (diff, poly) cannot overlap licon1",,,
+11,Metal fuses are drawn in met2,LVS,N/A,N/A
+ ,Metal fuses are drawn in met3,LVS,N/A,N/A
+ ,Metal fuses are drawn in met4,LVS,,
+\n12a\n12b\n12c,"To comply with the minimum spacing requirement for layer X in the frame:\n- Spacing of :drc_tag:`areaid.mt` to any non-ID layer\n- Enclosure of any non-ID layer by :drc_tag:`areaid.mt`\n- Rules exempted for cells with name ""*_buildspace""",F,,
+12d,- Spacing of :drc_tag:`areaid.mt` to huge_metX (Exempt met3.dg),F,N/A,N/A
+12d,- Spacing of :drc_tag:`areaid.mt` to huge_metX (Exempt met5.dg),F,,
+12e,- Enclosure of huge_metX by :drc_tag:`areaid.mt` (Exempt met3.dg),F,N/A,N/A
+12e,- Enclosure of huge_metX by :drc_tag:`areaid.mt` (Exempt met5.dg),F,,
+13,Spacing between features located across areaid:ce is checked by …,,,
+14,Width of features straddling areaid:ce is checked by …,,,
+15a,"Drawn compatible, mask, and waffle-drop layers are allowed only inside areaid:mt (i.e., etest modules), or inside areaid:sl (i.e., between the outer and inner areaid:sl edges, but not in the die) or inside areaid:ft (i.e., frame, blankings). Exception: FOM/P1M/Metal waffle drop are allowed inside the die",P,,
+15b,"Rule X.15a exempted for cpmm.dg inside cellnames ""PadPLfp"", ""padPLhp"", ""padPLstg"" and ""padPLwlbi"" (for the SKY130di-5r-gsmc flow)",Exempt,,
+16,"Die must not overlap :drc_tag:`areaid.mt` (rule waived for test chips and exempted for cellnames ""*tech_CD_*"", ""*_techCD_*"", ""lazX_*"" or ""lazY_*"" )",,,
+17,"All labels must be within the ""drawing"" polygons of the layer; This check is enabled by using switch ""floating_labels""; Identifies floating labels which appear as warnings in LVS. Using this check would enable cleaner LVS run; Not a gate for tapeout",,,
+18,"Use redundant mcon, via, via2, via3 and via4 (Locations where additional vias/contacts can be added to existing single vias/contacts will be identified by this rule).\nSingle via under :drc_tag:`areaid.core` and :drc_tag:`areaid.standarc` are excluded from the single via check",RR,,
+19,"Lower left corner of the seal ring should be at origin i.e (0,0)",,,
+20,"Min spacing between pins on the same layer (center to center); Check enabled by switch ""IP_block""",,,
+21,prunde.dg is allowed only inside :drc_tag:`areaid.mt` or :drc_tag:`areaid.sc`,,,
+22,"No floating interconnects (poly, li1, met1-met5) or capm allowed; Rule flags interconnects with no path to poly, difftap or metal pins. Exempt floating layers can be excluded using poly_float, li1_float, m1_float, m2_float, m3_float, m4_float and m5_float text labels. Also flags an error if these text labels are placed on connected layers (not floating) and if the labels are not over the appropriate metal layer.  \nIf floating interconnects need to be connected at a higher level (Parent IP or Full chip), such floating interconnects can be exempted using poly_tie, li1_tie, m1_tie, m2_tie, m3_tie, m4_tie and m5_tie text labels.\nIt is the responsibility of the IP owner and chip/product owner to communicate and agree to the node each of these texted lines is connected to, if there is any risk to how a line is tied, and to what node.\nOnly metals outside :drc_tag:`areaid.stdcell` are checked.\n",RC,,
 ,"The following are exempt from x.22 violations: _techCD_ , inductor.dg, modulecut, capacitors and s8blerf",,
 ,The 'notPublicCell' switch will deactivate this rule,,
-23a,:drc_tag:`areaid.sl` must not overlap diff,,N/A
-23b,diff cannot straddle :drc_tag:`areaid.sl`,,
-23c,":drc_tag:`areaid.sl` must not overlap tap, poly, li1 and metX",,
-23d,":drc_tag:`areaid.sl` must not overlap tap, poly",,N/A
-23e,"areaid:sl must not overlap li1 and metX for pcell ""advSeal_6um""",,N/A
-23f,"areaid:SubstrateCut (:drc_tag:`areaid.st`, local_sub) must not straddle p+ tap",RR,
-24,condiode label must be in iso_pwell,,
-25,"pnp.dg must be only within cell name ""s8rf_pnp"", ""s8rf_pnp5x"" or ""s8tesd_iref_pnp"", ""stk14ecx_*""",,
-26,"""advSeal_6um"" pcell must overlap diff",,
-27,"If the sealring is present, then partnum is required.  To exempt the requirement, place text.dg saying ""partnum_not_necessary"".\n""partnum*block"" pcell should be used instead of ""partnum*"" pcells",RR,N/A
-28,Min width of :drc_tag:`areaid.sl`,,N/A
-29,nfet must be enclosed by dnwell. Rule is checked when switch nfet_in_dnwell is turned on.,,
- ,,,
-Use,Explanation,,
-P,Rule applies to periphery only (outside :drc_tag:`areaid.ce`). A corresponding core rule may or may not exist.,,
-NE,Rule not checked for esd_nwell_tap. There are no corresponding rule for esd_nwell_tap.,,
-NC,Rule not checked by DRC. It should be used as a guideline only.,,
-TC,"Rule not checked for cell name ""*_tech_CD_top*""",,
-A,Rule documents a functionality implemented in CL algorithms and may not be checked by DRC.,,
-AD,Rule documents a functionality implemented in CL algorithms and checked by DRC.,,
-DE,Rule not checked for source of Drain Extended device,,
-LVS,Rule handled by LVS,,
-F,"Rule intended for Frame only,  not checked inside Die",,
-DNF,Drawn Not equal Final. The drawn rule does not reflect the final dimension on silicon. See table J for details.,,
-RC,"Recommended rule at the chip level, required rule at the IP level.",,
-RR,Recommended rule at any IP level,,
-Al  Cu,Rules applicable only to Al or Cu BE flows,,
-IR,IR drop check compering Al database and slotted Cu database for the same product (2 gds files) must be clean,Cu,
+23a,:drc_tag:`areaid.sl` must not overlap diff,,N/A,N/A
+23b,diff cannot straddle :drc_tag:`areaid.sl`,,,
+23c,":drc_tag:`areaid.sl` must not overlap tap, poly, li1 and metX",,,
+23d,":drc_tag:`areaid.sl` must not overlap tap, poly",,N/A,N/A
+23e,"areaid:sl must not overlap li1 and metX for pcell ""advSeal_6um""",,N/A,N/A
+23f,"areaid:SubstrateCut (:drc_tag:`areaid.st`, local_sub) must not straddle p+ tap",RR,,
+24,condiode label must be in iso_pwell,,,
+25,"pnp.dg must be only within cell name ""s8rf_pnp"", ""s8rf_pnp5x"" or ""s8tesd_iref_pnp"", ""stk14ecx_*""",,,
+26,"""advSeal_6um"" pcell must overlap diff",,,
+27,"If the sealring is present, then partnum is required.  To exempt the requirement, place text.dg saying ""partnum_not_necessary"".\n""partnum*block"" pcell should be used instead of ""partnum*"" pcells",RR,N/A,N/A
+28,Min width of :drc_tag:`areaid.sl`,,N/A,N/A
+29,nfet must be enclosed by dnwell. Rule is checked when switch nfet_in_dnwell is turned on.,,,
+ ,,,,
+Use,Explanation,,,
+P,Rule applies to periphery only (outside :drc_tag:`areaid.ce`). A corresponding core rule may or may not exist.,,,
+NE,Rule not checked for esd_nwell_tap. There are no corresponding rule for esd_nwell_tap.,,,
+NC,Rule not checked by DRC. It should be used as a guideline only.,,,
+TC,"Rule not checked for cell name ""*_tech_CD_top*""",,,
+A,Rule documents a functionality implemented in CL algorithms and may not be checked by DRC.,,,
+AD,Rule documents a functionality implemented in CL algorithms and checked by DRC.,,,
+DE,Rule not checked for source of Drain Extended device,,,
+LVS,Rule handled by LVS,,,
+F,"Rule intended for Frame only,  not checked inside Die",,,
+DNF,Drawn Not equal Final. The drawn rule does not reflect the final dimension on silicon. See table J for details.,,,
+RC,"Recommended rule at the chip level, required rule at the IP level.",,,
+RR,Recommended rule at any IP level,,,
+Al  Cu,Rules applicable only to Al or Cu BE flows,,,
+IR,IR drop check compering Al database and slotted Cu database for the same product (2 gds files) must be clean,Cu,,
 ,,,
 ,,,
 Note: some rules contain correction factors to compensate possible mask defect and unpredicted process biases,,,
@@ -80,16 +80,16 @@
 (dnwell.-),Deep Nwell,,sky130
 ,Function: Define deep nwell for isolating pwell and noise immunity,,
 ,,,
-2,Min width of deep nwell,,3.000
-3,Min spacing between deep nwells. Rule exempt inside UHVI.,,6.300
-3a,Min spacing between deep nwells on same net inside UHVI.,,N/A
-3b,Min spacing between deep-nwells inside UHVI and deep-nwell outside UHVI,,N/A
-3c,Min spacing between deep-nwells inside UHVI and nwell outsideUHVI,,N/A
-3d,Min spacing between deep-nwells inside UHVI on different nets,,N/A
-4,Dnwell can not overlap pnp:dg,,
-5,P+_diff can not straddle Dnwell ,,
-6,RF NMOS must be enclosed by deep nwell (RF FETs are listed in $DESIGN/config/tech/model_set/calibre/fixed_layout_model_map of corresponding techs),,
-7,Dnwell can not straddle areaid:substratecut,,
+2,Min width of deep nwell,,3.000,µm
+3,Min spacing between deep nwells. Rule exempt inside UHVI.,,6.300,µm
+3a,Min spacing between deep nwells on same net inside UHVI.,,N/A,N/A
+3b,Min spacing between deep-nwells inside UHVI and deep-nwell outside UHVI,,N/A,N/A
+3c,Min spacing between deep-nwells inside UHVI and nwell outsideUHVI,,N/A,N/A
+3d,Min spacing between deep-nwells inside UHVI on different nets,,N/A,N/A
+4,Dnwell can not overlap pnp:dg,,,
+5,P+_diff can not straddle Dnwell,,,
+6,RF NMOS must be enclosed by deep nwell (RF FETs are listed in $DESIGN/config/tech/model_set/calibre/fixed_layout_model_map of corresponding techs),,,
+7,Dnwell can not straddle areaid:substratecut,,,
 ,,,
 ,,,
 ,,,
@@ -117,16 +117,16 @@
 (nwell.-),Nwell,,sky130
 ,Function: Define nwell implant regions,,
 ,,,
-1,Width of nwell,,0.840
-2a,Spacing between two n-wells,,1.270
-2b,Manual merge wells if less than minimum,,
-4,All n-wells will contain metal-contacted tap  (rule checks only for licon on tap) . Rule exempted from high voltage cells inside UHVI,,
-5,Deep nwell must be enclosed by nwell by atleast... Exempted inside UHVI or :drc_tag:`areaid.lw`,TC,0.400
+1,Width of nwell,,0.840,µm
+2a,Spacing between two n-wells,,1.270,µm
+2b,Manual merge wells if less than minimum,,,
+4,All n-wells will contain metal-contacted tap  (rule checks only for licon on tap) . Rule exempted from high voltage cells inside UHVI,,,
+5,Deep nwell must be enclosed by nwell by atleast... Exempted inside UHVI or :drc_tag:`areaid.lw`,TC,0.400,µm
 ,Nwells can merge over deep nwell if spacing too small (as in rule nwell.2),,
-5a,min enclosure of nwell by dnwell inside UHVI,,N/A
-5b,nwell inside UHVI must not be on the same net as nwell outside UHVI,,N/A
-6,Min enclosure of nwell hole by deep nwell outside UHVI,TC,1.030
-7,Min spacing between nwell and deep nwell on separate nets,TC,4.500
+5a,min enclosure of nwell by dnwell inside UHVI,,N/A,N/A
+5b,nwell inside UHVI must not be on the same net as nwell outside UHVI,,N/A,N/A
+6,Min enclosure of nwell hole by deep nwell outside UHVI,TC,1.030,µm
+7,Min spacing between nwell and deep nwell on separate nets,TC,4.500,µm
 ,"Spacing between nwell and deep nwell on the same net is set by the sum of the rules nwell.2 and nwell.5. By default, DRC run on a cell checks for the separate-net spacing, when nwell and deep nwell nets are separate within the cell hierarchy and are joined in the upper hierarchy. To allow net names to be joined and make the same-net rule applicable in this case, the ""joinNets"" switch should be turned on.",,
 ,,,
 ,,,
@@ -155,11 +155,11 @@
 (pwbm.-),Pwbm,,sky130
 ,Function: Define p-well block,,
 ,,,
-1,Min width of pwbm.dg,,N/A
-2,Min spacing between two pwbm.dg inside UHVI,,N/A
-3,Min enclosure of dnwell:dg by pwbm.dg inside UHVI (exempt pwbm hole inside dnwell),,N/A
-4,dnwell inside UHVI must be enclosed by pwbm (exempt pwbm hole inside dnwell),,N/A
-5,Min Space between two pwbm holes inside UHVI,,N/A
+1,Min width of pwbm.dg,,N/A,N/A
+2,Min spacing between two pwbm.dg inside UHVI,,N/A,N/A
+3,Min enclosure of dnwell:dg by pwbm.dg inside UHVI (exempt pwbm hole inside dnwell),,N/A,N/A
+4,dnwell inside UHVI must be enclosed by pwbm (exempt pwbm hole inside dnwell),,N/A,N/A
+5,Min Space between two pwbm holes inside UHVI,,N/A,N/A
 ,,,
 ,,,
 ,,,
@@ -177,12 +177,12 @@
 (pwdem.-),Pwdem,,sky130
 ,,,
 ,,,
-1,Min width of pwdem.dg,,N/A
-2,Min spacing between two pwdem.dg inside UHVI on same net,,N/A
-3,Min enclosure of pwdem:dg by pwbm.dg inside UHVI,,N/A
-4,pwdem.dg must be enclosed by UHVI,,N/A
-5,pwdem.dg inside UHVI must be enclosed by deep nwell,,N/A
-6,Min enclosure of pwdem:dg by deep nwell inside UHVI,,N/A
+1,Min width of pwdem.dg,,N/A,N/A
+2,Min spacing between two pwdem.dg inside UHVI on same net,,N/A,N/A
+3,Min enclosure of pwdem:dg by pwbm.dg inside UHVI,,N/A,N/A
+4,pwdem.dg must be enclosed by UHVI,,N/A,N/A
+5,pwdem.dg inside UHVI must be enclosed by deep nwell,,N/A,N/A
+6,Min enclosure of pwdem:dg by deep nwell inside UHVI,,N/A,N/A
 ,,,
 ,,,
 ,,,
@@ -205,12 +205,12 @@
 (hvtp.-),Hvtp,,sky130
 ,Function: Define Vt adjust implant region for high Vt LV PMOS; ,,
 ,,,
-1,Min width of hvtp,,0.380
-2,Min spacing between hvtp to hvtp,,0.380
-3,Min enclosure of pfet by hvtp,P,0.180
-4,Min spacing between pfet and hvtp,P,0.180
-5,Min area of hvtp (um^2),,0.265
-6,Min area of hvtp Holes (um^2),,0.265
+1,Min width of hvtp,,0.380,µm
+2,Min spacing between hvtp to hvtp,,0.380,µm
+3,Min enclosure of pfet by hvtp,P,0.180,µm
+4,Min spacing between pfet and hvtp,P,0.180,µm
+5,Min area of hvtp ,,0.265,µm²
+6,Min area of hvtp Holes ,,0.265,µm²
 ,,,
 ,,,
 ,,,
@@ -238,24 +238,24 @@
 (hvtr.-),Hvtr,,sky130
 ,Function: Define low VT adjust implant region for pmedlvtrf; ,,
 ,,,
-1,Min width of hvtr,,0.380
-2,Min spacing between hvtp to hvtr,,0.380
-3,Min enclosure of pfet by hvtr,P,0.180
+1,Min width of hvtr,,0.380,µm
+2,Min spacing between hvtp to hvtr,,0.380,µm
+3,Min enclosure of pfet by hvtr,P,0.180,µm
 ,,,
 ,,,
 (lvtn.-),Lvtnm,,sky130
 ,"Function: Define regions to block Vt adjust implant for low Vt LV PMOS/NMOS, SONOS FETs and Native NMOS",,
 ,,,
-1a,Min width of lvtn,,0.380
-2,Min space lvtn to lvtn,,0.380
-3a,Min spacing of lvtn to gate. Rule exempted inside UHVI.,P,0.180
-3b,Min spacing of lvtn to pfet along the S/D direction,P,0.235
-4b,Min enclosure of gate by lvtn. Rule exempted inside UHVI.,P,0.180
-9,"Min spacing, no overlap, between lvtn and hvtp",,0.380
-10,Min enclosure of lvtn by (nwell not overlapping Var_channel) (exclude coincident edges),,0.380
-12,Min spacing between lvtn and (nwell inside :drc_tag:`areaid.ce`),,0.380
-13,Min area of lvtn (um^2),,0.265
-14,Min area of lvtn Holes (um^2),,0.265
+1a,Min width of lvtn,,0.380,µm
+2,Min space lvtn to lvtn,,0.380,µm
+3a,Min spacing of lvtn to gate. Rule exempted inside UHVI.,P,0.180,µm
+3b,Min spacing of lvtn to pfet along the S/D direction,P,0.235,µm
+4b,Min enclosure of gate by lvtn. Rule exempted inside UHVI.,P,0.180,µm
+9,"Min spacing, no overlap, between lvtn and hvtp",,0.380,µm
+10,Min enclosure of lvtn by (nwell not overlapping Var_channel) (exclude coincident edges),,0.380,µm
+12,Min spacing between lvtn and (nwell inside :drc_tag:`areaid.ce`),,0.380,µm
+13,Min area of lvtn ,,0.265,µm²
+14,Min area of lvtn Holes ,,0.265,µm²
 ,,,
 ,,,
 ,,,
@@ -291,17 +291,17 @@
 (ncm.-),Ncm,,sky130
 ,Function: Define Vt adjust implant region for LV NMOS in the core of NVSRAM,,
 ,,,
-X.2,Ncm overlapping areaid:ce is checked for core rules only,,
-X.3,Ncm overlapping core cannot overlap N+diff in periphery,TC,
-1,Width of ncm,,0.380
-2a,Spacing of ncm to ncm,,0.380
-2b,Manual merge ncm if space is below minimum,,
-3,Min enclosure of P+diff by Ncm,P,0.180
-4,Min enclosure of P+diff within (areaid:ed AndNot areaid:de) by Ncm,P,0.180
-5,"Min space, no overlap, between ncm and (LVTN_gate) OR (diff containing lvtn)",P,0.230
-6,"Min space, no overlap, between ncm and nfet",P,0.200
-7,Min area of ncm (um^2),,0.265
-8,Min area of ncm Holes (um^2),,0.265
+X.2,Ncm overlapping areaid:ce is checked for core rules only,,,
+X.3,Ncm overlapping core cannot overlap N+diff in periphery,TC,,
+1,Width of ncm,,0.380,µm
+2a,Spacing of ncm to ncm,,0.380,µm
+2b,Manual merge ncm if space is below minimum,,,
+3,Min enclosure of P+diff by Ncm,P,0.180,µm
+4,Min enclosure of P+diff within (areaid:ed AndNot areaid:de) by Ncm,P,0.180,µm
+5,"Min space, no overlap, between ncm and (LVTN_gate) OR (diff containing lvtn)",P,0.230,µm
+6,"Min space, no overlap, between ncm and nfet",P,0.200,µm
+7,Min area of ncm ,,0.265,µm²
+8,Min area of ncm Holes ,,0.265,µm²
 ,,,
 ,,,
 ,,,
@@ -317,21 +317,21 @@
 (difftap.-),Diff/tap,,sky130
 ,Function: Defines active regions and contacts to substrate,,
 ,,,
-1,Width of diff or tap,P,0.150
-2,"Minimum channel width (Diff And Poly) except for FETs inside :drc_tag:`areaid.sc`: Rule exempted in the SP8* flows only, for the cells listed in rule difftap.2a ",P,0.420
-2a,"Minimum channel width (Diff And Poly) for cell names ""s8cell_ee_plus_sseln_a"", ""s8cell_ee_plus_sseln_b"", ""s8cell_ee_plus_sselp_a"", ""s8cell_ee_plus_sselp_b"" , ""s8fpls_pl8"", ""s8fpls_rdrv4"" , ""s8fpls_rdrv4f"" and ""s8fpls_rdrv8""",P,NA
-2b,Minimum channel width (Diff And Poly) for FETs inside :drc_tag:`areaid.sc`,P,0.360
-3,"Spacing of diff to diff, tap to tap, or non-abutting diff to tap",,0.270
-4,Min tap bound by one diffusion,,0.290
-5,Min tap bound by two diffusions,P,0.400
-6,Diff and tap are not allowed to extend beyond their abutting edge,,
-7,Spacing of diff/tap abutting edge to a non-conciding diff or tap edge,NE,0.130
-8,Enclosure of (p+) diffusion by N-well. Rule exempted inside UHVI.,"DE, NE, P",0.180
-9,Spacing of (n+) diffusion to N-well outside UHVI,"DE, NE, P",0.340
-10,Enclosure of (n+)  tap by N-well. Rule exempted inside UHVI.,"NE, P",0.180
-11,Spacing of (p+) tap to  N-well. Rule exempted inside UHVI.,,0.130
-12,ESD_nwell_tap is considered shorted to the abutting diff,NC,
-13,Diffusion or the RF FETS in Table H5 is defined by Ldiff and Wdiff.,,
+1,Width of diff or tap,P,0.150,µm
+2,"Minimum channel width (Diff And Poly) except for FETs inside :drc_tag:`areaid.sc`: Rule exempted in the SP8* flows only, for the cells listed in rule difftap.2a ",P,0.420,µm
+2a,"Minimum channel width (Diff And Poly) for cell names ""s8cell_ee_plus_sseln_a"", ""s8cell_ee_plus_sseln_b"", ""s8cell_ee_plus_sselp_a"", ""s8cell_ee_plus_sselp_b"" , ""s8fpls_pl8"", ""s8fpls_rdrv4"" , ""s8fpls_rdrv4f"" and ""s8fpls_rdrv8""",P,NA,µm
+2b,Minimum channel width (Diff And Poly) for FETs inside :drc_tag:`areaid.sc`,P,0.360,µm
+3,"Spacing of diff to diff, tap to tap, or non-abutting diff to tap",,0.270,µm
+4,Min tap bound by one diffusion,,0.290,
+5,Min tap bound by two diffusions,P,0.400,
+6,Diff and tap are not allowed to extend beyond their abutting edge,,,
+7,Spacing of diff/tap abutting edge to a non-conciding diff or tap edge,NE,0.130,µm
+8,Enclosure of (p+) diffusion by N-well. Rule exempted inside UHVI.,"DE, NE, P",0.180,µm
+9,Spacing of (n+) diffusion to N-well outside UHVI,"DE, NE, P",0.340,µm
+10,Enclosure of (n+)  tap by N-well. Rule exempted inside UHVI.,"NE, P",0.180,µm
+11,Spacing of (p+) tap to  N-well. Rule exempted inside UHVI.,,0.130,µm
+12,ESD_nwell_tap is considered shorted to the abutting diff,NC,,
+13,Diffusion or the RF FETS in Table H5 is defined by Ldiff and Wdiff.,,,
 ,,,
 ,,,
 ,,,
@@ -359,14 +359,14 @@
 (tunm.-),Tunnel,,sky130
 ,Function: Defines SONOS FETs ,,
 ,,,
-1,Min width of tunm,,0.410
-2,Min spacing of tunm to tunm,,0.500
-3,Extension of tunm beyond (poly and diff),,0.095
-4,Min spacing of tunm to (poly and diff) outside tunm,,0.095
-5,(poly and diff) may not straddle tunm,,
-6a,Tunm outside deep n-well is not allowed,TC,
-7,Min tunm area,,0.672
-8,tunm must be enclosed by :drc_tag:`areaid.ce`,,
+1,Min width of tunm,,0.410,µm
+2,Min spacing of tunm to tunm,,0.500,µm
+3,Extension of tunm beyond (poly and diff),,0.095,
+4,Min spacing of tunm to (poly and diff) outside tunm,,0.095,µm
+5,(poly and diff) may not straddle tunm,,,
+6a,Tunm outside deep n-well is not allowed,TC,,
+7,Min tunm area,,0.672,µm²
+8,tunm must be enclosed by :drc_tag:`areaid.ce`,,,
 ,,,
 ,,,
 ,,,
@@ -395,23 +395,23 @@
 (poly.-),Poly  ,,sky130
 ,"Function: Defines FET gates, interconnects and resistors",,
 ,,,
-X.1,All FETs would be checked for W/Ls as documented in spec 001-02735  (Exempt FETs that are pruned; exempt for W/L's inside :drc_tag:`areaid.sc` and inside cell name scs8*decap* and listed in the MRGA as a decap only W/L),,
-X.1a,Min & max dummy_poly L is equal to min L allowed for corresponding device type (exempt rule for dummy_poly in cells listed on Table H3),,
-1a,Width of poly,,0.150
-1b,Min channel length (poly width) for pfet overlapping lvtn (exempt rule for dummy_poly in cells listed on Table H3),,0.350
-2,Spacing of poly to poly except for poly.c2 and poly.c3; Exempt cell: sr_bltd_eq where it is same as poly.c2,,0.210
-3,Min poly resistor width,,0.330
-4,Spacing of poly on field to diff (parallel edges only),P,0.075
-5,Spacing of poly on field to tap,P,0.055
-6,Spacing of poly on diff to abutting tap (min source),P,0.300
-7,Extension of diff beyond poly (min drain),P,0.250
-8,Extension of poly beyond diffusion (endcap),P,0.130
-9,Poly resistor spacing to poly or spacing (no overlap) to diff/tap,,0.480
-10,Poly can't overlap inner corners of diff,,
-11,No 90 deg turns of poly on diff,,
-12,"(Poly NOT (nwell NOT hvi)) may not overlap tap; Rule exempted for cell name ""s8fgvr_n_fg2"" and gated_npn and inside UHVI.",P,
-15,Poly must not overlap diff:rs,,
-16,"Inside RF FETs defined in Table H5, poly cannot overlap poly across multiple adjacent instances",,
+X.1,All FETs would be checked for W/Ls as documented in spec 001-02735  (Exempt FETs that are pruned; exempt for W/L's inside :drc_tag:`areaid.sc` and inside cell name scs8*decap* and listed in the MRGA as a decap only W/L),,,
+X.1a,Min & max dummy_poly L is equal to min L allowed for corresponding device type (exempt rule for dummy_poly in cells listed on Table H3),,,
+1a,Width of poly,,0.150,µm
+1b,Min channel length (poly width) for pfet overlapping lvtn (exempt rule for dummy_poly in cells listed on Table H3),,0.350,µm
+2,Spacing of poly to poly except for poly.c2 and poly.c3; Exempt cell: sr_bltd_eq where it is same as poly.c2,,0.210,µm
+3,Min poly resistor width,,0.330,µm
+4,Spacing of poly on field to diff (parallel edges only),P,0.075,µm
+5,Spacing of poly on field to tap,P,0.055,µm
+6,Spacing of poly on diff to abutting tap (min source),P,0.300,µm
+7,Extension of diff beyond poly (min drain),P,0.250,
+8,Extension of poly beyond diffusion (endcap),P,0.130,
+9,Poly resistor spacing to poly or spacing (no overlap) to diff/tap,,0.480,µm
+10,Poly can't overlap inner corners of diff,,,
+11,No 90 deg turns of poly on diff,,,
+12,"(Poly NOT (nwell NOT hvi)) may not overlap tap; Rule exempted for cell name ""s8fgvr_n_fg2"" and gated_npn and inside UHVI.",P,,
+15,Poly must not overlap diff:rs,,,
+16,"Inside RF FETs defined in Table H5, poly cannot overlap poly across multiple adjacent instances",,,
 ,,,
 ,,,
 ,,,
@@ -447,27 +447,27 @@
 (rpm.-),P+ Poly resistor,,sky130
 ,Function: Defines p+ poly resistors,,
 ,,,
-1a,Min width of rpm,,1.270
-1b,Min/Max prec_resistor width xhrpoly_0p35,,0.350
-1c,Min/Max prec_resistor width xhrpoly_0p69,,0.690
-1d,Min/Max prec_resistor width xhrpoly_1p41,,1.410
-1e,Min/Max prec_resistor width xhrpoly_2p85,,2.850
-1f,Min/Max prec_resistor width xhrpoly_5p73,,5.730
-1g,Only 1 licon is allowed in xhrpoly_0p35 prec_resistor_terminal,,
-1h,Only 1 licon is allowed in xhrpoly_0p69 prec_resistor_terminal,,
-1i,Only 2 licons are allowed in xhrpoly_1p41 prec_resistor_terminal,,
-1j,Only 4 licons are allowed in xhrpoly_2p85 prec_resistor_terminal,,
-1k,Only 8 licons are allowed in xhrpoly_5p73 prec_resistor_terminal,,
-2,Min spacing of rpm to rpm,,0.840
-3,rpm must enclose prec_resistor by atleast,,0.200
-4,prec_resistor must be enclosed by psdm by atleast,,0.110
-5,prec_resistor must be enclosed by npc by atleast,,0.095
-6,"Min spacing, no overlap, of rpm and nsdm",,0.200
-7,Min spacing between rpm and poly,,0.200
-8,poly must not straddle rpm,,
-9,"Min space, no overlap, between prec_resistor and hvntm",,0.185
-10,Min spacing of rpm to pwbm,,N/A
-11,rpm should not overlap or straddle pwbm except cells\ns8usbpdv2_csa_top\ns8usbpdv2_20vconn_sw_300ma_ovp_ngate_unit\ns8usbpdv2_20vconn_sw_300ma_ovp\ns8usbpdv2_20sbu_sw_300ma_ovp,,N/A
+1a,Min width of rpm,,1.270,µm
+1b,Min/Max prec_resistor width xhrpoly_0p35,,0.350,µm
+1c,Min/Max prec_resistor width xhrpoly_0p69,,0.690,µm
+1d,Min/Max prec_resistor width xhrpoly_1p41,,1.410,µm
+1e,Min/Max prec_resistor width xhrpoly_2p85,,2.850,µm
+1f,Min/Max prec_resistor width xhrpoly_5p73,,5.730,µm
+1g,Only 1 licon is allowed in xhrpoly_0p35 prec_resistor_terminal,,,
+1h,Only 1 licon is allowed in xhrpoly_0p69 prec_resistor_terminal,,,
+1i,Only 2 licons are allowed in xhrpoly_1p41 prec_resistor_terminal,,,
+1j,Only 4 licons are allowed in xhrpoly_2p85 prec_resistor_terminal,,,
+1k,Only 8 licons are allowed in xhrpoly_5p73 prec_resistor_terminal,,,
+2,Min spacing of rpm to rpm,,0.840,µm
+3,rpm must enclose prec_resistor by atleast,,0.200,
+4,prec_resistor must be enclosed by psdm by atleast,,0.110,µm
+5,prec_resistor must be enclosed by npc by atleast,,0.095,µm
+6,"Min spacing, no overlap, of rpm and nsdm",,0.200,µm
+7,Min spacing between rpm and poly,,0.200,µm
+8,poly must not straddle rpm,,,
+9,"Min space, no overlap, between prec_resistor and hvntm",,0.185,µm
+10,Min spacing of rpm to pwbm,,N/A,N/A
+11,rpm should not overlap or straddle pwbm except cells\ns8usbpdv2_csa_top\ns8usbpdv2_20vconn_sw_300ma_ovp_ngate_unit\ns8usbpdv2_20vconn_sw_300ma_ovp\ns8usbpdv2_20sbu_sw_300ma_ovp,,N/A,N/A
 ,,,
 ,,,
 ,,,
@@ -494,14 +494,14 @@
 (varac.-),Varactor,,sky130
 ,Function: Defines varactors,,
 ,,,
-1,Min channel length (poly width) of Var_channel,,0.180
-2,Min channel width (tap width) of Var_channel,,1.000
-3,Min spacing between hvtp to Var_channel,,0.180
-4,Min spacing of licon on tap to Var_channel,,0.250
-5,Min enclosure of poly overlapping Var_channel by nwell,,0.150
-6,Min spacing between VaracTap and difftap,,0.270
-7,Nwell overlapping Var_channel must not overlap P+ diff,,
-8,Min enclosure of Var_channel by hvtp,,0.255
+1,Min channel length (poly width) of Var_channel,,0.180,µm
+2,Min channel width (tap width) of Var_channel,,1.000,µm
+3,Min spacing between hvtp to Var_channel,,0.180,µm
+4,Min spacing of licon on tap to Var_channel,,0.250,µm
+5,Min enclosure of poly overlapping Var_channel by nwell,,0.150,µm
+6,Min spacing between VaracTap and difftap,,0.270,µm
+7,Nwell overlapping Var_channel must not overlap P+ diff,,,
+8,Min enclosure of Var_channel by hvtp,,0.255,µm
 ,,,
 ,,,
 ,,,
@@ -528,17 +528,17 @@
 (photo.-),Photo diode,,sky130
 ,Function: Photo diode for sensing light,,
 ,,,
-1,Rules dnwell.3 and nwell.5 are exempted for photoDiode,,
-2,Min/Max width of photoDiode,,3.000
-3,Min spacing between photoDiode,,5.000
-4,Min spacing between photoDiode and deep nwell,,5.300
-5,photoDiode edges must be coincident with :drc_tag:`areaid.po`,,
-6,photoDiode must be enclosed by dnwell ring,,
-7,photoDiode must be enclosed by p+ tap ring,,
-8,Min/Max width of nwell inside photoDiode,,0.840
-9,Min/Max enclosure of nwell by photoDiode,,1.080
-10,Min/Max width of tap inside photoDiode,,0.410
-11,Min/Max enclosure of tap by nwell inside photoDiode,,0.215
+1,Rules dnwell.3 and nwell.5 are exempted for photoDiode,,,
+2,Min/Max width of photoDiode,,3.000,µm
+3,Min spacing between photoDiode,,5.000,µm
+4,Min spacing between photoDiode and deep nwell,,5.300,µm
+5,photoDiode edges must be coincident with :drc_tag:`areaid.po`,,,
+6,photoDiode must be enclosed by dnwell ring,,,
+7,photoDiode must be enclosed by p+ tap ring,,,
+8,Min/Max width of nwell inside photoDiode,,0.840,µm
+9,Min/Max enclosure of nwell by photoDiode,,1.080,µm
+10,Min/Max width of tap inside photoDiode,,0.410,µm
+11,Min/Max enclosure of tap by nwell inside photoDiode,,0.215,µm
 ,,,
 ,,,
 ,,,
@@ -567,11 +567,11 @@
 (npc.-),Nitride Poly Cut (NPC),,sky130
 ,Function: Defines nitride openings to contact poly and Li1,,
 ,,,
-1,Min width of NPC,,0.270
-2,Min spacing of NPC to NPC,,0.270
-3,Manual merge if less than minimum,,
-4,Spacing (no overlap) of NPC to Gate,,0.090
-5,Max enclosure of poly overlapping slotted_licon by npcm (merge between adjacent short edges of the slotted_licons if space < min),,0.095
+1,Min width of NPC,,0.270,µm
+2,Min spacing of NPC to NPC,,0.270,µm
+3,Manual merge if less than minimum,,,
+4,Spacing (no overlap) of NPC to Gate,,0.090,µm
+5,Max enclosure of poly overlapping slotted_licon by npcm (merge between adjacent short edges of the slotted_licons if space < min),,0.095,µm
 ,,,
 ,,,
 ,,,
@@ -594,18 +594,18 @@
 (n/ psd.-),N+/P+ Source/Drain Implants (Nsdm and Psdm),,sky130
 ,Function: Defines opening for N+/P+ implants,,
 ,,,
-1,Width of nsdm(psdm),P,0.380
-2,Spacing of nsdm(psdm) to nsdm(psdm),P,0.380
-3,Manual merge if less than minimum,,
-5a,"Enclosure of diff by nsdm(psdm), except for butting edge",,0.125
-5b,"Enclosure of tap by nsdm(psdm), except for butting edge",P,0.125
-6,Enclosure of diff/tap butting edge by nsdm (psdm) ,,0.000
-7,Spacing of NSDM/PSDM to opposite implant diff or tap (for non-abutting diff/tap edges),,0.130
-8,Nsdm and psdm cannot overlap diff/tap regions of opposite doping,DE,
-9,"Diff and tap must be enclosed by their corresponding implant layers. Rule exempted for\n- diff inside ""advSeal_6um* OR cuPillarAdvSeal_6um*"" pcell for SKY130P*/SP8P*/SKY130DI-5R-CSMC flows\n- diff rings around the die at min total L>1000 um and W=0.3 um\n- gated_npn \n- :drc_tag:`areaid.zer`.",DE,
-10a,Min area of Nsdm (um^2),,0.265
-10b,Min area of Psdm (um^2),,0.255
-11,Min area of n/psdmHoles (um^2),,0.265
+1,Width of nsdm(psdm),P,0.380,µm
+2,Spacing of nsdm(psdm) to nsdm(psdm),P,0.380,µm
+3,Manual merge if less than minimum,,,
+5a,"Enclosure of diff by nsdm(psdm), except for butting edge",,0.125,µm
+5b,"Enclosure of tap by nsdm(psdm), except for butting edge",P,0.125,µm
+6,Enclosure of diff/tap butting edge by nsdm (psdm),,0.000,µm
+7,Spacing of NSDM/PSDM to opposite implant diff or tap (for non-abutting diff/tap edges),,0.130,µm
+8,Nsdm and psdm cannot overlap diff/tap regions of opposite doping,DE,,
+9,"Diff and tap must be enclosed by their corresponding implant layers. Rule exempted for\n- diff inside ""advSeal_6um* OR cuPillarAdvSeal_6um*"" pcell for SKY130P*/SP8P*/SKY130DI-5R-CSMC flows\n- diff rings around the die at min total L>1000 um and W=0.3 um\n- gated_npn \n- :drc_tag:`areaid.zer`.",DE,,
+10a,Min area of Nsdm ,,0.265,µm²
+10b,Min area of Psdm ,,0.255,µm²
+11,Min area of n/psdmHoles ,,0.265,µm²
 ,,,
 ,,,
 ,,,
@@ -621,37 +621,37 @@
 (licon.-),Local Interconnect Contact (Licon),,sky130
 ,Function: Defines contacts between poly/diff/tap and Li1,,
 , ,,
-1,Min and max L and W of licon (exempt licons inside prec_resistor),,0.170
-1b,Min and max width of licon inside prec_resistor,,0.190
-1c,Min and max length of licon inside prec_resistor,,2.000
-2,Spacing of licon to licon,P,0.170
-2b,Min spacing between two slotted_licon (when the both the edges are 0.19um in length),,0.350
-2c,Min spacing between two slotted_licon (except for rule licon.2b),,0.510
-2d,Min spacing between a slotted_licon and 0.17um square licon,,0.510
-3,Only min. square licons are allowed except die seal ring where licons are (licon CD)*L ,,0.170 *L
-4,Licon1 must overlap li1 and (poly or diff or tap),,
-5a,Enclosure of licon by diff,P,0.040
-5b,Min space between tap_licon and diff-abutting tap edge,P,0.060
-5c,Enclosure of licon by diff on one of two adjacent sides,P,0.060
-6,Licon cannot straddle tap,P,
-7,Enclosure of licon by one of two adjacent edges of isolated tap,P,0.120
-8,Enclosure of poly_licon by poly,P,0.050
-8a,Enclosure of poly_licon by poly on one of two adjacent sides,P,0.080
-9,"Spacing, no overlap, between poly_licon and psdm; In SKY130DIA/SKY130TMA/SKY130PIR-10 flows, the rule is checked only between (poly_licon outside rpm) and psdm",P,0.110
-10,Spacing of licon on (tap AND (nwell NOT hvi)) to Var_channel,P,0.250
-11,"Spacing of licon on diff or tap to poly on diff (except for all FETs inside :drc_tag:`areaid.sc` and except s8spf-10r flow for 0.5um phv inside cell names ""s8fs_gwdlvx4"", ""s8fs_gwdlvx8"", ""s8fs_hvrsw_x4"", ""s8fs_hvrsw8"", ""s8fs_hvrsw264"", and ""s8fs_hvrsw520"" and for 0.15um nshort inside cell names ""s8fs_rdecdrv"", ""s8fs_rdec8"", ""s8fs_rdec32"", ""s8fs_rdec264"", ""s8fs_rdec520"")",P,0.055
-11a,Spacing of licon on diff or tap to poly on diff (for all FETs inside :drc_tag:`areaid.sc` except 0.15um phighvt),P,0.050
-11b,Spacing of licon on diff or tap to poly on diff (for 0.15um phighvt inside :drc_tag:`areaid.sc`),P,0.050
-11c,"Spacing of licon on diff or tap to poly on diff (for 0.5um phv inside cell names ""s8fs_gwdlvx4"", ""s8fs_gwdlvx8"", ""s8fs_hvrsw_x4"", ""s8fs_hvrsw8"", ""s8fs_hvrsw264"", and ""s8fs_hvrsw520"")",P,0.040
-11d,"Spacing of licon on diff or tap to poly on diff (for 0.15um nshort inside cell names ""s8fs_rdecdrv"", ""s8fs_rdec8"", ""s8fs_rdec32"", ""s8fs_rdec264"", ""s8fs_rdec520"")",P,0.045
-12,Max SD width without licon,NC,5.700
-13,Spacing (no overlap) of NPC to licon on diff or tap,P,0.090
-14,Spacing of poly_licon to diff or tap,P,0.190
-15,poly_licon must be enclosed by npc by…,P,0.100
-16,"Every source_diff and every tap must enclose at least one licon1, including the diff/tap straddling areaid:ce. \nRule exempted inside UHVI.",P,
-17,Licons may not overlap both poly and (diff or tap),,
-18,Npc must enclose poly_licon,,
-19,poly of the HV varactor must not interact with licon,P,
+1,Min and max L and W of licon (exempt licons inside prec_resistor),,0.170,µm
+1b,Min and max width of licon inside prec_resistor,,0.190,µm
+1c,Min and max length of licon inside prec_resistor,,2.000,µm
+2,Spacing of licon to licon,P,0.170,µm
+2b,Min spacing between two slotted_licon (when the both the edges are 0.19um in length),,0.350,µm
+2c,Min spacing between two slotted_licon (except for rule licon.2b),,0.510,µm
+2d,Min spacing between a slotted_licon and 0.17um square licon,,0.510,µm
+3,Only min. square licons are allowed except die seal ring where licons are (licon CD)*L,,0.170 *L,
+4,Licon1 must overlap li1 and (poly or diff or tap),,,
+5a,Enclosure of licon by diff,P,0.040,µm
+5b,Min space between tap_licon and diff-abutting tap edge,P,0.060,µm
+5c,Enclosure of licon by diff on one of two adjacent sides,P,0.060,µm
+6,Licon cannot straddle tap,P,,
+7,Enclosure of licon by one of two adjacent edges of isolated tap,P,0.120,µm
+8,Enclosure of poly_licon by poly,P,0.050,µm
+8a,Enclosure of poly_licon by poly on one of two adjacent sides,P,0.080,µm
+9,"Spacing, no overlap, between poly_licon and psdm; In SKY130DIA/SKY130TMA/SKY130PIR-10 flows, the rule is checked only between (poly_licon outside rpm) and psdm",P,0.110,µm
+10,Spacing of licon on (tap AND (nwell NOT hvi)) to Var_channel,P,0.250,µm
+11,"Spacing of licon on diff or tap to poly on diff (except for all FETs inside :drc_tag:`areaid.sc` and except s8spf-10r flow for 0.5um phv inside cell names ""s8fs_gwdlvx4"", ""s8fs_gwdlvx8"", ""s8fs_hvrsw_x4"", ""s8fs_hvrsw8"", ""s8fs_hvrsw264"", and ""s8fs_hvrsw520"" and for 0.15um nshort inside cell names ""s8fs_rdecdrv"", ""s8fs_rdec8"", ""s8fs_rdec32"", ""s8fs_rdec264"", ""s8fs_rdec520"")",P,0.055,µm
+11a,Spacing of licon on diff or tap to poly on diff (for all FETs inside :drc_tag:`areaid.sc` except 0.15um phighvt),P,0.050,µm
+11b,Spacing of licon on diff or tap to poly on diff (for 0.15um phighvt inside :drc_tag:`areaid.sc`),P,0.050,µm
+11c,"Spacing of licon on diff or tap to poly on diff (for 0.5um phv inside cell names ""s8fs_gwdlvx4"", ""s8fs_gwdlvx8"", ""s8fs_hvrsw_x4"", ""s8fs_hvrsw8"", ""s8fs_hvrsw264"", and ""s8fs_hvrsw520"")",P,0.040,µm
+11d,"Spacing of licon on diff or tap to poly on diff (for 0.15um nshort inside cell names ""s8fs_rdecdrv"", ""s8fs_rdec8"", ""s8fs_rdec32"", ""s8fs_rdec264"", ""s8fs_rdec520"")",P,0.045,µm
+12,Max SD width without licon,NC,5.700,µm
+13,Spacing (no overlap) of NPC to licon on diff or tap,P,0.090,µm
+14,Spacing of poly_licon to diff or tap,P,0.190,µm
+15,poly_licon must be enclosed by npc by…,P,0.100,µm
+16,"Every source_diff and every tap must enclose at least one licon1, including the diff/tap straddling areaid:ce. \nRule exempted inside UHVI.",P,,
+17,Licons may not overlap both poly and (diff or tap),,,
+18,Npc must enclose poly_licon,,,
+19,poly of the HV varactor must not interact with licon,P,,
 ,,,
 ,,,
 ,,,
@@ -699,14 +699,14 @@
 (li.-.-),Local Interconnect (LI),,sky130
 ,Function: Defines local interconnect to diff/tap and poly,,
 ,,,
-1,Width of LI (except for li.1a),P,0.170
-1a,Width of LI inside of cells with name s8rf2_xcmvpp_hd5_*,P,0.140
-2,Max ratio of length to width of LI without licon or mcon,NC,10.000
-3,Spacing of LI to LI (except for li.3a),P,0.170
-3a,Spacing of LI to LI inside cells with names s8rf2_xcmvpp_hd5_*,P,0.140
-5,Enclosure of licon by one of two adjacent LI sides,P,0.080
-6,Min area of LI,P,0.0561
-7,"Min LI resistor width (rule exempted within :drc_tag:`areaid.ed`; Inside :drc_tag:`areaid.ed`, min width of the li resistor is determined by rule li.1)",,0.290
+1,Width of LI (except for li.1a),P,0.170,µm
+1a,Width of LI inside of cells with name s8rf2_xcmvpp_hd5_*,P,0.140,µm
+2,Max ratio of length to width of LI without licon or mcon,NC,10.000,µm
+3,Spacing of LI to LI (except for li.3a),P,0.170,µm
+3a,Spacing of LI to LI inside cells with names s8rf2_xcmvpp_hd5_*,P,0.140,µm
+5,Enclosure of licon by one of two adjacent LI sides,P,0.080,µm
+6,Min area of LI,P,0.0561,µm²
+7,"Min LI resistor width (rule exempted within :drc_tag:`areaid.ed`; Inside :drc_tag:`areaid.ed`, min width of the li resistor is determined by rule li.1)",,0.290,µm
 ,,,
 ,,,
 ,,,
@@ -722,13 +722,13 @@
 (ct.-),Metal contact (Mcon),,sky130
 ,Function: Defines contact between Li1 and met1,,
 ,,,
-1,Min and max L and W of mcon,DNF,0.170
-2,Spacing of mcon to mcon,DNF,0.190
-3,Only min. square mcons are allowed except die seal ring where mcons are…,,0.170*L
-4,Mcon must be enclosed by LI by at least …,P,0.000
-irdrop.1,"For 1 <= n <= 10 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.2
-irdrop.2,"For 11 <= n <= 100 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.3
-irdrop.3,"For n > 100 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.7
+1,Min and max L and W of mcon,DNF,0.170,µm
+2,Spacing of mcon to mcon,DNF,0.190,µm
+3,Only min. square mcons are allowed except die seal ring where mcons are…,,0.170*L,
+4,Mcon must be enclosed by LI by at least …,P,0.000,µm
+irdrop.1,"For 1 <= n <= 10 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.2,µm
+irdrop.2,"For 11 <= n <= 100 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.3,µm
+irdrop.3,"For n > 100 contacts on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.7,µm
 ,,,
 ,,,
 ,,,
@@ -742,18 +742,18 @@
 (capm.-),MIM Capacitor (Capm),,sky130
 ,Function: Defines MIM capacitor,,
 ,,,
-1,Min width of capm,,N/A
-2a,Min spacing of capm to capm,,N/A
-2b,Minimum spacing of capacitor bottom_plate to bottom plate,,N/A
-3,Minimum enclosure of capm (top_plate) by met2,,N/A
-4,Min enclosure of via2 by capm,,N/A
-5,Min spacing between capm and via2,,N/A
-6,Maximum Aspect Ratio (Length/Width) ,,N/A
-7,Only rectangular capacitors are allowed,,N/A
-8,"Min space, no overlap, between via and capm",,N/A
-10,"capm must not straddle nwell, diff, tap, poly, li1 and met1 (Rule exempted for capm overlapping capm_2t.dg)",TC,N/A
-11,Min spacing between capm to (met2 not overlapping capm),,N/A
-12,Max area of capm (um^2),,N/A
+1,Min width of capm,,N/A,N/A
+2a,Min spacing of capm to capm,,N/A,N/A
+2b,Minimum spacing of capacitor bottom_plate to bottom plate,,N/A,N/A
+3,Minimum enclosure of capm (top_plate) by met2,,N/A,N/A
+4,Min enclosure of via2 by capm,,N/A,N/A
+5,Min spacing between capm and via2,,N/A,N/A
+6,Maximum Aspect Ratio (Length/Width),,N/A,N/A
+7,Only rectangular capacitors are allowed,,N/A,N/A
+8,"Min space, no overlap, between via and capm",,N/A,N/A
+10,"capm must not straddle nwell, diff, tap, poly, li1 and met1 (Rule exempted for capm overlapping capm_2t.dg)",TC,N/A,N/A
+11,Min spacing between capm to (met2 not overlapping capm),,N/A,N/A
+12,Max area of capm (um^2),,N/A,N/A
 ,,,
 ,,,
 ,,,
@@ -781,24 +781,24 @@
 (vpp.-),VPP Capacitor ,,sky130
 ,Function: Defines VPP capacitor,,
 ,,,
-1,Min width of capacitor:dg,,1.430
-1b,Max width of capacitor:dg; Rule not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5 and vpp_with_noLi,,11.350
-1c,"Min/Max width of cell name ""s8rf_xcmvpp1p8x1p8_m3shield """,,3.880
-3,"capacitor:dg must not overlap (tap or diff or poly); (one exception: Poly is allowed to overlap  vpp_with_Met3Shield and vpp_with_Met5PolyShield); (not applicable for vpp_over_Moscap or ""s8rf2_xcmvppx4_2xnhvnative10x4"" or vpp_with_LiShield)",,
-4,capacitor:dg must not straddle (nwell or dnwell),,
-5,Min spacing between (capacitor:dg edge and (poly or li1 or met1 or met2)) to (poly or li1 or met1 or met2) on separate nets (Exempt area of the error shape less than 2.25 (um^2) and run length less than 2.0um); Rule not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5 and vpp_with_noLi,,1.500
-5a,Max pattern density of met3.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5),,0.25
-5b,Max pattern density of met4.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_Met5 and vpp_over_MOSCAP),,0.3
-5c,"Max pattern density of met5.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_Met5 and vpp_over_MOSCAP and vpp_with_noLi); (one exception: rules does apply to cell ""s8rf2_xcmvpp11p5x11p7_m1m4"" and ""s8rf2_xcmvpp_hd5_atlas*"")",,0.4
-8,Min enclosure of capacitor:dg by nwell,,1.500
-9,Min spacing of capacitor:dg to nwell (not applicable for vpp_over_MOSCAP),,1.500
-10,vpp capacitors must not overlap; Rule checks for capacitor.dg overlapping more than one pwell pin,,
-11,Min pattern density of (poly and diff) over capacitor.dg; (vpp_over_Moscap only),,0.87
-12a,"Number of met4 shapes inside capacitor.dg of cell ""s8rf2_xcmvpp8p6x7p9_m3_lim5shield""  must overlap with size 2.01 x 2.01 (no other met4 shapes allowed)",,9.00
-12b,"Number of met4 shapes inside capacitor.dg of cell ""s8rf2_xcmvpp11p5x11p7_m3_lim5shield""  must overlap with size 2.01 x 2.01 (no other met4 shapes allowed)",,16.00
-12c,"Number of met4 shapes inside capacitor.dg of cell ""s8rf2_xcmvpp4p4x4p6_m3_lim5shield""  must overlap with size 1.5 x 1.5 (no other met4 shapes allowed)",,4.00
-13,Min space of met1 to met1inside VPP capacitor,Cu,0.160
-14,Min space of met2 to met2 inside VPP capacitor,Cu,0.160
+1,Min width of capacitor:dg,,1.430,µm
+1b,Max width of capacitor:dg; Rule not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5 and vpp_with_noLi,,11.350,µm
+1c,"Min/Max width of cell name ""s8rf_xcmvpp1p8x1p8_m3shield """,,3.880,µm
+3,"capacitor:dg must not overlap (tap or diff or poly); (one exception: Poly is allowed to overlap  vpp_with_Met3Shield and vpp_with_Met5PolyShield); (not applicable for vpp_over_Moscap or ""s8rf2_xcmvppx4_2xnhvnative10x4"" or vpp_with_LiShield)",,,
+4,capacitor:dg must not straddle (nwell or dnwell),,,
+5,Min spacing between (capacitor:dg edge and (poly or li1 or met1 or met2)) to (poly or li1 or met1 or met2) on separate nets (Exempt area of the error shape less than 2.25 µm² and run length less than 2.0um); Rule not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5 and vpp_with_noLi,,1.500,µm
+5a,Max pattern density of met3.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_LiShield and vpp_over_MOSCAP and vpp_with_Met5),,0.25,\-
+5b,Max pattern density of met4.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_Met5 and vpp_over_MOSCAP),,0.3,\-
+5c,"Max pattern density of met5.dg over capacitor.dg (not applicable for vpp_with_Met3Shield and vpp_with_Met5 and vpp_over_MOSCAP and vpp_with_noLi); (one exception: rules does apply to cell ""s8rf2_xcmvpp11p5x11p7_m1m4"" and ""s8rf2_xcmvpp_hd5_atlas*"")",,0.4,\-
+8,Min enclosure of capacitor:dg by nwell,,1.500,µm
+9,Min spacing of capacitor:dg to nwell (not applicable for vpp_over_MOSCAP),,1.500,µm
+10,vpp capacitors must not overlap; Rule checks for capacitor.dg overlapping more than one pwell pin,,,
+11,Min pattern density of (poly and diff) over capacitor.dg; (vpp_over_Moscap only),,0.87,\-
+12a,"Number of met4 shapes inside capacitor.dg of cell ""s8rf2_xcmvpp8p6x7p9_m3_lim5shield""  must overlap with size 2.01 x 2.01 (no other met4 shapes allowed)",,9.00,µm
+12b,"Number of met4 shapes inside capacitor.dg of cell ""s8rf2_xcmvpp11p5x11p7_m3_lim5shield""  must overlap with size 2.01 x 2.01 (no other met4 shapes allowed)",,16.00,µm
+12c,"Number of met4 shapes inside capacitor.dg of cell ""s8rf2_xcmvpp4p4x4p6_m3_lim5shield""  must overlap with size 1.5 x 1.5 (no other met4 shapes allowed)",,4.00,µm
+13,Min space of met1 to met1inside VPP capacitor,Cu,0.160,µm
+14,Min space of met2 to met2 inside VPP capacitor,Cu,0.160,µm
 ,,,
 ,,,
 ,,,
@@ -825,25 +825,25 @@
 (m1.-),Met1,,sky130
 ,"Function: Defines first level of metal interconnects, buses etc;",,
 ,,,
-.X.1,"Algorithm should flag errors, for met1, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm1 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. NOTE: Required for IP, Recommended for Chip-level.",RC,
-1,Width of metal1,,0.140
-2,Spacing of metal1 to metal1,,0.140
-3a,Min. spacing of features attached to or extending from huge_met1 for a distance of up to  0.280 um to metal1 (rule not checked over non-huge met1 features),,0.280
-3b,Min. spacing of huge_met1 to metal1 excluding features checked by m1.3a,,0.280
-4,Mcon must be enclosed by Met1 by at least …(Rule exempted for cell names documented in rule m1.4a),P,0.030
-4a,"Mcon must be enclosed by Met1 by at least (for cell names ""s8cell_ee_plus_sseln_a"", ""s8cell_ee_plus_sseln_b"", ""s8cell_ee_plus_sselp_a"", ""s8cell_ee_plus_sselp_b"", ""s8fpls_pl8"", and ""s8fs_cmux4_fm"")",P,0.005
-5,Mcon must be enclosed by Met1 on one of two adjacent sides by at least …,"P, Al",0.060
-6,Min metal 1 area [um2],,0.083
-7,Min area of metal1 holes [um2],,0.140
-pd.1,Min MM1_oxide_Pattern_density,"RR, Al",0.7
-pd.2a,Rule m1.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,"A, Al",700
-pd.2b,Rule m1.pd.1 has to be checked by dividing the chip into steps of …,"A, Al",70
-11,Max width of metal1after slotting,"Cu, NC",4.000
-12,Add slots and remove vias and contacts if met1 wider than…..,Cu,3.200
-13,Max pattern density (PD) of met1,Cu,0.77
-14,Met1 PD window size ,Cu,50.000
-14a,Met1 PD window step,Cu,25.000
-15,Mcon must be enclosed by met1 on one of two adjacent sides by at least …,Cu,0.030
+.X.1,"Algorithm should flag errors, for met1, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm1 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm1 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. NOTE: Required for IP, Recommended for Chip-level.",RC,,
+1,Width of metal1,,0.140,µm
+2,Spacing of metal1 to metal1,,0.140,µm
+3a,Min. spacing of features attached to or extending from huge_met1 for a distance of up to  0.280 µm to metal1 (rule not checked over non-huge met1 features),,0.280,µm
+3b,Min. spacing of huge_met1 to metal1 excluding features checked by m1.3a,,0.280,µm
+4,Mcon must be enclosed by Met1 by at least …(Rule exempted for cell names documented in rule m1.4a),P,0.030,µm
+4a,"Mcon must be enclosed by Met1 by at least (for cell names ""s8cell_ee_plus_sseln_a"", ""s8cell_ee_plus_sseln_b"", ""s8cell_ee_plus_sselp_a"", ""s8cell_ee_plus_sselp_b"", ""s8fpls_pl8"", and ""s8fs_cmux4_fm"")",P,0.005,µm
+5,Mcon must be enclosed by Met1 on one of two adjacent sides by at least …,"P, Al",0.060,µm
+6,Min metal 1 area ,,0.083,µm²
+7,Min area of metal1 holes ,,0.140,µm²
+pd.1,Min MM1_oxide_Pattern_density,"RR, Al",0.7,\-
+pd.2a,Rule m1.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,"A, Al",700,µm
+pd.2b,Rule m1.pd.1 has to be checked by dividing the chip into steps of …,"A, Al",70,
+11,Max width of metal1after slotting,"Cu, NC",4.000,µm
+12,Add slots and remove vias and contacts if met1 wider than…..,Cu,3.200,
+13,Max pattern density (PD) of met1,Cu,0.77,\-
+14,Met1 PD window size,Cu,50.000,µm
+14a,Met1 PD window step,Cu,25.000,µm
+15,Mcon must be enclosed by met1 on one of two adjacent sides by at least …,Cu,0.030,µm
 ,,,
 ,,,
 ,,,
@@ -873,25 +873,25 @@
 (via.-),Via,,sky130
 ,Function: Defines contact between met1  and met2,,
 ,,,
-1a,Min and max L and W of via outside :drc_tag:`areaid.mt`,Al,0.150
-1b,"Three sizes of square Vias allowed inside areaid:mt: 0.150um, 0.230um and 0.280um",Al,
-2,Spacing of via to via,Al,0.170
-3,Only min. square vias are allowed except die seal ring where vias are (Via CD)*L,,0.2*L
-4a,0.150 um Via must be enclosed by Met1 by at least …,,0.055
-4b,"Inside :drc_tag:`areaid.mt`, 0.230 um Via must be enclosed by met1 by atleast",Al,0.030
-4c,"Inside :drc_tag:`areaid.mt`, 0.280 um Via must be enclosed by met1 by atleast",Al,0.000
-5a,0.150 um Via must be enclosed by Met1 on one of two adjacent sides by at least …,,0.085
-5b,"Inside :drc_tag:`areaid.mt`, 0.230 um Via must be enclosed by met1 on one of two adjacent sides by at least …",Al,0.060
-5c,"Inside :drc_tag:`areaid.mt`, 0.280 um Via must be enclosed by met1 on one of two adjacent sides by at least …",Al,0.000
-11,Min and max L and W of via outside :drc_tag:`areaid.mt`,Cu,0.180
-12,Min spacing between vias,Cu,0.130
-13,Max of 5 vias within …,Cu,0.350
-14,0.180 um Via must be enclosed by parallel edges of Met1 by at least …,Cu,0.040
-irdrop.1,"For 1 <= n <= 2 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.0
-irdrop.2,"For 3 <= n <= 15 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.6
-irdrop.3,"For 16 <= n <= 30 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.8
-irdrop.4,"For n > 30 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.9
-14a,0.180 um Via must be enclosed by 45 deg edges of Met1 by at least …,Cu,0.037
+1a,Min and max L and W of via outside :drc_tag:`areaid.mt`,Al,0.150,µm
+1b,"Three sizes of square Vias allowed inside areaid:mt: 0.150um, 0.230um and 0.280um",Al,,
+2,Spacing of via to via,Al,0.170,µm
+3,Only min. square vias are allowed except die seal ring where vias are (Via CD)*L,,0.2*L,
+4a,0.150 µm Via must be enclosed by Met1 by at least …,,0.055,µm
+4b,"Inside :drc_tag:`areaid.mt`, 0.230 µm Via must be enclosed by met1 by atleast",Al,0.030,µm
+4c,"Inside :drc_tag:`areaid.mt`, 0.280 µm Via must be enclosed by met1 by atleast",Al,0.000,µm
+5a,0.150 µm Via must be enclosed by Met1 on one of two adjacent sides by at least …,,0.085,µm
+5b,"Inside :drc_tag:`areaid.mt`, 0.230 µm Via must be enclosed by met1 on one of two adjacent sides by at least …",Al,0.060,µm
+5c,"Inside :drc_tag:`areaid.mt`, 0.280 µm Via must be enclosed by met1 on one of two adjacent sides by at least …",Al,0.000,µm
+11,Min and max L and W of via outside :drc_tag:`areaid.mt`,Cu,0.180,µm
+12,Min spacing between vias,Cu,0.130,µm
+13,Max of 5 vias within …,Cu,0.350,µm
+14,0.180 µm Via must be enclosed by parallel edges of Met1 by at least …,Cu,0.040,µm
+irdrop.1,"For 1 <= n <= 2 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.0,µm
+irdrop.2,"For 3 <= n <= 15 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.6,µm
+irdrop.3,"For 16 <= n <= 30 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.8,µm
+irdrop.4,"For n > 30 vias on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.9,µm
+14a,0.180 µm Via must be enclosed by 45 deg edges of Met1 by at least …,Cu,0.037,deg µm
 ,,,
 ,,,
 ,,,
@@ -909,25 +909,25 @@
 (m2.-),Metal 2,,sky130
 ,"Function: Defines second level of metal interconnects, buses etc",,
 ,,,
-.X.1,"Algorithm should flag errors, for met2, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm2 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. Required for IP, Recommended for Chip-level.",RC,
-1,Width of metal 2,,0.140
-2,Spacing of metal 2 to metal 2,,0.140
-3a,Min. spacing of features attached to or extending from huge_met2 for a distance of up to  0.280 um to metal2 (rule not checked over non-huge met2 features),,0.280
-3b,Min. spacing of huge_met2 to metal2 excluding features checked by m2.3a,,0.280
-3c,"Min spacing between floating_met2 with AR_met2_A >= 0.05 and AR_met2_B =< 0.032, outside areaid:sc must be greater than",RR,0.145
-4,Via must be enclosed by Met2 by at least … ,"P, Al",0.055
-5,Via must be enclosed by Met2 on one of two adjacent sides by at least …,Al,0.085
-6,Min metal2 area [um2],,0.0676
-7,Min area of metal2 holes [um2],,0.140
-pd.1,Min MM2_oxide_Pattern_density,RR,0.7
-pd.2a,Rule m2.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A,700
-pd.2b,Rule m2.pd.1 has to be checked by dividing the chip into steps of …,A,70
-11,Max width of metal2,Cu,4.000
-12,Add slots and remove vias and contacts if met2 wider than…..,Cu,3.200
-13,Max pattern density (PD) of metal2,Cu,0.77
-14,Met2 PD window size ,Cu,50.000
-14a,Met2 PD window step,Cu,25.000
-15,Via must be enclosed by met2 by at least…,Cu,0.040
+.X.1,"Algorithm should flag errors, for met2, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm2 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm2 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. Required for IP, Recommended for Chip-level.",RC,,
+1,Width of metal 2,,0.140,µm
+2,Spacing of metal 2 to metal 2,,0.140,µm
+3a,Min. spacing of features attached to or extending from huge_met2 for a distance of up to  0.280 µm to metal2 (rule not checked over non-huge met2 features),,0.280,µm
+3b,Min. spacing of huge_met2 to metal2 excluding features checked by m2.3a,,0.280,µm
+3c,"Min spacing between floating_met2 with AR_met2_A >= 0.05 and AR_met2_B =< 0.032, outside areaid:sc must be greater than",RR,0.145,µm
+4,Via must be enclosed by Met2 by at least …,"P, Al",0.055,µm
+5,Via must be enclosed by Met2 on one of two adjacent sides by at least …,Al,0.085,µm
+6,Min metal2 area ,,0.0676,µm²
+7,Min area of metal2 holes ,,0.140,µm²
+pd.1,Min MM2_oxide_Pattern_density,RR,0.7,\-
+pd.2a,Rule m2.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A,700,µm
+pd.2b,Rule m2.pd.1 has to be checked by dividing the chip into steps of …,A,70,
+11,Max width of metal2,Cu,4.000,µm
+12,Add slots and remove vias and contacts if met2 wider than…..,Cu,3.200,
+13,Max pattern density (PD) of metal2,Cu,0.77,\-
+14,Met2 PD window size,Cu,50.000,µm
+14a,Met2 PD window step,Cu,25.000,µm
+15,Via must be enclosed by met2 by at least…,Cu,0.040,µm
 ,,,
 ,,,
 ,,,
@@ -953,26 +953,26 @@
 (via2.-),Via2,,sky130
 ,Function: Via2 connects met2 to met3 in the SKY130T*/SKY130P*/SP8Q/SP8P* flows and met2/capm to met3 in the SKY130DI* flow.,,
 ,,,
-X.1,Via2 connects met2 to met3 in the SKY130T*/SKY130P*/SP8Q/SP8P* flow and met2/capm to met3 in the SKY130DI* flow. ,,
-1a,Min and max L and W of via2 (except for rule via2.1b/1c/1d/1e/1f),Al,0.200
-1b,"Three sizes of square Vias allowed inside areaid:mt: 0.280um, 1.2 um and 1.5 um",Al,N/A
-1c,Two sizes of square Vias allowed inside areaid:mt: 1.2 um and 1.5 um,Al,N/A
-1d,"Four sizes of square Vias allowed inside areaid:mt: 0.2um, 0.280um, 1.2 um and 1.5 um",Al,
-1e,"Three sizes of square Vias allowed inside areaid:mt: 0.8um, 1.2 um and 1.5 um",Al,N/A
-1f,Two sizes of square Vias allowed outside areaid:mt: 0.8um and 1.2 um,Al,N/A
-2,Spacing of via2 to via2,Al,0.200
-3,Only min. square via2s are allowed except die seal ring where via2s are (Via2 CD)*L,Al,0.2*L
-4,Via2 must be enclosed by Met2 by at least …,Al,0.040
-4a,"Inside :drc_tag:`areaid.mt`, 1.5 um Via2 must be enclosed by met2 by atleast",,0.140
-5,Via2 must be enclosed by Met2 on one of two adjacent sides by at least …,Al,0.085
-11,Min and max L and W of via2,Cu,0.210
-12,Min spacing between via2's,Cu,0.180
-13,Min spacing between via2 rows,Cu,0.200
-14,Via2 must be enclosed by met2 by atleast,Cu,0.035
-irdrop.1,"For 1 <= n <= 2 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.0
-irdrop.2,"For 3 <= n <= 4 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.6
-irdrop.3,"For 5 <= n <= 30 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.79
-irdrop.4,"For n > 30 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.9
+X.1,Via2 connects met2 to met3 in the SKY130T*/SKY130P*/SP8Q/SP8P* flow and met2/capm to met3 in the SKY130DI* flow.,,,
+1a,Min and max L and W of via2 (except for rule via2.1b/1c/1d/1e/1f),Al,0.200,µm
+1b,"Three sizes of square Vias allowed inside areaid:mt: 0.280um, 1.2 um and 1.5 um",Al,N/A,N/A
+1c,Two sizes of square Vias allowed inside areaid:mt: 1.2 um and 1.5 um,Al,N/A,N/A
+1d,"Four sizes of square Vias allowed inside areaid:mt: 0.2um, 0.280um, 1.2 um and 1.5 um",Al,,
+1e,"Three sizes of square Vias allowed inside areaid:mt: 0.8um, 1.2 um and 1.5 um",Al,N/A,N/A
+1f,Two sizes of square Vias allowed outside areaid:mt: 0.8um and 1.2 um,Al,N/A,N/A
+2,Spacing of via2 to via2,Al,0.200,µm
+3,Only min. square via2s are allowed except die seal ring where via2s are (Via2 CD)*L,Al,0.2*L,
+4,Via2 must be enclosed by Met2 by at least …,Al,0.040,µm
+4a,"Inside :drc_tag:`areaid.mt`, 1.5 µm Via2 must be enclosed by met2 by atleast",,0.140,µm
+5,Via2 must be enclosed by Met2 on one of two adjacent sides by at least …,Al,0.085,µm
+11,Min and max L and W of via2,Cu,0.210,µm
+12,Min spacing between via2's,Cu,0.180,µm
+13,Min spacing between via2 rows,Cu,0.200,µm
+14,Via2 must be enclosed by met2 by atleast,Cu,0.035,µm
+irdrop.1,"For 1 <= n <= 2 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.0,µm
+irdrop.2,"For 3 <= n <= 4 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.6,µm
+irdrop.3,"For 5 <= n <= 30 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.79,µm
+irdrop.4,"For n > 30 via2's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.9,µm
 ,,,
 ,,,
 ,,,
@@ -990,27 +990,27 @@
 (m3.-),Metal 3,,sky130
 ,"Function: Defines third level of metal interconnects, buses etc",,
 ,,,
-.X.1,"Algorithm should flag errors, for met3, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm3 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. NOTE: Required for IP, Recommended for Chip-level.",RC,
-1,Width of metal 3,,0.300
-2,Spacing of metal 3 to metal 3,,0.300
-3a,Min. spacing of features attached to or extending from huge_met3 for a distance of up to 0.480 um to metal3  (rule not checked over non-huge met3 features),,N/A
-3b,Min. spacing of huge_met3 to metal3 excluding features checked by m3.3a,,N/A
-3c,Min. spacing of features attached to or extending from huge_met3 for a distance of up to 0.400 um to metal3  (rule not checked over non-huge met3 features),,0.400
-3d,Min. spacing of huge_met3 to metal3 excluding features checked by m3.3a,,0.400
-4,Via2 must be enclosed by Met3 by at least …,Al,0.065
-5,Via2 must be enclosed by Met3 on one of two adjacent sides by at least …,,N/A
-5a,Via2 must be enclosed by Met3 on all sides by at least …(Rule not checked on a layout when it satisfies both rules m3.4 and m3.5),,N/A
-6,Min area of metal3 ,,0.240
-7,Min area of metal3 holes [um2],Cu,0.200
-pd.1,Min MM3_oxide_Pattern_density,RR,0.7
-pd.2a,Rule m3.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A,700
-pd.2b,Rule m3.pd.1 has to be checked by dividing the chip into steps of …,A,70
-11,Max width of metal3,Cu,4.000
-12,Add slots and remove vias and contacts if wider than…..,Cu,3.200
-13,Max pattern density (PD) of metal3,Cu,0.77
-14,Met3 PD window size ,Cu,50.000
-14a,Met3 PD window step,Cu,25.000
-15,Via2 must be enclosed by met3 by at least…,Cu,0.060
+.X.1,"Algorithm should flag errors, for met3, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm3 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm3 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. NOTE: Required for IP, Recommended for Chip-level.",RC,,
+1,Width of metal 3,,0.300,µm
+2,Spacing of metal 3 to metal 3,,0.300,µm
+3a,Min. spacing of features attached to or extending from huge_met3 for a distance of up to 0.480 um to metal3  (rule not checked over non-huge met3 features),,N/A,N/A
+3b,Min. spacing of huge_met3 to metal3 excluding features checked by m3.3a,,N/A,N/A
+3c,Min. spacing of features attached to or extending from huge_met3 for a distance of up to 0.400 µm to metal3  (rule not checked over non-huge met3 features),,0.400,µm
+3d,Min. spacing of huge_met3 to metal3 excluding features checked by m3.3a,,0.400,µm
+4,Via2 must be enclosed by Met3 by at least …,Al,0.065,µm
+5,Via2 must be enclosed by Met3 on one of two adjacent sides by at least …,,N/A,N/A
+5a,Via2 must be enclosed by Met3 on all sides by at least …(Rule not checked on a layout when it satisfies both rules m3.4 and m3.5),,N/A,N/A
+6,Min area of metal3,,0.240,µm²
+7,Min area of metal3 holes ,Cu,0.200,µm²
+pd.1,Min MM3_oxide_Pattern_density,RR,0.7,\-
+pd.2a,Rule m3.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A,700,µm
+pd.2b,Rule m3.pd.1 has to be checked by dividing the chip into steps of …,A,70,
+11,Max width of metal3,Cu,4.000,µm
+12,Add slots and remove vias and contacts if wider than…..,Cu,3.200,
+13,Max pattern density (PD) of metal3,Cu,0.77,\-
+14,Met3 PD window size,Cu,50.000,µm
+14a,Met3 PD window step,Cu,25.000,µm
+15,Via2 must be enclosed by met3 by at least…,Cu,0.060,µm
 ,,,
 ,,,
 ,,,
@@ -1032,36 +1032,36 @@
 (via3.-),Via3,,sky130
 ,Function: Via3 connects met3 to met4 in the SKY130Q*/SKY130P*/SP8Q/SP8P* flow ,,
 ,,,
-1,Min and max L and W of via3 (except for rule via3.1a),Al,0.200
-1a,Two sizes of square via3 allowed inside :drc_tag:`areaid.mt`: 0.200um and 0.800um,Al,
-2,Spacing of via3 to via3,Al,0.200
-3,Only min. square via3s are allowed except die seal ring where via3s are (Via3 CD)*L,,0.2*L
-4,Via3 must be enclosed by Met3 by at least …,Al,0.060
-5,Via3 must be enclosed by Met3 on one of two adjacent sides by at least …,Al,0.090
-11,Min and max L and W of via3,Cu,0.210
-12,Min spacing between via2's,Cu,0.180
-13,Via3 must be enclosed by Met3 by at least …,Cu,0.055
-14,Min spacing between via3 rows,Cu,0.350
-irdrop.1,"For 1 <= n <= 2 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.0
-irdrop.2,"For 3 <= n <= 15 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.6
-irdrop.3,"For 16 <= n <= 30 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.8
-irdrop.4,"For n > 30 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.9
+1,Min and max L and W of via3 (except for rule via3.1a),Al,0.200,µm
+1a,Two sizes of square via3 allowed inside :drc_tag:`areaid.mt`: 0.200um and 0.800um,Al,,
+2,Spacing of via3 to via3,Al,0.200,µm
+3,Only min. square via3s are allowed except die seal ring where via3s are (Via3 CD)*L,,0.2*L,
+4,Via3 must be enclosed by Met3 by at least …,Al,0.060,µm
+5,Via3 must be enclosed by Met3 on one of two adjacent sides by at least …,Al,0.090,µm
+11,Min and max L and W of via3,Cu,0.210,µm
+12,Min spacing between via2's,Cu,0.180,µm
+13,Via3 must be enclosed by Met3 by at least …,Cu,0.055,µm
+14,Min spacing between via3 rows,Cu,0.350,µm
+irdrop.1,"For 1 <= n <= 2 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.0,µm
+irdrop.2,"For 3 <= n <= 15 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.6,µm
+irdrop.3,"For 16 <= n <= 30 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.8,µm
+irdrop.4,"For n > 30 via3's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.9,µm
 ,,,
 (nsm.-),Nitride Seal Mask,,sky130
 ,,,
-1,Min. width of nsm, ,3.000
-2,Min. spacing of nsm to nsm,,4.000
-3,"Min spacing, no overlap, between NSM_keepout to diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5). Exempt the following from the check: (a) cell name ""nikon*"" and (b) diff ring inside :drc_tag:`areaid.sl` ",Al,1.000
-3a,"Min enclosure of diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5) by :drc_tag:`areaid.ft`. Exempt the following from the check: (a) cell name ""s8Fab_crntic*""  (b)  blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption)",,3.000
-3b,"Min spacing between :drc_tag:`areaid.dt` to diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5). Exempt the following from the check: (a) blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption)",,3.000
+1,Min. width of nsm,,3.000,µm
+2,Min. spacing of nsm to nsm,,4.000,µm
+3,"Min spacing, no overlap, between NSM_keepout to diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5). Exempt the following from the check: (a) cell name ""nikon*"" and (b) diff ring inside :drc_tag:`areaid.sl` ",Al,1.000,µm
+3a,"Min enclosure of diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5) by :drc_tag:`areaid.ft`. Exempt the following from the check: (a) cell name ""s8Fab_crntic*""  (b)  blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption)",,3.000,µm
+3b,"Min spacing between :drc_tag:`areaid.dt` to diff.dg, tap.dg, fom.dy, cfom.dg, cfom.mk, poly.dg, p1m.mk, li1.dg, cli1m.mk, metX.dg (X=1 to 5) and cmmX.mk (X=1 to 5). Exempt the following from the check: (a) blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption)",,3.000,µm
 ,,,
 (indm.-),Inductor metal,,sky130
 ,"Function: Defines third level of metal interconnects, buses and inductor; top_indmMetal is met3 for SKY130D* flows; Similarly top_padVia is Via2 for SKY130D*",,
 ,,,
-1,Min width of top_indmMetal,,N/A
-2,Min spacing between two top_indmMetal,,N/A
-3,top_padVia must  be enclosed by top_indmMetal by atleast,,N/A
-4,Min area of top_indmMetal,,N/A
+1,Min width of top_indmMetal,,N/A,N/A
+2,Min spacing between two top_indmMetal,,N/A,N/A
+3,top_padVia must  be enclosed by top_indmMetal by atleast,,N/A,N/A
+4,Min area of top_indmMetal,,N/A,N/A
 ,,,
 ,,,
 ,,,
@@ -1075,25 +1075,25 @@
 (m4.-),Metal 4,,sky130
 ,Function: Defines Fourth level of metal interconnects;,,
 ,,,
-.X.1,"Algorithm should flag errors, for met4, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm4 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. Required for IP, Recommended for Chip-level.",RC,
-1,Min width of met4,,0.300
-2,Min spacing between two met4,,0.300
-3,via3 must  be enclosed by met4 by atleast,Al,0.065
-4,Min area of met4 (rule exempted for probe pads which are exactly 1.42um by 1.42um),,N/A
-4a,Min area of met4 ,,0.240
-5a,Min. spacing of features attached to or extending from huge_met4 for a distance of up to  0.400 um to metal4 (rule not checked over non-huge met4 features),,0.400
-5b,Min. spacing of huge_met4 to metal4 excluding features checked by m4.5a,,0.400
-7,Min area of meta4 holes [um2],Cu,0.200
-pd.1,Min MM4_oxide_Pattern_density,RR,0.7
-pd.2a,Rule m4.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A,700
-pd.2b,Rule m4.pd.1 has to be checked by dividing the chip into steps of …,A,70
-11,Max width of metal4,Cu,10.000
-12,Add slots and remove vias and contacts if wider than…..,Cu,10.000
-13,Max pattern density (PD) of metal4; met4 overlapping pdm areas are excluded from the check,Cu,0.77
-14,Met4 PD window size ,Cu,50.000
-14a,Met4 PD window step,Cu,25.000
-15,Via3 must be enclosed by met4 by at least…,Cu,0.060
-16,Min enclosure of pad by met4,Cu,0.850
+.X.1,"Algorithm should flag errors, for met4, if ANY of the following is true:\nAn entire 700x700 window is covered by cmm4 waffleDrop, and metX PD < 70% for same window.\n80-100% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 65% for same window.\n60-80% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 60% for same window.\n50-60% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 50% for same window.\n40-50% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 40% for same window.\n30-40% of 700x700 window is covered by cmm4 waffleDrop, and metX PD < 30% for same window.\nExclude cells whose area is below 40Kum2. Required for IP, Recommended for Chip-level.",RC,,
+1,Min width of met4,,0.300,µm
+2,Min spacing between two met4,,0.300,µm
+3,via3 must  be enclosed by met4 by atleast,Al,0.065,µm
+4,Min area of met4 (rule exempted for probe pads which are exactly 1.42um by 1.42um),,N/A,N/A
+4a,Min area of met4,,0.240,µm²
+5a,Min. spacing of features attached to or extending from huge_met4 for a distance of up to  0.400 µm to metal4 (rule not checked over non-huge met4 features),,0.400,µm
+5b,Min. spacing of huge_met4 to metal4 excluding features checked by m4.5a,,0.400,µm
+7,Min area of meta4 holes ,Cu,0.200,µm²
+pd.1,Min MM4_oxide_Pattern_density,RR,0.7,\-
+pd.2a,Rule m4.pd.1 has to be checked by dividing the chip into square regions of width and length equal to …,A,700,µm
+pd.2b,Rule m4.pd.1 has to be checked by dividing the chip into steps of …,A,70,
+11,Max width of metal4,Cu,10.000,µm
+12,Add slots and remove vias and contacts if wider than…..,Cu,10.000,
+13,Max pattern density (PD) of metal4; met4 overlapping pdm areas are excluded from the check,Cu,0.77,\-
+14,Met4 PD window size,Cu,50.000,µm
+14a,Met4 PD window step,Cu,25.000,µm
+15,Via3 must be enclosed by met4 by at least…,Cu,0.060,µm
+16,Min enclosure of pad by met4,Cu,0.850,µm
 ,,,
 ,,,
 ,,,
@@ -1124,67 +1124,67 @@
 (via4.-),Via4,,sky130
 ,Function: Via4 connects met4 to met5 in the SKY130P*/SP8P* flow ,,
 ,,,
-1,Min and max L and W of via4,,0.800
-2,Spacing of via4 to via4,,0.800
-3,Only min. square via4s are allowed except die seal ring where via4s are (Via4 CD)*L,,0.8*L
-4,Via4 must be enclosed by Met4 by at least …,,0.190
-irdrop.1,"For 1 <= n <= 4 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.0
-irdrop.2,"For 5 <= n <= 10 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.2
-irdrop.3,"For 11 <= n <= 100 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.5
-irdrop.4,"For n > 100 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.8
+1,Min and max L and W of via4,,0.800,µm
+2,Spacing of via4 to via4,,0.800,µm
+3,Only min. square via4s are allowed except die seal ring where via4s are (Via4 CD)*L,,0.8*L,
+4,Via4 must be enclosed by Met4 by at least …,,0.190,µm
+irdrop.1,"For 1 <= n <= 4 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.0,µm
+irdrop.2,"For 5 <= n <= 10 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.2,µm
+irdrop.3,"For 11 <= n <= 100 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.5,µm
+irdrop.4,"For n > 100 via4's on the same connector, mcon area pre- and post- Cu conversion must differ by no more than… ","Cu, IR",0.8,µm
 ,,,
 (m5.-),Metal 5,,sky130
 ,Function: Defines Fifth level of metal interconnects;,,
 ,,,
-1,Min width of met5,,1.600
-2,Min spacing between two met5,,1.600
-3,via4 must  be enclosed by met5 by atleast,,0.310
-4,"Min area of met5 (For all flows except SKY130PIR*/SKY130PF*, the rule is exempted for probe pads which are exactly 1.42um by 1.42um)",,4.000
+1,Min width of met5,,1.600,µm
+2,Min spacing between two met5,,1.600,µm
+3,via4 must  be enclosed by met5 by atleast,,0.310,µm
+4,"Min area of met5 (For all flows except SKY130PIR*/SKY130PF*, the rule is exempted for probe pads which are exactly 1.42um by 1.42um)",,4.000,µm²
 ,,,
 (pad.-),Pad,,sky130
 ,Function: Opens the passivation,,
 ,,,
-2,Min spacing of pad:dg to pad:dg,,1.270
-3,Max area of hugePad NOT top_metal ,,30000
+2,Min spacing of pad:dg to pad:dg,,1.270,µm
+3,Max area of hugePad NOT top_metal,,30000,µm²
 ,,,
 (rdl.-),Cu Inductor,,sky130
 ,Function: Defines the Cu Inductor. Connects to met5 through the pad opening,,
 ,,,
-1,Min width of rdl,,10
-2,Min spacing between two rdl,,10
-3,"Min enclosure of pad by rdl, except rdl interacting with bump",,10.750
-4,Min spacing between rdl and outer edge of the seal ring,,15.000
-5,(rdl OR ccu1m.mk) must not overlap :drc_tag:`areaid.ft`. Exempt the following from the check: (a)  blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption),,
-6,"Min spacing of rdl to pad, except rdl interacting with bump",,19.660
+1,Min width of rdl,,10,µm
+2,Min spacing between two rdl,,10,µm
+3,"Min enclosure of pad by rdl, except rdl interacting with bump",,10.750,µm
+4,Min spacing between rdl and outer edge of the seal ring,,15.000,µm
+5,(rdl OR ccu1m.mk) must not overlap :drc_tag:`areaid.ft`. Exempt the following from the check: (a)  blankings in the frame (rule uses :drc_tag:`areaid.dt` for exemption),,,
+6,"Min spacing of rdl to pad, except rdl interacting with bump",,19.660,µm
 ,,,
 (mf.-),Metal Fuse,,sky130
 ,Function: Defines metal fuses,,
 ,For SKY130D* and SKY130TM* CADflow use MM2 for Metal Fuse,,
 ,For SP8P*/SKY130P* (PLM) CADflow use MM4 for Metal Fuse,,
-1,Min. and max width of fuse,,0.800
-2,Length of fuse,,7.200
-3,Spacing between centers of adjacent fuses,,2.760
-4,Spacing between center of fuse and fuse_metal (fuse shields are exempted),,3.300
-5,Max. extension of fuse_metal beyond fuse boundary ,,0.830
-6,Spacing (no overlapping) between fuse center and Metal1,,3.300
-7,Spacing (no overlapping) between fuse center and LI,,3.300
-8,Spacing (no overlapping) between fuse center and poly,,2.660
-9,Spacing (no overlapping) between fuse center and tap,,2.640
-10,Spacing (no overlapping) between fuse center and diff,,3.250
-11,Spacing (no overlapping) between fuse center and nwell,,3.320
-12,Size of  fuse_shield, ,0.5x2.4
-13,Min. spacing of center of fuse to fuse_shield,,2.200
-14,Max. spacing of center of fuse to fuse_shield,,3.300
-15,"Fuse_shields are only placed between periphery metal (i.e., without fuse:dg) and non-isolated edges of fuse as defined by mf.16",,
-16,The edge of a fuse is considered non-isolated if wider than or equal to mf.2 and spaced to fuse_metal by less than …,,4.000
-17,Offset between fuse_shields center and fuse center,NC,0.000
-18,Min and max space between fuse_shield and fuse_metal (opposite edges). Rule checked within 1 gridpoint.,,0.600
-19,Spacing (no overlapping) between fuse center and Metal2,,3.300
-20,Only one fuse per metal line allowed,,
-21,"Min spacing , no overlap, between metal3 and fuse center",,3.300
-22,Min spacing between fuse_contact to fuse_contact,,1.960
-23,Spacing (no overlapping) between fuse center and Metal4,,N/A
-24,Spacing (no overlapping) between fuse center and Metal5,,3.300
+1,Min. and max width of fuse,,0.800,µm
+2,Length of fuse,,7.200,µm
+3,Spacing between centers of adjacent fuses,,2.760,µm
+4,Spacing between center of fuse and fuse_metal (fuse shields are exempted),,3.300,µm
+5,Max. extension of fuse_metal beyond fuse boundary,,0.830,
+6,Spacing (no overlapping) between fuse center and Metal1,,3.300,µm
+7,Spacing (no overlapping) between fuse center and LI,,3.300,µm
+8,Spacing (no overlapping) between fuse center and poly,,2.660,µm
+9,Spacing (no overlapping) between fuse center and tap,,2.640,µm
+10,Spacing (no overlapping) between fuse center and diff,,3.250,µm
+11,Spacing (no overlapping) between fuse center and nwell,,3.320,µm
+12,Size of  fuse_shield,,0.5x2.4,µm
+13,Min. spacing of center of fuse to fuse_shield,,2.200,µm
+14,Max. spacing of center of fuse to fuse_shield,,3.300,µm
+15,"Fuse_shields are only placed between periphery metal (i.e., without fuse:dg) and non-isolated edges of fuse as defined by mf.16",,,
+16,The edge of a fuse is considered non-isolated if wider than or equal to mf.2 and spaced to fuse_metal by less than …,,4.000,
+17,Offset between fuse_shields center and fuse center,NC,0.000,
+18,Min and max space between fuse_shield and fuse_metal (opposite edges). Rule checked within 1 gridpoint.,,0.600,µm
+19,Spacing (no overlapping) between fuse center and Metal2,,3.300,µm
+20,Only one fuse per metal line allowed,,,
+21,"Min spacing , no overlap, between metal3 and fuse center",,3.300,µm
+22,Min spacing between fuse_contact to fuse_contact,,1.960,µm
+23,Spacing (no overlapping) between fuse center and Metal4,,N/A,N/A
+24,Spacing (no overlapping) between fuse center and Metal5,,3.300,µm
 ,,,
 ,,,
 ,,,
@@ -1216,16 +1216,16 @@
 ,,,
 ,,,
 ,,,
-Section G2b: Rules for HV devices,,,
+Section G2b: Rules for HV devices,,,,
 ,,,
 (hvi.-),HVI,,sky130
 ,Function: Defines thick oxide for high voltage devices,,
 ,,,
-1,Min width of Hvi,P,0.600
-2a,Min spacing of Hvi to Hvi,P,0.700
-2b,Manual merge if space is below minimum,,
-4,Hvi must not overlap tunm,,
-5,Min space between hvi and nwell (exclude coincident edges),,0.700
+1,Min width of Hvi,P,0.600,µm
+2a,Min spacing of Hvi to Hvi,P,0.700,µm
+2b,Manual merge if space is below minimum,,,
+4,Hvi must not overlap tunm,,,
+5,Min space between hvi and nwell (exclude coincident edges),,0.700,µm
 ,,,
 ,,,
 ,,,
@@ -1240,10 +1240,10 @@
 (nwell.-),High Voltage Nwell,,sky130
 ,"Function: Defines rules for HV nwell; All nwell connected to voltages greater than 1.8V must be enclosed by hvi; Nets connected to LV nwell or nwell overlapping hvi but connected to LV voltages (i.e 1.8V) should be tagged ""lv_net"" using text.dg; This tag should be only on Li layer",,
 ,,,
-8,Min space between HV_nwell  and any nwell on different nets,,2.000
-9,(Nwell overlapping hvi) must be enclosed by hvi,,
-10,"LVnwell and HnWell should not be on the same net (for the purposes of this check, short the connectivity through resistors); Exempt HnWell with li nets tagged ""lv_net"" using text.dg and Hnwell connected to nwell overlapping :drc_tag:`areaid.hl`",TC,
-11,"Nwell connected to the nets mentioned in the ""Power_Net_Hv"" field of the latcup GUI must be enclosed by hvi (exempt nwell inside :drc_tag:`areaid.hl`). Also for the purposes of this check, short the connectivity through resistors. The rule will be checked in the latchup run and exempted for cells ""s8tsg5_tx_ibias_gen"" and ""s8bbcnv_psoc3p_top_18"",  ""rainier_top, indus_top*"", ""rainier_top, manas_top, ccg3_top""",,
+8,Min space between HV_nwell  and any nwell on different nets,,2.000,µm
+9,(Nwell overlapping hvi) must be enclosed by hvi,,,
+10,"LVnwell and HnWell should not be on the same net (for the purposes of this check, short the connectivity through resistors); Exempt HnWell with li nets tagged ""lv_net"" using text.dg and Hnwell connected to nwell overlapping :drc_tag:`areaid.hl`",TC,,
+11,"Nwell connected to the nets mentioned in the ""Power_Net_Hv"" field of the latcup GUI must be enclosed by hvi (exempt nwell inside :drc_tag:`areaid.hl`). Also for the purposes of this check, short the connectivity through resistors. The rule will be checked in the latchup run and exempted for cells ""s8tsg5_tx_ibias_gen"" and ""s8bbcnv_psoc3p_top_18"",  ""rainier_top, indus_top*"", ""rainier_top, manas_top, ccg3_top""",,,
 ,,,
 ,,,
 ,,,
@@ -1261,21 +1261,21 @@
 (difftap.-),High Voltage Diff/Tap,,sky130
 ,Function: Defines rules for HV diff/tap,,
 ,,,
-14,"Min width of diff inside Hvi, except HV Pdiff resistors (difftap.14a)",P,0.290
-14a,"Min width of diff inside Hvi, HV Pdiff resistors only",P,0.150
-15a,Min space of Hdiff to Hdiff ,P,0.300
-15b,Min space of n+diff to non-abutting p+tap inside Hvi,P,0.370
-16,Min width tap butting diff on one or two sides inside Hvi (rule exempted inside UHVI),,0.700
-17,P+ Hdiff or Pdiff inside areaid:hvnwell must be enclosed by Hv_nwell by at least ….[Rule exempted inside UHVI],"DE, NE",0.330
-18,Spacing of N+ diff to HV_nwell (rule exempted inside UHVI),"DE, NE",0.430
-19,N+ Htap must be enclosed by Hv_nwell by at least …Rule exempted inside UHVI.,NE,0.330
-20,Spacing of P+ tap to HV_nwell (Exempted for p+tap butting pwell.rs; rule exempted inside UHVI),,0.430
-21,Diff or tap cannot straddle Hvi ,P,
-22,Min enclosure of Hdiff or Htap by Hvi. Rule exempted inside UHVI.,P,0.180
-23,Space between diff or tap outside Hvi and Hvi,P,0.180
-24,Spacing of nwell to N+ Hdiff (rule exempted inside UHVI),"DE, NE",0.430
-25,Min space of N+ Hdiff inside HVI across non-abutting P+_tap,NC,1.070
-26,Min spacing between pwbm to difftap outside UHVI,,N/A
+14,"Min width of diff inside Hvi, except HV Pdiff resistors (difftap.14a)",P,0.290,µm
+14a,"Min width of diff inside Hvi, HV Pdiff resistors only",P,0.150,µm
+15a,Min space of Hdiff to Hdiff,P,0.300,µm
+15b,Min space of n+diff to non-abutting p+tap inside Hvi,P,0.370,µm
+16,Min width tap butting diff on one or two sides inside Hvi (rule exempted inside UHVI),,0.700,µm
+17,P+ Hdiff or Pdiff inside areaid:hvnwell must be enclosed by Hv_nwell by at least ….[Rule exempted inside UHVI],"DE, NE",0.330,µm
+18,Spacing of N+ diff to HV_nwell (rule exempted inside UHVI),"DE, NE",0.430,µm
+19,N+ Htap must be enclosed by Hv_nwell by at least …Rule exempted inside UHVI.,NE,0.330,µm
+20,Spacing of P+ tap to HV_nwell (Exempted for p+tap butting pwell.rs; rule exempted inside UHVI),,0.430,µm
+21,Diff or tap cannot straddle Hvi,P,,
+22,Min enclosure of Hdiff or Htap by Hvi. Rule exempted inside UHVI.,P,0.180,µm
+23,Space between diff or tap outside Hvi and Hvi,P,0.180,µm
+24,Spacing of nwell to N+ Hdiff (rule exempted inside UHVI),"DE, NE",0.430,µm
+25,Min space of N+ Hdiff inside HVI across non-abutting P+_tap,NC,1.070,µm
+26,Min spacing between pwbm to difftap outside UHVI,,N/A,N/A
 ,,,
 ,,,
 ,,,
@@ -1317,8 +1317,8 @@
 (poly.-),High Voltage Poly,,sky130
 ,Function: Defines rules for HV poly,,
 ,,,
-13,Min width of poly over diff inside Hvi,P,0.500
-14,(poly and diff) cannot straddle Hvi,,
+13,Min width of poly over diff inside Hvi,P,0.500,µm
+14,(poly and diff) cannot straddle Hvi,,,
 ,,,
 ,,,
 ,,,
@@ -1345,17 +1345,17 @@
 (hvntm.-),Hvntm,,sky130
 ,Function: Defines tip implants for the HV NMOS,,
 ,,,
-X.1 ,Hvntm can be drawn inside HVI. Drawn layer will be OR-ed with the CL and rechecked for CLDRC,,
-1,Width of hvntm,P,0.700
-2,Spacing of hvntm to hvntm,P,0.700
-3,Min. enclosure of (n+_diff inside Hvi) but not overlapping :drc_tag:`areaid.ce` by hvntm,P,0.185
-4,"Space, no overlap, between n+_diff outside Hvi and hvntm",P,0.185
-5,"Space, no overlap, between p+_diff  and hvntm","P, DE",0.185
-6a,"Space, no overlap, between p+_tap and hvntm (except along the diff-butting edge)",P,0.185
-6b,"Space, no overlap, between p+_tap and hvntm along the diff-butting edge",P,0.000
-7,hvntm must enclose ESD_nwell_tap inside hvi by atleast,P,0.000
-9,Hvntm must not overlap :drc_tag:`areaid.ce`,,
-10,Hvntm must overlap hvi,,
+X.1,Hvntm can be drawn inside HVI. Drawn layer will be OR-ed with the CL and rechecked for CLDRC,,,
+1,Width of hvntm,P,0.700,µm
+2,Spacing of hvntm to hvntm,P,0.700,µm
+3,Min. enclosure of (n+_diff inside Hvi) but not overlapping :drc_tag:`areaid.ce` by hvntm,P,0.185,µm
+4,"Space, no overlap, between n+_diff outside Hvi and hvntm",P,0.185,µm
+5,"Space, no overlap, between p+_diff  and hvntm","P, DE",0.185,µm
+6a,"Space, no overlap, between p+_tap and hvntm (except along the diff-butting edge)",P,0.185,µm
+6b,"Space, no overlap, between p+_tap and hvntm along the diff-butting edge",P,0.000,µm
+7,hvntm must enclose ESD_nwell_tap inside hvi by atleast,P,0.000,
+9,Hvntm must not overlap :drc_tag:`areaid.ce`,,,
+10,Hvntm must overlap hvi,,,
 ,,,
 ,,,
 ,,,
@@ -1388,21 +1388,21 @@
 (denmos.-),Denmos,,sky130
 ,Function: Defines rules for the 16V Drain extended NMOS devices,,
 ,,,
-1,Min width of de_nFet_gate,,1.055
-2,Min width of de_nFet_source not overlapping poly,,0.280
-3,Min width of de_nFet_source overlapping poly,,0.925
-4,Min width of the de_nFet_drain,,0.170
-5,Min/Max extension of de_nFet_source over nwell,,0.225
-6,Min/Max spacing between de_nFet_drain and de_nFet_source,,1.585
-7,Min channel width for de_nFet_gate,,5.000
-8,90 degree angles are not permitted for nwell overlapping de_nFET_drain,,
-9a,"All bevels on nwell are 45 degree, 0.43 um from corners",,NC
-9b,"All bevels on de_nFet_drain are 45 degree, 0.05 um from corners",,NC
-10,Min enclosure of de_nFet_drain by nwell,,0.660
-11,Min spacing between p+ tap and (nwell overlapping de_nFet_drain),,0.860
-12,Min spacing between nwells overlapping de_nFET_drain,,2.400
-13,de_nFet_source must be enclosed by nsdm by,,0.130
-14,nvhv FETs must be enclosed by :drc_tag:`areaid.mt`,,N/A
+1,Min width of de_nFet_gate,,1.055,µm
+2,Min width of de_nFet_source not overlapping poly,,0.280,µm
+3,Min width of de_nFet_source overlapping poly,,0.925,µm
+4,Min width of the de_nFet_drain,,0.170,µm
+5,Min/Max extension of de_nFet_source over nwell,,0.225,
+6,Min/Max spacing between de_nFet_drain and de_nFet_source,,1.585,µm
+7,Min channel width for de_nFet_gate,,5.000,µm
+8,90 degree angles are not permitted for nwell overlapping de_nFET_drain,,,
+9a,"All bevels on nwell are 45 degree, 0.43 µm from corners",,NC,µm
+9b,"All bevels on de_nFet_drain are 45 degree, 0.05 µm from corners",,NC,µm
+10,Min enclosure of de_nFet_drain by nwell,,0.660,µm
+11,Min spacing between p+ tap and (nwell overlapping de_nFet_drain),,0.860,µm
+12,Min spacing between nwells overlapping de_nFET_drain,,2.400,µm
+13,de_nFet_source must be enclosed by nsdm by,,0.130,µm
+14,nvhv FETs must be enclosed by :drc_tag:`areaid.mt`,,N/A,N/A
 ,,,
 ,,,
 ,,,
@@ -1430,20 +1430,20 @@
 (depmos.-),Depmos,,sky130
 ,Function: Defines rules for the 16V Drain extended NMOS devices,,
 ,,,
-1,Min width of de_pFet_gate,,1.050
-2,Min width of de_pFet_source not overlapping poly,,0.280
-3,Min width of de_pFet_source overlapping poly,,0.920
-4,Min width of the de_pFet_drain,,0.170
-5,Min/Max extension of de_pFet_source beyond nwell,,0.260
-6,Min/Max spacing between de_pFet_drain and de_pFet_source,,1.190
-7,Min channel width for de_pFet_gate,,5.000
-8,90 degree angles are not permitted for nwell hole overlapping de_pFET_drain,,
-9a,"All bevels on nwell hole are 45 degree, 0.43 um from corners",,NC
-9b,"All bevels on de_pFet_drain are 45 degree, 0.05 um from corners",,NC
-10,Min enclosure of de_pFet_drain by nwell hole,,0.860
-11,Min spacing between n+ tap and (nwell hole enclosing de_pFET_drain),,0.660
-12,de_pFet_source must be enclosed by psdm by,,0.130
-13,pvhv fets( except those with W/L = 5.0/0.66) must be enclosed by :drc_tag:`areaid.mt`,,N/A
+1,Min width of de_pFet_gate,,1.050,µm
+2,Min width of de_pFet_source not overlapping poly,,0.280,µm
+3,Min width of de_pFet_source overlapping poly,,0.920,µm
+4,Min width of the de_pFet_drain,,0.170,µm
+5,Min/Max extension of de_pFet_source beyond nwell,,0.260,
+6,Min/Max spacing between de_pFet_drain and de_pFet_source,,1.190,µm
+7,Min channel width for de_pFet_gate,,5.000,µm
+8,90 degree angles are not permitted for nwell hole overlapping de_pFET_drain,,,
+9a,"All bevels on nwell hole are 45 degree, 0.43 µm from corners",,NC,µm
+9b,"All bevels on de_pFet_drain are 45 degree, 0.05 µm from corners",,NC,µm
+10,Min enclosure of de_pFet_drain by nwell hole,,0.860,µm
+11,Min spacing between n+ tap and (nwell hole enclosing de_pFET_drain),,0.660,µm
+12,de_pFet_source must be enclosed by psdm by,,0.130,µm
+13,pvhv fets( except those with W/L = 5.0/0.66) must be enclosed by :drc_tag:`areaid.mt`,,N/A,N/A
 ,,,
 ,,,
 ,,,
@@ -1473,14 +1473,14 @@
 (extd.-),Extended Drain,,sky130
 ,Function: Defines rules :drc_tag:`areaid.en`,,
 ,,,
-1,Difftap cannot straddle areaid:en,,
-2,DiffTap must have 2 or 3 coincident edges with areaid:en if enclosed by areaid:en,,
-3,Poly must not be entirely overlapping difftap in areaid:en,,
-4,"Only cell name ""s8rf_n20vhv1*"" is a valid cell name for n20vhv1 device  (Check in LVS as invalid device)",,N/A
-5,"Only cell name ""s8rf_n20vhviso1"" is a valid cell name for n20vhviso1 device  (Check in LVS as invalid device)",,N/A
-6,"Only cell name ""s8rf_p20vhv1"" is a valid cell name for p20vhv1 device  (Check in LVS as invalid device)",,N/A
-7,"Only cell name ""s8rf_n20nativevhv1*"" is a valid cell name for n20nativevhv1 device  (Check in LVS as invalid device)",,N/A
-8,"Only cell name ""s8rf_n20zvtvhv1*"" is a valid cell name for n20zvtvhv1 device  (Check in LVS as invalid device)",,N/A
+1,Difftap cannot straddle areaid:en,,,
+2,DiffTap must have 2 or 3 coincident edges with areaid:en if enclosed by areaid:en,,,
+3,Poly must not be entirely overlapping difftap in areaid:en,,,
+4,"Only cell name ""s8rf_n20vhv1*"" is a valid cell name for n20vhv1 device  (Check in LVS as invalid device)",,N/A,N/A
+5,"Only cell name ""s8rf_n20vhviso1"" is a valid cell name for n20vhviso1 device  (Check in LVS as invalid device)",,N/A,N/A
+6,"Only cell name ""s8rf_p20vhv1"" is a valid cell name for p20vhv1 device  (Check in LVS as invalid device)",,N/A,N/A
+7,"Only cell name ""s8rf_n20nativevhv1*"" is a valid cell name for n20nativevhv1 device  (Check in LVS as invalid device)",,N/A,N/A
+8,"Only cell name ""s8rf_n20zvtvhv1*"" is a valid cell name for n20zvtvhv1 device  (Check in LVS as invalid device)",,N/A,N/A
 ,,,
 ,,,
 ,,,
@@ -1496,26 +1496,26 @@
 ,,,
 (hv.-.-),High Voltage Rules,,sky130
 ,,,
-Note,High voltage rule apply for an operating voltage range of 5.5 - 12V; Nodes switching between 0 to 5.5V do not need to follow these rules,,
-.X.1,High voltage source/drain regions must be tagged by diff:hv,,
-.X.3,"High voltage poly can be drawn over multiple diff regions that are ALL reverse-biased by at least 300 mV (existence of reverse-bias is not checked by the CAD flow).  It can also be drawn over multiple diffs when all sources and all drain are shorted together. In these case, the high voltage poly can be tagged with the text:dg label with a value “hv_bb”.  Exceptions to this use of the hv_bb label must be approved by technology.  Under certain bias conditions, high voltage poly tagged with hv_bb can cross an nwell boundary. The poly of the drain extended device crosses nwell by construction and can be tagged with the ""hv_bb"" label. Use of the hv_bb label on high voltage poly crossing an nwell boundary must be approved by technology. All high voltage poly tagged with hv_bb will not be checked to hv.poly.1, hv.poly.2, hv.poly.3 and hv.poly.4.",,
-.X.4,Any piece of layout that is shorted to hv_source/drain becomes a high voltage feature.,,
-.X.5,"In cases where an hv poly gate abuts only low voltage source and drain, the poly gate can be tagged with the text:dg label with a value ""hv_lv"".  In this case, the ""hv_lv"" tagged poly gate and its extensions will not be checked to hv.poly.6, but is checked by rules in the poly.-.- section.  The use of the hv_lv label must be approved by technology.",,
-.X.6,"Nwell biased at voltages >= 7.2V must be tagged with text ""shv_nwell""",NC,
-.nwell.1,"Min spacing of nwell tagged with text ""shv_nwell"" to any nwell on different nets",,2.500
-.diff.1a,Minimum hv_source/drain spacing to diff for edges of hv_source/drain and diff not butting tap,,0.300
-.diff.1b,Minimum spacing of (n+/p+ diff resistors and diodes) connected to hv_source/drain to diff,,0.300
-.diff.2,Minimum spacing of nwell connected to hv_source/drain to n+ diff,DE,0.430
-.diff.3a,Minimum n+ hv_source/drain spacing to nwell,,0.550
-.diff.3b,Minimum spacing of (n+ diff resistors and diodes) connected to hv_source/drain to nwell,,0.550
-.poly.1,Hv poly feature hvPoly (including hv poly resistors) can be drawn over only one diff region and is not allowed to cross nwell boundary except (1) as allowed in rule .X.3 and (2) nwell hole boundary in depmos,,
-.poly.2,Min spacing of hvPoly (including hv poly resistor) on field to diff (diff butting hvPoly are excluded),,0.300
-.poly.3,Min spacing of hvPoly (including hv poly resistor) on field to n-well (exempt poly stradding nwell in a denmos/depmos),,0.550
-.poly.4,Enclosure of hvPoly (including hv poly resistor) on field by n-well (exempt poly stradding nwell in a denmos/depmos),,0.300
-.poly.6a,Min extension of poly beyond hvFET_gate (exempt poly extending beyond diff along the S/D direction in a denmos/depmos),,0.160
-.poly.6b,Extension of hv poly beyond FET_gate (including hvFET_gate; exempt poly extending beyond diff along the S/D direction in a denmos/depmos),,0.160
-.poly.7,Minimum overlap of hv poly ring_FET and diff,,
-.poly.8,Any poly gate abutting hv_source/drain becomes a hvFET_gate,,
+Note,High voltage rule apply for an operating voltage range of 5.5 - 12V; Nodes switching between 0 to 5.5V do not need to follow these rules,,,
+.X.1,High voltage source/drain regions must be tagged by diff:hv,,,
+.X.3,"High voltage poly can be drawn over multiple diff regions that are ALL reverse-biased by at least 300 mV (existence of reverse-bias is not checked by the CAD flow).  It can also be drawn over multiple diffs when all sources and all drain are shorted together. In these case, the high voltage poly can be tagged with the text:dg label with a value “hv_bb”.  Exceptions to this use of the hv_bb label must be approved by technology.  Under certain bias conditions, high voltage poly tagged with hv_bb can cross an nwell boundary. The poly of the drain extended device crosses nwell by construction and can be tagged with the ""hv_bb"" label. Use of the hv_bb label on high voltage poly crossing an nwell boundary must be approved by technology. All high voltage poly tagged with hv_bb will not be checked to hv.poly.1, hv.poly.2, hv.poly.3 and hv.poly.4.",,,
+.X.4,Any piece of layout that is shorted to hv_source/drain becomes a high voltage feature.,,,
+.X.5,"In cases where an hv poly gate abuts only low voltage source and drain, the poly gate can be tagged with the text:dg label with a value ""hv_lv"".  In this case, the ""hv_lv"" tagged poly gate and its extensions will not be checked to hv.poly.6, but is checked by rules in the poly.-.- section.  The use of the hv_lv label must be approved by technology.",,,
+.X.6,"Nwell biased at voltages >= 7.2V must be tagged with text ""shv_nwell""",NC,,
+.nwell.1,"Min spacing of nwell tagged with text ""shv_nwell"" to any nwell on different nets",,2.500,µm
+.diff.1a,Minimum hv_source/drain spacing to diff for edges of hv_source/drain and diff not butting tap,,0.300,µm
+.diff.1b,Minimum spacing of (n+/p+ diff resistors and diodes) connected to hv_source/drain to diff,,0.300,µm
+.diff.2,Minimum spacing of nwell connected to hv_source/drain to n+ diff,DE,0.430,µm
+.diff.3a,Minimum n+ hv_source/drain spacing to nwell,,0.550,µm
+.diff.3b,Minimum spacing of (n+ diff resistors and diodes) connected to hv_source/drain to nwell,,0.550,µm
+.poly.1,Hv poly feature hvPoly (including hv poly resistors) can be drawn over only one diff region and is not allowed to cross nwell boundary except (1) as allowed in rule .X.3 and (2) nwell hole boundary in depmos,,,
+.poly.2,Min spacing of hvPoly (including hv poly resistor) on field to diff (diff butting hvPoly are excluded),,0.300,µm
+.poly.3,Min spacing of hvPoly (including hv poly resistor) on field to n-well (exempt poly stradding nwell in a denmos/depmos),,0.550,µm
+.poly.4,Enclosure of hvPoly (including hv poly resistor) on field by n-well (exempt poly stradding nwell in a denmos/depmos),,0.300,µm
+.poly.6a,Min extension of poly beyond hvFET_gate (exempt poly extending beyond diff along the S/D direction in a denmos/depmos),,0.160,
+.poly.6b,Extension of hv poly beyond FET_gate (including hvFET_gate; exempt poly extending beyond diff along the S/D direction in a denmos/depmos),,0.160,
+.poly.7,Minimum overlap of hv poly ring_FET and diff,,,
+.poly.8,Any poly gate abutting hv_source/drain becomes a hvFET_gate,,,
 ,,,
 ,,,
 ,,,
@@ -1579,57 +1579,57 @@
 (vhvi.-.-),VHVI - Very HV ID and Rules,,sky130
 ,Function: Identify nets working between 12-16V,,
 ,,,
-.vhv.1,Terminals operating at nominal 12V (maximum 16V) bias must be tagged as Very-High-Voltage (VHV) using vhvi:dg layer,,NC
-.vhv.2,A source or drain of a drain-extended device can be tagged by vhvi:dg. A device with either source or drain (not both) tagged with vhvi:dg serves as a VHV propagation stopper,,NC
-.vhv.3,Any feature connected to VHVSourceDrain becomes a very-high-voltage feature,,NC
-.vhv.4,Any feature connected to VHVPoly becomes a very-high-voltage feature,,NC
-.vhv.5,"Diffusion that is not a part of a drain-extended device (i.e., diff not areaid:en) must not be on the same net as VHVSourceDrain. Only diffusion inside :drc_tag:`areaid.ed` and LV diffusion tagged with vhvi:dg are exempted.",,
-.vhv.6,"Poly resistor can act as a VHV propagation stopper. For this, it should be tagged with text ""vhv_block""",,NC
-1,Min width of vhvi:dg,,0.020
-2,Vhvi:dg cannot overlap areaid:ce,,
-3,VHVGate must overlap hvi:dg,,
-4,Poly connected to the same net as a VHVSourceDrain must be tagged with vhvi:dg layer,,
-5,Vhvi:dg cannot straddle VHVSourceDrain,,
-6,Vhvi:dg overlapping VHVSourceDrain must not overlap poly,,
-7,Vhvi:dg cannot straddle VHVPoly,,
-8,"Min space between nwell tagged with vhvi:dg and deep nwell, nwell, or n+diff on a separate net (except for n+diff overlapping nwell tagged with vhvi:dg).",,11.240
+.vhv.1,Terminals operating at nominal 12V (maximum 16V) bias must be tagged as Very-High-Voltage (VHV) using vhvi:dg layer,,NC,
+.vhv.2,A source or drain of a drain-extended device can be tagged by vhvi:dg. A device with either source or drain (not both) tagged with vhvi:dg serves as a VHV propagation stopper,,NC,
+.vhv.3,Any feature connected to VHVSourceDrain becomes a very-high-voltage feature,,NC,
+.vhv.4,Any feature connected to VHVPoly becomes a very-high-voltage feature,,NC,
+.vhv.5,"Diffusion that is not a part of a drain-extended device (i.e., diff not areaid:en) must not be on the same net as VHVSourceDrain. Only diffusion inside :drc_tag:`areaid.ed` and LV diffusion tagged with vhvi:dg are exempted.",,,
+.vhv.6,"Poly resistor can act as a VHV propagation stopper. For this, it should be tagged with text ""vhv_block""",,NC,
+1,Min width of vhvi:dg,,0.020,µm
+2,Vhvi:dg cannot overlap areaid:ce,,,
+3,VHVGate must overlap hvi:dg,,,
+4,Poly connected to the same net as a VHVSourceDrain must be tagged with vhvi:dg layer,,,
+5,Vhvi:dg cannot straddle VHVSourceDrain,,,
+6,Vhvi:dg overlapping VHVSourceDrain must not overlap poly,,,
+7,Vhvi:dg cannot straddle VHVPoly,,,
+8,"Min space between nwell tagged with vhvi:dg and deep nwell, nwell, or n+diff on a separate net (except for n+diff overlapping nwell tagged with vhvi:dg).",,11.240,µm
 ,,,
 (uhvi.-.-),UHVI - Ultra HV ID and Rules,,sky130
 ,Function: Identify nets working between 20V,,
 ,,,
-1,diff/tap can not straddle UHVI,,N/A
-2,poly can not straddle UHVI,,N/A
-3,pwbm.dg must be enclosed by UHVI (exempt inside :drc_tag:`areaid.lw`),,N/A
-4,dnw.dg can not straddle UHVI,,N/A
-5,UHVI must enclose :drc_tag:`areaid.ext`,,N/A
-6,UHVI must enclose dnwell,,N/A
-7,natfet.dg must be enclosed by UHVI layer by at least,,N/A
-8,Minimum width of natfet.dg,,N/A
-9,Minimum Space spacing of natfet.dg ,,N/A
-10,natfet.dg layer is not allowed,,N/A
+1,diff/tap can not straddle UHVI,,N/A,N/A
+2,poly can not straddle UHVI,,N/A,N/A
+3,pwbm.dg must be enclosed by UHVI (exempt inside :drc_tag:`areaid.lw`),,N/A,N/A
+4,dnw.dg can not straddle UHVI,,N/A,N/A
+5,UHVI must enclose :drc_tag:`areaid.ext`,,N/A,N/A
+6,UHVI must enclose dnwell,,N/A,N/A
+7,natfet.dg must be enclosed by UHVI layer by at least,,N/A,N/A
+8,Minimum width of natfet.dg,,N/A,N/A
+9,Minimum Space spacing of natfet.dg,,N/A,N/A
+10,natfet.dg layer is not allowed,,N/A,N/A
 , ,,
 (ulvt-.-),:drc_tag:`areaid.low_vt` for UHV Diodes ,,sky130
 ,Function: Identify dnwdiodehv_Psub(BV~60V),,
 ,,,NA
-1,":drc_tag:`areaid.low_vt` must enclose dnw for the UHV dnw-psub diode texted ""condiodeHvPsub""",,NA
-2,":drc_tag:`areaid.low_vt` must enclose pwbm.dg for the UHV dnw-psub diode texted ""condiodeHvPsub""",,NA
-3,:drc_tag:`areaid.low_vt` can not straddle UHVI,,NA
+1,":drc_tag:`areaid.low_vt` must enclose dnw for the UHV dnw-psub diode texted ""condiodeHvPsub""",,NA,
+2,":drc_tag:`areaid.low_vt` must enclose pwbm.dg for the UHV dnw-psub diode texted ""condiodeHvPsub""",,NA,
+3,:drc_tag:`areaid.low_vt` can not straddle UHVI,,NA,
 ,,,
 (pwres.-.-),Pwell resistor,,sky130
 ,Function: Identify pwell resistors,,
 ,,,
-1,Pwell resistor has to be enclosed by the res layer,NC,
-2,Min/Max width of pwell resistor ,,2.650
-3,Min length of pwell resistor,,26.500
-4,Max length of pwell resistor,,265.00
-5,Min/Max spacing of tap inside the pwell resistor to nwell ,,0.220
-6,Min/Max width of tap inside the pwell resistor ,,0.530
-7a,Every pwres_terminal must enclose 12 licon1,,
-7b,Every pwres_terminal must enclose 12 mcons if routed through metal1,,
-8,Diff or poly is not allowed in the pwell resistor.,,
-9,Nwell surrounding the pwell resistor must have a full ring of contacted tap strapped with metal.,,
-10,The res layer must abut pwres_terminal on opposite and parallel edges,,
-11,The res layer must abut nwell on opposite and parallel edges not checked in Rule pwres.10,,
+1,Pwell resistor has to be enclosed by the res layer,NC,,
+2,Min/Max width of pwell resistor,,2.650,µm
+3,Min length of pwell resistor,,26.500,µm
+4,Max length of pwell resistor,,265.00,µm
+5,Min/Max spacing of tap inside the pwell resistor to nwell,,0.220,µm
+6,Min/Max width of tap inside the pwell resistor,,0.530,µm
+7a,Every pwres_terminal must enclose 12 licon1,,,
+7b,Every pwres_terminal must enclose 12 mcons if routed through metal1,,,
+8,Diff or poly is not allowed in the pwell resistor.,,,
+9,Nwell surrounding the pwell resistor must have a full ring of contacted tap strapped with metal.,,,
+10,The res layer must abut pwres_terminal on opposite and parallel edges,,,
+11,The res layer must abut nwell on opposite and parallel edges not checked in Rule pwres.10,,,
 ,,,
 ,,,
 ,,,
@@ -1657,9 +1657,9 @@
 (rfdiode.-.-),Areaid.re for RF Diodes ,,sky130
 ,Function: Identify RF diodes; Used for RCX,,
 ,,,
-1,Only 90 degrees allowed for :drc_tag:`areaid.re`,,
-2,:drc_tag:`areaid.re` must be coincident with nwell for the rf nwell diode,,
-3,:drc_tag:`areaid.re` must be coincident with innwer edge of the nwell ring for the rf pwell-deep nwell diode,,
+1,Only 90 degrees allowed for :drc_tag:`areaid.re`,,,
+2,:drc_tag:`areaid.re` must be coincident with nwell for the rf nwell diode,,,
+3,:drc_tag:`areaid.re` must be coincident with innwer edge of the nwell ring for the rf pwell-deep nwell diode,,,
 ,,,
 ,,,
 ,Allowed PNP layout,,
diff --git a/docs/rules/summary.rst b/docs/rules/summary.rst
index 3920c3d..7ad4313 100644
--- a/docs/rules/summary.rst
+++ b/docs/rules/summary.rst
@@ -1,5 +1,5 @@
-Summry of Key Periphery Rules
-=============================
+Summary of Key Periphery Rules
+==============================
 
 .. csv-table:: Table F3a: Front end layers (Low Voltage Devices)
    :file: summary/table-f3a-font-end-low-voltage.csv
@@ -23,11 +23,13 @@
    :header-rows: 1
    :stub-columns: 1
 
-.. csv-table:: Table F4: Connectivity of Drawn and Mask Layers (1)
+.. csv-table:: Table F4: Connectivity of Drawn and Mask Layers [#f1]_
    :file: summary/table-f4-connectivity-of-drawn-and-mask.csv
    :header-rows: 1
    :stub-columns: 1
 
+.. include:: summary/table-f4-key.rst
+
 .. csv-table:: Table F5: Device Connectivity Table
    :file: summary/table-f5-device-connectivity.csv
    :header-rows: 1
diff --git a/docs/rules/summary/table-f4-connectivity-of-drawn-and-mask.csv b/docs/rules/summary/table-f4-connectivity-of-drawn-and-mask.csv
index fd00538..3173077 100644
--- a/docs/rules/summary/table-f4-connectivity-of-drawn-and-mask.csv
+++ b/docs/rules/summary/table-f4-connectivity-of-drawn-and-mask.csv
@@ -1,5 +1,3 @@
-Table F4: Connectivity of Drawn and Mask Layers (1),,,,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,,,
 ,Deep N Well,N Well,Diff,Tap,Poly,Li1,Capm,Met1,Met2,Met3,Met4,Met5,rdl,,,,
 Deep N Well,N/A,,,,,,,,,,,,,,,,
 N Well,Over,N/A,,,,,,,,,,,,,,,
@@ -13,11 +11,5 @@
 Met3,X,X,X,X,X,X,Via2,X,Via2,N/A,,,,,,,
 Met4,X,X,X,X,X,X,X,X,X,Via3,N/A,,,,,,
 Met5,X,X,X,X,X,X,X,X,X,X,Via4,N/A,,,,,
-rdl,X,X,X,X,X,X,X,X,X,X,X,(pad AND pmm) for s8pir/s8pr2-10r flows (1),N/A,,,,
+rdl,X,X,X,X,X,X,X,X,X,X,X,(pad AND pmm) for s8pir/s8pr2-10r flows [#f1]_ ,N/A,,,,
 bump,X,X,X,X,X,X,X,X,X,X,X,X,pi2 AND ubm,,,,
-,,,,,,,,,,,,,,,,,
-(1) All layerr drawn except pmm which is created as cpmm:mask over bond pads or converted into cpbo:mask,,,,,,,,,,,,,,,,,
-(2) Entries in this table show the layer (or combination of layers) that act as connecting layers listed in the row/column  ,,,,,,,,,,,,,,,,,
-headings.  An X indicates that there is no direct connection between these layers.  N/A is entered along the diagonal;,,,,,,,,,,,,,,,,,
-Over- Layers contacted by overlapping. A layer is always connected to itself.,,,,,,,,,,,,,,,,,
-"(3) (Met5 AND pad AND rdl) should have one of the following sizes for LVS to work with WLCSP option: 60x60, 50x70, 60x80, and 80x80",,,,,,,,,,,,,,,,,
diff --git a/docs/rules/summary/table-f4-key.rst b/docs/rules/summary/table-f4-key.rst
new file mode 100644
index 0000000..7e6046a
--- /dev/null
+++ b/docs/rules/summary/table-f4-key.rst
@@ -0,0 +1,5 @@
+.. rubric:: Footnotes
+
+.. [#f1] All layers drawn except pmm which is created as cpmm:mask over bond pads or converted into cpbo:mask.
+.. [#f2] Entries in this table show the layer (or combination of layers) that act as connecting layers listed in the row/column headings. An X indicates that there is no direct connection between these layers. N/A is entered along the diagonal. Over is entered along layers contacted by overlapping. A layer is always connected to itself.
+.. [#f3] (Met5 AND pad AND rdl) should have one of the following sizes for LVS to work with WLCSP option: 60x60, 50x70, 60x80, and 80x80
diff --git a/environment.yml b/environment.yml
index e46f745..ee13527 100644
--- a/environment.yml
+++ b/environment.yml
@@ -16,14 +16,10 @@
 name: skywater-pdk-scripts
 channels:
 - symbiflow
-- conda-forge
 - defaults
 dependencies:
 - python=3.8
 - pip
-- yosys
-- netlistsvg
 # Packages installed from PyPI
 - pip:
   - -r file:requirements.txt
-  - -r file:docs/requirements.txt
diff --git a/libraries/sky130_fd_io/latest b/libraries/sky130_fd_io/latest
new file mode 160000
index 0000000..01b1869
--- /dev/null
+++ b/libraries/sky130_fd_io/latest
@@ -0,0 +1 @@
+Subproject commit 01b18699b4102d8e54ad1406b3991ecb652e5aee
diff --git a/libraries/sky130_fd_io/latest/README.rst b/libraries/sky130_fd_io/latest/README.rst
deleted file mode 100644
index 825d502..0000000
--- a/libraries/sky130_fd_io/latest/README.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-:lib:`sky130_fd_io` - SKY130 IO and periphery cells (SkyWater Provided)
-=======================================================================
-
-Initial documentation only release.
-
-.. toctree::
-    :maxdepth: 1
-    :name: sky130-lib-foundry-io-top
-
-    docs/user_guide
diff --git a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__gpio.png b/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__gpio.png
deleted file mode 100644
index d25abdc..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__gpio.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__sio.png b/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__sio.png
deleted file mode 100644
index 36eea45..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__sio.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__sio_macro.png b/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__sio_macro.png
deleted file mode 100644
index 5462494..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__sio_macro.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_amuxsplitv2.png b/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_amuxsplitv2.png
deleted file mode 100644
index 2671dbb..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_amuxsplitv2.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_axresv2.png b/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_axresv2.png
deleted file mode 100644
index 792257f..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_axresv2.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_gpio_ovtv2.png b/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_gpio_ovtv2.png
deleted file mode 100644
index fcedf44..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_gpio_ovtv2.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_gpiov2.png b/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_gpiov2.png
deleted file mode 100644
index 7659479..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_gpiov2.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_gpiovrefv2.png b/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_gpiovrefv2.png
deleted file mode 100644
index d91ae8a..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_gpiovrefv2.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_pwrdet.png b/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_pwrdet.png
deleted file mode 100644
index cfc254c..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_pwrdet.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_refgen.png b/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_refgen.png
deleted file mode 100644
index 1100cd2..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_refgen.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_vrefcapv2.png b/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_vrefcapv2.png
deleted file mode 100644
index 9d21248..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__top_vrefcapv2.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__xres2v2.png b/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__xres2v2.png
deleted file mode 100644
index ed0619b..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__xres2v2.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__xres3v2.png b/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__xres3v2.png
deleted file mode 100644
index 2e2e075..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/sky130_fd_io__xres3v2.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/skywater-logo.jpeg b/libraries/sky130_fd_io/latest/docs/figures/skywater-logo.jpeg
deleted file mode 100644
index 9914284..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/skywater-logo.jpeg
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_and_sio_hold_state_mode_timing_diagram.png b/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_and_sio_hold_state_mode_timing_diagram.png
deleted file mode 100644
index c031df2..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_and_sio_hold_state_mode_timing_diagram.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_and_sio_non-regulated_outbuf_tohz_external_measurement_method.png b/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_and_sio_non-regulated_outbuf_tohz_external_measurement_method.png
deleted file mode 100644
index e4897c1..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_and_sio_non-regulated_outbuf_tohz_external_measurement_method.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_and_sio_non-regulated_outbuf_tolz_internal_measurement_method_for_tohz.png b/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_and_sio_non-regulated_outbuf_tolz_internal_measurement_method_for_tohz.png
deleted file mode 100644
index 2ee674e..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_and_sio_non-regulated_outbuf_tolz_internal_measurement_method_for_tohz.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_sio_tdis_ten.png b/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_sio_tdis_ten.png
deleted file mode 100644
index 0f6e001..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_sio_tdis_ten.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_tpd_trfout.png b/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_tpd_trfout.png
deleted file mode 100644
index 46245fe..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_tpd_trfout.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_tpd_trfout_tslew.png b/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_tpd_trfout_tslew.png
deleted file mode 100644
index ee27225..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_gpio_tpd_trfout_tslew.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_sio_regulated_outbuf_tohz_external_measurement_method.png b/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_sio_regulated_outbuf_tohz_external_measurement_method.png
deleted file mode 100644
index 30fdbbd..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_sio_regulated_outbuf_tohz_external_measurement_method.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_sio_regulated_outbuf_tolz_external_measurement_method_for_tohz.png b/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_sio_regulated_outbuf_tolz_external_measurement_method_for_tohz.png
deleted file mode 100644
index 663046a..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_sio_regulated_outbuf_tolz_external_measurement_method_for_tohz.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_sio_regulated_outbuf_ttrfout_tslew.png b/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_sio_regulated_outbuf_ttrfout_tslew.png
deleted file mode 100644
index b1c0dc8..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_sio_regulated_outbuf_ttrfout_tslew.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_sio_tpd_trfout.png b/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_sio_tpd_trfout.png
deleted file mode 100644
index 0d667d1..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/timing_diagram_sio_tpd_trfout.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/use_case_for_power_detector_sky130_fd_io__pwrdet.png b/libraries/sky130_fd_io/latest/docs/figures/use_case_for_power_detector_sky130_fd_io__pwrdet.png
deleted file mode 100644
index 2ed4177..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/use_case_for_power_detector_sky130_fd_io__pwrdet.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/figures/use_case_for_the_xres_cells.png b/libraries/sky130_fd_io/latest/docs/figures/use_case_for_the_xres_cells.png
deleted file mode 100644
index f86e7d3..0000000
--- a/libraries/sky130_fd_io/latest/docs/figures/use_case_for_the_xres_cells.png
+++ /dev/null
Binary files differ
diff --git a/libraries/sky130_fd_io/latest/docs/user_guide.rst b/libraries/sky130_fd_io/latest/docs/user_guide.rst
deleted file mode 100644
index 16b3234..0000000
--- a/libraries/sky130_fd_io/latest/docs/user_guide.rst
+++ /dev/null
@@ -1,2050 +0,0 @@
-User Guide for :lib:`sky130_fd_io`
-==================================
-
-Summary
--------
-
-This IP document includes two versions of a General Purpose I/O buffer (:cell:`sky130_fd_io__gpio`) with different feature sets,
-:cell:`sky130_fd_io__sio` macro (pair of Special I/O buffer (:cell:`sky130_fd_io__sio`) + REFerence GENerator (:cell:`sky130_fd_io__refgen`).
-
-The IP also includes;
-
-*  Power, Ground cells (PG pads),
-*  Reset cells (XRES),
-*  Test pads,
-*  Analog pads,
-*  power detector,
-*  overlay cells.
-
-The IP also includes all the relevant ESD clamps, diodes and trigger circuits to complete the I/O ring.
-
-The I/O buffers can be configured as an input buffer, output buffer, or an I/O buffer.
-
-The :cell:`sky130_fd_io__gpio` buffer includes a single-ended input buffer that can be configured for LVTTL, CMOS/I2C operation.
-
-:cell:`sky130_fd_io__gpiov2` has better electrical performance and the Rx can handle 1.8V signaling when the I/O supply is different from 1.8V.
-
-:cell:`sky130_fd_io__gpio_ovtv2` is fully I2C compliant and includes the over-voltage tolerance feature.
-It also has an input buffer that can support selectable trip-point feature along with a reference generator.
-
-The :cell:`sky130_fd_io__sio` buffer can be configured to produce a regulated high output level, and includes a differential input buffer.
-All I/O buffers support multiple drive modes.
-
-The IP supports a power supply range of 1.71V to 5.5V.
-
-Features. Benefits, Tradeoffs, Limitations
-------------------------------------------
-
-*  1.71V-5.5V continuous supply operating range
-*  Rail-based ESD protection for :cell:`sky130_fd_io__gpio*` and :cell:`sky130_fd_io__sio_macro`
-*  I2C compliant :cell:`sky130_fd_io__gpio_ovtv2`
-*  I2C compatible - :cell:`sky130_fd_io__gpiov2`, :cell:`sky130_fd_io__gpio`, :cell:`sky130_fd_io__sio`
-*  CMOS, LPC compliant - :cell:`sky130_fd_io__gpio*`, :cell:`sky130_fd_io__sio`
-*  Low Power modes: Hibernate mode (Latch previous state), Deep Sleep Mode (allows I2C communication), Stop Mode (retains I/O state when LV supply is gone)
-*  Selectable output buffer drive modes (open drain high/low, strong/weak pull up/down, High-Z output) - :cell:`sky130_fd_io__gpio*`, :cell:`sky130_fd_io__sio`
-*  Regulated output high level - :cell:`sky130_fd_io__sio`
-*  Hot swap & over-voltage tolerant - :cell:`sky130_fd_io__sio`, :cell:`sky130_fd_io__gpio_ovtv2`
-*  Selectable output buffer slew rate control - :cell:`sky130_fd_io__sio`, :cell:`sky130_fd_io__gpio*`
-*  Selectable input buffer threshold (LVTTL or CMOS/I2C)- :cell:`sky130_fd_io__gpio*`, :cell:`sky130_fd_io__sio`
-*  Selectable 1.8V signaling (Active Mode) - :cell:`sky130_fd_io__gpiov2`, :cell:`sky130_fd_io__gpio_ovtv2`
-*  Selectable differential input buffer threshold (4 options) - :cell:`sky130_fd_io__sio`
-*  Integrated analog multiplexers (2) - :cell:`sky130_fd_io__gpio*`
-*  IP has multiple Power/Ground pads with HV and LV clamps, diodes, Test pads to enable I/O ring assembly
-*  VDDIO and VDDD power detector
-*  Multiple flavors of XRES cells
-*  For complete set of feature comparison, see :numref:`io features comparison`
-*  AIP/LEDA rules set compliant : 5.0
-
-
-Design Metrics
---------------
-
-
-.. table:: Design Metrics-1
-   :name: design-metrics-1
-
-   +--------------------------------+--------------+------------+
-   | Description                    | Active Mode  | Deep Sleep |
-   +================================+==============+============+
-   | Output: Fmax Freq              | 33MHz        | 33Mhz      |
-   +--------------------------------+--------------+------------+
-   | Output: Fmax Freq              | 33MHz        | 33Mhz      |
-   +--------------------------------+--------------+------------+
-   | SE Input: Fmax Freq            | 66MHz        | 66MHz      |
-   +--------------------------------+--------------+------------+
-   | Number of power domains        | 5                         |
-   +--------------------------------+---------------------------+
-   | Number of power modes          | *  Active                 |
-   |                                | *  Hibernate              |
-   |                                | *  Deep Sleep             |
-   |                                | *  Stop                   |
-   +--------------------------------+---------------------------+
-   | Single-ended Input buffer      | I2C complaint             |
-   | hysteresis (ALL I/O)           |                           |
-   +--------------------------------+---------------------------+
-   | Rise/Fall trip point for       | 0.7V-1.5V                 |
-   | VDDD detector                  |                           |
-   +--------------------------------+---------------------------+
-   | Rise/Fall trip point for       | 0.7V-1.5V                 |
-   | VDDIO detector                 |                           |
-   +--------------------------------+---------------------------+
-   | Simulation Temperature Range   | -40C to 100C              |
-   +--------------------------------+---------------------------+
-   | * Simulation Voltage range I/O | 1.65V-5.5V                |
-   | * Analog Supply                |                           |
-   +--------------------------------+---------------------------+
-   | * Simulation Voltage range I/O | 1.60V-1.95V               |
-   | * LV Digital Supply            |                           |
-   +--------------------------------+---------------------------+
-
-.. table:: Design Metrics-2
-   :name: design-metrics-2
-
-   +---------------------------+------------+-----------+------------+
-   | :cell:`sky130_fd_io__sio` | 2.0V       | 3.3V      | 5.0V       |
-   | Differential Input buffer |            |           |            |
-   +===========================+============+===========+============+
-   | Quiescent current         | 0.23mA     | 0.25mA    | 0.27mA     |
-   +---------------------------+------------+-----------+------------+
-   | ICC @ Fmax                | 0.35mA     | 0.40mA    | 0.50mA     |
-   +---------------------------+------------+-----------+------------+
-   | Voltage trip point (SIO)  | Vinref±200mV                        |
-   +---------------------------+-------------------------------------+
-
-.. table:: Design Metrics-3
-   :name: design-metrics-3
-
-   +-----------------------------------+-------------+-----------+
-   |                                   | ``tt_leak`` | ``leak``  |
-   |                                   | 3.0V, 25C   | 3.0V, 85C |
-   +===================================+=============+===========+
-   | * :cell:`sky130_fd_io__gpio*` ISB | 0.17nA      | 89.63nA   |
-   | * ``enable_h`` = 0                |             |           |
-   +-----------------------------------+-------------+-----------+
-   | * :cell:`sky130_fd_io__sio` ISB   | 0.22nA      | 40.29nA   |
-   | * ``enable_h`` = 0                |             |           |
-   +-----------------------------------+-------------+-----------+
-
-.. table:: Design Metrics-4
-   :name: design-metrics-4
-
-   +----------------------------------------------------+----------------------+
-   | :cell:`sky130_fd_io__gpio*` AMUX switch resistance | *  275 : CSD Range   |
-   |                                                    | *  1000 : Full Range |
-   +----------------------------------------------------+----------------------+
-
-Configuration Options
----------------------
-
-* ALL I/O: Input and Output buffers can be enabled independently
-* ALL I/O: Input buffer trip point select between CMOS/I2C & LVTTL
-* ALL I/O: Configurable for 8 different Output drive modes
-* ALL I/O: Output can be configured for different slew rates
-* ALL I/O: I/O buffer can be configured into low power or low leakage mode using hold state control signals
-* ALL I/O: O/P Buffer can be configured to drive the PAD during deep sleep mode
-* :cell:`sky130_fd_io__sio` output buffer can be cured to be CMOS or Regulated output high level buffer (only in Strong Pull up mode)
-* :cell:`sky130_fd_io__gpiov2`, :cell:`sky130_fd_io__gpio_ovtv2` to handle 1.8V signaling on pad
-* :cell:`sky130_fd_io__gpio_ovtv2` input buffer supports selectable trip point feature
-
-Typical Application
--------------------
-
-The SKY130 IO cells are typically used to build the I/O ring around the chip core.
-In addition to I/O's, Power/Ground cells, ESD clamps, Bond pad etc.
-are also available in this IP.
-I/O's are used to communicate with the external world and acts as the interface/buffer between the chip core and the external system.
-
-Power Performance
------------------
-
-The I/O's support multiple power modes (Hibernate, Deep Sleep, Stop) which are low-power modes, while still retaining the state of the I/O.
-
-FMEA
-----
-
-Rail-Based ESD
-~~~~~~~~~~~~~~
-
-The ESD strategy for M0S8 platform is non-distributed (grouped) rail-based ESD.
-This will be implemented across all pins and the ESD scheme can be fully simulated and easily portable across technologies.
-
-Architecture and Implementation details
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The different components needed to build the I/O ring are - :cell:`sky130_fd_io__gpio` :cell:`sky130_fd_io__sio`, ESD RC Clamps (which sit inside the Power/Ground PADS).
-Each external power domain will be protected with its own ESD RC clamp.
-There will be ESD diodes from each of the derived supplies to the source supply.
-For this purpose, two types of ESD RC clamps will be developed - HV Clamp and LV clamp.
-
-Alternate XRES implementation
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The glitch filter and 5k pull-up resistor in the current :cell:`sky130_fd_io__top_xres_2` are provided as separate cells.
-A PMOS switch is used to disable the pull-up resistor.
-
-.. figure:: figures/sky130_fd_io__top_axresv2.png
-   :name: alternate xres implementation
-   :width: 3.58056in
-   :height: 1.25347in
-
-   Alternate XRES Implementation
-
-
-Critical Requirements Summary
-=============================
-
-Overview of Block Applications
-------------------------------
-
-The Data I/O circuitry is used to communicate with other components in a PC board environment.
-The circuit also has the capability of shifting between core level voltages and I/O level voltages.
-
-The buffers support a power supply range of 1.71V to 5.5V.
-
-Block Architecture Overview
----------------------------
-
-The following sections describe each of the blocks in detail:
-
-.. contents:: :local:
-   :depth: 1
-
-Block Description
-~~~~~~~~~~~~~~~~~
-
-The SKY130 IO cells is a toolkit IP.
-It contains all the cells and primitives required to construct an I/O ring in the SKY130 technology.
-
-Additional details of the cells included can be found in the sections below.
-
-This :lib:`sky130_fd_io` library contained in this document covers different kinds of I/O cells, a general purpose I/O (:cell:`sky130_fd_io__gpio`)
-and a special I/O (:cell:`sky130_fd_io__sio`), a reference generator (:cell:`sky130_fd_io__refgen`) for providing voltage references to the :cell:`sky130_fd_io__sio` and Power and Ground (PG)
-cells that make up the I/O ring.
-
-A single table comparison of all features across different IO's is provided in :numref:`io features comparison`.
-
-.. io-common-features_
-
-I/O\ [1]_ Common Features
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` buffers contain the following common features:
-
-.. contents:: :local:
-   :depth: 1
-
-.. [1] I/O (:cell:`sky130_fd_io__gpio`, :cell:`sky130_fd_io__gpiosf`, :cell:`sky130_fd_io__gpiov2`, :cell:`sky130_fd_io__gpio_ovtv2`, SIO).
-
-
-The features that are supported by different I/O's are documented in :numref:`io features comparison` below:
-
-.. table:: Comparison of features across different I/O's provided in this IP
-   :name: io features comparison
-
-   +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+
-   | Feature           | :cell:`sky130_fd_io__gpio*` | :cell:`sky130_fd_io__sio_macro` | :cell:`sky130_fd_io__gpiov2` | :cell:`sky130_fd_io__gpio_ovtv2` |
-   +===================+=============================+=================================+==============================+==================================+
-   | Drive Capability  | 4mA                         | 4mA                             | 4mA                          | 4mA                              |
-   | (Source) [2]_     |                             |                                 |                              |                                  |
-   +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+
-   | Drive Capability  | 4mA [3]_                    | 20mA [5]_                       | 4mA [3]_                     | 10mA [3]_                        |
-   | (Sink)            |                             |                                 |                              |                                  |
-   +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+
-   | Drive Modes       | 8-Modes                     | 8-Modes                         | 8-Modes                      | 8-Modes                          |
-   +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+
-   | Slew Rate Control | Slow/Fast                   | Slow/Fast                       | Slow/Fast                    | Slow/Fast/I2C                    |
-   +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+
-   | Input Buffer      | CMOS/TTL                    | CMOS/TTL                        | CMOS/TTL/1.8V                | CMOS/TTL/1.8V/Selectable         |
-   | trip point        |                             |                                 |                              |                                  |
-   +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+
-   | Over-Voltage      | No                          | Yes                             | No                           | Yes                              |
-   | Tolerance         |                             |                                 |                              |                                  |
-   +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+
-   | Analog Mux        | 2                           | 0 [4]_                          | 2                            | 2                                |
-   +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+
-   | Regulated Output  | No                          | Yes                             | No                           | No                               |
-   +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+
-   | Input buffer type | SE                          | SE+Diff                         | SE                           | SE                               |
-   +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+
-   | I2C Compliance    | Limited [5]_                | Limited [5]_                    | Standard,Fast                | * Standard                       |
-   |                   |                             |                                 |                              | * Fast                           |
-   |                   |                             |                                 |                              | * Fast-Plus [6]_                 |
-   |                   |                             |                                 |                              | * High-Speed                     |
-   +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+
-   | Low-voltage       | No                          | No                              | Yes                          | Yes                              |
-   | DFT support       |                             |                                 |                              |                                  |
-   +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+
-   | Hysteresis [7]_   | 5%                          | 5%                              | 10% [8]_                     | 10% [8]_                         |
-   +-------------------+-----------------------------+---------------------------------+------------------------------+----------------------------------+
-
-.. [2] For 3V range. :cell:`sky130_fd_io__sio` configured in unregulated mode.
-.. [3] VDDIO≥1.71V.
-.. [4] SIO interacts with the analog mux for ADFT of :cell:`sky130_fd_io__refgen`.
-.. [5] Limited - Compliant for limited ranges of Vext, Rext and Cbus.
-.. [6] 20mA support for VDDIO>2.9V.
-.. [7] Input Buffer operating at 48 MHz w hen VCCHIB=1.4V, VDDIO=1.65V
-.. [8] For CMOS mode only.
-
-Eight drive strength modes
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The IP includes three static drive mode bits (dm<2:0>).
-These bits are used to configure the output buffer drive strength.
-A default setting for enabling or disabling the input and output buffer is also defined.
-The eight drive strength modes are defined in the following table.
-
-.. table:: Truth table for I/O Drive Strength Modes
-   :name: io drive strength modes
-
-   +-------------+----------+---------+-----------------+----------+----------+---------------------------------+
-   | ``inp_dis`` | ``oe_n`` | dm<2:0> | Pad State       | Input    | Output   | Mode Description                |
-   |             |          |         +--------+--------+ Buffer   | Buffer   |                                 |
-   |             |          |         | out=1  | out=0  |          |          |                                 |
-   +=============+==========+=========+========+========+==========+==========+=================================+
-   | X           | X        | 000     | Hi- Z  | Hi- Z  | Disabled | Disabled | * Input/Output buffers disabled |
-   |             |          |         |        |        | (in=0)   |          | * Analog Input Mode             |
-   +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+
-   | 0           | X        | 001     | Hi- Z  | Hi- Z  | Enabled  | Disabled | Configured as Input only        |
-   +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+
-   | 0           | 0        | 010     | Res 1  | Strong | Enabled  | Enabled  | * Weak pull-up,                 |
-   |             |          |         | (5k)   | 0      | (in=0)   |          | * strong pull-down              |
-   +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+
-   | 0           | 0        | 011     | Strong | Res 0  | Enabled  | Enabled  | * Strong pull-up                |
-   |             |          |         | 1      | (5k)   | (in=0)   |          | * Weak pull-down                |
-   +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+
-   | 0           | 0        | 100     | Hi- Z  | Strong | Enabled  | Enabled  | * Open Drain                    |
-   |             |          |         |        | 0      | (in=0)   |          | * Strong pull-down              |
-   +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+
-   | 0           | 0        | 101     | Strong | Hi- Z  | Enabled  | Enabled  | * Open Drain                    |
-   |             |          |         | 1      |        | (in=0)   |          | * Strong pull-up                |
-   +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+
-   | 0           | 0        | 110     | Strong | Strong | Enabled  | Enabled  | * Strong pull-up                |
-   |             |          |         | 1      | 0      | (in=0)   |          | * Strong pull-down              |
-   +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+
-   | 0           | 0        | 111     | Res 1  | Res 0  | Enabled  | Enabled  | * Weak pull-up                  |
-   |             |          |         | (5k)   | (5k)   | (in=0)   |          | * Weak pull-down                |
-   +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+
-   | 1           | X        | XXX     |        |        | Disabled |          | Input buffer disabled           |
-   +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+
-   | X           | 1        | XXX     | Hi-Z   | Hi-Z   |          | Disabled | Output buffer tri-stated        |
-   +-------------+----------+---------+--------+--------+----------+----------+---------------------------------+
-
-*X = don't care 0/1*
-
-Independent control of input and output buffer enables
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The I/O cells also include separate input disable ``inp_dis`` and output enable ``oe_n`` control signals as shown in :numref:`io drive strength modes`.
-When ``inp_dis`` = 0 the input buffer is enabled and when ``oe_n`` = 0 the output buffer is enabled.
-When these signals are high (logic 1) the corresponding buffers are disabled independent of the state of the drive mode bits dm<2:0>.
-For example, if drive mode 2 (dm<2:0>=010) is selected, the input buffer is enabled by default.
-If ``inp_dis=1`` for this drive mode, the input buffer enable default state will be overridden and the input buffer will be disabled and the input buffer
-output will be driven low.
-
-Input buffer threshold select
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The ``vtrip_sel`` signal alters the input buffer Vil and Vih specifications.
-The Vil and Vih specifications are listed in the following table.
-
-.. table:: I/O Vil & Vih Specifications
-   :name: io vil vih
-
-   +----------+-------------+-------+----------------+-----------------+-----------------+
-   | Prameter | Description | Units | Condition      | ``vtrip_sel=0`` | ``vtrip_sel=1`` |
-   +==========+=============+=======+================+=================+=================+
-   | VIL      | Input Low   | V     | * vddio < 2.7V | 0.3 \* vddio    | * 0.3 \* vddio  |
-   |          | Voltage     |       | * vddio > 2.7V |                 | * 0.8           |
-   +----------+-------------+-------+----------------+-----------------+-----------------+
-   | VIH      | Input High  | V     | * vddio < 2.7V | 0.7 \* vddio    | * 0.7 \* vddio  |
-   |          | Voltage     |       | * vddio > 2.7V |                 | * 2.0           |
-   +----------+-------------+-------+----------------+-----------------+-----------------+
-
-When ``vtrip_sel`` = 0, the input buffer functions as a CMOS input buffer.
-When ``vtrip_sel`` = 1, the input buffer functions as an LVTTL input buffer.
-
-I/O supply and Internal supply level input buffer outputs
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The input buffer produces two outputs, a low voltage output and a high voltage output.
-The low voltage output is produced by level shifting the external ``vddio`` referenced level input to the internal ``vcchib`` level output.
-The high voltage output is produced by not level shifting the external ``vddio`` referenced level input to a buffered internal ``vddio_q`` level output.
-
-Selectable output edge rate control
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The CMOS output buffer includes a slew rate control input signal ``slow``.
-When this signal is activated (slow = 1) the output edge rate will be slower than the default setting (slow = 0).
-
-Hold state mode (latch previous state)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The I/O cell includes a hold state control signal ``hld_h_n``.
-The purpose of this signal is to place the I/O cell into a low leakage mode while holding the previous state of the input controls, output controls
-and data.
-``hld_h_n`` latches all control signals except ``enable_h``.
-Specific timing constraints between the ``hld_h_n`` input and the other control signals must be satisfied to when entering and exiting the hold state
-mode.
-The Input signals which are latched by ``hld_h_n`` are dm<2:0>, slow, ``vtrip_sel``, ``inp_dis``, out, ``oe_n``.
-The input signals, ``ibuf_sel``, ``vreg_en``, in :cell:`sky130_fd_io__sio` cell are also latched by ``hld_h_n``.
-
-During the hold mode, vccd can either be taken down to 0 or can float.
-During this case, the I/O input buffer would continue to actively drive out as long as there are valid power supplies (vddio, vddio_q and vcchib).
-
-During the hold mode, the O/P can be configured to drive the PAD as described in Feature 9.
-
-I/O Mode Control Override during Power-up
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The :cell:`sky130_fd_io__gpio` includes an I/O mode control override signal ``enable_h`` that is different from the ``oe_n`` signal.
-The signal ``enable_h=0`` forces the output drive mode to Hi-Z.
-The ``enable_h`` signal is intended to be at logic 0 during the chip power-up sequence.
-During the power-up sequence this signal is driven low and the output driver is forced to a known state (Hi-Z).
-This ensures that the output driver does not enter a crow-bar condition.
-
-Before the power-up sequence is completed, and the ``enable_h`` signal is asserted (logic 1), the data inputs and the control signals must be stable to
-ensure that the output driver does not inadvertently enter a crow-bar condition while exiting the power-up sequence.
-
-The ``enable_h`` signal takes priority over the ``hld_h_n`` signal.
-In other words, when the I/O mode control override signal ``enable_h`` is logic 0 and the ``hld_h_n`` control signal is active, the output driver will
-be forced to drive Hi-Z.
-The previous states on the pull-up and pull-down signals will be over written and set to the levels required to force the driver.
-If the ``hld_h_n`` signal remains active after the ``enable_h`` signal transitions from logic 0 to logic 1, the forced condition (Hi-Z) will be held.
-:numref:`mode control override and hold state` describes the ``enable_h``, ``hld_h_n`` functionality.
-
-.. table:: :cell:`sky130_fd_io__gpio` Mode Control Override & Hold State Operation
-   :name: mode control override and hold state
-
-   +--------------+-------------+--------------+--------------+--------------------------------------------------+
-   | ``enable_h`` | ``hld_h_n`` | Previous pad | Current pad  | Notes                                            |
-   |              |             | Output state | Output State |                                                  |
-   +==============+=============+==============+==============+==================================================+
-   | 1            | 0           | 0            | 0            |                                                  |
-   +--------------+-------------+--------------+--------------+--------------------------------------------------+
-   | 1            | 0           | 1            | 1            |                                                  |
-   +--------------+-------------+--------------+--------------+--------------------------------------------------+
-   | 1            | 0           | Hi-Z         | Hi-Z         |                                                  |
-   +--------------+-------------+--------------+--------------+--------------------------------------------------+
-   | 1            | 1           | Table 4.2-1  | Table 4.2-1  |                                                  |
-   +--------------+-------------+--------------+--------------+--------------------------------------------------+
-   | 0            | X           | X            | Hi-Z         | * Input buffer disabled;                         |
-   |              |             |              |              | * Output buffer Hi-Z (configured as dm<2:0>=000) |
-   +--------------+-------------+--------------+--------------+--------------------------------------------------+
-
-Note that there is no latch present on the ``pad`` itself, but the data ``in`` gets latched whenever ``hld_h_n=0``.
-Further whenever ``enable_h=0``, this data level shifter gets forced to a value which determines the ``pad`` current output state.
-
-Pad Access to the Core
-^^^^^^^^^^^^^^^^^^^^^^
-
-The I/O provides pad access to the core.
-``pad_no_esd_h`` is directly connected to the pad.
-``pad_a_esd_0_h`` and ``pad_a_esd_1_h`` is connected to the pad through a 150 ohm ESD resistor.
-
-O/P configuration to drive the PAD in hold mode
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The hold over ride signal (``hld_ovr``, active high, vcchib domain) signals the O/P buffer when to provide the flow-through functionality of the data
-input to the output buffer and output enable in deep sleep mode.
-
-The functionality is defined in :numref:`normal and hold modes`.
-
-.. table:: Functionality during normal and hold modes
-   :name: normal and hold modes
-
-   +-------------+-------------+-----------+-----------+
-   | ``hld_ovr`` | ``hld_h_n`` | in        | ``oe_n``  |
-   +=============+=============+===========+===========+
-   | 0           | 0           | Latched   | Latched   |
-   +-------------+-------------+-----------+-----------+
-   | 0           | 1           | Normal    | Normal    |
-   +-------------+-------------+-----------+-----------+
-   | 1           | 0           | Over-ride | Over-ride |
-   +-------------+-------------+-----------+-----------+
-   | 1           | 1           | Normal    | Normal    |
-   +-------------+-------------+-----------+-----------+
-
-.. note::
-   - Latched means that the input and output enable are latched. This is the same functionality as mentioned in :numref:`io vil vih`.
-   - Normal refers any mode other than Sleep modes
-
-:cell:`sky130_fd_io__gpio` Additional Features
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The block diagram for the :cell:`sky130_fd_io__gpio` is shown in :numref:`sky130_fd_io__top_gpio block diagram`.
-Note: Bus notation dm[3] denotes a 3 bit bus dm[2:0].
-These notations are interchangeably used in the document.
-
-.. figure:: figures/sky130_fd_io__gpio.png
-   :name: sky130_fd_io__top_gpio block diagram
-   :width: 5.69792in
-   :height: 7.07292in
-
-   Block diagram for :cell:`sky130_fd_io__top_gpio`
-
-All :cell:`sky130_fd_io__gpio` provides additional functionality of analog connectivity to the PAD for CSD and other applications as described
-below:
-
-:cell:`sky130_fd_io__gpio` Analog Connectivity Modes
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The M0S8 :cell:`sky130_fd_io__gpio` integrates the AMUXBUS switches to two ``AMUXBUS_A`` and ``AMUXBUS_B`` analog buses.
-These buses are used for both Capsense operation (as described in the CSD chapter), and general analog connectivity for Programmable Analog blocks and
-ADFT.
-
-The analog functionality is controlled using three control signals.
-
--  ``analog_en`` enables the analog functions of the :cell:`sky130_fd_io__gpio` cell
-
--  ``analog_sel`` selects between ``AMUXBUS_A`` and ``AMUXBUS_B``
-
--  ``analog_pol`` selects the function of the ``out`` input, which toggles between AMUXBUS and VSSIO or between VDDIO and AMUXBUS
-
-:numref:`analog functionality` describes the analog functionality as selected by the relevant control signals:
-
-.. table:: Analog functionality by the relevant control signals
-   :name: analog functionality
-
-   +-------------------------------------------------+-------------------------------+-------------------------+
-   |                                                 | Analog Function               | Digital Function        |
-   +---------------+----------------+----------------+---------------+---------------+------------+------------+
-   | ``analog_en`` | ``analog_sel`` | ``analog_pol`` | out=0         | out=1         | Input      | Output     |
-   +===============+================+================+===============+===============+============+============+
-   | 0             | X              | X              | N/C           | N/C           | Unaffected | Unaffected |
-   +---------------+----------------+----------------+---------------+---------------+------------+------------+
-   | 1             | 0              | 0              | Vssio         | ``amuxbus_a`` | Disabled   | Unaffected |
-   +---------------+----------------+----------------+---------------+---------------+------------+------------+
-   | 1             | 0              | 1              | ``amuxbus_a`` | Vddio         | Disabled   | Unaffected |
-   +---------------+----------------+----------------+---------------+---------------+------------+------------+
-   | 1             | 1              | 0              | Vssio         | ``amuxbus_b`` | Disabled   | Unaffected |
-   +---------------+----------------+----------------+---------------+---------------+------------+------------+
-   | 1             | 1              | 1              | ``amuxbus_b`` | Vddio         | Disabled   | Unaffected |
-   +---------------+----------------+----------------+---------------+---------------+------------+------------+
-
-Note that digital output driver can be used concurrent with analog function
-
-Note the following: When the I/O is in an ``analog`` mode, the digital input buffer is disabled, but the output driver is not.
-Both CSD and certain Programmable Analog applications make use of the digital output driver as a driver on analog signals/nodes.
-The output driver performs the function as selected by its dm[3] inputs (which may be either OFF or not).
-
-Note that these modes only concern analog functions ``internal`` to the :cell:`sky130_fd_io__gpio`, i.e.
-using the internal AMUXBUS switches.
-
-*Shielding for Analog Mux busses:* AMUX switches can also be used to source and sink currents from CSD IDAC block to :cell:`sky130_fd_io__gpio` pins.
-The current IDAC for CSD block can be used to supply/ source current through AMUX to any :cell:`sky130_fd_io__gpio` pin.
-The maximum current can be up to 1mA and thus the AMUX layout needs to be designed keeping EM/IR considerations in mind.
-
-*Usage of ``VSSIO_Q`` in AMUX:* The CSD pull-down transistor used in AMUX is the only one that uses the ``vssio_q`` connection to the I/O.
-In case the AMUX is used for CSD operation, ``vssio_q`` can alternatively be connected to VSSA without concerns for noise.
-Care must be taken that VSSIO and ``VSSIO_Q`` should not be shorted at VSSIO pad when used in this configuration.
-
-Changes to Analog Mux for :cell:`sky130_fd_io__gpiov2` and :cell:`sky130_fd_io__gpio_ovtv2`
-*******************************************************************************************
-
-1. The input buffer is no longer disabled inside :cell:`sky130_fd_io__gpiov2` and :cell:`sky130_fd_io__gpio_ovtv2` automatically when analog mux is
-   enabled (``analog_en=1``).
-   This was done to unblock self-testing of I/O cells.
-   The firmware needs to ensure that ``inp_dis=1`` when ``analog_en=1``.
-
-2. Power mode behavior was modified for both :cell:`sky130_fd_io__gpiov2` and :cell:`sky130_fd_io__gpio_ovtv2`.
-   An extra control signal ``enable_vswitch_h`` is added to have better control over the power mode behavior.
-   The following table gives the supplies, control signals and their role:
-
-.. list-table:: Supplies, control signals and their definition
-   :name: supplies control signals
-   :widths: 10 90
-   :header-rows: 1
-
-   * - Signal
-     - I/O-Behavior
-   * - vddio
-     - Digital supply for the I/O-cell. This supply is used to implement all digital input/output functions. It can be connected to the main system digital supply (vddd) or to an independent vddio supply.
-   * - vdda
-     - Analog supply for the I/O-cell. This supply is used to implement the analog switches associated with amuxbus and CSD behavior. This supply is either connected to the global analog supply in the system or tied off to vddio when amuxbus functionality is not used.
-   * - vccd
-     - The main regulated (1.8V) core supply. This supply is the relative supply of most of the configuration/control signals coming into the I/O-cell and is used for level translation only. No I/O circuits are powered using this supply.
-   * - vcchib
-     - The hibernate regulated supply (1.8V). This supply is the relative supply for the I/O data interface (in, out, ``oe_n``) and is also used mainly for level translation only. This supply can also be used as a reference for the :cell:`sky130_fd_io__gpio` input buffer.
-   * - ``enable_h``
-     - The master enable signal to the I/O-cell's digital section. This signal is in the vddio voltage domain. This signal is guaranteed to establish early during the vddio power ramp to enable glitch free operation during power up and down ramps. When asserted (1), this signal guarantees that vddio is valid and that either ``hld_h_n=0`` or all LV control signals are valid.
-   * - ``enable_inp_h``
-     - This signal must be tied off to 0 or 1. Its value controls the power state of the input buffer when ``enable_h=0``. This is a special feature used on 2 I/O-cells to allow for test-mode entry while XRES=0.
-   * - ``enable_vdda_h``
-     - The master enable signal to the I/O-cell's analog section. This signal is guaranteed to establish early during the power ramp to enable glitch free operation during power up and down ramps. It is used to power up/down all vdda powered circuits in the I/O-cell. When asserted (1), this signal guarantees that vdda and vddio are valid, and that either ``hld_h_n=0`` or all LV control signals are valid.
-   * - ``enable_vswitch_h``
-     - A signal that controls the use of the pumped-up vswitch supply. When asserted (1), this signal guarantees that vswitch and vdda and vddio are valid, and that either ``hld_h_n=0`` or all LV control signals are valid.
-   * - ``enable_vddio``
-     - A signal that controls the use of the vcchib supply in some of the I/O circuits. When asserted (1), this signal guarantees that vcchib and all HV supplies are valid, and that either ``hld_h_n=0`` or all LV control signals are valid.
-   * - ``hld_h_n``
-     - This signal controls the iso-latches in the I/O-cell. It transitions low to freeze the state of the I/O-cell such that the active supply can be removed and the IO continues to function as configured.
-   * - ``hld_ovr``
-     - When ``hld_h_n=1`` this signal is ignored, when ``hld_h_n=0`` all control signals including this signal are frozen. The frozen value of this signal determines if the ``out`` and ``oe_n`` are frozen or not.  0: the I/O latches all of its configuration and control inputs as well as out and ``oe_n``. 1: only the configuration and control inputs are latched.  The logic in IOSS makes sure that ``hld_ovr=1`` never occurs when the system goes into STOP mode (which removes vcchib).
-
-
-The normal operational state of the analog mux is when all supplies are present and all qualifiers asserted.
-However, there are many transient and special states that occur during power sequencing and during low power modes.
-
-Input buffer enable during reset (``enable_inp_h``)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The ``enable_inp_h`` input determines the power on/off state of the digital input buffer when the I/O is disabled; i.e.
-``enable_h`` is ``0``.
-This pin is intended to be tied off to 0 or 1 (using the ``tie_hi_esd`` and ``tie_lo_esd`` signals on the I/O cell), depending on the need to have the
-input buffer enabled while ``enable_h=0``.
-The truth table for ``enable_inp_h`` is given below in :numref:`enable_inp_h truth table`:
-
-.. table:: ``enable_inp_h`` truth table
-   :name: enable_inp_h truth table
-
-   +--------------+------------------+---------------+---------------+
-   | ``enable_h`` | ``enable_inp_h`` | * ``Inp_dis`` | Input Buffer  |
-   |              |                  | * dm[3]       | State         |
-   +==============+==================+===============+===============+
-   | 0            | 0                | X             | Disabled      |
-   +--------------+------------------+---------------+---------------+
-   | 0            | 1                | X             | Enabled       |
-   +--------------+------------------+---------------+---------------+
-   | 1            | X                | Valid         | F(``inp_dis`` |
-   |              |                  |               | , dm[3])      |
-   +--------------+------------------+---------------+---------------+
-
-
-Use of ``enable_inp_h`` at chip level: ``enable_inp_h`` is a hard-tie to either ``tie_hi_esd`` or ``tie_lo_esd`` of the :cell:`sky130_fd_io__gpio` and
-should not be register controlled.
-The ``enable_inp_h`` functionality is used to implement the Power-On-Reset Bypass Mode in SRSSv2: while XRES is asserted, SRSSv2 listens for a magic key
-on the SWD interface.
-This requires that primary SWD interface :cell:`sky130_fd_io__gpio` cells have their input buffers enabled, while XRES is asserted (``enable_inp_h`` is
-``tie_hi_esd``).
-All other :cell:`sky130_fd_io__gpio` cells have their input buffers disabled while XRES is asserted (``enable_inp_h`` is ``tie_lo_esd``).
-
-:cell:`sky130_fd_io__gpiov2` Additional Features
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The block diagram for :cell:`sky130_fd_io__gpiov2` is shown below in :numref:`sky130_fd_io__gpiov2 block diagram`.
-Note: bus notation dm[3] denotes a 3 bit bus dm[2:0].
-These notations are used interchangeably in the document.
-
-.. figure:: figures/sky130_fd_io__top_gpiov2.png
-   :name: sky130_fd_io__gpiov2 block diagram
-   :width: 5.55000in
-   :height: 7.57000in
-
-   :cell:`sky130_fd_io__gpiov2` Block Diagram
-
-:cell:`sky130_fd_io__gpiov2` provides all functionality as the original :cell:`sky130_fd_io__gpio` does.
-In addition, it provides the following extra features:
-
--  Improved hysteresis of 10% across the entire supply range in CMOS mode
-
--  Improved hysteresis of 100mV in LVTTL mode
-
--  Improvements to meet I2C fall time with a certain minimum bus cap. Support only for Standard and Fast I2C modes. :numref:`sky130_fd_io__gpiov2 output buffer` gives the different output buffer configurations.
-
--  Supports 1.8V signaling on PAD independent of vddio.
-
-   1. Full spec support for Vcchib ≥ 1.6
-
-   2. Limited functional support down to Vcchib ≥ 1.4 (Deep-sleep mode). 15Mhz CMOS operation.
-
--  Improvements to the analog mux to support multiple power modes.
-
--  Low-voltage DFT support (Input buffer runs at lower supply voltage than spec'ed)
-
-Following additional pins have been added to support some of the above features:
-
--  ``ib_mode_sel:`` This signal is used select between VDDIO and VCCHIB based thresholds (0=VDDIO, 1=VCCHIB)
-
--  ``enable_vddio:`` This qualifier lets the :cell:`sky130_fd_io__gpio` know that VDDIO is either present (1) or absent (0) in VCCHIB domain. Currently, a skew of 100ns is allowed between ``enable_h`` and ``enable_vddio``
-
--  ``enable_vswitch_h:`` These qualifiers let the :cell:`sky130_fd_io__gpio` know that VSWITCH is either present (1) or absent (0) in VSWITCH domain
-
-Input Buffer selection for :cell:`sky130_fd_io__gpiov2` is explained below in :numref:`sky130_fd_io__gpiov2 input buffer trip point`:
-
-.. table:: Input Buffer Trip point selection for :cell:`sky130_fd_io__gpiov2`
-   :name: sky130_fd_io__gpiov2 input buffer trip point
-
-   +--------+-----------------+---------------+-------------------------+--------------------+
-   | Mode   | ``ib_mode_sel`` | ``vtrip_sel`` | Input Buffer Trip Point | Description        |
-   +========+=================+===============+=========================+====================+
-   | CMOS   | 0               | 0             | 30%/70% of Vddio        | CMOS input buffer  |
-   +--------+-----------------+---------------+-------------------------+--------------------+
-   | TTL    | 0               | 1             | * VIL=0.8V, Vddio>2.7V  | LVTTL input buffer |
-   |        |                 |               | * VIH=2.0V, Vddio>2.7V  |                    |
-   +--------+-----------------+---------------+-------------------------+--------------------+
-   | VCCHIB | 1               | 0/1           | VIH=1.26V, VIL=0.54V    | Supports 1.8V      |
-   |        |                 |               |                         | signaling on PAD   |
-   +--------+-----------------+---------------+-------------------------+--------------------+
-
-.. note::
-    If :cell:`sky130_fd_io__gpiov2` or :cell:`sky130_fd_io__gpio_ovtv2` is used to catch an external interrupt in hibernate mode, then care must be
-    taken to have ``ib_mode_sel`` in logic 0 state before entering low-power modes.
-
-    This is because VCCHIB mode will not work in hibernate mode.
-
-
-.. table:: :cell:`sky130_fd_io__gpiov2` output buffer configurations
-   :name: sky130_fd_io__gpiov2 output buffer
-
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-   | dm[3]   | ``oe_n`` | slow | Driver PU         | Driver PU         | Driver PD           | Description               |
-   |         |          |      | (Rise Time Specs) | (Rise Times- Sch) | (Fall Time Specs)   |                           |
-   +=========+==========+======+===================+===================+=====================+===========================+
-   | 000/001 | x        | x    | Disabled          | Disabled          | Disabled            | Tri-state                 |
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-   | x       | 1        | x    | Disabled          | Disabled          | Disabled            | Tri-state                 |
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-   | 010     | 0        | 0    | Resistive (5K)    |                   | Strong-Fast         | * WPU                     |
-   |         |          |      |                   |                   | (2-12ns)            | * SPD Mode                |
-   |         |          |      |                   |                   |                     | * 25pF load               |
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-   | 010     | 0        | 1    | Resistive (5K)    |                   | Strong-Slow         |                           |
-   |         |          |      |                   |                   | (10-60ns)           |                           |
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-   | 011     | 0        | 0    | Strong-Fast       |                   | Resistive (5K)      | * SPU                     |
-   |         |          |      | (2-12ns)          |                   |                     | * WPD Mode                |
-   |         |          |      |                   |                   |                     | * 25pF load               |
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-   | 011     | 0        | 1    | Strong-Slow       |                   | Resistive (5K)      |                           |
-   |         |          |      | (10-60ns)         |                   |                     |                           |
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-   | 100     | 0        | 0    | Open-Drain        |                   | Strong-Fast         | * OPD-PU                  |
-   |         |          |      |                   |                   | (2-12ns)            | * SPD Mode                |
-   |         |          |      |                   |                   |                     | * I2C Standard Mode       |
-   |         |          |      |                   |                   |                     | * I2C FS+ Mode            |
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-   | 100     | 0        | 1    | Open-Drain        |                   | I2C Fast Mode       | * I2C Fast Mode           |
-   |         |          |      |                   |                   | (6.22/20ns - 250ns) | * Cbus>200pF              |
-   |         |          |      |                   |                   |                     | * Rext≥1K                 |
-   |         |          |      |                   |                   |                     | * Rext= tr/(0.8463\*Cbus) |
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-   | 101     | 0        | 0    | Strong-Fast       |                   | Open-Drain          | * SPU                     |
-   |         |          |      | (2-12ns)          |                   |                     | * OPD-PD Mode             |
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-   | 101     | 0        | 1    | Strong-Slow       |                   | Open-Drain          | * WPU                     |
-   |         |          |      | (10-60ns)         |                   |                     | * OPD-PD Mode             |
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-   | 110     | 0        | 0    | Strong-Fast       |                   | Strong-Fast         | * SPU                     |
-   |         |          |      | (2-12ns)          |                   | (2-12ns)            | * SPD Mode                |
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-   | 110     | 0        | 1    | Strong-Slow       |                   | Strong-Slow         | * SPU                     |
-   |         |          |      | (10-60ns)         |                   | (10-60ns)           | * SPD Mode                |
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-   | 111     | 0        | x    | Resistive (5K)    |                   | Resistive (5K)      | * WPU                     |
-   |         |          |      |                   |                   |                     | * WPD Mode                |
-   +---------+----------+------+-------------------+-------------------+---------------------+---------------------------+
-
-
-:cell:`sky130_fd_io__gpio_ovtv2` Additional Features
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. figure:: figures/sky130_fd_io__top_gpio_ovtv2.png
-   :name: sky130_fd_io__gpio_ovtv2 block diagram
-   :width: 5.73000in
-   :height: 7.07000in
-
-   :cell:`sky130_fd_io__gpio_ovtv2` Block Diagram
-
-:cell:`sky130_fd_io__gpio_ovtv2` provides all functionality as :cell:`sky130_fd_io__gpiov2` does.
-In addition, it provides the following extra features
-
--  Over-voltage tolerant
-
--  Provides better pull-down drive strength (V:sub:`OL`\ =0.6V @ I\ :sub:`OL`\ =10mA for VDDIO=1.71V)
-
--  Compliance to I2C standard, fast, fast-plus and high-speed modes
-
--  Provides selectable trip points feature. Using an internal reference generator, input buffer trip points can be adjusted over a wide range of value. The max frequency of operation is 66MHz when input signaling is greater than 2.2V. When input signaling is between 1.8V and 2.2V, the max frequency is 33 MHz. The minimum value of input signaling for which full functional specs are met is 1.8v.
-
--  :cell:`sky130_fd_io__gpio_ovtv2` is not critical corner compliant as it uses the MIM cap from :lib:`sky130_fd_pr` library. :cell:`sky130_fd_io__gpio_ovtv2` cannot be placed in corner of the die.
-
-   Following additional pins have been added to support some of the above features:
-
--  ``ib_mode_sel<1:0>:`` Used to configure input buffer trip points. Refer to :numref:`Input Buffer gpio_ovtv2`
-
--  ``hys_trim:`` Used to increase hysteresis feedback for input buffer in ``Ref Mode``. Set to ``1`` for input signaling voltage > 2.2V and ``0`` otherwise.
-
--  ``slew_ctl<1:0>`` : Used to vary slew rate in I2C mode (dm=100). Refer to :numref:`sky130_fd_io__gpio_ovtv2 slew rate control`
-
--  ``enable_vddio_lv:`` This qualifier lets the :cell:`sky130_fd_io__gpio` know that VDDIO is either present (1) or absent (0) in VCCHIB domain
-
--  ``enable_vswitch_h:`` This qualifier lets the :cell:`sky130_fd_io__gpio` know that VSWITCH is either present (1) or absent (0) in VSWITCH domain
-
-Feature: Selectable Trip point feature
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The input buffer in :cell:`sky130_fd_io__gpio_ovtv2` supports the following modes as given in :numref:`Input Buffer gpio_ovtv2` below:
-
-
-.. table:: Input Buffer modes in :cell:`sky130_fd_io__gpio_ovtv2` and their description
-   :name: Input Buffer gpio_ovtv2
-
-   +--------+-----------------+---------------+-----------------------------+-------------------------------------------+
-   | Mode   | ``ib_mode_sel`` | ``vtrip_sel`` | Input Buffer Trip Point     | Description                               |
-   |        | <1:0>           |               |                             |                                           |
-   +========+=================+===============+=============================+===========================================+
-   | CMOS   | 00              | 0             | 30%/70% of Vddio            | CMOS input buffer                         |
-   |        |                 |               |                             |                                           |
-   +--------+-----------------+---------------+--------------+--------------+-------------------------------------------+
-   | TTL    | 00              | 1             | * VIL=0.8V   | * VIH=2.0V   | LVTTL input buffer                        |
-   |        |                 |               | * Vddio>2.7V | * Vddio>2.7V |                                           |
-   +--------+-----------------+---------------+--------------+--------------+-------------------------------------------+
-   | VCCHIB | 01              | 0/1           | * VIH=1.26V                 | Supports 1.8V signalling on PAD           |
-   |        |                 |               | * VIL=0.54V                 |                                           |
-   +--------+-----------------+---------------+-----------------------------+-------------------------------------------+
-   | Ref    | 10/11           | 0/1           | 30%/70% of ``vinref``       | * vinref = VDDIO\*(13n+184)/600           |
-   |        |                 |               |                             | * This feature works in conjunction with: |
-   |        |                 |               |                             | * ::cell:`sky130_fd_io__top_gpiovrefv2`   |
-   |        |                 |               |                             | * ::cell:`sky130_fd_io__top_vrefcapv2`    |
-   +--------+-----------------+---------------+-----------------------------+-------------------------------------------+
-
-.. table:: :cell:`sky130_fd_io__gpio_ovtv2` Slew rate control with slow and ``slew_ctl<1:0>``
-   :name: sky130_fd_io__gpio_ovtv2 slew rate control
-
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+
-   | dm[3] | ``oe_n`` | slow | ``slew_ctl`` | Driver PU         | Driver PD (Fall Time Specs)               | Description   |
-   |       |          |      | [2]          | (Fall Time Specs) |                                           |               |
-   +=======+==========+======+==============+===================+===========================================+===============+
-   | * 000 | x        | x    | x            | Disabled          | Disabled                                  | Tri-state     |
-   | * 001 |          |      |              |                   |                                           |               |
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+
-   | x     | 1        | x    | x            | Disabled          | Disabled                                  | Tri-state     |
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+
-   | 010   | 0        | 0    | x            | Resistive (5K)    | Strong-Fast  (2-12ns)                     | * WPU         |
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+ * SPD Mode    |
-   | 010   | 0        | 1    | x            | Resistive (5K)    | Strong-Slow  (10-60ns)                    | * 25pF load   |
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+
-   | 011   | 0        | 0    | x            | Strong-Fast       | Resistive (5K)                            | * SPU         |
-   |       |          |      |              | (2-12ns)          |                                           |               |
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+ * WPD Mode    |
-   | 011   | 0        | 1    | x            | Strong-Slow       | Resistive (5K)                            | * 25pF load   |
-   |       |          |      |              | (10-60ns)         |                                           |               |
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+
-   | 100   | 0        | 0    | x            | Open-Drain        | Strong-Fast  (2-12ns)                     | * OPD-PU      |
-   |       |          |      |              |                   |                                           | * SPD Mode    |
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+
-   | 100   | 0        | 1    | 11           | Open-Drain        | * HS mode (Vext=<2.8, F=1.7MHz) (10-80ns) | To be used in |
-   |       |          |      |              |                   | * FS+ mode, Vext<=2.8V (20-120ns)         | I2C mode      |
-   |       |          |      +--------------+                   +-------------------------------------------+               |
-   |       |          |      | 01           |                   | * HS mode (Vext>2.8, F=1.7MHz) (10-80ns)  |               |
-   |       |          |      |              |                   | * FS+ mode, Vext>2.8 (20-120ns)           |               |
-   |       |          |      +--------------+                   +-------------------------------------------+               |
-   |       |          |      | 10           |                   | HS mode (Vext<3.3) (20-160ns)             |               |
-   |       |          |      +--------------+                   +-------------------------------------------+               |
-   |       |          |      | 00           |                   | * HS mode (Vext>3.0)                      |               |
-   |       |          |      |              |                   | * FS mode (20-160ns)                      |               |
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+
-   | 101   | 0        | 0    | x            | Strong-Fast       | Open-Drain                                | * SPU         |
-   |       |          |      |              | (2-12ns)          |                                           | * OPD-PD Mode |
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+
-   | 101   | 0        | 1    | x            | Strong-Slow       | Open-Drain                                | * WPU         |
-   |       |          |      |              | (10-60ns)         |                                           | * OPD-PD Mode |
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+
-   | 110   | 0        | 0    | x            | Strong-Fast       | Strong-Fast  (2-12ns)                     | * SPU         |
-   |       |          |      |              | (2-12ns)          |                                           | * SPD Mode    |
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+
-   | 110   | 0        | 1    | x            | Strong-Slow       | Strong-Slow  (10-60ns)                    | * SPU         |
-   |       |          |      |              | (10-60ns)         |                                           | * SPD Mode    |
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+
-   | 111   | 0        | x    | x            | Resistive (5K)    | Resistive (5K)                            | * WPU         |
-   |       |          |      |              |                   |                                           | * WPD Mode    |
-   +-------+----------+------+--------------+-------------------+-------------------------------------------+---------------+
-
-:cell:`sky130_fd_io__sio` Additional Features
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The block diagram for Special I/O (:cell:`sky130_fd_io__sio`) macro is shown below in :numref:`sky130_fd_io__sio_macro block diagram`
-
-.. figure:: figures/sky130_fd_io__sio_macro.png
-   :name: sky130_fd_io__sio_macro block diagram
-
-   Block diagram of :cell:`sky130_fd_io__sio_macro`
-
-The :cell:`sky130_fd_io__sio_macro` consists of 2 :cell:`sky130_fd_io__sio` cells (:numref:`sky130_fd_io__top_sio block diagram`) and a Reference generator cell.
-The :cell:`sky130_fd_io__sio` cells are ONLY available as pairs.
-The block diagram of :cell:`sky130_fd_io__sio` is shown below in :numref:`sky130_fd_io__top_sio block diagram`.
-Note that dm[3] denotes a 3 bit bus dm[2:0].
-These notations are used interchangeably in the document.
-
-1. I/O-Cell :cell:`sky130_fd_io__sio`
-
-.. figure:: figures/sky130_fd_io__sio.png
-   :name: sky130_fd_io__top_sio block diagram
-   :width: 5.79167in
-   :height: 6.14583in
-
-   Block diagram for :cell:`sky130_fd_io__top_sio`
-
-The :cell:`sky130_fd_io__sio` provides the following additional features over the :cell:`sky130_fd_io__gpio`:
-
--  Regulated output buffer
-
--  Differential input buffer
-
-The :cell:`sky130_fd_io__sio` cell adds a differential input buffer and a means for controlling or regulating the output buffer output high voltage level (Voh).
-The :cell:`sky130_fd_io__sio` cell has two additional control inputs (``vreg_en``, ``ibuf_sel``), and an input buffer reference voltage (``vinref``), and an output buffer
-reference voltage (``voutref``).
-The added control inputs are used to select the input buffer type (single ended or differential) and output buffer type (CMOS or regulated).
-The input buffer configuration is selected based on the state of the ``ibuf_sel`` control input.
-If this signal is low the standard single ended (:cell:`sky130_fd_io__gpio`) input buffer is selected, otherwise the differential input buffer is
-selected.
-
-The following tables 13 and 14 describe the :cell:`sky130_fd_io__sio` cell configurations based on the added control signals.
-
-.. table:: :cell:`sky130_fd_io__sio` Input Buffer Truth Table
-   :name: sio Input Buffer
-
-   +--------------+--------------+-------------+---------------+------------------+--------------------+
-   | ``ibuf_sel`` | ``Vref_sel`` | ``voh_sel`` | ``vtrip_sel`` | Trip Point       | Description        |
-   |              | [1:0]        | [2:0]       |               | (Vinref)         |                    |
-   +==============+==============+=============+===============+==================+====================+
-   | 0            | X            | X           | 0             | 30% / 70%        | CMOS input buffer  |
-   |              |              |             |               |                  | w/wo Hysteresis    |
-   +--------------+--------------+-------------+---------------+------------------+--------------------+
-   | 0            | X            | X           | 1             | * min (0.8V,30%) | LVTTL input buffer |
-   |              |              |             |               | * min (2.0V,70%) | w/wo Hysteresis    |
-   +--------------+--------------+-------------+---------------+------------------+--------------------+
-   | 1            | 00           | X           | 0             | 50% of vddio     | Differential input |
-   |              |              |             |               |                  | buffer             |
-   +--------------+--------------+-------------+---------------+------------------+--------------------+
-   | 1            | 00           | X           | 1             | 40% of vddio     | Differential input |
-   |              |              |             |               |                  | buffer             |
-   +--------------+--------------+-------------+---------------+------------------+--------------------+
-   | 1            | 01           | 000         | 0             | 0.5 \* Vohref    | Differential input |
-   |              |              |             |               |                  | buffer             |
-   +--------------+--------------+-------------+---------------+------------------+--------------------+
-   | 1            | 01           | 000         | 1             | Vohref           | Differential input |
-   |              |              |             |               | (buffered)       | buffer             |
-   +--------------+--------------+-------------+---------------+------------------+--------------------+
-   | 1            | 10/11        | 000         | 0             | 0.5 \*           | Differential input |
-   |              |              |             |               | ``amuxbus_a/b``  | buffer             |
-   +--------------+--------------+-------------+---------------+------------------+--------------------+
-   | 1            | 10/11        | 000         | 1             | ``amuxbus_a/b``  | Differential input |
-   |              |              |             |               | (buffered)       | buffer             |
-   +--------------+--------------+-------------+---------------+------------------+--------------------+
-
-The ``vreg_en`` control input selects the output buffer configuration.
-If this signal is low the standard CMOS (:cell:`sky130_fd_io__gpio`) output configuration is selected.
-The regulated output configuration is selected ONLY if the dm<2:0> bits are correctly set to the strong pull up configuration.
-If the dm bits are set to any other configuration other than strong pull up, the regulated output buffer will be disabled, and the standard CMOS
-output buffer would take over.
-
-.. table:: :cell:`sky130_fd_io__sio` Output Buffer Truth Table
-   :name: sio Output Buffer
-
-   +-------------+------+--------------+-------------+--------------------+---------------------------------------+
-   | ``Vreg_en`` | slow | ``Vref_seL`` | ``Voh_sel`` | Voutref for o/p    | Description                           |
-   |             |      | [1:0]        | [2:0]       | buffer             |                                       |
-   +=============+======+==============+=============+====================+=======================================+
-   | 0           | 0    | X            | X           | vohref             | * Output driver in CMOS mode          |
-   |             |      |              |             |                    | * Max slew rate                       |
-   +-------------+------+--------------+-------------+--------------------+---------------------------------------+
-   | 0           | 1    | X            | X           | vohref             | * Output driver in CMOS mode          |
-   |             |      |              |             |                    | * Reduced slew rate                   |
-   +-------------+------+--------------+-------------+--------------------+---------------------------------------+
-   | 1           | 0    | 00/01        | [0-7]       | Refer to           | * Output driver in Regulate mode      |
-   |             |      |              |             | :numref:`voh sel` | * VOH is vohref based                 |
-   +-------------+------+--------------+-------------+--------------------+---------------------------------------+
-   | 1           | 0    | 10/11        | [0-7]       | Refer to           | * Output driver in Regulate mode      |
-   |             |      |              |             | :numref:`voh sel` | * VOH  is ``amuxbus_a/b`` based.      |
-   +-------------+------+--------------+-------------+--------------------+---------------------------------------+
-   | 1           | 1    | 00/01        | [0-7]       | Refer to           | * Output driver in Regulate slow mode |
-   |             |      |              |             | :numref:`voh sel` | * VOH is vohref based.                |
-   +-------------+------+--------------+-------------+--------------------+---------------------------------------+
-   | 1           | 1    | 10/11        | [0-7]       | Refer to           | * Output driver in Regulate slow mode |
-   |             |      |              |             | :numref:`voh sel`  | * VOH is ``amuxbus_a/b`` based.       |
-   +-------------+------+--------------+-------------+--------------------+---------------------------------------+
-
-Note: The ``voh_sel[2:0]`` combinations are found in the :numref:`voh sel`
-
-
-Notice that the input buffer and output buffer configurations can be selected independently.
-For example, the standard single-ended input buffer and the regulated output buffer can be selected.
-
-:cell:`sky130_fd_io__refgen` (Reference Generator) Features
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The block diagram of :cell:`sky130_fd_io__refgen` used in :cell:`sky130_fd_io__sio_macro` is shown below in :numref:`sky130_fd_io__refgen block diagram`:
-
-.. figure:: figures/sky130_fd_io__top_refgen.png
-   :name: sky130_fd_io__refgen block diagram
-   :width: 6.50000in
-   :height: 6.25417in
-
-   Block diagram for :cell:`sky130_fd_io__refgen`
-
-The :cell:`sky130_fd_io__refgen` block :cell:`sky130_fd_io__top_refgen` is an opamp connected in negative feedback loop configuration to generate the output
-reference voltage ``voutref``.
-The input to the opamp (vref) can be selected from any of the three input references (vohref, ``amuxbus_a`` or ``amuxbus_b`` ).
-The input reference is selected based on the control input ``vref_sel[1:0]`` (:numref:`io drive strength modes`).
-The voltage voutref is ``voh_out+Vgs`` (diode-connected nFET).
-In the Regulated Output Buffer, the voltage voutref is applied to the gate of a nFET (of the same type as the diode-connected nFET used to generate
-the voutref signal) and the output is the source of that nFET.
-
-Consequently, this configuration compensates for the V\ :sub:`GS` voltage drop of the source follower in the Regulated Output Buffer circuit and
-allows its output to be pulled to the desired V\ :sub:`OH` voltage level, nominally equal to vohref value.
-The actual V\ :sub:`OH` level and its tolerance relative to the vohref voltage depends on the output current load conditions.
-The acceptable variation in V\ :sub:`OH`-vohref tolerance versus output current load is specified in DC Specification tables.
-For a given input reference, vref, the value of voutref can varied by selecting different tap point from the resistive divider in the feedback path
-(:numref:`sky130_fd_io__refgen block diagram`).
-The resistors are not equal in value and are skewed to generate standard voltages (1.2, 1.5, 1.8, 2, 2.5, 3.3, 4.8), when the bandgap voltage (1.2V)
-is connected to vohref.
-This selection is based on the select signals , ``voh_sel[2:0]`` (:numref:`voh sel`).
-The output regulated value ``(voh_out)`` equals ``vref/n``, where n=Rtap/Rtotal (:numref:`voh sel`).
-
-.. table:: Input Reference selection
-   :name: input reference selection
-
-   +--------------+---------------+
-   | ``Vref_sel`` | Ref.Selected  |
-   | [1:0]        |               |
-   +==============+===============+
-   | 00           | Vohref        |
-   +--------------+---------------+
-   | 01           | Vohref        |
-   +--------------+---------------+
-   | 10           | ``amuxbus_a`` |
-   +--------------+---------------+
-   | 11           | ``amuxbus_b`` |
-   +--------------+---------------+
-
-Note: The voltage range for the analog reference inputs ``(vref/amuxbus_a/amuxbus_b)`` is 1.0-4.6V and is dependent on the I/O supply, shown in :numref:`analog reference input` below.
-
-.. table:: Analog Reference Input
-   :name: analog reference input
-
-   +-------------------------+--------------------------------+
-   | I/O Supply (vddio)      | analog input to reference      |
-   |                         | ``(vref/amuxbus_a/amuxbus_b)`` |
-   +=========================+================================+
-   | 1.65V <= vddio < = 3.7V | 1 - (vddio-0.5)                |
-   +-------------------------+--------------------------------+
-   | 3.7V< vddio <= 5.6V     | 1 - (vddio-1)                  |
-   +-------------------------+--------------------------------+
-
-.. table:: V\ :sub:`OH` reference selection
-   :name: voh sel
-
-   +------------------+-----------------+
-   | ``voh_sel[2:0]`` | n = Rtap/Rtotal |
-   +==================+=================+
-   | 000              | 1               |
-   +------------------+-----------------+
-   | 001              | 0.8             |
-   +------------------+-----------------+
-   | 010              | 0.67            |
-   +------------------+-----------------+
-   | 011              | 0.6             |
-   +------------------+-----------------+
-   | 100              | 0.48            |
-   +------------------+-----------------+
-   | 101              | 0.4             |
-   +------------------+-----------------+
-   | 110              | 0.36            |
-   +------------------+-----------------+
-   | 111              | 0.25            |
-   +------------------+-----------------+
-
-
-Note:
-
--  All the ``voh_sel[2:0]`` values cannot be selected for entire reference range (1V-4.6V). The upper value on VOH is limited to ``Vddio_q - 400mV``.
-
--  The resistors are not equal in value and are skewed to generates standard voltages (1.2, 1.5, 1.8, 2, 2.5, 3.3, 4.8), when band-gap voltage (1.2V) is connected to vref.
-
-The input buffer reference ``vinref`` can be derived from four sources: vinref, half of ``voh_out``, and 40% or 50% of the I/O supply voltage ``vcc_io``.
-The ``vinref`` voltage level selected is based on the input buffer voltage trip point select ``vtrip_sel`` and voltage reference select ``vref_sel``
-control inputs.
-
-The truth tables for :cell:`sky130_fd_io__refgen` are shown in :numref:`sky130_fd_io__sio input buffer voltage` and :numref:`sky130_fd_io__refgen truth table`.
-
-Important notes about :cell:`sky130_fd_io__sio` macro:
-
--  Each pair of :cell:`sky130_fd_io__sio`'s share a single RefGen block. This block allows for the generation of a ``regulated mode`` selectable input buffer trip point and output driver level.
-
--  The I/Os retain the ability to disable the input buffer for I/O's with an active analog function. For :cell:`sky130_fd_io__sio`'s not connected to any analog component this input must be tied off.
-
--  The input reference (Vohref) to the RefGen block is assumed to be 1.2V.
-
--  The RefGen block also connects to ``amuxbus_a`` and ``amuxbus_b`` for reference generation. Use case: An external pin as reference voltage.
-
--  Regulated output buffer mode and differential input buffer mode cannot be used in low-power modes where VCCD is unavailable. It is the responsibility of firmware to ensure that the :cell:`sky130_fd_io__sio` is not configured in these modes before entering low-power modes.
-
--  If :cell:`sky130_fd_io__sio_macro` is being used as an I2C pin to drive SDA, the following configuration bits need to be set (CMOS input buffer and open-drain output)—The configuration bits are given w.r.t a single :cell:`sky130_fd_io__sio`
-
-   -  dm<2:0>=100 (To enable the 20mA driver (I2C FS+ mode and input buffer)
-
-   -  ``ibuf_sel=0`` (To enable the SE buffer)
-
-   -  ``inp_dis=0`` (To enable input buffer)
-
-   -  ``vtrip_sel=0`` (To enable CMOS input buffer mode)
-
--  All other control signals are don't care. The refgen can be disabled when :cell:`sky130_fd_io__sio_macro` is used for I2C ``(vreg_en_refgen=0)``
-
-.. table:: Valid :cell:`sky130_fd_io__sio` Differential Input Buffer Reference Voltage
-   :name: sky130_fd_io__sio input buffer voltage
-
-   +--------------+---------------+--------------------+
-   | ``Vref_sel`` | ``vtrip_sel`` | Vinref             |
-   | <1:0>        |               |                    |
-   +==============+===============+====================+
-   | 00           | 0             | 0.5 \* ``vcc_io``  |
-   +--------------+---------------+--------------------+
-   | 00           | 1             | 0.4 \* ``vcc_io``  |
-   +--------------+---------------+--------------------+
-   | 01           | 0             | 0.5 \* ``voh_out`` |
-   +--------------+---------------+--------------------+
-   | 01           | 1             | vref               |
-   +--------------+---------------+--------------------+
-   | 10           | 0             | 0.5 \* ``voh_out`` |
-   +--------------+---------------+--------------------+
-   | 10           | 1             | vref               |
-   +--------------+---------------+--------------------+
-   | 11           | 0             | 0.5 \* ``voh_out`` |
-   +--------------+---------------+--------------------+
-   | 11           | 1             | vref               |
-   +--------------+---------------+--------------------+
-
-.. table:: :cell:`sky130_fd_io__refgen` Truth Table
-   :name: sky130_fd_io__refgen truth table
-
-   +--------+-------------+--------------+--------------+---------+--------+
-   | vohref | ``vreg_en`` | ``ibuf_sel`` | ``vref_sel`` | voutref | vinref |
-   |        |             |              | <1:0>        |         |        |
-   +========+=============+==============+==============+=========+========+
-   | X      | 0           | 0            | X            | Hi-Z    | Hi-Z   |
-   +--------+-------------+--------------+--------------+---------+--------+
-   | 1      | 0           | 1            | 00           | Hi-Z    | 1      |
-   +--------+-------------+--------------+--------------+---------+--------+
-   | 1      | 0           | 1            | 01,10,11     | 1       | 1      |
-   +--------+-------------+--------------+--------------+---------+--------+
-   | 1      | 1           | 0            | 00,01        | 1       | Hi-Z   |
-   +--------+-------------+--------------+--------------+---------+--------+
-   | X      | 1           | 0            | XX           | 1       | Hi-Z   |
-   +--------+-------------+--------------+--------------+---------+--------+
-   | 1      | 1           | 1            | 00,01        | 1       | 1      |
-   +--------+-------------+--------------+--------------+---------+--------+
-   | X      | 1           | 1            | 10,11        | 1       | 1      |
-   +--------+-------------+--------------+--------------+---------+--------+
-
-Use of ``dft_refgen`` for ADFT purpose:
-
--  The :cell:`sky130_fd_io__refgen` block produces two references to be used in the :cell:`sky130_fd_io__sio_macro`. ``vinref`` is the reference to the differential input buffer and ``voutref`` is the reference to the regulated output buffer.
-
--  In order to have 100% ADFT coverage, these two references are bought out to the interface of the :cell:`sky130_fd_io__sio_macro`. By enabling ``dft_refgen``, these two outputs of refgen can be observed on ``vinref_dft`` and ``voutref_dft``. In order to observe these two pins on any :cell:`sky130_fd_io__gpio` pins, these two pins need to be hooked to the analog busses and bought to any :cell:`sky130_fd_io__gpio` pad through the AMUXBUS inside the :cell:`sky130_fd_io__gpio`.
-
-:cell:`sky130_fd_io__gpio_vrefv2` (Reference generator for Selectable trip point input buffer) Features
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-This cell provides a reference (``vinref``) to the selectable trip point buffer in :cell:`sky130_fd_io__gpio_ovtv2`.
-This reference generator is a low-leakage resistive ladder whose tap points are selected based on the signaling required at the
-:cell:`sky130_fd_io__gpio_ovtv2` pad.
-The block diagram is shown below in :numref:`sky130_fd_io__gpio_vrefv2 block diagram`.
-Note ref_sel[5] denotes a 5 bit bus ``ref_sel[4:0].``
-These notations are used interchangeably in the document.
-
-.. figure:: figures/sky130_fd_io__top_gpiovrefv2.png
-   :name: sky130_fd_io__gpio_vrefv2 block diagram
-   :width: 6.07292in
-   :height: 4.31250in
-
-   :cell:`sky130_fd_io__gpio_vrefv2` Block Diagram
-
-The reference selection is based on the signaling range that needs to be at the PAD.
-For this to work, the external signaling range must be lower than VDDIO.
-The tap point selection is based on the formula:
-
-vinref = (13n+184)\*VDDIO/600
-
--  Where vinref represents the input signaling voltage at :cell:`sky130_fd_io__gpio_ovtv2` pad
-
--  VDDIO is the supply voltage to the :cell:`sky130_fd_io__gpio`
-
--  ``n`` is the tap point selection that gives us required vinref. Binary coding of ``n`` is ``ref_sel<4:0>.`` ``n`` should be chosen such that ``vinref`` is greater than 1.8V
-
-   For example:
-
-   -  Need to support 1.8V (vinref) signaling on PAD with VDDIO=5.0V. Plugging these numbers into the equation yields:
-
-      1.8 = (13n+184)\*5.0/600
-
-      n= 2.46
-
-   -  As n=2.46, ``ref_sel<4:0>`` can be selected as either 2 (5'b00010) or 3 (5'b00011). This would give out a reference of ``1.75V`` and ``1.858V`` respectively.
-
-   -  Use a ceiling on ``n`` i.e. if n=2.46, use n=3 instead of n=2.
-
-::cell:`sky130_fd_io__top_vrefcapv2` Features
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-This cell contains a unit capacitance (4pF) that is intended to be placed on the ``vinref`` node that goes to multiple :cell:`sky130_fd_io__gpio_ovtv2`
-cells.
-This is a filter cap used to suppress kick-back noise from the input buffers.
-The usage is shown below in :numref:`sky130_fd_io__top_vrefcapv2 block diagram`:
-
-.. figure:: figures/sky130_fd_io__top_vrefcapv2.png
-   :name: sky130_fd_io__top_vrefcapv2 block diagram
-   :width: 4.64583in
-   :height: 6.32292in
-
-   :cell:`sky130_fd_io__top_vrefcapv2`
-
-:cell:`sky130_fd_io__top_amuxsplitv2` Features
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The amux splitter cell is designed to provide large chips (with large number of :cell:`sky130_fd_io__gpio`'s) to break the analog mux into multiple segments.
-This cell is capable of grounding, disconnecting or feeding through each amuxbus.
-The block diagram is shown below in :numref:`sky130_fd_io__top_amuxsplitv2 block diagram`.
-
-.. figure:: figures/sky130_fd_io__top_amuxsplitv2.png
-   :name: sky130_fd_io__top_amuxsplitv2 block diagram
-   :width: 6.50000in
-   :height: 4.11944in
-
-   Block diagram of :cell:`sky130_fd_io__top_amuxsplitv2`
-
-Each T-switch has 3 control signals coming to control the state of the switches.
-These are expected to be static switches.
-During power-up ``(enable_vdda_h=0)`` and low-power modes ``(hld_vdda_h_n=0),`` the switches of the amux splitter are open.
-
-General guidelines for the T-switch: Break before make logic that needs to be followed when working with the switch control signals.
-For example - when ``amux_a_l`` and ``amux_a_r`` are Independent, the mid-node of the switch needs to be closed to prevent unwanted coupling between the
-two amuxbus's.
-When connecting ``amux_a_l`` and ``amux_a_r`` care must be taken to disconnect the mid-node and then close the right and left switch.
-
-PG pads (ESD)
-~~~~~~~~~~~~~
-
-The I/O library consists of Power (P) and Ground (G) pads that have RC ESD clamps embedded in them.
-There are two types of RC ESD clamps that are present in these PG pads.
-
--  HV clamp- Only one HV (High Voltage) clamp is present underneath the PG pads whose terminals can be connected independently without interfering with the PG connections
-
--  LV clamp- Two LV (Low Voltage) clamps and a B2B (back 2 back) diode can be accommodated underneath the PG pads. The two LV clamps have a total of six terminals that can be tied according to chip-level needs. The B2B however should be connected to the source/body of LV clamp1 and another independent ground node ``(bdy_b2b).``
-
-A layout variant of the HV clamp without pad is :cell:`sky130_fd_io__top_hvclamp_wopadv2`.
-This is a derivative of :cell:`sky130_fd_io__top_hvclamp_wopad` with following changes:
-
--  Vssd pin added: P-substrate connection
-
--  HV clamp gate connection improved.
-
--  HV clamp source/drain connection improved.
-
-Two additional pad cells to be used for power and ground connections added, namely:
-
--  :cell:`sky130_fd_io__top_power_padonlyv2`
-
--  :cell:`sky130_fd_io__top_ground_padonlyv2`
-
-These are only M4/M5 pad structures with a short element.
-They are used to provide pad structure/connection to wopad clamps.
-
-Integration Guidelines
-^^^^^^^^^^^^^^^^^^^^^^
-
-All power and ground pads have the I/O bussing running through them in M5/M4, thereby forming an I/O ring when abutted to each other.
-The power and ground pads can be abutted to either the :cell:`sky130_fd_io__gpio` or the :cell:`sky130_fd_io__sio_macro`.
-
-The Power and Ground pads are designed in such a way that one side of it is full DRC complaint to any :cell:`sky130_fd_io__gpio` or :cell:`sky130_fd_io__sio_macro` that abuts it.
-However due to limited area constraints, the other side cannot be abutted directly to a :cell:`sky130_fd_io__gpio`/:cell:`sky130_fd_io__sio_macro`.
-This puts a restriction that 2 pads (power/ground) should be paired to build the I/O ring.
-
-ESD design details
-~~~~~~~~~~~~~~~~~~
-
-The architecture for the RC ESD clamps trigger circuit is the simple one-time constant RC trigger circuit.
-For the over-voltage tolerant :cell:`sky130_fd_io__sio`, use ESD rail clamp :cell:`sky130_fd_io__top_hvclamp_wopad_sio`.
-
-The HV and LV RC ESD clamps are robust up to 3.3KV HBM.
-
-ESD HV RC ESD Clamp design
-
--  Single trigger - 2us time constant
-
--  Driver width of 2880 um was used
-
--  Cell height the same as the :cell:`sky130_fd_io__gpio`
-
-Usage of Outer Guard ring Connection (OGC) in ESD HV and LV clamps for :lib:`sky130_fd_io`
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Power and Ground pads in :lib:`sky130_fd_io` library come along with ESD HV and LV clamps embedded within them.
-All the ESD clamps are independent of the power or ground pads providing maximum flexibility, thereby making the end user make proper connections to
-the ESD clamps.
-The end user chip lead is the best-informed person about making these connections and must approve all the ESD connections.
-
-One of the clamp connections is the outer guard ring connection ``(ogc_hvc/ogc_lvc).``
-The basic purpose of this is to connect the outer guard ring (deep nwell) to provide noise isolation.
-The recommended usage of this is to connect it to a HV supply that is available all/most of the time.
-
-Bottlenecks during implementation: The power and ground pads that contain the ESD clamps have a number of pins coming to the boundary interface.
-In order to minimize the resistance inside the cell to these ESD clamps, some of the ``ogc_\*`` connections are floated and connected internally to
-VDDIO.
-
-The following :numref:`ogc connection` lists the different cells in :lib:`sky130_fd_io` library that have this ``ogc_\*`` connection and the recommended way to connect them.
-
-.. table:: OGC connection and Usage
-   :name: ogc connection
-
-   +------+---------------------------------------------+-------------+---------------------------------------------+
-   | S.No | Public Cell                                 | Internally  | Recommended connection to end user          |
-   |      |                                             | connected?  |                                             |
-   +======+=============================================+=============+=============================================+
-   | 1    | :cell:`sky130_fd_io__top_power_hvc_wpad`    | YES (VDDIO) | No need to connect                          |
-   +------+---------------------------------------------+-------------+---------------------------------------------+
-   | 2    | :cell:`sky130_fd_io__top_ground_hvc_wpad`   | YES (VDDIO) | No need to connect                          |
-   +------+---------------------------------------------+-------------+---------------------------------------------+
-   | 3    | :cell:`sky130_fd_io__top_power_lvc_wpad`    | YES (VDDIO) | No need to connect                          |
-   +------+---------------------------------------------+-------------+---------------------------------------------+
-   | 4    | :cell:`sky130_fd_io__top_ground_lvc_wpad`   | YES (VDDIO) | No need to connect                          |
-   +------+---------------------------------------------+-------------+---------------------------------------------+
-   | 5    | :cell:`sky130_fd_io__top_hvclamp_wopad`     | NO          | Connect to HV Supplythat is always present  |
-   +------+---------------------------------------------+-------------+---------------------------------------------+
-   | 6    | :cell:`sky130_fd_io__top_lvclamp_b2b_wopad` | NO          | Connect to HV Supply that is always present |
-   |      |                                             |             | (Outer guard ring is HV rules compliant)    |
-   +------+---------------------------------------------+-------------+---------------------------------------------+
-   | 7    | :cell:`sky130_fd_io__top_lvclamp`           | NO          | Connect to HV Supply that is always present |
-   |      |                                             |             | (Outer guard ring is HV rules compliant)    |
-   +------+---------------------------------------------+-------------+---------------------------------------------+
-
-XRES
-~~~~
-
-The XRES cell is a macro that is used to influence the internal system wide reset.
-The purpose of this cell is to provide a noise free signal from the input buffer to the core.
-Any glitch of 50ns or less on the XRES pad is rejected by the XRES macro.
-
-The XRES cell (:cell:`sky130_fd_io__top_xres`, :cell:`sky130_fd_io__top_xres_2`) is a cell that integrates the input buffer from the :cell:`sky130_fd_io__gpio` and an HV RC
-filter.
-It also has a 5k weak pull up on the XRES pad.
-
-The XRES cell has two outputs, out (LV) and ``out_h`` (HV).
-The HV output will be functional even when the LV supply to the input buffer is gone (STOP mode).
-
-There are 5 variants of XRES cells in :lib:`sky130_fd_io` IP:
-
-1. :cell:`sky130_fd_io__top_xres` and :cell:`sky130_fd_io__top_xres_2`
-
-The two versions are the same except for layout differences.
-
-2. :cell:`sky130_fd_io__top_xres2v2`
-
-This cell is essentially a copy of the current :cell:`sky130_fd_io__top_xres_2` cell.
-One minor layout modification is made to this cell which is to make the height of the new cell=200u (:cell:`sky130_fd_io__top_xres_2` has 198u height).
-No change in functionality compared to current :cell:`sky130_fd_io__top_xres_2`.
-
-.. figure:: figures/sky130_fd_io__xres2v2.png
-   :name: sky130_fd_io__top_xres2v2 block diagram
-   :width: 3.21875in
-   :height: 1.47917in
-
-   :cell:`sky130_fd_io__top_xres2v2`
-
-3. :cell:`sky130_fd_io__top_xres3v2`
-
-This cell is also a copy of the :cell:`sky130_fd_io__top_xres_2` cell but with the pull-up disabled.
-(I.e.
-pull-up metal connection will be cut).
-
-There is a metal option provided to connect the pullup back on if required.
-This requires 2 extra pins in this cell.
-
-.. figure:: figures/sky130_fd_io__xres3v2.png
-   :name: sky130_fd_io__top_xres3v2 block diagram
-   :width: 3.44792in
-   :height: 1.56250in
-
-   :cell:`sky130_fd_io__top_xres3v2`
-
-4. :cell:`sky130_fd_io__top_axresv2`
-
-Glitch filter to filter out pulses less than 50ns pulse width.
-This glitch filter currently resides inside of the xres cells.
-In order to provide more flexibility, the glitch filter portion of the existing xres cell will be copied into this new public cell.
-
-Pull-up cell to connect the pad to the power supply (vddio) through a 5k ohm resistor.
-A control bit ``(disable_pullup_h)`` is used to enable/disable the pull-up.
-
-.. figure:: figures/sky130_fd_io__top_axresv2.png
-   :name: sky130_fd_io__top_axresv2 block diagram
-   :width: 3.04996in
-   :height: 1.07135in
-
-   :cell:`sky130_fd_io__top_axresv2`
-
-Use case for the XRES cells
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. figure:: figures/use_case_for_the_xres_cells.png
-   :name: xres use case
-   :width: 6.50000in
-   :height: 4.06181in
-
-   Use case for the XRES cells
-
-Usage guidelines on when to use the different cells:
-
-:cell:`sky130_fd_io__top_xres`:
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The first XRES cell :cell:`sky130_fd_io__top_xres` can ONLY be abutted to the :cell:`sky130_fd_io__sio_macro` on its right and to TP2 on its left.
-This will not have any physical verification errors with the above mentioned placement of :cell:`sky130_fd_io__top_xres` cell.
-This cell CANNOT be abutted with any other cells in the :lib:`sky130_fd_io` library to form the I/O ring.
-
-:cell:`sky130_fd_io__top_xres_2`:
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-This is a generic cell that can be abutted to most of the existing cells inside the :lib:`sky130_fd_io` library.
-
-:cell:`sky130_fd_io__top_xres2v2`, :cell:`sky130_fd_io__top_xres3v2`, :cell:`sky130_fd_io__top_axresv2`:
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-All the :cell:`sky130_fd_io__top_xres` cells have the I/O bussing running through them in M5/M4, thereby forming an I/O ring when abutted to each other.
-This is a generic cell that can be abutted to most of the existing cells inside the :lib:`sky130_fd_io` library.
-
-
-Test Pads (TP1, TP2, TP3)
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-TP1 and TP2 are used to monitor the flash voltages.
-TP3 is an analog pad.
-The TP1 and TP2 pads do not have any state elements and have no initialization requirements.
-It is expected that ``en_tp1`` and ``en_tp2`` input will be driven low during startup and during normal operation - only toggling high during test modes
-(class test or characterization, in particular).
-
-The TP1 and TP2 pad are specifically for test mode.
-
-There are two modes: ``en_tp1`` and ``en_tp2`` = 0 and ``en_tp1`` and ``en_tp2`` = 1.
-
-The ``en_tp1`` and ``en_tp2`` inputs must be asserted high to enable scaled/divided version of outputs for full-chip hook-up.
-In this mode the ``tp1_out`` voltages and ``tp2_out_voltages`` are directly observed on the TP1 and TP2 pads.
-
-The TP1, TP2, TP3 pads have snap back ESD protection inside them.
-
-Below are the truth tables for the TP1, TP2, TP3 pads:
-
-.. table:: Truth Table for :cell:`sky130_fd_io__top_tp1`
-   :name: sky130_fd_io__top_tp1 truth table
-
-   +------------+-------------+---------------+
-   | ``en_tp1`` | tp1         | ``tp1_div``   |
-   +============+=============+===============+
-   | 0          | ``tp1_out`` | Hi-Z          |
-   +------------+-------------+---------------+
-   | 1          | ``tp1_out`` | ``tp1_out/7`` |
-   +------------+-------------+---------------+
-
-.. table:: Truth Table for :cell:`sky130_fd_io__top_tp2`
-   :name: sky130_fd_io__top_tp2 truth table
-
-   +------------+-------------+-----------------------------+
-   | ``en_tp2`` | tp2         | ``tp2_div``                 |
-   +============+=============+=============================+
-   | 0          | ``tp2_out`` | Hi-Z                        |
-   +------------+-------------+-----------------------------+
-   | 1          | ``tp2_out`` | ``tp1_out/9`` + (8/9)\*vccd |
-   +------------+-------------+-----------------------------+
-
-.. table:: Truth Table for :cell:`sky130_fd_io__top_tp3`
-   :name: sky130_fd_io__top_tp3 truth table
-
-   +------+-------------+
-   | tp3  | ``tp3_out`` |
-   +======+=============+
-   | 0    | 0           |
-   +------+-------------+
-   | 1    | 1           |
-   +------+-------------+
-   | Hi-Z | Hi-Z        |
-   +------+-------------+
-
-Overlay Cells
-~~~~~~~~~~~~~
-
-There are two kinds of overlays that exist in the :lib:`sky130_fd_io` I/O library:
-
--  Power Ground (PG) overlays - These overlay cells (12) are coupled with the existing generic power and ground public cells and made into a specific power and ground pad. The overlays connect the pad to the one of the horizontally running I/O ring busses.
-
--  :cell:`sky130_fd_io__gpio`
-
-1. Power Ground Overlays
-
-   :lib:`sky130_fd_io` I/O library has twelve overlays that go with the two existing power and ground pads.
-   The purpose of the overlays is to convert a generic power/ground pad to a specific power/ground pad.
-   For example: :cell:`sky130_fd_io__top_power_hvc_wpad` is just a power pad with no hook-up to the horizontally running I/O busses in the I/O ring.
-   By placing an overlay called :cell:`sky130_fd_io__overlay_vddio_hvc` on top of :cell:`sky130_fd_io__top_power_hvc_wpad`, this would become a VDDIO power pad (in that the
-   PAD is physically connected to the VDDIO bus in the I/O ring).
-
-   Below are the important busses running in the I/O ring for which these overlays are built:
-
-   1. VDDIO
-
-   2. VSSIO
-
-   3. VDDA
-
-   4. VSSA
-
-   5. VCCD
-
-   6. VSSD
-
-   Since any power or ground pad can be connected to an ESD HV or an ESD LV clamp, there are twelve overlays for the above mentioned buses.
-   :numref:`overlay cells` shows the usage.
-
-.. table:: Overlay Cell along with usage
-   :name: overlay cells
-
-   +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+
-   | S.No | Overlay                                 | Used in conjunciton with                  | Converts above  | Using underneath |
-   |      |                                         |                                           | power PAD to    | clamp of         |
-   +======+=========================================+===========================================+=================+==================+
-   | 1    | :cell:`sky130_fd_io__overlay_vddio_hvc` | :cell:`sky130_fd_io__top_power_hvc_wpad`  | VDDIO power pad | HV ESD clamp     |
-   +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+
-   | 2    | :cell:`sky130_fd_io__overlay_vddio_lvc` | :cell:`sky130_fd_io__top_power_lvc_wpad`  | VDDIO power pad | LV ESD clamp     |
-   +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+
-   | 3    | :cell:`sky130_fd_io__overlay_vdda_hvc`  | :cell:`sky130_fd_io__top_power_hvc_wpad`  | VDDA  power pad | HV ESD clamp     |
-   +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+
-   | 4    | :cell:`sky130_fd_io__overlay_vdda_lvc`  | :cell:`sky130_fd_io__top_power_lvc_wpad`  | VDDA  power pad | LV ESD clamp     |
-   +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+
-   | 5    | :cell:`sky130_fd_io__overlay_vccd_hvc`  | :cell:`sky130_fd_io__top_power_hvc_wpad`  | VCCD  power pad | HV ESD clamp     |
-   +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+
-   | 6    | :cell:`sky130_fd_io__overlay_vccd_lvc`  | :cell:`sky130_fd_io__top_power_lvc_wpad`  | VCCD  power pad | LV ESD clamp     |
-   +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+
-   | 7    | :cell:`sky130_fd_io__overlay_vssio_hvc` | :cell:`sky130_fd_io__top_ground_hvc_wpad` | VSSIO power pad | HV ESD clamp     |
-   +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+
-   | 8    | :cell:`sky130_fd_io__overlay_vssio_lvc` | :cell:`sky130_fd_io__top_ground_lvc_wpad` | VSSIO power pad | LV ESD clamp     |
-   +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+
-   | 9    | :cell:`sky130_fd_io__overlay_vssa_hvc`  | :cell:`sky130_fd_io__top_ground_hvc_wpad` | VSSA  power pad | HV ESD clamp     |
-   +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+
-   | 10   | :cell:`sky130_fd_io__overlay_vssa_lvc`  | :cell:`sky130_fd_io__top_ground_lvc_wpad` | VSSA  power pad | LV ESD clamp     |
-   +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+
-   | 11   | :cell:`sky130_fd_io__overlay_vssd_hvc`  | :cell:`sky130_fd_io__top_ground_hvc_wpad` | VSSD  power pad | HV ESD clamp     |
-   +------+-----------------------------------------+-------------------------------------------+-----------------+------------------+
-
-Power detector
-~~~~~~~~~~~~~~
-
-This cell is developed to detect vddd and vddio power supplies and to level shift the hv control signals across vddio<->vddd voltage domains.
-This cell is made of the following sub-blocks.
-
-1. vddd detector : It detects the presence of vddd supply in vddio domain
-
-2. vddio detector : It detects the presence of vddio supply in vddd domain
-
-3. There are 6 level shifters inside the top cell. The first 3 level shifters are enabled by the vddd detector and the later three are enabled by the vddio detector. The detectors make sure that the level shifters are powered down to a safe state when the input power supply to the level shifters is not present.
-
-Use case for the detector
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. figure:: figures/use_case_for_power_detector_sky130_fd_io__pwrdet.png
-   :name: power detector use case
-   :width: 6.10417in
-   :height: 5.89583in
-
-   Use case for the Power detector
-
-
-Block diagram
-^^^^^^^^^^^^^
-
-The following diagram shows the complete sub-blocks of the power detector in detail.
-
-.. figure:: figures/sky130_fd_io__top_pwrdet.png
-   :name: sky130_fd_io__top_pwrdet block diagram
-   :width: 6.50000in
-   :height: 6.71875in
-
-   :cell:`sky130_fd_io__top_pwrdet`
-
-Truth Table
-^^^^^^^^^^^
-
-The table below captures all steady state combinations of ``vddio_q,`` vccd and vddd1 for the vddio detector and explains the behavior of the vddio
-detector for each of the cases.
-
-.. table:: Truth Table for Power detector
-   :name: power detector truth table
-
-   +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+
-   | vccd  | vddd1 | ``vddio_q`` | vddio detector behavior                                 | Comment                                                            |
-   +=======+=======+=============+=========================================================+====================================================================+
-   | 0     | 0     | 0           | Output is floating.                                     | Chip shutdown                                                      |
-   +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+
-   | 0     | 0     | 1           | Output is floating.                                     | vddd is absent                                                     |
-   +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+
-   | 0     | 1     | 0           | The detector is unreliable in this condition            | Sec.2.4.9 of SAS calls out this condition.                         |
-   |       |       |             |                                                         | It states the circuit above is unreliable when vddio is 0          |
-   |       |       |             |                                                         | and ``vpwr_lv`` is 0, which is the case during POR and when XRES=0 |
-   +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+
-   | 0     | 1     | 1           | * Detector output will be high.                         | xres mode                                                          |
-   |       |       |             | * vccd=0 does not affect circuit behavior when vddio=1  |                                                                    |
-   +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+
-   | 1     | 0     | 0           | Output is floating.                                     | Invalid combination. Vccd cannot be ``1`` when vddd is 0           |
-   +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+
-   | 1     | 0     | 1           | Output is floating.                                     | Invalid combination. Vccd cannot be ``1`` when vddd is 0           |
-   +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+
-   | 1     | 1     | 0           | Output will be low. since ``vddio_q=0``                 | When vddio de-asserts in a working system -                        |
-   |       |       |             |                                                         | it what leads the system to reset as a result of it                |
-   +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+
-   | 1     | 1     | 1           | Output of detector is high.                             | Active mode.                                                       |
-   +-------+-------+-------------+---------------------------------------------------------+--------------------------------------------------------------------+
-
-The table below captures all steady state combinations of ``vddio_q,`` and vddd2 for the vddd detector and explains the behavior of the vddd detector for each of the cases.
-
-.. table:: Steady state combinations of ``vddio_q,`` and vddd2
-   :name: steady state vddio_q and vddd2
-
-   +-------------+-----------+----------------------+---------------------------+
-   | ``vddio_q`` | ``vddd2`` | vddd detector behavio| Comment                   |
-   +=============+===========+======================+===========================+
-   | 0           | 0         | Output is floating.  | Chip shutdown             |
-   +-------------+-----------+----------------------+---------------------------+
-   | 0           | 1         | Output is floating   | ``vddio_q`` (power supply |
-   |             |           |                      | of detector) is absent.   |
-   +-------------+-----------+----------------------+---------------------------+
-   | 1           | 0         | Output will be low,  | ``vddio_q`` is present    |
-   |             |           | since vddd2 =0       | and vddd2 is absent.      |
-   +-------------+-----------+----------------------+---------------------------+
-   | 1           | 1         | Output will be high, | Active mode.              |
-   |             |           | since vddd2=1        |                           |
-   +-------------+-----------+----------------------+---------------------------+
-
-
-The output of the level shifter will be zero when the power supply that is being detected is not present (=0).
-
-Block Integration Guidelines
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The cell uses metal routing untill Met3.
-Met4 and Met5 can be routed above this block.
-
-The ``rst_por_hv_n`` pin should be hooked up to the ``rst_por_hv_n`` coming from the SRSS IP for proper functionality.
-
-The cell does not include any circuitry for test mode control or for self-test.
-
-IP block test coverage goals should be met by asserting the inputs of the level shifter and observing the respective outputs.
-The block is mainly used to carry global enable signals and hence this functionality is tested implicitly.
-
-The detector outputs are buffered using buffer sizes similar to buf4 cell.
-The user must insert an additional buffer if one intends to cater to a higher load than that is supported by this buffer.
-
-The level shifter outputs are buffered to drive a 3pf load at about 10ns rise/fall times.
-Any additional load requirement must be taken care by inserting additional buffers.
-
-The reset signal connected to vddio detector should be high in steady state condition for proper functionality.
-
-If the VDDD detector is not to be used then the vddd2 has to be tied to ``vddio_q.``
-The inputs of the corresponding level shifters ``(in1_vddd_hv,`` ``in2_vddd_hv`` and ``in3_vddd_hv`` must be tied to ground.
-The outputs of the level shifters and detector must not be used anywhere.
-
-If the VDDIO detector is not planned to be used then the vddd1, ``rst_por_hv_n`` and vccd has to be tied to ``vddio_q.``
-The inputs of the corresponding level shifters ``(in1_vddio_hv,`` ``in2_vddio_hv`` and ``in3_vddio_hv`` must be tied to ground.
-The outputs of the level shifters and detector must not be used anywhere.
-
-This cell can be placed in critical corner.
-
-The cell has power connections in Met3.
-The power connections must be properly connected in Met4 and Met5 at the chip level.
-The MET4 and MET5 power hookups should be at least 6um.
-Minimum 10 VIA3 and VIA4 must be used in the power hookups.
-
-If the block is placed in the I/O ring in the ESD routing path the power bussing should follow that of the I/O ring.
-
-The vddio and vddd detectors were tested with 500mV, 10ns pulse width noise at 1 MHz and 25 MHz frequencies at the input power supply domain assuming
-no noise at the output power supply domain.
-
-The vddio and vddd detectors were tested with 500mV, 10ns pulse width noise at 1 MHz and 25 MHz frequencies at the output power supply domain assuming
-no noise at the input power supply domain.
-
-The vddio and vddd detectors were tested with 100mV, 10ns pulse width noise at 1 MHz and 25 MHz frequencies at the vssa domain.
-
-The vddio and vddd detectors were tested with 100mV, 10ns pulse width noise at 1 MHz and 25 MHz frequencies at the vssd and ``vssio_q`` domain.
-
-The outputs of the level shifters should be routed in Met2 of 0.5um width or Met3
-
-The default state of the level shifters outputs is zero.
-Hence the level shifters must be used to shift active high control signals to avoid glitches on this control signals during various power supply
-ramps.
-
-The power detector carries the ``enable_io`` signals to the :cell:`sky130_fd_io__sio` and :cell:`sky130_fd_io__gpio_ovtv2`.
-Hence any glitches on the VDDD level shifter output when VDDIO ramping will cause a possible glitch in I2C communication.
-The following table shows the outputs with various power supply ramp scenarios for the detector and level shifters outputs with the input to the level
-shifter driven by zero.
-
-.. table:: Power detector outputs with various power supply ramp scenarios
-   :name: power detector outputs
-
-   +--------+---------+---------+----------------+----------------+---------------+----------------+
-   | Case # | vddd    | vddio   | vddio detector | vddio Level    | vddd detector | vddd Level     |
-   |        |         |         | output         | shifter output | output        | shifter output |
-   +========+=========+=========+================+================+===============+================+
-   | 1      | Stable  | Ramping | no glitch      | no glitch      | glitches      | no glitch      |
-   +--------+---------+---------+----------------+----------------+---------------+----------------+
-   | 2      | Ramping | Stable  | glitches       | no glitch      | no glitch     | no glitch      |
-   +--------+---------+---------+----------------+----------------+---------------+----------------+
-   | 3      | Stable  | Stable  | no glitch      | no glitch      | no glitch     | no glitch      |
-   +--------+---------+---------+----------------+----------------+---------------+----------------+
-   | 4      | Ramping | Ramping | glitches       | glitches       | glitches      | glitches       |
-   +--------+---------+---------+----------------+----------------+---------------+----------------+
-
-**Case 1:** vddio ramp - vddd detector
-
-VDDIO detector is keeping system in reset, so ``enable_`` signals are 0.
-Hence LS input is being driven by 0, so a glitch on VDDD detector output is of no concern.
-
-**Case 2**: vddd ramp - vddio detector
-
-The system is not listening to output of VDDIO detector/level shifter when vddd ramps.
-Hence this is not a concern.
-
-**Case 3:** No concerns
-
-**Case 4:** Glitches on detector/level shifter outputs not a problem during concurrent ramps.
-
-The user must connect the power and ground to the less noisy sources.
-
-
-:lib:`sky130_fd_io` Pin Information
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-#. DFT, BIST Pins
-
-   As a summary, there is no additional DFT circuitry needed to test the :cell:`sky130_fd_io__gpio`.
-   However, DFT circuitry has been added to the :cell:`sky130_fd_io__sio` macro to test the references from the :cell:`sky130_fd_io__refgen` to the :cell:`sky130_fd_io__sio` macro.
-
-#. Bulk Pins
-
-   There are no bulk pins to the LV devices in this library.
-
-   Some high voltage pfet bodies are connected to their sources.
-   These pfet bodies are connected to the I/O supply ``vddio``.
-   There are some high voltage pfet bodies that are associated with the pad during an overvoltage or hot swap event.
-   When a hot swap or overvoltage event occurs, these bodies are connected to the pad otherwise they are connected to the I/O supply ``vddio``.
-
-   There are nfet bodies that do not connect to common ground.
-   These bodies are in an isolated psub and are connected to ``vssd``.
-   This is required in order to ensure that the threshold voltage does not change if substrate bias is applied.
-   Normally, this scheme is used in the input buffer to ensure that the input trip does not shift due to substrate biasing.
-
-#. Power Supply Pins
-
--  The :cell:`sky130_fd_io__gpio` cells use the main Vddio/Vssio connections for their ESD current steering diodes.
-
--  The main Vddio/Vssio power rails are used for the digital output driver only. A separately routed ``Vddio_quiet/Vssio_quiet`` bus is used for all lower current circuits.
-
--  Most LV logic is in the Vccd domain. A few signals are in the Vcchib domain to enable DeepSleep functionality.
-
--  The AMUXBUS section contains switches that are supplied from the Vdda domain. The gates are driven using the Vswitch supply, which is either equal to Vdda or pumped up from it. If the product has no Programmable Analog, these supplies can be connected to Vddio (e.g. TSGx).
-
--  The AMUXBUS section contains shunting switches to Vssio/Vddio for the sensing/shielding currents during CSD operation. These use the ``Vssio_quiet/Vddio_quiet`` rails with private routes to the corresponding Vssio/Vddio pads to minimize the noise experienced due to IR- Drop caused by switching current of regular digital drivers.
-
--  There are no control signals in the Vdda domain. Only the AMUXBUS buses themselves are in the Vdda domain.
-
-
-Timing Requirements and Diagrams
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The following diagrams apply to the input buffer AC parameters.
-
-.. figure:: figures/timing_diagram_gpio_tpd_trfout.png
-   :name: sky130_fd_io__gpio tpd trfout
-   :width: 5.17000in
-   :height: 3.50000in
-
-   :cell:`sky130_fd_io__gpio`, tPD, tRFout
-
-.. figure:: figures/timing_diagram_sio_tpd_trfout.png
-   :name: sky130_fd_io__sio tpd trfout
-   :width: 5.40000in
-   :height: 3.50000in
-
-   :cell:`sky130_fd_io__sio` tPD, tRFout
-
-.. figure:: figures/timing_diagram_gpio_sio_tdis_ten.png
-   :name: gpio sio tdis ten
-   :width: 5.40000in
-   :height: 2.48000in
-
-   :cell:`sky130_fd_io__gpio` & :cell:`sky130_fd_io__sio` tDIS, tEN
-
-The following timing diagrams apply to the output buffer AC parameters.
-
-.. figure:: figures/timing_diagram_gpio_tpd_trfout_tslew.png
-   :name: sky130_fd_io__gpio tpd trfout
-   :width: 5.40000in
-   :height: 3.45000in
-
-   :cell:`sky130_fd_io__gpio` tPD, tRFout (tSLEW)
-
-.. figure:: figures/timing_diagram_gpio_and_sio_non-regulated_outbuf_tolz_internal_measurement_method_for_tohz.png
-   :name: non-regulated outbuf tolz
-   :width: 5.40000in
-   :height: 3.44000in
-
-   :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` non-regulated outbuf tOLZ & internal measurement method for tOHZ
-
-.. figure:: figures/timing_diagram_gpio_and_sio_non-regulated_outbuf_tohz_external_measurement_method.png
-   :name: non-regulated outbuf tohz
-   :width: 5.40000in
-   :height: 2.91000in
-
-   :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` non-regulated outbuf tOHZ external measurement method
-
-.. figure:: figures/timing_diagram_sio_regulated_outbuf_ttrfout_tslew.png
-   :name: sky130_fd_io__sio regulated outbuf ttrfout
-   :width: 5.40000in
-   :height: 3.38000in
-
-   :cell:`sky130_fd_io__sio` regulated outbuf ttRFout(tSLEW)
-
-.. figure:: figures/timing_diagram_sio_regulated_outbuf_tolz_external_measurement_method_for_tohz.png
-   :name: sky130_fd_io__sio regulated outbuf tolz
-   :width: 5.40000in
-   :height: 3.62000in
-
-   :cell:`sky130_fd_io__sio` regulated outbuf tOLZ & external measurement method for tOHZ
-
-.. figure:: figures/timing_diagram_sio_regulated_outbuf_tohz_external_measurement_method.png
-   :name: sky130_fd_io__sio regulated outbuf tohz
-   :width: 5.40000in
-   :height: 3.16000in
-
-   :cell:`sky130_fd_io__sio` regulated outbuf tOHZ external measurement method
-
-.. figure:: figures/timing_diagram_gpio_and_sio_hold_state_mode_timing_diagram.png
-   :name: hold state mode timing diagram
-   :width: 5.40000in
-   :height: 3.25000in
-
-   :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` Hold State Mode Timing Diagram
-
-Block Level Interfaces
-~~~~~~~~~~~~~~~~~~~~~~
-
-The :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` cells interface with the core and the external world.
-These cells accept inputs from the core at ``vcchib``, ``vccd``, ``vdda`` and ``vddio`` voltage levels.
-The cell interfaces with the external world at ``vddio`` and ``vdda`` levels.
-This cell also produces output signals to the core at ``vcchib`` and ``vddio`` levels.
-``vcchib`` tracks vccd in normal operation and does not track ``vccd`` in sleep mode in which ``vddio`` and ``vcchib`` are up and ``vccd`` is down.
-
-The :cell:`sky130_fd_io__sio_macro` cell is like the :cell:`sky130_fd_io__gpio` cell and it also accepts analog voltage levels as inputs and produces analog voltages at the pad.
-
-The internal blocks on the ``vcchib`` power domain are input buffers and control logic for ``oe_hs`` (hot swap output enable).
-
-The Reference voltage generator block receives the vohref analog global signal and has low voltage input configuration signals
-(``vreg_en``, ``vref_sel`` , ``ibuf_sel`` , ``vtrip_sel`` ).
-This block provides ``voutref`` reference voltage and ``refleak_bias`` bias voltage for the :cell:`sky130_fd_io__sio` Regulated Output Buffer and the ``vinref`` reference
-voltage for the :cell:`sky130_fd_io__sio` differential input buffer.
-The internal blocks on the ``vcchib`` power domain is the internal current bias generator and a level shifter block, that controls that sub-block.
-
-The Reference voltage generator ``vcc_a`` pin must be connected to the analog supply of the chip, to reduce its noise sensitivity at its Vinref and
-Voutref outputs.
-This issue affects the supply noise sensitivity in the :cell:`sky130_fd_io__sio` input buffer and the :cell:`sky130_fd_io__sio` Regulated Output Buffer, respectively.
-
-Reset and Initialization
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-There are two resets to the I/O blocks -
-
--  ``Enable_h`` - This is a reset issued by the SRSS in VDDD (VDDIO) domain that resets everything when it is at logic 0 in the I/O block and ensures that the I/O blocks are tri-stated
-
--  ``Enable_vdda_h`` - This is reset issued by the SRSS in VDDA domain to ensure that any analog blocks in VDDA domain are reset when ``enable_vdda_h`` is at logic 0. This will ensure that any portions of the I/O (Analog Mux) that are tied to PAD are reset and the I/O block is in reset state.
-
-Power Modes
-~~~~~~~~~~~
-
-The :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` buffers support multiple standby modes.
-The following tables list the input and output standby modes and their dependency on the related control inputs.
-
-.. table:: :cell:`sky130_fd_io__gpio` & :cell:`sky130_fd_io__sio` Input Buffer Standby Modes
-   :name: input buffer standby modes
-
-   +--------------+-------------+---------+-------------------------------+
-   | ``enable_h`` | ``inp_dis`` | dm<2:0> | Standby Mode Description      |
-   +==============+=============+=========+===============================+
-   | 1            | X           | 000     | Input Buffer disabled         |
-   |              |             |         | by drive mode state           |
-   +--------------+-------------+---------+-------------------------------+
-   | 1            | 1           | XXX     | Input Buffer disabled         |
-   |              |             |         | by input buffer disable input |
-   +--------------+-------------+---------+-------------------------------+
-   | 0            | X           | XXX     | Input Buffer disabled         |
-   +--------------+-------------+---------+-------------------------------+
-
-.. table:: :cell:`sky130_fd_io__gpio` & :cell:`sky130_fd_io__sio` Output Buffer Standby Modes
-   :name: output buffer standby modes
-
-   +--------------+-------------+----------+---------+-----------------------------+
-   | ``enable_h`` | ``hld_h_n`` | ``oe_n`` | dm<2:0> | Standby Mode Description    |
-   +==============+=============+==========+=========+=============================+
-   | 1            | 1           | X        | 00X     | Output Buffer disabled      |
-   |              |             |          |         | by drive mode state         |
-   +--------------+-------------+----------+---------+-----------------------------+
-   | 1            | 1           | 1        | * 1XX   | Output Buffer disabled by   |
-   |              |             |          | * X1X   | output buffer enable signal |
-   +--------------+-------------+----------+---------+-----------------------------+
-   | 1            | 0           | X        | XXX     | Output Buffer maintains     |
-   |              |             |          |         | previous state              |
-   +--------------+-------------+----------+---------+-----------------------------+
-   | 0            | X           | X        | XXX     | Output Buffer tri-stated    |
-   +--------------+-------------+----------+---------+-----------------------------+
-
-The standby power consumption depends on the state of the control bits.
-For example, the lowest standby current mode is achieved when oe_n=1, inp_dis=1, dm<2:0>=000.
-During this mode the input and output buffer are permanently disabled allowing the circuits to be configured for minimal leakage current.
-
-For all control bit states not covered in :numref:`power detector outputs` and :numref:`input buffer standby modes` either the input buffer, output buffer, or both buffers will be enabled.
-During these modes the I/O buffer is considered active.
-The power consumption for these modes depends on the drive mode setting and the switching frequency.
-
-Register Definitions
-~~~~~~~~~~~~~~~~~~~~
-
-This IP contains latches to hold the previous state of the output when the hold state mode is selected.
-When the hold state mode is selected the internal power supply connected to the output path may float.
-The hold state latches are required to hold the previous output state regardless of the current state of the control signals.
-
-Power Architecture and Modes
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The IP cells include multiple power domains.
-In general there is a high voltage domain and a low voltage domain.
-The high voltage domain is supplied by the I/O power supply ``vddio``.
-There are no switched domains located inside the cell for the ``vddio`` power supply domain.
-
-The low voltage domain consists of two internally generated supplies, vccd and vcchib.
-The vccd supply is the regulated internal supply that can be forced low during low standby current modes.
-The vcchib supply is the low voltage regulated keep alive supply.
-This supply is kept active during low standby current modes and the level can drop to 1.2V.
-The chip team is responsible to correctly controlling the levels on these supplies during the appropriate modes of operation.
-
-Grounded Power Supplies
-~~~~~~~~~~~~~~~~~~~~~~~
-
-As there are multiple power supplies to the I/O's, no single power supply will be grounded while another supply is active.
-This will help alleviate the grounded NWELL issues that induce latch-up.
-It is OK to float a supply while another is active though.
-
-Block behavioral model requirements
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` input buffers are operating from the vcchib supply.
-This means that the input buffer can operate even when vccd is taken down to 0 or floats.
-But, note that before taking vccd=0 (or floating vccd), the hold mode must be asserted i.e.
-hld_h_n=0 must go to 0 before vccd is taken to 0.
-During the hold mode of operation and with vccd=0 (or floating), the input buffer can actively drive out depending on pad input if there is a valid
-I/O (vddio, vddioq and vcchib) power supply.
-This functionality is implemented in the behavioral model.
-If vccd=0 (or floats) and when the I/O is not in the hold mode of operation, the behavioral model would force an ``X`` on the outputs of the input
-buffer (``out`` and ``out_h``) and the input buffer cannot be actively driven from pad.
-
-Block Integration Requirements and Constraints
-----------------------------------------------
-
-General Integration Requirements
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The following is a list of items users must be aware of before using this IP.
-
-1. The IP cells described within this document are I/O cells and Power and Ground pads. Each cell (GPIO and :cell:`sky130_fd_io__sio`) contains an input and output buffer, with a bond pad.
-
-2. The circuit blocks do not include any circuitry for test mode control or for self-test. All input pin states will be exercisable in all product applications so that the IP block test coverage goals will be met.
-
-3. The control signal ``enable_h`` will override all other input and control pins to force the input and output to a predetermined state. When ``enable_h`` transitions from logic 0 to logic 1, the block expects all of the inputs to be valid state. If ``hld_h_n=0`` when the ``enable_h`` pin transitions 0->1 (inactive->active) the state set by ``enable_h`` is latched in the output driver.
-
-4. There is a separate ``enable_vdda_h`` control signal to the :cell:`sky130_fd_io__gpio`. This control signal is logic 0 when VDDA supply is ramping up. This control signal ensures that the AMUX is completely turned OFF when ``enable_vdda_h`` is at logic 0.
-
-5. It is permissible to externally connect the I/O pin to a voltage above vddio or below ``vssd_io``, provided that the current flowing into/out of the pin is externally limited to 100uA.
-
-6. The :cell:`sky130_fd_io__gpio` and :cell:`sky130_fd_io__sio` input buffers are operating from the vcchib supply. This means that the input buffer can operate even when vccd is taken down to 0V or floats. But note that before taking vccd=0 (or floating vccd), the hold mode must be asserted i.e. ``hld_h_n=0`` must go to 0 before vccd is taken to 0. During the hold mode of operation and with vccd=0 (or floating), the input buffer can actively drive out depending on pad input if there is a valid I/O (vddio, vddioq and vcchib) power supply. This functionality is implemented in the behavioral model. If vccd=0 (or floats) and when the I/O is not in the hold mode of operation, the behavioral model would force an ``X`` on the outputs of the input buffer (``out`` and ``out_h``) and the input buffer cannot be actively driven from pad.
-
-7. In hibernate mode, the I/P buffer just needs to toggle. It need not meet the VIH/VIL specs.
-
-8. The charge pump is powered down during startup and thus VSWITCH=VDDA during startup.
-
-9. ``tie_weak_hi_h`` signal for the :cell:`sky130_fd_io__top_xres3v2` is really a pull up and not intended to interact with any other intermediate strength drivers (weak, pull).
-
-10. For the cell :cell:`sky130_fd_io__top_axresv2`, glitch filter input (``filter_in_h``) is intended to be connected to only the :cell:`sky130_fd_io__gpio` output and no other uses are permitted.
-
-11. The glitch filter in :cell:`sky130_fd_io__top_xres2v2`, :cell:`sky130_fd_io__top_xres3v2` and :cell:`sky130_fd_io__top_axresv2` cells have metal1 option to increase/decrease the glitch rejection pulse width.
-
-12. When using the pad connections of the :cell:`sky130_fd_io__sio_macro`, care should be taken about power-domain interaction at PAD (when used as I2C pads). The :cell:`sky130_fd_io__sio_macro` has a tracking NWELL on its PAD which is driven to VDDIO when PAD<VDDIO. If a pad is being connected to a signal from any other power-domain other than VDDIO, power- supply sequencing issues must be analyzed at chip- level.
-
-
-1. Chip Floor planning guidelines when using :lib:`sky130_fd_io` to build I/O ring
-
-   The following information is a MUST know when using the :lib:`sky130_fd_io` library components to build an I/O ring.
-   Due to the complex nature of these I/O's and other PG pads, it is critical that the following matrix be understood when placing the cells that form
-   the I/O ring.
-
-   -  ALL cells CANNOT be abutted with each other. There are limitations because of the ESD LU rules and due to the different Deep NWELLS being used in different cells.
-
-   -  It is strongly recommended to run a DRC at the chip level as soon as the I/O cell placements are complete. Also, scheduling a preliminary ESD review is recommended before routing is started.
-
-2. Layout Integration guidelines specific to :cell:`sky130_fd_io__gpio`
-
-   1. The GPIO cell (:cell:`sky130_fd_io__top_gpio`) forms part of the I/O ring. If multiple instances of this cell are used, they must be mirrored and placed by abutment.
-
-   2. The boundary of the :cell:`sky130_fd_io__gpio` cell (PAD side) can be abutted with the seal ring. It takes care of the pad to seal ring rules internally.
-
-   3. The :cell:`sky130_fd_io__gpio` cell can be abutted to the rest of the cells in this IP by proper placement as documented below for the rest of the public cells.
-
-3. ``enable_h`` integration guidelines for :cell:`sky130_fd_io__gpio_ovtv2` and :cell:`sky130_fd_io__sio_macro`
-
-   Any product that has I2C ports and is claiming over-voltage tolerance needs to ensure that the glitch on ``enable_h`` coming into the :cell:`sky130_fd_io__top_gpio_ovtv2` or :cell:`sky130_fd_io__sio_macro` is less than 300mV.
-
-Scan Attributes to be used for :lib:`sky130_fd_io` cells
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-:cell:`sky130_fd_io__gpio`'s can be used as SCAN IN and SCAN Out pads based on the configuration.
-
-However, if a :cell:`sky130_fd_io__gpio` is configured as a SCAN IN pad, all the output buffer control signals can be toggled.
-Likewise, if the :cell:`sky130_fd_io__gpio` is used as a SCAN OUT pad, all the input buffer control signals can be toggled.
-
-.. table:: Control signals that can be toggled for public cells
-   :name: public cells control signals
-
-   +------+---------------------------------------+--------------------------+-----------------------------+----------------------+
-   | S.No | Public Cell                           | * Used as SCAN IN        | * Used as SCAN OUT          | * Others             |
-   |      |                                       | * dm[3]=001              | * dm=110                    | * ``analog_en=0``    |
-   |      |                                       | * ``analog_en=0``        | * ``inp_dis=1``             | * ``hld_vdda_h_n=0`` |
-   |      |                                       |                          | * ``analog_en=0``           |                      |
-   +======+=======================================+==========================+=============================+======================+
-   | 1    | :cell:`sky130_fd_io__top_gpiov2`      | * out                    | * ``vtrip_sel ib_mode_sel`` |                      |
-   |      |                                       | * ``oe_n``               | * ``analog_sel analog_pol`` |                      |
-   |      |                                       | * slow                   |                             |                      |
-   |      |                                       | * ``analog_sel``         |                             |                      |
-   |      |                                       | * ``analog_pol``         |                             |                      |
-   +------+---------------------------------------+--------------------------+-----------------------------+----------------------+
-   | 2    | :cell:`sky130_fd_io__top_gpio_ovtv2`  | * out                    | * ``vtrip_sel``             |                      |
-   |      |                                       | * ``oe_n``               | * ``ib_mode_sel<1:0>``      |                      |
-   |      |                                       | * slow                   | * ``analog_sel``            |                      |
-   |      |                                       | * ``analog_sel``         | * ``analog_pol``            |                      |
-   |      |                                       | * ``analog_pol``         | * ``hys_trim``              |                      |
-   |      |                                       | * ``hys_trim``           | * ``slew_ctl<1:0>``         |                      |
-   |      |                                       | * ``slew_ctl<1:0>``      |                             |                      |
-   +------+---------------------------------------+--------------------------+-----------------------------+----------------------+
-   | 3    | :cell:`sky130_fd_io__sio_macro`       | * ``inp_dis=0``          | * ``vreg_en=0``             |                      |
-   |      |                                       | * ``vtrip_sel=0``        | * ``vreg_en_refgen=0``      |                      |
-   |      | (assuming both the pad in macro       | * ``hld_h_n=1``          | * ``vtrip_sel<1:0>``        |                      |
-   |      | are used the same way)                |                          |                             |                      |
-   |      |                                       | * ``ibuf_sel=0``         | * ``ibuf_sel<1:0>``         |                      |
-   |      |                                       | * ``vreg_en_refgen=0``   | * ``voh_sel<2:0>``          |                      |
-   |      |                                       | * out<1:0>               | * ``vref_sel<1:0>``         |                      |
-   |      |                                       | * ``oe_n<1:0>``          | * ``vtrip_sel_refgen``      |                      |
-   |      |                                       | * slow<1:0>              | * ``ibuf_sel_refgen``       |                      |
-   |      |                                       | * ``voh_sel<1:0>``       | * ``dft_refgen=0``          |                      |
-   |      |                                       | * ``vref_sel<1:0>``      |                             |                      |
-   |      |                                       | * ``vtrip_sel_refgen=0`` |                             |                      |
-   |      |                                       | * ``ibuf_sel_refgen=0``  |                             |                      |
-   |      |                                       | * ``dft_refgen=0``       |                             |                      |
-   +------+---------------------------------------+--------------------------+-----------------------------+----------------------+
-   | 4    | :cell:`sky130_fd_io__top_amuxsplitv2` |                          |                             | * ``switch_aa_sl``   |
-   |      |                                       |                          |                             | * ``switch_aa_sr``   |
-   |      |                                       |                          |                             | * ``switch_aa_s0``   |
-   |      |                                       |                          |                             | * ``switch_bb_sl``   |
-   |      |                                       |                          |                             | * ``switch_bb_sr``   |
-   |      |                                       |                          |                             | * ``switch_bb_s0``   |
-   +------+---------------------------------------+--------------------------+-----------------------------+----------------------+
diff --git a/libraries/sky130_fd_io/v0.0.1 b/libraries/sky130_fd_io/v0.0.1
new file mode 160000
index 0000000..e89f551
--- /dev/null
+++ b/libraries/sky130_fd_io/v0.0.1
@@ -0,0 +1 @@
+Subproject commit e89f551c5b934870b1eeef1898d410554713fb74
diff --git a/libraries/sky130_fd_io/v0.0.2 b/libraries/sky130_fd_io/v0.0.2
new file mode 160000
index 0000000..4048fc6
--- /dev/null
+++ b/libraries/sky130_fd_io/v0.0.2
@@ -0,0 +1 @@
+Subproject commit 4048fc6e03b5a246a1287777ac4f0e4a99ef484f
diff --git a/libraries/sky130_fd_io/v0.1.0 b/libraries/sky130_fd_io/v0.1.0
new file mode 160000
index 0000000..40adf19
--- /dev/null
+++ b/libraries/sky130_fd_io/v0.1.0
@@ -0,0 +1 @@
+Subproject commit 40adf19b0baa59da5fb0b8b8b63d0e52dc8697c6
diff --git a/libraries/sky130_fd_io/v0.2.0 b/libraries/sky130_fd_io/v0.2.0
new file mode 160000
index 0000000..80ef9b2
--- /dev/null
+++ b/libraries/sky130_fd_io/v0.2.0
@@ -0,0 +1 @@
+Subproject commit 80ef9b27e7e677f4c0e9f9ee39ea94b9cd261f39
diff --git a/libraries/sky130_fd_io/v0.2.1 b/libraries/sky130_fd_io/v0.2.1
new file mode 160000
index 0000000..01b1869
--- /dev/null
+++ b/libraries/sky130_fd_io/v0.2.1
@@ -0,0 +1 @@
+Subproject commit 01b18699b4102d8e54ad1406b3991ecb652e5aee
diff --git a/libraries/sky130_fd_pr/latest b/libraries/sky130_fd_pr/latest
index 6b9ba08..f62031a 160000
--- a/libraries/sky130_fd_pr/latest
+++ b/libraries/sky130_fd_pr/latest
@@ -1 +1 @@
-Subproject commit 6b9ba083ee94f92e2702f9993f3e5b9fe71beef7
+Subproject commit f62031a1be9aefe902d6d54cddd6f59b57627436
diff --git a/libraries/sky130_fd_pr/v0.10.0 b/libraries/sky130_fd_pr/v0.10.0
index 54c1ee1..6a45d86 160000
--- a/libraries/sky130_fd_pr/v0.10.0
+++ b/libraries/sky130_fd_pr/v0.10.0
@@ -1 +1 @@
-Subproject commit 54c1ee17b8482cb0a0ab981a68f1fefb39c5e790
+Subproject commit 6a45d866c3d92404c024419c16ca3ea2fbbde18b
diff --git a/libraries/sky130_fd_pr/v0.10.1 b/libraries/sky130_fd_pr/v0.10.1
index 46a6658..5f8c221 160000
--- a/libraries/sky130_fd_pr/v0.10.1
+++ b/libraries/sky130_fd_pr/v0.10.1
@@ -1 +1 @@
-Subproject commit 46a665858883cf44b09fad0777aa32b9527d8f30
+Subproject commit 5f8c22105c91565be4eb1ff020180cc1aba5ef8c
diff --git a/libraries/sky130_fd_pr/v0.11.0 b/libraries/sky130_fd_pr/v0.11.0
index 4596aee..c424389 160000
--- a/libraries/sky130_fd_pr/v0.11.0
+++ b/libraries/sky130_fd_pr/v0.11.0
@@ -1 +1 @@
-Subproject commit 4596aee61b03570235f987cc33df9733983214f0
+Subproject commit c424389932c4d81256fb892d11f6a2c814af6b1e
diff --git a/libraries/sky130_fd_pr/v0.12.0 b/libraries/sky130_fd_pr/v0.12.0
index 30e5e33..0cd300e 160000
--- a/libraries/sky130_fd_pr/v0.12.0
+++ b/libraries/sky130_fd_pr/v0.12.0
@@ -1 +1 @@
-Subproject commit 30e5e33ed4259974cd851867c6df30a4b74914ce
+Subproject commit 0cd300eedf6c91b53bf6a3574718e9d2405e6c13
diff --git a/libraries/sky130_fd_pr/v0.12.1 b/libraries/sky130_fd_pr/v0.12.1
index 3f9ec20..be3566d 160000
--- a/libraries/sky130_fd_pr/v0.12.1
+++ b/libraries/sky130_fd_pr/v0.12.1
@@ -1 +1 @@
-Subproject commit 3f9ec205ee5fd6a815d56b7677de13d4c174a958
+Subproject commit be3566d27f9fb3f96d788caa23887931c376189e
diff --git a/libraries/sky130_fd_pr/v0.13.0 b/libraries/sky130_fd_pr/v0.13.0
index 29fa6f3..32aede2 160000
--- a/libraries/sky130_fd_pr/v0.13.0
+++ b/libraries/sky130_fd_pr/v0.13.0
@@ -1 +1 @@
-Subproject commit 29fa6f30f471694c6d7f6376233634600f82660f
+Subproject commit 32aede2994dd27cd791155e0aa1a73a5785af617
diff --git a/libraries/sky130_fd_pr/v0.20.0 b/libraries/sky130_fd_pr/v0.20.0
index 66a8c2d..9e08415 160000
--- a/libraries/sky130_fd_pr/v0.20.0
+++ b/libraries/sky130_fd_pr/v0.20.0
@@ -1 +1 @@
-Subproject commit 66a8c2dbd82743ac39bb9cb33bf6fd3a6762ed82
+Subproject commit 9e08415b20a813ba7038177da5f18aaaaea0b56b
diff --git a/libraries/sky130_fd_pr/v0.20.1 b/libraries/sky130_fd_pr/v0.20.1
index 6b9ba08..f62031a 160000
--- a/libraries/sky130_fd_pr/v0.20.1
+++ b/libraries/sky130_fd_pr/v0.20.1
@@ -1 +1 @@
-Subproject commit 6b9ba083ee94f92e2702f9993f3e5b9fe71beef7
+Subproject commit f62031a1be9aefe902d6d54cddd6f59b57627436
diff --git a/libraries/sky130_fd_sc_hd/latest b/libraries/sky130_fd_sc_hd/latest
index 8d095dc..ac7fb61 160000
--- a/libraries/sky130_fd_sc_hd/latest
+++ b/libraries/sky130_fd_sc_hd/latest
@@ -1 +1 @@
-Subproject commit 8d095dc6f5885aa313e4361554af211147ade578
+Subproject commit ac7fb61f06e6470b94e8afdf7c25268f62fbd7b1
diff --git a/libraries/sky130_fd_sc_hd/v0.0.1 b/libraries/sky130_fd_sc_hd/v0.0.1
index 3aaa84e..28c101f 160000
--- a/libraries/sky130_fd_sc_hd/v0.0.1
+++ b/libraries/sky130_fd_sc_hd/v0.0.1
@@ -1 +1 @@
-Subproject commit 3aaa84ef44ed5e3e7b84a10b964f2016f2d5645b
+Subproject commit 28c101fc5db17bb6cadefa4c2a146693c685f1dc
diff --git a/libraries/sky130_fd_sc_hd/v0.0.2 b/libraries/sky130_fd_sc_hd/v0.0.2
index 8d095dc..ac7fb61 160000
--- a/libraries/sky130_fd_sc_hd/v0.0.2
+++ b/libraries/sky130_fd_sc_hd/v0.0.2
@@ -1 +1 @@
-Subproject commit 8d095dc6f5885aa313e4361554af211147ade578
+Subproject commit ac7fb61f06e6470b94e8afdf7c25268f62fbd7b1
diff --git a/libraries/sky130_fd_sc_hdll/latest b/libraries/sky130_fd_sc_hdll/latest
index 77450af..0694bd2 160000
--- a/libraries/sky130_fd_sc_hdll/latest
+++ b/libraries/sky130_fd_sc_hdll/latest
@@ -1 +1 @@
-Subproject commit 77450af723b17579499b77bfeab67e068c43cb6d
+Subproject commit 0694bd23893de20f5233ef024acf6cca1e750ac6
diff --git a/libraries/sky130_fd_sc_hdll/v0.1.0 b/libraries/sky130_fd_sc_hdll/v0.1.0
index 82ea126..d1039a8 160000
--- a/libraries/sky130_fd_sc_hdll/v0.1.0
+++ b/libraries/sky130_fd_sc_hdll/v0.1.0
@@ -1 +1 @@
-Subproject commit 82ea1266014d437ca31e456ccb8fa0ea4bcb3754
+Subproject commit d1039a882dd3872301200be3fc87210f8bfccef2
diff --git a/libraries/sky130_fd_sc_hdll/v0.1.1 b/libraries/sky130_fd_sc_hdll/v0.1.1
index 77450af..0694bd2 160000
--- a/libraries/sky130_fd_sc_hdll/v0.1.1
+++ b/libraries/sky130_fd_sc_hdll/v0.1.1
@@ -1 +1 @@
-Subproject commit 77450af723b17579499b77bfeab67e068c43cb6d
+Subproject commit 0694bd23893de20f5233ef024acf6cca1e750ac6
diff --git a/libraries/sky130_fd_sc_hs/latest b/libraries/sky130_fd_sc_hs/latest
index 2d165a2..1d051f4 160000
--- a/libraries/sky130_fd_sc_hs/latest
+++ b/libraries/sky130_fd_sc_hs/latest
@@ -1 +1 @@
-Subproject commit 2d165a2ffdb4e632ed4ffbb52ac19f49d1be04a6
+Subproject commit 1d051f49bfe4e2fe9108d702a8bc2e9c081005a4
diff --git a/libraries/sky130_fd_sc_hs/v0.0.1 b/libraries/sky130_fd_sc_hs/v0.0.1
index b81bfbb..81f5034 160000
--- a/libraries/sky130_fd_sc_hs/v0.0.1
+++ b/libraries/sky130_fd_sc_hs/v0.0.1
@@ -1 +1 @@
-Subproject commit b81bfbb8d3bda76d4795f6a5ea041014fda2ae40
+Subproject commit 81f50340c068801dd2fd07d4343be6b28e241a9d
diff --git a/libraries/sky130_fd_sc_hs/v0.0.2 b/libraries/sky130_fd_sc_hs/v0.0.2
index 2d165a2..1d051f4 160000
--- a/libraries/sky130_fd_sc_hs/v0.0.2
+++ b/libraries/sky130_fd_sc_hs/v0.0.2
@@ -1 +1 @@
-Subproject commit 2d165a2ffdb4e632ed4ffbb52ac19f49d1be04a6
+Subproject commit 1d051f49bfe4e2fe9108d702a8bc2e9c081005a4
diff --git a/libraries/sky130_fd_sc_hvl/latest b/libraries/sky130_fd_sc_hvl/latest
new file mode 160000
index 0000000..4fd4f85
--- /dev/null
+++ b/libraries/sky130_fd_sc_hvl/latest
@@ -0,0 +1 @@
+Subproject commit 4fd4f858d16c558a6a488b200649e909bb4dd800
diff --git a/libraries/sky130_fd_sc_hvl/v0.0.1 b/libraries/sky130_fd_sc_hvl/v0.0.1
new file mode 160000
index 0000000..c86542d
--- /dev/null
+++ b/libraries/sky130_fd_sc_hvl/v0.0.1
@@ -0,0 +1 @@
+Subproject commit c86542d2d658a2fa689b2266d4e4e227a660fcc9
diff --git a/libraries/sky130_fd_sc_hvl/v0.0.2 b/libraries/sky130_fd_sc_hvl/v0.0.2
new file mode 160000
index 0000000..fc47788
--- /dev/null
+++ b/libraries/sky130_fd_sc_hvl/v0.0.2
@@ -0,0 +1 @@
+Subproject commit fc477882eaf986336a069c62b70a67d45487a4d7
diff --git a/libraries/sky130_fd_sc_hvl/v0.0.3 b/libraries/sky130_fd_sc_hvl/v0.0.3
new file mode 160000
index 0000000..4fd4f85
--- /dev/null
+++ b/libraries/sky130_fd_sc_hvl/v0.0.3
@@ -0,0 +1 @@
+Subproject commit 4fd4f858d16c558a6a488b200649e909bb4dd800
diff --git a/libraries/sky130_fd_sc_lp/latest b/libraries/sky130_fd_sc_lp/latest
new file mode 160000
index 0000000..e2c1e06
--- /dev/null
+++ b/libraries/sky130_fd_sc_lp/latest
@@ -0,0 +1 @@
+Subproject commit e2c1e0646999163d35ea7b2521c3ec5c28633e63
diff --git a/libraries/sky130_fd_sc_lp/v0.0.1 b/libraries/sky130_fd_sc_lp/v0.0.1
new file mode 160000
index 0000000..9ade3f1
--- /dev/null
+++ b/libraries/sky130_fd_sc_lp/v0.0.1
@@ -0,0 +1 @@
+Subproject commit 9ade3f192eba16db62624174859690211a660806
diff --git a/libraries/sky130_fd_sc_lp/v0.0.2 b/libraries/sky130_fd_sc_lp/v0.0.2
new file mode 160000
index 0000000..e2c1e06
--- /dev/null
+++ b/libraries/sky130_fd_sc_lp/v0.0.2
@@ -0,0 +1 @@
+Subproject commit e2c1e0646999163d35ea7b2521c3ec5c28633e63
diff --git a/libraries/sky130_fd_sc_ls/latest b/libraries/sky130_fd_sc_ls/latest
index edfe6c9..4f549e3 160000
--- a/libraries/sky130_fd_sc_ls/latest
+++ b/libraries/sky130_fd_sc_ls/latest
@@ -1 +1 @@
-Subproject commit edfe6c90b31e9fb2ef51d367f349da61bd147037
+Subproject commit 4f549e30dd91a1c264f8895e07b2872fe410a8c2
diff --git a/libraries/sky130_fd_sc_ls/v0.1.0 b/libraries/sky130_fd_sc_ls/v0.1.0
index 72e0ddf..f708041 160000
--- a/libraries/sky130_fd_sc_ls/v0.1.0
+++ b/libraries/sky130_fd_sc_ls/v0.1.0
@@ -1 +1 @@
-Subproject commit 72e0ddf7a52ffcfd32815fbd2cfa789a67bdd8c6
+Subproject commit f708041e13e5ecb855329744ac8e3c587db554af
diff --git a/libraries/sky130_fd_sc_ls/v0.1.1 b/libraries/sky130_fd_sc_ls/v0.1.1
index edfe6c9..4f549e3 160000
--- a/libraries/sky130_fd_sc_ls/v0.1.1
+++ b/libraries/sky130_fd_sc_ls/v0.1.1
@@ -1 +1 @@
-Subproject commit edfe6c90b31e9fb2ef51d367f349da61bd147037
+Subproject commit 4f549e30dd91a1c264f8895e07b2872fe410a8c2
diff --git a/libraries/sky130_fd_sc_ms/latest b/libraries/sky130_fd_sc_ms/latest
index 175daa5..ae1b7f6 160000
--- a/libraries/sky130_fd_sc_ms/latest
+++ b/libraries/sky130_fd_sc_ms/latest
@@ -1 +1 @@
-Subproject commit 175daa5e853a5aef8d35f3330982d52890203932
+Subproject commit ae1b7f68821505cf2d93d9d44cce5ece22710fad
diff --git a/libraries/sky130_fd_sc_ms/v0.0.1 b/libraries/sky130_fd_sc_ms/v0.0.1
index a2ecab1..14d70b1 160000
--- a/libraries/sky130_fd_sc_ms/v0.0.1
+++ b/libraries/sky130_fd_sc_ms/v0.0.1
@@ -1 +1 @@
-Subproject commit a2ecab114d032eb71ae216af570e37bbdc66e7e2
+Subproject commit 14d70b1f15931f2eeb093a2ea10e350c19dd88f9
diff --git a/libraries/sky130_fd_sc_ms/v0.0.2 b/libraries/sky130_fd_sc_ms/v0.0.2
index 175daa5..ae1b7f6 160000
--- a/libraries/sky130_fd_sc_ms/v0.0.2
+++ b/libraries/sky130_fd_sc_ms/v0.0.2
@@ -1 +1 @@
-Subproject commit 175daa5e853a5aef8d35f3330982d52890203932
+Subproject commit ae1b7f68821505cf2d93d9d44cce5ece22710fad
diff --git a/scripts/make/conda.mk b/scripts/make/conda.mk
deleted file mode 100644
index 0370295..0000000
--- a/scripts/make/conda.mk
+++ /dev/null
@@ -1,114 +0,0 @@
-# Copyright 2020 SkyWater PDK Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# SPDX-License-Identifier: Apache-2.0
-
-
-SHELL := /bin/bash
-
-UNAME_S := $(shell uname -s)
-ifneq (, $(findstring Linux, $(UNAME_S)))
-        OSFLAG := Linux
-endif
-ifeq ($(UNAME_S), Darwin)
-        OSFLAG := MacOSX
-endif
-ifneq (, $(findstring Cygwin, $(UNAME_S)))
-        OSFLAG := Linux
-endif
-ifneq (, $(findstring MINGW, $(UNAME_S)))
-        OSFLAG := Linux
-endif
-
-MAKE_DIR          := $(dir $(lastword $(MAKEFILE_LIST)))
-TOP_DIR           := $(realpath $(MAKE_DIR)/../..)
-ENV_DIR           := $(TOP_DIR)/env
-REQUIREMENTS_FILE := $(TOP_DIR)/requirements.txt
-ENVIRONMENT_FILE  := $(TOP_DIR)/environment.yml
-
-CONDA_DIR         := $(ENV_DIR)/conda
-DOWNLOADS_DIR     := $(ENV_DIR)/downloads
-CONDA_PYTHON      := $(CONDA_DIR)/bin/python
-CONDA_PKGS_DIR    := $(DOWNLOADS_DIR)/conda-pkgs
-CONDA_PKGS_DEP    := $(CONDA_PKGS_DIR)/urls.txt
-CONDA_ENV_NAME    := skywater-pdk-scripts
-CONDA_ENV_PYTHON  := $(CONDA_DIR)/envs/$(CONDA_ENV_NAME)/bin/python
-IN_CONDA_ENV_BASE := source $(CONDA_DIR)/bin/activate &&
-IN_CONDA_ENV      := $(IN_CONDA_ENV_BASE) conda activate $(CONDA_ENV_NAME) &&
-
-$(ENV_DIR): | $(DOWNLOADS_DIR)
-	mkdir -p $(END_DIR)
-
-$(DOWNLOADS_DIR):
-	mkdir -p $(DOWNLOADS_DIR)
-
-$(DOWNLOADS_DIR)/Miniconda3-latest-$(OSFLAG)-x86_64.sh: | $(DOWNLOADS_DIR)
-	wget https://repo.anaconda.com/miniconda/Miniconda3-latest-$(OSFLAG)-x86_64.sh -O $(DOWNLOADS_DIR)/Miniconda3-latest-$(OSFLAG)-x86_64.sh
-	chmod a+x $(DOWNLOADS_DIR)/Miniconda3-latest-$(OSFLAG)-x86_64.sh
-
-$(CONDA_PKGS_DEP): $(CONDA_PYTHON)
-	$(IN_CONDA_ENV_BASE) conda config --system --add pkgs_dirs $(CONDA_PKGS_DIR)
-
-$(CONDA_PYTHON): $(DOWNLOADS_DIR)/Miniconda3-latest-$(OSFLAG)-x86_64.sh
-	$(DOWNLOADS_DIR)/Miniconda3-latest-$(OSFLAG)-x86_64.sh -p $(CONDA_DIR) -b -f
-	touch $(CONDA_PYTHON)
-
-$(CONDA_DIR)/envs: $(CONDA_PYTHON)
-	$(IN_CONDA_ENV_BASE) conda config --system --add envs_dirs $(CONDA_DIR)/envs
-
-$(CONDA_ENV_PYTHON): $(ENVIRONMENT_FILE) $(REQUIREMENTS_FILE) | $(CONDA_PYTHON) $(CONDA_DIR)/envs $(CONDA_PKGS_DEP)
-	$(IN_CONDA_ENV_BASE) conda env update --name $(CONDA_ENV_NAME) --file $(ENVIRONMENT_FILE)
-	touch $(CONDA_ENV_PYTHON)
-
-env: $(CONDA_ENV_PYTHON)
-	$(IN_CONDA_ENV) conda info
-
-.PHONY: env
-
-enter: $(CONDA_ENV_PYTHON)
-	$(IN_CONDA_ENV) bash
-
-.PHONY: enter
-
-clean:
-	rm -rf env/conda
-
-.PHONY: clean
-
-dist-clean:
-	rm -rf conda
-
-.PHONY: dist-clean
-
-
-FILTER_TOP = sed -e's@$(TOP_DIR)/@$$TOP_DIR/@'
-env-info:
-	@echo "             Top level directory is: '$(TOP_DIR)'"
-	@echo "              The version number is: '$$(git describe)'"
-	@echo "            Git repository is using: $$(du -h -s $(TOP_DIR)/.git | sed -e's/\s.*//')" \
-		| $(FILTER_TOP)
-	@echo
-	@echo "     Environment setup directory is: '$(ENV_DIR)'" \
-		| $(FILTER_TOP)
-	@echo "    Download and cache directory is: '$(DOWNLOADS_DIR)' (using $$(du -h -s $(DOWNLOADS_DIR) | sed -e's/\s.*//'))" \
-		| $(FILTER_TOP)
-	@echo "               Conda's directory is: '$(CONDA_DIR)' (using $$(du -h -s $(CONDA_DIR) | sed -e's/\s.*//'))" \
-		| $(FILTER_TOP)
-	@echo " Conda's packages download cache is: '$(CONDA_PKGS_DIR)' (using $$(du -h -s $(CONDA_PKGS_DIR) | sed -e's/\s.*//'))" \
-		| $(FILTER_TOP)
-	@echo "           Conda's Python binary is: '$(CONDA_ENV_PYTHON)'"\
-		| $(FILTER_TOP)
-
-
-.PHONY: info
diff --git a/third_party/make-env b/third_party/make-env
new file mode 160000
index 0000000..9b07ad2
--- /dev/null
+++ b/third_party/make-env
@@ -0,0 +1 @@
+Subproject commit 9b07ad2bb62fbf8af789c9e4669715c974b4912d