EDAboard.com | EDAboard.eu | EDAboard.de | EDAboard.co.uk | RTV forum PL | NewsGroups PL

Using abutFunction

elektroda.net NewsGroups Forum Index - Cadence - Using abutFunction

I-F AB
Guest

Thu Aug 19, 2010 7:28 am   



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]-
Quote:
minSpa)

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]-
Quote:
minSpa)

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.

I-F AB
Guest

Thu Aug 19, 2010 7:37 am   



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.

elektroda.net NewsGroups Forum Index - Cadence - Using abutFunction

Arabic versionBulgarian versionCatalan versionCzech versionDanish versionGerman versionGreek versionEnglish versionSpanish versionFinnish versionFrench versionHindi versionCroatian versionIndonesian versionItalian versionHebrew versionJapanese versionKorean versionLithuanian versionLatvian versionDutch versionNorwegian versionPolish versionPortuguese versionRomanian versionRussian versionSlovak versionSlovenian versionSerbian versionSwedish versionTagalog versionUkrainian versionVietnamese versionChinese version
RTV map EDAboard.com map News map EDAboard.eu map EDAboard.de map EDAboard.co.uk map Opony