D
Loading VFO Infrastructure in Third-Party Tools
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. This might lead to display of different types of error and warning messages while loading the customized FGR classes and methods. For example, unknown class found while defining a user-defined method or unable to restore a particular method.
Therefore, to allow third-party tools to read customized FGRs, you need to manually load the .il and context files that have the VFO infrastructure definitions, as explained in this chapter.
Run the following steps to manually load the VFO infrastructure:
-
Create a SKILL file that contains the lines of code given in the Procedure for Initializing Customized FGR Devices section and save it with a filename having the
.ilextension. 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