Explanation of Script
A user implemented or acquired a layout view which contains pin placement done in Virtuoso Layout Editor. To implement the design further for timing-driven place and route, the user requires the same pin placement in Innovus.
There can be many ways to bring pin placement in Innovus. If the user has enabled the Open Access Based MixSignal Implementation flow, it enables the user to load Open Access CellView directly.
Another way, which is explained in this article, is to dump the relevant pin placement Innovus commands from the Virtuoso session and source these commands into the Innovus session.
Usage
Steps:
- Download the attached SKILL file (“CCSpinDumpForInnovus.il”) to your work directory.
- Open the Layout CellView containing the pin placement in Virtuoso Layout Editor XL mode.
- Load the SKILL code “CCSpinDumpForInnovus.il” in CIW.
load(“CCSpinDumpForInnovus.il”)
- Run the following command in CIW:
CCSpinDumpForInnovus(“FileName”)
Example:
CCSpinDumpForInnovus(“pinDump.tcl”)
Contents of the file ‘pinDump.tcl’:
createPhysicalPin “agc_eq_bypass” -layer “Metal3” -rect {87.34 39.1 87.64 39.4} -net “agc_eq_bypass”
createPhysicalPin “timing_mode” -layer “Metal3” -rect {90.14 39.1 90.44 39.4} -net “timing_mode”……
- Close the Virtuoso session.
- Open an Innovus session and load/restore the design where the pin placement is required to be imported.
- Source the dumped Innovus pin command file (for example, “pinDump.tcl”) in Innovus.
source pinDump.tcl
- Observe the pin placement in Innovus.
Note: The above syntax is compatible with Innovus 17.11 and later versions. For dumping a file compatible with Innovus 16.11 and lower versions, use the SKILL file CCSpinDumpForInnovus16.il which will give an output like below:
createPhysicalPin “agc_eq_bypass” -geom “Metal3” 87.34 39.1 87.64 39.4 -net “agc_eq_bypass”
createPhysicalPin “timing_mode” -geom “Metal3” 90.14 39.1 90.44 39.4 -net “timing_mode”……
CCSpinDumpForInnovus.il
/*************************************************************************
* DISCLAIMER: The following code is provided for Cadence customers *
* to use at their own risk. The code may require modification to *
* satisfy the requirements of any user. The code and any modifications *
* to the code may not be compatible with current or future versions of *
* Cadence products. THE CODE IS PROVIDED "AS IS" AND WITH NO WARRANTIES, *
* INCLUDING WITHOUT LIMITATION ANY EXPRESS WARRANTIES OR IMPLIED *
* WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. *
*************************************************************************/
procedure(CCSpinDumpForInnovus(fileName)
let((cv terminal pin fig llx lly urx ury)
outport=outfile(fileName "w")
cv=geGetEditCellView();
rxp1=pcreCompile("<")
rxp2=pcreCompile(">")
cellName=cv~>cellName
foreach(terminal cv~>terminals
netName=terminal~>net~>name
rxp1=pcreCompile("<")
rxp2=pcreCompile(">")
netName=pcreReplace(rxp1 netName "[" 1)
netName=pcreReplace(rxp2 netName "]" 1)
foreach(pin terminal~>pins
foreach(fig pin~>figs
;printf("Name:%L Layer:%L\n" fig~>net~>name fig~>layerName)
println(fig~>objType)
llx=xCoord(lowerLeft(fig~>bBox))
lly=yCoord(lowerLeft(fig~>bBox))
urx=xCoord(upperRight(fig~>bBox))
ury=yCoord(upperRight(fig~>bBox))
fprintf(outport "createPhysicalPin %L -layer %L -rect {%L %L %L %L} -net %L\n" netName fig~>layerName llx lly urx ury netName)
)
)
)
close(outport)
view(fileName)
);let
);procedure
CCSpinDumpForInnovus16.il
/*************************************************************************
* DISCLAIMER: The following code is provided for Cadence customers *
* to use at their own risk. The code may require modification to *
* satisfy the requirements of any user. The code and any modifications *
* to the code may not be compatible with current or future versions of *
* Cadence products. THE CODE IS PROVIDED "AS IS" AND WITH NO WARRANTIES, *
* INCLUDING WITHOUT LIMITATION ANY EXPRESS WARRANTIES OR IMPLIED *
* WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. *
*************************************************************************/
procedure(CCSpinDumpForInnovus(fileName)
let((cv terminal pin fig llx lly urx ury)
outport=outfile(fileName "w")
cv=geGetEditCellView();
rxp1=pcreCompile("<")
rxp2=pcreCompile(">")
cellName=cv~>cellName
foreach(terminal cv~>terminals
netName=terminal~>net~>name
rxp1=pcreCompile("<")
rxp2=pcreCompile(">")
netName=pcreReplace(rxp1 netName "[" 1)
netName=pcreReplace(rxp2 netName "]" 1)
foreach(pin terminal~>pins
foreach(fig pin~>figs
;printf("Name:%L Layer:%L\n" fig~>net~>name fig~>layerName)
println(fig~>objType)
llx=xCoord(lowerLeft(fig~>bBox))
lly=yCoord(lowerLeft(fig~>bBox))
urx=xCoord(upperRight(fig~>bBox))
ury=yCoord(upperRight(fig~>bBox))
fprintf(outport "createPhysicalPin %L -geom %L %L %L %L %L -net %L\n" netName fig~>layerName llx lly urx ury netName)
)
)
)
close(outport)
view(fileName)
);let
);procedure