30 lines
1.3 KiB
Tcl
30 lines
1.3 KiB
Tcl
|
|
# Prima delay calc on degenerate parasitic networks (STA-1752 regression).
|
||
|
|
#
|
||
|
|
# Each buffer output net has both a floating (resistor-less) node and a
|
||
|
|
# zero-resistance short. Either one used to make PrimaDelayCalc's conductance
|
||
|
|
# matrix G singular, raising STA-1752 "G matrix is singular". Single threaded
|
||
|
|
# this surfaced as a Tcl error; multi threaded the error was thrown from a
|
||
|
|
# DispatchQueue worker and aborted with SIGABRT. findNodeCount() now drops
|
||
|
|
# isolated nodes and merges shorted nodes, so the delay is computed correctly.
|
||
|
|
#
|
||
|
|
# This test runs single threaded and checks the reported path. To exercise the
|
||
|
|
# historical multi-threaded crash path set STA_TEST_THREADS to the number of
|
||
|
|
# parallel buffers (2); the run must still complete without aborting. (A BFS
|
||
|
|
# level is dispatched to workers only when its vertex count >= the thread count,
|
||
|
|
# so more threads than buffers runs inline on the main thread.)
|
||
|
|
read_liberty asap7_small.lib.gz
|
||
|
|
read_verilog prima_singular.v
|
||
|
|
link_design top
|
||
|
|
create_clock -name clk -period 500 clk
|
||
|
|
set_input_delay -clock clk 1 [list in0 in1]
|
||
|
|
set_input_transition 10 [list clk in0 in1]
|
||
|
|
set_propagated_clock clk
|
||
|
|
read_spef prima_singular.spef
|
||
|
|
sta::set_delay_calculator prima
|
||
|
|
if { [info exists ::env(STA_TEST_THREADS)] } {
|
||
|
|
sta::set_thread_count $::env(STA_TEST_THREADS)
|
||
|
|
} else {
|
||
|
|
sta::set_thread_count 1
|
||
|
|
}
|
||
|
|
report_checks -group_path_count 1
|