Product Documentation
Virtuoso Parameterized Cell Reference
Product Version IC23.1, September 2023

8


Express Pcells

This chapter covers the following topics:

Overview of Express Pcells

Traditional SKILL Pcell submasters, once evaluated, reside in memory and are not saved to disk (see Creating SKILL Parameterized Cells for more information). This means that the Pcells must be evaluated every time a design is opened, which can become a performance bottleneck in designs that contain a large number of complex Pcell instances.

The Express Pcell feature, which is available in the Virtuoso environment, maintains a cache of pre-evaluated Pcells on disk, meaning that Pcell code does not need to be evaluated every time a design is opened. This offers a significant performance boost not only for designs that contain a large number of Pcell instances, but also for designs with modest numbers of instances of complex Pcells involving computationally intensive SKILL code.

Express Pcell does supports both layout and schematic (and symbol) Pcells. For more information, contact Contact Cadence Customer Support.

Express Pcell Plug-In for Non-Virtuoso and Third Party Applications

Pcells in the Virtuoso design environment are predominantly written using SKILL and are evaluated using a SKILL Pcell evaluator that is not available outside the Virtuoso design environment. This means that these SKILL Pcells cannot easily be read or used outside the Virtuoso design environment. Non-Virtuoso Cadence applications and third-party applications rely on other alternatives for SKILL Pcell evaluation. This alternative data flow channel between the applications and OpenAccess can be time-consuming and not entirely seamless.

The Express Pcell feature is available on OpenAccess as a SKILL Pcell plug-in (*.so and *.plg files). The plug-in leverages the interoperability offered by OpenAccess to allow non-Virtuoso Cadence and third party applications to access Express Pcell generated data saved on OpenAccess without having to translate it. The plug-in enables these applications to access the pre-evaluated Pcell submasters resulting in seamless read-interoperability of SKILL Pcells. The plug-in also provides some limited write-interoperability, so that you can edit the container of Pcell instances. For example, third party applications (such as a router or a verification tool) can open a Virtuoso-generated OpenAccess design safely and add markers or perform routing in them directly.

All Express Pcell data is backward compatible. So, for example, IC6.1.8 can read any pre-existing cached data generated using an earlier version of the Express Pcell engine. However, the cached Express Pcell data generated using IC6.1.8 cannot be read by a previous version of the software or plug-in.
Express Pcell plug-in does not support schematic (and symbol) Pcells.

Requirements for Using the Express Pcell Feature

Virtuoso Design Environment Application

To use the Express Pcell feature in the Virtuoso design environment, you require:

If the required license is not available or cannot be checked out, the Express Pcell feature is disabled for that particular Virtuoso session.

If the SKILL code associated with a Pcell supermaster evaluation function creates or initializes some global data that is to be used elsewhere within the same Virtuoso session, the use of Express Pcells in the same session might result in some unexpected behavior. This is because the associated SKILL code is not executed in the presence of the Express Pcell cache. An example of such a scenario is the creation or initialization of a global variable in some Pcell evaluation function and the subsequent use of that global variable in its corresponding Pcell abutment function. Consequently, when using the Express Pcell feature in a Virtuoso session, take care to organize the evaluation code of your Pcells to avoid the use of global variables. Alternatively, avoid the creation or initialization of global variables outside the Pcell evaluation code when using the Express Pcell feature in a Virtuoso session.

Non-Virtuoso Cadence Application

A non-Virtuoso Cadence application checks out the VLS L license.

Third Party Application

Third party applications check out the VLS L license. The following files are required for the successful use of the plug-in by any third party application:

For information about how to install the plug-in, see Installing the Express Pcell Plug-In for Non-Virtuoso or Third Party Applications.

The Express Pcell plug-in library, libcdsSkillPcell.so is compiled against libstlport.so. This can lead to drop-in compatibility issues if used with an OpenAccess application compiled against libcstd.so. To avoid such issues while using the plug-in’s shared library with a non-DFII OpenAccess application, both the plug-in’s shared library and the application must be compiled against the same C++ library, libstlport.so or libCstd.so. The following additional 64bit plug-in library version is also available for non-DFII OpenAccess applications compiled with the standard C++ library (libcstd.so): cdsSkillPcell/lib/64bit/libcdsSkillPcell_nonSTLport.so These plug-in libraries are available in the Express Pcell Plugin Kit. To use these libraries, you must set up the environment by changing the soft link in either tools/lib or tools/lib/64bit to the corresponding non-stlport library available in tools/cdsSkillPcell/lib. If you do not have permission to change the link in <install_dir>/tools/lib, you can create a soft link for libcdsSkillPcell.so ==> <install_dir>/tools/cdsSkillPcell/lib/libcdsSkillPcell_nonSTLport.so in a separate directory and specify that directory in the LD_LIBRARY_PATH to be read by the non-DFII OpenAccess application.

Use Model of Express Pcell Management

This section explains how applications both inside and outside the Virtuoso design environment use the Express Pcell cache.

Inside the Virtuoso Design Environment

The following figure shows how Virtuoso design environment applications use the Express Pcell cache.

When you open a cellview containing a Pcell instance for the first time, a Pcell submaster is created in memory by the SKILL Pcell evaluator.

When requested by the OpenAccess Pcell evaluator to populate the submaster of a Pcell instance, the Virtuoso SKILL Pcell evaluator sends a request to the Express Pcell framework, which in turn checks for the existence of the requested submaster in the cache. If the submaster exists, it is read from the cache. If it does not exist, it is created by the usual SKILL Pcell evaluation process in the Virtuoso design environment.

You can save the evaluated submasters using the File – Save command (see Auto Save). This generates a cache of the Pcell submasters in the specified Express Pcell directory (CDS_EXP_PCELL_DIR).

You can also cache the Pcell submasters that are available in memory by clicking Save Cache in the Express Pcell Manager form.

If a Pcell supermaster is subsequently updated on disk, the Save/Update operation on the cache (through File – Save in the design or by using the Express Pcell Manager form) refreshes the cache of the corresponding submasters on disk.

Outside the Virtuoso Design Environment

The Express Pcell plug-in provides read access to the cache data to non-Virtuoso Cadence applications as well as third party applications on OpenAccess. In this way, these applications can also access the submasters already evaluated by Virtuoso design environment applications and stored in the cache.

This model provides seamless read interoperability of SKILL Pcells to non-Virtuoso Cadence and third party applications.

Managing the Express Pcell Cache

By default, intermediate Express Pcell files are stored in a .expressPcells directory, which is created inside the current working directory. This directory maintains a cache of pre-evaluated Pcells on the disk. This means that the Pcell code does not need to be evaluated every time a design is opened. This offers a significant performance boost not only for designs that contain a large number of Pcell instances but also for designs with modest numbers of instances of complex Pcells involving computationally intensive SKILL code.

Advanced node and mature node caches are compatible. However, IC6.1.6 and Advanced Node will not provide any backward portability for static Virtuoso. Therefore, cache generated using IC6.1.5 will not open in IC6.1.6 or Advanced Node. However, IC6.1.6 and Advanced Node plug-in will be able to read the IC6.1.5 generated cache, and provide backward compatibility. When a IC6.1.5 generated cache is encountered in IC6.1.6 or Advanced Node, Virtuoso Express Pcell will be disabled and the error message will be displayed.

Using Environment Variables

Use the following shell environment variables to manage the Express Pcell cache. These variables are read during Virtuoso startup and must therefore be set before you launch the application.

Using the Express Pcell Manager GUI in a Virtuoso Session

You can manage the Pcell cache using the Express Pcell Manager graphical user interface.

  1. From the layout window menu bar, select Tools – Express Pcell Manager.
    The Express Pcell Manager window is displayed.
    Express Pcells directory is a read-only field showing the Pcell cache directory.
    You can specify a a different location for storing the Pcell cache using the CDS_EXP_PCELL_DIR variable.
    However, a new directory will be created if the current working directory is moved or deleted by the user in mid session.
    If the cache directory is not writable, the cache is not saved and an appropriate message is displayed.
    When the cache is disabled, all indexes are properly cleared.
  2. Check the Enable Express Pcells box to enable the Express Pcell feature.
    Deselect the option to revert to conventional SKILL Pcell evaluation.
    The default setting controlled by the CDS_ENABLE_EXP_PCELL variable.
    The values of the CDS_EXP_PCELL_DIR and CDS_ENABLE_EXP_PCELL variables are read during the Virtuoso session startup.
  3. Check the Auto Save box to automatically save any updated Pcell variants when the design is saved.
    If you deselect this option, you will be prompted to save any updated Pcell variants each time you save the design.
  4. Use the right mouse button in the Express Pcells pane to perform the following operations on selected libraries or cellviews:

Notes:

  1. Cached Pcell data is updated even when referenced data, such as an attached technology library, is updated. However, such an update may not necessarily update the supermaster’s timestamp. In such situations, you are advised to refresh the cache data on the disk by using the Express Pcell Manager.
  2. You might need to save the design even if no changes are made to the design to allow the cached data to be updated on disk in the .expressPcells directory.
  3. Opening just the top-level layout (Display Options Stop Level set to 0) for the first time does not evaluate Pcells in the hierarchy. Therefore, no cache data is created for them.
The .xpcCache directory is automatically created with write permission inside the .expressPcells directory. Any user trying to read the cache should also have write permission in the .xpcCache directory.

Maintaining the PDK Version in the Express Pcell Cache

The Express Pcell cache is PDK version-aware and can notify users if the Pcells currently in the cache are out of date or not. This lets you keep the cache current whenever the PDK version is updated during a particular design cycle.

To use this feature, the CAD engineer or PDK developer must define the following library version SKILL variable in the libInit.il of the PDK in question:

    xPcell_Version_PDK = "version"

Where PDK is the name of the PDK in question and version is any unique string value used to identify the version. For example:

    xPcell_Version_gpdk045 = "3.0"
    xPcell_Version_gpdk028 = "2.0a"
The CAD engineer or PDK developer must ensure that the library version SKILL variable is updated for each new PDK release, otherwise Virtuoso will be unable to correctly recognize different versions.

The table below shows the behavior of each cache operation when xPcell_Version_PDK does not match the version found in the existing cache.

Operation Behavior

Read cache

Cache not read (Pcell will be evaluated)
CIW warning to update cache

dbSavePcellCache()

Cache not saved
CIW warning to update cache

dbSavePcellCacheForCV()

Cache not saved
CIW warning to update cache

dbSavePcellCacheForCVOnly()

Cache not saved
CIW warning to update cache

dbUpdatePcellCache()

Cache updated

dbClearPcellCache()

Cache cleared

The CDS_EXP_PCELL_MISMATCHED_PDK_POPUP environment variable controls the display of a pop-up window when xPcell_Version_PDK does not match the version found in the existing cache. When this environment variable is set to true, the following pop-up window opens informing you the mismatch between the version of the library and the version of Express Pcell stored in the cache.

Select Do not show this message again to disable the pop-up window for the entire Virtuoso session, and close the window to proceed.

Note:

Enabling Express Pcells for Specific Libraries

The Express Pcell framework lets you specify which libraries are included/excluded for cache operations.

This allows you to disable cache operations for dynamic reference libraries containing Pcells that are edited and optimized regularly but for which supermasters are not recompiled. Excluding such libraries from cache operations means that Pcells from these libraries are evaluated every time a design is opened, ensuring that the latest version of the Pcell is always used in the design in question.

To use this feature, the CAD engineer or PDK developer must define the following library inclusion SKILL variable in the libInit.il of the PDK in question:

    xPcell_Enable_libName = t | nil

Where:

libName

The library name.

t

The library is included for cache operations.

nil

The library is excluded from cache operations.

<undefined>

The library is included for cache operations.

This ensures that the default behavior is not disrupted for libraries that do not have the SKILL variable set. Such libraries continue to be included in Express Pcell cache operations by default.

To reverse this behavior and exclude libraries that do not have the SKILL variable set from Pcell cache operations by default, set the following shell environment variable before you launch Virtuoso: setenv CDS_XPCELL_LIB_EXCLUSION When set, libraries for which the SKILL variable is undefined are excluded by default.

The table below shows the behavior of cache operations when xPcell_Enable_libName = nil for a library.

Operation Behavior

Read cache

Cache not read (Pcell will be evaluated)

dbSavePcellCache()

Cache not saved

dbSavePcellCacheForCV()

Cache not saved

dbSavePcellCacheForCVOnly()

Cache not saved

dbUpdatePcellCache()

Cache updated

dbClearPcellCache()

Cache cleared

User Control to Override the Inclusion and Exclusion of Libraries

You can override the value of the xPcell_Enable_libName variable for individual libraries by specifying a user-defined library filter file before you launch Virtuoso:

setenv CDS_XPCELL_LIB_FILTER_FILE "filename"

Where filename refers to a simple ASCII file of the following format:

    ;libName        value
    gpdk045         t
    ref_RC      nil
    ref_L       nil    

Only the libraries defined in the list are impacted. Where there is a conflict, the value specified in the user-defined filter file takes precedence.

You must set the shell environment variable before invoking Virtuoso to obtain your required behavior.

Installing the Express Pcell Plug-In for Non-Virtuoso or Third Party Applications

The cdsSkillPcell.plg and libcdsSkillPcell.so files required for the installation of the plug-in on OpenAccess, are at the following locations:

For the successful use of the plug-in by any third party application, it is important to ensure the following:

Some third party applications do not honor the external library search path (LD_LIBRARY_PATH/LIBPATH) because they define their own library search path internally. In such cases, you can copy the desired libcdsCommon_sh.so and libcls_sh.so shared libraries in the <OA_HOME_Installation>/lib/<platform_port>/opt directory. This ensures the smooth working of third party applications with the Express Pcell functionality.

Cache Merge Utility

The cache merge utility collects and merges the contents of multiple Pcell caches located in different directories into a single Pcell cache. This is useful when members of a project team working on the same set of PDKs and reference libraries work from multiple project sites. In such a scenario, this utility can be used to consolidate submasters stored at various locations into a single destination cache directory. This eliminates repetition of submaster data, thereby reducing the disk space used and the Pcell read time for individual team members.

The cds.lib file must contain entries for all of the reference libraries used by all the caches that are to be merged. However, where two or more caches are using the same reference library, you must ensure that the reference libraries are synchronized.

Preventing Data Inconsistencies

Data inconsistencies can arise in the following cases:

xpcmerge Command Line Utility

Use the xpcmerge command to merge the contents of multiple caches to a specified destination cache. If the destination Pcell cache contains any data, by default the merged data is appended to the destination cache data. You can choose to delete any existing data stored in the destination Pcell cache before writing the merged data to the new cache.

This utility requires a cds.lib specifying the paths of PDKs and libraries. If the utility detects a PDK version mismatch for a Pcell, the corresponding supermasters and submasters are removed from the merged cache. If a PDK mismatch is detected for a library, no merge happens for that library and a warning message is issued.

Arguments

-dest xPcellDir

Specifies the name of the destination Pcell cache.

-src xPcellDir1 [ xPcellDir2 xPcellDirN ... ]

Specifies the names of multiple source Pcell caches.

-log logFileName

Specifies a relative or absolute path to a log file. See Sample Log File Format for details.

-noDestMerge

Deletes any existing data in the destination Pcell cache before the merged data is written to the destination Pcell cache.

Example 1

xpcmerge -dest /hm/user1/.expressPcell -src /hm/user2/.expressPcell

Appends the contents of the source Express Pcell cache /hm/user2/.expressPcell to the destination Express Pcell cache /hm/user1/.expressPcell.

In this example, if you use the -noDestMerge option, then the xpcmerge command will exit and an error message will be displayed.

Example 2

xpcmerge -dest /hm/user1/.expressPcell -src /hm/user2/.expressPcell ../india/.expressPcell -noDestMerge -log /hm/admin1/logs/cacheMerge.log

Merges the contents of the two source Pcell caches, /hm/user2/.expressPcell and ../india/.expressPcell. Because the -noDestMerge option is specified, the contents of the destination directory, /hm/user1/.expressPcell, are deleted before the merged content is written to the destination directory.

In addition, the /hm/admin1/logs/cacheMerge.log file is created and the following information is written to it.

Sample Log File Format

Environment Variable to Control Express Pcell Proliferation Message

When Express Pcell is not enabled and your design activity involves a large number of Pcells, you will see the following Express Pcell Proliferation message.

Selecting the Do not show this message again check box sets the value of the disableProliferationMsg environment variable to t in the .cdsenv file and prevents this message box from being displayed during further Virtuoso sessions.

You can also define the following environment variable in the .cdsenv file:

xpcell disableProliferationMsg boolean { t | nil }

This environment variable lets you specify whether this message box should be displayed. The default is nil, which means that the message box is displayed.

It is recommended to set this environment variable in .cdsenv file only. You cannot use the envSetVal command in CIW to change the value of this environment variable.

Exclude Specified Pcells from the Express Pcell Save or Read Operation

You can use the following methods to exclude specified Pcells from the Express Pcell cache during the save or read operation:

While specifying Pcell masters to be excluded during save and read operations, you can use both property string and cell exclusion SKILL list methods. In this case, Pcells masters specified by both methods are excluded.


Return to top
 ⠀
X