0% found this document useful (0 votes)
91 views

Assignment 4

The document describes an ASIC design lab assignment involving floor planning, placement, and clock tree synthesis using Synopsys tools. Key steps include writing scripts for data preparation, floor planning, placement, power planning, and clock tree synthesis before running commands and checking reports.

Uploaded by

ruchirraval19
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
91 views

Assignment 4

The document describes an ASIC design lab assignment involving floor planning, placement, and clock tree synthesis using Synopsys tools. Key steps include writing scripts for data preparation, floor planning, placement, power planning, and clock tree synthesis before running commands and checking reports.

Uploaded by

ruchirraval19
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 11

ASIC design LAB

Assignment-4 (23MVD0024)
Objective:
To perform floor planning, placement and clock tree synthesis on given design

Aim:
 Perform floor planning on synthesised netlist using icc2 tool
 Perform placement
 Perform clock tree synthesis

Server:
Synopsys server (10.10.5.29)
Tool:
ICC2

Steps:
 Here for floor planning “ndm” (new data model) libraries are used
 Write script file for data preparation
 Source data preparation script to icc2 using GUI mode console window or by
command prompt
 Save the block
 Write script file for floor planning and run command to put macros into the design
 Define the boundaries and shape of die and place macros inside block
 Write macros file and close icc2 editor
 Source created TCL file, now we will have only macros inside die
 Run commands for placement of I/O pins
 Run commands for placement of power rails
 Then place standard cells inside die
 Write script for legalized placement and source it
 Write script for clock tree synthesis and source it

1) Data preparation:
Script:

####### Setting Up Target & Link Libraries #############


source ./1_common_setup.tcl

####### Creating library of the block ########

set link_library $LINK_LIBRARY_FILES


set target_library $TARGET_LIBRARY_FILES

create_lib -ref_libs $NDM_REFERENCE_LIB_DIRS -technology $TECH_FILE ./lib1


ASIC design LAB

#read netlist
read_verilog ../rtl1/report1/ChipTop1_netlist.v

#set current design -top level module name


current_design ChipTop1

#linking library + netlist


link

save_lib -as post_import_design

#defining attributes for metal layers -- HVH (preferable) or VHV


define_user_attribute -type string -name routing_direction -classes routing_rule

#for horizontal
set_attribute -objects [get_layers {M1 M3 M5 M7 M9}] -name routing_direction -value
horizontal

#for vertical
set_attribute -objects [get_layers {M2 M4 M6 M8 MRDL}] -name routing_direction -value
vertical

#reading TLU+ file ---max file


#read_parasitic_tech -tlup
/home/synopsys/SAED14nm_EDK/tech/star_rc/max/saed14nm_1p9m_Cmax.tluplus -
layermap /home/synopsys/#SAED14nm_EDK/tech/star_rc/saed14nm_tf_itf_tluplus.map -
name worst_para

#reading TLU+ file ---max file


read_parasitic_tech -tlup "${DESIGN_REF_PATH}/tech/saed32nm_1p9m_Cmax.lv.tluplus"
-layermap "${DESIGN_REF_PATH}/tech/saed32nm_tf_itf_tluplus.map" -name worst_para

#reading TLU+ file ---min file


read_parasitic_tech -tlup "${DESIGN_REF_PATH}/tech/saed32nm_1p9m_Cmin.lv.tluplus"
-layermap "${DESIGN_REF_PATH}/tech/saed32nm_tf_itf_tluplus.map" -name best_para

#min file
#read_parasitic_tech -tlup
/home/synopsys/SAED14nm_EDK/tech/star_rc/min/saed14nm_1p9m_Cmin.tluplus -
layermap /home/synopsys/#SAED14nm_EDK/tech/star_rc/saed14nm_tf_itf_tluplus.map -
name best_para

source -e -v ./3_mcmm.tcl
save_block -as import_done
save_lib
ASIC design LAB
GUI mode snapshot:

2) Floor plan:
Script:
# SANITY CHECK
#
check_netlist
check_timing
report_design_mismatch -verbose

#########################

initialize_floorplan -side_ratio {1 1} -core_offset {1}

# PLACE PINS
set_block_pin_constraints -self -allowed_layers {M3 M4} -sides 2
place_pins -ports [get_ports -filter direction==out]
set_block_pin_constraints -self -allowed_layers {M3 M4} -sides 4
place_pins -ports [get_ports -filter direction==in]

#placing macros
create_placement -floorplan

set_app_option -name time.disable_recovery_removal_checks -value false


set_app_option -name time.disable_case_analysis -value false

# fix the ports


set_attribute [get_ports *] physical_status fixed
get_attribute [get_ports *] is_fixed
ASIC design LAB
#ADD END CAP cells
set_boundary_cell_rules -top_boundary_cells saed14rvt_tt0p8v125c/SAEDRVT14_CAPT2
-bottom_boundary_cells saed14rvt_tt0p8v125c/SAEDRVT14_CAPB2 -right_boundary_cell
saed14rvt_tt0p8v125c/SAEDRVT14_CAPBIN13 -left_boundary_cell
saed14rvt_tt0p8v125c/SAEDRVT14_CAPBTAP6 -prefix endcap

compile_targeted_boundary_cells -target_objects [get_voltage_areas]

check_legality -cells [get_cells bound*]


#check_legality -cells [get_cells tap*]

save_block -as floorplan_done


#
# ---------Power Plan script starts------------

## create the PG nets


create_net -power VDD
create_net -ground VSS

## Making Logical Connections


connect_pg_net -net VDD [get_pins -hierarchical "*/VDD"]
connect_pg_net -net VSS [get_pins -hierarchical "*/VSS"]

## Setting up the attribute for TIE cells


set_attribute [get_lib_cells */*TIE*] dont_touch false
set_lib_cell_purpose -include optimization [get_lib_cells */*TIE*]

### creating PG Rails


create_pg_mesh_pattern P_top_two -layers { { {horizontal_layer: M9} {width: 0.12}
{spacing: interleaving} {pitch: 4.8} {offset: 1.6} {trim : true} } { {vertical_layer: M8}
{width: 0.12} {spacing: interleaving} {pitch: 4.8} {offset: 1.6} {trim : true} } }

set_pg_strategy S_default_vddvss -core -pattern { {name: P_top_two} {nets:{VSS VDD}}


} -extension { {{stop:design_boundary_and_generate_pin}} }

compile_pg -strategies {S_default_vddvss}

#### Creating Standard cell rails


create_pg_std_cell_conn_pattern std_rail_conn1 -rail_width 0.094 -layers M1

set_pg_strategy std_rail_1 -pattern {{name : std_rail_conn1} {nets: "VDD VSS"}} -core

compile_pg -strategies std_rail_1

#### Creation of Vias b/w rails and PG straps


#create_pg_vias -nets {VDD VSS} -from_layers M1 -to_layers M9 -drc no_check

# Check physical Connectivity of PG nets


ASIC design LAB
check_pg_connectivity

#Check for DRC errors in the design,


check_pg_drc

### saving block


save_block -as powerplan_done

GUI mode snapshots:


After establishing boundary for die:

After inserting I/O pins:


ASIC design LAB
After adding standard cells:

After adding power rails:


ASIC design LAB

3) Placement:
Script:
check_design -checks pre_placement_stage

set_app_options -name place.coarse.continue_on_missing_scandef -value true

##placement density setting


set_app_options -name place.coarse.max_density -value 0.6

#Specify a maximum utilization that controls how densely the tool can place cells in less
congested areas that surround highly congested areas, so
#that the cells in the congested areas can be spread out to reduce the congestion
set_app_options -name place.coarse.congestion_driven_max_util -value 0.6

#to analyze all cells have proper or legal location


analyze_lib_cell_placement -lib_cells *
#for placement of cells
create_placement -floorplan

#set RC delay for timings which were set during "DATA PREPARATION"
set_parasitic_parameters -early_spec best_para
set_parasitic_parameters -late_spec worst_para

check_legality -verbose

legalize_placement

#TIMING REPORT
report_qor -summary

### setting VTH percentage


ASIC design LAB

analyze_design_violations
#for OPTIMIZATION
place_opt -to final_opto
save_block -as placement_done
#TIMING REPORT
report_qor -summary > ./qor.rpt
report_timing > ./timing.rpt

Legalized placement:

4) Clock tree synthesis:


Script:
#Before performing CTS, execute the following command and analyze the report
check_design -checks pre_clock_tree_stage
# set NDR
create_routing_rule clk_rule -widths {M6 0.112 M7 0.112 } -spacings {M6 0.112 M7
0.112 }

#check_clock_tree

# specify clock tree cell list


set_lib_cell_purpose -exclude cts [get_lib_cells]
#set_lib_cell_purpose -include cts [get_lib_cells
"saed14rvt_tt0p8v125c/SAEDRVT14_BUF_S_4
saed14rvt_tt0p8v125c/SAEDRVT14_BUF_S_6
saed14rvt_tt0p8v125c/SAEDRVT14_BUF_S_8"]

set_lib_cell_purpose -include cts [get_lib_cells


"saed32_rvt|saed32_rvt_std/NBUFFX2_RVT saed32_rvt|saed32_rvt_std/NBUFFX4_RVT
saed32_rvt|saed32_rvt_std/NBUFFX8_RVT saed32_rvt|saed32_rvt_std/NBUFFX16_RVT"]
ASIC design LAB

#Specify Max fanout


set_app_options -name cts.common.max_fanout -value 30

# set clock target skew and latency


set_clock_tree_options -clocks [all_clocks] -target_latency 0.050 -target_skew 0.030
#set_clock_tree_options -clocks [get_clocks -filter "is_virtual==false"] -target_latency 0.25
-target_skew 0.03

set_clock_routing_rules -clocks [all_clocks ] -net_type {internal} -rules clk_rule -


min_routing_layer M6 -max_routing_layer M7
set_clock_routing_rules -clocks [all_clocks ] -net_type {root} -rules clk_rule -
min_routing_layer M6 -max_routing_layer M7

clock_opt

# Make the logical connection of PG nets for all the standard cells

connect_pg_net -net VDD [get_pins -hier * -filter "name == VDD"]


connect_pg_net -net VSS [get_pins -hier * -filter "name == VSS"]

save_block -as cts_done

report_constraints -all_violators
report_clock_tree_options
report_clock_qor
report_qor -summary
report_timing -delay_type min
report_timing -delay_type max

Post CTS GUI snapshot:


ASIC design LAB

Final inside view of die:

Timing report:
ASIC design LAB
qor report:

Inference:
In this assignment whole backend flow is carried out on given Chiptop design using icc2 tool.
This flow includes data preparation, floor planning, placement and clock tree synthesis
processes. In this report output of running the script at individual steps are included. After
performing clock tree synthesis there are some violations present in the design which will be
removed later.

You might also like