125 lines
4.0 KiB
Tcl
125 lines
4.0 KiB
Tcl
# Test Corner.cc, ClkSkew.cc, WorstSlack.cc, Sim.cc paths
|
|
read_liberty ../../test/nangate45/Nangate45_typ.lib
|
|
read_verilog search_crpr.v
|
|
link_design search_crpr
|
|
|
|
create_clock -name clk -period 10 [get_ports clk]
|
|
set_propagated_clock [get_clocks 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]
|
|
|
|
# Run timing
|
|
report_checks > /dev/null
|
|
|
|
puts "--- Corner commands ---"
|
|
set corner [sta::cmd_corner]
|
|
puts "Corner name: [$corner name]"
|
|
puts "Multi corner: [sta::multi_corner]"
|
|
puts "PASS: corner commands"
|
|
|
|
puts "--- ClkSkew report with propagated clock ---"
|
|
report_clock_skew -setup
|
|
report_clock_skew -hold
|
|
report_clock_skew -setup -include_internal_latency
|
|
report_clock_skew -hold -include_internal_latency
|
|
puts "PASS: clock skew propagated"
|
|
|
|
puts "--- ClkSkew with digits ---"
|
|
report_clock_skew -setup -digits 6
|
|
report_clock_skew -hold -digits 6
|
|
puts "PASS: clock skew digits"
|
|
|
|
puts "--- report_clock_latency ---"
|
|
report_clock_latency
|
|
report_clock_latency -include_internal_latency
|
|
report_clock_latency -digits 6
|
|
puts "PASS: clock latency"
|
|
|
|
puts "--- worst_slack corner-specific ---"
|
|
set corner [sta::cmd_corner]
|
|
set ws_corner [sta::worst_slack_corner $corner max]
|
|
puts "Worst slack corner max: $ws_corner"
|
|
set ws_corner_min [sta::worst_slack_corner $corner min]
|
|
puts "Worst slack corner min: $ws_corner_min"
|
|
puts "PASS: worst_slack corner"
|
|
|
|
puts "--- total_negative_slack corner ---"
|
|
set tns_corner [sta::total_negative_slack_corner_cmd $corner max]
|
|
puts "TNS corner max: $tns_corner"
|
|
set tns_corner_min [sta::total_negative_slack_corner_cmd $corner min]
|
|
puts "TNS corner min: $tns_corner_min"
|
|
puts "PASS: tns corner"
|
|
|
|
puts "--- worst_slack_vertex ---"
|
|
set wv [sta::worst_slack_vertex max]
|
|
if { $wv != "NULL" } {
|
|
puts "Worst vertex pin: [get_full_name [$wv pin]]"
|
|
}
|
|
puts "PASS: worst_slack_vertex"
|
|
|
|
puts "--- vertex_worst_arrival_path ---"
|
|
set wv [sta::worst_slack_vertex max]
|
|
if { $wv != "NULL" } {
|
|
set wpath [sta::vertex_worst_arrival_path $wv max]
|
|
if { $wpath != "NULL" } {
|
|
puts "Worst arrival path pin: [get_full_name [$wpath pin]]"
|
|
puts "Worst arrival: [$wpath arrival]"
|
|
}
|
|
}
|
|
puts "PASS: vertex_worst_arrival_path"
|
|
|
|
puts "--- vertex_worst_slack_path ---"
|
|
set wv [sta::worst_slack_vertex max]
|
|
if { $wv != "NULL" } {
|
|
set wspath [sta::vertex_worst_slack_path $wv max]
|
|
if { $wspath != "NULL" } {
|
|
puts "Worst slack path pin: [get_full_name [$wspath pin]]"
|
|
puts "Worst slack: [$wspath slack]"
|
|
}
|
|
}
|
|
puts "PASS: vertex_worst_slack_path"
|
|
|
|
puts "--- set_case_analysis and sim ---"
|
|
set_case_analysis 0 [get_ports in2]
|
|
report_checks -path_delay max
|
|
set sv [sta::pin_sim_logic_value [get_pins and1/A2]]
|
|
puts "Sim value and1/A2: $sv"
|
|
report_constant [get_ports in2]
|
|
unset_case_analysis [get_ports in2]
|
|
puts "PASS: case_analysis sim"
|
|
|
|
puts "--- set_case_analysis 1 ---"
|
|
set_case_analysis 1 [get_ports in1]
|
|
report_checks -path_delay max
|
|
set sv1 [sta::pin_sim_logic_value [get_pins and1/A1]]
|
|
puts "Sim value and1/A1: $sv1"
|
|
unset_case_analysis [get_ports in1]
|
|
puts "PASS: case_analysis 1"
|
|
|
|
puts "--- report with clock_uncertainty ---"
|
|
set_clock_uncertainty 0.3 -setup [get_clocks clk]
|
|
set_clock_uncertainty 0.1 -hold [get_clocks clk]
|
|
report_checks -path_delay max -format full_clock_expanded
|
|
report_checks -path_delay min -format full_clock_expanded
|
|
report_clock_skew -setup
|
|
report_clock_skew -hold
|
|
unset_clock_uncertainty -setup [get_clocks clk]
|
|
unset_clock_uncertainty -hold [get_clocks clk]
|
|
puts "PASS: clock uncertainty"
|
|
|
|
puts "--- report with set_inter_clock_uncertainty ---"
|
|
set_clock_uncertainty -from [get_clocks clk] -to [get_clocks clk] -setup 0.15
|
|
report_checks -path_delay max -format full_clock_expanded
|
|
unset_clock_uncertainty -from [get_clocks clk] -to [get_clocks clk] -setup
|
|
puts "PASS: inter_clock_uncertainty"
|
|
|
|
puts "--- find_clk_min_period ---"
|
|
set min_period [sta::find_clk_min_period [get_clocks clk] 0]
|
|
puts "Min period: $min_period"
|
|
set min_period_port [sta::find_clk_min_period [get_clocks clk] 1]
|
|
puts "Min period (with port paths): $min_period_port"
|
|
puts "PASS: find_clk_min_period"
|
|
|
|
puts "ALL PASSED"
|