OpenSTA/dcalc/test/dcalc_annotated_incremental...

190 lines
6.7 KiB
Tcl

# Test annotated delays/slews, incremental delay recalculation,
# delay tolerance, capacitance queries, report_net.
# Targets: GraphDelayCalc.cc findDelays incremental, seedInvalidDelays,
# findCheckEdgeDelays, delayInvalid(pin/vertex),
# setIncrementalDelayTolerance, incrementalDelayTolerance,
# loadDelay, netCaps, findVertexDelay,
# Sta.cc setArcDelay, arcDelay, arcDelayAnnotated,
# setAnnotatedSlew, vertexSlew, connectedCap,
# removeDelaySlewAnnotations, delaysInvalidFrom,
# delaysInvalidFromFanin, findDelays,
# DmpCeff.cc various convergence paths with edge-case loads
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog dcalc_multidriver_test.v
link_design dcalc_multidriver_test
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 0 [get_ports {in1 in2 in3 in4 sel}]
set_output_delay -clock clk 0 [get_ports {out1 out2 out3}]
set_input_transition 0.1 [get_ports {in1 in2 in3 in4 sel clk}]
# Baseline
report_checks -path_delay max > /dev/null
############################################################
# Incremental delay tolerance
############################################################
puts "--- setIncrementalDelayTolerance ---"
sta::set_incremental_delay_tolerance 0.01
report_checks -path_delay max
sta::set_incremental_delay_tolerance 0.0
report_checks -path_delay max
sta::set_incremental_delay_tolerance 0.1
report_checks -path_delay max
# Reset
sta::set_incremental_delay_tolerance 0.0
############################################################
# report_net for capacitance queries
############################################################
puts "--- report_net for various nets ---"
report_net n1
report_net n2
report_net n3
report_net n4
report_net n5
report_net n6
report_net n7
report_net n8
############################################################
# report_net with loads
############################################################
puts "--- report_net with loads ---"
set_load 0.05 [get_ports out1]
set_load 0.03 [get_ports out2]
set_load 0.02 [get_ports out3]
report_net n6
report_net n7
report_net n8
############################################################
# report_net with digits
############################################################
puts "--- report_net with digits ---"
report_net -digits 6 n1
report_net -digits 2 n6
############################################################
# Incremental: add wire caps and recompute
############################################################
puts "--- incremental with wire caps ---"
set_load 0.005 [get_nets n1]
report_checks -path_delay max
set_load 0.01 [get_nets n6]
report_checks -path_delay max
############################################################
# Rapid constraint changes for incremental recalculation
############################################################
puts "--- rapid constraint changes ---"
set_load 0.001 [get_ports out1]
report_checks -from [get_ports in1] -to [get_ports out1]
set_load 0.01 [get_ports out1]
report_checks -from [get_ports in1] -to [get_ports out1]
set_load 0.05 [get_ports out1]
report_checks -from [get_ports in1] -to [get_ports out1]
set_load 0.1 [get_ports out1]
report_checks -from [get_ports in1] -to [get_ports out1]
set_load 0.5 [get_ports out1]
report_checks -from [get_ports in1] -to [get_ports out1]
set_load 1.0 [get_ports out1]
report_checks -from [get_ports in1] -to [get_ports out1]
set_load 0 [get_ports out1]
############################################################
# Input transition changes driving incremental
############################################################
puts "--- input transition incremental ---"
foreach slew {0.001 0.005 0.01 0.05 0.1 0.5 1.0 2.0} {
set_input_transition $slew [get_ports in1]
report_checks -from [get_ports in1] -to [get_ports out1]
}
set_input_transition 0.1 [get_ports in1]
############################################################
# Clock period changes
############################################################
puts "--- clock period incremental ---"
create_clock -name clk -period 5 [get_ports clk]
report_checks -path_delay max
create_clock -name clk -period 20 [get_ports clk]
report_checks -path_delay max
create_clock -name clk -period 2 [get_ports clk]
report_checks -path_delay max
create_clock -name clk -period 10 [get_ports clk]
report_checks -path_delay max
############################################################
# Delay calc after adding/removing constraints
############################################################
puts "--- delay calc after constraint changes ---"
set_input_delay -clock clk 2.0 [get_ports in1]
report_checks -from [get_ports in1] -to [get_ports out1]
set_output_delay -clock clk 3.0 [get_ports out1]
report_checks -from [get_ports in1] -to [get_ports out1]
set_input_delay -clock clk 0 [get_ports in1]
set_output_delay -clock clk 0 [get_ports out1]
report_checks -from [get_ports in1] -to [get_ports out1]
############################################################
# Driving cell changes
############################################################
puts "--- driving cell changes ---"
set_driving_cell -lib_cell BUF_X1 [get_ports in1]
report_checks -from [get_ports in1] -to [get_ports out1]
set_driving_cell -lib_cell BUF_X4 [get_ports in1]
report_checks -from [get_ports in1] -to [get_ports out1]
set_driving_cell -lib_cell INV_X1 -pin ZN [get_ports in1]
report_checks -from [get_ports in1] -to [get_ports out1]
############################################################
# read_sdf and annotated delay
############################################################
puts "--- write and read SDF ---"
set sdf_file [file join [pwd] results dcalc_annotated.sdf]
file mkdir results
write_sdf -no_timestamp -no_version $sdf_file
read_sdf $sdf_file
report_checks -path_delay max
report_annotated_delay -list_annotated
report_annotated_check -list_annotated -setup -hold
############################################################
# Remove annotations and recalculate
############################################################
puts "--- remove annotations ---"
sta::remove_delay_slew_annotations
report_checks -path_delay max
############################################################
# Multiple calculator with incremental
############################################################
puts "--- calculator switch incremental ---"
set_delay_calculator dmp_ceff_elmore
set_load 0.05 [get_ports out1]
report_checks -from [get_ports in1] -to [get_ports out1]
set_delay_calculator dmp_ceff_two_pole
report_checks -from [get_ports in1] -to [get_ports out1]
set_delay_calculator lumped_cap
report_checks -from [get_ports in1] -to [get_ports out1]
set_delay_calculator unit
report_checks -from [get_ports in1] -to [get_ports out1]
set_delay_calculator dmp_ceff_elmore
set_load 0 [get_ports out1]