Backend Design Tutorial

The following Cadence CAD tools will be used in this tutorial:

Computer Account Setup

You may want to revisit Simulation Tutorial and Logic Synthesis Tutorial before doing this new tutorial.

In order to setup your environment to run Cadence applications you need to open a terminal window and type:

. cadence2009

Running the Cadence backend tool

Now you should be able to run the Cadence tools. Never run Cadence from your root directory, it creates many extra files that will clutter your root. Instead please create a directory (e.g. cadence, you should have this already) and another directory for the design (e.g. tutorial, should have it), link the library files to your directory such that it will be easier to navigate to them, and finally one for the encounter files (e.g. encounter):

cd cadence
cd tutorial
ln -s var/home/hplp/osuflow/osu_stdcells/lib/tsmc018/lib .
mkdir encounter
cd encounter

For this tutorial you will need a few extra files, all the results of the previous tutorials, make sure you have those.

From the encounter directory type:


The command encounter (no &) starts SOC Encounter in the foreground and you should get the encounter startup window:


The window has three main areas:

Please try to familiarize yourself with the main window, click on the menus, on the Toolbar widgets, etc. For more information on the various Cadence tools I encourage you to read the corresponding manuals. You can get to the menu reference manual for Encounter by pressing Help on the right of the Menu Bar. Spend some time browsing the manuals to understand what is available (a lot!). During the semester you will have to look for information in the on-line manuals to complement the (limited) info given by these tutorials. Actually you can think of this tutorial as a tiny subset of the one available under help!

Now we can start using Encounter. First we need to import the synthesized netlist (the result of RTL synthesis with RTL Compiler). Click on Design -> Import Design and the Design Import window should pop-up (as an aside, it seems you can also import RTL directly, I assume this means you can do RTL synthesis in Encounter directly without using RC, it would be interesting to try this and see how it works). Now you need to fill in the Verilog netlist (use the browser button on the right to navigate to your synthesized netlist, in my case accu_synth.v in ../synthesis, make sure you click on Add, then on Close


Then click on Auto Assign for the Top Cell assignment. Then we need to specify the physical definitions for the library, do that by clicking on the navigate button on the right of the LEF Files entry which should pop-up the LEF Files window. Navigate to the lib directory (that you just linked into your tutorial directory, in my case at ../lib) then click on osu018_stdcells.lef, and finally on Add, then on Close


Then we need to specify the timing definitions for the library, do that by clicking on the navigate button on the right of the Common Timing Libraries entry which should pop-up the Timing Files window (note that more advanced libraries will have Max Timing and Min Timing Libraries in order to be able to do "corner analysis", not just nominal analysis). Navigate to the lib directory (that you just linked into your tutorial directory, in my case at ../lib) then click on osu018_stdcells.tlf, and finally on Add, then on Close


Normally, if this was a full chip design, we would also have to specify the I/O pad information now by the IO Assignment File, but for now we will not use I/O pads. Your Design Import pop-up window should look like this now


Now click on the Advanced tab and choose Power from the left window, fill vdd for Power Nets and gnd for Ground Nets (out of curiosity you can check that indeed these are the names of the power and gnd nets in your Verilog netlist by opening the file in a text editor).


((Now click on the IPO/CTS tab and fill buf for Buffer Name/Footprint and inv for Inverter Name/Footprint (out of curiosity you can check that indeed these are the footprint names by examining the .tlf file in the lib directory). Also click on Generate Footprint Based on Functional Equivalence.))


Finally click on OK in your Design Import pop-up window. Get familiar with some of the widgets, for example the Design Browser widget (the 7th from the right, top row) lets you see the design hierarchy, etc.


Now we need to specify floorplaning information. Since our design is simple and flat there is not much that needs to be done, but in general now is the time to decide how the big blocks that make up the design should be placed with respect to each other. Click on Floorplan -> Specify Floorplan and leave all defaults except change to 100.00 (default is 0.00) the Core to Left, Core to Right, Core to Top and Core to Bottom.


Click on Apply and the floorplan should change to reflect the 100 micron periphery around the core.


Now you can also play with the aspect ratio on the Specify floorplan window, change that to 0.5, click Apply, then to 2, click Apply again, finally back to 1 and click Apply. Note how the number of rows in your floorplan changes from 5 (for 1) to 7 (for 2) to 3 (for 0.5). It is a good idea to save your design from time to time by Design -> Save Design As...

The next step is to create the power and ground connections, but first you have to specify the nets. Click on Floorplan -> Connect Global Nets and then fill the pop-up window connecting pin vdd to global net vdd, and pin gnd to global net gnd, making sure the button Apply All is checked (need to do this one at a time by adding to list). Click Apply, then Check (make sure there are no warnings here), then Close to close the pop-up.


Now we can finally create the power distribution for our design. Click Power -> Power Planning -> Add Rings. Choose metal 5 and metal 6 with the width and spacing of 8 and 1 and with offset of 1, then click Apply, followed by Cancel.


Click Power -> Power Planning -> Add Stripes. Choose metal 6 with the width and spacing of 8 and 1 and with X from left of 20, then click Apply, followed by Cancel.


Then, in order to route the rest of the power distribution click Route -> Special Route, deselect Pad pins, then click Apply, followed by Cancel.


Now your floorplan should look like this.


It is time to place our cells, go to Place -> Standard Cells, click Mode, then deselect Run Timing Driven Placement and Reorder Scan Connection then click Apply, followed by Cancel.

place place

Now, if you click on the Physical View widget (on the right of the second row of the widget menu, right to the left of All Colors) you will see your placed design.


Finally we can also route our design, go to Route -> Trial Route... and click OK


And now your design should be also routed.


Since we don't have pads in our design the tools route the primary inputs and outputs to the periphery of the floorplan such that they can in principle be connected in a hierarchical fashion to other blocks.

Congratulations, this is the end of the first Backend Tutorial, in future tutorials you will learn how to do clock tree synthesis, verify your design, power analysis, timing analysis, and signal integrity.