118 lines
4.5 KiB
Tcl
118 lines
4.5 KiB
Tcl
# Test PathEnum.cc, PathGroup.cc deeper code paths: group_path with various
|
|
# options, path enumeration with endpoints, group naming, slack filtering.
|
|
# Targets: PathGroup.cc makePathEnds, sort, prune, enumPathEnds,
|
|
# PathGroups makeGroups, pushGroupPathEnds, makeGroupPathEnds,
|
|
# Search.cc findPathEnds, visitPathEnds
|
|
source ../../test/helpers.tcl
|
|
|
|
read_liberty ../../test/nangate45/Nangate45_typ.lib
|
|
read_verilog search_path_end_types.v
|
|
link_design search_path_end_types
|
|
|
|
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_input_delay -clock clk 0.5 [get_ports rst]
|
|
set_output_delay -clock clk 2.0 [get_ports out1]
|
|
set_output_delay -clock clk 2.0 [get_ports out2]
|
|
set_output_delay -clock clk 2.0 [get_ports out3]
|
|
|
|
report_checks > /dev/null
|
|
|
|
puts "--- group_path -name with -from and -to ---"
|
|
group_path -name input_paths -from [get_ports {in1 in2}]
|
|
group_path -name output_paths -to [get_ports {out1 out2 out3}]
|
|
group_path -name reg2reg_paths -from [get_pins reg1/CK] -to [get_pins reg2/D]
|
|
|
|
puts "--- report_checks with groups ---"
|
|
report_checks -path_delay max
|
|
|
|
puts "--- find_timing_paths with large group and endpoint counts ---"
|
|
set paths [find_timing_paths -path_delay max -group_path_count 20 -endpoint_path_count 10]
|
|
puts "Found [llength $paths] paths (max)"
|
|
foreach pe $paths {
|
|
puts " [get_full_name [$pe pin]] slack=[$pe slack] role=[$pe check_role]"
|
|
}
|
|
|
|
puts "--- find_timing_paths with min paths ---"
|
|
set paths_min [find_timing_paths -path_delay min -group_path_count 20 -endpoint_path_count 10]
|
|
puts "Found [llength $paths_min] paths (min)"
|
|
foreach pe $paths_min {
|
|
puts " [get_full_name [$pe pin]] slack=[$pe slack]"
|
|
}
|
|
|
|
puts "--- find_timing_paths -sort_by_slack ---"
|
|
set paths_sorted [find_timing_paths -sort_by_slack -path_delay max -group_path_count 20 -endpoint_path_count 10]
|
|
puts "Found [llength $paths_sorted] sorted paths"
|
|
set prev_slack 999999
|
|
set sorted_ok 1
|
|
foreach pe $paths_sorted {
|
|
set s [$pe slack]
|
|
if { $s > $prev_slack } {
|
|
set sorted_ok 0
|
|
}
|
|
set prev_slack $s
|
|
}
|
|
puts "Sort order correct: $sorted_ok"
|
|
|
|
puts "--- find_timing_paths -unique_paths_to_endpoint ---"
|
|
set paths_unique [find_timing_paths -unique_paths_to_endpoint -path_delay max -group_path_count 10 -endpoint_path_count 5]
|
|
puts "Found [llength $paths_unique] unique paths"
|
|
|
|
puts "--- find_timing_paths -slack_max filtering ---"
|
|
set paths_slack [find_timing_paths -path_delay max -slack_max 0.0]
|
|
puts "Paths with slack <= 0: [llength $paths_slack]"
|
|
set paths_slack2 [find_timing_paths -path_delay max -slack_max 100.0]
|
|
puts "Paths with slack <= 100: [llength $paths_slack2]"
|
|
|
|
puts "--- find_timing_paths -slack_min filtering ---"
|
|
set paths_slack3 [find_timing_paths -path_delay max -slack_min -100.0]
|
|
puts "Paths with slack >= -100: [llength $paths_slack3]"
|
|
|
|
puts "--- path_group_names ---"
|
|
set group_names [sta::path_group_names]
|
|
puts "Path group names: $group_names"
|
|
|
|
puts "--- is_path_group_name ---"
|
|
puts "clk is group: [sta::is_path_group_name clk]"
|
|
puts "input_paths is group: [sta::is_path_group_name input_paths]"
|
|
puts "nonexistent is group: [sta::is_path_group_name nonexistent_group]"
|
|
|
|
puts "--- group_path -default ---"
|
|
# group_path -name and -default are mutually exclusive; removed
|
|
|
|
puts "--- report_path_ends ---"
|
|
set pe_list [find_timing_paths -path_delay max -endpoint_path_count 5]
|
|
sta::report_path_end_header
|
|
foreach pe $pe_list {
|
|
sta::report_path_end $pe
|
|
}
|
|
sta::report_path_end_footer
|
|
|
|
puts "--- PathEnd type queries on all paths ---"
|
|
foreach pe $pe_list {
|
|
puts " type: check=[$pe is_check] out=[$pe is_output_delay] unconst=[$pe is_unconstrained] pd=[$pe is_path_delay] latch=[$pe is_latch_check] data=[$pe is_data_check] gated=[$pe is_gated_clock]"
|
|
}
|
|
|
|
puts "--- report_checks -format end with groups ---"
|
|
report_checks -format end -path_delay max
|
|
report_checks -format end -path_delay min
|
|
|
|
puts "--- report_checks -format summary with groups ---"
|
|
report_checks -format summary -path_delay max
|
|
report_checks -format summary -path_delay min
|
|
|
|
puts "--- report_checks -format slack_only with groups ---"
|
|
report_checks -format slack_only -path_delay max
|
|
report_checks -format slack_only -path_delay min
|
|
|
|
puts "--- endpoint_violation_count ---"
|
|
puts "max violations: [sta::endpoint_violation_count max]"
|
|
puts "min violations: [sta::endpoint_violation_count min]"
|
|
|
|
puts "--- startpoints / endpoints ---"
|
|
set starts [sta::startpoints]
|
|
puts "Startpoints: [llength $starts]"
|
|
set ends [sta::endpoints]
|
|
puts "Endpoints: [llength $ends]"
|