Fixing the `power_gating_pin`.

Updating sky130_fd_sc_lp 0.0.1.

Signed-off-by: Tim 'mithro' Ansell <me@mith.ro>
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_100C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_100C_1v95.lib.json
index 281bf65..7de0b3b 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_100C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_100C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_125C_3v15.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_125C_3v15.lib.json
index 1d07d4c..eb4d175 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_125C_3v15.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_125C_3v15.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_140C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_140C_1v95.lib.json
index b41f589..c88970f 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_140C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_140C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_150C_2v05.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_150C_2v05.lib.json
index 84f1c9c..5a6dccf 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_150C_2v05.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_150C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_1v56.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_1v56.lib.json
index 181ba7b..c188000 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_1v56.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_1v56.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_1v76.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_1v76.lib.json
index 7ce5a92..2ab3079 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_1v76.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_1v76.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_1v95.lib.json
index 6a20a17..ee6e572 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_2v05.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_2v05.lib.json
index 899e7f4..be5108d 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_2v05.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ff_n40C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_100C_1v60.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_100C_1v60.lib.json
index 9aa1995..46f1fd3 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_100C_1v60.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_100C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_140C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_140C_1v65.lib.json
index fd14c1d..5c12347 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_140C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_140C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_150C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_150C_1v65.lib.json
index 01569e3..9ddf92f 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_150C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_150C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_n40C_1v55.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_n40C_1v55.lib.json
index acff2f5..e8a5a8a 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_n40C_1v55.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_n40C_1v55.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_n40C_1v60.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_n40C_1v60.lib.json
index 866e4a5..1e5b2f3 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_n40C_1v60.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_n40C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_n40C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_n40C_1v65.lib.json
index ca4bca1..05dc880 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_n40C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_0__ss_n40C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_100C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_100C_1v95.lib.json
index f512c0b..a859759 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_100C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_125C_3v15.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_125C_3v15.lib.json
index 06cfdbe..ec2ac7f 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_125C_3v15.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_140C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_140C_1v95.lib.json
index c13b2ef..2e22265 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_140C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_150C_2v05.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_150C_2v05.lib.json
index 69134ad..92c2dcc 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_150C_2v05.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_1v56.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_1v56.lib.json
index 595caf5..83136ed 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_1v56.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_1v76.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_1v76.lib.json
index dc568df..5f0ba04 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_1v76.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_1v95.lib.json
index 84e354b..59ddb5a 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_2v05.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_2v05.lib.json
index d043c6e..01506c1 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_2v05.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_100C_1v60.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_100C_1v60.lib.json
index c7794c2..09ef14d 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_100C_1v60.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_140C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_140C_1v65.lib.json
index 84465bd..f9fe65d 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_140C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_150C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_150C_1v65.lib.json
index cd199a9..5089b74 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_150C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_n40C_1v55.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_n40C_1v55.lib.json
index e132e10..4f20561 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_n40C_1v55.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_n40C_1v60.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_n40C_1v60.lib.json
index d622461..60205de 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_n40C_1v60.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_n40C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_n40C_1v65.lib.json
index a57cdb0..645985c 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_n40C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_1__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_100C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_100C_1v95.lib.json
index 5e056b3..4c676d8 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_100C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_125C_3v15.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_125C_3v15.lib.json
index c2e5c02..1e8f872 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_125C_3v15.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_140C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_140C_1v95.lib.json
index 8cfca91..30af655 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_140C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_150C_2v05.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_150C_2v05.lib.json
index 47aa7d5..5784d62 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_150C_2v05.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_1v56.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_1v56.lib.json
index 0500db5..d8f990e 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_1v56.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_1v76.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_1v76.lib.json
index 6d1ccc8..a691151 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_1v76.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_1v95.lib.json
index 1236317..e0e3313 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_2v05.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_2v05.lib.json
index e46a889..1c6ea60 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_2v05.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_100C_1v60.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_100C_1v60.lib.json
index f29ad64..a31cd67 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_100C_1v60.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_140C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_140C_1v65.lib.json
index a95b45a..17d67f8 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_140C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_150C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_150C_1v65.lib.json
index 16f965a..fb00b59 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_150C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_n40C_1v55.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_n40C_1v55.lib.json
index e23a40b..f58f29e 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_n40C_1v55.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_n40C_1v60.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_n40C_1v60.lib.json
index 692129b..8ad2834 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_n40C_1v60.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_n40C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_n40C_1v65.lib.json
index 69aca12..a9fe88b 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_n40C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_2__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_100C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_100C_1v95.lib.json
index 9ddbe60..801da6b 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_100C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_125C_3v15.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_125C_3v15.lib.json
index d186631..7e12bb5 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_125C_3v15.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_140C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_140C_1v95.lib.json
index c5f4961..fffeade 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_140C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_150C_2v05.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_150C_2v05.lib.json
index e613918..c27fd75 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_150C_2v05.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_1v56.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_1v56.lib.json
index 5e1dbcd..bc909d9 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_1v56.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_1v76.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_1v76.lib.json
index bd94180..dad1fed 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_1v76.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_1v95.lib.json
index 447e3c3..917a5b7 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_2v05.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_2v05.lib.json
index b37a324..5bce703 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_2v05.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_100C_1v60.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_100C_1v60.lib.json
index ad0bda4..a5ae149 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_100C_1v60.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_140C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_140C_1v65.lib.json
index 01dae01..b6d4e62 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_140C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_150C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_150C_1v65.lib.json
index ee3aa76..409fe89 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_150C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_n40C_1v55.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_n40C_1v55.lib.json
index 903b35b..37fe671 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_n40C_1v55.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_n40C_1v60.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_n40C_1v60.lib.json
index f390a8e..bb5de5b 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_n40C_1v60.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_n40C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_n40C_1v65.lib.json
index 6c623d9..ee3d062 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_n40C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_4__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_100C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_100C_1v95.lib.json
index ef81836..a93b8ff 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_100C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_125C_3v15.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_125C_3v15.lib.json
index 723f189..dbcf71e 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_125C_3v15.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_140C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_140C_1v95.lib.json
index 6477265..d55b7bb 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_140C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_150C_2v05.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_150C_2v05.lib.json
index 345df03..531ae87 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_150C_2v05.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_1v56.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_1v56.lib.json
index 9c0f083..1d59361 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_1v56.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_1v76.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_1v76.lib.json
index 4053fc8..676494c 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_1v76.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_1v95.lib.json
index d10577b..bb70836 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_2v05.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_2v05.lib.json
index 52bc718..0a00e97 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_2v05.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_100C_1v60.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_100C_1v60.lib.json
index b6ec57e..c83f798 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_100C_1v60.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_140C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_140C_1v65.lib.json
index 645f538..a78ebe4 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_140C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_150C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_150C_1v65.lib.json
index a74d4a8..4b5a36a 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_150C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_n40C_1v55.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_n40C_1v55.lib.json
index f6fabed..beca029 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_n40C_1v55.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_n40C_1v60.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_n40C_1v60.lib.json
index 71093cf..141a215 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_n40C_1v60.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_n40C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_n40C_1v65.lib.json
index b645df8..11ed7ec 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_n40C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_lp__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_100C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_100C_1v95.lib.json
index ab28b72..5759947 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_100C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_100C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_125C_3v15.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_125C_3v15.lib.json
index ca8fd03..e05257c 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_125C_3v15.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_125C_3v15.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_140C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_140C_1v95.lib.json
index 5d1087e..d80603b 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_140C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_140C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_150C_2v05.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_150C_2v05.lib.json
index 5741455..c9cbdce 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_150C_2v05.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_150C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_1v56.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_1v56.lib.json
index 9ef359a..805d6b8 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_1v56.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_1v56.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_1v76.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_1v76.lib.json
index 15bd8ca..fb870e6 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_1v76.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_1v76.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_1v95.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_1v95.lib.json
index 6287c9f..423249e 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_1v95.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_2v05.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_2v05.lib.json
index 746c795..a8d805c 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_2v05.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ff_n40C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_100C_1v60.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_100C_1v60.lib.json
index 8c47cfc..196bb9f 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_100C_1v60.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_100C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_140C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_140C_1v65.lib.json
index 20e5ad3..8cbd233 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_140C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_140C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_150C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_150C_1v65.lib.json
index d2b9de7..0f02c28 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_150C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_150C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_n40C_1v55.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_n40C_1v55.lib.json
index f3e51f5..71e950d 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_n40C_1v55.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_n40C_1v55.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_n40C_1v60.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_n40C_1v60.lib.json
index 9553161..88ac831 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_n40C_1v60.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_n40C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_n40C_1v65.lib.json b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_n40C_1v65.lib.json
index 8d4c363..710199e 100644
--- a/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_n40C_1v65.lib.json
+++ b/cells/a2111o/sky130_fd_sc_lp__a2111o_m__ss_n40C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_100C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_100C_1v95.lib.json
index 7add6bd..d31125d 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_100C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_100C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_125C_3v15.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_125C_3v15.lib.json
index e5443be..a768845 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_125C_3v15.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_125C_3v15.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_140C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_140C_1v95.lib.json
index 9ec6cb9..6dee027 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_140C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_140C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_150C_2v05.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_150C_2v05.lib.json
index 43a882d..1c26879 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_150C_2v05.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_150C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_1v56.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_1v56.lib.json
index a1232fc..551dcf8 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_1v56.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_1v56.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_1v76.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_1v76.lib.json
index a7ae5f3..5140039 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_1v76.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_1v76.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_1v95.lib.json
index 51ab4e9..6a08bbb 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_2v05.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_2v05.lib.json
index 05b21e9..c7bea91 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_2v05.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ff_n40C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_100C_1v60.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_100C_1v60.lib.json
index 063a1d2..6cfa370 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_100C_1v60.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_100C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_140C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_140C_1v65.lib.json
index 04001f4..2424e3e 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_140C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_140C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_150C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_150C_1v65.lib.json
index f87a0bb..0761566 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_150C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_150C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_n40C_1v55.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_n40C_1v55.lib.json
index 8397f63..174782c 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_n40C_1v55.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_n40C_1v55.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_n40C_1v60.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_n40C_1v60.lib.json
index 486de12..3aefca8 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_n40C_1v60.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_n40C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_n40C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_n40C_1v65.lib.json
index 39602bb..dd87cce 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_n40C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_0__ss_n40C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_100C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_100C_1v95.lib.json
index 6befb59..b60c5cd 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_100C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_125C_3v15.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_125C_3v15.lib.json
index 338893d..4056ab7 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_125C_3v15.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_140C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_140C_1v95.lib.json
index 4ab1568..a7e7502 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_140C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_150C_2v05.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_150C_2v05.lib.json
index a76f013..490f812 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_150C_2v05.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_1v56.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_1v56.lib.json
index 7ce707c..bd5566d 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_1v56.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_1v76.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_1v76.lib.json
index 4340dcd..e9120a2 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_1v76.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_1v95.lib.json
index ee91380..07dd19a 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_2v05.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_2v05.lib.json
index 7cf2469..6bf53e6 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_2v05.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_100C_1v60.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_100C_1v60.lib.json
index a2f4353..1360e02 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_100C_1v60.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_140C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_140C_1v65.lib.json
index 5acb31e..3645bd2 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_140C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_150C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_150C_1v65.lib.json
index bf0efc8..2428eca 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_150C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_n40C_1v55.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_n40C_1v55.lib.json
index e191c11..a86aac4 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_n40C_1v55.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_n40C_1v60.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_n40C_1v60.lib.json
index e4e9656..0e2952e 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_n40C_1v60.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_n40C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_n40C_1v65.lib.json
index a64dfc9..44c9533 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_n40C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_1__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_100C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_100C_1v95.lib.json
index 64961ff..8e0ec49 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_100C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_125C_3v15.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_125C_3v15.lib.json
index a5c34bc..cbb2cc9 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_125C_3v15.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_140C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_140C_1v95.lib.json
index 726ced5..d457557 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_140C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_150C_2v05.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_150C_2v05.lib.json
index 848af80..bf34142 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_150C_2v05.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_1v56.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_1v56.lib.json
index fa6fd68..af631b4 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_1v56.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_1v76.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_1v76.lib.json
index 421b9ac..9ad1008 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_1v76.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_1v95.lib.json
index 7491086..8af9e1a 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_2v05.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_2v05.lib.json
index 2bcb04d..4a72575 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_2v05.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_100C_1v60.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_100C_1v60.lib.json
index e878278..dc7cdcb 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_100C_1v60.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_140C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_140C_1v65.lib.json
index d4cf6f7..c1955cc 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_140C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_150C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_150C_1v65.lib.json
index 5b115a6..cd7d359 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_150C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_n40C_1v55.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_n40C_1v55.lib.json
index 07a61ad..0f8a03f 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_n40C_1v55.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_n40C_1v60.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_n40C_1v60.lib.json
index 69ecb6b..ea611c9 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_n40C_1v60.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_n40C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_n40C_1v65.lib.json
index 3dfd046..0d42530 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_n40C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_2__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_100C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_100C_1v95.lib.json
index 9ff11e0..c51a640 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_100C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_125C_3v15.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_125C_3v15.lib.json
index cb27fee..dfb6e16 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_125C_3v15.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_140C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_140C_1v95.lib.json
index e11250b..668001e 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_140C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_150C_2v05.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_150C_2v05.lib.json
index 7e58389..e456925 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_150C_2v05.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_1v56.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_1v56.lib.json
index 2a9820e..e6a323c 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_1v56.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_1v76.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_1v76.lib.json
index e3df00c..8e19ef5 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_1v76.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_1v95.lib.json
index 3ccb666..0019844 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_2v05.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_2v05.lib.json
index 9a6117b..461781e 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_2v05.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_100C_1v60.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_100C_1v60.lib.json
index 3babb8b..e52f71a 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_100C_1v60.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_140C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_140C_1v65.lib.json
index 723d975..a7103bd 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_140C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_150C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_150C_1v65.lib.json
index d4f0199..b4c2cff 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_150C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_n40C_1v55.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_n40C_1v55.lib.json
index 46e9823..dea91b2 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_n40C_1v55.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_n40C_1v60.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_n40C_1v60.lib.json
index 7733f05..fab76f4 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_n40C_1v60.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_n40C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_n40C_1v65.lib.json
index 3824277..abf9101 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_n40C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_4__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_100C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_100C_1v95.lib.json
index 20ab7da..e673ddb 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_100C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_125C_3v15.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_125C_3v15.lib.json
index 0382c33..ba0a980 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_125C_3v15.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_140C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_140C_1v95.lib.json
index e370591..47dae90 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_140C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_150C_2v05.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_150C_2v05.lib.json
index 36ad6c3..c8c5f24 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_150C_2v05.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_1v56.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_1v56.lib.json
index ed103a5..85a8d31 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_1v56.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_1v76.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_1v76.lib.json
index 4b37b42..1835814 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_1v76.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_1v95.lib.json
index 22b44cd..46d6710 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_2v05.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_2v05.lib.json
index 342adf5..be41eaf 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_2v05.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_100C_1v60.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_100C_1v60.lib.json
index f892dd3..d48664b 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_100C_1v60.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_140C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_140C_1v65.lib.json
index 198dd79..f05e1be 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_140C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_150C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_150C_1v65.lib.json
index 5a6239b..857d01c 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_150C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_n40C_1v55.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_n40C_1v55.lib.json
index 373abaf..3d49f5c 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_n40C_1v55.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_n40C_1v60.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_n40C_1v60.lib.json
index c8419d9..6ba6910 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_n40C_1v60.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_n40C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_n40C_1v65.lib.json
index 9f36e05..6dc17c5 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_n40C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_lp__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_100C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_100C_1v95.lib.json
index b70a1cb..4adb46a 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_100C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_100C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_125C_3v15.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_125C_3v15.lib.json
index 23ebb05..f38dd56 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_125C_3v15.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_125C_3v15.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_140C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_140C_1v95.lib.json
index d23f6c5..63e3c32 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_140C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_140C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_150C_2v05.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_150C_2v05.lib.json
index f9be7d8..525fd77 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_150C_2v05.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_150C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_1v56.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_1v56.lib.json
index d843015..e818063 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_1v56.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_1v56.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_1v76.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_1v76.lib.json
index da21a31..979cc7b 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_1v76.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_1v76.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_1v95.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_1v95.lib.json
index 7794e45..1145143 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_1v95.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_2v05.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_2v05.lib.json
index 1103ab1..e916cf3 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_2v05.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ff_n40C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_100C_1v60.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_100C_1v60.lib.json
index 5f9b068..f86d85f 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_100C_1v60.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_100C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_140C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_140C_1v65.lib.json
index f6a4e01..414fd59 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_140C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_140C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_150C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_150C_1v65.lib.json
index 18649f1..4915fd6 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_150C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_150C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_n40C_1v55.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_n40C_1v55.lib.json
index 5f78f4d..1d3579e 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_n40C_1v55.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_n40C_1v55.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_n40C_1v60.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_n40C_1v60.lib.json
index bdaa53e..7e2d3d1 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_n40C_1v60.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_n40C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_n40C_1v65.lib.json b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_n40C_1v65.lib.json
index c9cda2d..33a1591 100644
--- a/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_n40C_1v65.lib.json
+++ b/cells/a2111oi/sky130_fd_sc_lp__a2111oi_m__ss_n40C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_100C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_100C_1v95.lib.json
index 4758713..f9ed715 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_100C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_100C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_125C_3v15.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_125C_3v15.lib.json
index 104657e..7ca1743 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_125C_3v15.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_125C_3v15.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_140C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_140C_1v95.lib.json
index 5238c7b..69aa6ce 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_140C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_140C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_150C_2v05.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_150C_2v05.lib.json
index a1496ae..368672d 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_150C_2v05.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_150C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_1v56.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_1v56.lib.json
index 4342b36..3444d2c 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_1v56.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_1v56.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_1v76.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_1v76.lib.json
index 9fb08ba..427f673 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_1v76.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_1v76.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_1v95.lib.json
index 4727ed5..c836198 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_2v05.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_2v05.lib.json
index 9e172b4..dc693f6 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_2v05.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ff_n40C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_100C_1v60.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_100C_1v60.lib.json
index 00beddc..3a73a0f 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_100C_1v60.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_100C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_140C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_140C_1v65.lib.json
index 5dd9565..b084294 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_140C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_140C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_150C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_150C_1v65.lib.json
index 967aa50..9d98987 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_150C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_150C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_n40C_1v55.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_n40C_1v55.lib.json
index 532ed42..068bb05 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_n40C_1v55.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_n40C_1v55.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_n40C_1v60.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_n40C_1v60.lib.json
index b5a29d4..0241feb 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_n40C_1v60.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_n40C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_n40C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_n40C_1v65.lib.json
index ea4c58e..d343f9b 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_n40C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_0__ss_n40C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_100C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_100C_1v95.lib.json
index ec56a68..f903a25 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_100C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_125C_3v15.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_125C_3v15.lib.json
index d5f927d..1bc5a88 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_125C_3v15.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_140C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_140C_1v95.lib.json
index 23cc48f..51b2062 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_140C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_150C_2v05.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_150C_2v05.lib.json
index 31626e7..271f645 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_150C_2v05.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_1v56.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_1v56.lib.json
index 73a8524..ff701cc 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_1v56.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_1v76.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_1v76.lib.json
index ae264db..0c7efb3 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_1v76.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_1v95.lib.json
index f9f671c..6a376e9 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_2v05.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_2v05.lib.json
index 50f580a..8f968a5 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_2v05.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_100C_1v60.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_100C_1v60.lib.json
index c43ee3a..02f83a4 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_100C_1v60.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_140C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_140C_1v65.lib.json
index b3f5383..dcc343d 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_140C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_150C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_150C_1v65.lib.json
index f82f78f..76b8434 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_150C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_n40C_1v55.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_n40C_1v55.lib.json
index a0f2ddb..70de230 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_n40C_1v55.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_n40C_1v60.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_n40C_1v60.lib.json
index f83aa68..edaa49b 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_n40C_1v60.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_n40C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_n40C_1v65.lib.json
index 355bafc..3d94ad9 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_n40C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_1__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_100C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_100C_1v95.lib.json
index d93b006..348a31e 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_100C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_125C_3v15.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_125C_3v15.lib.json
index a0dbe24..eb5fcbc 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_125C_3v15.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_140C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_140C_1v95.lib.json
index d2bc213..da788b2 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_140C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_150C_2v05.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_150C_2v05.lib.json
index 4551f19..b1bbce5 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_150C_2v05.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_1v56.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_1v56.lib.json
index 73d2b8c..f648d79 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_1v56.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_1v76.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_1v76.lib.json
index d468c86..aa23f9b 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_1v76.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_1v95.lib.json
index f7e77e2..37a9480 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_2v05.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_2v05.lib.json
index b495770..bf45763 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_2v05.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_100C_1v60.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_100C_1v60.lib.json
index a386f87..9e0f3ee 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_100C_1v60.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_140C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_140C_1v65.lib.json
index 5c80a11..0c97c22 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_140C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_150C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_150C_1v65.lib.json
index 604946f..8814bfa 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_150C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_n40C_1v55.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_n40C_1v55.lib.json
index dc598f3..ee06ce0 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_n40C_1v55.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_n40C_1v60.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_n40C_1v60.lib.json
index ccfbbf1..901677a 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_n40C_1v60.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_n40C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_n40C_1v65.lib.json
index e809f3e..6a6b316 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_n40C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_2__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_100C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_100C_1v95.lib.json
index 3b9c006..b1b4688 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_100C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_125C_3v15.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_125C_3v15.lib.json
index 9a5a17a..4f8b707 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_125C_3v15.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_140C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_140C_1v95.lib.json
index e9adfa7..9d68880 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_140C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_150C_2v05.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_150C_2v05.lib.json
index c9b20c2..73dd572 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_150C_2v05.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_1v56.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_1v56.lib.json
index 2663f43..f6817c5 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_1v56.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_1v76.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_1v76.lib.json
index a96ee77..cba7175 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_1v76.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_1v95.lib.json
index bece016..021fd3e 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_2v05.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_2v05.lib.json
index f1a1647..a97bfd5 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_2v05.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_100C_1v60.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_100C_1v60.lib.json
index 03110a4..61f4c28 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_100C_1v60.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_140C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_140C_1v65.lib.json
index a19bf61..391a042 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_140C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_150C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_150C_1v65.lib.json
index 4cbc8a9..d6c27de 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_150C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_n40C_1v55.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_n40C_1v55.lib.json
index 1ad8d4e..7116107 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_n40C_1v55.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_n40C_1v60.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_n40C_1v60.lib.json
index 25e056f..31935b4 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_n40C_1v60.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_n40C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_n40C_1v65.lib.json
index 741e9e4..5b85484 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_n40C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_4__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_100C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_100C_1v95.lib.json
index 1440392..90ad849 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_100C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_125C_3v15.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_125C_3v15.lib.json
index b369281..c42716a 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_125C_3v15.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_140C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_140C_1v95.lib.json
index 32d0917..71be11c 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_140C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_150C_2v05.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_150C_2v05.lib.json
index daf120b..1bc5bd4 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_150C_2v05.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_1v56.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_1v56.lib.json
index 9d54b50..ca5f6bc 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_1v56.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_1v76.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_1v76.lib.json
index 03791ec..0c3f309 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_1v76.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_1v95.lib.json
index f9d0bb8..b277140 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_2v05.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_2v05.lib.json
index ca6bc68..e83c6a5 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_2v05.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_100C_1v60.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_100C_1v60.lib.json
index 9eae385..c19cf4d 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_100C_1v60.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_140C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_140C_1v65.lib.json
index dc4d18f..d8377c6 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_140C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_150C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_150C_1v65.lib.json
index e5b30d1..225b08e 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_150C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_n40C_1v55.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_n40C_1v55.lib.json
index 194bb47..0319865 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_n40C_1v55.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_n40C_1v60.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_n40C_1v60.lib.json
index ea69501..faabb74 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_n40C_1v60.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_n40C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_n40C_1v65.lib.json
index 3c2bbe4..bba1726 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_n40C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_lp__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_100C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_100C_1v95.lib.json
index 4fedac3..d84f061 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_100C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_100C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_125C_3v15.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_125C_3v15.lib.json
index 926e16e..459b2a3 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_125C_3v15.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_125C_3v15.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_140C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_140C_1v95.lib.json
index 0b26bf1..a1c7ab2 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_140C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_140C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_150C_2v05.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_150C_2v05.lib.json
index 3659a89..6b2c237 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_150C_2v05.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_150C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_1v56.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_1v56.lib.json
index a74a1a9..45b3229 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_1v56.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_1v56.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_1v76.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_1v76.lib.json
index 6db2bae..56a840b 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_1v76.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_1v76.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_1v95.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_1v95.lib.json
index 53d15b6..5876f89 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_1v95.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_2v05.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_2v05.lib.json
index 93cc519..3f20576 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_2v05.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ff_n40C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_100C_1v60.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_100C_1v60.lib.json
index dff0970..b27d3a3 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_100C_1v60.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_100C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_140C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_140C_1v65.lib.json
index e6cb1a3..50c9b59 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_140C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_140C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_150C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_150C_1v65.lib.json
index 833930e..d9648de 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_150C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_150C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_n40C_1v55.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_n40C_1v55.lib.json
index 1fb25c5..750aa4f 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_n40C_1v55.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_n40C_1v55.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_n40C_1v60.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_n40C_1v60.lib.json
index b369720..91ed3d8 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_n40C_1v60.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_n40C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_n40C_1v65.lib.json b/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_n40C_1v65.lib.json
index e20571f..3b041da 100644
--- a/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_n40C_1v65.lib.json
+++ b/cells/a211o/sky130_fd_sc_lp__a211o_m__ss_n40C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_100C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_100C_1v95.lib.json
index cd3fd79..5e70d7a 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_100C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_100C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_125C_3v15.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_125C_3v15.lib.json
index cf283c1..63e7e38 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_125C_3v15.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_125C_3v15.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_140C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_140C_1v95.lib.json
index 00283e1..f60b364 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_140C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_140C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_150C_2v05.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_150C_2v05.lib.json
index 00c6fe7..56560a5 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_150C_2v05.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_150C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_1v56.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_1v56.lib.json
index 8626035..f3acd52 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_1v56.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_1v56.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_1v76.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_1v76.lib.json
index da8c853..7bbdd07 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_1v76.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_1v76.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_1v95.lib.json
index 6b697d3..e6303e6 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_2v05.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_2v05.lib.json
index c148f0f..f61645c 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_2v05.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ff_n40C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_100C_1v60.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_100C_1v60.lib.json
index 409809c..324e95c 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_100C_1v60.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_100C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_140C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_140C_1v65.lib.json
index 4f1ec74..c500c3e 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_140C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_140C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_150C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_150C_1v65.lib.json
index caa6439..33c2b1b 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_150C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_150C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_n40C_1v55.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_n40C_1v55.lib.json
index a306533..58d086a 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_n40C_1v55.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_n40C_1v55.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_n40C_1v60.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_n40C_1v60.lib.json
index f66ee8e..16be041 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_n40C_1v60.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_n40C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_n40C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_n40C_1v65.lib.json
index 7d81dfe..9b87a5e 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_n40C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_0__ss_n40C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_100C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_100C_1v95.lib.json
index 67549c8..0664b15 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_100C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_125C_3v15.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_125C_3v15.lib.json
index 57edce2..a7f0e5c 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_125C_3v15.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_140C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_140C_1v95.lib.json
index 1f354c5..956f422 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_140C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_150C_2v05.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_150C_2v05.lib.json
index 7347af4..c71141c 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_150C_2v05.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_1v56.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_1v56.lib.json
index ca55464..db71319 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_1v56.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_1v76.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_1v76.lib.json
index beddd4d..eb6886c 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_1v76.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_1v95.lib.json
index 1583572..82f26b2 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_2v05.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_2v05.lib.json
index cab2639..1a6ae60 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_2v05.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_100C_1v60.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_100C_1v60.lib.json
index b9f6255..8456261 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_100C_1v60.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_140C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_140C_1v65.lib.json
index 7b5c685..17e8c2e 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_140C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_150C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_150C_1v65.lib.json
index 705440a..71173df 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_150C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_n40C_1v55.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_n40C_1v55.lib.json
index b233521..880d70e 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_n40C_1v55.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_n40C_1v60.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_n40C_1v60.lib.json
index a6ef80f..e83fb21 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_n40C_1v60.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_n40C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_n40C_1v65.lib.json
index 99bb4a2..4f8f708 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_n40C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_1__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_100C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_100C_1v95.lib.json
index aef92a6..14377f2 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_100C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_125C_3v15.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_125C_3v15.lib.json
index d1619fd..241254e 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_125C_3v15.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_140C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_140C_1v95.lib.json
index b51be0c..355dc79 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_140C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_150C_2v05.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_150C_2v05.lib.json
index 5884b94..e011130 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_150C_2v05.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_1v56.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_1v56.lib.json
index c5457d2..f5635bd 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_1v56.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_1v76.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_1v76.lib.json
index e7e4cd2..c0fc9d3 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_1v76.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_1v95.lib.json
index 245749c..49c278d 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_2v05.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_2v05.lib.json
index 4eaed18..19c91cd 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_2v05.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_100C_1v60.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_100C_1v60.lib.json
index 9bf0f6b..24ab00e 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_100C_1v60.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_140C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_140C_1v65.lib.json
index 74de31a..0f7d2d3 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_140C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_150C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_150C_1v65.lib.json
index 03f0254..f48d3ae 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_150C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_n40C_1v55.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_n40C_1v55.lib.json
index 3870fcc..6fde4b2 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_n40C_1v55.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_n40C_1v60.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_n40C_1v60.lib.json
index 280b1a2..f20e69d 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_n40C_1v60.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_n40C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_n40C_1v65.lib.json
index 0bede03..85aae31 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_n40C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_2__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_100C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_100C_1v95.lib.json
index ec82e7d..e92ef3e 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_100C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_125C_3v15.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_125C_3v15.lib.json
index fc640bd..e09164d 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_125C_3v15.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_140C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_140C_1v95.lib.json
index 97798c8..ef726f0 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_140C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_150C_2v05.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_150C_2v05.lib.json
index 2273d2c..1300549 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_150C_2v05.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_1v56.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_1v56.lib.json
index d63ed12..623864d 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_1v56.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_1v76.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_1v76.lib.json
index 542c810..6d316c6 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_1v76.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_1v95.lib.json
index a06dbc4..19cd64a 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_2v05.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_2v05.lib.json
index 681370c..0fd4cfb 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_2v05.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_100C_1v60.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_100C_1v60.lib.json
index 5b879c5..711b992 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_100C_1v60.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_140C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_140C_1v65.lib.json
index f6ce1c3..995d22b 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_140C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_150C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_150C_1v65.lib.json
index 134b97b..af27d67 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_150C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_n40C_1v55.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_n40C_1v55.lib.json
index 0dce385..3edf713 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_n40C_1v55.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_n40C_1v60.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_n40C_1v60.lib.json
index aef67cc..53cc104 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_n40C_1v60.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_n40C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_n40C_1v65.lib.json
index d00061a..12c5032 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_n40C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_4__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_100C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_100C_1v95.lib.json
index dc26cef..35db182 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_100C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_125C_3v15.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_125C_3v15.lib.json
index 9362f9f..9be1054 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_125C_3v15.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_140C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_140C_1v95.lib.json
index 7019aa8..035cb6b 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_140C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_150C_2v05.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_150C_2v05.lib.json
index 2a296f0..9031779 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_150C_2v05.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_1v56.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_1v56.lib.json
index fdae942..fcabe12 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_1v56.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_1v76.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_1v76.lib.json
index 40afe24..582c80c 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_1v76.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_1v95.lib.json
index 0f3585a..4731bca 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_2v05.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_2v05.lib.json
index 898c5c1..55c795b 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_2v05.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_100C_1v60.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_100C_1v60.lib.json
index a572ae6..e3b6c09 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_100C_1v60.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_140C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_140C_1v65.lib.json
index a03e03b..604953b 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_140C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_150C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_150C_1v65.lib.json
index 46785a8..1d9c3e4 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_150C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_n40C_1v55.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_n40C_1v55.lib.json
index a5e8057..f09c87f 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_n40C_1v55.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_n40C_1v60.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_n40C_1v60.lib.json
index 76cd01f..315b925 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_n40C_1v60.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_n40C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_n40C_1v65.lib.json
index fc1a0c5..db96b83 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_n40C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_lp__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_100C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_100C_1v95.lib.json
index da16cf4..66913ce 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_100C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_100C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_125C_3v15.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_125C_3v15.lib.json
index bd708f3..75ffced 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_125C_3v15.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_125C_3v15.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_140C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_140C_1v95.lib.json
index 59f0f80..2393362 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_140C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_140C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_150C_2v05.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_150C_2v05.lib.json
index 2a2a0e2..4cc92ab 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_150C_2v05.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_150C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_1v56.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_1v56.lib.json
index 4b574b9..7886201 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_1v56.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_1v56.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_1v76.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_1v76.lib.json
index 404398c..a2a0b37 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_1v76.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_1v76.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_1v95.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_1v95.lib.json
index 7f3d4a7..57ec7cd 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_1v95.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_2v05.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_2v05.lib.json
index 1616a20..7d43f89 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_2v05.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ff_n40C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_100C_1v60.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_100C_1v60.lib.json
index 4ef5ea5..6bb19a6 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_100C_1v60.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_100C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_140C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_140C_1v65.lib.json
index 8004216..9593bc7 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_140C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_140C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_150C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_150C_1v65.lib.json
index a7e41eb..ebc3b5a 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_150C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_150C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_n40C_1v55.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_n40C_1v55.lib.json
index cab3f31..fdb373f 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_n40C_1v55.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_n40C_1v55.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_n40C_1v60.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_n40C_1v60.lib.json
index 5e3fcdb..c8cae3f 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_n40C_1v60.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_n40C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_n40C_1v65.lib.json b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_n40C_1v65.lib.json
index da2f22f..357c341 100644
--- a/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_n40C_1v65.lib.json
+++ b/cells/a211oi/sky130_fd_sc_lp__a211oi_m__ss_n40C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_100C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_100C_1v95.lib.json
index 57fef7c..c5351c2 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_100C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_100C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_125C_3v15.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_125C_3v15.lib.json
index f58da13..7a29515 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_125C_3v15.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_125C_3v15.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_140C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_140C_1v95.lib.json
index 7c968f3..fae8720 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_140C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_140C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_150C_2v05.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_150C_2v05.lib.json
index a0536a0..edf5751 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_150C_2v05.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_150C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_1v56.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_1v56.lib.json
index 67232a4..4ef6de0 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_1v56.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_1v56.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_1v76.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_1v76.lib.json
index 51b9a6e..23e37d4 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_1v76.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_1v76.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_1v95.lib.json
index 454f45d..89ec506 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_2v05.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_2v05.lib.json
index 153534d..586d5fd 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_2v05.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ff_n40C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_100C_1v60.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_100C_1v60.lib.json
index b3998a4..cdb9000 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_100C_1v60.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_100C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_140C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_140C_1v65.lib.json
index 9e08ea5..386ef56 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_140C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_140C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_150C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_150C_1v65.lib.json
index 7d53625..7dbf9da 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_150C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_150C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_n40C_1v55.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_n40C_1v55.lib.json
index 2dcaeab..73a488c 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_n40C_1v55.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_n40C_1v55.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_n40C_1v60.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_n40C_1v60.lib.json
index 5233f96..4b6fad8 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_n40C_1v60.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_n40C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_n40C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_n40C_1v65.lib.json
index 05cef34..4707f21 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_n40C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_0__ss_n40C_1v65.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_100C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_100C_1v95.lib.json
index 900ffa0..88d11ef 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_100C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_125C_3v15.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_125C_3v15.lib.json
index 4defef4..6c18504 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_125C_3v15.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_140C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_140C_1v95.lib.json
index ceb7934..a6083b4 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_140C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_150C_2v05.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_150C_2v05.lib.json
index 287c86c..797f77e 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_150C_2v05.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_1v56.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_1v56.lib.json
index 0198c28..a0d5bbf 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_1v56.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_1v76.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_1v76.lib.json
index a6f1355..f8cf05f 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_1v76.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_1v95.lib.json
index 9f238dc..4548648 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_2v05.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_2v05.lib.json
index 495e5f0..c0a39a5 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_2v05.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_100C_1v60.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_100C_1v60.lib.json
index f43d210..6747fb1 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_100C_1v60.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_140C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_140C_1v65.lib.json
index 56cfaa3..a8e0c1b 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_140C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_150C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_150C_1v65.lib.json
index c6a53d4..ebdf868 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_150C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_n40C_1v55.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_n40C_1v55.lib.json
index ada5154..69f54ff 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_n40C_1v55.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_n40C_1v60.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_n40C_1v60.lib.json
index b179baf..c9982c6 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_n40C_1v60.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_n40C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_n40C_1v65.lib.json
index 5eab1d2..828c08a 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_n40C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_1__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_100C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_100C_1v95.lib.json
index f2692fc..8d50673 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_100C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_125C_3v15.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_125C_3v15.lib.json
index 8a9ab86..bd6df89 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_125C_3v15.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_140C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_140C_1v95.lib.json
index 4803d5d..d66a8a7 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_140C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_150C_2v05.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_150C_2v05.lib.json
index b9b2a13..0ce6d0c 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_150C_2v05.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_1v56.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_1v56.lib.json
index 4204a50..c7c91bb 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_1v56.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_1v76.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_1v76.lib.json
index 2ca55a5..dd27463 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_1v76.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_1v95.lib.json
index 3f5684a..63baebe 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_2v05.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_2v05.lib.json
index ef3fdfa..1c484e8 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_2v05.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_100C_1v60.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_100C_1v60.lib.json
index d8d72ca..b60fda8 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_100C_1v60.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_140C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_140C_1v65.lib.json
index 81daec9..c3b35ed 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_140C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_150C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_150C_1v65.lib.json
index e00912f..c383885 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_150C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_n40C_1v55.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_n40C_1v55.lib.json
index 3e06d32..e107fb4 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_n40C_1v55.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_n40C_1v60.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_n40C_1v60.lib.json
index f1dd854..c4f3b9d 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_n40C_1v60.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_n40C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_n40C_1v65.lib.json
index c83efc9..ff03bd4 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_n40C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_2__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_100C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_100C_1v95.lib.json
index 92a5e01..4af5669 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_100C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_125C_3v15.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_125C_3v15.lib.json
index f4bace1..1ef7360 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_125C_3v15.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_140C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_140C_1v95.lib.json
index c2443aa..26c0a4e 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_140C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_150C_2v05.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_150C_2v05.lib.json
index f1b9fe7..765c30a 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_150C_2v05.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_1v56.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_1v56.lib.json
index fb59d75..e95b3c2 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_1v56.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_1v76.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_1v76.lib.json
index 2f1ee67..8bf00c2 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_1v76.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_1v95.lib.json
index 798bf88..a12aa60 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_2v05.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_2v05.lib.json
index 9285204..1a16b12 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_2v05.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_100C_1v60.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_100C_1v60.lib.json
index 9d39cab..3637eee 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_100C_1v60.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_140C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_140C_1v65.lib.json
index 2fdc923..2598107 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_140C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_150C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_150C_1v65.lib.json
index a0668eb..5bac48a 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_150C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_n40C_1v55.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_n40C_1v55.lib.json
index e552715..d21c376 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_n40C_1v55.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_n40C_1v60.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_n40C_1v60.lib.json
index db961e4..21a959c 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_n40C_1v60.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_n40C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_n40C_1v65.lib.json
index d91ab34..6d04757 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_n40C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_4__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_100C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_100C_1v95.lib.json
index cd3804e..f58c122 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_100C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_100C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_125C_3v15.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_125C_3v15.lib.json
index d4acba2..f04cd14 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_125C_3v15.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_125C_3v15.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_140C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_140C_1v95.lib.json
index 67b9ffd..68596ab 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_140C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_140C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_150C_2v05.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_150C_2v05.lib.json
index 90eb4ab..aa9dd4d 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_150C_2v05.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_150C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_1v56.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_1v56.lib.json
index 521bbaa..c9dd65f 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_1v56.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_1v56.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_1v76.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_1v76.lib.json
index 1ae0e52..8497e32 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_1v76.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_1v76.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_1v95.lib.json
index 869e8c4..35f0401 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_1v95.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_2v05.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_2v05.lib.json
index 51e023b..d2520c1 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_2v05.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ff_n40C_2v05.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_100C_1v60.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_100C_1v60.lib.json
index 4a00b3a..82b9476 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_100C_1v60.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_100C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_140C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_140C_1v65.lib.json
index 0d73dd2..b41d02f 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_140C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_140C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_150C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_150C_1v65.lib.json
index 73b9ce5..cdbd0bc 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_150C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_150C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_n40C_1v55.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_n40C_1v55.lib.json
index cf3e461..a68965f 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_n40C_1v55.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_n40C_1v55.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_n40C_1v60.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_n40C_1v60.lib.json
index 40fe114..7757adb 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_n40C_1v60.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_n40C_1v60.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_n40C_1v65.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_n40C_1v65.lib.json
index 615c0a8..b4a119e 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_n40C_1v65.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_lp__ss_n40C_1v65.lib.json
@@ -4,18 +4,22 @@
   "cell_leakage_power": 0.0,
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_100C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_100C_1v95.lib.json
index fb0ec62..51223a2 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_100C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_100C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_125C_3v15.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_125C_3v15.lib.json
index c90b4e6..c22df2c 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_125C_3v15.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_125C_3v15.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_140C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_140C_1v95.lib.json
index 14f0190..9d07cbe 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_140C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_140C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_150C_2v05.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_150C_2v05.lib.json
index 9ad2e8a..380ac1e 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_150C_2v05.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_150C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_1v56.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_1v56.lib.json
index bcbb611..40e48d1 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_1v56.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_1v56.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_1v76.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_1v76.lib.json
index a7bcb2b..450891d 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_1v76.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_1v76.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_1v95.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_1v95.lib.json
index 740fc58..4ffa70e 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_1v95.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_1v95.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_2v05.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_2v05.lib.json
index fbc5018..d5d57b1 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_2v05.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ff_n40C_2v05.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin": "VNB",
     "voltage_name": "VPWR"
   },
   "pin,A1": {
diff --git a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ss_100C_1v60.lib.json b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ss_100C_1v60.lib.json
index 5099abd..77db4c7 100644
--- a/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ss_100C_1v60.lib.json
+++ b/cells/a21bo/sky130_fd_sc_lp__a21bo_m__ss_100C_1v60.lib.json
@@ -6,18 +6,22 @@
   "dont_use": "true",
   "pg_pin,VGND": {
     "pg_type": "primary_ground",
+    "related_bias_pin": "VPB",
     "voltage_name": "VGND"
   },
   "pg_pin,VNB": {
-    "pg_type": "primary_ground",
+    "pg_type": "nwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VNB"
   },
   "pg_pin,VPB": {
-    "pg_type": "primary_power",
+    "pg_type": "pwell",
+    "physical_connection": "device_layer",
     "voltage_name": "VPB"
   },
   "pg_pin,VPWR": {
     "pg_type": "primary_power",
+    "related_bias_pin"