Added a "gate shield" option for varactors to place a metal1 plate
above the device, connected between source and drain, to force
matching (so that area is not filled with density fill shapes).
diff --git a/VERSION b/VERSION
index 481e49e..35734c0 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.407
+1.0.408
diff --git a/sky130/magic/sky130.tcl b/sky130/magic/sky130.tcl
index 03c9d34..57ee4ee 100644
--- a/sky130/magic/sky130.tcl
+++ b/sky130/magic/sky130.tcl
@@ -5083,7 +5083,7 @@
 		compatible {sky130_fd_pr__cap_var_lvt \
 		sky130_fd_pr__cap_var_hvt sky130_fd_pr__cap_var} \
 		full_metal 1 viasrc 100 viadrn 100 viagate 100 \
-		viagb 0 viagr 0 viagl 0 viagt 0}
+		viagb 0 viagr 0 viagl 0 viagt 0 gshield 1}
 }
 
 proc sky130::sky130_fd_pr__cap_var_hvt_defaults {} {
@@ -5093,7 +5093,7 @@
 		compatible {sky130_fd_pr__cap_var_lvt \
 		sky130_fd_pr__cap_var_hvt sky130_fd_pr__cap_var} \
 		full_metal 1 viasrc 100 viadrn 100 viagate 100 \
-		viagb 0 viagr 0 viagl 0 viagt 0}
+		viagb 0 viagr 0 viagl 0 viagt 0 gshield 1}
 }
 
 proc sky130::sky130_fd_pr__cap_var_defaults {} {
@@ -5103,7 +5103,7 @@
 		compatible {sky130_fd_pr__cap_var_lvt \
 		sky130_fd_pr__cap_var_hvt sky130_fd_pr__cap_var} \
 		full_metal 1 viasrc 100 viadrn 100 viagate 100 \
-		viagb 0 viagr 0 viagl 0 viagt 0}
+		viagb 0 viagr 0 viagl 0 viagt 0 gshield 1}
 }
 
 #----------------------------------------------------------------
@@ -5221,6 +5221,9 @@
        magic::add_selectlist gencell "Device type" $sellist $parameters $device
     }
 
+    # Default-empty message area, used by the varactor dialog.
+    magic::add_message minfo "" $parameters brown
+
     magic::add_entry diffcov "Diffusion contact coverage (%)" $parameters
     magic::add_entry polycov "Poly contact coverage (%)" $parameters
     magic::add_entry rlcov "Guard ring contact coverage (%)" $parameters
@@ -5244,6 +5247,10 @@
 	magic::add_checkbox gtc "Add top guard ring contact" $parameters
     }
 
+    if {[string first "cap_var" $device] != -1} {
+	magic::add_checkbox gshield "Metal shield over gate" $parameters
+    }
+
     magic::add_entry viasrc "Source via coverage \[+/-\](%)" $parameters
     magic::add_entry viadrn "Drain via coverage \[+/-\](%)" $parameters
     magic::add_entry viagate "Gate via coverage \[+/-\](%)" $parameters
@@ -5731,6 +5738,7 @@
     set dev_sub_dist 0	;# device substrate distance (if nondefault dev_sub_type)
     set min_effl 0	;# gate length below which finger pitch must be stretched
     set diff_overlap_cont 0	;# extra overlap of end contact by diffusion
+    set gshield 0	;# no metal shield over gate (used for varactors)
 
     # Set a local variable for each parameter (e.g., $l, $w, etc.)
     foreach key [dict keys $parameters] {
@@ -5918,6 +5926,27 @@
 		${diff_type} ${diff_contact_type} li vert]]
     set diffarea $cext
     popbox
+    # Gate shield (only on varactors)
+    if {$gshield == 1} {
+ 	pushbox
+	box move w ${he}um
+	box move w ${gate_to_diffcont}um
+	box width [* 2 [+ ${he} ${gate_to_diffcont}]]um
+	box grow n [/ $cdwfull 2]um
+	box grow s [/ $cdwfull 2]um
+	paint m1
+	# Enforce slotting of large metal
+	set gsh [magic::i2u [box height]]
+	if {$gsh > 25} {
+	   box move n [/ $gsh 2]um
+	   box move s 1.15um
+	   box height 2.3um	;# Minimum m1 slot width
+	   box grow w -${via_size}um
+	   box grow e -${via_size}um
+	   erase m1
+	}
+	popbox
+    }
     # Top poly contact
     if {$topc} {
        pushbox
@@ -6675,6 +6704,15 @@
        dict set parameters nf $nf
     }
 
+    # Used by varactor only
+    if {$device == "sky130_fd_pr__cap_var"} {
+	# NOTE: Removed until update behavior is fixed.
+        # set magic::minfo_val "Warning:  No model exists for this device!"
+        set magic::minfo_val ""
+    } else {
+        set magic::minfo_val ""
+    }
+
     return $parameters
 }