Added code to the magic device generator for drawing a 3.3V-5.5V deep nwell region (previously only the 1.8V deep nwell was available).
diff --git a/sky130/magic/sky130.tcl b/sky130/magic/sky130.tcl index 9d495f8..ccd780b 100644 --- a/sky130/magic/sky130.tcl +++ b/sky130/magic/sky130.tcl
@@ -147,8 +147,10 @@ "sky130::mvsubconn_draw" pdk1 magic::add_toolkit_command $layoutframe "substrate guard ring (5.0V)" \ "sky130::mvsubconn_guard_draw" pdk1 - magic::add_toolkit_command $layoutframe "deep n-well region" \ + magic::add_toolkit_command $layoutframe "deep n-well region (1.8V)" \ "sky130::deep_nwell_draw" pdk1 + magic::add_toolkit_command $layoutframe "deep n-well region (5.0V)" \ + "sky130::mvdeep_nwell_draw" pdk1 magic::add_toolkit_command $layoutframe "n-well region with guard ring (1.8V)" \ "sky130::nwell_draw" pdk1 magic::add_toolkit_command $layoutframe "n-well region with guard ring (5.0V)" \ @@ -750,6 +752,109 @@ #---------------------------------------------------------------- +proc sky130::mvdeep_nwell_draw {} { + set w [magic::i2u [box width]] + set h [magic::i2u [box height]] + if {$w < 3.0} { + puts stderr "MV Deep-nwell region width must be at least 3.0um" + return + } + if {$h < 3.0} { + puts stderr "MV Deep-nwell region height must be at least 3.0um" + return + } + suspendall + tech unlock * + paint dnwell + pushbox + pushbox + box grow c 0.55um + pushbox + box width 1.58um + paint nwell + popbox + pushbox + box height 1.58um + paint nwell + popbox + pushbox + box move n ${h}um + box move n 1.1um + box move s 1.58um + box height 1.58um + paint nwell + popbox + pushbox + box move e ${w}um + box move e 1.1um + box move w 1.58um + box width 1.58um + paint nwell + popbox + + popbox + box grow c 0.03um + + pushbox + box width 0 + box grow c 0.085um + paint li + pushbox + box grow n -0.3um + box grow s -0.3um + paint mvnsc + popbox + box grow c 0.1um + paint mvnsd + popbox + + pushbox + box height 0 + box grow c 0.085um + paint li + pushbox + box grow e -0.3um + box grow w -0.3um + paint mvnsc + popbox + box grow c 0.1um + paint mvnsd + popbox + + pushbox + box move n [box height]i + box height 0 + box grow c 0.085um + paint li + pushbox + box grow e -0.3um + box grow w -0.3um + paint mvnsc + popbox + box grow c 0.1um + paint mvnsd + popbox + + pushbox + box move e [box width]i + box width 0 + box grow c 0.085um + paint li + pushbox + box grow n -0.3um + box grow s -0.3um + paint mvnsc + box grow c 0.1um + paint mvnsd + popbox + + popbox + tech revert + resumeall +} + +#---------------------------------------------------------------- + proc sky130::res_recalc {field parameters} { set snake 0 set sterm 0.0