177 lines
8.0 KiB
Tcl
177 lines
8.0 KiB
Tcl
# Test ReportPath.cc: PathEndPathDelay and PathEndOutputDelay reporting,
|
|
# set_max_delay/set_min_delay path constraints,
|
|
# reportFull/reportShort/reportEndpoint for PathEndPathDelay,
|
|
# reportFull/reportShort/reportEndpoint for PathEndOutputDelay,
|
|
# report various formats for output delay paths,
|
|
# report_checks with -from/-to/-through combinations on path delay,
|
|
# checkRoleString for path delay endpoints.
|
|
# Targets: ReportPath.cc reportFull(PathEndPathDelay),
|
|
# reportShort(PathEndPathDelay), reportEndpoint(PathEndPathDelay),
|
|
# reportFull(PathEndOutputDelay), reportShort(PathEndOutputDelay),
|
|
# reportEndpoint(PathEndOutputDelay), reportEndpointOutputDelay,
|
|
# isPropagated, clkNetworkDelayIdealProp
|
|
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]
|
|
|
|
############################################################
|
|
# Output delay paths with all formats
|
|
############################################################
|
|
puts "--- Output delay path formats ---"
|
|
report_checks -to [get_ports out1] -path_delay max -format full
|
|
report_checks -to [get_ports out1] -path_delay max -format full_clock
|
|
report_checks -to [get_ports out1] -path_delay max -format full_clock_expanded
|
|
report_checks -to [get_ports out1] -path_delay max -format short
|
|
report_checks -to [get_ports out1] -path_delay max -format end
|
|
report_checks -to [get_ports out1] -path_delay max -format summary
|
|
report_checks -to [get_ports out1] -path_delay max -format slack_only
|
|
report_checks -to [get_ports out1] -path_delay max -format json
|
|
|
|
puts "--- Output delay min formats ---"
|
|
report_checks -to [get_ports out1] -path_delay min -format full
|
|
report_checks -to [get_ports out1] -path_delay min -format full_clock
|
|
report_checks -to [get_ports out1] -path_delay min -format full_clock_expanded
|
|
report_checks -to [get_ports out1] -path_delay min -format short
|
|
report_checks -to [get_ports out1] -path_delay min -format end
|
|
report_checks -to [get_ports out1] -path_delay min -format json
|
|
|
|
############################################################
|
|
# Output delay with fields
|
|
############################################################
|
|
puts "--- Output delay with fields ---"
|
|
report_checks -to [get_ports out1] -path_delay max -fields {capacitance slew fanout input_pin net src_attr}
|
|
report_checks -to [get_ports out1] -path_delay min -fields {capacitance slew fanout input_pin net src_attr}
|
|
|
|
############################################################
|
|
# set_max_delay: creates PathEndPathDelay
|
|
############################################################
|
|
puts "--- set_max_delay ---"
|
|
set_max_delay 5.0 -from [get_ports in1] -to [get_ports out1]
|
|
report_checks -path_delay max -format full
|
|
report_checks -path_delay max -format full_clock
|
|
report_checks -path_delay max -format full_clock_expanded
|
|
report_checks -path_delay max -format short
|
|
report_checks -path_delay max -format end
|
|
report_checks -path_delay max -format summary
|
|
report_checks -path_delay max -format json
|
|
report_checks -path_delay max -fields {capacitance slew fanout input_pin net}
|
|
|
|
############################################################
|
|
# set_min_delay
|
|
############################################################
|
|
puts "--- set_min_delay ---"
|
|
set_min_delay 1.0 -from [get_ports in1] -to [get_ports out1]
|
|
report_checks -path_delay min -format full
|
|
report_checks -path_delay min -format full_clock
|
|
report_checks -path_delay min -format full_clock_expanded
|
|
report_checks -path_delay min -format short
|
|
report_checks -path_delay min -format end
|
|
report_checks -path_delay min -format json
|
|
report_checks -path_delay min -fields {capacitance slew fanout}
|
|
|
|
############################################################
|
|
# find_timing_paths with path delay constraints
|
|
############################################################
|
|
puts "--- find_timing_paths with path delay ---"
|
|
set paths_pd [find_timing_paths -path_delay max -endpoint_count 10 -group_path_count 20]
|
|
puts "Max paths: [llength $paths_pd]"
|
|
foreach pe $paths_pd {
|
|
puts " is_path_delay: [$pe is_path_delay] is_output: [$pe is_output_delay] is_check: [$pe is_check] pin=[get_full_name [$pe pin]] slack=[$pe slack]"
|
|
}
|
|
|
|
puts "--- find_timing_paths min with path delay ---"
|
|
set paths_pd_min [find_timing_paths -path_delay min -endpoint_count 10]
|
|
puts "Min paths: [llength $paths_pd_min]"
|
|
foreach pe $paths_pd_min {
|
|
puts " is_path_delay: [$pe is_path_delay] is_output: [$pe is_output_delay] pin=[get_full_name [$pe pin]] slack=[$pe slack]"
|
|
}
|
|
|
|
############################################################
|
|
# Remove path delay constraints
|
|
############################################################
|
|
puts "--- Remove path delay ---"
|
|
unset_path_exceptions -from [get_ports in1] -to [get_ports out1]
|
|
report_checks -path_delay max
|
|
|
|
############################################################
|
|
# set_false_path
|
|
############################################################
|
|
puts "--- set_false_path ---"
|
|
set_false_path -from [get_ports in1] -to [get_ports out1]
|
|
report_checks -path_delay max
|
|
report_checks -path_delay max -unconstrained
|
|
|
|
unset_path_exceptions -from [get_ports in1] -to [get_ports out1]
|
|
report_checks -path_delay max
|
|
|
|
############################################################
|
|
# set_multicycle_path
|
|
############################################################
|
|
puts "--- set_multicycle_path ---"
|
|
set_multicycle_path 2 -setup -from [get_ports in1] -to [get_ports out1]
|
|
report_checks -path_delay max -format full_clock_expanded
|
|
|
|
set_multicycle_path 1 -hold -from [get_ports in1] -to [get_ports out1]
|
|
report_checks -path_delay min -format full_clock_expanded
|
|
|
|
unset_path_exceptions -from [get_ports in1] -to [get_ports out1]
|
|
|
|
############################################################
|
|
# Propagated clock with output delay
|
|
############################################################
|
|
puts "--- Propagated clock output delay ---"
|
|
set_propagated_clock [get_clocks clk]
|
|
report_checks -to [get_ports out1] -path_delay max -format full_clock_expanded -fields {capacitance slew}
|
|
report_checks -to [get_ports out1] -path_delay min -format full_clock_expanded -fields {capacitance slew}
|
|
unset_propagated_clock [get_clocks clk]
|
|
|
|
############################################################
|
|
# Vary output delay and check slack
|
|
############################################################
|
|
puts "--- Output delay variation ---"
|
|
set_output_delay -clock clk 1.0 [get_ports out1]
|
|
set ws1 [sta::worst_slack_cmd max]
|
|
puts "output_delay 1.0: worst_slack=$ws1"
|
|
|
|
set_output_delay -clock clk 5.0 [get_ports out1]
|
|
set ws2 [sta::worst_slack_cmd max]
|
|
puts "output_delay 5.0: worst_slack=$ws2"
|
|
|
|
set_output_delay -clock clk 9.0 [get_ports out1]
|
|
set ws3 [sta::worst_slack_cmd max]
|
|
puts "output_delay 9.0: worst_slack=$ws3"
|
|
|
|
set_output_delay -clock clk 2.0 [get_ports out1]
|
|
|
|
############################################################
|
|
# report_checks with digits and no_line_splits
|
|
############################################################
|
|
puts "--- Output delay digits/no_split ---"
|
|
report_checks -to [get_ports out1] -path_delay max -digits 6 -format full_clock_expanded
|
|
report_checks -to [get_ports out1] -path_delay max -no_line_splits -format full_clock_expanded
|
|
|
|
############################################################
|
|
# PathEnd detailed iteration
|
|
############################################################
|
|
puts "--- PathEnd detail for output delay ---"
|
|
set pe_out [find_timing_paths -to [get_ports out1] -path_delay max]
|
|
foreach pe $pe_out {
|
|
puts "is_output_delay: [$pe is_output_delay]"
|
|
puts "is_check: [$pe is_check]"
|
|
puts "is_path_delay: [$pe is_path_delay]"
|
|
puts "margin: [$pe margin]"
|
|
puts "data_arrival: [$pe data_arrival_time]"
|
|
puts "data_required: [$pe data_required_time]"
|
|
puts "source_clk_offset: [$pe source_clk_offset]"
|
|
puts "target_clk: [get_name [$pe target_clk]]"
|
|
puts "target_clk_time: [$pe target_clk_time]"
|
|
break
|
|
}
|