2
Fluid Guard Ring Infrastructure
The implementation of the fluid guard ring (FGR) solution resides in a SKILL object-oriented infrastructure known as Virtuoso Fluid Object (VFO) infrastructure. This consists of classes and their methods. This chapter covers information about these classes. You can extend these classes to control the behavior of FGRs in your layout designs.
Class Hierarchy in VFO Infrastructure
The VFO infrastructure is primarily based on the following SKILL++ classes:
Implementation Class
The implementation class structure has the following four classes:
The vfoGuardRing and vfoAdvGuardRing are the two main implementation classes that contain the draw() method. If you are implementing fluid guard ring with pitch support, use the vfoAdvGuardRing class.
vfoSfBaseClass
-
Slots: None
-
Methods: None
vfoSfPCellClass
Slots
The vfoSfPCellClass class has the following slots:
|
Slots for fluid shape parameters
|
|
modelLpp
|
The layer-purpose pair (LPP) for fluid shape. Data type: list
|
|
shapeType
|
The type of fluid shape, that is, path, rectangle, or polygon.
|
|
shapeData
|
The shape points.
|
|
Slots for editing parameters
|
|
vfoProtocolClass
|
The editing class. Data type: string
|
|
keepOuts
|
The regions where tunnels are being created in the following format:(list(layer bbox))
Data type: list
|
|
Slots for layers
|
|
mainLpp
|
The master LPP mapped to fluid shape, normally a metal or diffusion layer.
|
|
hilightLpp
|
The annotate LPP.
|
|
tmpLpp
|
The temporary layer to draw intermediate shapes on. Data type: list
|
|
Slots for connectivity
|
|
termName
|
The name of the terminal to which the fluid shape must be connected.
|
|
pinName
|
The name of the pin to which the fluid shape must be connected.
|
|
Slots for enclosure
|
|
enclosureClass
|
The vfoSfEnclosureClass class that is used for drawing the enclosing layers.
|
|
enclosures
|
The layers that should enclose the main LPP, normally, implant and well layers.
|
|
Slots for debugging
|
|
debug
|
A positive integer value.
|
|
hide_keepouts
|
A Boolean value, that is, t or nil.
|
|
do_something
|
A Boolean value, that is, t or nil.
|
|
Slots for contact filling class
|
|
fillClass
|
The name of the contact filling class.
|
|
decompositionMode
|
The contact filling mode.
|
|
Slots for initialization of formal and CDF parameters
|
|
cv
|
|
cdf
|
|
superMaster
|
|
shapeObj
|
Methods
The vfoSfPCellClass class has the following methods:
-
vfoSupportsVersionCache ((pcell vfoSfPCellClass)) -
vfoSfFilling ((pcell vfoSfPCellClass)) -
vfoSfRegisterFluidShape ((pcell vfoSfPCellClass) d_obj) -
vfoSfInitialize ((pcell vfoSfPCellClass)) -
vfoSfFinalize ((pcell vfoSfPCellClass)) -
vfoSfCreateEnclosure ((pcell vfoSfPCellClass)
@key (className 'vfoSfEnclosureClass)
layerop lpp (coverInterior nil)
@rest initargs) -
vfoSfCreateFilling ((pcell vfoSfPCellClass)
@key (className 'vfoSfFillSafe)
layerop cutLpp lpp grid cw cs_x cs_y
overlap_x overlap_y
@rest initargs) -
vfoSfAddFeedback ((pcell vfoSfPCellClass) propName value) -
vfoSfDraw ((pcell vfoSfPCellClass)) -
vfoSfShapesPerLpp ((pcell vfoSfPCellClass) lpp) -
vfoSfCreatePins ((pcell vfoSfPCellClass)) -
vfoSfDrawEnclosures ((pcell vfoSfPCellClass) shape) -
vfoSfCutKeepOuts ((pcell vfoSfPCellClass)) -
vfoGRGeometry ((pcell vfoSfPCellClass))
vfoGuardRing
Slots
The vfoGuardRing class has the following slots:
|
techFile
|
The name of the technology files. Data type: string
|
|
vfoGRImpl
|
The name of the implementation class. Data type: string
|
|
classVersion
|
The version of the VFO source code. Data type: integer
|
|
formalVersion
|
This slot is used only for internal processing in the infrastructure.
|
|
createVersion
|
This slot is only a placeholder and has no effect on the FGR functionality.
Data type: string
Its value is set as null string ("").
|
|
defComplementaryDevice
|
The name of a complementary device.
This slot is only a placeholder and has no effect on the FGR functionality.
Data type: string
Its value is set as null string ("").
|
|
guardRingType
|
The device is of N or P type.
This slot is only a placeholder and has no effect on the FGR functionality. Its value is set as "N".
|
|
designLib
|
This slot is only a placeholder for now and has no effect on the FGR functionality.
Data type: string
Its value is set as null string ("").
|
|
contAlignment
|
This slot is only a placeholder for now and has no effect on the FGR functionality.
Data type: string
Its value is set as null string ("").
|
|
cacheCreateVersion
|
The create version of FGR sub-master. Data type: string
|
|
removeCornerContacts
|
This slot is only a placeholder for now and has no effect on the FGR functionality.
Data type: string
Its value is set as null string ("").
|
|
Slots used for drawing layers (Data type: string; Default value: nil)
|
|
enclosingLayers
|
|
metalLayer
|
|
contLayer
|
|
diffLayer
|
|
pinLayers
|
|
Slots for contact rules (Data type: float; Default value: 0.0)
|
|
xContWidth
|
|
yContWidth
|
|
xContSpacing
|
|
yContSpacing
|
|
xMetEnclCont
|
|
yMetEnclCont
|
|
xDiffEnclCont
|
|
yDiffEnclCont
|
|
metalEncCont1
|
|
metalEncCont2
|
|
diffEncCont1
|
|
diffEncCont2
|
Implementation Class Method Tree
Following is the method tree of the vfoGuardRing implementation class:
vfoAdvGuardRing
Slots
The vfoAdvGuardRing class has the following slots:
|
techFile
|
The name of the technology files. Data type: string
|
|
vfoGRImpl
|
The name of the implementation class. Data type: string
|
|
classVersion
|
The version of the VFO source code. Data type: integer
|
|
formalVersion
|
This slot is used only for internal processing in the infrastructure.
|
|
guardRingType
|
The device is of N or P type.
This slot is only a placeholder and has no effect on the FGR functionality. Its value is set as "N".
|
|
Slots used for pitch support (Data type: float)
|
|
verticalPitch
|
The fluid shape pitch in the vertical direction.
|
|
horizontalPitch
|
The fluid shape pitch in the horizontal direction.
|
|
horizontalSegWidth
|
The fluid shape width of the horizontal segments.
|
|
verticalSegWidth
|
The fluid shape width of the vertical segments.
|
Methods
The vfoAdvGuardRing class has the following methods:
-
vfoGRCompareParams ((obj vfoAdvGuardRing) inst1 inst2) -
vfoAdvGRUpdateCDF ((obj vfoAdvGuardRing) libName dev view) -
vfoGRGetExtraArgumentName ((obj vfoAdvGuardRing)) -
vfoSfInitialize ((pcell vfoAdvGuardRing))
-
vfoSfDraw ((pcell vfoAdvGuardRing))
-
vfoSfFinalize ((pcell vfoAdvGuardRing))
-
vfoGRGeometry ((pcell vfoAdvGuardRing))
Implementation Class Method Tree
Following is the method tree of the vfoAdvGuardRing implementation class:
Filling Class
The filling class structure has the following classes:
Contact filling is controlled by the vfoSfFillSafe class.
vfoSfLayerOpClass
Slots
The vfoSfLayerOpClass class has the following slots:
|
layerop
|
The description of the derived layer. For example:
'(and ("M1" "drawing") ("M2" "drawing")
|
|
pcell
|
The object.
|
|
lpp
|
The layer-purpose pairs (LPPs).
|
Method
The vfoSfLayerOpClass class has the following method:
vfoSfDerive ((op vfoSfLayerOpClass) cv tmpLpp)
vfoSfFillingClass
Slots
The vfoSfFillingClass class has the following slots:
|
cutLpp
|
The LPP to be used as the contact or via layer.
|
|
grid
|
The grid to which the contact cut corners are restricted to.
|
|
cw
|
The contact width in x and y direction.
|
|
cs_x
|
The minimum x-spacing required between contact cuts.
|
|
cs_half_x
|
The minimum x-spacing required between contact cuts should be half of cs_x or half of cs_x ceiled to grid if it is off-grid.
|
|
cs_y
|
The minimum y-spacing required between contact cuts.
|
|
cs_half_y
|
The minimum y-spacing required between contact cuts should be half of cs_y or half of cs_y ceiled to grid if it is off-grid.
|
|
overlap_x
|
The minimum x-distance from edge of layer (LPP) to the first contact cut.
|
|
overlap_y
|
The minimum y-distance from edge of layer (LPP) to the first contact cut.
|
|
fillStyle
|
The value of the ?gap argument of the rodFillBBoxWithRects SKILL function.
|
vfoSfFillSafe
Methods
The vfoSfFillSafe class has the following methods:
-
vfoSfFillShapes ((fillObj vfoSfFillBetter) shapes)
This is the main method for filling contacts in fluid shapes. -
vfoSfFillShapes_By_Path_Poly_Fill ((fill_obj vfoSfFillSafe) shapes)
In this method, a fixed width path is filled using sub-rectangles and then extra rectangles are removed. In case of a polygon, rectangles are used for filling the box and then extra rectangles are removed. This method is fast, but rectangles falling on the sized polygon will be removed. -
vfoSfFillShapes_By_Decomposition ((fill_obj vfoSfFillSafe) shapes)
In this method, the shape is decomposed into rectangles and then those rectangles are filled with contacts or sub-rectangles. -
vfoSfFillRects ((fill_obj vfoSfFillSafe) l_rects)
In this method, l_rects is assumed to be a list of rectangles (dbObjects) that are already sorted by area such that the largest appears first.
Enclosure Class
The enclosure class structure has the following classes:
vfoSfEnclosureClass should be used to implement the drawing of enclosure layers.
vfoSfEnclosureClass
Slots
The vfoSfEnclosureClass class has the following slots:
|
enclosure
|
The enclosure value.
|
|
coverInterior
|
The enclosure layer should have ‘holes’ or not.
|
Method
The vfoSfEnclosureClass class has the following method:
-
vfoSfDerive ((enc vfoSfEnclosureClass) cv tmpLpp)
Protocol Class
The protocol class structure has the following classes:
The edit operations on an FGR are controlled by protocol classes, vfoAlgClass and vfoAdvAlgClass.The vfoAdvAlgClass is used for pitch support.
vfoAbstractClass
Methods
The vfoAbstractClass class has the following methods to define the abstract interface for the functions that are required for enabling the editing operations in a fluid shape:
Method to Get Shape Data
|
vfoGetShapeData(obj inst)
|
Returns the vfoShapeData object, that is, path, rectangle, or polygon.
|
Methods to Enable or Disable an Edit Command
|
vfoSupportsChop?(obj inst)
|
Enables or disables the chop operation.
|
|
vfoSupportsMerge?(obj inst)
|
Enables or disables the merge operation.
|
|
vfoSupportsCreateObstruction?(obj inst)
|
|
|
Enables or disables the tunnel operation.
|
|
vfoSupportsDeleteObstruction?(obj inst)
|
|
|
Enables or disables the heal operation.
|
|
vfoSupportsConvertToPolygon?(obj inst)
|
|
|
Enables or disables the convert to polygon operation.
|
|
vfoSupportsAbut?(obj inst)
|
Enables or disables abutting.
|
|
vfoSupportsUpdateModelShape?(obj inst)
|
|
|
Enables or disables shapeData update.
|
Methods to Write the Function of an Edit Command
|
vfoChopInstance(obj inst shapeData)
|
|
|
Defines the chop function.
|
|
vfoMergeInstances(obj inst1 inst2)
|
|
|
Defines the merge function.
|
|
vfoCreateObstruction(obj inst lpp points)
|
|
|
Defines the tunnel function.
|
|
vfoDeleteObstruction(obj inst lpp {point | nil | bBox | ptList})
|
|
|
Defines the heal function.
|
|
vfoConvertToPolygon(obj inst)
|
Defines the convert to polygon function.
|
|
vfoAbut(obj instlist)
|
Defines the abut function.
|
|
vfoUpdateModelShape(obj inst shape newShapeType newPointList)
|
|
|
Defines the shapeData update function.
|
vfoAlgClass
Method
vfoAlgClass has the following method, which returns the vfoShapeData object, that is, path, rect, or polygon:
vfoGetShapeData(obj inst)
vfoSfImplClass
-
Slots: None
-
Methods: None
vfoAdvAlgClass
Methods
The vfoAdvAlgClass class has the following methods:
Method to Get Shape Data
|
vfoGetShapeData(obj inst)
|
Returns the vfoShapeData object.
|
Methods to Enable or Disable an Edit Command
|
vfoSupportsChop?(obj inst)
|
Enables or disables the chop operation.
|
|
vfoSupportsMerge?(obj inst)
|
Enables or disables the merge operation.
|
|
vfoSupportsCreateObstruction?(obj inst)
|
|
|
Enables or disables the tunnel operation.
|
|
vfoSupportsDeleteObstruction?(obj inst)
|
|
|
Enables or disables the heal operation.
|
|
vfoSupportsConvertToPolygon?(obj inst)
|
|
|
Enables or disables the convert to polygon operation.
|
|
vfoSupportsAbut?(obj inst)
|
Enables or disables abutting.
|
|
vfoSupportsUpdateModelShape?(obj inst)
|
|
|
Enables or disables shapeData update.
|
Methods to Write the Function of an Edit Command
|
vfoChopInstance(obj inst shapeData)
|
|
|
Defines the chop function.
|
|
vfoMergeInstances(obj inst1 inst2)
|
|
|
Defines the merge function.
|
|
vfoCreateObstruction(obj inst lpp points)
|
|
|
Defines the tunnel function.
|
|
vfoDeleteObstruction(obj inst lpp {point | nil | bBox | ptList})
|
|
|
Defines the heal function.
|
|
vfoConvertToPolygon(obj inst)
|
Defines the convert to polygon function.
|
|
vfoAbut(obj instlist)
|
Defines the abut function.
|
|
vfoUpdateModelShape(obj inst shape newShapeType newPointList)
|
|
|
Defines the shapeData update function.
|
vfoAdvSfImplClass
-
Slots: None
-
Methods: None
Return to top