;================================================================================ ; Robert Johnstone ; Simon Fraser University ; ; Copyright 2001,2002 Robert W. Johnstone ;-------------------------------------------------------------------------------- ; 2002/06/03 ; - modified code because interface to dbCreateMumpsRoundRect changed ; 2002/02/21 ; - "removed dimples" parameter ; - dimple count for shuttle now calculated from tech file ; - dimple spacing governed by maxSpacing rule ; 2001/07/23 ; - creation date unless( boundp( 'admLibraryName ) warn( "Setting the destination library to default value of ADM" ) admLibraryName = "ADM" ) pcDefinePCell( list( ddGetObj(admLibraryName) "tipuator" "layout" ) ; end of list for first argument ( ( length 100.0 ) ( angle 0.1 ) ( count 2 ) ( width 0.0 ) ( spacing 0.0 ) ( shuttle_width 4.0 ) ( actuation 10.0 ) ( pin_size 20.0 ) ( pin_chamfer 0.0 ) ( include_poly0 "boolean" nil ) ) ; end of parameter list prog( ; declare variables ( pcTechFile pcNet p0_minWidth p0p1_enclosure p0p1_minSpacing p1_minSpacing p1_minWidth p1_nomSpacing p1a1_enclosure p1d_enclosure p1p2_enclosure a1_nomWidth p2p0_enclosure p2v_enclosure p2m_enclosure v_minWidth m_minWidth d_nomWidth d_maxSpacing offset b_width s_width shuttle_height tmp tmp2 y d_count ) ; load tech file rules pcTechFile = techGetTechFile( pcCellView ) p0_minWidth = techGetSpacingRule( pcTechFile "minWidth" "POLY0" ) unless( p0_minWidth warn("minWidth rule for POLY0 not set") ) p0p1_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY0" "POLY1" ) unless( p0p1_enclosure warn("minEnclosure rule for POLY0->POLY1 not set") ) p0p1_minSpacing = techGetSpacingRule( pcTechFile "minSpacing" "POLY0" "POLY1" ) unless( p0p1_minSpacing warn("minSpacing rule for POLY0 and POLY1 not set") ) p1_minSpacing = techGetSpacingRule( pcTechFile "minSpacing" "POLY1" ) unless( p1_minSpacing warn("minSpacing rule for POLY1 not set") ) p1_minWidth = techGetSpacingRule( pcTechFile "minWidth" "POLY1" ) unless( p1_minWidth warn("minWidth rule for POLY1 not set") ) p1_nomSpacing = techGetSpacingRule( pcTechFile "nomSpacing" "POLY1" ) unless( p1_nomSpacing warn("nomSpacing rule for POLY1 not set") ) p1a1_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY1" "ANCHOR1" ) unless( p1a1_enclosure warn("minEnclosure rule for POLY1->ANCHOR1 not set") ) p1d_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY1" "DIMPLE" ) unless( p1d_enclosure warn("minEnclosure rule for POLY1->DIMPLE not set") ) p1p2_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY1" "POLY2" ) unless( p1p2_enclosure warn("minEnclosure rule for POLY1->POLY2 not set") ) a1_nomWidth = techGetSpacingRule( pcTechFile "nomWidth" "ANCHOR1" ) unless( a1_nomWidth warn("nomWidth rule for ANCHOR1 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_minWidth = techGetSpacingRule( pcTechFile "minWidth" "P1P2VIA" ) unless( v_minWidth warn("minWidth rule for P1P2VIA not set") ) m_minWidth = techGetSpacingRule( pcTechFile "minWidth" "METAL" ) unless( m_minWidth warn("minWidth rule for METAL not set") ) d_nomWidth = techGetSpacingRule( pcTechFile "nomWidth" "DIMPLE" ) unless( d_nomWidth warn("nomWidth rule for DIMPLE not set") ) d_maxSpacing = techGetSpacingRule( pcTechFile "maxSpacing" "DIMPLE" ) unless( d_maxSpacing warn("maxSpacing rule for DIMPLE not set") ) ; check parameters shuttle_width = if( (shuttle_width1) then for( lp 0 d_count-1 y = p1d_enclosure + lp*(shuttle_height - p1d_enclosure*2 - d_nomWidth) / (d_count-1) dbCreateRect( pcCellView "DIMPLE" list( -d_nomWidth*0.5:y d_nomWidth*0.5:y+d_nomWidth ) ) ) else dbCreateRect( pcCellView "DIMPLE" list( -d_nomWidth*0.5:shuttle_height*0.5-d_nomWidth*0.5 d_nomWidth*0.5:shuttle_height*0.5+d_nomWidth*0.5 ) ) ) ; add poly0 ground plane if( (include_poly0==t) then tmp = shuttle_width + length - p0p1_minSpacing tmp2 = -offset + p1_minWidth - p0p1_enclosure dbCreatePolygon( pcCellView "POLY0" list( -tmp+p0_minWidth:tmp2 -tmp:tmp2 -tmp:tmp2+shuttle_height+p0p1_enclosure*2 -shuttle_width-p0p1_enclosure:shuttle_height+p0p1_enclosure shuttle_width+p0p1_enclosure:shuttle_height+p0p1_enclosure tmp:tmp2+shuttle_height+p0p1_enclosure*2 tmp:tmp2 tmp-p0_minWidth:tmp2 shuttle_width+p0p1_enclosure:-p0p1_enclosure -shuttle_width-p0p1_enclosure:-p0p1_enclosure ) ) ) ; set default instance name prefix dbReplaceProp( pcCellView "instNamePrefix" "string" "actuator" ) ; 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