138 lines
4.2 KiB
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"
|