Design Planning: Learning Objectives
Design Planning: Learning Objectives
Learning Objectives
Lab Duration:
100 minutes
Introduction
The purpose of this lab is for you to become familiar with the design planning
capabilities in IC Compiler. For this lab you will use a slightly larger version of
ORCA, which is at the chip-level and includes IO pad cells as well as many more
macros. This makes the design planning steps more interesting.
Answers / Solutions
There is an ANSWERS / SOLUTIONS section at the back of this lab. You are
encouraged to refer often to this section to verify your answers, or to obtain help
with the execution of some steps.
lab2_dp/
orca_lib.mw/CEL
orca_setup The ORCA design after “data setup”, saved
in Milkyway format.
design_data/ Contains the ORCA design input data
ORCA_2.v Second-pass Verilog netlist
ORCA_2.sdc Second-pass SDC timing constraints
Instructions
1. Change to the lab2_dp directory, invoke IC Compiler and start the GUI:
UNIX% cd lab2_dp
UNIX% icc_shell -gui -shared_license
3. Take a look at the LayoutWindow. The large greenish-blue rectangles are the
macro and IO pad cells, and the small purple rectangles in the lower left
corner (zoom in if you want to see them more clearly), are the standard cells.
All of these cells are instantiated cells in the netlist. They are all stacked on
top of each other at the origin (0,0).
4. Apply timing and optimization controls which are specified
in ./scripts/opt_ctrl.tcl:
Note: Most of these settings are discussed in the Appendix of Unit 1. Some
are discussed in later Units. Do not spend time here trying to
understand them:
source scripts/opt_ctrl.tcl
1. The logical netlist from synthesis does not contain physical-only cells such as
power and ground pad cells or corner pad cells. You have to therefore create
these extra cells before being able to physically place them in the periphery
area of your chip. Create the corner and P/G cells and define all pad cell
positions using a provided script:
Hint: When typing use the [Tab] key for command/option/file completion.
Look at the log output to verify that these cells have been created and
constrained without any error or warning messages.
In a separate UNIX window look at the above script to help you answer the
following questions. Check your answers against the solution in the back.
Design Planning Lab 2-3
Lab 2
................................................................................................
................................................................................................
4. Zoom into the periphery area of the chip and notice that the spacing between
all the pads is about equal.
Question 3. Will the pads always be spaced equally? Explain.
................................................................................................
................................................................................................
................................................................................................
5. Insert the pad fillers to fill the gaps between the pads. Depending on the
technology and library being used, this may be needed for N- or P-well and/or
for power/ground pad ring continuity. To keep the number of pad filler cells
required to a minimum, specify the larger filler cells first in the list. Otherwise,
a 1,000 um space will get filled with 200 x 5 um width cells, instead of one
1,000 um width cell. Enter the command in the box below or source the
provided script scripts/insert_pad_filler.tcl:
6. Zoom into the space between two pad cells and notice the filler cells that have
been inserted.
7. Make the “logical” connection (no physical routing) between the
power/ground signals and all power/ground pins of the I/O pads, macros and
standard cells, by executing the following script:
create_pad_rings
Zoom into the area between the pads to see that metal routes have been added,
over the filler cells, to connect the existing power routes within each pad cell
to form continuous P/G pad rings.
9. Save the design as “floorplan_init”:
In this task you will identify the macros that are connected to I/O pad cells and you
will manually place them in the core area such that their connections to the I/O pads
are as short as possible.
Reduce the “brightness” to 50% or less to better see the three flylines. The
three lower left macros show connections to the top IO pads.
3. Keep the “Show flylines” panel open and, if needed, adjust the viewing area
(pan/zoom) to see the picture below. If you accidentally unselect the macros
and the flylines disappear, use the [Ctrl] key to re-select the three circled
macros shown here, and the flylines will re-appear.
4. The three macros with a direct connection to IO pad cells are called
I_CLOCK_GEN/I_PLL_PCI, I_CLOCK_GEN/I_PLL_SD and
I_CLOCK_GEN/I_CLKMUL. Hover your mouse arrow over a cell to see its
information window in the lower-left area. The two PLLs in this design should
be placed towards the top left and right corners of the chip so they are closer
to their respective clock pads.
Question 4. Which IO pad cells are these PLLs connected to?
................................................................................................
................................................................................................
5. Now you will manually move the I_PLL_PCI macro, which is connected to
the left pad, into the core area. Keep in mind that you can use the undo
button to back track your steps.
a. Select just the I_PLL_PCI macro using Selection Tool button.
6. Try to move the “fixed” I_PLL_PCI macro. You should not be able to do so.
If you are able to move it, use the undo button to put it back and “fix” it in
place. Don‟t worry if you make a mistake since you will be provided with a
script to place these macros at the expected coordinates in a later step.
Use the [ESC] key as needed to return the cursor to the “select” mode.
7. In the next steps you will repeat the steps above to move the other two macros
into the core area and near their respective IO pad cells. DO NOT spend too
much time on this step to get them perfectly placed. A script in the next step
will ensure correct placement:
Click on I_PLL_SD to select it.
Select and drag it to the top-right corner of the core area.
Align it to the top and right edges.
Rotate 180o to reduce its wirelength.
Click the “padlock” button to lock it down.
Close the flylines panel on the right by clicking on the small “x” .
You should see an “X” in each of the three macros when they are selected.
The remaining macros will be placed concurrently with standard cells during
VF placement at a later step.
8. To ensure that the three macros are placed as expected, you can source the
following script:
Normally, prior to performing virtual flat placement, any known macro placement
constraints as well as hard/soft placement blockages should be defined. We will
skip these steps initially so that you can observe the “default” VF placement
behavior. After the first placement the above constraint will be applied and VF
placement will be performed again. You will notice a marked difference.
1. Verify that the current VF placement strategy options have default settings:
report_fp_placement_strategy
................................................................................................
2. Apply a sliver size of 10 to prevent standard cells from being placed in narrow
channels (< 10 um) between macros:
set_fp_placement_strategy -sliver_size 10
create_fp_placement –timing_driven \
–no_hierarchy_gravity
You should not have any congestion issues. There are overflow GRCs but
they are scattered over the core area.
6. Close the Global Route Congestion panel on the right by clicking on the small
“x” in its upper right corner.
7. Routing of power and ground straps and macro rings for this design can be
made easier if we turn some of the macros into arrays. Source the script below
to apply macro placement constraints to accomplish the following goals:
Place macros as close to the edges of the chip as possible
Group macros together as much as possible
Turn on virtual IPO to mimic timing optimization (and prevent
unnecessary placement optimization)
Limit the legal placement orientation of some RAMs
8. Double check your settings. Suggestion: Use the up-arrow in the icc_shell
window to find and re-execute the “strategy” command:
report_fp_placement_strategy
report_fp_macro_options
9. Source the following script to set a hard keepout margin of 10 microns around
all macros. This will make it easier to create P/G rings around the macros and
avoid congestion as well as signal routing DRCs around the macros:
10. Take one last look at the macro placement before running the VF placer again:
create_fp_placement –timing_driven \
–no_hierarchy_gravity
11. Analyze the global route congestion map again. You need to click Reload
OK to update the map. An “Error” box appears in the GUI - click OK (similar
to step5).
There should not be any congestion issues.
Close the analysis panel on the right by clicking on the small “x”.
set_dont_touch_placement [all_macro_cells]
In the task following this one you will use “Power Network Synthesis” (PNS) to
automate the creation of power/ground core and individual macro rings, as well as
vertical and horizontal straps. If you want to create rings around groups of macros,
that is done prior to PNS, which is what this task will accomplish.
1. We have created a script to create P/G rings around six groups of macros.
Take a look at the file located at ./scripts/macro_pg_rings.tcl. The P/G rings
are created by:
- Defining a rough “region” that encompasses a group of macros
- Defining the block ring layers, widths and offsets
- Creating (committing) the metal routes
2. Execute the script:
source ./scripts/macro_pg_rings.tcl
Notice that the “PLL” macro in the upper-left corner is the only macro that
does not have a P/G ring around it – this will be done by PNS.
Notice also that, in addition to the rings around the macro groups, there are
vertical/horizontal straps in between the macros. This is nice feature of the
create_fp_group_block_ring command. It can be disabled with the
–skip_strap option, if preferred.
The power “grid” needs to be completed. You could create P/G straps that feed the
center of the core, a core ring, as well as rings around individual macros “manually”
(similar to the way the macro group rings were created in the previous task), but to
do so would require you to guess the appropriate number and width of the straps, as
well as the width of the core ring to achieve acceptably low IR drop. Instead, you
will use IC Compiler‟s Power Network Synthesis (PNS) capability to automatically
determine the number and width of straps, as well as the core ring width, based on a
target IR drop. You can experiment with different goals, and when acceptable
results are achieved you then “commit” or physically implement the power grid.
If you are running short on time, you can source the scripts/pns.tcl to
perform steps 1-5 below. Skip steps 6-7 if you use this script.
First, you will use the PreroutePower Network Constraints menu to apply a
number of constraints for the core rings, the macro rings as well as the vertical and
horizontal straps:
................................................................................................
................................................................................................
Question 7. How many horizontal and vertical VDD straps, and what
widths, were used to achieve the above IR drops? (look at the
log again)
................................................................................................
6. Play with the “Target IR Drop” field to see its affect on the number and width
of the straps: Set it to “Lowest”, or set the Specified field to 100 mV, then
Apply again. Observe how the network changes, and along with it the IR drop.
7. When done experimenting, set the Target IR Drop back to 10%, then Apply.
8. Build the suggested power plan clicking on the Commit button, or by typing:
commit_fp_rail
preroute_instances
preroute_standard_cells –fill_empty_rows \
-remove_floating_pieces
11. Zoom in and notice the macro pin connections and the blue P/G rails on
metal1 (called METAL).
12. Now analyze the completed power plan using PrerouteAnalyze Power
Network…
Enter the same values for Power Ground nets (VDD VSS), Power budget
(350 mW), Supply voltage (1.32 V), and Specified pad masters (pv0i pvdi)
that were used previously for Power Network Synthesis, then press OK.
You will see another heat map.
Question 8. What are the final reported maximum VDD/VSS IR drops?
(from the log)
................................................................................................
................................................................................................
Question 9. Can you explain why the final IR drops are smaller?
................................................................................................
................................................................................................
13. Close the PNA Voltage Drop on the right by clicking on its small “x”.
14. Save the cell:
Now that the power plan is done, you have to perform a few more steps to complete
the placement and to verify max-delay (setup) timing.
1. If you are not able to see the standard cells in the LayoutWindow, go to the
“Visibility” panel in the left margin of the LayoutWindow, expand the “Cell”
listing by selecting the “+” sign, and make sure that “Standard” is checked.
2. PNS created many straps on METAL4 and METAL5, which were placed over
the standard cells. It can be advantageous to prevent standard cell placement
under the straps – this reduces the likelihood of congestion along the straps,
and reduces crosstalk effects on the power nets. Apply a “complete” power
net (pnet) blockage on the straps, then run the virtual flat placement again to
take pnet settings into account:
Verify that there are no longer any standard cells under the straps.
3. Since we are about to check timing, perform actual global routing by running
the following command:
route_zrt_global
4. Bring up the global route congestion map (no need to “Reload). There should
not be any congestion issues. Close the panel (click on small “x”).
v report_timing
................................................................................................
6. To fix any timing violations (and design rule violations), if there were any,
you would invoke the following command and repeat global route. Feel free
to do so, if you have the time, otherwise skip to the “Save the cell” step:
optimize_fp_timing –fix_design_rule
Repeat global routing, congestion analysis and timing analysis one last time.
The design should not have any congestion issues or timing violations.
7. Save the cell as floorplan_complete.
1. Remove all the placed standard cells then write out the floorplan file in DEF
format. The DEF floorplan file will be used by Design Compiler
Topographical to re-synthesize the design using the floorplan you just
designed, and will again be used by IC Compiler to re-create the floorplan
when reading in the re-synthesized netlist (next Task):
2. Verify that the DEF file has been created in the design_data directory.
3. Close the design library without saving the design in memory:
File Close Library Discard All
We will now pretend that this design was re-synthesized from RTL code using
Design Compiler Topographical mode, along with the floorplan description
captured in the DEF file generated in the previous task. You have been given a 2 nd
pass netlist, ORCA_2.v, along with an updated constraints file, ORCA_2.sdc.
1. Perform data setup using the new ORCA netlist and constraints:
source scripts/2nd_pass_setup.tcl
2. Read the DEF file that was written out in the previous task:
read_def design_data/ORCA.def
Note: You should now see the same floorplan that you designed in
the previous tasks.
3. Re-apply the pnet options that you applied after Power Network Synthesis in
Task 6, step 1. These settings are not captured in the DEF file:
Answers / Solutions
The PLLs connect to the 2nd pad cell from the top, on the
left side (pclk_iopad), and the right most on the top
(sdr_clk_iopad).
Question 5. What is the current default sliver size distance?
0.00
Question 6. What are the estimated maximum IR drops for VDD and
VSS?
Question 7. How many horizontal and vertical VDD straps, and what
widths, were used to achieve the above IR drops?
Question 9. Can you explain why the final IR drops are smaller?
You can, but without the global route, timing analysis will
be based on “virtual routes” – orthogonal route estimates
without specific layer or congestion information. Virtual
routes are less accurate and correlate less well with the
detailed routes to be performed later.