Professional Documents
Culture Documents
⇩
DESIGN ENTRY / FUNCTIONALITY VERIFICATION (GENERATING RTL CODE & VERIFYING)
⇩
RTL SYNTHESIS / LOGIC SYNTHESIS
⇩
PARTITIONING OF CHIP
⇩
DESIGN FOR TESTABILITY (SCAN CHAIN INSERTION)
⇩
FLOOR PLANNING
⇩
PLACEMENT
⇩
CLOCK TREE SYNTHESIS
⇩
ROUTING
⇩
FINAL VERIFICATION(PHYSICAL VERIFICATION AND TIMING) LVS,DRC,LEC
⇩
GDSⅡ (GRAPHIC DATA STREAM)
❖ RTL code is developed using microarchitecture of design which is derived from chip design
requirements.
❖ This RTL code description is written using verilog hardware description language (verilog HDL) or
very large scale integration hardware description language (VHDL).
❖ In this phase, the hardware description (RTL) is converted to a gate-level netlist. This process is
performed by a synthesis tool that takes a standard cell library, constraints and the RTL code and
produces a gate-level netlist.
❖ Synthesis tools are running different implementations to provide the best gate level netlist that
meets the constraints. It takes into account power, speed, size and therefore the results can vary
much from each other. To verify whether the synthesis tool has correctly generated the gate-level
netlist a verification should be done.
❖ In this stage the technological independent rtl code is converted to technological dependent gate
level netlist using synthesis tool. We are creating a hardware environment which can easily optimize
without changing the functionality.
❖ We are only considering the setup analysis in the synthesis stage with an ideal clock(i.e no skew)
which has one clock period for transferring the data between two registers which can minimize the
setup violations after the post CTS and routing stages.
❖ We are also considering zero wire load models for logic synthesis
check_design
➢ Checks related to design :
○ Floating pins
○ multi driven inputs
○ un-driven inputs and outputs
○ normal cells in clock path
○ pin direction mismatch
○ don’t use cells
Runs predefined or user-defined checks on current design.
1. Input pin floating
Error: If any input pins are floating in the design it gives the error, this input causes the logic functionality
change due to coupling capacitance the voltage at input pin may vary between logic 0 and logic 1 which
gives the metastable state and high power dissipation takes place because of short circuit between power
and ground. This could be a major issue.
FIX: This can be eliminated by connecting the floating pin to either logic 0 , 1 Or report to the rtl team.
2. Output pin floating
Error: if the output pin is floating there is no issue because the synthesis tool removes the path for timing
analysis. Because there is no continuity and functionality requirement in the path from input to output
port.
FIX: this error can be fixed while optimizing the design by tool, it removes the paths like this.
This is called pruning.
3. Multi Driven logics
Error: this error is caused when the logic gate doesn’t know which input to take while it is connected to
two or more logic outputs.
FIX: this fault belongs to the rtl team. We should report it to the rtl team.
SDC CONSTRAINTS:
❖ STATIC TIMING ANALYSIS (STA) is the best method for determining timing analysis, if the circuit
meets the timing constraints without having to simulate.
❖ We should provide required timing constraints based on the design , the tool checks the slack
violation using STA(static timing analysis).
create_clock -name clk -period 2.22 -waveform {0 1.11} [get_ports clk]
➢ We should provide the clock constraints to all the clk ports in the design.
create_generated_clock -multiply_by 2 -name ckGen2x -source clk [get_pins ckGen/U8/Z]
➢ If there is any pins which has the source clk input we should create generated clk
set_clock_uncertainty 0.4 [get_clock clk]
➢ We are setting 20% of clk period as clock uncertainty which is an ideal case. We took it as the limit
for the possible deviation of the clk edge from its ideal location.
set_clock_latency -source 0.2 clk
➢ We are setting insertion delay from clock source to clock definition point as 10% of clock period.
set_clock_latency 0.2 clk
➢ Similarly, we are setting insertion delay from clock port to clk sink point of sequential elements as
10%.
set_input_delay 1.33 [all_inputs] -clock clk
➢ We are setting input delay as 60% of clk period for every register to input port paths.
set_output_delay 1.33 [all_outputs] -clock clk
➢ Similarly, we are setting output delay as 60% for every output port to register paths.
❖ For feed through paths the delay is considered as 30% ideal case, otherwise we get input from full
chip level.
set x [filter [all_fanout -from [all_inputs]] "port_direction == out"]
➢ We are filtering out feed through paths from input to output and taking output ports as a list.
set y [filter [all_fanin -to [all_outputs]] "port_direction == in"]
➢ We are filtering out feed through paths from output to input and taking input ports as a list.
set_input_delay 0.77 [get_ports $y] -clock clk
➢ We are setting input delay as 35% for every register to input port paths.
set_output_delay 0.77 [get_ports $x] -clock clk
➢ We are setting output delay as 35% for every output port to register paths.
❖ We are creating four group paths and checking whether the timing constraints have been met or
not.
group_path -name i2o -from [all_inputs] -to [all_outputs]
group_path -name i2r -from [all_inputs] -to [all_registers]
group_path -name r2r -from [all_registers] -to [all_registers]
group_path -name r2o -from [all_registers] -to [all_outputs]
Sanity check :
➢ Checks related to timing : check_timing
○ Combinational loops
○ Un-clocked registers
○ unconstrained IO’s
○ IO delay missing
○ Un-expandable clocks
○ Master slave separation
○ multiple clocks : checks if there are any multiple clocks in the design.
This command checks for possible timing problems in the current design.
1. Unclocked registers
Error: check timing gives the unclocked registers where clock is not coming to the clk pin of registers.
Fix: to fix this issue define the clk in the constraints as ‘create_clk -name’.
2. Unconstrained endpoint
We can find how the cell is unconstrained by checking the fanin of clk pin of sequential elements and
checking the clock pin of the predecessor register by finding the all_fanin of the output pin of the register.
Error: it gives unconstrained endpoints when the clock is not connected to the register of the predecessor
stage or clk pin is connected to either logic 0 or 1. It also gives unconstrained output while the output pin
of the predecessor register is connected as a clock pin to the next register, whose clock pin is connected
to either logic 0 or 1.
Fix: to fix this issue either define the clock in sdc constraints or report to the rtl team if the clock pin is
connected to either logic.
3. Unexpandable clocks
Error: in the design many clocks are used with different frequencies, the two different clock frequencies
which are not multiple to each other get the timing violation in a particular path.
Fix: to fix this issue the clock synchronizer should be used between two different clock domains or false
path as timing exceptions can be used.
We should report this to the rtl team about the clock synchronizer in the design .
4. Racing condition
Error: this gives the list of combinational loops, because of continuous looping the higher power
dissipation takes place.
Fix: we can use timing exceptions here like creating a false path as this error is from the rtl side.
TIMING EXCEPTIONS :
❖ Timing exceptions allow you to modify the default timing analysis rules for specific paths, such as
multicycle paths, false paths, and minimum and maximum delays.
1. set_false_path
2. set_multicycle_path
3. set_max_delay
4. set_min_delay
report_transitive_fanout -from spi_clk
➢ This command reports the information of the full path with which this clk port is connected.
set_false_path -from [get_ports spi_clk] -to [get_pins spi_slave0/spi_clk_q_reg/D]
➢ A false path is a path existing in a design which should not be analyzed for timing.
➢ If there are two different clocks which are not synchronized and a path between two multiplexed
blocks that are never enabled at the same time etc couldn’t meet the setup slack.
set_multicycle_path 2 -from [get_pins REGc/regout_reg[1]/CP] -to [get_pins MUL1/q_reg[12]/CP ] -setup
➢ In this step we are creating a multicycle for reliable capture of required data by setting the number
of clock cycles in a path.
set_max_delay
➢ With this command we can set more time to the path which is violating.
Set_min_delay
➢ This command is mainly for hold operation, we can set minimum delay to particular path.
set_driving_cell -library tcbn28hpcplusbwp30p140hvtssg0p72vm40c_ccs -lib_cell
BUFFD0BWP30P140HVT [remove_from_collection [all_inputs ] clk]
➢ If we don’t set the drive strength for input ports, there is no limit in driving by input ports which
cause the delay in the cells due to high transition time and load, it leads to violation in setup slack.
set_max_capacitance 2 [all_outputs]
➢ Similarly, as in case of output ports it is not defined to limit HFNS, which leads to increase in delay.
set_max_area 0
➢ We are setting max area to zero, so that the tools tries to use as minimum area as possible.
Compile
❖ In this phase mapping is done with the cells in the target library files which are referred with the
gtech and designware components.
Performs Boolean optimization.
Maps all the cells to technology libraries.
Performs logic and design optimization.
➢ Logic optimization
○ Constant folding
○ Detect identical cells
○ Optimize mux(dead branches in mux) ,consolidate mux and reduce inputs(many to single)
○ Remove DFF with constant value
○ Reduce word size of the cells
○ Remove unused cells and wires
➢ Design optimization
○ Reduce TNS and WNS
○ Power Optimization
○ Area Optimization
○ Meet the timing DRV’s
○ incremental clock gating.
report_timing
➢ This command gives the report of the worst setup slack violation of every path group in the design.
➢ If any path gives the setup violation then we need to set the weightage to the violated path group.
➢ This weightage value multiplies with TNS value and the higher the value gets the more time to
optimize the path groups which are violated.
group_path -name i2r -from [all_inputs] -to [all_registers] -weight 3
group_path -name r2r -from [all_registers] -to [all_registers] -weight 4
❖ Again run the design using compile command, even if the setup slack is slightly violated then we can
go for the compile_ultra command.
compile_ultra -no_boundary_optimization
➢ This command takes more time for optimization and mapping than the compile command.
ERROR : reg to reg path slack is violating with higher value because the timing path uses different clock
sources without synchronizer. So, it does not meet the setup slack.
FIX: I used a false_path as a timing exception for that path after apprising the RTL team.
❖ If the slack is met then we need to get the gate level netlist and sdc constraints.
write_file -hierarchy -format verilog -output ../reports/net.v
➢ Get the gate level netlist file
write_sdc -version 2.1 ../reports/rptop.sdc
➢ Get the sdc constraints file
❖ If we import UPF file and scan config (for DFT) then we get the UPF file and ScanDEF file-information
of scan flops and their connectivity in a scan chain as an output from synthesis.
sizeof_collection [get_flat_cells ]
➢ Note the collection of cells in the design
Sanity check :
report_qor (quality of results )
➢ This command reports the TNS and WNS of the design, count of leaf cells, sequential and
combinational cells and also the information related to the power and area of the design.
check_timing
➢ Displays the pins related to timing information
check_library
➢ It checks the relation between logical and physical of library cells.
report_constraints
➢ It gives the report of timing violations of constraints and the violating cells.
check_netlist
➢ The command checks the design for netlist connectivity errors and and design violations. This
command gives preliminary information about the state of the netlist and if there are any potential
problems with the netlist. This informs about the potential errors that might occur during the later
stages.
NOTE :
➢ Even after the compile_ultra phase, if the slack is violated with higher negative value (i.e greater
than 40% of clock) then we need to check the cause of the violations in the path group.
➢ If there are no issues in the RTL code we can use the timing exceptions and pipelining process to
fix the violations in that path group.
➢ If there is a slight setup slack violation in (picoseconds) we can proceed to the physical design
flow which can fix this violation after the routing stage.
PHYSICAL DESIGN
❖ In this first stage of PD flow after partitioning the chip into blocks from full chip level, the
required files of related blocks are imported into the tool.
Inputs required :
1. Gate level netlist in verilog format.
2. Logical (Timing) & Physical views of standard cells & all other IPs used in the design, ndm file (new
data mode) (.lib and .lef of standard cells)
3. Timing constraints (SDC)
4. Power Intent (UPF / CPF)
5. FloorPlan DEF & Scan DEF
6. Technology file (.tf)
7. RC Co-efficient files tlu+ (ITF file)
READING FILES:
create_lib rptoplib -ref_libs
Sanity check :
get_libs c
➢ whether the .lib files are loaded or not.
read_verilog ../inputs/final_netlist.v
➢ Read the verilog netlist which is the output of logic synthesis.
get_layers -filter "is_routing_layer == true"
➢ Collecting the routing layers.
set vertical_layers [gets stdin]
set horizontal_layers [gets stdin]
➢ Dividing the layers into horizontal and vertical directions.
set_attribute [get_layers $vertical_layers ] routing_direction vertical
➢ Assigning the selected layer routing direction as an attribute which defines the direction of the layer
i.e vertical layers.
set_attribute [get_layers $horizontal_layers ] routing_direction horizontal
➢ Assigning the selected layers routing direction as an attribute which defines the direction of the
layer i.e horizontal layers.
FLOORPLAN
➢ Floorplan is one the critical & important steps in Physical design. Quality of your Chip / Design
implementation depends on how good the Floorplan is. A good floorplan can be made into an
implementation process (place, cts, route & timing closure) cake walk. On similar lines a bad
floorplan can create all kinds of issues in the design (congestion, timing, noise, ir, routing issues). A
bad floorplan will blow up the area, power & affect reliability, life of the IC and also it can increase
overall IC cost (more effort to closure, more LVTs/ULVTs).
➢ Before starting Floorplan, it is better to have basic design understanding, data flow of the design,
integration guidelines of any special analog hard IPs in the design. And for block/partition level
designs understanding the placement & IO interactions of the block in Full chip will help in coming
up with a good floorplan.
➢ In flooplan DEF file contains the information about shape of block, core utilization, side_ratio or
side_length, macro, IO placement, blockages and keepout margin etc.
1. Abutted (All inter block pin connections are done through FTs).
2. Non abutted (Channel based. All inter block pin connections are routed in channels).
3. Mix of both – partially abutted with some channels.
IO PORT PLACEMENT:
❖ After the floorplan we need to place the pins according to fullchip level arrangement depending on
the communication with other blocks.
❖ IOs / Pins are placed at the boundary of the block. Usually pin placement information is pushed
down from the FC floorplan. But these locations can be changed based on block critical
requirements. Any change in pin location has to be discussed with the FC floorplan team. Timing
critical interfaces need special attention, like the next 2-3 levels of logic from IOs are pre-placed
near the IOs). Source synchronous interfaces requires delay balancing taking OCV into
considerations (This will require manual placement & scripting)
create_pin_guide -boundary {{-0.1 100} {2.1 250}} -name rp_inputs [get_ports -filter "direction == in"]
-pin_spacing 1
➢ To place the pins we need to create a boundary between the core to die space with the coordinates
with lower left and upper right.
place_pins -ports [get_ports -filter "direction == in"]
➢ This command places the pins in the specified boundary with pin to pin spacing.(input ports)
create_pin_guide -boundary {{1378 100} {1379.9 300}} -name rp_outputs [get_ports -filter "direction ==
out"] -pin_spacing 1
➢ Similarly, create a boundary for output ports.
place_pins -ports [get_ports -filter "direction == out"]
➢ This command places the pins in the specified boundary with pin to pin spacing.(output ports)
Sanity check :
Check_pin_placement
➢ This command checks whether the pin placement is done correctly without overlapping.
Errors : the pin placement errors are caused due to more number of ports placed in small boundary
regions with large spacing between pins. The pins also place around the core to die region, if we do not
provide the correct coordinates while creating the pin_guide.
Fix : create a pin guide with a larger boundary.
MACRO PLACEMENT
➢ There are certain guidelines for macro placement. Macro placement can be done automatically and
manually. some guidelines are not a must for the placement of macros.
➢ The command for automatic placement of macros is
create_placement -floorplan with the app_option plan.macro.macro_place_only set to true.
➢ This app option stops the placement once the macros have been placed.
➢ After placing the macros automatically it does not follow some guidelines properly so, we can
change placement of macros according to guidelines and fly line analysis.
Guidelines:
1. Macros should be placed near the core boundary.
2. Same hierarchy macros should be grouped.
3. Create a keep out margin to avoid abutting with standard cells.
4. Avoid port access issues due to macro placement.
5. macro pins face towards core region (std cell area).
Precautions :
➢ Macros should not overlap.
➢ Create soft blockages in notches.
➢ Create soft keep out margins.
➢ Macro pins should align to tracks.
PREPLACEMENT CELLS :
➢ In this preplacement stage some physical only cells need to be added before placement of standard
cells. These physical only cells need to be placed at certain positions to avoid some issues caused
due to the latch up in standard cmos structure using N-tub process and process variations at
boundaries of chips.
Boundary cell:
create_boundary_cells -left_boundary_cell tcbn28hpcplusbwp30p140hvt/BOUNDARY_LEFTBWP30P140
-right_boundary_cell tcbn28hpcplusbwp30p140hvt/BOUNDARY_RIGHTBWP30P140 -prefix ENDCAP
➢ To avoid well-proximity effect and N-well continuity the boundary cells are placed on either side of
the cell rows.
➢ Below 16nm design boundary cells are placed on all sides of the design.
Tap cell:
create_tap_cells -lib_cell tcbn28hpcplusbwp30p140hvt/TAPCELLBWP30P140 -distance 30 -pattern stagger
-prefix TAP -skip_fixed_cell
➢ To avoid latch up effect due to the standard cmos structure, the unwanted parasitic BJT are formed.
➢ Tap cells are inserted at every 30um distance in 28nm technology, for 16nm technology these cells
are placed for every (<45um) distance.
➢ We are placing tap cells in staggered patterns for better connectivity with the same area.
Sanity_checks :
check_boundary_cells
check_tap_cells
ERRORS : The error comes when the boundary cells and tap cells are not aligned to the rails perfectly i.e
legal positioning of cells. The cause of the error is macros obstructing the legal position of physical cells
that obstruct the connection of physical cells ro rails.
FIXES:
1. This error can be fixed by moving the macros that leave space for connection of physical cells to
rails.
2. We can obstruct the placing of cells around the boundary of macros by keeping hard blockage.
POWER PLANNING :
➢ In this stage we are providing power supply to the block. The power requirements of the block are
defined from full chip level.
➢ To create a power plan we need to take higher metal layers, because higher metal layers have less
resistance due to high cross sectional area, it carries high currents, these layers are directly
connected to the power supply.
➢ All blocks have to follow the same pitch and spacing between stripes to align at full chip level.
➢ The stripes of the second level grid only connect to the core boundary to not get any metal to metal
shorts.
➢ As coming to lower layers the resistance increases with metal layers, the required power for the
region could be achieved by the level shifters connecting from grids to rails.
➢ To create a power plan we need to create supply ports and supply nets and create logical
connections between supply pins of standard cells, macros to the supply nets.
create_port -port_type power -direction in VDD
create_port -port_type ground -direction in VSS
create_net -power VDD
create_net -ground VSS
connect_pg_net -net VDD [get_pins -physical_context */VDD]
connect_pg_net -net VSS [get_pins -physical_context */VSS]
➢ To create power planning in icc2 tool we need to create some strategies to create core rings, power
grids and vias .
➢ The required values for creating strategies will be from full chip level like number of stripes for first
level grid, the metal layers used for it and second level rid and the metal layers, offset distance ,
min width of metal, min spacing, pitch.
➢ Creating a lowermost layer for rails {VDD,VSS},min width, min spacing, etc, for the alignment of cells
between these rails.
➢ While creating pg strategy we need to assign metal layers as VDD and VSS nets.
➢ we should compile these strategies using the compile command.
PRECAUTION:
We need to set the app option to true to disable the automatic creation of PG vias.
Create multi stacked vias which reduces the resistance from single via enclosure.
➢ We are creating pg vias from first level grid to second level grid from M9 to M8 to M7 to M6 to M5.
➢ After that again pg vias are created from M5 to M1, passing through M4 ,M3,M2 with different
array dimensions.
➢ The creation of two PG vias is due to different pitch values of metal layers in the design.the format
this design follows is 4 2 2 1 {M9 to M6} {M5 , M4} {M3,M2} {M1}.
➢ Creating master vias for macro pins i.e M5 to M4. The power supply pins for macros are in the M4
layer.
Sanity checks :
check_pg_drc this command gives the drc violations.
ERRORS : the drc errors are formed due to metal shorts and metall spacing issue due to via enclosure
coming out of the metal.
FIXES :
1. metal shorts can be fixed by using connect_pg_net -automatic command to connect all
unconnected power and ground pins based on the power domain connections.
2. Metal spacing issue can be resolved by decreasing the metal spacing while creating the pg mesh
and also fix manually by positioning the vias inside metal.
Check_pg_missing_vias:
check_pg_missing_vias -ignore_small_intersections
➢ This command checks for missing vias between overlapping regions of different metal layers. The
error info can be viewed from the error browser written to a file. You can define via rules to be
checked by writing the rules to a file and importing the file with the -via_rule_file option.
Check_pg_connectivity
➢ This command checks the physical connectivity of the power ground network. The command
generates information for floating wires, vias, pads, macro pins, and standard cell pins. The
information can be viewed by using the error browser. More detailed info can also be written to
file. The command also returns a collection of floating vias and wires. You can easily remove these
floating objects using remove_objects command.
MMMC CORNERS :
➢ There are two different modes in our design, so design has to be checked for timing for each mode.
The two different modes are 1) functional mode and 2)scan mode
➢ In lower technology nodes the minimum width of the metal is less ,so small variation in metal width
due to etching or improper fabrication can cause the delay of the metal ,due to change in RC, so we
have to consider all these variations during manufacturing.
➢ so we have to sign off the design at different RC corners.
➢ closing the design at all the scenarios is difficult and increases our runtime ,so some of the
scenarios are redundant, excluding them based on the design requirements.
➢ We are creating PVT corners and read the parasitic tech files based on RC corners
{Setup-RCworst & Cworst, Hold Cbest & RCbest}
➢ After that we are setting different operating conditions for different scenarios based on creating
worst scenarios for setup and hold requirements.
#creating mode
create_mode func
sanity_check:
get_modes
It gives the created mode list
set b 0
set e 0
set h 0
#creating PVT corners
set x {ss1_0p81v_125c_rcw ss1_0p81v_m40c_cw ff1_0p99v_125c_rcb ff1_0p99v_m40c_cb}
foreach i $x {
create_corner $i
sanity_check:
get_corners
It gives the list of corners created
#creating RC corners
set a {_rcw _cw _rcb _cb}
set d [lindex $a $e]
set y [ lsearch -all -inline [ glob /home/guepd08031susdp21/vnth/synthesis/rp_top_top/pnr/inputs/* ]
*$d* ]
read_parasitic_tech -name $j -tlup $y
incr e
sanity_check:
get_parasitic_techs
➢ It gives the list of loded parasitic tech files of different rc corners.
#creating scenarios
set f {func_setup func_setup func_hold func_hold func_hold }
set g [lindex $f $h]
create_scenario -mode func -corner $i -name $g-$i
incr h
}
sanity_check:
report_scenarios
This command gives the report of modes, corners, active state of setup and hold, maxcap, maxtran,
mincap.
set_scenario_status -setup true -hold false [get_scenarios *setup*]
➢ We are making the setup active for rc worst and c worst corners.
set_scenario_status -setup false -hold true [get_scenarios *hold*]
➢ We are making the hold active for rc best and c best corners.
current_mode func
source ../inputs/rp_top.sdc
➢ For every mode we should read the sdc file.
current_scenario func_setup_ssg0p81vm40c_cw
➢ For every scenario we check the violations using the report_constraints command.
PLACEMENT
➢ Another cause can be unoptimized nets (if there is any don’t touch on the net, then it will cause
setup violations).
FIXES: remove the don’t touch on the particular net and rerun the place_opt.
➢ Another cause can be, if two hierarchy cells have many data paths which are too long, this can also
cause setup violations.
FIXES: create soft bound for the two hierarchies and rerun the place_opt.
➢ Another reason can be if a net is crossing to macros which have no space between them the net
cannot be buffered leading to bad transitions and setup violations.
FIXES: move the macros apart and create a soft blockage between them ,so that there is enough
space to add a buffer.
➢ MAXTRAN and MAXCAP : The max tran and max cap violations can be due to non bufferable
regions,high fanout,lower drive strength cells ,long nets .
FIXES:if the violations are due to long nets then add the buffer, if the violation is due to weak driver
then upsize the driver ,check if max transaction limit is there are not, the violations can be due to
non bufferable regions, if the max cap violations are due to tie cells .then change the tie cell fanout
,to reduce maxcap violations.
➢ ANALYZE_DESIGN_VIOLATIONS -ALL_VIOLATORS ,there are many options in this command like
maxtran, setup, max capacitance. By using this command with a particular option, we can find the
various reasons behind that violation, it will show all categories of violations.
➢ REPORT_QOR This command can be used to get the number of violating paths ,worst negative slack
and total negative slack, and how many paths are violating in each scenario.
➢ First we have to set the target skew for the clock ,the command we can use to specify the target
skew is SET_CLOCK_TREE_OPTIONS TARGET_SKEW < VALUE> -CLOCKS COLLECTION OF CLOCKS.
➢ After setting the target skew,the next step is to update the uncertainty(as uncertainty until cts
contains skew component as well),the uncertainty is decreased by the amount of target skew in the
previous step,for better timing qor target skew can be lower value,the command set clock
uncertainty is to be applied with the switches -setup ,-hold -scenarios ,hold uncertainty can be set
to 30ps.
➢ The next step is to create NDRS for the clock tree routing,the command create_routing_rules with
switches -rules -multiplierspacing and -mutiplierwidth ,generally double width and double spacing
is used.if design demands for shielding for clock tree then the switch -SHEILD can be used.
➢ To set the above created routing rule to the clock tree, set_clock_routing_rules - clocks clk
-max_routing_layer -min_routing_layer -rules is used. The above command not only sets the
routing rule but also provides a restriction to the clock tree as to which layers are permissible.
➢ Next step is to create the CTS references, the cells to remove from this are:- low drive strength cells,
high drive strength. Also if the design contains multiple VT cells, it is preferred for cts that all the
clock cells are of a single VT. Apart from this, the tool needs to be restricted to only the cells that
were designed to be used in clock paths.
set_lib_cell_purpose -exclude cts [get_lib_cells]
set_lib_cell_purpose -include none [get_lib_cells CK*]
set_lib_cell_purpose -include cts [get_lib_cells {CK*4* CK*6* CK*8* CK*12* CK*16*}]
The above commands are used to set the clock tree references.
➢ Declare all the explicit clock tree exceptions if required. The command set_clock_balance_points
can be used to set any explicit clock tree exceptions. The switches determine the clock tree
exceptions (-delay, -consider_for_balancing, - clocks, -balance_points).
➢ Clock skew groups can also be created by using the command create_clock_skew_groups with the
switches –name and –objects.
➢ The final step before running CTS is to activate all the scenarios that might have been disabled
during the previous stages. (Meeting hold is necessary after post CTS).
➢ Run the first two stages of clock_opt (build_clock and route_clock) or the command
synthesize_clock_tree can be used. After this stage, for post-CTS optimization, we include the use of
DEL* cells and D1* cells for hold fixing and running the final stage of clock_opt (final_opto). The
below command can be used for the same.
set_lib_cell_purpose -include hold [get_lib_cells */DEL*]
set_lib_cell_purpose -include hold [get_lib_cells *BUFFD1*]
APP OPTIONS USED :
➢ cts.common.user_instance_name_prefix, this app option is used to specify the prefix that is used
for the cells placed during clock_opt.
➢ clock_opt.flow.enable_ccd, this app options can be modified to enable or disable ccd.
➢ cts.common.max_fanout, this app option mentions the max fanout limit for clock cells.
➢ clock_opt.flow.enable_global_route_opt, this app option is used to enable or disable the global
route stage of the clock_opt.
ROUTING
➢ Before routing can be performed we need to set app options.
➢ If there is a requirement to treat some nets as special nets ,maybe timing critical nets ,the
command route_group can be used . For nets known to be prone to crosstalk, a NDR
(create_routing_rules) and set_routing_rules commands are used for this) can be created with
1w2s and can be routed using this command .
➢ After the routing of clock nets and critical nets, signals can be routed. For routing signal nets ICC2
provides the command ROUTE_OPTO , alternatively routing can be performed in stages, the
commands route_global, route_track, route_detail, route_auto.
PHYSICAL SYNTHESIS