UserManual ch7,8
UserManual ch7,8
UserManual ch7,8
7.1.1 CMOSP18
The CMOSP18 technology distributed by CMC only contains older black-box libraries for standard cells
and the I/O pads. In the examples worked in this chapter we will use a newer set of commercially available
black-box libraries known as the Artisan version 3.0 standard cell and I/O libraries.
7.1.2 CMOSP35
In the CMOSP35 technology distributed by CMC, two sets of standard cell libraries are available: wcells
and the black-box libraries (tcb773pwc and tpd773pnwc). The wcells library was developed at CMC, while
the black-box libraries are commercial libraries. The default technology library path for Synopsys is set to
access the wcells library. If you wish to use the black-box libraries, you will need to make appropriate
changes in the .synopsys_dc.setup file mentioned below for this technology.
The graphical user interface, design_analyzer, and the scripting interface, dc_shell, both require two tech-
nology-specific set-up files in your work directory. To set these up, you can copy the appropriate set-up
files depending on your technology choice. (Note the space followed by a ‘.’ at the end of all of the “cp”
commands.)
CMOSP18: % cp /CMC/kits/VRGlocal/demo/synopsys/.synopsys_dc.setup .
% cp /CMC/kits/VRGlocal/demo/synopsys/.synopsys_vss.setup .
CMOSP35: % cp /CMC/kits/cmosp35/synopsys/dotfiles/.synopsys_dc.setup .
% cp /CMC/kits/cmosp35/synopsys/dotfiles/.synopsys_vss.setup .
In addition, you will need to create a directory named “Work” to hold intermediate files:
% mkdir ./Work
% design_analyzer &
3. Select File→Read... and select your design files from the drop-down list. A log window echoing
load messages will appear. Notice the icon at the center of the Design Analyzer window. The
expression inside the box indicates that the design has not yet been compiled to a gate level netlist.
4. For a design that consists of multiple files, read in each file, one at a time. Then select the top level
module in the Design Analyzer window and select Analysis→Link Design...
5. After loading all necessary HDL files, it is wise to check the design for errors that might have not
become apparent during simulation before synthesis. Select Analysis→Check Design and con-
firm the default check settings. A return value of ‘1’ indicates that the were no warnings or errors
in the design.
The next two icons allow you to move up or down in the design hierarchy.
1. Select the top level module in your design hierarchy. Display its symbol view.
3. Select Attributes→Clocks→Specify, which will bring up the Specify Clock dialog window.
4. Ensure that the Don’t Touch Network check-box is checked. This will prevent Design Analyzer
from optimizing the clock tree by inserting buffers; buffers will be inserted using a different tool,
during the floor planning, placement, and routing.
5. Specify the Period of the clock, in nanoseconds, and specify the position of the positive Edge, also
in nanoseconds.
6. Click Apply to apply the settings, notice that your clock pin now has a red square wave signal.
Click Cancel to close the Specify Clock dialog window.
7.5.2 Specify operating environment: input drive strength and output loading
Ideal circuits may have their inputs driven strongly, and no output loading. Real world circuitry should be
synthesized with more-realistic values. You can specify the input drive strength:
1. Select the top level module in your design, and drop down into its symbol view.
The load on an output pin will impact the timing of the pin. Therefore, it is a good idea to provide the syn-
thesis tool with an estimated capacitive load each output pin will experience after manufacturing. To spec-
ify the load on an output pin:
1. Select the top level module in your design, and drop down into its symbol view.
2. Select each output pin, one at a time, and perform the following
• Select Attributes→Operating Environment→Load, which will bring up the Load dialog
window.
University of Toronto VLSI Research Group
3. Set the Max Area field to 0. This will force Design Compiler to optimize the design for the small-
est silicon area.
4. Click Apply to confirm the settings, and then Cancel to close the dialog window.
Note: On some versions of design_analyzer, this command fails with an error related to fault
coverage, due to a problem with one of the installed scripts. To avoid this error, you can type
this command instead, into the bottom line of the Command Window:
set_max_area 0
2. Double-click on your top-level module to descend into its symbolic or schematic view.
4. Make sure the check box for Same Rise and Fall is selected.
5. Specify the Maximum Delay to be 0. This will force Design Compiler to optimize the design for
the fastest possible path delay, and hence clock frequency.
6. Click Apply to confirm the settings, and then Cancel to close the dialog window.
We have just specified potentially conflicting optimization goals: a minimum size circuit with a maximum
clock frequency. By default, Design Compiler tries to satisfy these goals by optimizing for timing, then
design area. If you’d like to change the default optimization goal priorities, refer to the on-line documenta-
tion.
2. Select the desired Map Effort. A high mapping effort will specify that Design Compiler should
spend more time trying to meet the specified design optimization goals.
3. Do not select Verify Design. In theory, this option performs automatic RTL versus gate level design
comparison. However, it takes an extremely long time, especially at higher Verify Effort settings.
4. Click OK to begin the optimization. As the optimization progresses, the Command Window will
be updated with the synthesis progress.
When selected, Boundary Optimization allows Design Compiler to make logic and gate level optimizations
across module boundaries. If this option is not checked, each module will be optimized irrespective of
what it is connected to, or what modules it contains inside. However, boundary optimizations might change
the pin-outs of some modules. Refer to the on-line documentation before using Boundary Optimization,
especially when using external black-box modules, such as memories or black-box standard-cell libraries.
3. Select the check-boxes corresponding to the information you would like the report to provide, such
as Constraints, Area and Timing.
The report will provide you with information such as what the design constraints where, and whether they
have been met. Other information, such as the longest path (critical path) in your design is provided as
well. To see the critical path in your design, bring up the schematic view of your design and select
Analysis→Highlight→Critical Path.
7.7 Testability
University of Toronto VLSI Research Group
At this stage of the design, we are ready to add some features to the design which will be useful after our
chip has been fabricated, packaged, and returned to us for testing. At this time, these features are beyond
the scope of this manual.
If you wish to investigate these for your own projects, some Design For Test Tools are available here from
Mentor. To access these, you may
% source /CMC/tools/CSHRCs/dft
Information about the types of pads provided for the CMOSP35 technology is provided in
/CMC/kits/cmosp35/doc/blackbox/tpz773pn_150a/tpz773pntc/html/index.html
Pads can be manually inserted into your HDL code before synthesis, by using the appropriate model name
for the pad. Alternatively, if the libraries are set up correctly, you can utilize the automatic pad insertion
capabilities provided by Design Analyzer. However, for either case, you will still need to specify an esti-
mate of the expected output load for each output pin.
Note: Automatic pad insertion can cause weird synthesis results when an output pin serves as
input to internal logic as well. One way to avoid this is to avoid the use of register type signals
as outputs, see Fig. 7.1 and Fig. 7.2 for example code illustrating proper use of registered sig-
nals as outputs.
By preparing a “wrapper” Verilog file defining the chip-level representation of the design, we can simplify
the addition of pads to a synthesized design. For example, our synthesized converter_gates.v file
shows a top-level module converter and the definitions of its inputs and outputs. We can prepare a
chip-level module as shown in Fig. 7.3. Note that this is only a fragment of the wrapper file; the full ver-
sion is available at /CMC/kits/VRGlocal/demo/converter_chip_wrapper.v
Run this Unix command to create the file converter_pads.v, a complete Verilog description of the
chip to be used with other tools:
% cat converter_gates.v converter_chip_wrapper.v > converter_pads.v
To automatically insert appropriate input, output, and bidirectional pads into your design1, you can per-
form the following steps:
1. Double click on a pin to bring up the Input/Output Port Attributes dialog window.
3. Click on Port Pad Attributes... button to bring up the Port Pad Attributes dialog window.
4. Make sure that the Build New Pad radio button is selected. Alternatively, you can specify a specific
pad to use as well. Refer to the Design Analyzer on-line manual for information about other
options in the form.
7. With the Input/Output Port Attributes window still open, you can continue changing the attributes
for other input or output ports.
Note: You cannot use the Output Port Attributes window to set attributes for input or bi-direc-
1. This works for the CMOSP18 design-kit, but attempts to try this in CMOSP35 designs will cause
errors. Input pads will be inserted, but insertion of output pads will fail.
tional ports, and vice versa. You will need to close the current window, and double click on the
pin for which you wish to change attributes, to open up its corresponding attribute window.
This has not yet inserted the pads, but only specified ports that should have pads automatically connected
to them. To actually insert pads select Edit→Insert Pads to bring up the Insert Pads dialog window.
10. Now that you’ve inserted pads, you will need to re-optimize the design once more to make sure
that no timing has been violated. Select Tools→Design Optimization to bring up the Design Opti-
mization dialog window.
11. Select the Map Effort you’d like to use, medium should suffice, and click OK to re-optimize your
design.
3. In the Synopsys tools, load the EDIF file and save the design.
The Cadence place-and-route tool is “EDI”, or “Encounter Digital Implementation”, also known as,
Encounter or “SOC Encounter”.
You will need a Verilog gate level netlist of your design as well as design constraint information before
beginning floor planning. To demonstrate the required steps, we will continue to use the converter design
from the previous chapters.
% source /CMC/tools/CSHRCs/Cadence.EDI
This information can be set up manually, but a template for a specific technology will help. You can create
a work directory named EDI and copy a sample set-up file and related information using
% mkdir EDI
% cd EDI
% cp /CMC/kits/VRGlocal/demo/EDI/CMOSP18/* .
(Note the space followed by the “.” at the end of the final command.)
Unless you are targeting high-density packaging for a system on chip design with hundreds or thousands of
pins, the periphery of your chip’s floor plan will consist of a single ring of input/output pad circuitry. The
pad cells will have power busses running through them to provide power and ground connections for the
standard cells in the core of the system (“VDDCORE” and “VSSCORE” networks), and could also have
busses running through them to provide separate power and ground connections to the input/output pads
(“VDDRING” and “VSSRING” networks). In most modern technologies, I/O pads are designed to be
If your design is core limited, the gaps between the pad cells can be filled in by inserting pad filler cells
(named PFEED20) or by adding additional cells to provide more connections to power or ground. Other
constraints imposed by manufacturers (e.g. minimum pitch of bonding pads to ensure that the chip can be
packaged properly) may also require that you insert additional filler cells.
Examine the converter.io file. Each pad is defined using this general template:
Pad: pad_instance_name side|corner [cellname]
2. Select File→Import Design... from the banner menu of the Encounter widow
3. In the Design Import dialog window click Load... (at the bottom) and select converter.conf, then
click Open. This reads the configuration file and fills in various fields in the Design Import dialog
window. Click OK to use these files.
The large region should show a floorplan of your design, with pad cells placed as specified in the con-
verter.io file. In the middle is the region where the core cells will be placed. Between the core and the I/O
ring is a gap, which will be used to route power and ground networks supplying the core cells, as well as
for wiring from pad cells to the core circuitry.
Save this initial imported design, using File→Save Design... and changing the name to 0_imported.enc
You will be able to return to this initial saved version (or any other saved version) if you find problems in
later stages. The steps shown in the remaining parts of this chapter are typical of any design flow. Some
steps allow more customization than others; we will only touch on the main issues.
To decrease the amount of routing congestion around these blocks and to prevent placement of standard
cells too close to these blocks it is also a good idea to specify a block halo around them: No cells will be
placed inside a block halo. To specify a block halo, select a cell and then select Floorplan→Edit Floor-
plan→Edit Halo→... Fill in the pop-up form appropriately.
3. Select the ring type: For a core ring around your placement area, select core ring(s) contouring
followed by Around core boundary. You probably don’t want a ring contouring the I/O boundary,
as this might cause problems with pad routing connections. (If you have predesigned blocks, you
might block rings around these separately.)
4. Specify the ring configuration by specifying the types of metal layers you’d like to use for the dif-
ferent sides of the ring. Specify the width and spacing of the metal layers as well. Default values
should be satisfactory for most design, but you may increase the width and spacing of the rings.
7. Select Power→Power Planning→Add Stripes... to add vertical stripes across the core region.
Try to select the number of stripes and their spacing such that they do not align with power pad
cells, to minimize potential problems later. In this example, add one set, offset by 75 microns from
the left of the core area.
2. In the Place dialog window, choose Run Placement in Floorplan Mode: a prototyping effort is a
good place to start for large designs to determine if the cells can be placed successfully. Use the
Run Full Placement level for a final placement run later, or for simple designs.
3. Click OK to start the placement engine. The core area will contain boxes representing the cells
that have been placed. (You might need to change the view to “Physical View”, by selecting the
icon at the far right side of the Tools icon row.)
Run a trial route and simple timing verification to determine if there are any major problems:
4. Select Route→Trial Route... and use the default values; click OK to continue.
5. Select Timing→Extract RC and turn off the Save Cap to check-box; click OK to continue.
In the Timing Analysis window, select Use Existing Extraction and Timing Data, then click OK to
continue. Ensure that there are no timing violations. If timing constraints are not met, you can try
re-doing the Placement with a higher Placement Effort Level.
7. Run a Placement with a Placement Effort Level of High and re-run the Trial Route, ExtractRC
and Timing Analysis
When you started this chapter, you copied several files from the demonstration directory, including the file
converter_chip.ctstch This clock tree specification file allows you to specify many parameters, including
the depth of the clock tree, how many instances there are at each level, and the type and strength of the
buffers at each level. For your own designs, you will have to create your own clock tree specification file,
but you can use this clock tree specification file as a starting point.
AutoCTSRootPin u_clk/C
MaxDelay 2ns
MinDelay 0ns
SinkMaxTran 100ps
BufMaxTran 150ps
MaxSkew 30ps
NoGating rising
MaxDepth 7
Buffer CLKBUFX20 CLKINVX20 CLKBUFX16 CLKINVX16 CLKBUFX12
+ CLKINVX12 CLKBUFXL CLKINVXL CLKBUFX8 CLKINVX8 CLKBUFX4 CLKINVX4
+ CLKBUFX3 CLKINVX3 CLKBUFX2 CLKINVX2 CLKBUFX1 CLKINVX1
End
A brief description:
• AutoCTSRootPin u_clk/CRoot pin specifies the pin where the clock tree begins. Here it is specified
by u_clk, the instance name of the clock pad, and C the port of the pad.
• MaxDelay 2ns Maximum delay to tolerate from clock path beginning to end.
• MinDelay 0ns Minimum delay to tolerate from clock path beginning to end.
• MaxSkew 30ps Maximum clock skew in between different leaf nodes on the clock tree.
• NoGating rising Specifies whether clock gating is being used in the design.
• MaxDepth 7 Depth of the clock tree
• Buffer CLKBUFX20 CLKINVX20 CLKBUFX16... Names of buffers to use in the clock tree.
• End End the specific file.
You can check to see if this clock timing information was read correctly when you ran the Design Import.
Use Timing→Report→Clock Waveform... and click OK. This will show whether a clock signal is recog-
nized from the constraints file.
Now we are ready for clock-tree synthesis. Load the clock-tree specification file and synthesize the tree:
2. In the Specify Clock Tree dialog window, enter the file name of the clock tree specification file into
the provided field: converter_chip.ctstch
3. Click OK to load the file. Check the terminal window from which you started Encounter for any
error messages. You can check to see if this clock timing information was read correctly when you
ran the Design Import. Use Timing→Report→Clock Waveform... and click OK. This will show
a summary of clocks in your terminal window.Select Clock→Synthesize Clock Tree...
4. In the Synthesize Clock Tree dialog window, review the options and click OK to generate the
clock tree. Clock buffers will be inserted in between placed cells where required in order to meet
the timing specifications you provided.
8.10 Routing
8.10.1 Route Power Nets
The rows of standard cells have power and ground rails running through them, but these must be connected
to each other and to the power rings (and to power stripes, if used). In addition, the I/O pads providing
power and ground connections must be connected to the power rails:
1. To complete the power rails in rows where standard cells are used select the Special Routing tool,
Route→Special Route...
2. Click OK to complete the power routing. You might see warnings indicating that the design has no
block pins to be routed. These are expected, because we have no pre-placed blocks in this exam-
ple. You may eliminate these warnings by turning off the check-boxes beside “Block Pins” in the
SRoute dialog window before routing power.
The final stage of routing, global and detail routing, makes the connections between all of the standard
cells and I/O pad cells as indicated in the netlist.
1. Select Route→NanoRoute→Route... There are many options in the NanoRoute dialog window,
which are described fully in the on-line documentation. For this example, we will use the default
values, with one exception: Under Concurrent Routing Features we will turn on the check-box
beside Timing Driven
2. Click OK
All of the routing should be complete now.
2. In the Add Filler dialog window, click Select to view a list of possible filler cells.
3. To select all of the possible filler cells in the new Select Filler Cells dialog window, so wider cells
will be used to fill in wide gaps as appropriate, you can select each one individually and click Add
to make it available for the automated placer, or select all of them at once using this method:
a. Left-click on the name of the cell at the top of the list
b. SHIFT-left-click on the name of the cell at the bottom of the list, so all are highlighted
c. Click Add
d. Click Close to proceed
4. In the Add Filler dialog window, click OK. You might need to refresh the layout window to view
the results.
8.13 Verification
You can verify various aspects of the final design:
3. Select Design→Save→DEF...
Change the version number to use 5.5 if exporting to Cadence IC5, because that tools does not
understand newer versions of the DEF language. Keep the other default values and provide a file-
name in which to store the Design Exchange Format (DEF) file. Click OK.
4. Select Design→Save→GDS...
Keep the default values and provide a filename in which to store the Stream/GDS file. Click OK.
(In order to use this GDS file to import a design into Cadence IC tools, other work will be neces-
sary; that work will not be covered in this manual.
1. Start by creating a new work directory to hold the Cadence IC tools version of this design, and
starting a Cadence IC tools session
% mkdir Cadence ; cd Cadence
% startCds -t cmosp18
2. Ensure that the cds.lib file in your work directory includes references to the two cell libraries:
DEFINE artisan_sc_30 /CMC/kits/artisan.3.0/FAB/artisan_sc_30
DEFINE artisan_io_30 /CMC/kits/artisan.3.0/FAB/artisan_io_30
3. Create a new library, into which you will import the DEF file. To read the DEF correctly, you must
(temporarily) attach your library to cmosp18_defin_techlib like this:
Use CIW→File→New→Library...
Library name: Converter
Attach to: cmosp18_defin_techlib
... and click OK
4. Use CIW→File→Import→DEF...
Library Name: Converter
Cell Name:converter_chip
View Name: autoLayout
Use Ref. Library Names:artisan_sc_30 artisan_io_30
DEF File Name: ../converter_chip.def
... and click OK
Upon successful completion, the Library Manager should indicate that there exists a cell with the
name of your design, with a view autoLayout, but beware: the cell only exists in memory, and
has not been save to disk yet! To save the data, open the autoLayout cellview and use
Design→Save.
At this point, the design will have a property associated with it which indicates that the design was created
using one of the place-and-route tools, so when you use the IC tools to try to open the design, an old place-
and-route tool “takes over”, installing its own bindkeys and banner menus. In our design environment, we
wish to use the normal Layout tool menus and bindkeys, so we need to remove that “special” property:
5. In the layout window, select Tools→Layout to change the menus to those used in the Layout tool.
6. Select Design→Properties... and then select the Property check-box in the Edit Cellview Proper-
ties dialog window.
7. Scroll down until you see the property name viewSubType with a value of designPlanC3. Left-
click on the property name (viewSubType) to highlight it, then click the Delete button at the bottom
of the window. Click OK to close this window.
8. Save the design, using Design→Save As... and save the design with a cellview of layout.
1. Use File→Import→Verilog...