235 lines
7.7 KiB
Tcl
235 lines
7.7 KiB
Tcl
# Test network editing, slow_drivers, replace_cell, connect/disconnect,
|
|
# parasitic-related functions, annotated delay/slew, and misc Sta.cc paths.
|
|
# Targets: Sta.cc makeInstance, deleteInstance, replaceCell, makeNet,
|
|
# deleteNet, connectPin, disconnectPin, makePortPin,
|
|
# slowDrivers, reportParasiticAnnotation,
|
|
# removeDelaySlewAnnotations, setArcDelay, setAnnotatedSlew,
|
|
# setPortExtPinCap, setPortExtWireCap, setPortExtFanout,
|
|
# setNetWireCap, connectedCap, setResistance,
|
|
# networkChanged, delaysInvalidFrom, replaceEquivCellBefore/After,
|
|
# Search.cc reportArrivals, reportTags, reportClkInfos,
|
|
# reportTagGroups, reportPathCountHistogram
|
|
source ../../test/helpers.tcl
|
|
|
|
read_liberty ../../test/nangate45/Nangate45_typ.lib
|
|
read_verilog search_test1.v
|
|
link_design search_test1
|
|
|
|
create_clock -name clk -period 10 [get_ports clk]
|
|
set_input_delay -clock clk 1.0 [get_ports in1]
|
|
set_input_delay -clock clk 1.0 [get_ports in2]
|
|
set_output_delay -clock clk 2.0 [get_ports out1]
|
|
|
|
# Baseline
|
|
report_checks -path_delay max > /dev/null
|
|
|
|
############################################################
|
|
# slow_drivers
|
|
############################################################
|
|
puts "--- slow_drivers ---"
|
|
set slow [sta::slow_drivers 3]
|
|
puts "slow drivers count: [llength $slow]"
|
|
foreach s $slow {
|
|
puts " [get_full_name $s]"
|
|
}
|
|
|
|
############################################################
|
|
# Port external pin cap / wire cap / fanout
|
|
############################################################
|
|
puts "--- set_load (port ext pin cap) ---"
|
|
set_load -pin_load 0.01 [get_ports out1]
|
|
report_checks -path_delay max
|
|
|
|
puts "--- set_load -wire_load ---"
|
|
set_load -wire_load 0.005 [get_ports out1]
|
|
report_checks -path_delay max
|
|
|
|
puts "--- set_fanout_load ---"
|
|
set_fanout_load 4 [get_ports out1]
|
|
report_checks -path_delay max
|
|
|
|
############################################################
|
|
# Input drive / slew
|
|
############################################################
|
|
puts "--- set_input_transition ---"
|
|
set_input_transition 0.1 [get_ports in1]
|
|
report_checks -path_delay max
|
|
|
|
puts "--- set_drive ---"
|
|
set_drive 100 [get_ports in1]
|
|
report_checks -path_delay max
|
|
|
|
puts "--- set_driving_cell ---"
|
|
set_driving_cell -lib_cell BUF_X1 -pin Z [get_ports in1]
|
|
report_checks -path_delay max
|
|
|
|
############################################################
|
|
# set_net_wire_cap (if net wire delay mode)
|
|
############################################################
|
|
puts "--- set_wire_load_mode ---"
|
|
set_wire_load_mode enclosed
|
|
report_checks -path_delay max
|
|
|
|
############################################################
|
|
# Tag, group, info reporting
|
|
############################################################
|
|
puts "--- report_tags ---"
|
|
sta::report_tags
|
|
|
|
puts "--- report_clk_infos ---"
|
|
sta::report_clk_infos
|
|
|
|
puts "--- report_tag_groups ---"
|
|
sta::report_tag_groups
|
|
|
|
puts "--- report_path_count_histogram ---"
|
|
sta::report_path_count_histogram
|
|
|
|
puts "--- tag/group/path counts ---"
|
|
puts "tags: [sta::tag_count]"
|
|
puts "tag_groups: [sta::tag_group_count]"
|
|
puts "clk_infos: [sta::clk_info_count]"
|
|
puts "paths: [sta::path_count]"
|
|
|
|
############################################################
|
|
# report_tag_arrivals for a vertex
|
|
############################################################
|
|
puts "--- report_tag_arrivals ---"
|
|
set v [sta::worst_slack_vertex max]
|
|
if { $v != "NULL" } {
|
|
sta::report_tag_arrivals_cmd $v 1
|
|
sta::report_tag_arrivals_cmd $v 0
|
|
}
|
|
|
|
############################################################
|
|
# report_arrival_entries / report_required_entries
|
|
############################################################
|
|
puts "--- report_arrival_entries ---"
|
|
sta::report_arrival_entries
|
|
|
|
puts "--- report_required_entries ---"
|
|
sta::report_required_entries
|
|
|
|
############################################################
|
|
# find_requireds
|
|
############################################################
|
|
puts "--- find_requireds ---"
|
|
sta::find_requireds
|
|
|
|
############################################################
|
|
# report_annotated_delay / report_annotated_check
|
|
############################################################
|
|
puts "--- report_annotated_delay ---"
|
|
report_annotated_delay
|
|
|
|
puts "--- report_annotated_check ---"
|
|
report_annotated_check
|
|
|
|
############################################################
|
|
# report_disabled_edges
|
|
############################################################
|
|
puts "--- report_disabled_edges ---"
|
|
report_disabled_edges
|
|
|
|
############################################################
|
|
# Network editing: make_instance, connect, disconnect
|
|
############################################################
|
|
puts "--- network editing ---"
|
|
set edit_net [make_net new_net]
|
|
puts "new_net: [get_full_name $edit_net]"
|
|
|
|
puts "--- make_instance ---"
|
|
set new_inst [make_instance new_buf BUF_X1]
|
|
puts "new_inst: [get_full_name $new_inst]"
|
|
|
|
puts "--- connect_pin ---"
|
|
connect_pin $edit_net new_buf/A
|
|
|
|
connect_pin $edit_net new_buf/Z
|
|
|
|
puts "--- disconnect_pin ---"
|
|
disconnect_pin $edit_net new_buf/Z
|
|
|
|
puts "--- disconnect_pin A ---"
|
|
disconnect_pin $edit_net new_buf/A
|
|
|
|
puts "--- delete_instance ---"
|
|
delete_instance $new_inst
|
|
|
|
puts "--- delete_net ---"
|
|
delete_net $edit_net
|
|
|
|
############################################################
|
|
# replace_cell
|
|
############################################################
|
|
puts "--- replace_cell ---"
|
|
set old_inst [get_cells buf1]
|
|
replace_cell $old_inst BUF_X2
|
|
report_checks -path_delay max
|
|
|
|
puts "--- replace_cell back ---"
|
|
replace_cell $old_inst BUF_X1
|
|
report_checks -path_delay max
|
|
|
|
############################################################
|
|
# write_verilog
|
|
############################################################
|
|
puts "--- write_verilog ---"
|
|
set verilog_out [make_result_file "search_test1_edited.v"]
|
|
write_verilog $verilog_out
|
|
|
|
############################################################
|
|
# write_sdc
|
|
############################################################
|
|
puts "--- write_sdc ---"
|
|
set sdc_out [make_result_file "search_test1_edited.sdc"]
|
|
write_sdc $sdc_out
|
|
|
|
############################################################
|
|
# Vertex arrival/required/slack queries
|
|
############################################################
|
|
puts "--- vertex queries ---"
|
|
set wv [sta::worst_slack_vertex max]
|
|
if { $wv != "NULL" } {
|
|
set warr [sta::vertex_worst_arrival_path $wv max]
|
|
if { $warr != "NULL" } {
|
|
puts "worst_arrival pin: [get_full_name [$warr pin]]"
|
|
puts "worst_arrival arrival: [$warr arrival]"
|
|
}
|
|
set wslk [sta::vertex_worst_slack_path $wv max]
|
|
if { $wslk != "NULL" } {
|
|
puts "worst_slack pin: [get_full_name [$wslk pin]]"
|
|
puts "worst_slack slack: [$wslk slack]"
|
|
}
|
|
}
|
|
|
|
############################################################
|
|
# report_path_end_header/footer
|
|
############################################################
|
|
puts "--- report_path_end header/footer ---"
|
|
# report_path_end_header/footer/2 removed from API
|
|
set pes [find_timing_paths -path_delay max -endpoint_count 3]
|
|
foreach pe $pes {
|
|
sta::report_path_end $pe
|
|
}
|
|
|
|
############################################################
|
|
# report_checks -format json
|
|
############################################################
|
|
puts "--- json format ---"
|
|
report_checks -path_delay max -format json
|
|
|
|
############################################################
|
|
# set_report_path_field_properties (ReportPath.cc)
|
|
############################################################
|
|
puts "--- set_report_path_field_properties ---"
|
|
sta::set_report_path_field_properties "total" "Total" 12 0
|
|
sta::set_report_path_field_width "total" 14
|
|
report_checks -path_delay max
|
|
|
|
############################################################
|
|
# Report checks min_max variants
|
|
############################################################
|
|
puts "--- report_checks -path_delay min_max ---"
|
|
report_checks -path_delay min_max
|