# 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" 14 0 report_checks -path_delay max ############################################################ # Report checks min_max variants ############################################################ puts "--- report_checks -path_delay min_max ---" report_checks -path_delay min_max