;================================================================================ ; Robert Johnstone ; Simon Fraser University ; ; Last Modified: 2000/11/29 ; ; Copyright 2000 Robert W. Johnstone ;-------------------------------------------------------------------------------- unless( boundp( 'admLibraryName ) warn( "Setting the destination library to default value of ADM" ) admLibraryName = "ADM" ) pcDefinePCell( list( ddGetObj(admLibraryName) "comb_linear_dt" "layout" ) ; end of list for first argument ( ( fingers 8 ) ( actuation 10.0 ) ( overlap 10.0 ) ( yoke_width 0.0 ) ( rotor_width 0.0 ) ( dimples 0 ) ) ; end of parameter list prog( ( pcTechFile pcShape rodObj p1p2_enclosure p2_minSpacing p2_minWidth p2_nomWidth p2a2_enclosure p1d_enclosure vp1_enclosure a1_nomWidth d_nomWidth rotor_length tmp x y pts) ; 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_minSpacing = techGetSpacingRule( pcTechFile "minSpacing" "POLY2" ) unless( p2_minSpacing warn("minSpacing rule for POLY2 not set") ) p2_minWidth = techGetSpacingRule( pcTechFile "minWidth" "POLY2" ) unless( p2_minWidth warn("minWidth rule for POLY2 not set") ) p2_nomWidth = techGetSpacingRule( pcTechFile "nomWidth" "POLY2" ) unless( p2_nomWidth warn("nomWidth rule for POLY2 not set") ) p2a2_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY2" "ANCHOR2" ) unless( p2a2_enclosure warn("minEnclosure rule for POLY@->ANCHOR2 not set") ) p1d_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY1" "DIMPLE" ) unless( p1d_enclosure warn("minEnclosure rule for POLY1->DIMPLE not set") ) vp1_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "P1P2VIA" "POLY1" ) unless( vp1_enclosure warn("minEnclosure rule for P1P2VIA->POLY1 not set (double thickness structures)") ) a1_nomWidth = techGetSpacingRule( pcTechFile "nomWidth" "ANCHOR1" ) unless( a1_nomWidth warn("nomWidth rule for ANCHOR1 not set") ) d_nomWidth = techGetSpacingRule( pcTechFile "nomWidth" "DIMPLE" ) unless( d_nomWidth warn("nomWidth rule for DIMPLE not set") ) ; check parameters rotor_width = if( (rotor_width0 && rotor_width1) then tmp = ( rotor_length - 2*p1d_enclosure - d_nomWidth ) / (dimples-1) for( lp 0 dimples-1 x = -rotor_length*0.5 + p1d_enclosure x = x + lp * tmp dbCreateRect( pcCellView "DIMPLE" list( x:-d_nomWidth*0.5 x+d_nomWidth:d_nomWidth*0.5 ) ) ) else if( (dimples>0) then tmp = d_nomWidth*0.5 dbCreateRect( pcCellView "DIMPLE" list( -tmp:-tmp tmp:tmp )) ) ) ; create POLY1 base for double thickness x = rotor_length*0.5 + p2_minSpacing+ yoke_width + p1p2_enclosure y = rotor_width*0.5 + 2*p2_minSpacing + actuation + overlap + actuation + 2*p2_minSpacing + yoke_width + p1p2_enclosure tmp = - rotor_width*0.5 - p1p2_enclosure rodObj = rodCreateRect( ?layer "POLY1" ?bBox list( -x:tmp x:y ) ) rodCreateRect( ?layer "P1P2VIA" ?fromObj rodObj ?size vp1_enclosure ) ; Create the instNamePrefix property dbReplaceProp( pcCellView "instNamePrefix" "string" "comb_linear" ) ; 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