The purpose for creating a Pcell is to automate the creation of data. Pcells should be designed as standalone entities, independent of the environment in which they are created and independent of the variety of environments in which you or someone else might want to use them. An environment can react to a Pcell, but Pcell code should not react to, interact with, or be dependent on an environment. Although it is possible to create Pcells dependent on something in your current or local environment, and/or using unsupported or un-recommended functions, Pcell code is likely to fail when you try to translate it for a different environment.
Functions that are not supported for use within SKILL pcells usually belong to specific applications (tools); they are unknown to other environments, to other tools, and to data translators. For example, if you create a Pcell in the Virtuoso environment and include place-and-route functions, the Pcell will fail in the layout environment. Also, application-specific functions that are not supported for customer use can disappear or change, without notice.
Why you should create a Pcell? Creating Pcells for the ECO sometimes helps when we are not sure what size of cell we will have to use for fixing timing violations. Then, just changing a parameter in the Pcell may do the trick. Generally, you can identify them by their prefixes. However, you can also use all of the basic SKILL language functions. In the following example, we will demonstrate how you can insert the buffer during hold time fix (as part of the ECO) flow using Pcell:
1. At the Linux prompt set the following environment variables:
setenv CDS_ENABLE_EXP_PCELL true
setenv CDS_EXP_PCELL_DIR ./.expressPcells
2. Invoke Virtuoso and open the design. Note that for Virtuoso versions before IC18.104.22.1680.1, VLS-XL or VLS-GXL is required to save the express PCell cache. In IC22.214.171.1240.1 and later versions, all Virtuoso products support this.
3. Select Tools->Express Pcell Manager. Fill out all the details and Enable Caching of the Pcells check box with Auto Save option. Press Save Copy to save the Pcell Layout Cache. This step is necessary to enable inter-operation of the data between Encounter and Virtuoso.
4. Open the design using
Library Manager -> <Library name> <Cell name> <view name>
5. Zoom and select the flip-flop (FF1), in front of which the Pcell has to be inserted.
6. To placed the Pcell go to create -> Instance -> Library:pcell cell:pcell view:layout and placed the instance (I1) to a specific location (x1, y1) in between the flip-flop (FF1) and previous Instance (I2).
7. To do the connectivity
Select I2 instance->connectivity->net->propagate-> A: I2 Y: net1
Select I1 instance->connectivity->net->propagate-> A: net1 Y: net2
Select FF1 Instance->connectivity->net->propagate->D: net2
8. Press Save copy to save the design to OA and exit Virtuoso.
9. To do ECO routing in the Encounter Digital Implementation System (EDIS), make sure the same environment variables of step 1 is set before invoking the tool.
10. Before restoring the OA design database, update the config file with the Pcell library as below:
set rda_Input(ui_timelib,max) ./lib/max/spcbuf_wc.lib"
set rda_Input(ui_timelib,min) ./lib/min/spcbuf_bc.lib"
11. Within EDI, follow these steps to restore the OA design.
restoreOaDesign <Library name> <cell name> <view name>
The design, including the Pcells, should now be read in properly. If the Pcells still do not appear correctly, remove the ./.expressPcells directory and repeat steps 1-4 above. This will make sure new Pcell abstracts are created.
Note: In IC6.1.4 onwards, the cache saved is in a different format than what is saved by IC6.1.3. IC614 can read the Express PCell Cache created by IC6.1.3 and IC6.1.4, but IC6.1.3 cannot read the Express PCell Cache created by IC6.1.4. If you have made a cache using IC6.1.4 then make sure the LD_LIBRARY_PATH environment variable points to <IC6.1.4>/tools/lib while using EDIS. For example:
setenv LD_LIBRARY_PATH <IC6.1.4>/tools/lib
If the cache was made by IC6.1.3 then the LD_LIBRARY_PATH variable can be set to the tools/lib directory under your IC6.1.3 installation.
12. Finally, take the following steps to do the hold time fixing and save the design into OA database:
timeDesign -postRoute -hold
saveOaDesign <Library name> <cell name> <view name1>