Finally corrected all of the eight diode types, which had a lot of
typos left over from the conversion from s8 to sky130.
diff --git a/sky130/magic/sky130.tcl b/sky130/magic/sky130.tcl
index da9f1de..a2a4cb1 100644
--- a/sky130/magic/sky130.tcl
+++ b/sky130/magic/sky130.tcl
@@ -723,8 +723,8 @@
#------------------------------------------------------------------
# NOTE: sky130_fd_pr__diode_pw2nd_05v5_lvt,
-# sky130_fd_pr__diode_pw2nd_05v5_nvt, sky130_fd_pr__pd2nw_05v5_lvt,
-# and sky130_fd_pr__pd2nw_11v0 are all considered parasitic diodes.
+# sky130_fd_pr__diode_pw2nd_05v5_nvt, sky130_fd_pr__diode_pd2nw_05v5_lvt,
+# and sky130_fd_pr__diode_pd2nw_11v0 are all considered parasitic diodes.
# They may be generated by invoking the build procedure on the
# command line. To enable them in the PDK, add them to the
# appropriate compatible {} list.
@@ -735,7 +735,7 @@
nx 1 ny 1 dummy 0 lmin 0.45 wmin 0.45 \
elc 1 erc 1 etc 1 ebc 1 doverlap 0 \
compatible {sky130_fd_pr__diode_pw2nd_05v5 sky130_fd_pr__diode_pw2nd_05v5_lvt \
- sky130_fd_pr__diode_pw2nd_11v0 sky130_fd_pr__diode_pw2nd_05v5_nvt} \
+ sky130_fd_pr__diode_pw2nd_05v5_nvt sky130_fd_pr__diode_pw2nd_11v0} \
full_metal 1}
}
@@ -744,47 +744,7 @@
nx 1 ny 1 dummy 0 lmin 0.45 wmin 0.45 \
elc 1 erc 1 etc 1 ebc 1 doverlap 0 \
compatible {sky130_fd_pr__diode_pw2nd_05v5 sky130_fd_pr__diode_pw2nd_05v5_lvt \
- sky130_fd_pr__diode_pw2nd_11v0 sky130_fd_pr__diode_pw2nd_05v5_nvt} \
- full_metal 1}
-}
-
-proc sky130::sky130_fd_pr__pd2nw_05v5_defaults {} {
- return {w 0.45 l 0.45 area 0.2025 peri 1.8 \
- nx 1 ny 1 dummy 0 lmin 0.45 wmin 0.45 \
- elc 1 erc 1 etc 1 ebc 1 \
- glc 1 grc 1 gtc 1 gbc 1 doverlap 0 \
- compatible {sky130_fd_pr__diode_pd2nw_05v5 sky130_fd_pr__diode_pd2nw_05v5_lvt \
- sky130_fd_pr__diode_pd2nw_11v0 sky130_fd_pr__diode_pd2nw_11v0} \
- full_metal 1}
-}
-
-proc sky130::sky130_fd_pr__pd2nw_05v5_lvt_defaults {} {
- return {w 0.45 l 0.45 area 0.2025 peri 1.8 \
- nx 1 ny 1 dummy 0 lmin 0.45 wmin 0.45 \
- elc 1 erc 1 etc 1 ebc 1 \
- glc 1 grc 1 gtc 1 gbc 1 doverlap 0 \
- compatible {sky130_fd_pr__diode_pd2nw_05v5 sky130_fd_pr__diode_pd2nw_05v5_lvt \
- sky130_fd_pr__diode_pd2nw_11v0 sky130_fd_pr__diode_pd2nw_11v0} \
- full_metal 1}
-}
-
-proc sky130::sky130_fd_pr__pd2nw_11v0_defaults {} {
- return {w 0.45 l 0.45 area 0.2025 peri 1.8 \
- nx 1 ny 1 dummy 0 lmin 0.45 wmin 0.45 \
- elc 1 erc 1 etc 1 ebc 1 \
- glc 1 grc 1 gtc 1 gbc 1 doverlap 0 \
- compatible {sky130_fd_pr__diode_pd2nw_05v5 sky130_fd_pr__diode_pd2nw_05v5_lvt \
- sky130_fd_pr__diode_pd2nw_11v0 sky130_fd_pr__diode_pd2nw_11v0} \
- full_metal 1}
-}
-
-
-proc sky130::sky130_fd_pr__diode_pw2nd_11v0_defaults {} {
- return {w 0.45 l 0.45 area 0.2024 peri 1.8 \
- nx 1 ny 1 dummy 0 lmin 0.45 wmin 0.45 \
- elc 1 erc 1 etc 1 ebc 1 doverlap 0 \
- compatible {sky130_fd_pr__diode_pw2nd_05v5 sky130_fd_pr__diode_pw2nd_05v5_lvt \
- sky130_fd_pr__diode_pw2nd_11v0 sky130_fd_pr__diode_pw2nd_05v5_nvt} \
+ sky130_fd_pr__diode_pw2nd_05v5_nvt sky130_fd_pr__diode_pw2nd_11v0} \
full_metal 1}
}
@@ -793,16 +753,57 @@
nx 1 ny 1 dummy 0 lmin 0.45 wmin 0.45 \
elc 1 erc 1 etc 1 ebc 1 doverlap 0 \
compatible {sky130_fd_pr__diode_pw2nd_05v5 sky130_fd_pr__diode_pw2nd_05v5_lvt \
- sky130_fd_pr__diode_pw2nd_11v0 sky130_fd_pr__diode_pw2nd_05v5_nvt} \
+ sky130_fd_pr__diode_pw2nd_05v5_nvt sky130_fd_pr__diode_pw2nd_11v0} \
full_metal 1}
+}
-proc sky130::sky130_fd_pr__pd2nw_11v0_defaults {} {
+proc sky130::sky130_fd_pr__diode_pw2nd_11v0_defaults {} {
+ return {w 0.45 l 0.45 area 0.2024 peri 1.8 \
+ nx 1 ny 1 dummy 0 lmin 0.45 wmin 0.45 \
+ elc 1 erc 1 etc 1 ebc 1 doverlap 0 \
+ compatible {sky130_fd_pr__diode_pw2nd_05v5 sky130_fd_pr__diode_pw2nd_05v5_lvt \
+ sky130_fd_pr__diode_pw2nd_05v5_nvt sky130_fd_pr__diode_pw2nd_11v0} \
+ full_metal 1}
+}
+
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_defaults {} {
+ return {w 0.45 l 0.45 area 0.2025 peri 1.8 \
+ nx 1 ny 1 dummy 0 lmin 0.45 wmin 0.45 \
+ elc 1 erc 1 etc 1 ebc 1 \
+ glc 1 grc 1 gtc 1 gbc 1 doverlap 0 \
+ compatible {sky130_fd_pr__diode_pd2nw_05v5 sky130_fd_pr__diode_pd2nw_05v5_lvt \
+ sky130_fd_pr__diode_pd2nw_05v5_hvt sky130_fd_pr__diode_pd2nw_11v0} \
+ full_metal 1}
+}
+
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_lvt_defaults {} {
+ return {w 0.45 l 0.45 area 0.2025 peri 1.8 \
+ nx 1 ny 1 dummy 0 lmin 0.45 wmin 0.45 \
+ elc 1 erc 1 etc 1 ebc 1 \
+ glc 1 grc 1 gtc 1 gbc 1 doverlap 0 \
+ compatible {sky130_fd_pr__diode_pd2nw_05v5 sky130_fd_pr__diode_pd2nw_05v5_lvt \
+ sky130_fd_pr__diode_pd2nw_05v5_hvt sky130_fd_pr__diode_pd2nw_11v0} \
+ full_metal 1}
+}
+
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_hvt_defaults {} {
+ return {w 0.45 l 0.45 area 0.2025 peri 1.8 \
+ nx 1 ny 1 dummy 0 lmin 0.45 wmin 0.45 \
+ elc 1 erc 1 etc 1 ebc 1 \
+ glc 1 grc 1 gtc 1 gbc 1 doverlap 0 \
+ compatible {sky130_fd_pr__diode_pd2nw_05v5 sky130_fd_pr__diode_pd2nw_05v5_lvt \
+ sky130_fd_pr__diode_pd2nw_05v5_hvt sky130_fd_pr__diode_pd2nw_11v0} \
+ full_metal 1}
+}
+
+
+proc sky130::sky130_fd_pr__diode_pd2nw_11v0_defaults {} {
return {w 0.45 l 0.45 area 0.2024 peri 1.8 \
nx 1 ny 1 dummy 0 lmin 0.45 wmin 0.45 \
elc 1 erc 1 etc 1 ebc 1 \
glc 1 grc 1 gtc 1 gbc 1 doverlap 0 \
compatible {sky130_fd_pr__diode_pd2nw_05v5 sky130_fd_pr__diode_pd2nw_05v5_lvt \
- sky130_fd_pr__diode_pd2nw_11v0 sky130_fd_pr__diode_pd2nw_11v0} \
+ sky130_fd_pr__diode_pd2nw_05v5_hvt sky130_fd_pr__diode_pd2nw_11v0} \
full_metal 1}
}
@@ -816,15 +817,7 @@
return [sky130::diode_convert $parameters]
}
-proc sky130::sky130_fd_pr__pd2nw_05v5_convert {parameters} {
- return [sky130::diode_convert $parameters]
-}
-
-proc sky130::sky130_fd_pr__pd2nw_05v5_lvt_convert {parameters} {
- return [sky130::diode_convert $parameters]
-}
-
-proc sky130::sky130_fd_pr__pd2nw_11v0_convert {parameters} {
+proc sky130::sky130_fd_pr__diode_pw2nd_05v5_nvt_convert {parameters} {
return [sky130::diode_convert $parameters]
}
@@ -832,11 +825,19 @@
return [sky130::diode_convert $parameters]
}
-proc sky130::sky130_fd_pr__diode_pw2nd_05v5_nvt_convert {parameters} {
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_convert {parameters} {
return [sky130::diode_convert $parameters]
}
-proc sky130::sky130_fd_pr__pd2nw_11v0_convert {parameters} {
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_lvt_convert {parameters} {
+ return [sky130::diode_convert $parameters]
+}
+
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_hvt_convert {parameters} {
+ return [sky130::diode_convert $parameters]
+}
+
+proc sky130::sky130_fd_pr__diode_pd2nw_11v0_convert {parameters} {
return [sky130::diode_convert $parameters]
}
@@ -850,28 +851,28 @@
sky130::diode_dialog sky130_fd_pr__diode_pw2nd_05v5_lvt $parameters
}
-proc sky130::sky130_fd_pr__pd2nw_05v5_dialog {parameters} {
- sky130::diode_dialog sky130_fd_pr__pd2nw_05v5 $parameters
-}
-
-proc sky130::sky130_fd_pr__pd2nw_05v5_lvt_dialog {parameters} {
- sky130::diode_dialog sky130_fd_pr__pd2nw_05v5_lvt $parameters
-}
-
-proc sky130::sky130_fd_pr__pd2nw_11v0_dialog {parameters} {
- sky130::diode_dialog sky130_fd_pr__pd2nw_11v0 $parameters
+proc sky130::sky130_fd_pr__diode_pw2nd_05v5_nvt_dialog {parameters} {
+ sky130::diode_dialog sky130_fd_pr__diode_pw2nd_05v5_nvt $parameters
}
proc sky130::sky130_fd_pr__diode_pw2nd_11v0_dialog {parameters} {
sky130::diode_dialog sky130_fd_pr__diode_pw2nd_11v0 $parameters
}
-proc sky130::sky130_fd_pr__diode_pw2nd_05v5_nvt_dialog {parameters} {
- sky130::diode_dialog sky130_fd_pr__diode_pw2nd_05v5_nvt $parameters
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_dialog {parameters} {
+ sky130::diode_dialog sky130_fd_pr__diode_pd2nw_05v5 $parameters
}
-proc sky130::sky130_fd_pr__pd2nw_11v0_dialog {parameters} {
- sky130::diode_dialog sky130_fd_pr__pd2nw_11v0 $parameters
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_lvt_dialog {parameters} {
+ sky130::diode_dialog sky130_fd_pr__diode_pd2nw_05v5_lvt $parameters
+}
+
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_hvt_dialog {parameters} {
+ sky130::diode_dialog sky130_fd_pr__diode_pd2nw_05v5_hvt $parameters
+}
+
+proc sky130::sky130_fd_pr__diode_pd2nw_11v0_dialog {parameters} {
+ sky130::diode_dialog sky130_fd_pr__diode_pd2nw_11v0 $parameters
}
#----------------------------------------------------------------
@@ -884,15 +885,7 @@
sky130::diode_check $parameters
}
-proc sky130::sky130_fd_pr__pd2nw_05v5_check {parameters} {
- sky130::diode_check $parameters
-}
-
-proc sky130::sky130_fd_pr__pd2nw_05v5_lvt_check {parameters} {
- sky130::diode_check $parameters
-}
-
-proc sky130::sky130_fd_pr__pd2nw_11v0_check {parameters} {
+proc sky130::sky130_fd_pr__diode_pw2nd_05v5_nvt_check {parameters} {
sky130::diode_check $parameters
}
@@ -900,11 +893,19 @@
sky130::diode_check $parameters
}
-proc sky130::sky130_fd_pr__diode_pw2nd_05v5_nvt_check {parameters} {
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_check {parameters} {
sky130::diode_check $parameters
}
-proc sky130::sky130_fd_pr__pd2nw_11v0_check {parameters} {
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_lvt_check {parameters} {
+ sky130::diode_check $parameters
+}
+
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_hvt_check {parameters} {
+ sky130::diode_check $parameters
+}
+
+proc sky130::sky130_fd_pr__diode_pd2nw_11v0_check {parameters} {
sky130::diode_check $parameters
}
@@ -1118,7 +1119,8 @@
#----------------------------------------------------------------
# NOTE: Use ppd instead of psd so that there is additional
# diffusion around the contact, allowing more space for the
-# implant (likewise sky130_fd_pr__pd2nw_05v5_lvt and sky130_fd_pr__pd2nw_11v0).
+# implant (likewise sky130_fd_pr__diode_pd2nw_05v5_lvt and
+# sky130_fd_pr__diode_pd2nw_11v0).
proc sky130::sky130_fd_pr__diode_pw2nd_05v5_lvt_draw {parameters} {
@@ -1142,9 +1144,55 @@
return [sky130::diode_draw $drawdict]
}
+proc sky130::sky130_fd_pr__diode_pw2nd_05v5_nvt_draw {parameters} {
+
+ # Set a local variable for each rule in ruleset
+ foreach key [dict keys $sky130::ruleset] {
+ set $key [dict get $sky130::ruleset $key]
+ }
+
+ set newdict [dict create \
+ dev_type nndiode \
+ dev_contact_type nndic \
+ end_type mvpsd \
+ end_contact_type mvpsc \
+ end_sub_type psub \
+ dev_spacing 0.37 \
+ dev_surround ${diff_surround} \
+ end_spacing 0.30 \
+ end_surround ${diff_surround} \
+ ]
+ set drawdict [dict merge $sky130::ruleset $newdict $parameters]
+ return [sky130::diode_draw $drawdict]
+}
+
+proc sky130::sky130_fd_pr__diode_pw2nd_11v0_draw {parameters} {
+
+ # Set a local variable for each rule in ruleset
+ foreach key [dict keys $sky130::ruleset] {
+ set $key [dict get $sky130::ruleset $key]
+ }
+
+ set newdict [dict create \
+ dev_type mvndiode \
+ dev_contact_type mvndic \
+ end_type mvpsd \
+ end_contact_type mvpsc \
+ end_sub_type psub \
+ diff_spacing 0.37 \
+ dev_spacing 0.39 \
+ dev_surround ${diff_surround} \
+ end_spacing 0.36 \
+ end_surround ${diff_surround} \
+ ]
+ set drawdict [dict merge $sky130::ruleset $newdict $parameters]
+ return [sky130::diode_draw $drawdict]
+}
+
+
#----------------------------------------------------------------
-proc sky130::sky130_fd_pr__pd2nw_05v5_draw {parameters} {
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_draw {parameters} {
# Set a local variable for each rule in ruleset
foreach key [dict keys $sky130::ruleset] {
@@ -1172,7 +1220,7 @@
#----------------------------------------------------------------
-proc sky130::sky130_fd_pr__pd2nw_05v5_lvt_draw {parameters} {
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_lvt_draw {parameters} {
# Set a local variable for each rule in ruleset
foreach key [dict keys $sky130::ruleset] {
@@ -1200,7 +1248,7 @@
#----------------------------------------------------------------
-proc sky130::sky130_fd_pr__pd2nw_11v0_draw {parameters} {
+proc sky130::sky130_fd_pr__diode_pd2nw_05v5_hvt_draw {parameters} {
# Set a local variable for each rule in ruleset
foreach key [dict keys $sky130::ruleset] {
@@ -1226,58 +1274,10 @@
return [sky130::diode_draw $drawdict]
}
-#----------------------------------------------------------------
-
-proc sky130::sky130_fd_pr__diode_pw2nd_11v0_draw {parameters} {
-
- # Set a local variable for each rule in ruleset
- foreach key [dict keys $sky130::ruleset] {
- set $key [dict get $sky130::ruleset $key]
- }
-
- set newdict [dict create \
- dev_type mvndiode \
- dev_contact_type mvndic \
- end_type mvpsd \
- end_contact_type mvpsc \
- end_sub_type psub \
- diff_spacing 0.37 \
- dev_spacing 0.39 \
- dev_surround ${diff_surround} \
- end_spacing 0.36 \
- end_surround ${diff_surround} \
- ]
- set drawdict [dict merge $sky130::ruleset $newdict $parameters]
- return [sky130::diode_draw $drawdict]
-}
-
-
-proc sky130::sky130_fd_pr__diode_pw2nd_05v5_nvt_draw {parameters} {
-
- # Set a local variable for each rule in ruleset
- foreach key [dict keys $sky130::ruleset] {
- set $key [dict get $sky130::ruleset $key]
- }
-
- set newdict [dict create \
- dev_type nndiode \
- dev_contact_type nndic \
- end_type mvpsd \
- end_contact_type mvpsc \
- end_sub_type psub \
- dev_spacing 0.37 \
- dev_surround ${diff_surround} \
- end_spacing 0.30 \
- end_surround ${diff_surround} \
- ]
- set drawdict [dict merge $sky130::ruleset $newdict $parameters]
- return [sky130::diode_draw $drawdict]
-}
-
#----------------------------------------------------------------
-proc sky130::sky130_fd_pr__pd2nw_11v0_draw {parameters} {
+proc sky130::sky130_fd_pr__diode_pd2nw_11v0_draw {parameters} {
# Set a local variable for each rule in ruleset
foreach key [dict keys $sky130::ruleset] {