8
Fluid Guard Ring Packaging in PDK
The customized fluid guard rings (FGRs) are derived from the base classes defined in the Virtuoso Fluid Object (VFO) infrastructure. Therefore, the related SKILL and SKILL++ code files have a dependency on the vfo* context and class definitions. Typically, third-party tools cannot evaluate the customized FGRs because they do not have access to the SKILL and SKILL++ code written by a PDK developer specifically for such FGRs. Also, the approach of loading the SKILL and SKILL++ code from the libInit.il initialization file is not user intuitive. Therefore, to allow third-party tools to read customized FGRs, you need to load the .il and context files that have the VFO infrastructure definitions. This chapter explains how to load these files.
Run the following steps to manually load the VFO infrastructure:
-
Create a file that contains the lines of code given in the Procedure for Initializing Customized FGR Devices section and save it. For example,
load_vfo_context_and_files.il -
Load this new SKILL file by adding the following lines of code in the
libInit.ilfile:load("load_vfo_context_and_files.il")
-
In the same
libInit.ilfile, call theload_vfo_context_and_filesSKILL procedure by using the following syntax:load_vfo_context_and_files (cxt_path ils_path)
Here,-
cxt_pathis the string specifying the location of thevfo.cxtfile.
In the Virtuoso installation, thecxt_pathis:<
install_dir>/tools/dfII/etc/context -
ils_pathis the string specifying the location of thevfo*.ilsfiles.
In the Virtuoso installation, theils_pathis:<
install_dir>/tools/dfII/etc/vfo
-
Procedure for Initializing Customized FGR Devices
Add the following procedure to a file, such as, load_vfo_context_and_files.il:
procedure(load_vfo_context_and_files(vfoCxtPath ilsPath)
let((vfoLoadSeqFilePath fileName )
unless(isContextLoaded("vfo")
loadContext(sprintf(nil "%s/vfo.cxt" vfoCxtPath))
);;unless
vfoLoadSeqFilePath = strcat(ilsPath "/vfoInitialize.ils")
if(isFileName(vfoLoadSeqFilePath)
then
when(!isCallable('vfoGRGeometry)
load(vfoLoadSeqFilePath)
foreach(fileName vfoGetFileListWithLoadSequence()
load(sprintf( nil "%s/%s" ilsPath fileName))
printf("done loading %s/%s\n" ilsPath fileName)
)
);;when
else
when(!isCallable('vfoGRGeometry)
foreach(fileName (list
"vfoMessageIds.ils"
"vfoAbstractClass.ils"
"vfoAddOns.ils"
"vfoApi.ils"
"vfoAlgClass.ils"
"vfoUtils.ils"
"vfoShapeData.ils"
"vfoSfShapeData.ils"
"vfoSf.ils"
"vfoSfFilling.ils"
"vfoGuardRing.ils"
"vfoGrShrinkWrap.ils"
"vfoGuardRingPreview.ils")
load(sprintf( nil "%s/%s" ilsPath fileName))
printf("done loading %s/%s\n" ilsPath fileName)
);;foreach
);;when
);;if
);;let
);;load_vfo_context_and_files
Return to top