Hi, Could anyone guide me on modifying pins for abutment? I've gone through the VXL documentation and the mos.il tutorial but I still can't figure out how to use the abutFunction command. Below is the code I have so far: ------------------------------------------------------------------------------------------------------------------------ procedure( TrialAbutFunc( instA instB pinA pinB dir conn event @optional group ) let(( result ) CellA = instA CellB = instB pinAoffset = pinA~>OffsetStretchParam pinBoffset = pinB~>OffsetStretchParam case(event (1 ; Compute offset ;;;result = getAbutmentOffset(iA iB pA pB pASide connection) ) (2 ; Adjust pcell parameters ;;;result = setAbutmentParams(iA iB pA pB pASide connection group) ;stretch! ;;;StretchTop = -1.3 ;;;StretchSide = -1.0 dbReplaceProp(instA pinAoffset "float" 1.3) dbReplaceProp(instB pinBoffset "float" -1.0) result = t ) (3 ; Adjust pcell parameters back to default ;;;resetAbutmentParams(group iA iB) ;;;result = t dbReplaceProp(instA pinAoffset "float" 0.0) dbReplaceProp(instB pinBoffset "float" 0.0) result = t ) ; (4 ; To get the spacing offset when pins are on different nets ; ;;;if( instA~>w > 3.0 && instB~>w > 3.0 then result = 3 ; ;;;else result = 1 ) ; );; end of case 4 (t ; Anything else return a nil result = nil ) ) ;case result ) ;let ) pcDefinePCell( list( ddGetObj("C05L_LDDNMOS") "AbutTrial_3" "layout" ) ( (w 3.5) ) envSetVal("rod" "distributeSingleSubRect" 'boolean t) let(( (cvId pcCellView) tfId techInfo ;tech data netT pinT netS pinS ;nets & pins idT idS ;pin ID MAIN TOP SIDE ;physical shapes (M1 "M1") (M2 "M2") ;layers ) tfId = techGetTechFile(cvId) techInfo = makeTable("TechInfo" nil) foreach( LYR list(M1 M2) techInfo[LYR] = list(nil) techInfo[LYR]->minSpa = techGetSpacingRule(tfId "minSpacing" LYR) techInfo[LYR]->minWid = techGetSpacingRule(tfId "minWidth" LYR) unless( techInfo[LYR]->minSpa techInfo[LYR]->minSpa = 0 ) unless( techInfo[LYR]->minWid techInfo[LYR]->minWid = 0 ) ) netT = dbCreateNet( cvId "TOP" ) dbCreateTerm( netT "TOP" "inputOutput" ) netS = dbCreateNet( cvId "SIDE" ) dbCreateTerm( netS "SIDE" "inputOutput" ) MAIN = rodCreateRect( ?layer M1 ?width w ?length 7.6 ) TOP = rodCreateRect( ?layer M2 ?width w ?length 3.5 ) / *abut affects pin*/ SIDE = rodCreateRect( ?layer M2 ?width w+1.0 ?length 4.8 ) / *abut affects pin*/ rodAlign( ?alignObj TOP ?alignHandle "lL" ?refObj MAIN ?refHandle "uL" ) rodAlign( ?alignObj SIDE ?alignHandle "lL" ?refObj MAIN ? refHandle "lR" ) pinT = dbCreatePin( netT TOP~>dbId "TOP" ) pinS = dbCreatePin( netS SIDE~>dbId "SIDE" ) pinT~>accessDir = list("top" "left" "right") pinS~>accessDir = list("top" "bottom" "right") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; vxl abut ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; +-----+ +------+ ; | | | | ; |TOP| |TOP| ; | | | | ; +-----+ +-----+ ; | | | | ; | | | | ; | M | | M | stretch ; | A +--------+ | A +---+ --- ; | I | | +-----+ | I | | --- ; | N |SIDE| | | | N | | ; | | | |TOP| | |S/T| ; | | | | | | | | ; +-----+--------+ +-----+ +-----+----+ ; | | | | ; | | | | ; | M | | M | ; | A +------+ | A +-------+ ; | I | | | I | | ; | N |SIDE| | N |SIDE| ; | | | | | | ; | | | | | | ; +-----+------+ +----+-------+ ; squeeze -->| |<-- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; idT = TOP ~> dbId idS = SIDE ~> dbId idT ~> pin ~> name = "TOP" dbReplaceProp(idT "vxlInstSpacingDir" "list" list("top" "right" "left")) dbReplaceProp(idT "vxlInstSpacingRule" "float" techInfo[M2]- dbReplaceProp(idT "abutClass" "string" cvId~>cellName) dbReplaceProp(idT "abutAccessDir" "list" list("top" "right" "left")) dbReplaceProp(idT "abutFunction" "string" "TrialAbutFunc") dbReplaceProp(idT "OffsetStretchParam" "string" "StretchTop") idS ~> pin ~> name = "SIDE" dbReplaceProp(idS "vxlInstSpacingDir" "list" list("top" "bottom" "right")) dbReplaceProp(idS "vxlInstSpacingRule" "float" techInfo[M2]- dbReplaceProp(idS "abutClass" "string" cvId~>cellName) dbReplaceProp(idS "abutAccessDir" "list" list("top" "bottom" "right")) dbReplaceProp(idS "abutFunction" "string" "TrialAbutFunc") dbReplaceProp(idS "OffsetStretchParam" "string" "StretchSide") ) ;let envSetVal("rod" "distributeSingleSubRect" 'boolean nil) ) ------------------------------------------------------------------------------------------------------------------------ The text diagram here is warped so I'm not sure if it makes much sense. I'm stuck at how to use a variable/property at the line with /*abut affects pin*/ so that the pin width/length changes with abutment. Thanks in advance.
Oh dear, the diagram has become really warped. The shape is basically an L-shaped pcell with pins at the top & bottom right. I want abutment to merge these pins so that one pin becomes stretched & the other squeezed. From the TrialAbutFunc() procedure, I've put/modified properties during abutment but I don't know how to use them in the pcell.