Prepared by:Xu Gao & Hui Geng
Updated by Travis Schulze
To start Cadence:
Login to the Linux System in EECH 107.
Open a terminal window.
Alternately, if you are logging in from a Windows system,
Click on the Start>Programs>XWin 32 5.4>X-win 32
Then, open Putty (Start> Programs > Putty ) and enter a remote login rcXXlece107.managed.mst.edu where XX can be any number from 05 to 18
On the Putty left hand menu, navigate to Connections -> SSH -> X11 and select enable X11 forwarding.
Navigating back to the main screen on Putty select Open to connect
Go to your Home Directory and create a new directory just for this Cadence library using "mkdir filename". This will be the directory for the NCSU library and is only to be used for that library.
Navigate to the new directory.
In the command prompt, type: ncsu.sh &
To install ami06 I/O pad library:
Required File: mAMI05P.gds
Ø From the main virtuoso window, choose: File->import->Stream
Ø Fill in the window as follows:
Ø Stream File: Browse to the directory where you saved the mAMI05P file and select it in the Stream File field.
Ø Destination Library: Name pads_ami06 is used in the tutorial, but you could choose yours.
Ø Attach Technology Library: NCSU_TechLib_ami06
Ø Click on Options button.
Ø In General tab, choose Disable file locking
Ø Click on the Layers tab.
Ø Click on Load File. Browse to the following directory:
/usr/local/cadence/ncsu-cdk-1.6.0.beta/pipo and select file streamInLayermap
Ø Click OK and the layer mapping will load into the window.
Ø Click on the Translate button.
Ø The translation will yield a few warnings. That’s OK. When asked to view log file, click on 'No'.
Ø Now go to library manager and open the library - pads_ami06. It has all the pads as well as a padframe.
Ø There are several different types of PADS:
a. PADINC is an input PAD
b. PADOUT is an output PAD
c. PADIO is the IO PAD
d. PADVDD is the VDD PAD
e. PADGND is the GND PAD
f. PADSPACE is a “SPACER” pad for unneeded input pins
Write a script using the SKILL language that defines your pads
Ø Type gedit & in the terminal to open a new file, and write the script using SKILL language.
Here is an example of the script. (You can download this in the attachments at the bottom of this page)
Important Note- If you are using a linux machine in EE 107 then the following script will work for you without any editing. If you are using a Windows machine and logging in using Putty,
then you must edit this script before using it to place any pads. All pad names must be changed to all lower case. For example, PadOUT must be changed to padout, PadIO to padio, and so on.
Ø The main function used in this code is dbCreateInst. The main parameters for this function you need are:
· “pads_ami06” is the pad library name.
· “PadNC” is the pad name. Change this to the type of pad you need. Pads include (See reference mTSMs035P.pdf):
o PADAREF – analog reference pad
o PADBIDIR – bi-directional pad with buffer
o PADFC – pad frame corner cell
o PADGND – ground pad
o PADVDD – power pad
o PADINC – buffered input pad with complementary signal
o PADIO – input/output pad (no buffer – straight through connection)
o PADSPACE – continues padframe, with no bonding pad placed
o PADNC – a PADSPACE with a bonding pad, but no connection to pad
o PADOUT – output pad with buffer
· “layout” indicates the view type.
· The following two parameters (list xpointv+no_pads*90 ypointv) are position coordinates (as shown in the following figure)
· The last one (R0 or R270) is the rotation angle.
Ø Save the text file in your nethome/xxx folder and name it as “***.il”.
Ø In this example, the pad we use is PadOUT, PadIO, PadFC and so on, and you may need to use different types of pad in your design.
Ø You could modify the code to create the pad frame you need, by specifying the type and the position of pad. You could also run and test your code directly from the Virtuoso log window.
Ø (dbCreateInst (getEditRep) (dbOpenCellViewByType "pads_ami06" "PadInC" "layout") nil (list 0 0) "R0")
Ø (dbCreateInst (getEditRep) (dbOpenCellViewByType "pads_ami06" "PadOut" "layout") nil (list 90 0) "R0")
Ø For the example shown in the above figure, by running those two commands in sequence in the Virtuoso log window, one input pad and one output pad will be placed in the layout view you opened, which is shown in the following figure. The position of the output pad here is (90 0), because the width of the pad is 90.
Check the pad library
Ø Go to Library Manager window, and you should find the pads_ami06 appearing in the library manager windows now.
Ø Create a new library to build your pad frame design. For example, I built pad_test, and created cell name test (cell type should be layout) as follows.
Ø Open the cellview window.
Ø Type load “xxx.il” in CIW of virtuoso, in which I named my script file as pad.il.
Ø Type placePadFrame(number) in CIW of virtuoso to indicate the number of pads in each side in your layout. Here I just place 4 pads in each side in my design, and you could use different numbers according to your design
Ø Then you will get the pads added in your design. Here I put two VDD pads, two GND pads, four input pads and four output pads in my design.
Ø Press shift+F to switch to the layout view of the pad frame, as in the following figure.
Ø Put your circuit in the pad frame.
Here I put an inverter inside the pad frame by adding an instance, which has passed DRC and LVS.
Ø Connect your circuit to the appropriate pads.
The following figure shows an example. The circuit is placed in the pad frame near to the appropriate pads. Connect the input and output of your circuit to the I/O pads, and be sure to connect up VDD and GND too. Your connections to VDD and GND should generally be wide as in the “real” circuit, there may be substantial current on these wires when the whole chip is up and running.
Ø Run DRC.
You may find several DRC errors in the padframe. This is normal, since the padframe may have been generated following a slightly different ruleset rather than the one you are following. For example, pads rarely follow the scalable design rules, but use the ruleset specific for the process. Double check the DRC errors in your own design.
Ø Extract parasitics as normal.
Simulate your simulated and extracted design to ensure everything still works as expected. You should perform your simulation from the point of view of the IC package to make sure your connections to the padframe are correct.
Ø Check the layer density
This step is often performed by the foundry and we are not sure how to perform it in Cadence. Essentially what will be done is to determine the total percentage of the total available area taken up by poly, M1, M2, M3, etc. For example, if you have an IC that is 2 mm in each side and uses 1 mm2 of poly (total), then the poly density is 1 mm2/(2mm * 2 mm) = 25%. The minimum density is 15%, so this result is fine for production. Typically, if your design does not meet this constrain, the foundry will add extra poly to your design in extra spaces to meet this requirement.
In the layout view, you could turn on only the poly layer, and make a rough guess of your poly layer density. At this point you could generally do a quick check for the antenna rules at the same time.
Ø Generate a GDS file
After you have attached your design to the PAD-FRAME, ensured that your design has 0 DRC errors (aside from the DRC errors of the PAD-FRAME itself), and successfully simulated the extracted design, you are ready to export your project for fabrication. MOSIS will only accept designs in CIF or GDS format.
Export procedure:
In the Virtuoso log window select File->export->stream, the below window should appear. Click on OK.
Click “Options”, and choose “layers” tab, then click “load file” to load the layer map file.
In Cadence file folder “usr/local/cadence/ncsu-cdk-1.6.0.beta/pipo”, there should be a “streamInLayermap” file, which is a layer map file for importing the gds file using NCSU_ami06 technology. This layer map file has some bugs when used as the exporting layer map file, but it is easy to fix as shown below.
After loading the “streamInLayermap” file, you just need to add two rows as shown in the following figure. After adding these rows, save this layer map as a new layer map file and use it to export gds files in the future.
After loading the correct layer map file, click the translate button.
Once the translation process is complete and there are no errors, a GDS file will have been created in your home directory in the folder: /nethome/users/xxx