Product Documentation
Virtuoso Layout Suite XL: Connectivity Driven Editing User Guide
Product Version IC23.1, November 2023

Sample Parameterized Cells Set Up for Abutment

Example 1

This example shows what each of the different parts does:

----------------------------------------------------------------------
; Function: abutFunction(iA iB pA pB pASide connection event
; @optional (group nil))
;
; Inputs: group - the abutment group that these two cells belong to.
; ______________________________________________________________________
;
; iA = Instance Id of cell that will move during abutment
; ______________________________________________________________________
;
; iB = Instance Id of cell being abutted to
; ______________________________________________________________________
;
; pA = Overlapping Pin Fig of iA
; ______________________________________________________________________
;
; pB = Overlapping Pin Fig of iB
; ______________________________________________________________________
;
; pASide = Abutting pin access direction
; ______________________________________________________________________
;
connection = an integer value of 1 or 2 that indicates:
;
; 1. pins are connected to the same net and do not
; connect to any other pin.
;
; 2. pins are connected to the same net and the net
; connects to other pins
; ______________________________________________________________________
;
; event = integer that represents abutment event:
;
; 1. compute abutment offset
; 2. Pcell parameter adjustment for abutment
; 3. Pcell parameter adjustment for unabutment
; ______________________________________________________________________
;
; group = abutment group pointer available to specific events:
; abutment group pointer available to Events 1, 2, and 3
; ______________________________________________________________________
;
; Outputs: depends
;
; Side effects:
;
procedure( abutFunction(iA iB pA pB pASide connection event @optional (group
nil))
   prog((result)
 
   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)
      )
      (3 ; Adjust Pcell parameters back to default resetAbutmentParams(group iA iB)
         result = t
      )
      (t     ; Anything else return a nil
result = nil
      )
)
return(result)
)
)

Example 2

This example shows how to add abutment properties to pins in an inverter Pcell.

; *** the following 4 pins are on metal1 and are on ***
; *** the power and ground rails. This will allow ***
; *** abutment to other standard cells ***

obj = leftVddPin~>dbId
dbReplaceProp(obj "abutAccessDir" "list" list("left"))
dbReplaceProp(obj "abutClass" "string" "stdcell")
dbReplaceProp(obj "abutFunction" "string" "stdCellFunc")

; *** the following property is a technique for passing ***
; *** information to the user defined function. In this ***
; *** case the minimum cell height is dependent on many ***
; *** factors including design rules and is originally ***
; *** calculated in the Pcell code. This avoids ***
; *** duplicating calculations in the user-defined ***
; *** function ***

dbReplaceProp(obj "minCellHeight" "float" minH)

obj = rightVddPin~>dbId
dbReplaceProp(obj "abutAccessDir" "list" list("right"))
dbReplaceProp(obj "abutClass" "string" "stdcell")
dbReplaceProp(obj "abutFunction" "string" "stdCellFunc")
dbReplaceProp(obj "minCellHeight" "float" minH)

obj = leftGndPin~>dbId
dbReplaceProp(obj "abutAccessDir" "list" list("left"))
dbReplaceProp(obj "abutClass" "string" "stdcell")
dbReplaceProp(obj "abutFunction" "string" "stdCellFunc")
dbReplaceProp(obj "minCellHeight" "float" minH)

obj = rightGndPin~>dbId
dbReplaceProp(obj "abutAccessDir" "list" list("right"))
dbReplaceProp(obj "abutClass" "string" "stdcell")
dbReplaceProp(obj "abutFunction" "string" "stdCellFunc")
dbReplaceProp(obj "minCellHeight" "float" minH)


; *** The following 4 pins are the diffusion pins ***
; *** of the individual MOS devices in the inverter ***
; *** this will allow abutment of other individual ***
; *** MOS devices to the inverter ***

obj = POutPin~>dbId
dbReplaceProp(obj "abutAccessDir" "list" list("right"))
dbReplaceProp(obj "abutClass" "string" "ptran")
dbReplaceProp(obj "abutFunction" "string" "mosAbutFunc")
dbReplaceProp(obj "contactParam" "string" "POutCnts")
dbReplaceProp(obj "w" "float" pw)
; *** the automatic spacing properties are used if abutment fails ***
dbReplaceProp(obj "vxlInstSpacingDir" "list" list("right"))
dbReplaceProp(obj "vxlInstSpacingRule" "float" .35 )

obj = NOutPin~>dbId
dbReplaceProp(obj "abutAccessDir" "list" list("right"))
dbReplaceProp(obj "abutClass" "string" "ntran")
dbReplaceProp(obj "abutFunction" "string" "mosAbutFunc")
dbReplaceProp(obj "contactParam" "string" "NOutCnts")
dbReplaceProp(obj "w" "float" nw)
dbReplaceProp(obj "vxlInstSpacingDir" "list" list("right"))
dbReplaceProp(obj "vxlInstSpacingRule" "float" .35 )

obj = PPwrPin~>dbId
dbReplaceProp(obj "abutAccessDir" "list" list("left"))
dbReplaceProp(obj "abutClass" "string" "ptran")
dbReplaceProp(obj "abutFunction" "string" "mosAbutFunc")
dbReplaceProp(obj "contactParam" "string" "PPwrCnts")
dbReplaceProp(obj "w" "float" pw)
dbReplaceProp(obj "vxlInstSpacingDir" "list" list("left"))
dbReplaceProp(obj "vxlInstSpacingRule" "float" .35 )

obj = NPwrPin~>dbId
dbReplaceProp(obj "abutAccessDir" "list" list("left"))
dbReplaceProp(obj "abutClass" "string" "ntran")
dbReplaceProp(obj "abutFunction" "string" "mosAbutFunc")
dbReplaceProp(obj "contactParam" "string" "NPwrCnts")
dbReplaceProp(obj "w" "float" nw)
dbReplaceProp(obj "vxlInstSpacingDir" "list" list("left"))
dbReplaceProp(obj "vxlInstSpacingRule" "float" .35 )

Related Topics

abutFunction Property


Return to top
 ⠀
X