;================================================================================ ; Robert Johnstone ; Simon Fraser University ; ; Copyright 2000,2001,2002 Robert W. Johnstone ;-------------------------------------------------------------------------------- ; 2002/06/03 ; - modified code because interface to dbCreateRoundRect was modified ; 2001/10/07 ; - added parameter 'include_poly0' ; - updated code to reflect comments made by skill check ; 2001/03/05 ; - modified code for downward deflecting thermal actuator by thickening the base ; to make it more reliable ; 2000/10/07 ; - created unless( boundp( 'admLibraryName ) warn( "Setting the destination library to default value of ADM" ) admLibraryName = "ADM" ) pcDefinePCell( list( ddGetObj(admLibraryName) "heatuator_vert" "layout" ) ; end of list for first argument ( ( length 200.0 ) ( width_c 14.0 ) ( width_h 2.0 ) ( move_up t ) ( pin_size 20.0 ) ( chamfer 0.0 ) ( include_poly0 "boolean" nil ) ) ; end of parameter list prog( ( x y w h p1_h p2_h pcTechFile pcNet pcShape tmp p0p1_enclosure, p0p1_minSpacing, p0p2_enclosure p1_nomSpacing, p1_nomWidth, p1a1_enclosure p1p2_enclosure p2p1_enclosure p2p1_overlap p2v_enclosure, p2m_enclosure, d_nomWidth, v_nomWidth ) ; load tech file rules pcTechFile = techGetTechFile( pcCellView ) 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->POLY1 not set") ) p0p2_enclosure = techGetOrderedSpacingRule( pcTechFile "minEnclosure" "POLY0" "POLY2" ) unless( p0p2_enclosure warn("minEnclosure rule for POLY0->POLY2 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") ) 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") ) p2p1_overlap = techGetOrderedSpacingRule( pcTechFile "minOverlap" "POLY2" "POLY1" ) unless( p2p1_overlap warn("minOverlap rule for POLY2->POLY1 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") ) d_nomWidth = techGetSpacingRule( pcTechFile "nomWidth" "DIMPLE" ) unless( d_nomWidth warn("nomWidth rule for DIMPLE not set") ) v_nomWidth = techGetSpacingRule( pcTechFile "nomWidth" "P1P2VIA" ) unless( v_nomWidth warn("nomWidth rule for P1P2VIA not set") ) ; check parameters if( (width_h>width_c) then tmp = width_h width_h = width_c width_c = tmp ) chamfer = if( (chamfer<0) 0 chamfer ) ; initialize parameters if( (move_up==t) then p1_h = width_h p2_h = width_c else p1_h = width_c p2_h = width_h ) ; create PWR pin pcNet = dbMakeNet( pcCellView "PWR" ) ; check dimensions x = -pin_size * 0.5 - p1_nomWidth - p1_nomSpacing y = 0 w = pin_size * 0.5 h = w h = if( (hp2_h) then dbCreateRect( pcCellView "POLY2" list( -p1_nomWidth-p1_nomSpacing-p1p2_enclosure:p2_h*0.5 p2p1_overlap-p1_nomWidth:tmp*0.5 ) ) dbCreateRect( pcCellView "POLY2" list( -p1_nomWidth-p1_nomSpacing-p1p2_enclosure:-p2_h*0.5 p2p1_overlap-p1_nomWidth:-tmp*0.5 ) ) ) ) ; create cap w = v_nomWidth + 2*p2v_enclosure + 2*p1p2_enclosure h = w h = if( (hp2_h) then dbCreateRect( pcCellView "POLY0" list(p0p1_minSpacing:p1_h*0.5+p0p1_enclosure length+p0p1_enclosure:-p1_h*0.5-p0p1_enclosure ) ) else dbCreateRect( pcCellView "POLY0" list(p0p1_minSpacing:p2_h*0.5+p0p2_enclosure length+p0p2_enclosure:-p2_h*0.5-p0p2_enclosure ) ) ) dbCreateRoundRect( pcCellView "POLY0" list( length-p0p1_enclosure:-h*0.5-p0p1_enclosure length+w+p0p1_enclosure:h*0.5+p0p1_enclosure ) chamfer ) ) ; set default instance name prefix dbReplaceProp( pcCellView "instNamePrefix" "string" "actuator" ) ; set version string dbReplaceProp( pcCellView "version" "string" "1.3.1" ) ; body SKILL code returns value t return(t) ) ; end of body-of-SKILL-code prog ) ; ; end of pcDefinePCell