Product Documentation
Sample Parameterized Cells Installation and Reference
Product Version IC23.1, June 2023

A


Building Pcells with ROD Functions

The Pcells described in this reference were built in part with relative object design functions (ROD), a set of high-level Cadence® SKILL language functions for defining simple and complex layout objects and their relationships to each other. The following code examples demonstrate how to use ROD functions to build Pcells.

If you want to make changes to the code in any of the Pcell devices, utility functions, or installation files, you should create a copy of the original sample file using a new filename and make your changes to the new file. This method preserves the sample files for future use. If you do not create new files when you customize, your custom files replace the original sample files, and when the sample Pcells are loaded again, your custom files are overwritten by the original sample files.

Multipart Paths, Subpaths, and Subrectangles

This code example utilizes the ROD function rodCreatePath to create a guardring consisting of an enclosure subpath and a subrectangle.

procedure(buildGuardRing(cv layer1 layer2 layer3 width1 width3
length3 pathpnts terminal pinlabel enc offset chop)
; pinlabel is a boolean that determines whether a label will be    created
   let(( guardRing )
guardRing = rodCreatePath(
?cvId cv
?layer layer1
?width width1
?pts pathpnts
?encSubPath list( list(
?layer layer2
?enclosure enc
?choppable chop
?pin t
?termName terminal
?pinLabel pinlabel
?pinLabelHeight length3
?pinLabelLayer "text"
))
?subRect list( list(
?layer layer3
?width width3
?length length3
?endOffset offset
))
)
))

Path Stitching with ROD Functions

This code example uses the ROD functions rodAlign and rodCreateRect to build a Pcell that can be used for path stitching. It is set up for double contacts.

To use this example,

  1. Copy the sample mpu.tf from
    your_install_dir/tools/dfII/samples/techfiles/mpu.tf
    to the location where you store your libraries.
  2. Comment out M1_POLY1 from the device class of the technology file.
    This is necessary because path stitching will see two contact definitions for the same layer and choose the single-contact definition
  3. Create a new technology library using mpu.tf as the ASCII technology file.
  4. Load this file into your new library.

You can now use double contacts for path stitching.

; Path Stitching Example
devices(
tcCreateDeviceClass( "symbolic" "syEnhContact"
; class parameters
( (viaLayer "cont")
(viaPurpose "drawing")
(layer1 "poly1")
(purpose1 "drawing")
(layer2 "metal1")
(purpose2 "drawing")
(encByLayer1 .4)
(encByLayer2 .6)
)
; formal parameters
( (w 1.8)
(l .6)
(row 1)
(column 1)
(xPitch 2.4)
(yPitch 1.2)
(xBias "center")
(yBias "center")
)
cw = .6
cs = .6
lay1 = rodCreateRect(
?layer list(layer1 purpose1)
?width 2 * encByLayer1 + column * w + (column - 1) * cs
?length 2 * encByLayer1 + row * l + (row - 1) * cs
?pin t
?termName "m1p"
)
lay2 = rodCreateRect(
?layer list(layer2 purpose2)
?width 2 * encByLayer2 + column * w + (column - 1) * cs
?length 2 * encByLayer2 + row * l + (row - 1) * cs
?pin t
?termName "m1p"
)
for(i 0 row - 1
yStep = i * yPitch
for(j 0 column - 1
contlay1 = rodCreateRect(
?layer list(viaLayer viaPurpose)
?width cw
?length cw
)
contlay2 = rodCreateRect(
?layer list(viaLayer viaPurpose)
?width cw
?length cw
)
rodAlign(
?alignObj contlay1
?alignHandle "cC"
?refObj lay1
?refHandle "lL"
?xSep encByLayer1 + cw/2 + j * xPitch
?ySep encByLayer1 + cw/2 + yStep
)
rodAlign(
?alignObj contlay2
?alignHandle "cC"
?refObj lay1
?refHandle "lL"
?xSep encByLayer1 + cw/2 + j * xPitch + yPitch
?ySep encByLayer1 + cw/2 + yStep
)
)
)
rodAlign(
?alignObj lay1
?alignHandle "centerCenter"
?refObj lay2
?refHandle "cC"
)
)
tfcDefineDeviceClassProp(
; (viewName devClassName propName propValue)
(symbolic syEnhContact function "contact")
)
tcDeclareDevice( "symbolic" "syEnhContact" "M1_PLY"
( (viaLayer "cont") (viaPurpose "drawing")
(layer1 "poly1") (purpose1 "drawing")
(layer2 "metal1") (purpose2 "drawing")
(encByLayer1 .4) (encByLayer2 .6))
(
(w 1.8) (l .6)
(row 1) (column 1)
(xPitch 2.4)
(yPitch 1.2)
(xBias "center")
(yBias "center")
)
)
)

Return to top
 ⠀
X