;;; PCell Designer File (format version 2.2) ;;; File-out of the PCell Designer pcell "NmosDemo24"/"mos_base"/"layout" (pcdPcell ;; Mixins ?mixins nil ;; Create CDF? ?createCDF t ;; Reference cell for CDF ?referenceCDF nil ;; Main points ?mainPoints nil ;; Initial size ?initSize nil ;; Device Variables ?devVars nil ;; Device Variables visible to the commands ?guiVisibleDevVarNames nil ;; Methods used as commands ?methodCommands nil ;; PCell and CDF Parameters ?classEditorChanges ((nil name "l" nature both type number units "lengthMetric" value "45n" prompt "Gate Length") (nil name "w" nature both type number units "lengthMetric" value "120n" prompt "Finger Width") (nil name "fingers" nature both type int value "1" prompt "Fingers") (nil nature pcell name "abuttedLeft" type boolean value "nil") (nil nature pcell name "abuttedRight" type boolean value "nil") (nil choices (None Top Bottom Both) nature both name "gateconn" type cyclic value "None" prompt "Gate Connection") (nil choices (None Source Drain Both) nature both name "sdconn" type cyclic value "None" prompt "S/D Connection") (nil nature both name "swapsd" type boolean value "nil" prompt "Swap S/D")) ;; Simulation Information ?simulation (simulation) ;; Source Cell View ?sourceCellView ("NmosDemo24" "mos_base" "layout") ;; Last Edited with PCell Designer Version ?pcdVersion "2-5-5" ;; Method definitions ?methods ((newCommand command (newCommand ?name draw\ implant ?commandClass pcmdCommand ?category "MOS" ?help nil ?parameters (implant (layer nil ?valuep t ?requiredp t ?isExpression nil ?keyword t) well (layer nil ?valuep t ?requiredp t ?isExpression nil ?keyword t))) body ((group ?renderInfo (?renderAsFigGroup nil) name (group "implant" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of the group to create") body (body ((rectangle name (lvalue "" ?valuep nil ?requiredp nil ?isExpression nil ?keyword nil ?help "The created rectangles, if any.") layer (layer "well" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The layer or LPP for the created rectangles.") source (geo (geo type "Expression" points nil group "" name nil expression (grow (evalstringBbox "0.06" "0.06" "0.06" "0.06") (group ("active")))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The bounding boxes of the rectangles to create.")) (polygon name (lvalue "" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The created polygons, if any.") layer (layer "implant" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The layer or LPP for the created polygons.") source (geo (geo type "Expression" points nil group "" name nil expression (lor (grow (evalstringBbox "0.07" "0.07" "0.07" "0.07") (group ("active"))) (grow (evalstringBbox "0.1" "0.1" "0.1" "0.1") (land (group ("active")) (group ("gate")))))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The outlines of the polygons to create."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) lock (boolean nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "Lock the shapes of a group in a figgroup")))) (newCommand command (newCommand ?name setup\ connectivity ?commandClass pcmdCommand ?category "MOS" ?help nil ?parameters (source_term (string "S" ?valuep t ?requiredp t ?isExpression nil ?keyword t) drain_term (string "D" ?valuep t ?requiredp t ?isExpression nil ?keyword t) gate_term (string "G" ?valuep t ?requiredp t ?isExpression nil ?keyword t))) body ((terminal name (string "source_term" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The name of the terminal to create or re-use.") direction (terminal_direction input ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "The terminal direction") retain (boolean "nil" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Do not delete this terminal, even if no associated pins were created.") body (body ((pin name (string "" ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "If given, the name for the new pin. If ommitted, a name will be generated automatically.") accessDirection (pinfig_access ("left") ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "The access direction of the new pin") body (body ((geometry name (lvalue "" ?valuep nil ?requiredp nil ?isExpression nil ?keyword nil ?help "The result of the geometry query.") geo (geo (geo grow 0 type "Group" points nil group "source" name nil expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The geometry query to evaluate.") results (geo_query_results_enum geo ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The result type.") first_result_only (boolean "nil" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "If true, return only the first result found."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)) (terminal name (string "drain_term" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The name of the terminal to create or re-use.") direction (terminal_direction output ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "The terminal direction") retain (boolean "nil" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Do not delete this terminal, even if no associated pins were created.") body (body ((pin name (string "" ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "If given, the name for the new pin. If ommitted, a name will be generated automatically.") accessDirection (pinfig_access ("left") ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "The access direction of the new pin") body (body ((geometry name (lvalue "" ?valuep nil ?requiredp nil ?isExpression nil ?keyword nil ?help "The result of the geometry query.") geo (geo (geo grow 0 type "Group" points nil group "drain" name nil expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The geometry query to evaluate.") results (geo_query_results_enum geo ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The result type.") first_result_only (boolean "nil" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "If true, return only the first result found."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)) (group ?renderInfo (?renderAsFigGroup nil) name (group "gate_pins" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of the group to create") body (body ((terminal name (string "gate_term" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The name of the terminal to create or re-use.") direction (terminal_direction inputOutput ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "The terminal direction") retain (boolean "nil" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Do not delete this terminal, even if no associated pins were created.") body (body ((pin name (string "" ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "If given, the name for the new pin. If ommitted, a name will be generated automatically.") accessDirection (pinfig_access ("left") ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "The access direction of the new pin") body (body ((rectangle name (lvalue "" ?valuep nil ?requiredp nil ?isExpression nil ?keyword nil ?help "The created rectangles, if any.") layer (layer "(\"Poly\" \"drawing\")" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The layer or LPP for the created rectangles.") source (geo (geo type "Expression" points nil group "" name nil net nil expression (append (landnot (bisect "north" (group ("gate"))) (group ("active"))))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The bounding boxes of the rectangles to create."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)) (pin name (string "" ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "If given, the name for the new pin. If ommitted, a name will be generated automatically.") accessDirection (pinfig_access ("left") ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "The access direction of the new pin") body (body ((rectangle name (lvalue "" ?valuep nil ?requiredp nil ?isExpression nil ?keyword nil ?help "The created rectangles, if any.") layer (layer "(\"Poly\" \"drawing\")" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The layer or LPP for the created rectangles.") source (geo (geo type "Expression" points nil group "" name nil net nil expression (append (landnot (bisect "south" (group ("gate"))) (group ("active"))))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The bounding boxes of the rectangles to create."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil))) ?valuep t ?requiredp t ?isExpression t ?keyword nil))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) lock (boolean nil ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Lock the shapes of a group in a figgroup")))) (newCommand command (newCommand ?name setup\ abutment ?commandClass pcmdCommand ?category "MOS" ?help nil ?parameters (firstSD (geo (geo type "Name" points nil group "" name "firstSD" expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword t) lastSD (geo (geo type "Name" points nil group "" name "lastSD" expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword t))) body ((distance ?comment "Measure the width of the Oxide pin, which tfbTestAbut will need" name (lvalue "sdOxideWidth" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The shortest distance of those measured.") from (geo (geo type "Expression" points nil group "" name nil expression (edge "west" (layer readstring("(\"Oxide\" \"drawing\")") (name "firstSD")))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "One or more points, outlines, or shapes.") from_handle (handle (point northWest) ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "Handle at the source shape for the measurement.") to (geo (geo type "Expression" points nil group "" name nil expression (edge "east" (layer readstring("(\"Oxide\" \"drawing\")") (name "firstSD")))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "One or more points, outlines, or shapes.") to_handle (handle (point northWest) ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "Handle for the measurement target.") result_type (distance_type length ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The format to return the disantce in.") body (body nil ?valuep t ?requiredp t ?isExpression t ?keyword nil)) (skill\ abutment ?comment "Left abutment" source (geo (geo type "Expression" points nil group "" name "firstSD" expression (layer readstring("(\"Oxide\" \"drawing\")") (name "firstSD"))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "Any figures found here will have abutment properties set on them.") abutment_function (string "tfbTestAbut" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of a pre-existing abutment function.") directions (pinfig_access ("right" "left") ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The value of the abutAccessDir property.") abutClass (string "" ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "The value of the abutClass property. If not given, the default will be pcd") inst_spacing (boolean "nil" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "If true (the default), vxlInstSpacingRule will be set to abutFunction to t and vxlInstSpacingDir to the value of abutAccessDir") props (names_and_values (("tfbDistance" "sdOxideWidth") ("tfbParam" "\"abuttedLeft\"")) ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Any additional name/value pairs here will be set as properties on the source figures.")) (skill\ abutment ?comment "Right abutment" source (geo (geo type "Expression" points nil group "" name "lastSD" expression (layer readstring("(\"Oxide\" \"drawing\")") (name "lastSD"))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "Any figures found here will have abutment properties set on them.") abutment_function (string "tfbTestAbut" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of a pre-existing abutment function.") directions (pinfig_access ("left" "right") ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The value of the abutAccessDir property.") abutClass (string "" ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "The value of the abutClass property. If not given, the default will be pcd") inst_spacing (boolean "nil" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "If true (the default), vxlInstSpacingRule will be set to abutFunction to t and vxlInstSpacingDir to the value of abutAccessDir") props (names_and_values (("tfbDistance" "sdOxideWidth") ("tfbParam" "\"abuttedRight\"")) ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Any additional name/value pairs here will be set as properties on the source figures.")) when(?comment "When abutted, remove left geometry" condition (string "abuttedLeft" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The condition to check.") then (body (delete(?comment "" source (geo (geo type "Expression" points nil group "" name nil expression ((name "firstSD") - (layer readstring("(\"Oxide\" \"drawing\")") (name "firstSD")))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to delete.") reference (geo (geo grow 0 type "Group" points nil group nil name nil expression nil) ?lazyp nil ?valuep nil ?requiredp nil ?isExpression t ?keyword nil ?help "If given, only shapes overlapping reference will be deleted."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)) when(?comment "When abutted, remove right geometry" condition (string "abuttedRight" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The condition to check.") then (body (delete(source (geo (geo type "Expression" points nil group "" name nil expression ((name "lastSD") - (layer readstring("(\"Oxide\" \"drawing\")") (name "lastSD")))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to delete.") reference (geo (geo grow 0 type "Group" points nil group nil name nil expression nil) ?lazyp nil ?valuep nil ?requiredp nil ?isExpression t ?keyword nil ?help "If given, only shapes overlapping reference will be deleted."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)))) (newCommand command (newCommand ?name baseShapes ?commandClass pcmdCommand ?category "MOS" ?help nil ?parameters nil) body ((group ?renderInfo (?renderAsFigGroup nil) ?comment " " name (group "source" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of the group to create") body (body ((rectangle name (lvalue "" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The created rectangles, if any.") layer (layer ("Metal1" "drawing") ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The layer or LPP for the created rectangles.") source (geo (geo type "Points" points ((-0.11 0.0) (-0.05 0.0) (-0.05 0.12) (-0.11 0.12))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The bounding boxes of the rectangles to create.")) (rectangle ?comment "" name (lvalue "" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The created rectangles, if any.") layer (layer ("Oxide" "drawing") ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The layer or LPP for the created rectangles.") source (geo (geo type "Points" points ((-0.14 0.0) (-0.02 0.0) (-0.02 0.12) (-0.14 0.12))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The bounding boxes of the rectangles to create."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) lock (boolean nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "Lock the shapes of a group in a figgroup")) (group ?renderInfo (?renderAsFigGroup nil) name (group "drain" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of the group to create") body (body ((rectangle name (lvalue "" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The created rectangles, if any.") layer (layer ("Metal1" "drawing") ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The layer or LPP for the created rectangles.") source (geo (geo type "Points" points ((0.095 0.0) (0.155 0.0) (0.155 0.12) (0.095 0.12))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The bounding boxes of the rectangles to create.")) (rectangle name (lvalue "" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The created rectangles, if any.") layer (layer ("Oxide" "drawing") ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The layer or LPP for the created rectangles.") source (geo (geo type "Points" points ((0.065 0.0) (0.185 0.0) (0.185 0.12) (0.065 0.12))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The bounding boxes of the rectangles to create."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) lock (boolean nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "Lock the shapes of a group in a figgroup")) (group ?renderInfo (?renderAsFigGroup nil) name (group "gate" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of the group to create") body (body ((rectangle name (lvalue "" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The created rectangles, if any.") layer (layer ("Poly" "drawing") ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The layer or LPP for the created rectangles.") source (geo (geo type "Points" points ((0.0 -0.1) (0.045 -0.1) (0.045 0.22) (0.0 0.22))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The bounding boxes of the rectangles to create."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) lock (boolean nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "Lock the shapes of a group in a figgroup")) (group ?renderInfo (?renderAsFigGroup nil) name (group "active" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of the group to create") body (body ((rectangle name (lvalue "" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The created rectangles, if any.") layer (layer ("Oxide" "drawing") ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The layer or LPP for the created rectangles.") source (geo (geo type "Points" points ((-0.14 0.0) (0.185 0.0) (0.185 0.12) (-0.14 0.12))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The bounding boxes of the rectangles to create."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) lock (boolean nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "Lock the shapes of a group in a figgroup")) (group ?renderInfo (?renderAsFigGroup nil) name (group "implant" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of the group to create") body (body nil ?valuep t ?requiredp t ?isExpression t ?keyword nil) lock (boolean nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "Lock the shapes of a group in a figgroup")) (group ?renderInfo (?renderAsFigGroup nil) name (group "via" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of the group to create") body (body ((para body (body ((via name (lvalue "" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The created vias, if any.") viaName (string "M1_DIFF" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of the standard via definition to use.") transform (transformation ((0.125 0.06) "R0" 1.0) ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The point and rotation for the created via.") paramList (sexp nil ?valuep t ?requiredp t ?isExpression nil ?keyword nil))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) scratch (boolean t ?valuep t ?requiredp t ?isExpression t ?keyword t))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) lock (boolean nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "Lock the shapes of a group in a figgroup")) (group ?renderInfo (?renderAsFigGroup nil) name (group "gate_via" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of the group to create") body (body ((para body (body ((via name (lvalue "" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The created vias, if any.") viaName (string "M1_PO" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of the standard via definition to use.") transform (transformation ((0.06 0.32) "R90" 1.0) ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The point and rotation for the created via.") paramList (sexp nil ?valuep t ?requiredp t ?isExpression nil ?keyword nil))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) scratch (boolean t ?valuep t ?requiredp t ?isExpression t ?keyword t))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) lock (boolean nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "Lock the shapes of a group in a figgroup")))) (newCommand command (newCommand ?name draw\ fingers ?commandClass pcmdCommand ?category "MOS" ?help nil ?parameters (firstSD (lvalue nil ?valuep t ?requiredp t ?isExpression t ?keyword t) lastSD (lvalue nil ?valuep t ?requiredp t ?isExpression t ?keyword t))) body ((distance name (lvalue "pitch" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The shortest distance of those measured.") from (geo (geo type "Expression" points nil group "" name nil expression (edge "west" (layer readstring("(\"Metal1\" \"drawing\")") (group ("source"))))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "One or more points, outlines, or shapes.") from_handle (handle (point northWest) ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "Handle at the source shape for the measurement.") to (geo (geo type "Expression" points nil group "" name nil expression (edge "west" (layer readstring("(\"Metal1\" \"drawing\")") (group ("drain"))))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "One or more points, outlines, or shapes.") to_handle (handle (point northWest) ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "Handle for the measurement target.") result_type (distance_type length ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The format to return the disantce in.") body (body nil ?valuep t ?requiredp t ?isExpression t ?keyword nil)) (geometry ?comment "" name (lvalue "firstSD" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The result of the geometry query.") geo (geo (geo grow 0 type "Group" points nil group "source" name nil expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The geometry query to evaluate.") results (geo_query_results_enum geo ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The result type.") first_result_only (boolean "nil" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "If true, return only the first result found.")) (geometry ?comment "" name (lvalue "lastSD" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The result of the geometry query.") geo (geo (geo grow 0 type "Group" points nil group "drain" name nil expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The geometry query to evaluate.") results (geo_query_results_enum geo ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The result type.") first_result_only (boolean "nil" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "If true, return only the first result found.")) (repeat ?comment "" count_variable (binding "n" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "If given, this name will be visible during execution of the body, with values counting up from 0.") repeat (int "fingers-1" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "Number of times to execute the body.") body (body ((transforming name (lvalue "trf" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The most recent transformation.") transform (transformation (("pitch" "0") "R0" 1.0) ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The amount by which to shift the current transformation.") body (body ((copy name (lvalue "" ?valuep nil ?requiredp nil ?isExpression nil ?keyword nil ?help "The newly created shapes.") source (geo (geo grow 0 type "Group" points nil group ("gate" "gate_pins") name nil net nil expression nil) ?lazyp t ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to copy.") transform (transformation (("0" "0") "R0" 1.0) ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The transformation from the original to the copy, for each shape copied. If there is a current transform in place, this transform will be added after it.") preserve_groups (boolean t ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "If true, the copied shapes will be added back to the groups their sources are in.") preserve_para (boolean t ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "If true, copies of para shapes will themselves be para shapes.") preserve_color (boolean nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "If true, copies of shapes will retain the color of the original. Otherwise, they will be grey.") connectivity (copy_connectivity must ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Determines the connectivity relationship of the original shapes to the new copies.") repeat (int "1" ?valuep nil ?requiredp nil ?isExpression t ?keyword t ?help "Number of copies to create.")) if(condition (string "evenp(n)" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The condition.") then (body ((copy ?comment "" name (lvalue "lastSD" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The newly created shapes.") source (geo (geo grow 0 type "Group" points nil group "source" name nil expression nil) ?lazyp t ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to copy.") transform (transformation (("pitch" "0") "R0" 1.0) ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The transformation from the original to the copy, for each shape copied. If there is a current transform in place, this transform will be added after it.") preserve_groups (boolean "t" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "If true, the copied shapes will be added back to the groups their sources are in.") preserve_para (boolean "t" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "If true, copies of para shapes will themselves be para shapes.") preserve_color (boolean nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "If true, copies of shapes will retain the color of the original. Otherwise, they will be grey.") connectivity (copy_connectivity must ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Determines the connectivity relationship of the original shapes to the new copies.") repeat (int "1" ?valuep nil ?requiredp nil ?isExpression t ?keyword t ?help "Number of copies to create."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) else (body ((copy name (lvalue "lastSD" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The newly created shapes.") source (geo (geo grow 0 type "Group" points nil group "drain" name nil expression nil) ?lazyp t ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to copy.") transform (transformation (("0" "0") "R0" 1.0) ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The transformation from the original to the copy, for each shape copied. If there is a current transform in place, this transform will be added after it.") preserve_groups (boolean "t" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "If true, the copied shapes will be added back to the groups their sources are in.") preserve_para (boolean "t" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "If true, copies of para shapes will themselves be para shapes.") preserve_color (boolean nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "If true, copies of shapes will retain the color of the original. Otherwise, they will be grey.") connectivity (copy_connectivity must ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Determines the connectivity relationship of the original shapes to the new copies.") repeat (int "1" ?valuep nil ?requiredp nil ?isExpression t ?keyword t ?help "Number of copies to create."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil))) ?valuep t ?requiredp t ?isExpression t ?keyword nil))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)) (use\ transform transform (sexp "trf" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The transform to use. This should have the form of a Cadence standard transform: ((dX dY) rotation)") body (body ((stretch source (geo (geo grow 0 type "Group" points nil group ("active" "implant") name nil expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to stretch.") reference (geo (geo type "Expression" points nil group nil name nil expression nil) ?lazyp nil ?valuep nil ?requiredp nil ?isExpression t ?keyword nil ?help "Reference shapes to select the edges to be stretched.") compass (compass nil ?valuep nil ?requiredp nil ?isExpression nil ?keyword nil ?help "Stretch direction.") transform (transformation (("0" "0") "R0" 1.0) ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "Amount of the stretch. Any current transform will be taken into account."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)))) (newCommand command (newCommand ?name sdstretch ?commandClass pcmdCommand ?category "MOS" ?help nil ?parameters (w (float "0.0" ?valuep t ?requiredp t ?isExpression t ?keyword t) l (float "0.0" ?valuep t ?requiredp t ?isExpression t ?keyword t))) body ((height name (lvalue "initW" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The measured height or heights.") geo (geo (geo type "Expression" points nil group "" name nil expression (layer readstring("(\"Metal1\" \"drawing\")") (group ("source")))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to measure.") first_result_only (boolean "t" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "If true, only the first measured height is returned, otherwise a list of all heights is returned.")) (width name (lvalue "initL" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The measured width.") geo (geo (geo type "Expression" points nil group "" name nil expression (layer readstring("(\"Poly\" \"drawing\")") (group ("gate")))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to measure.") first_result_only (boolean "t" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "If true, only the first width is returned, otherwise return a list of all measured widths, one per shape.")) (stretch source (geo (geo grow 0 type "Group" points nil group ("active" "drain" "gate" "implant" "source") name nil expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to stretch.") reference (geo (geo type "Expression" points nil group nil name nil expression nil) ?lazyp nil ?valuep nil ?requiredp nil ?isExpression t ?keyword nil ?help "Reference shapes to select the edges to be stretched.") compass (compass nil ?valuep nil ?requiredp nil ?isExpression nil ?keyword nil ?help "Stretch direction.") transform (transformation (("0" "w-initW") "R0" 1.0) ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "Amount of the stretch. Any current transform will be taken into account.")) (stretch source (geo (geo grow 0 type "Group" points nil group ("active" "drain" "gate" "implant") name nil expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to stretch.") reference (geo (geo type "Expression" points nil group nil name nil expression nil) ?lazyp nil ?valuep nil ?requiredp nil ?isExpression t ?keyword nil ?help "Reference shapes to select the edges to be stretched.") compass (compass east ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "Stretch direction.") transform (transformation (("l-initL" "0") "R0" 1.0) ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "Amount of the stretch. Any current transform will be taken into account.")) (group ?renderInfo (?renderAsFigGroup nil) name (group "source" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of the group to create") body (body ((via\ fill via (geo (geo grow 0 type "Group" points nil group "via" name "" expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The via or vias to use.") target (geo (geo type "Expression" points nil group "" name nil expression (layer readstring("(\"Oxide\" \"drawing\")") (group ("source")))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "The region to be filled.") enclosure (enclosure "0.0" ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "The minimum spacing between the vias and the region boundary.") justifyx (xfill "center" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Justification in X direction.") justifyy (yfill "center" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Justification in Y direction.") body (body nil ?valuep t ?requiredp t ?isExpression t ?keyword t))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) lock (boolean nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "Lock the shapes of a group in a figgroup")) (group ?renderInfo (?renderAsFigGroup nil) name (group "drain" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name of the group to create") body (body ((via\ fill via (geo (geo grow 0 type "Group" points nil group "via" name "" expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The via or vias to use.") target (geo (geo type "Expression" points nil group "" name nil expression (layer readstring("(\"Oxide\" \"drawing\")") (group ("drain")))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "The region to be filled.") enclosure (enclosure "0.0" ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "The minimum spacing between the vias and the region boundary.") justifyx (xfill "center" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Justification in X direction.") justifyy (yfill "center" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Justification in Y direction.") body (body nil ?valuep t ?requiredp t ?isExpression t ?keyword t))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) lock (boolean nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "Lock the shapes of a group in a figgroup")))) (newCommand command (newCommand ?name route ?commandClass pcmdCommand ?category "MOS" ?help nil ?parameters (name (lvalue "" ?valuep t ?requiredp t ?isExpression nil ?keyword t) trunk (lvalue "" ?valuep t ?requiredp t ?isExpression nil ?keyword t) source_shapes (geo (geo grow 0 type "Group" points nil group nil name nil expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword t) layer (layer "(\"Metal1\" \"drawing\")" ?valuep t ?requiredp t ?isExpression nil ?keyword t) side (compass north ?valuep t ?requiredp t ?isExpression nil ?keyword t) width (float "0.1" ?valuep t ?requiredp t ?isExpression t ?keyword t) avoid_layer (layer "(\"Metal1\" \"drawing\")" ?valuep t ?requiredp t ?isExpression nil ?keyword t))) body (set(settings (settings (("gap" "0.05" ?alert nil)) ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The name/value pairs to set.")) (rectangle name (lvalue "routing" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The created rectangles, if any.") layer (layer "layer" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The layer or LPP for the created rectangles.") source (geo (geo type "Expression" points nil group "" name nil expression (grow (evalstringBbox "0.0" "0.0" "0.0" "gap") (edge evalstring("side") (layer evalstring("layer") (name "source_shapes"))))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The bounding boxes of the rectangles to create.")) when(condition (string "side=='south" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The condition to check.") then (body ((move source (geo (geo type "Name" points nil group "" name "routing" expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to move.") transform (transformation (("0" "-gap") "R0" 1.0) ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The amount to move the shapes. Any current transformation will be taken into account."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)) (distance name (lvalue "d" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The shortest distance of those measured.") from (geo (geo type "Expression" points nil group "" name nil expression (edge evalstring("side") (bbox (name "routing")))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "One or more points, outlines, or shapes.") from_handle (handle (point northWest) ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "Handle at the source shape for the measurement.") to (geo (geo type "Expression" points nil group "" name nil expression (edge evalstring("side") (bbox (layer evalstring("layer") (shapes)) (layer evalstring("avoid_layer") (shapes))))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "One or more points, outlines, or shapes.") to_handle (handle (point northWest) ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "Handle for the measurement target.") result_type (distance_type transformation ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The format to return the disantce in.") body (body ((stretch source (geo (geo type "Name" points nil group "" name "routing" expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to stretch.") reference (geo (geo type "Expression" points nil group nil name nil expression nil) ?lazyp nil ?valuep nil ?requiredp nil ?isExpression t ?keyword nil ?help "Reference shapes to select the edges to be stretched.") compass (compass nil ?valuep nil ?requiredp nil ?isExpression nil ?keyword nil ?help "Stretch direction.") transform (transformation (("0" "0") "R0" 1.0) ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "Amount of the stretch. Any current transform will be taken into account."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)) (rectangle name (lvalue "trunk" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The created rectangles, if any.") layer (layer "layer" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The layer or LPP for the created rectangles.") source (geo (geo type "Expression" points nil group "" name nil expression (grow (evalstringBbox "0.0" "0.0" "0.0" "width") (edge evalstring("side") (bbox (name "routing"))))) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The bounding boxes of the rectangles to create.")) when(condition (string "side=='south" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The condition to check.") then (body ((move source (geo (geo type "Name" points nil group "" name "trunk" expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to move.") transform (transformation (("0" "-width") "R0" 1.0) ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The amount to move the shapes. Any current transformation will be taken into account."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)) (geometry name (lvalue "name" ?valuep t ?requiredp nil ?isExpression nil ?keyword nil ?help "The result of the geometry query.") geo (geo (geo type "Name" points nil group "" name ("routing" "trunk") expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The geometry query to evaluate.") results (geo_query_results_enum geo ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The result type.") first_result_only (boolean "nil" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "If true, return only the first result found.")))) (method command draw body ((baseShapes ?comment " ") (sdstretch ?comment " " w (float "w" ?valuep t ?requiredp t ?isExpression t ?keyword t) l (float "l" ?valuep t ?requiredp t ?isExpression t ?keyword t)) if(condition (string "swapsd" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The condition.") then (body ((setup\ connectivity source_term (string "D" ?valuep t ?requiredp t ?isExpression nil ?keyword t) drain_term (string "S" ?valuep t ?requiredp t ?isExpression nil ?keyword t) gate_term (string "G" ?valuep t ?requiredp t ?isExpression nil ?keyword t))) ?valuep t ?requiredp t ?isExpression t ?keyword nil) else (body ((setup\ connectivity source_term (string "S" ?valuep t ?requiredp t ?isExpression nil ?keyword t) drain_term (string "D" ?valuep t ?requiredp t ?isExpression nil ?keyword t) gate_term (string "G" ?valuep t ?requiredp t ?isExpression nil ?keyword t))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)) (draw\ fingers firstSD (lvalue "firstSD" ?valuep t ?requiredp t ?isExpression nil ?keyword t) lastSD (lvalue "lastSD" ?valuep t ?requiredp t ?isExpression nil ?keyword t)) (setup\ abutment ?comment "Setup abutment for the first and last SD groups" firstSD (geo (geo type "Name" points nil group "" name "firstSD" expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword t) lastSD (geo (geo type "Name" points nil group "" name "lastSD" expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword t)) when(condition (string "fingers>1" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The condition to check.") then (body (when(condition (string "sdconn==\"Source\" || sdconn==\"Both\"" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The condition to check.") then (body ((route name (lvalue "sroute" ?valuep t ?requiredp t ?isExpression nil ?keyword t) trunk (lvalue "" ?valuep t ?requiredp t ?isExpression nil ?keyword t) source_shapes (geo (geo type "Expression" points nil group nil name nil expression (terminal "S")) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword t) layer (layer "(\"Metal1\" \"drawing\")" ?valuep t ?requiredp t ?isExpression nil ?keyword t) side (compass north ?valuep t ?requiredp t ?isExpression nil ?keyword t) width (float "0.06" ?valuep t ?requiredp t ?isExpression t ?keyword t) avoid_layer (layer "(\"Metal1\" \"drawing\")" ?valuep t ?requiredp t ?isExpression nil ?keyword t))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)) when(condition (string "sdconn==\"Drain\" || sdconn==\"Both\"" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The condition to check.") then (body ((route name (lvalue "droute" ?valuep t ?requiredp t ?isExpression nil ?keyword t) trunk (lvalue "" ?valuep t ?requiredp t ?isExpression nil ?keyword t) source_shapes (geo (geo type "Expression" points nil group nil name nil expression (terminal "D")) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword t) layer (layer "(\"Metal1\" \"drawing\")" ?valuep t ?requiredp t ?isExpression nil ?keyword t) side (compass south ?valuep t ?requiredp t ?isExpression nil ?keyword t) width (float "0.06" ?valuep t ?requiredp t ?isExpression t ?keyword t) avoid_layer (layer "(\"Metal1\" \"drawing\")" ?valuep t ?requiredp t ?isExpression nil ?keyword t))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)) when(condition (string "gateconn==\"Top\" || gateconn==\"Both\"" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The condition to check.") then (body ((route name (lvalue "gateroute_top" ?valuep t ?requiredp t ?isExpression nil ?keyword t) trunk (lvalue "trunk_top" ?valuep t ?requiredp t ?isExpression nil ?keyword t) source_shapes (geo (geo grow 0 type "Group" points nil group "gate" name nil expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword t) layer (layer "(\"Poly\" \"drawing\")" ?valuep t ?requiredp t ?isExpression nil ?keyword t) side (compass north ?valuep t ?requiredp t ?isExpression nil ?keyword t) width (float "0.1" ?valuep t ?requiredp t ?isExpression t ?keyword t) avoid_layer (layer "(\"Metal1\" \"drawing\")" ?valuep t ?requiredp t ?isExpression nil ?keyword t))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)) when(condition (string "gateconn==\"Bottom\" || gateconn==\"Both\"" ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The condition to check.") then (body ((route name (lvalue "gateroute_bot" ?valuep t ?requiredp t ?isExpression nil ?keyword t) trunk (lvalue "trunk_bot" ?valuep t ?requiredp t ?isExpression nil ?keyword t) source_shapes (geo (geo grow 0 type "Group" points nil group "gate" name nil expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword t) layer (layer "(\"Poly\" \"drawing\")" ?valuep t ?requiredp t ?isExpression nil ?keyword t) side (compass south ?valuep t ?requiredp t ?isExpression nil ?keyword t) width (float "0.1" ?valuep t ?requiredp t ?isExpression t ?keyword t) avoid_layer (layer "(\"Metal1\" \"drawing\")" ?valuep t ?requiredp t ?isExpression nil ?keyword t))) ?valuep t ?requiredp t ?isExpression t ?keyword nil)) (via\ fill via (geo (geo grow 0 type "Group" points nil group "gate_via" name "" expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The via or vias to use.") target (geo (geo type "Name" points nil group "" name ("trunk_bot" "trunk_top") expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "The region to be filled.") enclosure (enclosure "0.0" ?valuep t ?requiredp t ?isExpression t ?keyword t ?help "The minimum spacing between the vias and the region boundary.") justifyx (xfill "center" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Justification in X direction.") justifyy (yfill "center" ?valuep t ?requiredp t ?isExpression nil ?keyword t ?help "Justification in Y direction.") body (body nil ?valuep t ?requiredp t ?isExpression t ?keyword t)) (merge name (lvalue "" ?valuep t ?requiredp t ?isExpression nil ?keyword nil ?help "The merged shapes.") source (geo (geo type "Name" points nil group "" name ("droute" "gateroute_bot" "gateroute_top" "sroute") expression nil) ?lazyp nil ?valuep t ?requiredp t ?isExpression t ?keyword nil ?help "The shapes to merge.") layer (layer "nil" ?valuep nil ?requiredp nil ?isExpression nil ?keyword t ?help "If provided, the merged shapes will be moved to this layer."))) ?valuep t ?requiredp t ?isExpression t ?keyword nil))))) ;; Imported local (Skill++) definitions ?importedCode nil ;; Saved state of the GUI ?guiData (nil selectedCommands (pcdGuiNM_draw_setup_20connectivity1) activeTab "draw" openTabs ("setup connectivity" "draw fingers" "sdstretch" "draw") commandPaletteSelection nil commandPalette (nil Add t Control\ Flow t MOS t)) )