Cadence Place & Route using AMS 0.35µm Libraries


(including pads,topcell=wrap_qmults)

Pre-requisites

This design flow expects that you are working in a design directory (e.g. ~/design/ams/ams_demo) with a number of sub-directories containing files created during the preceding synthesis stage:

If your files aren't in these directories or don't have these names, then the first thing to do is to create any missing directories and copy the files into place with the correct names.

If you don't have a pad ring specification file (and if the example wrap_qmults.io file is not what you want) then you can generate the .io file from a simple text file using the "process_pad_ring" script. The format of the text file can be seen in this example: qmults_pads.txt

Preparation

Note - if you read the whole of the preparation section before typing any commands you may save yourself some time and some typing.

Within your working directory (e.g. ~/design/ams/ams_demo), create a new sub-directory for the place and route files and change to the new directory:

    mkdir place_and_route
    cd place_and_route
Now run the ams_edis script with appropriate options to specify a 4-metal 0.35µm process running at 3.3 volts with core cells from the CORELIB library and pad cells from the IOLIB library:
    ams_edis -tech c35 \
      -vn <topcell>.v -vt <topcell> \
      -metlay thin4M \
      -corelib CORELIB \
      -corevolt _3.3V \
      -corevolt_wc _3.3V \
      -corevolt_bc _3.3V \
      -iolib IOLIB \
      -iovolt _3.3V \
      -iovolt_wc _3.3V \
      -iovolt_bc _3.3V \
      -ediver EDI13.1ISR4
Following this, you will need to add symbolic links for the gate-level netlist and the constraints file mentioned above to ensure that the place and route software can find them:
    ln -s ../../gate_level/<topcell>.v VERILOG/<topcell>.v
    ln -s ../../constraints/<topcell>.sdc CONSTRAINTS/<topcell>_func.sdc
    ln -s ../../constraints/<topcell>.sdc CONSTRAINTS/<topcell>_test.sdc

Note that the AMS scripts expect separate constraints files for functional mode (<topcell>_func.sdc) and test mode (<topcell>_test.sdc). This might allow us to specify tight timing constraints for the functional mode and looser constraints (e.g. a slower clock speed) for the test mode. For this walkthrogh we have generated only one set of timing constraints, so we link both of the expected files to the single constraints file (design.sdc).

Finally save a copy of the edi_custom_c35b4.tcl TCL script file into this directory.

If the source files are as specified in the prerequisites section above and you do not want to change any of the options to the ams_edis script, you can use the following sequence of commands in place of those above:

    prepare_edi <topcell> place_and_route
    cd place_and_route

Import the design

Within your new place and route directory (e.g. ~/design/ams/ams_demo/place_and_route), use the "encounter" command to start the place and route tool:

    encounter

You should see a new GUI window where you will later see the chip layout take shape. For now you should look at the terminal window where you should find the encounter prompt: "encounter 1>". Here you should type the following sequence of commands to import the design:

Note that commands in the list above which start with "ams" are AMS specific commands. These commands are defined in the "amsSetup.tcl" file which is a TCL script created by the "ams_edis" script. This "amsSetup.tcl" script invokes Cadence commands; later you will write your own TCL script to invoke the commands needed to place and route your design.

Place the Pad Cells

Specify Floor Plan

At the floor planning stage we divide the chip into different areas some of which may be used for standard cells while others will be used for macro blocks such as ROMs and RAMs. In this simple design a single area for all of the standard cells should be enough.

Filler cells are needed for the pad ring to join the pad power rings.

Add Core Power Rings

The instructions below will add two 20µm power rings between the core and the pads. The power rings use metal 3 horizontally and metal 4 vertically and are spaced 2µm apart (any track over 10µm in width is treated as a wide track which requires greater than usual spacing to other design elements — 2µm is the minimum spacing for wide metal tracks on the thick metal 4 layer). The 60µm spacing between the core and the pad ring is plenty for 2x 20µm power rings.

Add Power Routing

Once the power rings have been added we can perform the power routing for the connections to the pad cells and the core rows which will later hold the standard cells.

Place cells

The next stage is to place the standard cells in the core.

Note that the "placeDesign" command seems to have added wiring as well as cells. The wiring that you see is as a result of a trial routing stage and will later be replaced by the actual routing.

Also note that the row utilisation (at least for small designs) is much less than the 70% specified during the "floorPlan" command above. The row utilisation is less than 70% for small designs because the design is pad limited rather than core limited (i.e. the size of the design is primarily a function of the number of pads rather than a function of the number of gates in the design).

Pre-CTS Optimisation

Now that we have a preliminary placement of the cells we can make estimates of track capacitance and hence get more accurate estimates of gate delays. Based on this new data we can check the constraints and perform optimisations to improve the design.

During optimisation the tool can add buffers to reduce delays in high capacitance paths. Other optimisations that can take place at this stage include the re-sizing of gates (to increase drive strength or to decrease capacitive load) and the movement of gates to reduce path lengths.

If all is well, you will see a section marked "optDesign Final Summary" which shows no "Setup mode" "Violating Paths" and no nets with design rule violations (DRVs).

If there are oustanding problems at this stage, seek advice. It may be worthwhile running a further optimisation at this stage in order to improve the design before proceding.

Clock Tree Synthesis

For most designs, we need a clock tree to distribute the clock (or clocks) to the flip-flops with minimal skew. In very small designs where the clock comes from a clock buffering pad, there may be few if any buffers/inverters in the tree.

Update Constraints

The original constraints file included instructions to set the clock latency, clock transition and clock uncertainty in order to model the predicted delay through the clock tree and the jitter in the input clock. Now that we have a real clock tree we need to update the constraints to reflect the delays through this tree.

Post-CTS Optimisation

Based on the design including the clock tree and the updated constraints a new round of optimisations is run. At this stage we are interested in particular in hold vioalations caused by problems with clock skew.

As before you should check the "optDesign Final Summary" from each of the "optDesign" commands to check for problems.

Route Design

Although various trial routing has already taken place during the optimisation and clock tree synthesis stages, onlt the power routing that we did at the beginning of the process is fixed. Now that all the cells are in place, we are ready to route the design for real.

Post-Route Optimisation

At this stage the design is nominally complete but may have errors. The final optimisation stage aims to identify and resolve any remaining problems.

Add Core Filler Cells

Filler cells are needed for the core to join the wells and to add well and substrate taps.

Verify the Design

While the tools will do their best to generate a design rule correct layout which matches the connectivity of the original design, things do go wrong. At this stage you should run the following verify commands and check for any violations.

Check the Size of the Design

Save the Design


Scripting the design flow

The whole procedure can be automated using a tcl script. This is especially useful if having created a chip layout, you make a minor change to the design and need to go through the whole process again.

Within encounter, the script can be executed using the command: source <scriptname>.tcl

While this first script does everything that we need, it doesn't care about the results of an individual operation and will carry on regardless of failures such as unresolved timing violations during the optimisation stages.


A more advanced script will use the timeDesign and get_metric commands to halt operations if a problem is identified.


Additional Documentation

All Encounter documentation is available on-line via Cadence Help. Type the following at the unix command prompt in order to invoke Cadence Help:

On-line manuals of particular interest to this tutorial are:


Iain McNally
18-11-2018