;================================================================================ ; Robert Johnstone ; Simon Fraser University ; ; Copyright 2000 Robert W. Johnstone ;-------------------------------------------------------------------------------- ; 2002/07/23 ; - modified code so that when include_C is true, the substrate capacitance ; is printed along with the regular capacitance ; 2002/06/04 ; - modified code to calculate capacitance when etch holes are not present ; 2002/06/03 ; - modified because dbCreateMumpsPin function interface was changed ; 2000/07/01 ; - created unless( boundp( 'admLibraryName ) warn( "Setting the destination library to default value of ADM" ) admLibraryName = "ADM" ) pcDefinePCell( list( ddGetObj(admLibraryName) "capacitor" "layout" ) ; end of list for first argument ( ( width 100.0 ) ( height 100.0 ) ( pin_size 20.0 ) ( include_C t ) ( include_EtchHoles t ) ) ; end of parameter list prog( ( pcTechFile pcNet pcShape rodObj p0a1_minSpacing p1p0_enclosure p1_nomSpacing p1_nomWidth p1_maxWidth p1a1_enclosure p1p2_enclosure p2p0_enclosure p2v_enclosure p2m_enclosure v_nomWidth h1_nomWidth line tmp w h x y count_x count_y ) ; load tech file rules pcTechFile = techGetTechFile( pcCellView ) p0a1_minSpacing = techGetSpacingRule( pcTechFile "minSpacing" "POLY0" "ANCHOR1" ) unless( p0a1_minSpacing warn("minSpacing rule for POLY0 and ANCHOR1 not set") ) p1p0_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY1" "POLY0" ) unless( p1p0_enclosure warn("minEnclosure rule for POLY1->POLY0 not set") ) p1_nomSpacing = techGetSpacingRule( pcTechFile "nomSpacing" "POLY1" ) unless( p1_nomSpacing warn("nomSpacing rule for POLY1 not set") ) p1_nomWidth = techGetSpacingRule( pcTechFile "nomWidth" "POLY1" ) unless( p1_nomWidth warn("nomWidth rule for POLY1 not set") ) p1_maxWidth = techGetSpacingRule( pcTechFile "maxWidth" "POLY1" ) unless( p1_maxWidth warn("maxWidth rule for POLY1 not set") ) p1a1_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY1" "ANCHOR1" ) unless( p1a1_enclosure warn("minEnclosure rule for POLY1->ANCHOR1 not set") ) p1p2_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY1" "POLY2" ) unless( p1p2_enclosure warn("minEnclosure rule for POLY1->POLY2 not set") ) p2p0_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY2" "POLY0" ) unless( p2p0_enclosure warn("minEnclosure rule for POLY2->POLY0 not set") ) p2v_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY2" "P1P2VIA" ) unless( p2v_enclosure warn("minEnclosure rule for POLY2->P1P2VIA not set") ) p2m_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY2" "METAL" ) unless( p2m_enclosure warn("minEnclosure rule for POLY2->METAL not set") ) v_nomWidth = techGetSpacingRule( pcTechFile "nomWidth" "P1P2VIA" ) unless( v_nomWidth warn("nomWidth rule for P1P2VIA not set") ) h1_nomWidth = techGetSpacingRule( pcTechFile "nomWidth" "HOLE1" ) unless( h1_nomWidth warn("nomWidth rule for HOLE1 not set") ) ; check parameters p1_nomWidth = if( (p1_nomWidth<0) 0 p1_nomWidth ) width = if( (widthparamVal + 2*SPCInfo->increment ) ) rodAssignHandleToParameter( ?parameter "height" ?rodObj rodObj ?handleName list( "lowerCenter" "upperCenter" ) ?displayName "height" ?stretchDir "y" ?userFunction lambda( (SPCInfo) SPCInfo->paramVal + 2*SPCInfo->increment ) ) ; Create the instNamePrefix property dbReplaceProp( pcCellView "instNamePrefix" "string" "capacitor" ) ; set version string dbReplaceProp( pcCellView "version" "string" "1.2.1" ) ; body SKILL code returns value t return(t) ) ; end of body-of-SKILL-code prog ) ; ; end of pcDefinePCell