# Test set_assigned_delay, set_assigned_check, set_assigned_transition commands. # These exercise Sta.cc setArcDelay, setAnnotatedSlew and Search.cc # requiredInvalid, arrivalInvalid code paths through annotated delay/check/slew. # Also tests report_annotated_delay/check with various options. # Targets: Sta.cc setArcDelay, setAnnotatedSlew, setArcDelayAnnotated, # Search.cc requiredInvalid, arrivalInvalid, findClkArrivals 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] # Baseline timing puts "--- Baseline timing ---" report_checks -path_delay max report_checks -path_delay min ############################################################ # set_assigned_delay -cell: exercises setArcDelay on cell arcs # This calls set_arc_delay internally which hits Sta::setArcDelay ############################################################ puts "--- set_assigned_delay -cell for combinational arc ---" set_assigned_delay -cell -from [get_pins and1/A1] -to [get_pins and1/ZN] 0.05 report_checks -path_delay max puts "--- set_assigned_delay -cell -rise ---" set_assigned_delay -cell -rise -from [get_pins buf1/A] -to [get_pins buf1/Z] 0.03 report_checks -path_delay max puts "--- set_assigned_delay -cell -fall ---" set_assigned_delay -cell -fall -from [get_pins buf1/A] -to [get_pins buf1/Z] 0.04 report_checks -path_delay max puts "--- set_assigned_delay -cell -min ---" set_assigned_delay -cell -min -from [get_pins and1/A2] -to [get_pins and1/ZN] 0.01 report_checks -path_delay min puts "--- set_assigned_delay -cell -max ---" set_assigned_delay -cell -max -from [get_pins and1/A2] -to [get_pins and1/ZN] 0.08 report_checks -path_delay max ############################################################ # set_assigned_delay -net: exercises setArcDelay on net arcs ############################################################ puts "--- set_assigned_delay -net ---" set_assigned_delay -net -from [get_pins and1/ZN] -to [get_pins buf1/A] 0.02 report_checks -path_delay max puts "--- set_assigned_delay -net -rise -max ---" set_assigned_delay -net -rise -max -from [get_pins buf1/Z] -to [get_pins reg1/D] 0.015 report_checks -path_delay max ############################################################ # set_assigned_check: exercises setArcDelay on check arcs # This follows the check arc path in set_arc_delay -> Sta::setArcDelay # which calls search_->requiredInvalid ############################################################ puts "--- set_assigned_check -setup ---" set_assigned_check -setup -from [get_pins reg1/CK] -to [get_pins reg1/D] 0.05 report_checks -path_delay max puts "--- set_assigned_check -hold ---" set_assigned_check -hold -from [get_pins reg1/CK] -to [get_pins reg1/D] 0.02 report_checks -path_delay min puts "--- set_assigned_check -setup on reg2 ---" set_assigned_check -setup -from [get_pins reg2/CK] -to [get_pins reg2/D] 0.04 report_checks -path_delay max puts "--- set_assigned_check -hold on reg2 ---" set_assigned_check -hold -from [get_pins reg2/CK] -to [get_pins reg2/D] 0.015 report_checks -path_delay min puts "--- set_assigned_check -recovery ---" set_assigned_check -recovery -from [get_pins reg1/CK] -to [get_pins reg1/RN] 0.06 report_checks -path_delay max puts "--- set_assigned_check -removal ---" set_assigned_check -removal -from [get_pins reg1/CK] -to [get_pins reg1/RN] 0.03 report_checks -path_delay min puts "--- set_assigned_check -setup -rise ---" set_assigned_check -setup -rise -from [get_pins reg1/CK] -to [get_pins reg1/D] 0.055 report_checks -path_delay max puts "--- set_assigned_check -setup -fall ---" set_assigned_check -setup -fall -from [get_pins reg1/CK] -to [get_pins reg1/D] 0.045 report_checks -path_delay max ############################################################ # set_assigned_transition: exercises setAnnotatedSlew ############################################################ puts "--- set_assigned_transition ---" set_assigned_transition 0.1 [get_ports in1] report_checks -path_delay max -fields {slew} puts "--- set_assigned_transition -rise ---" set_assigned_transition -rise 0.08 [get_ports in2] report_checks -path_delay max -fields {slew} puts "--- set_assigned_transition -fall ---" set_assigned_transition -fall 0.12 [get_ports in2] report_checks -path_delay max -fields {slew} puts "--- set_assigned_transition -min ---" set_assigned_transition -min 0.05 [get_ports in1] report_checks -path_delay min -fields {slew} puts "--- set_assigned_transition -max ---" set_assigned_transition -max 0.15 [get_ports in1] report_checks -path_delay max -fields {slew} puts "--- set_assigned_transition on internal pin ---" set_assigned_transition 0.09 [get_pins buf1/Z] report_checks -path_delay max -fields {slew} ############################################################ # report_annotated_delay / report_annotated_check after annotations ############################################################ puts "--- report_annotated_delay ---" report_annotated_delay puts "--- report_annotated_delay -list_annotated ---" report_annotated_delay -list_annotated puts "--- report_annotated_delay -list_not_annotated ---" report_annotated_delay -list_not_annotated puts "--- report_annotated_delay -max_lines 5 ---" report_annotated_delay -list_not_annotated -max_lines 5 puts "--- report_annotated_check ---" report_annotated_check puts "--- report_annotated_check -list_annotated ---" report_annotated_check -list_annotated puts "--- report_annotated_check -list_not_annotated ---" report_annotated_check -list_not_annotated puts "--- report_annotated_check -setup ---" report_annotated_check -setup puts "--- report_annotated_check -hold ---" report_annotated_check -hold ############################################################ # Verify timing is different from baseline after all annotations ############################################################ puts "--- Final timing after all annotations ---" report_checks -path_delay max -format full_clock_expanded report_checks -path_delay min -format full_clock ############################################################ # worst_slack for min paths (exercises worstSlack min in Search.cc) ############################################################ puts "--- worst_slack min ---" set ws_min [worst_slack -min] puts "worst_slack min: $ws_min" set ws_max [worst_slack -max] puts "worst_slack max: $ws_max" puts "--- report_wns/report_tns ---" report_wns -max report_wns -min report_tns -max report_tns -min