;================================================================================ ; Robert Johnstone ; Simon Fraser University ; ; Last Modified: 2000/11/01 ; ; Copyright 2000 Robert W. Johnstone ;-------------------------------------------------------------------------------- unless( boundp( 'admLibraryName ) warn( "Setting the destination library to default value of ADM" ) admLibraryName = "ADM" ) pcDefinePCell( list( ddGetObj(admLibraryName) "meter_dt" "layout" ) ; end of list for first argument ( ( length 100.0 ) ) ; end of parameter list prog( ( pcTechFile p1p2_enclosure p2_minWidth p2a2_enclosure a1_nomWidth vp1_enclosure poly y flag rodObj ) ; load tech file rules pcTechFile = techGetTechFile( pcCellView ) p1p2_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY1" "POLY2" ) unless( p1p2_enclosure warn("minEnclosure rule for POLY1->POLY2 not set") ) p2_minWidth = techGetSpacingRule( pcTechFile "minWidth" "POLY2" ) unless( p2_minWidth warn("minWidth rule for POLY2 not set") ) p2a2_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY2" "ANCHOR2" ) unless( p2a2_enclosure warn("minEnclosure rule for POLY2->ANCHOR2 not set") ) a1_nomWidth = techGetSpacingRule( pcTechFile "nomWidth" "ANCHOR1" ) unless( a1_nomWidth warn("nomWidth rule for ANCHOR1 not set") ) vp1_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "P1P2VIA" "POLY1" ) unless( vp1_enclosure warn("minEnclosure rule for P1P2VIA->POLY1 not set (double-thickness structures)") ) ; check parameters length = if( (length<2*p2_minWidth) 2*p2_minWidth length ) ; create meter y = 0 flag = t poly = list( ) while( (y < length) if( (flag==t) then poly = cons( p2_minWidth:y poly ) y = y + p2_minWidth poly = cons( p2_minWidth:y poly ) else poly = cons( 0:y poly ) y = y + p2_minWidth poly = cons( 0:y poly ) ) flag = !flag ) poly = cons( -2*p2a2_enclosure-a1_nomWidth:y poly ) poly = cons( -2*p2a2_enclosure-a1_nomWidth:0 poly ) rodObj = rodCreatePolygon( ?layer "POLY2" ?pts poly ) rodAssignHandleToParameter( ?parameter "length" ?rodObj rodObj ?handleName "upperCenter" ?displayName "length" ?stretchDir "y" ?stretchType "absolute" ?updateIncrement p2_minWidth ) rodAssignHandleToParameter( ?parameter "length" ?rodObj rodObj ?handleName "lowerCenter" ?displayName "length" ?stretchDir "y" ?stretchType "relative" ?moveOrigin t ?updateIncrement p2_minWidth ) ; add anchor dbCreateRect( pcCellView "ANCHOR1" list( -p2a2_enclosure:p2a2_enclosure -p2a2_enclosure-a1_nomWidth:y-p2a2_enclosure ) ) ; create POLY1 enclosure rodObj = rodCreateRect( ?layer "POLY1" ?fromObj rodObj ?size p1p2_enclosure ) ; create P1P2VIA enclosure rodObj = rodCreateRect( ?layer "P1P2VIA" ?fromObj rodObj ?size vp1_enclosure ) ; Create the instNamePrefix property dbReplaceProp( pcCellView "instNamePrefix" "string" "meter" ) ; set version string dbReplaceProp( pcCellView "version" "string" "1.0.1" ) ; body SKILL code returns value t return(t) ) ; end of body-of-SKILL-code prog ) ; ; end of pcDefinePCell