Você está na página 1de 105

Fundamentals of Logic Synthesis

with Design Compiler


Imran Mirza

Course Agenda:

ASIC Design Flow


Fundamental synthesis concepts.
DesignWare Libraries.
Levels of Optimization.
Design Compiler tool Interface.
Synthesis Setup
Library Overview
Reading Design
Defining Constraints.
Environmental Constraints.
Uniquify.
Compile strategies
Saving Results & Report generation.
STA Basics & Delay Calculation.
Timing Exceptions.
Multiple/Virtual clocks.
Help.
Verdana regular 7pt.
Legal text goes here

09.14.05

Verdana Bold 8 write title of presentation here

ASIC Design flow


Application Specific Integrated Circuit (ASIC) is silicon design
targeted for a specific application.

FPGA (Field programmable Gate Arrays that are pre-manufactured

and design independent. These contain number of design blocks that


are programmable vis switch matrix.

High level flow for Synthesis based ASIC design flow:

Product Idea.
Functional specification.
RTL/HDL coding .
Functional simulation & Analysis

Logic Synthesis.

Static Timing Analysis (STA).


Physical Synthesis.
Verification tasks (STA,GLS,FV etc.)
Place & Route.
Extraction
Post Route STA.
Post Route Optimization
Physical Verification (LVS/DRC)
Tape out for chip manufacturing.
Verdana regular 7pt.
Legal text goes here

09.14.05

Verdana Bold 8 write title of presentation here

Some Key Terminologies & Definitions


Logic Synthesis is a process by which a circuit represented in an

abstract form of HDL/RTL is implemented in terms of logic gates.


Alternatively, it can simply be defined as a process of transforming
RTL description of a design into standard cell gates of technology
library.

Standard Cells represent logic cells that belong to a technology

library that is characterized for a particular process. e.g. AND, OR,


INVERTER, Flip Flops etc.

Netlist is post synthesis abstraction of a design.


Netlist description represents a design in terms of an

interconnection of Std cells that are connected via wires also


referred to as nets in Synthesis world.

Netlist representation of a design is used for down stream flows

during ASIC flow. e.g. for gate level simulation and place & route
etc.
Verdana regular 7pt.
Legal text goes here

09.14.05

Verdana Bold 8 write title of presentation here

Major Synthesis Steps


Synthesis process is comprised of 3 main steps of Translation,
Optimization & Mapping.

Translation is a process of converting RTL description into intermediate


format represented in form of Boolean equations. Boolean form is than
implemented using intermediate generic cells (GTECH). GTECH cells
simply describe functionality without any timing info and other
characteristics.
Optimization is a process of finding optimal solution to intermediate logic
structures/equations based upon a criteria (constraints) specified before
synthesis.
Mapping is process of translating optimized generic gates to cells in target
technology library (Std. Cell Library).
HDL
If (sel == 1) {

Translation
GTECH

Out <= z }

Verdana regular 7pt.


Legal text goes here

09.14.05

Verdana Bold 8 write title of presentation here

Optimize +
Mapping

Target_library
(p1265)

Synthesis Steps cntd.


Typically, after initial mapping during synthesis process; synthesis

tools continue to perform iterative Optimizations & Mapping steps in


an effort to achieve the best solution.
Initial optimization phase involves technology independent algorithms to
select best structure for logic functions.
During mapping circuit logic is mapped to gates of technology library to
transform the circuit to network of gates.
Followed by technology dependant optimization algorithms to perform
further logic minimization.

Verdana regular 7pt.


Legal text goes here

09.14.05

Verdana Bold 8 write title of presentation here

Design Ware (DW) Libraries


DW library is a selection of technology independent and pre-verified
synthesizable IP blocks supplied by synopsys.

DW libraries are used during High Level Optimization (HLO) of


synthesis process.

DW IP blocks range from simple logic functions of AND,NAND,NOR to


arithmetic functions (+,-,<= i.e. adders, comparators, ALU etc.). As
well as complex IPs like DSP cores (FIR, IIR filters etc.).

Structure of DW IP Library consists of two parts:


Design Library

Ckt. Description of various IP


architecture.
(parameterizable)
Verdana regular 7pt.
Legal text goes here

09.14.05

Verdana Bold 8 write title of presentation here

Synthetic Library

Binary file that associates ckt. in design


Library with synthesis tool.

HDL

Operators in HDL (+, - etc.)

Synthetic library

Synthetic Operators
ADD_UNS_OP
High Level Optimization tasks like
resource sharing etc. is related
to this phase

Have Bindings to Synthetic


Modules :

ADD_SUB

ADD

ALU

Several Implementations
Of Modules Exist in
Design Library

Ripple

CLA

Verdana regular 7pt.


Legal text goes here

09.14.05

Verdana Bold 8 write title of presentation here

Custom IP

Implementation selection
Of synthetic modules is done from
various implementation
available in Design Library.
During Optimization process
Constraint-driven Implementation
Selection takes place to meet
timing/area goals. DW
implementation is eventually
mapped to target-library and
further optimized.

3 Levels of Optimization
Logic Optimization occurs at 3 levels:
Architectural
Logic
Gate Level.

After initial high level architectural optimization, Design Compiler


mostly iterates between Logic & Gate level optimization.

DC moves the logic functions back and forth between logic & gate

level representations to fully take advantage of various optimization


techniques.

Optimization process continues until no further improvements in the


logic structure are possible.

i.e. No further improvements to Optimization Cost function are


possible.

Note: These optimization steps can be guided by user.


Verdana regular 7pt.
Legal text goes here

09.14.05

Verdana Bold 8 write title of presentation here

Architectural Optimization: This type of Optimization

occurs
on HDL description and is also referred to as high level optimization
(HLO). It includes several sub phases:

DW Implementation Selection.
Arithmetic or Data path Optimization.
Resource sharing.
Reordering operators.

Design is represented in terms of GTECH cells after HLO.


Except DW Implementation most of the above mentioned tasks

occur only in the beginning i.e. during optimization of unmapped


design. Therefore it is technology independent.

Implementation selection is the process of mapping HDL logic to a


library of DesignWare (DW) components (also reffered to as
GTECH).

Initial mapping to DW is constraint independent. But later in the process


synthesis tools evaluate speed/area tradeoffs to select best
implementation e.g for adders selecting carry look-ahead (for speed) or
even better Brent-Kung (fastest) vs ripple carry (smallest) etc.
Verdana regular 7pt.
Legal text goes here

10

09.14.05

Verdana Bold 8 write title of presentation here

Implementation Selection process:


(HDL)

Z <= X+Y

Operator Inference

+
Timing driven

Synthetic Operator

Area driven

r
CLA

Ripple Carry

Verdana regular 7pt.


Legal text goes here

11

09.14.05

Verdana Bold 8 write title of presentation here

Constraint driven Implementation


Selection

Resource Sharing
Resource Sharing is HLO technique. It can occur during
implementation of +,-,*,>,< operators.
Resource sharing can happen if resources are in the same block
i.e. always statement of Verilog (or process block in VHDL).
For example if two adders have same destination path to a
MUXED output than resource sharing can take place if constraints
are meet:
If (ctl) {
z = a + b;
else
z = c + d;

Resource sharing reduces the amount of hardware needed to


implement HDL operation resulting in smaller area.

Verdana regular 7pt.


Legal text goes here

12

09.14.05

Verdana Bold 8 write title of presentation here

Arithmetic Optimization:
Arithmetic Optimization uses simple rules of algebra to improve
designs performance/area.

For example arithmetic expression a+b+c+d can be implemented

using 3 level cascaded addition operation or faster logic with 2-levels


cascaded operation via Rearranging Operators

Identifying arithmetic expressions & optimization is sometimes


called data-path synthesis.

3 level cascaded addition


a+b+c+d

+
+
+

+
+
+
Verdana regular 7pt.
Legal text goes here

13

09.14.05

Verdana Bold 8 write title of presentation here

After arithmetic
optimization (rearranging
opertors) 2 level
cascaded addition
(a+b)+(c+d)

Logic Optimization: After high level architectural optimization,


design is represented in terms of GTECH components.

Logic optimization works on GTECH representation (representation after


elaborate).
During logic synthesis, tools try to improve logic structure by reducing
SOP form via minimization of product terms. This is achieved using 2
techniques:
Structuring.
Flattening.

Structuring: It is the logic optimization technique by which tool

adds intermediate variables and logic structures to a design,


resulting in reduced logic area. Typically tool tries to search for subfunctions that can be factored out.
It is ON by default in timing driven mode. i.e. timing driven structuring
improves structures on critical paths without touching non-timing critical
logic paths.
Structuring works best on random logic strcutures such control logic. It is
not very effective on adders, ALUs etc.
Verdana regular 7pt.
Legal text goes here

14

09.14.05

Verdana Bold 8 write title of presentation here

Example of Structuring:
Before structuring:
func_1 = ab + ac
func_2 = b + c+ d
After structuring:
t0 = b + c
func_1 = t0.a
func_2 = t0 + d

DC command to play with structuring options is set_structure.

Verdana regular 7pt.


Legal text goes here

15

09.14.05

Verdana Bold 8 write title of presentation here

Before
structuring
A
B
func_1

func_2
D

After
Structuring
A
B

func_1

Verdana regular 7pt.


Legal text goes here

16

09.14.05

Verdana Bold 8 write title of presentation here

func_2

Flattening: Flattening is a logic optimization technique by which all


intermediate variables are removed; consequently related logic
structures.

Boolean distributive laws are used to remove all parenthesis. Removing


poor intermediate variables helps synthesis tools to achieve more efficient
functions.
Flattening is off by default because default timing-driven structuring can
improve critical paths & flattening can potentially increase area.
It is independent of constraint unlike structuring.
Result of flattening is a two level Sum of Product form
Result of flattening can be input to structuring phase to find optimal
solution to logic equations.
Example:
Before flattening
out = t1 t2
t1 = a + b(c + f)
t2 = d + e
After flattening
out = ad + bcd + bdf + ae bce + bef
Verdana regular 7pt.
Legal text goes here

17

09.14.05

Verdana Bold 8 write title of presentation here

Gate Level: Gate Level optimization works on a generic netlist

created by logic synthesis to produce technology specific netlist (i.e


netlist mapped to gates in target technology library).
Based upon constraints; this process implements the fastest and smallest
circuit implementation in terms of logic gates from technology library.
Several things happen during gate level optimization:
Mapping:
Mapping to gates to meet constraints, can be controlled by compile
command.
Delay Optimization:
Goal is to fix timing violations introduced during mapping phase.
DRC violations are not fixed.
DRC optimization:
DRC fixing is done. At first DRC fixing is attempted without affecting
timing/area goals. But if necessary DRC fixing takes place at the
expense of timing/area.
Area Optimization:
Last optimization function to fix. DC does not allow area-recovery at
the expense of timing & area constraints.
Verdana regular 7pt.
Legal text goes here

18

09.14.05

Verdana Bold 8 write title of presentation here

Snippet from DC log file:


Beginning Pass 1 Mapping
-----------------------Processing 'mux2_32_1
Processing 'edff1_32_0
Beginning Implementation Selection
---------------------------------Processing 'eu_spedp_DW01_cmp2_5_0
Beginning Mapping Optimizations (Ultra High effort)
Structuring 'eu_staging'
Mapping 'eu_staging'
Beginning Delay Optimization Phase
---------------------------------Beginning Design Rule Fixing (max_transition)
----------------------------

Verdana regular 7pt.


Legal text goes here

19

09.14.05

Verdana Bold 8 write title of presentation here

Figure showing Internal operations during


Optimization
Structuring

Flattening

Logic Level

Gate Level
Mapping

Verdana regular 7pt.


Legal text goes here

20

09.14.05

Verdana Bold 8 write title of presentation here

Design Compiler (DC) tool Interface.


Design Compiler (DC) is industry standard Logic Synthesis tool from
Synopsys.

Tool interface and commands used for this training will be DC


centric.

Constraints

WLM

RTL/Netlist

Design Compiler

Synthesized
database i.e.
Netlist/ddc
Verdana regular 7pt.
Legal text goes here

21

09.14.05

Technology
Library

Verdana Bold 8 write title of presentation here

Synthesis
Reports

Macro
Library

Main steps during typical synthesis process.


Synthesis setup

No

Read Design & Libs

Read Constraints
No

Synthesize
Generate Reports & Save
Outputs

Analyze

No

Good

Verdana regular 7pt.


Legal text goes here

22

09.14.05

No

Verdana Bold 8 write title of presentation here

Yes

Done

Synthesis Setup
Some basic variables to be included in synthesis setup are as
follows:
target_library: Specifies the library used by synthesis during

optimization process to map logic to standard cell gates from specific


technology library. e.g. p1265_lp_rsss_1.15v_110c.db.
Traditionally this is a single library.
New features in DC allows for multiple libraries (MVDD, MVT etc)
link_library: This variable contains the names of all libraries that are
used to link the design. i.e. standard cell and macro libraries that
contain leaf cell definitions of cells instantiated in the design.
In DC, term link is used to imply resolving references of all
instances in the design. Or simply put find all references in the
design.
Linking also Means Correct Design Composition w.r.t cell names,
ports/pins directions, vector range and connectivity etc.
In a hierarchical design the lower level designs themselves become
part of link variable collection.

Verdana regular 7pt.


Legal text goes here

23

09.14.05

Verdana Bold 8 write title of presentation here

Synthesis Setup
search_path: Is used to include paths to directories containing

target_library, link_libraries and any reference designs. Tool searches for


libraries & ref designs in all directories specified with search_path
variable.
synthetic_library: This is an optional variable and points to DesignWare
libs. Basic DW libs are loaded by default. Use this to add advanced
libraries.

Verdana regular 7pt.


Legal text goes here

24

09.14.05

Verdana Bold 8 write title of presentation here

Setup Examples:
Example:
set
set
set
set

link_library {* p1265_lp_rsss_1.15v_110c.db}
target_library {p1265_lp_rsss_1.15v_110c.db}
synthetic_library {dw_foundation.sldb standard.sldb}
search_path [concat /nfs/adg_pde_8/Eval65/library/stdcell_lp_frams/LM \
$search_path]

OR
set search_path /nfs/adg_pde_8/Eval65/library/stdcell_lp_frams/LM \
$search_path
Example:
module test_fub (a, z);
inputs a;
outputs z;
sub_fub_1 U1 (.a(a), .b(net_1));
sub_fub_2 U2 (.m(net_1), .o(z));
endmodule
Verdana regular 7pt.
Legal text goes here

25

09.14.05

Verdana Bold 8 write title of presentation here

Example cntd.
Dir1/test

Libs/
p1265_lp_rsss_1.15v
_110c.db

Src/
test_fub.v
sub_fub_1.v

Tmp/
sub_fub_2.ddc

set link_library {* p1265_lp_rsss_1.15v_110c.db}


set target_library {p1265_lp_rsss_1.15v_110c.db}
set synthetic_library {dw_foundation.sldb standard.sldb}
set search_path [concat ./src $search_path]
read_verilog sub_fub_1.v
read_verilog test_fub.v
Current_design test_fub
Link
Error: Unable to resolve reference sub_fub_2.

To fix this Error edit search_path as follows:


set search_path [concat ./tmp $search_path]
OR
lappend
search_path ./tmp
Verdana
regular 7pt.
Legal text goes here

26

09.14.05

Verdana Bold 8 write title of presentation here

Technology Library

Lets examine technology library a little (p1265_lp_rsss_1.15v_110c.lib):

library ("p1265_lp_rsss_1.15v_110c") {
/* **************************************************************************
* Intel Confidential
****************************************************************************
revision : "lp_lib";
date : "Mon Aug 22 14:22:11 MST 2005" ;
comment : "PROCESS: p1265, MODEL: lp, VOLTAGE: 1.15v, TEMP: 110c, SKEW: rsss; " ;
/* ************************************

** UPF used : p1265_1x0r1v1.upf

** Shrink applied : 1

************************************* */
technology (cmos) ;
delay_model : table_lookup ;

time_unit : "1ps";
pulling_resistance_unit : "1kohm" ;
capacitive_load_unit(1,pf) ;
voltage_unit : "1V" ;
current_unit : "1uA" ;
leakage_power_unit : "1pW" ;

Verdana regular 7pt.


Legal text goes here

27

09.14.05

Verdana Bold 8 write title of presentation here

Library header cntd:


operating_conditions("rsss_1.15v_110c") {
process : 1.0;
temperature : 110.00;
voltage : 1.15;

tree_type : "balanced_tree";
}
nom_process : 1.0 ;
nom_temperature : 110.00;
nom_voltage

: 1.15;

default_max_transition : 1100 ;
default_fanout_load : 1.0 ;
default_output_pin_cap : 0.0 ;
default_inout_pin_cap : 0.010 ;
default_input_pin_cap : 0.010 ;
default_cell_leakage_power : 0.000001;
default_operating_conditions : rsss_1.15v_110c;

default_wire_load_mode : enclosed;
default_wire_load_capacitance : 0.0000873;
default_wire_load_resistance : 0.100;
default_wire_load_area : 15.5;

Verdana regular 7pt.


Legal text goes here

28

09.14.05

Verdana Bold 8 write title of presentation here

Library Cell Description:


/* Begin cell: lp0in00x6 */
lu_table_template (delay_outputslew_template_5X5_lp0in00x6) {
variable_1 : total_output_net_capacitance ;
variable_2 : input_net_transition ;
index_1 ("1.0, 1.1, 1.2, 1.3, 1.4");
index_2 ("2.0, 2.1, 2.2, 2.3, 2.4");
}
power_lut_template (internalPowerTable_5X5_lp0in00x6) {
variable_1 : total_output_net_capacitance ;
variable_2 : input_transition_time ;
index_1 ("1.0, 2.0, 3.0, 4.0, 5.0");
index_2 ("1.0, 2.0, 3.0, 4.0, 5.0");
}
cell ("lp0in00x6") {
nandgates : 3 ;
area : 3.696 ;
cell_footprint : lp0in00 ;
cell_leakage_power : 49512 ;
pin ("o") {
direction : output ;
Verdana regular 7pt.
Legal text goes here

29

09.14.05

Verdana Bold 8 write title of presentation here

Lib cell description cntd:


function : "!(a)" ;
max_capacitance : 1.17877 ;
timing() {
cell_fall ("delay_outputslew_template_5X5_lp0in00x6") {
/* Simulation data for spec: `tp_a_xy_o_10_max' */
index_1 ("0.0032143, 0.0915343, 0.2415343, 0.6015343, 1.6575343") ;
index_2 ("25.0000000, 699.9990000, 850.0000000, 1000.0000000, 1100.0010000") ;
values (\
"18.0516507, 80.9752712, 91.3866032, 100.8858463, 107.5135250",\
"62.9328920, 232.2513450, 254.3557764, 274.5694844, 288.2005986",\
"128.4946355, 377.2112071, 411.7081601, 443.4568683, 464.3401994",\
"284.0081877, 616.2618329, 669.1884016, 718.0893649, 749.9088390",\
"740.2694301, 1139.8097050, 1214.0552580, 1287.8451130, 1336.2840450"\
);
}
cell_rise ("delay_outputslew_template_5X5_lp0in00x6") {
/* Simulation data for spec: `tp_a_xy_o_01_max' */
index_1 ("0.0032143, 0.0915343, 0.2415343, 0.6015343, 1.6575343") ;
index_2 ("24.9990000, 700.0010000, 850.0000000, 1000.0000000, 1100.0010000") ;
values (\
"15.2790723, 0.0000000, 0.0000000, 0.0000000, 0.0000000",\
"61.2986975, 145.3533894, 149.7023032, 153.4330957, 153.3298057",\
"131.3437529, 290.6696952, 307.1302922, 321.4521477, 327.8411756",\
"299.1350892, 533.7899475, 568.5006742, 599.4795268, 616.5449063",\
"791.1555851, 1082.2604470, 1135.6769800, 1186.8994620, 1217.9290430"\
);
Verdana regular 7pt.
}
Legal text goes here
30

09.14.05

Verdana Bold 8 write title of presentation here

fall_transition ("delay_outputslew_template_5X5_lp0in00x6") {

/* Simulation data for spec: `tp_a_xy_o_10_max' */


index_1 ("0.0032143, 0.0915343, 0.2415343, 0.6015343, 1.6575343") ;
index_2 ("25.0000000, 699.9990000, 850.0000000, 1000.0000000, 1100.0010000") ;
values (\
"10.1024224, 96.0716241, 113.2238550, 129.4873606, 141.0555352",\
"56.7503343, 196.0574868, 220.1910273, 244.6424514, 260.7628678",\
"136.9945580, 295.4627289, 326.1557160, 355.8550934, 376.5465104",\
"334.6133697, 484.4706030, 520.9409643, 559.2599686, 582.9060445",\
"920.5215483, 1025.3939690, 1060.9164640, 1088.7083360, 1114.7036800"\

);
}
rise_transition ("delay_outputslew_template_5X5_lp0in00x6") {
/* Simulation data for spec: `tp_a_xy_o_01_max' */
index_1 ("0.0032143, 0.0915343, 0.2415343, 0.6015343, 1.6575343") ;
index_2 ("24.9990000, 700.0010000, 850.0000000, 1000.0000000, 1100.0010000") ;
values (\
"12.0370839, 100.1307945, 116.6247064, 132.6044484, 143.3954581",\
"76.5285867, 214.6937751, 240.8224270, 263.3653485, 278.8470840",\
"192.3296389, 341.3812802, 372.7134246, 403.8706037, 422.3452089",\
"468.3673746, 591.1956305, 628.3677618, 665.3410636, 689.3084127",\

"1284.3755410, 1348.5314550, 1386.3845050, 1424.2627460, 1438.6392750"\


);
}

Verdana regular 7pt.


Legal text goes here

31

09.14.05

Verdana Bold 8 write title of presentation here

timing_sense : negative_unate ;
related_pin : "a" ;
}

}
pin ("a") {
capacitance : 0.00965679129 ;
direction : input ;

}
}
/* End cell: lp0in00x6 */

Verdana regular 7pt.


Legal text goes here

32

09.14.05

Verdana Bold 8 write title of presentation here

Read Design
Commands to read design:
read_file -format verilog rtl_file_name
read_file -format vhdl rtl_file_name
analyze/elaborate i.e:
Preferred Method
define_design_lib work -path ./worklib
for RTL designs
analyze -f verilog ${DESIGN}.v
elaborate ${DESIGN}
analyze reads RTL description and if there are no syntax issues; saves
the intermediate binary format to work library.
elaborate is used to to actually build the design, so its ready for
synthesis with compile command.

If input format is RTL, analyze/elaborate commands are


recommended.

If input format is gate level netlist use read_file commands.


Verdana regular 7pt.
Legal text goes here

33

09.14.05

Verdana Bold 8 write title of presentation here

DC script building with commands learned


Lets start building a script using commands as we learn them:
Setup file .synopsys_dc.setup will look like :
set sh_enable_line_editing true
set text_editor_command {xterm -fn 8x13 -e vi %s &}
set link_library {* p1265_lp_rsss_1.15v_110c.db}
set target_library {p1265_lp_rsss_1.15v_110c.db}
set synthetic_library {dw_foundation.sldb standard.sldb}
set search_path "./rtl
/nfs/ch/disks/ch_com_disk026/design_kit/p1265_1/stdcell_lp/synthesis/1.3/synopsy
s/2000.11 $search_path

Lets start synthesis script training.tcl:


define_design_lib work -path ./worklib
source -echo read_file
analyze -f verilog ${rtl_list}
elaborate exunit

Verdana regular 7pt.


Legal text goes here

34

09.14.05

Verdana Bold 8 write title of presentation here

Constraining the Design


Design constraints are circuit goals to ensure that final chip works

after manufacturing. They are used to specify performance (timing),


area & power goals of your design.

Optimization process uses design constraints to guide the tool to


achieve required goals. Constraints are classified under following
categories:

Optimization Constraints.
Design Rule Constraints.
Environmental Constraints (operating conditions, K-factor & WLM etc.).

Optimization constraints are timing, area constraints.


Design Rule Constraints are electrical requirements that must be
meet to ensure chip functionality e.g. max_capacitance,
max_fanout, max_transition etc.
Verdana regular 7pt.
Legal text goes here

35

09.14.05

Verdana Bold 8 write title of presentation here

Optimization Constraints
Timing Constraints: Are used to specify designs timing specifications
to guide synthesis process.

By default timing constraints have higher priority over area.


Order of cost priorities can be changed (to be discussed later)
Clocks are used to specify operating frequency of the design.
Clock definition is needed to constrain internal paths i.e. flop2flop paths.
create_clock -name clk -period 15000 [get_ports clk]
In pre-layout synthesis clocks created with create_clock are assumed
ideal by default.
Ideal nets are nets with zero delay (i.e. 0 clock network latency &
transitions).
DC synthesis does not insert any buffers/inverter on clock nets i.e. timing
check & optimization is off.
Ideal nets are also free of DRC constraints.
Verdana regular 7pt.
Legal text goes here

36

09.14.05

Verdana Bold 8 write title of presentation here

Clock uncertainty
Clock uncertainty is used to model difference in arrival time of clock
edges. It includes following items:
Clock Jitter:
Jitter is the unpredictability of the PLL/Oscillator output in terms of exact time
when a clock edge is going to arrive.
A perfect oscillator would have rising edges occurring at precise moments in time
that would never vary. This, of course, is impossible in real electronics, which have
sources of noise and other imperfections.

Expected Clock Skew.


Process Guardband.

In DC uncertainty is specified using following commands:


set_clock_uncertainty 500 [get_clocks clk]
set_clock_uncertainty 200 -from [get_clocks clkB] -to [get_clocks
clkA]

Verdana regular 7pt.


Legal text goes here

37

09.14.05

Verdana Bold 8 write title of presentation here

Clock Latency
Clock latencies are used to model delay in clock network.
Clock source latency models clock insertion delay to the
clock definition point. i.e. time taken by clock signal to
propagate from clock generation point to clock definition
point.
Clock network latency is used to model delay due to clock
network from clock definition point to register clock pin.
set_clock_latency 1000 [get_clocks clk]
NOTE: Use -source option to model clock source latency.
Clock Source Latency can be used to model reality of top
level tree delay in a hierarchical chip (if there is huge
difference in clock arrival time between APR blocks).

Verdana regular 7pt.


Legal text goes here

38

09.14.05

Verdana Bold 8 write title of presentation here

Figure 1: Clock constraining internal timing


Flop 2 Flop path w.r.t 66 MHz
clock Frequency

Combinational
logic

Clock Definition
point
CLK

CLK

PLL

Clock origin
point

Ideal Clock
Clock Launch
Edge

Clock Capture
Edge
15 ns clock period

Non Ideal Clock

Verdana regular 7pt.


Legal text goes here

39

09.14.05

Verdana Bold 8 write title of presentation here

skew + jitter
etc.

Constraining Interface Paths


Constraining the Input Path.
Your inputs come from the outside world or blocks designed by other
designers. When do they come during the clock cycle? Do they come at
4ns after the rise of clock ?
The synthesis tool needs to know this to figure out how much time it
really has left to meet the timing on path.
set_input_delay -max 4000 -clock clk [get_ports A]

This tells the tools that external world uses 4000ps (4ns) of time based on
the clock period of clk. If clk was 66MHZ (15ns) the tool has 15-4 = 11ns
for all it internal logic.
For setup analysis, input_delay is the worst case delay value (-max).
For hold analysis, input_delay will be the best case delay value (-min). i.e.
shortest delay value.

Verdana regular 7pt.


Legal text goes here

40

09.14.05

Verdana Bold 8 write title of presentation here

set_driving_cell
This command impacts input ports transition delay and is a DRC
constraint in reality.

It helps with more accurate timing calculation on input ports by


annotating non-zero transition delay on input ports.

There can be more optimistic input path timing without modeling

input transition time. Without set_driving_cell at input ports, default


transition delay is zero.
set_driving_cell -library p1265_lp_rsss_1.15v_110c -lib_cell lp0bf00x3 pin o
[remove_from_collection [all_inputs] [all_clocks]]

To be pessimistic use a weak cell driving the inputs ports.


set_input_transition is another way of doing the same thing.

Verdana regular 7pt.


Legal text goes here

41

09.14.05

Verdana Bold 8 write title of presentation here

set_output_delay

It constrains output interface. i.e


set_output_delay 7000 -max -clock clk [get_ports B]

This means that out of 15 ns of clock cycle time available; 7 ns is taken by


external logic. i.e. 15-7=8ns is the remaining time left for logic cone ending in
port B.
Note: set_input_delays are applied w.r.t launching clock edge and
set_output_delay is done w.r.t latching clock edge.
Input/Output Delays
set_input_delay

set_output_delay

4 ns

CK 1

CK 1
create_clock

Verdana regular 7pt.


Legal text goes here

42

09.14.05

Verdana Bold 8 write title of presentation here

7 ns

CK 2

Set_load

On output ports need to specify external capacitive load to accurately


calculate timing and accordingly size the driver of output ports during timing
optimization. Command to use is set_load e.g.
set_load load_value [get_ports]

or
set_load [expr [load_of p1265_lp_rsss_1.15v_110c/cell/pin] * 2] [get_ports A]

Usually it is specified on output ports but can also be specified on input ports.
But not recommended for input ports as it can make input loading constraint
unnecessarily pessimistic since usually set_max_capacitance is already
used for input ports.
For budgeting of set_load on output ports, its a good idea to have design
knowledge to gauge how many blocks does the output port talk to.
set_load sometimes is also referred to as environmental constraint.

Verdana regular 7pt.


Legal text goes here

43

09.14.05

Verdana Bold 8 write title of presentation here

Training.tcl
Now state of training.tcl script is:
define_design_lib work -path ./worklib

source -echo read_file


analyze -f verilog ${rtl_list}
elaborate exunit
current_design exunit
link
create_clock -name clk -period 2250 [get_ports clk]
set_clock_uncertainty -setup 450 [all_clocks]
set_input_delay 750 -max -clock clk [remove_from_collection [all_inputs] [all_clocks]]
set_output_delay 750 -max -clock clk [all_outputs]

set_load [expr [load_of p1265_lp_rsss_1.15v_110c/lp0an02x2/a] * 2] [all_outputs]


Verdana regular 7pt.
Legal text goes here

44

09.14.05

Verdana Bold 8 write title of presentation here

Area Constraint
To enable area optimization in DC you need to use:

set_max_area 200

By default DC performs very little area optimization as timing has


higher priority over area cost unless higher priority is placed on
Area.

By default area optimization happens only on paths that meet


timing.

Typically value for area constarint used is set_max_area 0. Tool


tries to achieve the smallest area possible.

Area optimization can be turned off by using a switch to compile


command.

Area units are dependant upon library. i.e. area is usually in terms of
sq. microns. It can be normalized in terms of NAND gates.
Verdana regular 7pt.
Legal text goes here

45

09.14.05

Verdana Bold 8 write title of presentation here

Design Rule Constraints


Design Rule Constraints (DRC) must be meet to ensure that design
functions correctly.

DRC have higher priority than optimization constraints.


DRC constraints are typically defined by default in technology library
for the tool to use.

User can also specify explicit DRC constraints.


Synthesis tool will try to meet more restrictive constraints.
DC tries to address DRC violation using repeater insertion & cell
sizing techniques.

Types of DRC:
Maximum transition time
Maximum fanout
Minimum and maximum capacitance
Verdana regular 7pt.
Legal text goes here

46

09.14.05

Verdana Bold 8 write title of presentation here

set_max_transition
max_transition constraint on net is defined as the longest time
required by the driving pin of the net to change its logic value.

By default DC computes transition time using timing data in target

technology library depending upon the type of delay model used in


library i.e. CMOS delay model or non-linear delay model etc.

Optionally, explicit and more restrictive transition times can also


specified on net, ports, designs etc. using command
set_max_transition.

In the presence of implicit library drived max_tran & explicit

set_max_transition, DC adheres to more restrictive constraint.

Verdana regular 7pt.


Legal text goes here

47

09.14.05

Verdana Bold 8 write title of presentation here

set_max_capacitance
Max_capacitance design rule constraint is also imposed implicitly via
technology library.

DC compiler tries to ensure that total capacitive load on a net (i.e.


interconnect cap + load pin cap ) is less than max_capacitance
attribute of driver pin.

Explicit max_capacitance attribute can also be specified on design or


input ports using command, set_max_capacitance.

In presence of both library max_capacitance & designs

max_capacitance value, DC adheres with more restrictive constraint.


Note: max_tran & max_fanout constraint also impact
max_capacitance constraint of nets indirectly.

Verdana regular 7pt.


Legal text goes here

48

09.14.05

Verdana Bold 8 write title of presentation here

set_max_fanout
Max_fanout is another type of DRC constraint that can be placed on
a design or input ports.

If its placed on a design it applies globally to all driver pins of nets in


the design.

In the presence of global max_fanout on design or explicit


max_fanout on ports, DC honors most restrictive.

If this attribute exists, DC tries to ensure that its meet by ensuring


that sum fanout_load atttribute on all input pins driven by net in
question is less than max_fanout attribute specified by
set_max_fanout command or if implicit default max_fanout
attribute exists in the library.

Verdana regular 7pt.


Legal text goes here

49

09.14.05

Verdana Bold 8 write title of presentation here

Training.tcl
define_design_lib work -path ./worklib
source -echo read_file
analyze -f verilog ${rtl_list}

elaborate exunit
current_design exunit
link

create_clock -name clk -period 2250 [get_ports clk]


set_clock_uncertainty -setup 450 [all_clocks]
set_input_delay 750 -max -clock clk [remove_from_collection [all_inputs] [all_clocks]]
set_output_delay 750 -max -clock clk [all_outputs]
set_load [expr [load_of p1265_lp_rsss_1.15v_110c/lp0an02x2/a] * 2] [all_outputs]

#Try to be conservative on your selection of driving cell.


set_driving_cell -library p1265_lp_rsss_1.15v_110c -lib_cell lp0bf00x3 -pin o
[remove_from_collection [all_inputs] [all_clocks]]

Verdana regular 7pt.


Legal text goes here

50

09.14.05

Verdana Bold 8 write title of presentation here

Constraint priorities

Design Rule constraints have higher priority over optimization constraints.


Default order of constraint priorities honored by DC is as follows:

DRC
Max_delay (setup violations)
Min_delay (hold violations)
Area.

Note: This precedence order can be changed by user, especially the setup/hold priority

DCs optimization algorithms rely on minimizing cost functions.


During Optimization process, DC strives to reduce costs of various types of constraints
down to zero and finally gives up when no further improvements to cost functions are
possible. e.g. Cost function for max_delay constraint is given by sum of worst violator
across all path groups e.g. if there are m path groups:
v1.w1 + v2.w2 + v3.w3 + +vm.wm
Where :
v = worst violator of given group.
w = weight assigned to each path group.

Verdana regular 7pt.


Legal text goes here

51

09.14.05

Verdana Bold 8 write title of presentation here

Environmental Constraints
In addition to set_driving_cell, set_max_capacitance,

set_max_transition & set_load etc. , there are few other things that
are important for defining designs environment.
Operating conditions.
Wire load models.
K-factor.

During optimization DC, scales cell & net delays extracted from
lookup tables based on the operating conditions defined in
technology library.

Operating conditions consider variations in process, voltage &


temperature (PVT). Operating conditions are specified using
command:
set_operating_conditions max rsss_1.15v_110c max_library
p1265_lp_rsss_1.15v_110c min rfff_1.50v_n30c min_library
p1265_lp_rfff_1.50v_n30c

If no operating conditions are specified, DC picks defaults specified


via library variable, default_operating_conditions
Verdana regular 7pt.
Legal text goes here

52

09.14.05

Verdana Bold 8 write title of presentation here

K-Factor
K-factors are used to simulate alternate choices for cell delays in the
timing libraries by using a scaling factor (less than or greater than
1.0).

It is not possible to characterize 1000s of stdcell for all possible


silicon applications in a particular process.

So, library developers typically re-design/characterize few sample cells


and find a number thru extrapolation to be used in timing alalysis.

Operating Conditions and K-factors can be embedded in the .lib file


or can be defined through tool commands (DC/PC/PT/Astro).

Verdana regular 7pt.


Legal text goes here

53

09.14.05

Verdana Bold 8 write title of presentation here

P1265 example

To report operating conditions you can do:


dc_shell-xg-t> report_lib
p1265_lp_rsss_1.15v_110c

nom_process : 1.0 ;
nom_temperature : 110.00;
nom_voltage
: 1.15;

These are the nominal values for


PVT, on which the delay scaling
formulas are based that scale delays
from lookup tables. Numbers defined
inside Operating Condition section
are deviations from the nominal
values.

operating_conditions("rsss_1.15v_110c") {
process : 1.0;
temperature : 110.00;
voltage : 1.15;
tree_type : "balanced_tree";
}
Note: balanced_tree is an interconnection
delay model for driving pin & network loads.
Verdana regular 7pt.
Legal text goes here

54

09.14.05

Verdana Bold 8 write title of presentation here

The Value Associated with


process is called K-factor
in almost all cases. We
typically never change the
temperature and voltage.

P861.6 example
nom_voltage :1.39;
nom_temperature : 113.0 ;
nom_process : 1.0 ;

This library contains operating


conditions with multiple K-process
factors. Notice VT does not change
from nominal values.

Verdana regular 7pt.


Legal text goes here

55

09.14.05

operating_conditions("slow_1.00") {
process : 1.00 ;
temperature : 113.00 ;
voltage : 1.39 ;
tree_type : "balanced_tree" ;
}
operating_conditions("slow_1.01") {
process : 1.01 ;
temperature : 113.00 ;
voltage : 1.39 ;
tree_type : "balanced_tree" ;
}
operating_conditions("slow_1.02") {
process : 1.02 ;
temperature : 113.00 ;
voltage : 1.39 ;
tree_type : "balanced_tree" ;
}
operating_conditions("slow_1.03") {
process : 0.93 ;
temperature : 113.00 ;
voltage : 1.39 ;
tree_type : "balanced_tree" ;
}

Verdana Bold 8 write title of presentation here

Delay Scaling Formula with K-Factor


D(scaled) = D_original_from_LookUp_Table(1 + d'process * K-process) \
(1 + d'temp * K-temp) \
( 1 + d'voltage * K-voltage)

Where,
dprocess

= (process_operating_cond - process_nominal )

dtemp

= (temp_operating_cond - temp_nominal)

dvoltage

= (voltage_operating_cond - voltage_nominal)

In most cases
K-process for cell_rise/fall = 1
K-process rise/fall_transition = 1
K-voltage = 0
K-temp = 0
Hence in most cases:
D(scaled) = D_original_from_LookUp_Table (1 + d'process * K-process) (1 + 0) ( 1 + 0)
= D_original_from_LookUp_Table (1 + d'process * K-process)

Verdana regular 7pt.


Legal text goes here

56

09.14.05

Verdana Bold 8 write title of presentation here

Wireload models.

WLM contain information to estimate nets interconnect delay (i.e nets RC) and area etc.
WLM are statistical estimates based on nets fanout numbers.
Estimates are generated based upon designs that have gone thru place & route and
used same process technology in the past.
wire_load_table("1.9_million") {
fanout_length( 1, 20.8158);
fanout_capacitance( 1, 0.0055);
fanout_resistance( 1, 35.2344);
fanout_area( 1, 2.1840);
fanout_length( 2, 50.1063);
fanout_capacitance( 2, 0.0133);
fanout_resistance( 2, 70.4688);
fanout_area( 2, 2.7300);

Command:
set_wire_load_model -name "poulsbo2d_core_custom_wireload" -library
"poulsbo_custom_wireload"

Verdana regular 7pt.


Legal text goes here

57

09.14.05

Verdana Bold 8 write title of presentation here

Uniquify the design:


You are almost ready to start synthesizing, there is one last thing
that need to be done before Compile.

If block to be synthesized contains multiple instances of some


reference design than we need to uniquify the synthesis block.
Command used:
uniquify.

Its to ensure that each instance of reference design is synthesized in


its own environment (output loading, input transition etc.).

Verdana regular 7pt.


Legal text goes here

58

09.14.05

Verdana Bold 8 write title of presentation here

U1

U2

Fub_A

Before
Uniquify

Fub_B
U3

Fub_A

U1

U2

Fub_A_0

After Uniquify

Fub_B
U3

Fub_A_1

Verdana regular 7pt.


Legal text goes here

59

09.14.05

Verdana Bold 8 write title of presentation here

Compile Strategies
You are now all prepped up to start design optimization.
Primarily two types of synthesis approaches are commonly used.
Top-down vs bottoms-up:
Top-down:
partition
-------------
unit_A
unit_B
unit_C
Bottoms-up:
partition
-------------
unit_A -------------
unit_B -------------
unit_C -------------

Compile.

link here or compile top


Compile
Compile
Compile

Verdana regular 7pt.


Legal text goes here

60

09.14.05

Verdana Bold 8 write title of presentation here

Advantage and Disadvantages


Top Down
Pros:

Only top level constraints needed


Better results due to optimization across boundaries

Cons:

Longer Compile Times


Incremental Changes require complete re-synthesis

Bottom Up
Pros:

Sub-blocks changes shorter turn-around time.

Divide & conquer approach and maybe somewhat easy to debug issues.

Cons:

Many scripts to coordinate, update, and budget

Top level may need incremental compile to fix DRC


Verdana regular 7pt.
Legal text goes here

61

09.14.05

Verdana Bold 8 write title of presentation here

Compile Strategies

There are endless design optimization strategies that can be tried.


Lets take a look at some common synopsys suggested strategies.
1) Run compile with default settings i.e:
compile -map_effort medium scan

if constraints meet, you are done.


2) If initial compile does not work, you can try tightening the constraints by
10% to 15%.
3) Try two pass back2back compile approaches i.e.
compile -map_effort medium scan
compile -incremental_mapping scan map high
For 2nd pass you can also use following without high effort; if only gate level remapping will fix issues:
compile -incremental_mapping scan

Verdana regular 7pt.


Legal text goes here

62

09.14.05

Verdana Bold 8 write title of presentation here

Compile Strategies cntd.


4) Use DC Ultra license feature. DC ultra uses advanced critical path
resynthesis (CPR) algorithms when used with high effort compile to
improve performance. This feature is turned on with set_ultra_optimization
command.

Set_ultra_optimization helps with critical path synthesis by duplicating fanin cones to


reduce loading of critical paths.
It also maps to complex wide fanin cones.

5) Use critical_range during synthesis (will be discussed in Advanced section).


6) Perform path group segregation using group_path approach.
7) Several things can be tried with DesignWare Components. E.g. if critical path
contain DW components, ungroup DW hierarchy for further optimization.
8) Ungroup smaller designs if they contain critical path to take advantage of
logic merging.
9) For area critical designs compile for area first followed by timing if timing is
easily meet.
10) Constant propagation with set_logic_one, set_logic_zero, set_unconnected,
set_logic_dc etc. it simplifies logic connected to constants.
Verdana regular 7pt.
Legal text goes here

63

09.14.05

Verdana Bold 8 write title of presentation here

Compile options switches/options


dc_shell-xg-t> compile -help
Usage: compile

# compile design

[-map_effort effort] (map effort: low, medium, high)


[-area_effort effort] (area effort: none, low, medium, high)
[-incremental_mapping] (perform only incremental mapping changes)
[-exact_map]

(sequential cells to be mapped exactly as indicated in HDL)

[-ungroup_all]

(ungroup all hierarchy)

[-boundary_optimization]
(optimize across hierarchical boundaries)
[-auto_ungroup automatically ungroup small hierarchies]

(auto ungroup: area, delay)


[-no_design_rule]

(don't fix design rules)

[-leakage_mode]

(Use leakage power as the secondary cost)

[-no_map]

(don't map design; leave as generic logic)

[-only_design_rule]

(only fix design rules)

[-only_hold_time]

(only fix hold time violations)

[-top]

(optimize the interface logic of the hierarchical sub-designs)

[-scan]

(replace all sequential elements by scan equivalent)


Verdana regular 7pt.
Legal text goes here

64

09.14.05

Verdana Bold 8 write title of presentation here

Power of compile_ultra
This is one of the new feature of DC that provides push button

approach to achieving convergence for high-performance designs.

Embedded two-pass approach under the hood.


No need to use two back to back runs like compile. But it wont
hurt to try

Uses DC-Ultra license & feature.


This command does delay-based auto ungrouping of design
hierarchies by default.

By default, it ungroups DW hierarchies during 2nd pass phase.


Hierarchical boundary-optimization also turned ON by default.

Verdana regular 7pt.


Legal text goes here

65

09.14.05

Verdana Bold 8 write title of presentation here

Compile_ultra switches/options
dc_shell-xg-t> compile_ultra -help
Usage: compile_ultra

# compile design

[-no_autoungroup]
[-no_uniquify]
[-exact_map]
indicated in HDL)
[-scan]
equivalent)

(supress delay-based auto_ungroup)


(no uniquify is needed)
(sequential cells to be mapped exactly as

(replace all sequential elements by scan

[-no_boundary_optimization]
(do not run hierachical boundary optimization)
Verdana regular 7pt.
Legal text goes here

66

09.14.05

Verdana Bold 8 write title of presentation here

What is boundary Optimization?

Boundary optimization is a process


of optimizing across hierarchical
boundaries in DC.
Optimizing across hierarchical
boundaries can perform logic
merging by moving logic across
hierarchical boundary, if it results in
better logic optimization.
By default, in DC boundary
optimization is turned off.
Boundary optimization can be
problematic from FV perspective.

Verdana regular 7pt.


Legal text goes here

67

09.14.05

Verdana Bold 8 write title of presentation here

Boundary
Opt (fig 1)

Boundary Opt
(fig 2)

After
Boundary Opt
logic sense of
pin A changes

Advanced Compile strategies with critical_range,


group_path & group/ungroup commands

By default DC works only on critical path in the design.


To enable optimization of near-critical paths, two common approaches used
are:

Synthesis with critical_range.


Grouping specific paths into separate path groups with group_path.

Critical_range Optimization is turned on using set_critical_range command:


set_critical_range 1000 [current_design]

Critical range defines the range of violations over which compile works to
improve violations.

It works on TNS instead of WNS i.e. it works on improving overall delay cost
of the design instead of worst violator by improving near_critical paths.

Improving TNS can make WNS better as a pleasant side effect, if cones of
logic are shared (e.g. incase of structured logic, datapath logic etc.)

Critical_range optimization will not improve sub-critical paths if it worsens


the critical path.
Verdana regular 7pt.
Legal text goes here

68

09.14.05

Verdana Bold 8 write title of presentation here

group_path
By default DC creates a separate path group for every clock domain
in the design and works on optimizing WNS independently within
each path_group.

WNS in one path_group does not prevent optimization in other

(different) path_groups. i.e. cost function for max_delay only takes


into account worst violator within each path group seperately.

Using Divide & conquer approach with group_path helps by

dividing timing critical designs into possibly several separate path


groups making it easier for DC to meet timing.

Verdana regular 7pt.


Legal text goes here

69

09.14.05

Verdana Bold 8 write title of presentation here

group_path example:
Example: Consider a design with single clock called clk.

It has internal register to register paths.


I/O to Register
Combinational feedthru paths.

If combinational feed thru path happens to contain critical_path, this


will impact optimization of sequential paths.

Creating following path_group for Feed-thru paths will isolate these


and let DC concentrate on feed-thru paths seperately without
impacting optimization QoR for sequantial path.

group_path name FEED_THRU from [all_inputs] to [all_outputs]


All remaining paths will stay in default clk path group.

Verdana regular 7pt.


Legal text goes here

70

09.14.05

Verdana Bold 8 write title of presentation here

Example:
You can even further break it down to more path groups, to make
tools job even easier:

group_path name input_interface from [all_inputs]


group_path name output_interface to [all_outputs]
group_path name FEED_THRU from [all_inputs] to [all_outputs]

Verdana regular 7pt.


Legal text goes here

71

09.14.05

Verdana Bold 8 write title of presentation here

group/ungroup
Removing level of hierarchy is one of the strategies to achieving
desired timing goals.

Command compile_ultra performs delay based ungroup by


defualt.

Similarly compile switch -auto_ungroup can also be used to


enable ungrouping during synthesis.

Note: compile switch for ungrouping is used in conjunction with following


variable settings that define threshold for ungrouping:
compile_auto_ungroup_area_num_cells = "30"
compile_auto_ungroup_delay_num_cells = "500
(if design hier has less than 500 cells compile auto_ungroup delay will ungroup that level of
hierarchy)

In addition, DC provides the capability to modify hierarchy OR repartition blocks using group/ungroup commands.

Verdana regular 7pt.


Legal text goes here

72

09.14.05

Verdana Bold 8 write title of presentation here

Group/ungroup
Command ungroup can be used remove level of design hierarchy.
This is also referred to as flattening the design.
Usage: ungroup

[-all]

# ungroup hierarchy

(ungroup all cells)

-prefix <prefix>]
[-flatten]

(prefix to use in naming cells


(expand all levels of hierarchy)

[-simple_names]

(use simple, non-hierarchical names)

[-small <n>]

(ungroup all small hierarchy)

[-force]

(ungroup dont_touched cells as well)

[-soft]

(remove group_name attribute)

[-start_level <n>]

(flatten cells from level:

Value >= 1)

[cell_list]

(list of cells to be ungrouped)

To completely flatten the design, you can do:


ungroup all -flatten
Verdana regular 7pt.
Legal text goes here

73

09.14.05

Verdana Bold 8 write title of presentation here

Group command
Command group is used to create a new level of hierarchy.
Example: to understand group/ungroup:

Consider following hierarchy:


Chip
fub_1
U1
fub_2
U2
fub_3
U3
Lets group instance U1 & U2 into new design called grouped_design
group -design_name grouped_design cell_name U12 {U1 U2}
Now design hierarchy will look like:
Chip
grouped_design
U12
fub_1
U1
fub_2
U2
fub_3
U3
Now perform ungrouping:
Chip
grouped_design
U12
fub_3
U3

ungroup U12 -start_level 2

Verdana regular 7pt.


Legal text goes here

74

09.14.05

Verdana Bold 8 write title of presentation here

Saving optimized database & generating


reports:
To save database after optimization you can use several types of
commands:

To save in db format (old synopsys binary format)


write -format db -h -o ./outputs/${DESIGN}.db

Now it is recommended to use new internal binary format called


ddc format. It is supported in XG-mode:

write -format ddc -h -o ./outputs/${DESIGN}.ddc

To save in verilog netlist format:


change_names -hierarchy -rules verilog
write -format verilog -hierarchy -o ./outputs/${DESIGN}.vg
Note: In addition to logical information about the design; ddc (& db mode)
also contain any constraints and any attribute information.
Verdana regular 7pt.
Legal text goes here

75

09.14.05

Verdana Bold 8 write title of presentation here

Training.tcl
define_design_lib work -path ./worklib
source -echo read_file

analyze -f verilog ${rtl_list}


elaborate exunit
current_design exunit
link

create_clock -name clk -period 2250 [get_ports clk]


set_clock_uncertainty -setup 450 [all_clocks]
set_input_delay 750 -max -clock clk [remove_from_collection [all_inputs] [all_clocks]]

set_output_delay 750 -max -clock clk [all_outputs]


set_load [expr [load_of p1265_lp_rsss_1.15v_110c/lp0an02x2/a] * 2] [all_outputs]
#Try to be conservative on your selection of driving cell.
set_driving_cell -library p1265_lp_rsss_1.15v_110c -lib_cell lp0bf00x3 -pin o [remove_from_collection [all_inputs] [all_clocks]]

set_operating_conditions -max_library p1265_lp_rsss_1.15v_110c -max rsss_1.15v_110c


###############################################
# If you wanted to define OC for min corner do:
###############################################
##set_operating_conditions -max_library p1265_lp_rsss_1.15v_110c -max rsss_1.15v_110c -min_library p1265_lp_rfff_1.50v_n30c -min
rfff_1.50v_n30c
############################################
# Write Outputs

############################################
#write -format ddc -h -o ./outputs/exunit.ddc
change_names -hierarchy -rules verilog
#write -format verilog -hierarchy -o ./outputs/${DESIGN}.vg
Verdana regular 7pt.
Legal text goes here

76

09.14.05

Verdana Bold 8 write title of presentation here

Write SDC file & SDF.


You can also write out SDC file to be used by APR. Command used is
write_sdc ${DESIGN}.sdc.

SDC has constraints such as clock definition, I/O timing, set_loads,


FP, MCPs etc.

SDF file can also be written out for PT timing analysis or GLS.
This SDF is based on WLM so accuracy is questionable.
Meaningful SDF/set_load is generated from post-Route database.

Verdana regular 7pt.


Legal text goes here

77

09.14.05

Verdana Bold 8 write title of presentation here

Reports.
There are several type of reports available for design analysis. But
most common ones are as follows:

report_area
----------------- Reports area information.
report_timing ----------------- Reports path timing information
report_constraint --------------- Reports summary of violated constraints
report_qor ---------------------- Reports quality of results summary.
report_net ---------------------- Reports on designs nets
report_net_fanout
----------- Reports net fanout info.
report_clock
----------- Reports clock information, skew etc.
report_cell
----------- Reports cell instance information.
Check_design
----------- Checks for possible design issues.
Check_timing
----------- Check for possible timing related issues.

For details do man on dc_shell-t prompt:


man report_clock
Verdana regular 7pt.
Legal text goes here

78

09.14.05

Verdana Bold 8 write title of presentation here

Advanced topics (set_cost_priority)

Previously, mentioned order of


constraint priorities as DRC,
max_delay, min_delay & Area.

Constraint priority in
descending order

Constraint Type

min_capacitance

DRC

Default order of cost priorities can


be changed using set_cost_priority
command.

max_transition

DRC

max_fanout

DRC

max_capacitance

DRC

cell_degradation

DRC

max_delay

Optimization Constraint

min_delay

Optimization Constraint

Power

Optimization Constraint

Area

Optimization Constraint

To use this command effectively


need to further break down
constraint priorities as given in
table:

Verdana regular 7pt.


Legal text goes here

79

09.14.05

Verdana Bold 8 write title of presentation here

Static Timing Analyses (STA) using Design Compiler

You are done with your synthesis session. Now what?


You should be able to analyze the database, look at the timing
reports etc.

Analyzing timing reports in DC is very similar to performing static


timing analysis (STA) using industry standard FC timing sign-off
tool, PrimeTime.

Timing engine embedded in DC is called DesignTime. Although PTs

timing engine is not the same but tool interface/commands are very
similar.

STA is a process of validating timing performance of design without


running long and time consuming dynamic simulations.

No test vectors needed for STA.


STA is fast and checks all timing paths exhaustively.
Verdana regular 7pt.
Legal text goes here

80

09.14.05

Verdana Bold 8 write title of presentation here

DesignTime divides design database into several timing paths and


check to see if they meet timing w.r.t constraints.

Delay of all paths is calculated and can be reported with


report_timing.

Timing Startpoints & Endpoints:

Timing paths consist of Startpoint & Endpoint.


Input ports & clock pin of Registers are two valid forms of
Startpoints.

Output ports & pins of Registers other than clock pin form a valid
Endpoint.

Verdana regular 7pt.


Legal text goes here

81

09.14.05

Verdana Bold 8 write title of presentation here

Types of timing paths


1) Input port to registers (pins other
than clock pins).
2) Register clock pin to output ports.

3) Register to Register (clock pin to


pins other than clocks).

Timing Paths

4) Input to Output port.


Path 3

Path 2

Path 1

How many path groups?


IN

Combo

CLK_1

Combinational
logic

CK

Path 4
Combo

Legal text goes here

82

09.14.05

Verdana Bold 8 write title of presentation here

CK

CLK_2

Verdana regular 7pt.

Combo

out

Components of delay calculation

In timing reports total path delay is typically a function of following factors.

Delay model from library e.g. generic cmos, Non-Linear Delay model. Usually its
Non-Linear delay model.
Interconnect delay model is used to model type of distributed RC Network.
WLM used for numerical estimates of RC values to be used for net parasitics.
PVT from operating conditions.

Cell Delays are computed from non-linear delay models specified in library.

This net transition contributes to input transition of next stage of cells.

Cell delays are a function output loading & input pin transition.
Input pin transition & output loading also determine transition delay of net
attached to output pin (driver pin).
Net delays are a function of WLM, tree_type & interconnect RC delay.

Verdana regular 7pt.


Legal text goes here

83

09.14.05

Verdana Bold 8 write title of presentation here

Types of Interconnect RC delay model


There are basically three RC tree_types for Interconnect models:
Best_case: Both driver & reciever are considered adjacent to each other
causing zero resistance and so zero interconnect delay.
Delay = 0
Balanced_case: All loads are on equal branches of net segments such that
each net segment incurs equal percentage of nets R & C.
Delay = (Rnet/N) * (Cnet/N + Cpin)
Worst_case: Driver and receiver are assumed far form each other such
that ecah load incurs fully lumped R & C.
Delay = Rnet(Cnet +Cpin)

Verdana regular 7pt.


Legal text goes here

84

09.14.05

Verdana Bold 8 write title of presentation here

Sample timing Path


dc_shell-xg-t> report_timing
****************************************
Report : timing
-path full
-delay max
-max_paths 1
Design : exunit
Version: X-2005.09-SP1
Date

: Tue May 2 15:46:59 2006

****************************************

# A fanout number of 1000 was used for high fanout net computations.
Operating Conditions: rsss_1.15v_110c Library: p1265_lp_rsss_1.15v_110c
Wire Load Model Mode: enclosed
Startpoint: se_astat_x1f[5]
(input port clocked by clk)
Endpoint: eu_dreg_g1f[17]
(output port clocked by clk)
Path Group: clk
Path Type: max
Verdana regular 7pt.
Legal text goes here

85

09.14.05

Verdana Bold 8 write title of presentation here

Timing path cntd:


Des/Clust/Port

Wire Load Model

Library

-----------------------------------------------exunit

500_k

p1265_lp_rsss_1.15v_110c

eu_rfctl

40_k

p1265_lp_rsss_1.15v_110c

mux8_16_16

40_k

p1265_lp_rsss_1.15v_110c

mux4_32_5

40_k

p1265_lp_rsss_1.15v_110c

Point

Incr

Path

-------------------------------------------------------------------------clock clk (rise edge)

clock network delay (ideal)

0.00

0.00

0.00

0.00

input external delay

750.00

se_astat_x1f[5] (in)

0.00

750.00 r

rf_ctl/ccin_x1f (eu_rfctl)

0.00

750.00 r

rf_ctl/U3/o (lp0in00x16)

750.00 r

14.91

764.91 f

rf_ctl/U362/o (lp0na02x4)

22.98

787.88 r

rf_ctl/U124/o (lp0na02x4)

32.39

820.27 f

rf_ctl/U127/o (lp0no02x4)

33.18

853.45 r

rf_ctl/U354/o (lp0no02x4)

27.11

880.56 f

rf_ctl/U156/o (lp0na03x4)

31.80

912.37 r

rf_ctl/U157/o (lp0cb00x16)

65.06

977.42 r

Verdana regular 7pt.


Legal text goes here

86

09.14.05

Verdana Bold 8 write title of presentation here

Timing path cntd.


rf_ctl/storesell_g1f[2] (eu_rfctl)

0.00

rf_store_g1f_int_lmux/sel[2] (mux8_16_16)

977.42 r
0.00

977.42 r

rf_store_g1f_int_lmux/U189/o (lp0in00x6)

25.96

1003.39 f

rf_store_g1f_int_lmux/U192/o (lp0no03x4)

85.42

1088.81 r

rf_store_g1f_int_lmux/U176/o (lp0in00x4)

55.67

1144.48 f

rf_store_g1f_int_lmux/U174/o (lp0no02x2)

46.50

1190.98 r

rf_store_g1f_int_lmux/U173/o (lp0no03x4)

42.59

1233.56 f

rf_store_g1f_int_lmux/U157/o (lp0na02x4)

28.32

1261.88 r

rf_store_g1f_int_lmux/U135/o (lp0ci00x8)

31.40

1293.28 f

rf_store_g1f_int_lmux/U177/o (lp0ci00x16)

22.97

1316.26 r

0.00

1316.26 r

rf_store_g1f_int_lmux/z[1] (mux8_16_16)
rf_strmux/i2[17] (mux4_32_5)

0.00

1316.26 r

rf_strmux/U333/o (lp0an02x2)

72.33

1388.58 r

rf_strmux/U367/o (lp0no02x4)

31.24

1419.83 f

rf_strmux/U427/o (lp0na02x4)

33.97

1453.80 r

rf_strmux/z[17] (mux4_32_5)

0.00

1453.80 r

eu_dreg_g1f[17] (out)
data arrival time

0.32

1454.12

Verdana regular 7pt.


Legal text goes here

87

09.14.05

1454.12 r

Verdana Bold 8 write title of presentation here

Timing Path cntd:


clock clk (rise edge)
clock network delay (ideal)
clock uncertainty
output external delay
data required time

2250.00

2250.00

0.00
-450.00

2250.00
1800.00

-750.00

1050.00

1050.00

-------------------------------------------------------------------------data required time


data arrival time

1050.00
-1454.12

-------------------------------------------------------------------------slack (VIOLATED)
Verdana regular 7pt.
Legal text goes here

88

09.14.05

Verdana Bold 8 write title of presentation here

-404.12

Report_timing analysis.
By default report_timing shows full cell delay annotated to the
output pin of cell.

But if you use input option than it also shows delay annotated to
input pin. Snippet:

rf_store_g1f_int_lmux/U189/a (lp0in00x6)

0.51

977.94 r

rf_store_g1f_int_lmux/U189/o (lp0in00x6)

25.45

1003.39 f

rf_store_g1f_int_lmux/U192/b (lp0no03x4)

0.20

1003.59 f

rf_store_g1f_int_lmux/U192/o (lp0no03x4)

85.22

1088.81 r

Yet with even more option i.e. -input , -net, -cap -tran; it

shows nets attached to pins, fanout, capaitive load & transition delay
at output pin. Same snippet from above:
rf_store_g1f_int_lmux/U189/a (lp0in00x6)

37.59

0.51

977.94 r

rf_store_g1f_int_lmux/U189/o (lp0in00x6)

18.03

25.45

1003.39 f

rf_store_g1f_int_lmux/net371276 (net)

0.01

rf_store_g1f_int_lmux/U192/b (lp0no03x4)

18.47

0.20

rf_store_g1f_int_lmux/U192/o (lp0no03x4)

99.27

85.22

rf_store_g1f_int_lmux/net281862 (net)

0.02

Verdana regular 7pt.


Legal text goes here

89

0.00

09.14.05

Verdana Bold 8 write title of presentation here

0.00

1003.39 f
1003.59 f
1088.81 r
1088.81 r

Cell Delay Calculation Example


Fanout Cap
rf_ctl/U157/o (lp0cb00x16)

Trans
36.46

rf_ctl/storesell_g1f[2] (net)

0.09

rf_ctl/storesell_g1f[2] (eu_rfctl)
rf_storesell_g1f_2_ (net)

0.09

rf_store_g1f_int_lmux/sel[2] (mux8_16_16)
rf_store_g1f_int_lmux/sel[2] (net)

0.09

Incr

Path

64.72

977.42 r

0.00

977.42 r

0.00

977.42 r

0.00

977.42 r

0.00

977.42 r

0.00

977.42 r

rf_store_g1f_int_lmux/U189/a (lp0in00x6)

37.59

0.51

rf_store_g1f_int_lmux/U189/o (lp0in00x6)

18.03

25.45 1003.39 f

rf_store_g1f_int_lmux/net371276 (net) 3

Fanout
number

Cap load

0.01

Transition delay
at output pin

Verdana regular 7pt.


Legal text goes here

90

09.14.05

Verdana Bold 8 write title of presentation here

0.00

977.94 r

1003.39 f

Cell delay
annotated
to output
pin

Degraded
input pin
Transition
Interconnect
RC

Worst delay
edge

Timing Library LookUp Table

Understanding a

cell_fall ("delay_outputslew_template_8X8_r14cip00hx120") {

Index_1 Increasing CAP

/* Simulation data for spec: `tp_ckb_xy_o_10_min_max' */


index_1 ("0.0023242, 0.0464835, 0.0929670, 0.1394510, 0.2324170, 0.3253850, 0.4648350, 0.6972530") ;
index_2 ("0.0050000, 0.0720000, 0.1330000, 0.1940000, 0.2660000, 0.3250000, 0.4330000, 0.6500000") ;
values (\
"0.0094544, 0.0185783, 0.0214518, 0.0236007, 0.0253379, 0.0262552, 0.0272282, 0.0275904",\
"0.0162273, 0.0331686, 0.0396203, 0.0439910, 0.0480818, 0.0509845, 0.0540329, 0.0590189",\
"0.0229267, 0.0445651, 0.0545321, 0.0611686, 0.0671197, 0.0700321, 0.0753469, 0.0851278",\
"0.0295431, 0.0544924, 0.0670831, 0.0758769, 0.0836995, 0.0867423, 0.0949430, 0.1071260",\
"0.0427102, 0.0726367, 0.0882396, 0.1007730, 0.1110430, 0.1172860, 0.1290020, 0.1461220",\
"0.0557998, 0.0886394, 0.1074140, 0.1221190, 0.1356480, 0.1436800, 0.1586330, 0.1804830",\
"0.0754076, 0.1105390, 0.1338060, 0.1511390, 0.1675510, 0.1777430, 0.1972450, 0.2262090",\
"0.1082070, 0.1435670, 0.1730870, 0.1953680, 0.2154180, 0.2272280, 0.2517220, 0.2892730"\
);
fall_transition ("delay_outputslew_template_8X8_r14cip00hx120") {
/* Simulation data for spec: `tp_ckb_xy_o_10_min_max' */
index_1 ("0.0023242, 0.0464835, 0.0929670, 0.1394510, 0.2324170, 0.3253850, 0.4648350, 0.6972530") ;
index_2 ("0.0050000, 0.0720000, 0.1330000, 0.1940000, 0.2660000, 0.3250000, 0.4330000, 0.6500000") ;
values (\
"0.0061389, 0.0186050, 0.0271472, 0.0330667, 0.0409234, 0.0477795, 0.0586398, 0.0787963",\
"0.0146870, 0.0298953, 0.0417526, 0.0504997, 0.0592868, 0.0668663, 0.0808903, 0.1052830",\
"0.0245473, 0.0410504, 0.0528621, 0.0639379, 0.0748730, 0.0845219, 0.1018660, 0.1263720",\
"0.0340386, 0.0497603, 0.0632419, 0.0754232, 0.0882203, 0.1016720, 0.1160920, 0.1442230",\
"0.0525267, 0.0680215, 0.0831561, 0.0963495, 0.1118690, 0.1224300, 0.1423730, 0.1773050",\
"0.0711111, 0.0841070, 0.1015420, 0.1170980, 0.1355360, 0.1428940, 0.1648110, 0.2031320",\
"0.1012570, 0.1112820, 0.1274450, 0.1473200, 0.1665090, 0.1762910, 0.1964440, 0.2373340",\
"0.1467670, 0.1540650, 0.1700650, 0.1904480, 0.2104150, 0.2204380, 0.2469340, 0.2914650"\
);
Timing Report

TRAN Index is Column


Selector
CAP Index is Row Selector

Verdana regular 7pt.


Legal text goes here

Index_2 Increasing TRAN


91

09.14.05

Verdana Bold 8 write title of presentation here

2D LookUp Table

Startpoint: FF_1 (rising edge-triggered flip-flop clocked by clk)


Endpoint: out_1 (output port clocked by clk)
Path Group: clk
Path Type: max
Point
Fanout Cap
Trans
Incr
Path
-------------------------------------------------------------------------------------------------------clock clk (rise edge)
0.0000000 0.0000000
clock source latency
2.0000000 2.0000000
clk (in)
0.1330000 0.0000000 2.0000000 r
clk (net)
1 0.0400261
BUF_1/ckb (r14cip00hx120)
0.1330000 0.0010161 2.0010161 r
BUF_1/o (r14cip00hx120)
0.0831561 0.0875449 + 2.0885611 f
n1 (net)
1 0.2324170
BUF_2/ckb (r14cip00hx120)
0.0831561 0.0059004 + 2.0944614 f
BUF_2/o (r14cip00hx120)
0.0300929 0.0325592 2.1270206 r
n2 (net)
1 0.0400261
BUF_3/ckb (r14cip00hx120)
0.0300929 0.0010161 2.1280367 r
BUF_3/o (r14cip00hx120)
0.0189827 0.0211189 2.1491556 f

Things to look for to debug timing issues.

Big delay cells & possible causes.


Relaistic interface timing constraints.
Many back2back buffers/inverters.
Traverse levels of logical hierarchy in path.
Unrealistically high level of logic cells.
Revisit compile strategy.

Verdana regular 7pt.


Legal text goes here

92

09.14.05

Verdana Bold 8 write title of presentation here

Timing exceptions
Timing exceptions are needed to account for non-default behaviour
of synchronous paths.

False Paths (FP).


Multicycle Paths. (MCP).

False Paths (FP):


Are paths that are free of any timing constraints.
Consequently such paths are skipped during timing optimization in DC.
Command set_false_path is used to remove/disable timing constraints
from a path.
Correct identification of FP is very critical for quality synthesis & timing
closure.
Some example of paths that could be declared as false are.
Cross clock paths i.e paths that are launched and captured by different
clocks that are asynchronous w.r.t each other e.g. clocks with different
frequencies
Paths that are functionally never executed or dont impact design
operation.
set_false_path from [get_clocks clk1] to [get_clocks clk2]
Verdana regular 7pt.
Legal text goes here

93

09.14.05

Verdana Bold 8 write title of presentation here

Timing exceptions cntd.


Multicycle Paths (MCP):

By default all paths are single cycle paths.


Paths that take multiple clock cycles to propagate from launch to capture
edge.
Command set_multicycle_path is used to specify paths as MCP.
Example: Register to Register path that goes thru an Adder may take
multiple clocks cycles to propagate.
set_multicycle_path 2 from [get_pins reg_1/CK] to [get_pins reg_2/D]
set_multicycle_path setup 2 through {U1,U2} to [ger_ports X].

Verdana regular 7pt.


Legal text goes here

94

09.14.05

Verdana Bold 8 write title of presentation here

Multiple Clocks & Virtual clocks

In real designs usually there are more than one clock within single
block or across multiple blocks.

DC determines and uses the worst case relationship between clock


edges to optimize the path for worst case scenario.

Virtual clocks are the clocks that are physically non-existent in


design under synthesis but may exist in another block.

Virtual clocks do not have a clock entry port (clock definition point) in the
design being synthesized.
Virtual clocks are typically used for applying constraints between cross
clock paths.

Verdana regular 7pt.


Legal text goes here

95

09.14.05

Verdana Bold 8 write title of presentation here

Virtual/Multiple Clock
example
3ns
CK 2
in

Combo

Combo

???

out

CK 1
5 ns
CK 3
CK 1 (20 ns period)

10

20

30

40

CK 2 (10 ns period)

10

15

20

25

30

35

40

CK 3 (14 ns period)

14

21

Verdana regular 7pt.


Legal text goes here

96

09.14.05

Verdana Bold 8 write title of presentation here

28

35

42

Virtual Clock Example 1:


In previous figure which clocks determine worst case setup
relationship???

What should be the max delay allowed for yellow cloud of logic
during synthesis???

create_clock name CK1 period 20000 [get_ports CK1]


create_clock name CK2_virtual -period 10000
create_clock name CK3_virtual period 14000
set_output_delay 5000 max clock CK3_virtual [get_ports out]
set_output_delay 3000 max clock CK2_virtual -add_delay [get_ports
out]

Note: Since block under synthesis does not contain CK2 &
CK3 ports, therefore virtual clocks were defined for assigning
interface timing constraint.
Verdana regular 7pt.
Legal text goes here

97

09.14.05

Verdana Bold 8 write title of presentation here

Answers to Example:
CK1 edge @ 20 ns -> CK3 edge @ 28 ns determines the worst case
relationship.

Logic cloud yellow should be synthesized to 3 ns.

Verdana regular 7pt.


Legal text goes here

98

09.14.05

Verdana Bold 8 write title of presentation here

Help & Useful Commands:

get* --------- Family of commands that create collection of objects.

e.g. get_cells, get_nets etc.

If you dont know exact command that you are looking for simply do
following at prompt:

dc_shell-xg-t> help get*


get_attribute
get_cells

# get attribute values


# create a collection of cells

get_clocks

# create a collection of design clock

all_input ------- Returns list of input/inout ports.


all_outputs ---- Returns list of outputs ports.

Verdana regular 7pt.


Legal text goes here

99

09.14.05

Verdana Bold 8 write title of presentation here

Help & Useful Commands:


dc_shell-xg-t> help all*
all_clocks

# return all clocks in the current design

all_connected
all_critical_cells

all_designs

# return objects connected to a net, port, or pin


# return critical cells

# return all designs

all_dont_touch
all_fanin

all_fanout

# Returns all dont touch objects


# return pins or cells in transitive fanin

# return pins or cells in transitive fanout

Verdana regular 7pt.


Legal text goes here

100

09.14.05

Verdana Bold 8 write title of presentation here

Help & Useful Commands:


dc_shell-xg-t> help set*
set_clock_latency

# set clock_latency

set_clock_transition # set clock_transition


set_clock_uncertainty # set clock_uncertainty
set_ideal_net

# set_ideal_net

set_ideal_network

# set_ideal_network

set_ideal_transition # set_ideal_transition
set_input_delay
set_output_delay

# set input_delay
# set output_delay

Verdana regular 7pt.


Legal text goes here

101

09.14.05

Verdana Bold 8 write title of presentation here

Help & Useful Commands:


Following gives list of all matching commands:
dc_shell-xg-t> help set*

Once you know the command, to look at its switches do following:


dc_shell-xg-t> set_output_delay -help
Usage: set_output_delay
# set output_delay
[-clock clock_name]
(relative clock)
[-clock_fall]
(delay is relative to falling edge of clock)
[-level_sensitive]
(delay is from level-sensitive latch)

To look at full man page:


dc_shell-xg-t> man set_output_delay

Verdana regular 7pt.


Legal text goes here

102

09.14.05

Verdana Bold 8 write title of presentation here

Some helpful solvenet articles on Compile


strategies:
https://solvnet.synopsys.com/retrieve/901881.html
https://solvnet.synopsys.com/retrieve/012774.html
https://solvnet.synopsys.com/retrieve/001999.html

Verdana regular 7pt.


Legal text goes here

103

09.14.05

Verdana Bold 8 write title of presentation here

Acknowledgements & References


Special thanks to following individuals for proof reading the foils:
Pokhrel, Khem C
Gourlay, Stephen

(FM)
(HD)

References:
Synopsys Documentation.
Khem Pokhrels STA document.

Verdana regular 7pt.


Legal text goes here

104

09.14.05

Verdana Bold 8 write title of presentation here

Você também pode gostar