Product Documentation
Virtuoso Studio Known Problems and Solutions
Product Version IC23.1, November 2023

Known Problems and Solutions in Virtuoso Parameterized Cell

This document describes the known issues with Virtuoso® Parameterized Cell compiler and suggests the workarounds for these issues. Each issue is identified by a Cadence Change Request (CCR) number.

Unless otherwise stated, the issues described in this document were identified in IC23.1 or an earlier release. For a list of the issues that were fixed in this release, check the README file at downloads.cadence.com.

Related Topics

Overview of Virtuoso Parameterized Cell

Virtuoso Parameterized Cell SKILL Reference

CCR 1761600: If PCELL parameter name is given as "cellName" then the Create Instance form cannot be opened after instantiate the PCELL

Description: The Create Instance form cannot be opened after the Pcell is instantiated and the following error message is displayed in CIW:

\e *Error* putprop: first arg must be either symbol, list, 
defstruct or user type - nil
 or
\e *Error* dbFindOpenCellView: argument #2 should be a string 
(type template = "gttg") - nil

This problem can occur whenever there is a conflict between the Pcell parameter name and the form field name. For example, if you specify cellName as an argument in the pcDefinePCell function, the Create Instance form does not open after the Pcell is instantiated. As a result, the field name Cell is replaced with cellName in the Create Instance form. In addition, this form is not displayed on subsequent invocation and the error message is displayed.

Solution: Exit the Virtuoso session, correct the Pcell definition, and recreate its master before invoking the Create Instance command.

This issue can also arise with the Edit Property form.

CCR 854985: Express Pcell is not working with Calibre on linux32/64 and sol86 64bit ports

Description: Appropriate changes need to be made in third party tools scripts to accommodate the GCC 4XX paths. As a workaround, you need to set the LD_LIBRARY_PATH for linux 32bit as:

$OA_HOME/lib/linux_rhel40_gcc44x_32/opt

and for linux 64 bit as :-

$OA_HOME/lib/linux_rhel40_gcc44x_64/opt

CCR 694579: VLE crashes with undo command

Description: Pcell code creates instance and subMaster to have different value for the same parameter.

Solution: Pcell should not have a code that changes the value of a parameter, such as:

pcCellView~>parameters~>[paramName] = <value>

CCR 684824: Express Pcells slow in IC6.1.4EAP when cache directory is on a NFS mounted file server

Description: Express Pcell infrastructure may leave some stale scratch files in case of a crash in Virtuoso or in any third-party tool using the plugin.

Solution: Currently, a workaround is not available. This limitation will be resolved later through CCR 741126.

CCR 491144: hierarchical copy bug

CCR 490865: incorrect library tech info after hierarchical copy

Description: When you use the Library Manager to perform an hierarchical copy of a cellview from one library to another library, and the cellview contains a Pcell instance, the system does not rebind instances contained in the Pcell to the new library name. Any instances contained in the Pcell remain bound to the original library name.

In the example below, the cellview TOP is in LIB_AA. TOP contains a Pcell, Pcell_1, which contains Instance_A.

After you copy LIB_AA TOP layout to LIB_BB TOP layout, Instance_A in LIB_BB is still bound to LIB_AA.

Solution: After copying cellviews that have Pcells containing instances, you must force the system to rebind the instances by recompiling the Pcells. You can recompile all of the Pcells in your library, or just recompile the Pcells in a specific cellview, by using the script compilePcell.il that is provided below.

Code for compilePcell.il Script

procedure( pcRecompileLibPcell(libName)
prog((lib cv cellName viewName)
lib = ddGetObj(libName)
when( !lib
warn("Library %s does not exist.\n" libName)
return(nil)
)
foreach( cell lib~>cells
foreach( view cell~>views
cv = dbOpenCellViewByType(lib cell~>name view~>name "" "r")
info("cv ( %s %s )\n", cv~>cellName cv~>viewName)
cellName = cv~>cellName
viewName = cv~>viewName
when( cv~>isParamCell
dbReopen(cv "a")
pcHIDefineParamCell(cv)
dbSave(cv)
;dbWriteSkill(cv "/tmp/t.il" "w" "4.4")
;dbPurge(cv)
;load("/tmp/t.il")
)
)
)
return(t)
))
procedure( pcRecompilePcellUnderHierCell(libName cellName viewName) prog((cv master)    cv = dbOpenCellViewByType(libName cellName viewName "" "r")
;info("cv ( %s %s )\n", cv~>cellName cv~>viewName)
foreach( ih cv~>instHeaders
master = ih~>master
when( master
when( master~>isParamCell
dbReopen(master "a")
pcHIDefineParamCell(master)
info("Parameter cellview ( %s %s ) in library %s is recompiled.\n",
master~>cellName master~>viewName master~>libName)
dbSave(master)
)
pcRecompilePcellUnderHierCell(master~>libName
master~>cellName master~>viewName)
)
)
return(t)
))

Return to top
 ⠀
X