OpenSTA/parasitics/test/parasitics_gcd_spef.tcl

138 lines
4.2 KiB
Tcl

# Test SPEF reading with GCD sky130hd design (large SPEF, different format)
# Targets: SpefReader.cc (large netlist SPEF parsing, sky130 name mapping,
# different SPEF format/vendor, findPinRelative, findPortPinRelative,
# findInstanceRelative, D_NET sections, large *NAME_MAP sections)
# ConcreteParasitics.cc (large parasitic network creation, many nodes/caps/resistors)
# ReduceParasitics.cc (reduction of complex parasitic networks)
# EstimateParasitics.cc (estimation fallback paths)
# Parasitics.cc (various find/make operations with large design)
read_liberty ../../test/sky130hd/sky130_fd_sc_hd__tt_025C_1v80.lib
read_verilog ../../examples/gcd_sky130hd.v
link_design gcd
read_sdc ../../examples/gcd_sky130hd.sdc
#---------------------------------------------------------------
# Baseline without parasitics
#---------------------------------------------------------------
puts "--- baseline ---"
report_checks
puts "PASS: baseline report_checks"
report_checks -path_delay min
puts "PASS: baseline min path"
#---------------------------------------------------------------
# Read SPEF (large sky130 SPEF)
#---------------------------------------------------------------
puts "--- read_spef GCD ---"
read_spef ../../examples/gcd_sky130hd.spef
puts "PASS: read_spef GCD"
#---------------------------------------------------------------
# Report with parasitics
#---------------------------------------------------------------
puts "--- timing with SPEF ---"
report_checks
puts "PASS: report_checks with SPEF"
report_checks -path_delay min
puts "PASS: min path with SPEF"
report_checks -path_delay max
puts "PASS: max path with SPEF"
report_checks -fields {slew cap input_pins nets fanout}
puts "PASS: report with fields"
report_checks -format full_clock
puts "PASS: full_clock format"
report_checks -sort_by_slack
puts "PASS: sort_by_slack"
#---------------------------------------------------------------
# Report parasitic annotation
#---------------------------------------------------------------
puts "--- parasitic annotation ---"
report_parasitic_annotation
puts "PASS: parasitic annotation"
report_parasitic_annotation -report_unannotated
puts "PASS: parasitic annotation unannotated"
#---------------------------------------------------------------
# Report nets
#---------------------------------------------------------------
puts "--- report_net ---"
catch {report_net clk} msg
puts "report_net clk: done"
# Sample some nets from the design
set some_nets [get_nets *]
set net_count [llength $some_nets]
puts "total nets: $net_count"
# Report a few specific nets
foreach net_name {clk reset req_val resp_val} {
catch {report_net $net_name} msg
puts "report_net $net_name: done"
}
catch {report_net -digits 6 clk} msg
puts "report_net -digits 6 clk: done"
#---------------------------------------------------------------
# Try different delay calculators
#---------------------------------------------------------------
puts "--- arnoldi ---"
set_delay_calculator arnoldi
report_checks
puts "PASS: arnoldi report_checks"
report_checks -path_delay min
puts "PASS: arnoldi min"
puts "--- lumped_cap ---"
set_delay_calculator lumped_cap
report_checks
puts "PASS: lumped_cap report_checks"
puts "--- dmp_ceff_two_pole ---"
set_delay_calculator dmp_ceff_two_pole
report_checks
puts "PASS: dmp_ceff_two_pole report_checks"
# Back to default
set_delay_calculator dmp_ceff_elmore
report_checks
puts "PASS: back to default"
#---------------------------------------------------------------
# Annotated delay/check reporting
#---------------------------------------------------------------
puts "--- annotated delay ---"
catch {report_annotated_delay -cell} msg
puts "annotated -cell: done"
catch {report_annotated_delay -net} msg
puts "annotated -net: done"
catch {report_annotated_delay -cell -net} msg
puts "annotated -cell -net: done"
catch {report_annotated_delay -from_in_ports} msg
puts "annotated -from_in_ports: done"
catch {report_annotated_delay -to_out_ports} msg
puts "annotated -to_out_ports: done"
catch {report_annotated_delay -report_annotated} msg
puts "annotated -report_annotated: done"
catch {report_annotated_delay -report_unannotated} msg
puts "annotated -report_unannotated: done"
puts "ALL PASSED"