Corrected the MOSFET generated cell drawing routine in magic for
sky130 so that unchecking the "top gate contact" and "bottom gate
contact" options works in the case of a narrow gate for which the
drawing routine uses alternating contacts. Previously, unchecking
these options would have no effect on the drawn layout.
diff --git a/VERSION b/VERSION
index 2248e45..5726fec 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.506
+1.0.507
diff --git a/sky130/magic/sky130.tcl b/sky130/magic/sky130.tcl
index 64b689d..30aa321 100644
--- a/sky130/magic/sky130.tcl
+++ b/sky130/magic/sky130.tcl
@@ -6446,6 +6446,11 @@
set $key [dict get $parameters $key]
}
+ # "topc" and "botc" may be modified for alternating top-bottom gate
+ # contacts. If so, original values are in "oldtopc" and "oldbotc".
+ if {![dict exists $parameters oldtopc]} {set oldtopc $topc}
+ if {![dict exists $parameters oldbotc]} {set oldbotc $botc}
+
# Draw the diffusion and poly
pushbox
box size 0 0
@@ -6680,7 +6685,7 @@
popbox
}
# Top poly contact
- if {$topc} {
+ if {$topc && $oldtopc} {
pushbox
box move n ${hw}um
box move n ${gate_to_polycont}um
@@ -6718,7 +6723,7 @@
popbox
}
# Bottom poly contact
- if {$botc} {
+ if {$botc && $oldbotc} {
pushbox
box move s ${hw}um
box move s ${gate_to_polycont}um
@@ -6852,6 +6857,8 @@
if {$nf > 1 && $l < $min_allc} {
set intc 1
set evenodd 1
+ dict set parameters oldtopc $topc
+ dict set parameters oldbotc $botc
set topc 1
set botc 1
dict set parameters topc 1