146 lines
5.2 KiB
Tcl
146 lines
5.2 KiB
Tcl
# Test MakeTimingModel.cc: generate timing model, read it back, and run STA
|
|
# on it. Exercises makeTimingModel with clock setup, findTimingFromInputs,
|
|
# findClkedOutputPaths, findClkTreeDelays, makeGateModelScalar,
|
|
# makeEndTimingArcs, saveSdc/restoreSdc, makeLibrary, makeCell, makePorts.
|
|
# Also exercises model output with different designs (latch, CRPR).
|
|
# Targets: MakeTimingModel.cc all major functions,
|
|
# Sta.cc writeTimingModel
|
|
source ../../test/helpers.tcl
|
|
|
|
############################################################
|
|
# Part 1: Model from search_path_end_types (flops with async reset)
|
|
############################################################
|
|
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]
|
|
set_input_transition 0.1 [all_inputs]
|
|
|
|
report_checks -path_delay max > /dev/null
|
|
|
|
puts "--- write_timing_model for search_path_end_types ---"
|
|
set model1 [make_result_file "model_pet.lib"]
|
|
write_timing_model -library_name model_pet_lib -cell_name model_pet $model1
|
|
puts "PASS: write model pet"
|
|
|
|
# Read model back
|
|
puts "--- read back model ---"
|
|
read_liberty $model1
|
|
puts "PASS: read model pet"
|
|
|
|
############################################################
|
|
# Part 2: Model from search_crpr (clock tree reconvergence)
|
|
############################################################
|
|
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]
|
|
set_input_transition 0.1 [all_inputs]
|
|
|
|
report_checks -path_delay max > /dev/null
|
|
|
|
puts "--- write_timing_model for crpr design ---"
|
|
set model2 [make_result_file "model_crpr.lib"]
|
|
write_timing_model -library_name model_crpr_lib -cell_name model_crpr $model2
|
|
puts "PASS: write model crpr"
|
|
|
|
puts "--- read back crpr model ---"
|
|
read_liberty $model2
|
|
puts "PASS: read model crpr"
|
|
|
|
############################################################
|
|
# Part 3: Model from search_latch (latch design)
|
|
############################################################
|
|
read_liberty ../../test/nangate45/Nangate45_typ.lib
|
|
read_verilog search_latch.v
|
|
link_design search_latch
|
|
|
|
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]
|
|
set_output_delay -clock clk 2.0 [get_ports out2]
|
|
set_input_transition 0.1 [all_inputs]
|
|
|
|
report_checks -path_delay max > /dev/null
|
|
|
|
puts "--- write_timing_model for latch design ---"
|
|
set model3 [make_result_file "model_latch.lib"]
|
|
write_timing_model $model3
|
|
puts "PASS: write model latch"
|
|
|
|
puts "--- read back latch model ---"
|
|
read_liberty $model3
|
|
puts "PASS: read model latch"
|
|
|
|
############################################################
|
|
# Part 4: Model from search_test1 (simple flop design)
|
|
############################################################
|
|
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]
|
|
set_input_transition 0.1 [all_inputs]
|
|
|
|
report_checks -path_delay max > /dev/null
|
|
|
|
puts "--- write_timing_model default ---"
|
|
set model4 [make_result_file "model_simple.lib"]
|
|
write_timing_model $model4
|
|
puts "PASS: write model simple"
|
|
|
|
puts "--- write_timing_model with corner ---"
|
|
set corner [sta::cmd_corner]
|
|
set model5 [make_result_file "model_simple_corner.lib"]
|
|
write_timing_model -corner [$corner name] $model5
|
|
puts "PASS: write model corner"
|
|
|
|
# Read model back and use it as a block
|
|
puts "--- read back and use as block ---"
|
|
read_liberty $model4
|
|
puts "PASS: read model simple"
|
|
|
|
############################################################
|
|
# Part 5: write_timing_model on multicorner design
|
|
############################################################
|
|
read_liberty ../../test/nangate45/Nangate45_typ.lib
|
|
read_verilog search_multicorner_analysis.v
|
|
link_design search_multicorner_analysis
|
|
|
|
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 1.0 [get_ports in3]
|
|
set_output_delay -clock clk 2.0 [get_ports out1]
|
|
set_output_delay -clock clk 2.0 [get_ports out2]
|
|
set_input_transition 0.1 [all_inputs]
|
|
|
|
report_checks -path_delay max > /dev/null
|
|
|
|
puts "--- write_timing_model for multicorner analysis ---"
|
|
set model6 [make_result_file "model_multicorner.lib"]
|
|
write_timing_model -library_name mc_lib -cell_name mc_cell $model6
|
|
puts "PASS: write model multicorner"
|
|
|
|
puts "--- read back multicorner model ---"
|
|
read_liberty $model6
|
|
puts "PASS: read model multicorner"
|
|
|
|
puts "ALL PASSED"
|