Merge pull request #294 from The-OpenROAD-Project-staging/secure-sta-test-by-opus

Add new Tcl and C++ test cases
This commit is contained in:
Matt Liberty 2026-04-02 12:18:17 +00:00 committed by GitHub
commit 29cea73c3d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
748 changed files with 688389 additions and 294 deletions

View File

@ -14,3 +14,20 @@ gtest_discover_tests(TestFindRoot
WORKING_DIRECTORY ${STA_HOME}
PROPERTIES LABELS "cpp\;module_dcalc"
)
add_executable(TestDcalc TestDcalc.cc)
target_link_libraries(TestDcalc
OpenSTA
GTest::gtest
GTest::gtest_main
${TCL_LIBRARY}
)
target_include_directories(TestDcalc PRIVATE
${STA_HOME}/include/sta
${STA_HOME}
${CMAKE_BINARY_DIR}/include/sta
)
gtest_discover_tests(TestDcalc
WORKING_DIRECTORY ${STA_HOME}
PROPERTIES LABELS "cpp\;module_dcalc"
)

4912
dcalc/test/cpp/TestDcalc.cc Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,26 @@
// Design with multi-driver nets and various gate types
// for testing GraphDelayCalc multi-driver net handling
module dcalc_multidriver_test (clk, in1, in2, in3, in4, sel, out1, out2, out3);
input clk, in1, in2, in3, in4, sel;
output out1, out2, out3;
wire n1, n2, n3, n4, n5, n6, n7, n8, n9;
// Chain path 1
BUF_X1 buf1 (.A(in1), .Z(n1));
INV_X1 inv1 (.A(n1), .ZN(n2));
BUF_X2 buf2 (.A(n2), .Z(n3));
// Chain path 2
BUF_X4 buf3 (.A(in2), .Z(n4));
AND2_X1 and1 (.A1(n4), .A2(in3), .ZN(n5));
// Merging paths
OR2_X1 or1 (.A1(n3), .A2(n5), .ZN(n6));
NAND2_X1 nand1 (.A1(n6), .A2(sel), .ZN(n7));
NOR2_X1 nor1 (.A1(n6), .A2(in4), .ZN(n8));
// Output stage with registers
DFF_X1 reg1 (.D(n7), .CK(clk), .Q(out1));
DFF_X1 reg2 (.D(n8), .CK(clk), .Q(out2));
BUF_X1 buf_out (.A(n6), .Z(out3));
endmodule

9
dcalc/test/dcalc_test1.v Normal file
View File

@ -0,0 +1,9 @@
module dcalc_test1 (clk, in1, out1);
input clk, in1;
output out1;
wire n1, n2;
BUF_X1 buf1 (.A(in1), .Z(n1));
INV_X1 inv1 (.A(n1), .ZN(n2));
DFF_X1 reg1 (.D(n2), .CK(clk), .Q(out1));
endmodule

View File

@ -1,6 +1,16 @@
sta_module_tests("graph"
TESTS
advanced
bidirect
delay_corners
delete_modify
incremental
make_verify
modify
operations
timing_edges
vertex_edge_ops
wire_inst_edges
)
add_subdirectory(cpp)

View File

@ -0,0 +1,454 @@
--- report_checks baseline ---
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ q (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)
--- report_checks -path_delay min ---
Startpoint: reg1 (rising edge-triggered flip-flop clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: min
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg1/CK (DFF_X1)
0.08 0.08 v reg1/Q (DFF_X1)
0.00 0.08 v reg2/D (DFF_X1)
0.08 data arrival time
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 clock reconvergence pessimism
0.00 ^ reg2/CK (DFF_X1)
0.00 0.00 library hold time
0.00 data required time
---------------------------------------------------------
0.00 data required time
-0.08 data arrival time
---------------------------------------------------------
0.08 slack (MET)
--- report_checks -path_delay max ---
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ q (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)
--- report_checks -from/-to ---
No paths found.
--- report_checks -through ---
Startpoint: reg1 (rising edge-triggered flip-flop clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg1/CK (DFF_X1)
0.08 0.08 v reg1/Q (DFF_X1)
0.00 0.08 v reg2/D (DFF_X1)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.04 9.96 library setup time
9.96 data required time
---------------------------------------------------------
9.96 data required time
-0.08 data arrival time
---------------------------------------------------------
9.88 slack (MET)
--- get_timing_edges full combinations ---
reg1 all edges: 1
reg2 all edges: 1
--- report_edges for cells ---
CK -> Q Reg Clk to Q
^ -> ^ 0.08:0.08
^ -> v 0.08:0.08
CK -> Q Reg Clk to Q
^ -> ^ 0.08:0.08
^ -> v 0.08:0.08
CK -> QN Reg Clk to Q
^ -> ^ 0.06:0.06
^ -> v 0.06:0.06
CK -> Q Reg Clk to Q
^ -> ^ 0.08:0.08
^ -> v 0.08:0.08
CK -> CK width
^ -> v 0.05:0.05
v -> ^ 0.05:0.05
CK -> D setup
^ -> ^ 0.05:0.05
^ -> v 0.07:0.07
CK -> D hold
^ -> ^ 0.05:0.05
^ -> v 0.05:0.05
CK -> D setup
^ -> ^ 0.03:0.03
^ -> v 0.04:0.04
CK -> D hold
^ -> ^ 0.01:0.01
^ -> v 0.00:0.00
reg1/Q -> D wire
^ -> ^ 0.00:0.00
v -> v 0.00:0.00
--- disable_timing on port pin ---
reg1 CK Q constraint
reg2 CK Q constraint
Startpoint: d (input port clocked by clk)
Endpoint: reg1 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d (in)
0.00 1.00 v reg1/D (DFF_X1)
1.00 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg1/CK (DFF_X1)
-0.07 9.93 library setup time
9.93 data required time
---------------------------------------------------------
9.93 data required time
-1.00 data arrival time
---------------------------------------------------------
8.93 slack (MET)
--- set_disable_timing instance and back ---
reg1 CK Q constraint
reg1 CK QN constraint
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ q (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ q (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)
--- report_slews for various pins ---
d ^ 0.10:0.10 v 0.10:0.10
q ^ 0.01:0.01 v 0.00:0.00
reg1/CK ^ 0.00:0.00 v 0.00:0.00
reg1/Q ^ 0.01:0.01 v 0.01:0.01
reg2/D ^ 0.01:0.01 v 0.01:0.01
--- report_check_types ---
Startpoint: reg1 (rising edge-triggered flip-flop clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: min
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg1/CK (DFF_X1)
0.08 0.08 v reg1/Q (DFF_X1)
0.00 0.08 v reg2/D (DFF_X1)
0.08 data arrival time
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 clock reconvergence pessimism
0.00 ^ reg2/CK (DFF_X1)
0.00 0.00 library hold time
0.00 data required time
---------------------------------------------------------
0.00 data required time
-0.08 data arrival time
---------------------------------------------------------
0.08 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ q (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)
--- report_checks with -format ---
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ q (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)
--- report_checks -unconstrained ---
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ q (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)
--- report_checks -group_count 2 ---
Warning 503: graph_advanced.tcl line 1, report_checks -group_count is deprecated. Use -group_path_count instead.
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ q (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)
Startpoint: d (input port clocked by clk)
Endpoint: reg1 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d (in)
0.00 1.00 v reg1/D (DFF_X1)
1.00 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg1/CK (DFF_X1)
-0.07 9.93 library setup time
9.93 data required time
---------------------------------------------------------
9.93 data required time
-1.00 data arrival time
---------------------------------------------------------
8.93 slack (MET)
--- report_checks -endpoint_count 2 ---
Warning 502: graph_advanced.tcl line 1, report_checks -endpoint_count is deprecated. Use -endpoint_path_count instead.
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ q (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 v reg2/Q (DFF_X1)
0.00 0.08 v q (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)

View File

@ -0,0 +1,107 @@
# Test advanced graph operations: multiple-instance design, edge traversal,
# and graph info queries.
# Targets uncovered Graph.cc functions: vertex operations, edge iterators,
# constant propagation, level reporting, etc.
source ../../test/helpers.tcl
#---------------------------------------------------------------
# Load a larger design for more graph coverage
#---------------------------------------------------------------
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog graph_test1.v
link_design graph_test1
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 1.0 [get_ports d]
set_output_delay -clock clk 1.0 [get_ports q]
set_input_transition 0.1 [get_ports d]
#---------------------------------------------------------------
# report_checks exercises graph traversal
#---------------------------------------------------------------
puts "--- report_checks baseline ---"
report_checks
puts "--- report_checks -path_delay min ---"
report_checks -path_delay min
puts "--- report_checks -path_delay max ---"
report_checks -path_delay max
puts "--- report_checks -from/-to ---"
report_checks -from [get_ports d] -to [get_ports q]
puts "--- report_checks -through ---"
report_checks -through [get_pins reg1/Q]
#---------------------------------------------------------------
# Edge queries (Graph.cc edge functions)
#---------------------------------------------------------------
puts "--- get_timing_edges full combinations ---"
set edges_all [get_timing_edges -of_objects [get_cells reg1]]
puts "reg1 all edges: [llength $edges_all]"
set edges_all2 [get_timing_edges -of_objects [get_cells reg2]]
puts "reg2 all edges: [llength $edges_all2]"
puts "--- report_edges for cells ---"
report_edges -from [get_pins reg1/CK] -to [get_pins reg1/Q]
report_edges -from [get_pins reg2/CK] -to [get_pins reg2/Q]
report_edges -from [get_pins reg1/CK]
report_edges -to [get_pins reg2/D]
#---------------------------------------------------------------
# set_disable_timing / report_disabled_edges exercises more paths
#---------------------------------------------------------------
puts "--- disable_timing on port pin ---"
set_disable_timing -from CK -to Q [get_lib_cells NangateOpenCellLibrary/DFF_X1]
report_disabled_edges
report_checks
unset_disable_timing -from CK -to Q [get_lib_cells NangateOpenCellLibrary/DFF_X1]
report_disabled_edges
puts "--- set_disable_timing instance and back ---"
set_disable_timing [get_cells reg1]
report_disabled_edges
report_checks
unset_disable_timing [get_cells reg1]
report_disabled_edges
report_checks
#---------------------------------------------------------------
# Slew reporting (exercises vertex slew access)
#---------------------------------------------------------------
puts "--- report_slews for various pins ---"
report_slews [get_ports d]
report_slews [get_ports q]
report_slews [get_pins reg1/CK]
report_slews [get_pins reg1/Q]
report_slews [get_pins reg2/D]
#---------------------------------------------------------------
# Graph verification
#---------------------------------------------------------------
puts "--- report_check_types ---"
report_check_types -max_delay -min_delay -verbose
puts "--- report_checks with -format ---"
report_checks -format full_clock
puts "--- report_checks -unconstrained ---"
report_checks -unconstrained
#---------------------------------------------------------------
# Additional graph traversals (exercises more vertex/edge paths)
#---------------------------------------------------------------
puts "--- report_checks -group_count 2 ---"
report_checks -group_count 2
puts "--- report_checks -endpoint_count 2 ---"
report_checks -endpoint_count 2

View File

@ -0,0 +1,943 @@
--- Test 1: graph with reconvergent paths ---
Startpoint: d1 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 v input external delay
0.00 0.00 v d1 (in)
0.06 0.06 v buf1/Z (BUF_X1)
0.05 0.10 v or1/ZN (OR2_X1)
0.03 0.13 v and2/ZN (AND2_X1)
0.00 0.13 v reg2/D (DFF_X1)
0.13 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.04 9.96 library setup time
9.96 data required time
---------------------------------------------------------
9.96 data required time
-0.13 data arrival time
---------------------------------------------------------
9.83 slack (MET)
Startpoint: d4 (input port clocked by clk)
Endpoint: reg3 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: min
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ input external delay
0.00 0.00 ^ d4 (in)
0.01 0.01 v inv2/ZN (INV_X1)
0.02 0.03 ^ nand1/ZN (NAND2_X1)
0.02 0.05 ^ or2/ZN (OR2_X1)
0.00 0.05 ^ reg3/D (DFF_X1)
0.05 data arrival time
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 clock reconvergence pessimism
0.00 ^ reg3/CK (DFF_X1)
0.00 0.00 library hold time
0.00 data required time
---------------------------------------------------------
0.00 data required time
-0.05 data arrival time
---------------------------------------------------------
0.05 slack (MET)
--- Test 2: path queries ---
No paths found.
No paths found.
No paths found.
No paths found.
No paths found.
No paths found.
No paths found.
--- Test 3: report with fields ---
Warning 168: graph_bidirect.tcl line 1, unknown field nets.
Startpoint: d1 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Fanout Cap Slew Delay Time Description
-----------------------------------------------------------------------------
0.00 0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 v input external delay
1 0.88 0.10 0.00 0.00 v d1 (in)
0.10 0.00 0.00 v buf1/A (BUF_X1)
2 1.67 0.01 0.06 0.06 v buf1/Z (BUF_X1)
0.01 0.00 0.06 v or1/A1 (OR2_X1)
2 1.96 0.01 0.05 0.10 v or1/ZN (OR2_X1)
0.01 0.00 0.10 v and2/A2 (AND2_X1)
1 1.06 0.01 0.03 0.13 v and2/ZN (AND2_X1)
0.01 0.00 0.13 v reg2/D (DFF_X1)
0.13 data arrival time
0.00 10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.04 9.96 library setup time
9.96 data required time
-----------------------------------------------------------------------------
9.96 data required time
-0.13 data arrival time
-----------------------------------------------------------------------------
9.83 slack (MET)
Startpoint: d1 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 v input external delay
0.00 0.00 v d1 (in)
0.06 0.06 v buf1/Z (BUF_X1)
0.05 0.10 v or1/ZN (OR2_X1)
0.03 0.13 v and2/ZN (AND2_X1)
0.00 0.13 v reg2/D (DFF_X1)
0.13 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.04 9.96 library setup time
9.96 data required time
---------------------------------------------------------
9.96 data required time
-0.13 data arrival time
---------------------------------------------------------
9.83 slack (MET)
Startpoint: d4 (input port clocked by clk)
Endpoint: reg3 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: min
Cap Slew Delay Time Description
-----------------------------------------------------------------------
0.00 0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ input external delay
1.70 0.10 0.00 0.00 ^ d4 (in)
3.07 0.02 0.01 0.01 v inv2/ZN (INV_X1)
0.95 0.01 0.02 0.03 ^ nand1/ZN (NAND2_X1)
1.14 0.01 0.02 0.05 ^ or2/ZN (OR2_X1)
0.01 0.00 0.05 ^ reg3/D (DFF_X1)
0.05 data arrival time
0.00 0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 clock reconvergence pessimism
0.00 ^ reg3/CK (DFF_X1)
0.00 0.00 library hold time
0.00 data required time
-----------------------------------------------------------------------
0.00 data required time
-0.05 data arrival time
-----------------------------------------------------------------------
0.05 slack (MET)
--- Test 4: fanin/fanout ---
fanin to q2: 3
fanout from d1: 13
fanin cells to q2: 2
fanout cells from d1: 8
fanin to q3: 3
fanout from d3: 14
--- Test 5: report_dcalc ---
Library: NangateOpenCellLibrary
Cell: BUF_X1
Arc sense: positive_unate
Arc type: combinational
A ^ -> Z ^
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.10
| total_output_net_capacitance = 1.86
| 0.37 1.90
v --------------------
0.08 | 0.03 0.03
0.13 | 0.03 0.04
Table value = 0.03
PVT scale factor = 1.00
Delay = 0.03
------- input_net_transition = 0.10
| total_output_net_capacitance = 1.86
| 0.37 1.90
v --------------------
0.08 | 0.01 0.01
0.13 | 0.01 0.01
Table value = 0.01
PVT scale factor = 1.00
Slew = 0.01
Driver waveform slew = 0.01
.............................................
A v -> Z v
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.10
| total_output_net_capacitance = 1.67
| 0.37 1.90
v --------------------
0.08 | 0.05 0.05
0.13 | 0.06 0.07
Table value = 0.06
PVT scale factor = 1.00
Delay = 0.06
------- input_net_transition = 0.10
| total_output_net_capacitance = 1.67
| 0.37 1.90
v --------------------
0.08 | 0.01 0.01
0.13 | 0.01 0.01
Table value = 0.01
PVT scale factor = 1.00
Slew = 0.01
Driver waveform slew = 0.01
.............................................
dcalc buf1: done
Library: NangateOpenCellLibrary
Cell: AND2_X1
Arc sense: positive_unate
Arc type: combinational
A1 ^ -> ZN ^
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.01
| total_output_net_capacitance = 2.06
| 1.89 3.79
v --------------------
0.00 | 0.03 0.03
0.02 | 0.03 0.04
Table value = 0.03
PVT scale factor = 1.00
Delay = 0.03
------- input_net_transition = 0.01
| total_output_net_capacitance = 2.06
| 1.89 3.79
v --------------------
0.00 | 0.01 0.01
0.02 | 0.01 0.01
Table value = 0.01
PVT scale factor = 1.00
Slew = 0.01
Driver waveform slew = 0.01
.............................................
A1 v -> ZN v
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.01
| total_output_net_capacitance = 1.94
| 1.89 3.79
v --------------------
0.00 | 0.03 0.03
0.02 | 0.03 0.04
Table value = 0.03
PVT scale factor = 1.00
Delay = 0.03
------- input_net_transition = 0.01
| total_output_net_capacitance = 1.94
| 1.89 3.79
v --------------------
0.00 | 0.01 0.01
0.02 | 0.01 0.01
Table value = 0.01
PVT scale factor = 1.00
Slew = 0.01
Driver waveform slew = 0.01
.............................................
dcalc and1 A1: done
Library: NangateOpenCellLibrary
Cell: AND2_X1
Arc sense: positive_unate
Arc type: combinational
A2 ^ -> ZN ^
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.01
| total_output_net_capacitance = 2.06
| 1.89 3.79
v --------------------
0.00 | 0.03 0.04
0.02 | 0.03 0.04
Table value = 0.03
PVT scale factor = 1.00
Delay = 0.03
------- input_net_transition = 0.01
| total_output_net_capacitance = 2.06
| 1.89 3.79
v --------------------
0.00 | 0.01 0.01
0.02 | 0.01 0.01
Table value = 0.01
PVT scale factor = 1.00
Slew = 0.01
Driver waveform slew = 0.01
.............................................
A2 v -> ZN v
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.01
| total_output_net_capacitance = 1.94
| 1.89 3.79
v --------------------
0.00 | 0.03 0.03
0.02 | 0.04 0.04
Table value = 0.03
PVT scale factor = 1.00
Delay = 0.03
------- input_net_transition = 0.01
| total_output_net_capacitance = 1.94
| 1.89 3.79
v --------------------
0.00 | 0.01 0.01
0.02 | 0.01 0.01
Table value = 0.01
PVT scale factor = 1.00
Slew = 0.01
Driver waveform slew = 0.01
.............................................
dcalc and1 A2: done
Library: NangateOpenCellLibrary
Cell: OR2_X1
Arc sense: positive_unate
Arc type: combinational
A1 ^ -> ZN ^
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.01
| total_output_net_capacitance = 2.11
| 1.89 3.79
v --------------------
0.00 | 0.02 0.03
0.02 | 0.03 0.03
Table value = 0.02
PVT scale factor = 1.00
Delay = 0.02
------- input_net_transition = 0.01
| total_output_net_capacitance = 2.11
| 1.89 3.79
v --------------------
0.00 | 0.01 0.01
0.02 | 0.01 0.01
Table value = 0.01
PVT scale factor = 1.00
Slew = 0.01
Driver waveform slew = 0.01
.............................................
A1 v -> ZN v
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.01
| total_output_net_capacitance = 1.96
| 1.89 3.79
v --------------------
0.00 | 0.04 0.05
0.02 | 0.05 0.05
Table value = 0.05
PVT scale factor = 1.00
Delay = 0.05
------- input_net_transition = 0.01
| total_output_net_capacitance = 1.96
| 1.89 3.79
v --------------------
0.00 | 0.01 0.01
0.02 | 0.01 0.01
Table value = 0.01
PVT scale factor = 1.00
Slew = 0.01
Driver waveform slew = 0.01
.............................................
dcalc or1 A1: done
Library: NangateOpenCellLibrary
Cell: NAND2_X1
Arc sense: negative_unate
Arc type: combinational
A1 ^ -> ZN v
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.01
| total_output_net_capacitance = 0.79
| 0.37 1.85
v --------------------
0.00 | 0.01 0.01
0.02 | 0.01 0.02
Table value = 0.01
PVT scale factor = 1.00
Delay = 0.01
------- input_net_transition = 0.01
| total_output_net_capacitance = 0.79
| 0.37 1.85
v --------------------
0.00 | 0.00 0.01
0.02 | 0.01 0.01
Table value = 0.01
PVT scale factor = 1.00
Slew = 0.01
Driver waveform slew = 0.01
.............................................
A1 v -> ZN ^
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.01
| total_output_net_capacitance = 0.95
| 0.37 1.85
v --------------------
0.00 | 0.01 0.01
0.02 | 0.01 0.02
Table value = 0.01
PVT scale factor = 1.00
Delay = 0.01
------- input_net_transition = 0.01
| total_output_net_capacitance = 0.95
| 0.37 1.85
v --------------------
0.00 | 0.00 0.01
0.02 | 0.01 0.01
Table value = 0.01
PVT scale factor = 1.00
Slew = 0.01
Driver waveform slew = 0.01
.............................................
dcalc nand1: done
Library: NangateOpenCellLibrary
Cell: NOR2_X1
Arc sense: negative_unate
Arc type: combinational
A1 ^ -> ZN v
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.02
| total_output_net_capacitance = 0.90
| 0.83 1.67
v --------------------
0.02 | 0.01 0.01
0.04 | 0.01 0.01
Table value = 0.01
PVT scale factor = 1.00
Delay = 0.01
------- input_net_transition = 0.02
| total_output_net_capacitance = 0.90
| 0.83 1.67
v --------------------
0.02 | 0.01 0.01
0.04 | 0.01 0.01
Table value = 0.01
PVT scale factor = 1.00
Slew = 0.01
Driver waveform slew = 0.01
.............................................
A1 v -> ZN ^
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.02
| total_output_net_capacitance = 0.94
| 0.83 1.67
v --------------------
0.02 | 0.02 0.03
0.04 | 0.03 0.04
Table value = 0.02
PVT scale factor = 1.00
Delay = 0.02
------- input_net_transition = 0.02
| total_output_net_capacitance = 0.94
| 0.83 1.67
v --------------------
0.02 | 0.01 0.02
0.04 | 0.02 0.02
Table value = 0.01
PVT scale factor = 1.00
Slew = 0.01
Driver waveform slew = 0.01
.............................................
dcalc nor1: done
Library: NangateOpenCellLibrary
Cell: DFF_X1
Arc sense: non_unate
Arc type: Reg Clk to Q
CK ^ -> Q ^
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.00
| total_output_net_capacitance = 0.00
| 0.37 1.90
v --------------------
0.00 | 0.08 0.09
0.00 | 0.08 0.09
Table value = 0.08
PVT scale factor = 1.00
Delay = 0.08
------- input_net_transition = 0.00
| total_output_net_capacitance = 0.00
| 0.37 1.90
v --------------------
0.00 | 0.01 0.01
0.00 | 0.01 0.01
Table value = 0.01
PVT scale factor = 1.00
Slew = 0.01
Driver waveform slew = 0.01
.............................................
CK ^ -> Q v
P = 1.00 V = 1.10 T = 25.00
------- input_net_transition = 0.00
| total_output_net_capacitance = 0.00
| 0.37 1.90
v --------------------
0.00 | 0.08 0.08
0.00 | 0.08 0.08
Table value = 0.08
PVT scale factor = 1.00
Delay = 0.08
------- input_net_transition = 0.00
| total_output_net_capacitance = 0.00
| 0.37 1.90
v --------------------
0.00 | 0.01 0.01
0.00 | 0.01 0.01
Table value = 0.00
PVT scale factor = 1.00
Slew = 0.00
Driver waveform slew = 0.00
.............................................
dcalc reg1: done
--- Test 6: network queries ---
total pins: 50
total nets: 19
Net n1
Pin capacitance: 1.67-1.86
Wire capacitance: 0.00
Total capacitance: 1.67-1.86
Number of drivers: 1
Number of loads: 2
Number of pins: 3
Driver pins
buf1/Z output (BUF_X1)
Load pins
and1/A1 input (AND2_X1) 0.87-0.92
or1/A1 input (OR2_X1) 0.79-0.95
Net n2
Pin capacitance: 2.42-2.57
Wire capacitance: 0.00
Total capacitance: 2.42-2.57
Number of drivers: 1
Number of loads: 2
Number of pins: 3
Driver pins
buf2/Z output (BUF_X1)
Load pins
and1/A2 input (AND2_X1) 0.89-0.97
nand1/A1 input (NAND2_X1) 1.53-1.60
Net n3
Pin capacitance: 2.31-2.66
Wire capacitance: 0.00
Total capacitance: 2.31-2.66
Number of drivers: 1
Number of loads: 2
Number of pins: 3
Driver pins
inv1/ZN output (INV_X1)
Load pins
nor1/A1 input (NOR2_X1) 1.41-1.71
or1/A2 input (OR2_X1) 0.90-0.94
Net n4
Pin capacitance: 3.07-3.32
Wire capacitance: 0.00
Total capacitance: 3.07-3.32
Number of drivers: 1
Number of loads: 2
Number of pins: 3
Driver pins
inv2/ZN output (INV_X1)
Load pins
nand1/A2 input (NAND2_X1) 1.50-1.66
nor1/A2 input (NOR2_X1) 1.56-1.65
Net n5
Pin capacitance: 1.94-2.06
Wire capacitance: 0.00
Total capacitance: 1.94-2.06
Number of drivers: 1
Number of loads: 2
Number of pins: 3
Driver pins
and1/ZN output (AND2_X1)
Load pins
and2/A1 input (AND2_X1) 0.87-0.92
reg1/D input (DFF_X1) 1.06-1.14
Net n6
Pin capacitance: 1.96-2.11
Wire capacitance: 0.00
Total capacitance: 1.96-2.11
Number of drivers: 1
Number of loads: 2
Number of pins: 3
Driver pins
or1/ZN output (OR2_X1)
Load pins
and2/A2 input (AND2_X1) 0.89-0.97
reg4/D input (DFF_X1) 1.06-1.14
Net n7
Pin capacitance: 0.79-0.95
Wire capacitance: 0.00
Total capacitance: 0.79-0.95
Number of drivers: 1
Number of loads: 1
Number of pins: 2
Driver pins
nand1/ZN output (NAND2_X1)
Load pins
or2/A1 input (OR2_X1) 0.79-0.95
Net n8
Pin capacitance: 0.90-0.94
Wire capacitance: 0.00
Total capacitance: 0.90-0.94
Number of drivers: 1
Number of loads: 1
Number of pins: 2
Driver pins
nor1/ZN output (NOR2_X1)
Load pins
or2/A2 input (OR2_X1) 0.90-0.94
Net n9
Pin capacitance: 1.06-1.14
Wire capacitance: 0.00
Total capacitance: 1.06-1.14
Number of drivers: 1
Number of loads: 1
Number of pins: 2
Driver pins
and2/ZN output (AND2_X1)
Load pins
reg2/D input (DFF_X1) 1.06-1.14
Net n10
Pin capacitance: 1.06-1.14
Wire capacitance: 0.00
Total capacitance: 1.06-1.14
Number of drivers: 1
Number of loads: 1
Number of pins: 2
Driver pins
or2/ZN output (OR2_X1)
Load pins
reg3/D input (DFF_X1) 1.06-1.14
Instance buf1
Cell: BUF_X1
Library: NangateOpenCellLibrary
Path cells: BUF_X1
Input pins:
A input d1
Output pins:
Z output n1
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
Instance buf2
Cell: BUF_X1
Library: NangateOpenCellLibrary
Path cells: BUF_X1
Input pins:
A input d2
Output pins:
Z output n2
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
Instance inv1
Cell: INV_X1
Library: NangateOpenCellLibrary
Path cells: INV_X1
Input pins:
A input d3
Output pins:
ZN output n3
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
Instance inv2
Cell: INV_X1
Library: NangateOpenCellLibrary
Path cells: INV_X1
Input pins:
A input d4
Output pins:
ZN output n4
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
Instance and1
Cell: AND2_X1
Library: NangateOpenCellLibrary
Path cells: AND2_X1
Input pins:
A1 input n1
A2 input n2
Output pins:
ZN output n5
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
Instance or1
Cell: OR2_X1
Library: NangateOpenCellLibrary
Path cells: OR2_X1
Input pins:
A1 input n1
A2 input n3
Output pins:
ZN output n6
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
Instance nand1
Cell: NAND2_X1
Library: NangateOpenCellLibrary
Path cells: NAND2_X1
Input pins:
A1 input n2
A2 input n4
Output pins:
ZN output n7
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
Instance nor1
Cell: NOR2_X1
Library: NangateOpenCellLibrary
Path cells: NOR2_X1
Input pins:
A1 input n3
A2 input n4
Output pins:
ZN output n8
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
Instance and2
Cell: AND2_X1
Library: NangateOpenCellLibrary
Path cells: AND2_X1
Input pins:
A1 input n5
A2 input n6
Output pins:
ZN output n9
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
Instance or2
Cell: OR2_X1
Library: NangateOpenCellLibrary
Path cells: OR2_X1
Input pins:
A1 input n7
A2 input n8
Output pins:
ZN output n10
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
Instance reg1
Cell: DFF_X1
Library: NangateOpenCellLibrary
Path cells: DFF_X1
Input pins:
D input n5
CK input clk
Output pins:
Q output q1
QN output (unconnected)
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
IQ internal (unconnected)
IQN internal (unconnected)
Instance reg2
Cell: DFF_X1
Library: NangateOpenCellLibrary
Path cells: DFF_X1
Input pins:
D input n9
CK input clk
Output pins:
Q output q2
QN output (unconnected)
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
IQ internal (unconnected)
IQN internal (unconnected)
Instance reg3
Cell: DFF_X1
Library: NangateOpenCellLibrary
Path cells: DFF_X1
Input pins:
D input n10
CK input clk
Output pins:
Q output q3
QN output (unconnected)
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
IQ internal (unconnected)
IQN internal (unconnected)
Instance reg4
Cell: DFF_X1
Library: NangateOpenCellLibrary
Path cells: DFF_X1
Input pins:
D input n6
CK input clk
Output pins:
Q output q4
QN output (unconnected)
Other pins:
VDD power (unconnected)
VSS ground (unconnected)
IQ internal (unconnected)
IQN internal (unconnected)
--- Test 7: modify graph ---
Startpoint: d1 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 v input external delay
0.00 0.00 v d1 (in)
0.06 0.06 v buf1/Z (BUF_X1)
0.05 0.10 v or1/ZN (OR2_X1)
0.03 0.13 v and2/ZN (AND2_X1)
0.00 0.13 v reg2/D (DFF_X1)
0.13 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.04 9.96 library setup time
9.96 data required time
---------------------------------------------------------
9.96 data required time
-0.13 data arrival time
---------------------------------------------------------
9.83 slack (MET)
Startpoint: d1 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 v input external delay
0.00 0.00 v d1 (in)
0.06 0.06 v buf1/Z (BUF_X1)
0.05 0.10 v or1/ZN (OR2_X1)
0.03 0.13 v and2/ZN (AND2_X1)
0.00 0.13 v reg2/D (DFF_X1)
0.13 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.04 9.96 library setup time
9.96 data required time
---------------------------------------------------------
9.96 data required time
-0.13 data arrival time
---------------------------------------------------------
9.83 slack (MET)

View File

@ -0,0 +1,129 @@
# Test graph construction with bidirectional pins, reconvergent paths,
# and various edge/vertex operations.
source ../../test/helpers.tcl
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog graph_bidirect.v
link_design graph_bidirect
#---------------------------------------------------------------
# Test 1: Graph construction and basic timing
#---------------------------------------------------------------
puts "--- Test 1: graph with reconvergent paths ---"
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 0 [get_ports {d1 d2 d3 d4}]
set_output_delay -clock clk 0 [get_ports {q1 q2 q3 q4}]
set_input_transition 0.1 [get_ports {d1 d2 d3 d4 clk}]
report_checks
report_checks -path_delay min
#---------------------------------------------------------------
# Test 2: Multiple path queries (exercises graph traversal)
#---------------------------------------------------------------
puts "--- Test 2: path queries ---"
report_checks -from [get_ports d1] -to [get_ports q1]
report_checks -from [get_ports d1] -to [get_ports q2]
report_checks -from [get_ports d2] -to [get_ports q1]
report_checks -from [get_ports d3] -to [get_ports q3]
report_checks -from [get_ports d4] -to [get_ports q3]
report_checks -from [get_ports d1] -to [get_ports q4]
report_checks -from [get_ports d3] -to [get_ports q4]
#---------------------------------------------------------------
# Test 3: Fields that exercise graph delay/slew queries
#---------------------------------------------------------------
puts "--- Test 3: report with fields ---"
report_checks -fields {slew cap input_pins nets fanout}
report_checks -format full_clock
report_checks -path_delay min -fields {slew cap}
#---------------------------------------------------------------
# Test 4: Fanin/fanout queries through reconvergent paths
#---------------------------------------------------------------
puts "--- Test 4: fanin/fanout ---"
set fi [get_fanin -to [get_ports q2] -flat]
puts "fanin to q2: [llength $fi]"
set fo [get_fanout -from [get_ports d1] -flat]
puts "fanout from d1: [llength $fo]"
set fi_cells [get_fanin -to [get_ports q2] -only_cells]
puts "fanin cells to q2: [llength $fi_cells]"
set fo_cells [get_fanout -from [get_ports d1] -only_cells]
puts "fanout cells from d1: [llength $fo_cells]"
set fi_q3 [get_fanin -to [get_ports q3] -flat]
puts "fanin to q3: [llength $fi_q3]"
set fo_d3 [get_fanout -from [get_ports d3] -flat]
puts "fanout from d3: [llength $fo_d3]"
#---------------------------------------------------------------
# Test 5: report_dcalc exercises graph edge arc queries
#---------------------------------------------------------------
puts "--- Test 5: report_dcalc ---"
report_dcalc -from [get_pins buf1/A] -to [get_pins buf1/Z] -max
puts "dcalc buf1: done"
report_dcalc -from [get_pins and1/A1] -to [get_pins and1/ZN] -max
puts "dcalc and1 A1: done"
report_dcalc -from [get_pins and1/A2] -to [get_pins and1/ZN] -max
puts "dcalc and1 A2: done"
report_dcalc -from [get_pins or1/A1] -to [get_pins or1/ZN] -max
puts "dcalc or1 A1: done"
report_dcalc -from [get_pins nand1/A1] -to [get_pins nand1/ZN] -max
puts "dcalc nand1: done"
report_dcalc -from [get_pins nor1/A1] -to [get_pins nor1/ZN] -max
puts "dcalc nor1: done"
report_dcalc -from [get_pins reg1/CK] -to [get_pins reg1/Q] -max
puts "dcalc reg1: done"
#---------------------------------------------------------------
# Test 6: Graph vertex/edge counts
#---------------------------------------------------------------
puts "--- Test 6: network queries ---"
set all_pins [get_pins */*]
puts "total pins: [llength $all_pins]"
set all_nets [get_nets *]
puts "total nets: [llength $all_nets]"
foreach net_name {n1 n2 n3 n4 n5 n6 n7 n8 n9 n10} {
report_net $net_name
}
foreach inst_name {buf1 buf2 inv1 inv2 and1 or1 nand1 nor1 and2 or2 reg1 reg2 reg3 reg4} {
report_instance $inst_name
}
#---------------------------------------------------------------
# Test 7: Add and remove instances (exercises deleteVertex, graph modify)
#---------------------------------------------------------------
puts "--- Test 7: modify graph ---"
set new_net [make_net test_net]
set new_inst [make_instance test_buf BUF_X1]
connect_pin test_net test_buf/A
report_checks
disconnect_pin test_net test_buf/A
delete_instance test_buf
delete_net test_net
report_checks

View File

@ -0,0 +1,29 @@
// Design with bidirectional ports and reconvergent paths
// for testing graph bidirect vertex/edge handling
module graph_bidirect (clk, d1, d2, d3, d4, q1, q2, q3, q4);
input clk, d1, d2, d3, d4;
output q1, q2, q3, q4;
wire n1, n2, n3, n4, n5, n6, n7, n8, n9, n10;
// Fan-out from d1 and d2
BUF_X1 buf1 (.A(d1), .Z(n1));
BUF_X1 buf2 (.A(d2), .Z(n2));
INV_X1 inv1 (.A(d3), .ZN(n3));
INV_X1 inv2 (.A(d4), .ZN(n4));
// Reconvergent logic
AND2_X1 and1 (.A1(n1), .A2(n2), .ZN(n5));
OR2_X1 or1 (.A1(n1), .A2(n3), .ZN(n6));
NAND2_X1 nand1 (.A1(n2), .A2(n4), .ZN(n7));
NOR2_X1 nor1 (.A1(n3), .A2(n4), .ZN(n8));
// Second level reconvergence
AND2_X1 and2 (.A1(n5), .A2(n6), .ZN(n9));
OR2_X1 or2 (.A1(n7), .A2(n8), .ZN(n10));
// Registers
DFF_X1 reg1 (.D(n5), .CK(clk), .Q(q1));
DFF_X1 reg2 (.D(n9), .CK(clk), .Q(q2));
DFF_X1 reg3 (.D(n10), .CK(clk), .Q(q3));
DFF_X1 reg4 (.D(n6), .CK(clk), .Q(q4));
endmodule

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,159 @@
# Test graph delay value comparison and multi-corner graph operations.
# Targets: DelayFloat.cc/Graph.cc/GraphCmp.cc multi-corner delay paths.
source ../../test/helpers.tcl
#---------------------------------------------------------------
# Multi-corner setup for graph coverage
#---------------------------------------------------------------
define_corners fast slow
read_liberty -corner fast ../../test/nangate45/Nangate45_fast.lib
read_liberty -corner slow ../../test/nangate45/Nangate45_slow.lib
read_verilog graph_test2.v
link_design graph_test2
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 1.0 [get_ports {d1 d2 en}]
set_output_delay -clock clk 1.0 [get_ports {q1 q2}]
set_input_transition 0.1 [get_ports {d1 d2 en}]
#---------------------------------------------------------------
# Multi-corner timing reports (exercises delay value comparison
# across min/max analysis points in Graph)
#---------------------------------------------------------------
puts "--- fast corner ---"
report_checks -corner fast
report_checks -corner fast -path_delay min
report_checks -corner fast -path_delay max
puts "--- slow corner ---"
report_checks -corner slow
report_checks -corner slow -path_delay min
report_checks -corner slow -path_delay max
#---------------------------------------------------------------
# Multi-corner report_dcalc (exercises delay subtraction/comparison)
#---------------------------------------------------------------
puts "--- report_dcalc per corner ---"
report_dcalc -corner fast -from [get_pins buf1/A] -to [get_pins buf1/Z]
puts "fast buf1 dcalc: done"
report_dcalc -corner slow -from [get_pins buf1/A] -to [get_pins buf1/Z]
puts "slow buf1 dcalc: done"
report_dcalc -corner fast -from [get_pins inv1/A] -to [get_pins inv1/ZN]
puts "fast inv1 dcalc: done"
report_dcalc -corner slow -from [get_pins inv1/A] -to [get_pins inv1/ZN]
puts "slow inv1 dcalc: done"
report_dcalc -corner fast -from [get_pins and1/A1] -to [get_pins and1/ZN]
puts "fast and1 A1 dcalc: done"
report_dcalc -corner slow -from [get_pins and1/A1] -to [get_pins and1/ZN]
puts "slow and1 A1 dcalc: done"
report_dcalc -corner fast -from [get_pins or1/A1] -to [get_pins or1/ZN]
puts "fast or1 A1 dcalc: done"
report_dcalc -corner slow -from [get_pins or1/A1] -to [get_pins or1/ZN]
puts "slow or1 A1 dcalc: done"
# DFF arcs
report_dcalc -corner fast -from [get_pins reg1/CK] -to [get_pins reg1/Q] -max
puts "fast reg1 CK->Q: done"
report_dcalc -corner slow -from [get_pins reg1/CK] -to [get_pins reg1/Q] -max
puts "slow reg1 CK->Q: done"
report_dcalc -corner fast -from [get_pins reg1/CK] -to [get_pins reg1/D] -max
puts "fast reg1 setup: done"
report_dcalc -corner slow -from [get_pins reg1/CK] -to [get_pins reg1/D] -min
puts "slow reg1 hold: done"
#---------------------------------------------------------------
# report_checks with fields across corners (exercises graph slew access)
#---------------------------------------------------------------
puts "--- report_checks with fields ---"
report_checks -corner fast -fields {slew cap input_pins}
report_checks -corner slow -fields {slew cap input_pins}
report_checks -corner fast -format full_clock
report_checks -corner slow -format full_clock
#---------------------------------------------------------------
# Multi-corner paths (different paths in fast vs slow)
#---------------------------------------------------------------
puts "--- multi-corner paths ---"
report_checks -corner fast -from [get_ports d1] -to [get_ports q1]
report_checks -corner slow -from [get_ports d1] -to [get_ports q1]
report_checks -corner fast -from [get_ports d2] -to [get_ports q2]
report_checks -corner slow -from [get_ports d2] -to [get_ports q2]
report_checks -corner fast -from [get_ports en] -to [get_ports q1]
report_checks -corner slow -from [get_ports en] -to [get_ports q1]
#---------------------------------------------------------------
# Edge queries with multi-corner
#---------------------------------------------------------------
puts "--- timing edges multi-corner ---"
set e1 [get_timing_edges -of_objects [get_cells and1]]
puts "and1 edges: [llength $e1]"
set e2 [get_timing_edges -of_objects [get_cells or1]]
puts "or1 edges: [llength $e2]"
set e3 [get_timing_edges -of_objects [get_cells reg1]]
puts "reg1 edges: [llength $e3]"
report_edges -from [get_pins and1/A1] -to [get_pins and1/ZN]
report_edges -from [get_pins and1/A2] -to [get_pins and1/ZN]
report_edges -from [get_pins or1/A1] -to [get_pins or1/ZN]
report_edges -from [get_pins or1/A2] -to [get_pins or1/ZN]
#---------------------------------------------------------------
# Load changes with multi-corner (exercises delay recomputation)
#---------------------------------------------------------------
puts "--- load changes multi-corner ---"
set_load 0.01 [get_ports q1]
set_load 0.05 [get_ports q2]
report_checks -corner fast
report_checks -corner slow
set_load 0 [get_ports q1]
set_load 0 [get_ports q2]
#---------------------------------------------------------------
# report_checks -unconstrained multi-corner
#---------------------------------------------------------------
puts "--- unconstrained multi-corner ---"
report_checks -corner fast -unconstrained
report_checks -corner slow -unconstrained
#---------------------------------------------------------------
# Disable/enable with multi-corner
#---------------------------------------------------------------
puts "--- disable with multi-corner ---"
set_disable_timing [get_cells buf1]
report_checks -corner fast
report_checks -corner slow
unset_disable_timing [get_cells buf1]
report_checks -corner fast
report_checks -corner slow

View File

@ -0,0 +1,726 @@
--- Test 1: baseline ---
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d3 (input port clocked by clk)
Endpoint: reg3 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: min
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 ^ input external delay
0.00 1.00 ^ d3 (in)
0.01 1.01 v inv1/ZN (INV_X1)
0.03 1.04 ^ nor1/ZN (NOR2_X1)
0.00 1.04 ^ reg3/D (DFF_X1)
1.04 data arrival time
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 clock reconvergence pessimism
0.00 ^ reg3/CK (DFF_X1)
0.01 0.01 library hold time
0.01 data required time
---------------------------------------------------------
0.01 data required time
-1.04 data arrival time
---------------------------------------------------------
1.03 slack (MET)
Warning 168: graph_delete_modify.tcl line 1, unknown field nets.
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Fanout Cap Slew Delay Time Description
-----------------------------------------------------------------------------
0.00 0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
1 0.88 0.10 0.00 1.00 v d2 (in)
0.10 0.00 1.00 v buf2/A (BUF_X1)
2 1.69 0.01 0.06 1.06 v buf2/Z (BUF_X1)
0.01 0.00 1.06 v or1/A1 (OR2_X1)
2 2.56 0.01 0.05 1.11 v or1/ZN (OR2_X1)
0.01 0.00 1.11 v nand1/A2 (NAND2_X1)
1 1.14 0.01 0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.01 0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
0.00 10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
-----------------------------------------------------------------------------
9.97 data required time
-1.12 data arrival time
-----------------------------------------------------------------------------
8.85 slack (MET)
--- Test 2: add/delete multiple instances ---
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
--- Test 3: replace_cell ---
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
A -> Z combinational
^ -> ^ 0.03:0.03
v -> v 0.05:0.05
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
--- Test 4: add/delete register ---
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
--- Test 5: rapid connect/disconnect ---
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
cycle 1 done
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
cycle 2 done
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
cycle 3 done
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
--- Test 6: edge queries ---
buf1 edges: 1
buf2 edges: 1
inv1 edges: 1
and1 edges: 1
or1 edges: 1
nand1 edges: 1
nor1 edges: 1
reg1 edges: 1
reg2 edges: 1
reg3 edges: 1
reg4 edges: 1
d1 ^ 0.10:0.10 v 0.10:0.10
d2 ^ 0.10:0.10 v 0.10:0.10
d3 ^ 0.10:0.10 v 0.10:0.10
buf1/Z ^ 0.01:0.01 v 0.01:0.01
and1/ZN ^ 0.01:0.01 v 0.01:0.01
reg1/Q ^ 0.01:0.01 v 0.00:0.00
--- Test 7: through pins ---
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
through nand1: done
Startpoint: d2 (input port clocked by clk)
Endpoint: reg3 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.04 1.09 v and1/ZN (AND2_X1)
0.02 1.11 ^ nor1/ZN (NOR2_X1)
0.00 1.11 ^ reg3/D (DFF_X1)
1.11 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg3/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.11 data arrival time
---------------------------------------------------------
8.85 slack (MET)
through nor1: done
Startpoint: d2 (input port clocked by clk)
Endpoint: reg3 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.04 1.09 v and1/ZN (AND2_X1)
0.02 1.11 ^ nor1/ZN (NOR2_X1)
0.00 1.11 ^ reg3/D (DFF_X1)
1.11 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg3/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.11 data arrival time
---------------------------------------------------------
8.85 slack (MET)
through and1: done

View File

@ -0,0 +1,191 @@
# Test graph modification: add/delete vertices via connect_pin/disconnect_pin,
# delete_instance, replace_cell, and repeated graph rebuild.
# Targets:
# Graph.cc: deleteVertex, deleteInEdge, deleteOutEdge,
# makePinVertices, makeVertex, makeWireEdgesFromPin (multi-driver),
# hasFaninOne, makeInstEdges after replace_cell,
# removeWireEdge, removeInstEdge on disconnect/reconnect,
# reg_clk_vertices_ insert/erase on add/delete reg
source ../../test/helpers.tcl
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog graph_delete_modify.v
link_design graph_delete_modify
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 1.0 [get_ports {d1 d2 d3 rst}]
set_output_delay -clock clk 1.0 [get_ports {q1 q2 q3 q4}]
set_input_transition 0.1 [get_ports {d1 d2 d3 rst clk}]
#---------------------------------------------------------------
# Test 1: Baseline timing
#---------------------------------------------------------------
puts "--- Test 1: baseline ---"
report_checks
report_checks -path_delay min
report_checks -fields {slew cap input_pins nets fanout}
#---------------------------------------------------------------
# Test 2: Add multiple instances and nets, then delete
# Exercises: makeVertex, makeWireEdgesFromPin, deleteVertex,
# deleteInEdge, deleteOutEdge
#---------------------------------------------------------------
puts "--- Test 2: add/delete multiple instances ---"
# Add a buffer chain
set net_a [make_net test_net_a]
set net_b [make_net test_net_b]
set net_c [make_net test_net_c]
set inst_a [make_instance test_buf_a NangateOpenCellLibrary/BUF_X1]
set inst_b [make_instance test_buf_b NangateOpenCellLibrary/BUF_X2]
connect_pin test_net_a test_buf_a/A
connect_pin test_net_b test_buf_a/Z
connect_pin test_net_b test_buf_b/A
connect_pin test_net_c test_buf_b/Z
report_checks
# Disconnect middle and verify
disconnect_pin test_net_b test_buf_b/A
report_checks
# Reconnect
connect_pin test_net_b test_buf_b/A
report_checks
# Full cleanup
disconnect_pin test_net_a test_buf_a/A
disconnect_pin test_net_b test_buf_a/Z
disconnect_pin test_net_b test_buf_b/A
disconnect_pin test_net_c test_buf_b/Z
delete_instance test_buf_a
delete_instance test_buf_b
delete_net test_net_a
delete_net test_net_b
delete_net test_net_c
report_checks
#---------------------------------------------------------------
# Test 3: Replace cell multiple times
# Exercises: makeInstEdges rebuild, edge arc changes
#---------------------------------------------------------------
puts "--- Test 3: replace_cell ---"
replace_cell buf1 NangateOpenCellLibrary/BUF_X4
report_checks
report_edges -from [get_pins buf1/A] -to [get_pins buf1/Z]
replace_cell buf1 NangateOpenCellLibrary/BUF_X2
report_checks
replace_cell buf1 NangateOpenCellLibrary/BUF_X1
report_checks
replace_cell and1 NangateOpenCellLibrary/AND2_X2
report_checks
replace_cell and1 NangateOpenCellLibrary/AND2_X1
report_checks
replace_cell inv1 NangateOpenCellLibrary/INV_X2
report_checks
replace_cell inv1 NangateOpenCellLibrary/INV_X1
report_checks
#---------------------------------------------------------------
# Test 4: Add and delete register instances
# Exercises: reg_clk_vertices_ insert/erase in makeVertex/deleteVertex
#---------------------------------------------------------------
puts "--- Test 4: add/delete register ---"
set reg_net [make_net reg_test_net]
set reg_qnet [make_net reg_test_qnet]
set reg_inst [make_instance test_reg NangateOpenCellLibrary/DFF_X1]
connect_pin reg_test_net test_reg/D
connect_pin reg_test_qnet test_reg/Q
# Connect clock to new register
set clk_net_name "clk"
connect_pin $clk_net_name test_reg/CK
report_checks
# Remove the register
disconnect_pin $clk_net_name test_reg/CK
disconnect_pin reg_test_net test_reg/D
disconnect_pin reg_test_qnet test_reg/Q
delete_instance test_reg
delete_net reg_test_net
delete_net reg_test_qnet
report_checks
#---------------------------------------------------------------
# Test 5: Rapid connect/disconnect on same pin
# Exercises: edge create/delete cycling
#---------------------------------------------------------------
puts "--- Test 5: rapid connect/disconnect ---"
set tmp_net [make_net tmp_net]
set tmp_inst [make_instance tmp_buf NangateOpenCellLibrary/BUF_X1]
# Cycle 1
connect_pin tmp_net tmp_buf/A
report_checks
disconnect_pin tmp_net tmp_buf/A
puts "cycle 1 done"
# Cycle 2
connect_pin tmp_net tmp_buf/A
report_checks
disconnect_pin tmp_net tmp_buf/A
puts "cycle 2 done"
# Cycle 3
connect_pin tmp_net tmp_buf/A
report_checks
disconnect_pin tmp_net tmp_buf/A
puts "cycle 3 done"
delete_instance tmp_buf
delete_net tmp_net
report_checks
#---------------------------------------------------------------
# Test 6: Edge queries after all modifications
#---------------------------------------------------------------
puts "--- Test 6: edge queries ---"
foreach cell_name {buf1 buf2 inv1 and1 or1 nand1 nor1 reg1 reg2 reg3 reg4} {
set edges [get_timing_edges -of_objects [get_cells $cell_name]]
puts "$cell_name edges: [llength $edges]"
}
# Slew queries
report_slews [get_ports d1]
report_slews [get_ports d2]
report_slews [get_ports d3]
report_slews [get_pins buf1/Z]
report_slews [get_pins and1/ZN]
report_slews [get_pins reg1/Q]
#---------------------------------------------------------------
# Test 7: Through-pin paths
#---------------------------------------------------------------
puts "--- Test 7: through pins ---"
report_checks -through [get_pins nand1/ZN]
puts "through nand1: done"
report_checks -through [get_pins nor1/ZN]
puts "through nor1: done"
report_checks -through [get_pins and1/ZN]
puts "through and1: done"

View File

@ -0,0 +1,29 @@
// Design for testing graph delete/modify operations:
// makeVertex/deleteVertex through connect_pin/disconnect_pin/delete_instance,
// replace_cell with different pin counts, multi-fanout nets,
// and reconvergent paths that exercise edge deletion.
module graph_delete_modify (clk, d1, d2, d3, rst, q1, q2, q3, q4);
input clk, d1, d2, d3, rst;
output q1, q2, q3, q4;
wire n1, n2, n3, n4, n5, n6, n7, n8;
// Chain: d1 -> buf1 -> n1 -> and1 -> n5
BUF_X1 buf1 (.A(d1), .Z(n1));
// Chain: d2 -> buf2 -> n2 -> and1, or1 (multi-fanout)
BUF_X1 buf2 (.A(d2), .Z(n2));
// Chain: d3 -> inv1 -> n3 -> or1
INV_X1 inv1 (.A(d3), .ZN(n3));
AND2_X1 and1 (.A1(n1), .A2(n2), .ZN(n5));
OR2_X1 or1 (.A1(n2), .A2(n3), .ZN(n6));
// Second stage
NAND2_X1 nand1 (.A1(n5), .A2(n6), .ZN(n7));
NOR2_X1 nor1 (.A1(n5), .A2(n3), .ZN(n8));
// Registers with reset
DFF_X1 reg1 (.D(n5), .CK(clk), .Q(q1));
DFF_X1 reg2 (.D(n7), .CK(clk), .Q(q2));
DFF_X1 reg3 (.D(n8), .CK(clk), .Q(q3));
DFF_X1 reg4 (.D(n6), .CK(clk), .Q(q4));
endmodule

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,182 @@
# Test graph incremental changes, constant propagation, and level reporting.
# Targets: Graph.cc/GraphCmp.cc/DelayFloat.cc graph update and traversal paths.
source ../../test/helpers.tcl
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog graph_test2.v
link_design graph_test2
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 1.0 [get_ports d1]
set_input_delay -clock clk 1.0 [get_ports d2]
set_input_delay -clock clk 0 [get_ports en]
set_output_delay -clock clk 1.0 [get_ports q1]
set_output_delay -clock clk 1.0 [get_ports q2]
set_input_transition 0.1 [get_ports {d1 d2 en}]
#---------------------------------------------------------------
# Baseline timing
#---------------------------------------------------------------
puts "--- baseline report_checks ---"
report_checks
report_checks -path_delay min
report_checks -path_delay max
#---------------------------------------------------------------
# Multiple paths through design
#---------------------------------------------------------------
puts "--- multiple paths ---"
report_checks -from [get_ports d1] -to [get_ports q1]
report_checks -from [get_ports d1] -to [get_ports q2]
report_checks -from [get_ports d2] -to [get_ports q2]
report_checks -from [get_ports en] -to [get_ports q1]
report_checks -from [get_ports en] -to [get_ports q2]
#---------------------------------------------------------------
# -through paths (exercises graph traversal)
#---------------------------------------------------------------
puts "--- through paths ---"
report_checks -through [get_pins inv1/ZN]
puts "through inv1/ZN: done"
report_checks -through [get_pins and1/ZN]
puts "through and1/ZN: done"
report_checks -through [get_pins or1/ZN]
puts "through or1/ZN: done"
report_checks -through [get_pins buf3/Z]
puts "through buf3/Z: done"
#---------------------------------------------------------------
# Timing edge queries for multi-input cells
#---------------------------------------------------------------
puts "--- timing edges for multi-input cells ---"
set edges_and [get_timing_edges -of_objects [get_cells and1]]
puts "and1 edges: [llength $edges_and]"
set edges_or [get_timing_edges -of_objects [get_cells or1]]
puts "or1 edges: [llength $edges_or]"
set edges_reg1 [get_timing_edges -of_objects [get_cells reg1]]
puts "reg1 edges: [llength $edges_reg1]"
set edges_reg2 [get_timing_edges -of_objects [get_cells reg2]]
puts "reg2 edges: [llength $edges_reg2]"
# From/to specific pins
set edges_ft [get_timing_edges -from [get_pins and1/A1] -to [get_pins and1/ZN]]
puts "and1 A1->ZN edges: [llength $edges_ft]"
set edges_ft2 [get_timing_edges -from [get_pins and1/A2] -to [get_pins and1/ZN]]
puts "and1 A2->ZN edges: [llength $edges_ft2]"
set edges_ft3 [get_timing_edges -from [get_pins or1/A1] -to [get_pins or1/ZN]]
puts "or1 A1->ZN edges: [llength $edges_ft3]"
#---------------------------------------------------------------
# report_edges for various pin combinations
#---------------------------------------------------------------
puts "--- report_edges ---"
report_edges -from [get_pins buf1/A] -to [get_pins buf1/Z]
report_edges -from [get_pins inv1/A] -to [get_pins inv1/ZN]
report_edges -from [get_pins and1/A1]
report_edges -to [get_pins and1/ZN]
report_edges -from [get_ports d1]
report_edges -to [get_ports q2]
#---------------------------------------------------------------
# Constant propagation via set_case_analysis
#---------------------------------------------------------------
puts "--- set_case_analysis ---"
set_case_analysis 1 [get_ports en]
report_checks
report_checks -from [get_ports d1] -to [get_ports q1]
# Change constant value
set_case_analysis 0 [get_ports en]
report_checks
# Remove case analysis
unset_case_analysis [get_ports en]
report_checks
#---------------------------------------------------------------
# Disable/enable timing with multiple cells
#---------------------------------------------------------------
puts "--- disable/enable timing multiple cells ---"
set_disable_timing [get_cells buf1]
report_checks
set_disable_timing [get_cells inv1]
report_checks
unset_disable_timing [get_cells buf1]
report_checks
unset_disable_timing [get_cells inv1]
report_checks
# Disable specific lib cell arc
set_disable_timing -from A -to Z [get_lib_cells NangateOpenCellLibrary/BUF_X1]
report_disabled_edges
report_checks
unset_disable_timing -from A -to Z [get_lib_cells NangateOpenCellLibrary/BUF_X1]
report_disabled_edges
report_checks
#---------------------------------------------------------------
# report_check_types
#---------------------------------------------------------------
puts "--- report_check_types ---"
report_check_types -max_delay -verbose
report_check_types -min_delay -verbose
report_check_types -max_delay -min_delay -verbose
#---------------------------------------------------------------
# Report slews for various pins
#---------------------------------------------------------------
puts "--- report_slews ---"
report_slews [get_ports d1]
report_slews [get_ports d2]
report_slews [get_ports en]
report_slews [get_ports q1]
report_slews [get_ports q2]
report_slews [get_pins buf1/Z]
report_slews [get_pins inv1/ZN]
report_slews [get_pins and1/ZN]
report_slews [get_pins or1/ZN]
report_slews [get_pins reg1/Q]
report_slews [get_pins reg2/Q]
#---------------------------------------------------------------
# report_checks with -unconstrained
#---------------------------------------------------------------
puts "--- report_checks -unconstrained ---"
report_checks -unconstrained
#---------------------------------------------------------------
# report_checks with group_count and endpoint_count
#---------------------------------------------------------------
puts "--- report_checks counts ---"
report_checks -group_count 3
report_checks -endpoint_count 3
report_checks -endpoint_count 5 -path_delay min

3337
graph/test/graph_modify.ok Normal file

File diff suppressed because it is too large Load Diff

245
graph/test/graph_modify.tcl Normal file
View File

@ -0,0 +1,245 @@
# Test graph changes with network modifications, multi-corner, and
# incremental graph updates.
# Targets: Graph.cc (deleteVertexBefore, addEdge, removeEdge,
# makeWireEdge, removeWireEdge, pinVertex, pinDrvrVertex,
# pinLoadVertex, setConstant, clearConstants, hasDownstreamClkPin,
# widthCheckAnnotation, periodCheckAnnotation, regClkVertices, isRegClk)
# GraphCmp.cc (sortEdges, VertexNameLess with added/removed vertices)
source ../../test/helpers.tcl
#---------------------------------------------------------------
# Multi-corner setup
#---------------------------------------------------------------
define_corners fast slow
read_liberty -corner fast ../../test/nangate45/Nangate45_fast.lib
read_liberty -corner slow ../../test/nangate45/Nangate45_slow.lib
read_verilog graph_test3.v
link_design graph_test3
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 15 [get_ports clk2]
set_input_delay -clock clk1 1.0 [get_ports {d1 d2 d3 d4}]
set_output_delay -clock clk1 1.0 [get_ports {q1 q3}]
set_output_delay -clock clk2 1.0 [get_ports q2]
set_input_transition 0.1 [get_ports {d1 d2 d3 d4 rst clk1 clk2}]
#---------------------------------------------------------------
# Multi-corner baseline timing
#---------------------------------------------------------------
puts "--- multi-corner baseline ---"
report_checks -corner fast
report_checks -corner slow
report_checks -corner fast -path_delay min
report_checks -corner slow -path_delay min
report_checks -corner fast -path_delay max
report_checks -corner slow -path_delay max
#---------------------------------------------------------------
# Multi-corner per-path (exercises delay comparison across corners)
#---------------------------------------------------------------
puts "--- multi-corner per-path ---"
report_checks -corner fast -from [get_ports d1] -to [get_ports q1]
report_checks -corner slow -from [get_ports d1] -to [get_ports q1]
report_checks -corner fast -from [get_ports d3] -to [get_ports q1]
report_checks -corner slow -from [get_ports d3] -to [get_ports q1]
# Cross-clock domain paths
report_checks -corner fast -from [get_ports d1] -to [get_ports q2]
report_checks -corner slow -from [get_ports d1] -to [get_ports q2]
#---------------------------------------------------------------
# Multi-corner report_dcalc
# Exercises: delay value comparison across corners
#---------------------------------------------------------------
puts "--- multi-corner report_dcalc ---"
report_dcalc -corner fast -from [get_pins buf1/A] -to [get_pins buf1/Z]
puts "fast buf1 dcalc: done"
report_dcalc -corner slow -from [get_pins buf1/A] -to [get_pins buf1/Z]
puts "slow buf1 dcalc: done"
report_dcalc -corner fast -from [get_pins nand1/A1] -to [get_pins nand1/ZN]
puts "fast nand1 dcalc: done"
report_dcalc -corner slow -from [get_pins nand1/A1] -to [get_pins nand1/ZN]
puts "slow nand1 dcalc: done"
report_dcalc -corner fast -from [get_pins nor1/A1] -to [get_pins nor1/ZN]
puts "fast nor1 dcalc: done"
report_dcalc -corner slow -from [get_pins nor1/A1] -to [get_pins nor1/ZN]
puts "slow nor1 dcalc: done"
report_dcalc -corner fast -from [get_pins reg1/CK] -to [get_pins reg1/Q] -max
puts "fast reg1 CK->Q: done"
report_dcalc -corner slow -from [get_pins reg1/CK] -to [get_pins reg1/Q] -max
puts "slow reg1 CK->Q: done"
report_dcalc -corner fast -from [get_pins reg1/CK] -to [get_pins reg1/D] -max
puts "fast reg1 setup: done"
report_dcalc -corner slow -from [get_pins reg1/CK] -to [get_pins reg1/D] -min
puts "slow reg1 hold: done"
# Cross-clock domain DFF
report_dcalc -corner fast -from [get_pins reg3/CK] -to [get_pins reg3/Q] -max
puts "fast reg3 CK->Q: done"
report_dcalc -corner slow -from [get_pins reg3/CK] -to [get_pins reg3/Q] -max
puts "slow reg3 CK->Q: done"
#---------------------------------------------------------------
# Network modification: add instance, recheck graph
# Exercises: graph incremental update after network changes
#---------------------------------------------------------------
puts "--- network modification and graph update ---"
set new_buf [make_instance added_buf NangateOpenCellLibrary/BUF_X1]
set new_net [make_net added_net]
connect_pin added_net added_buf/A
# Report checks after adding (graph updated incrementally)
report_checks -corner fast
report_checks -corner slow
# Disconnect and delete
disconnect_pin added_net added_buf/A
delete_instance added_buf
delete_net added_net
# Report after deletion
report_checks -corner fast
report_checks -corner slow
#---------------------------------------------------------------
# Replace cell and check timing
# Exercises: graph update after cell replacement
#---------------------------------------------------------------
puts "--- replace_cell ---"
replace_cell buf1 NangateOpenCellLibrary/BUF_X4
report_checks -corner fast
report_checks -corner slow
# Replace back
replace_cell buf1 NangateOpenCellLibrary/BUF_X1
report_checks
#---------------------------------------------------------------
# Load changes with multi-corner
# Exercises: incremental delay recomputation
#---------------------------------------------------------------
puts "--- load changes multi-corner ---"
set_load 0.01 [get_ports q1]
report_checks -corner fast
report_checks -corner slow
set_load 0.05 [get_ports q2]
report_checks -corner fast
report_checks -corner slow
set_load 0.1 [get_ports q3]
report_checks -corner fast
report_checks -corner slow
# Reset loads
set_load 0 [get_ports q1]
set_load 0 [get_ports q2]
set_load 0 [get_ports q3]
#---------------------------------------------------------------
# Disable/enable timing with multi-corner
# Exercises: edge disable/re-enable with multiple analysis points
#---------------------------------------------------------------
puts "--- disable timing multi-corner ---"
set_disable_timing [get_cells and1]
report_checks -corner fast
report_checks -corner slow
set_disable_timing [get_cells or1]
report_checks -corner fast
report_checks -corner slow
unset_disable_timing [get_cells and1]
unset_disable_timing [get_cells or1]
report_checks -corner fast
report_checks -corner slow
#---------------------------------------------------------------
# Case analysis with multi-corner
#---------------------------------------------------------------
puts "--- case analysis multi-corner ---"
set_case_analysis 1 [get_ports d1]
report_checks -corner fast
report_checks -corner slow
unset_case_analysis [get_ports d1]
report_checks -corner fast
report_checks -corner slow
set_case_analysis 0 [get_ports d4]
report_checks -corner fast
report_checks -corner slow
unset_case_analysis [get_ports d4]
report_checks
#---------------------------------------------------------------
# Report slews per corner
#---------------------------------------------------------------
puts "--- report_slews multi-corner ---"
report_slews [get_ports d1]
report_slews [get_ports q1]
report_slews [get_ports q2]
report_slews [get_pins nand1/ZN]
report_slews [get_pins nor1/ZN]
report_slews [get_pins reg3/Q]
#---------------------------------------------------------------
# Report edges (exercises EdgeLess comparator)
#---------------------------------------------------------------
puts "--- report_edges multi-corner ---"
report_edges -from [get_pins nand1/A1] -to [get_pins nand1/ZN]
report_edges -from [get_pins nand1/A2] -to [get_pins nand1/ZN]
report_edges -from [get_pins nor1/A1] -to [get_pins nor1/ZN]
report_edges -from [get_pins nor1/A2] -to [get_pins nor1/ZN]
report_edges -from [get_pins and2/A1] -to [get_pins and2/ZN]
report_edges -from [get_pins and2/A2] -to [get_pins and2/ZN]
report_edges -from [get_pins or2/A1] -to [get_pins or2/ZN]
report_edges -from [get_pins or2/A2] -to [get_pins or2/ZN]
#---------------------------------------------------------------
# report_checks with fields per corner
#---------------------------------------------------------------
puts "--- fields per corner ---"
report_checks -corner fast -fields {slew cap input_pins nets fanout}
report_checks -corner slow -fields {slew cap input_pins nets fanout}
report_checks -corner fast -format full_clock
report_checks -corner slow -format full_clock
report_checks -corner fast -unconstrained
report_checks -corner slow -unconstrained
report_checks -corner fast -group_count 3
report_checks -corner slow -endpoint_count 5

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,256 @@
# Test graph operations with larger multi-clock design for coverage.
# Targets: Graph.cc (makeGraph, makeVerticesAndEdges, makeWireEdges,
# makePinVertices, makeInstanceEdges, pinVertices, pinDrvrVertex,
# pinLoadVertex, vertexCount, edgeCount, vertexIterator, edgeIterator,
# arcDelayCount, hasDownstreamClkPin, regClkVertices, isRegClk,
# isLatchData, widthCheckAnnotation, periodCheckAnnotation)
# GraphCmp.cc (EdgeLess, sortEdges, VertexNameLess, vertexLess)
source ../../test/helpers.tcl
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog graph_test3.v
link_design graph_test3
#---------------------------------------------------------------
# Two clock domains
#---------------------------------------------------------------
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 15 [get_ports clk2]
set_input_delay -clock clk1 1.0 [get_ports {d1 d2 d3 d4}]
set_output_delay -clock clk1 1.0 [get_ports {q1 q3}]
set_output_delay -clock clk2 1.0 [get_ports q2]
set_input_transition 0.1 [get_ports {d1 d2 d3 d4 rst clk1 clk2}]
#---------------------------------------------------------------
# Baseline timing (exercises makeGraph, graph construction)
#---------------------------------------------------------------
puts "--- baseline timing ---"
report_checks
report_checks -path_delay min
report_checks -path_delay max
#---------------------------------------------------------------
# All path combinations (exercises vertex/edge traversal thoroughly)
#---------------------------------------------------------------
puts "--- all path combinations ---"
foreach from_port {d1 d2 d3 d4} {
foreach to_port {q1 q2 q3} {
report_checks -from [get_ports $from_port] -to [get_ports $to_port]
puts "${from_port}->${to_port}: done"
}
}
#---------------------------------------------------------------
# Through pin queries for reconvergent paths
# Exercises: graph traversal through reconvergent fan-out
#---------------------------------------------------------------
puts "--- through reconvergent paths ---"
report_checks -through [get_pins nand1/ZN]
puts "through nand1/ZN: done"
report_checks -through [get_pins nor1/ZN]
puts "through nor1/ZN: done"
report_checks -through [get_pins and2/ZN]
puts "through and2/ZN: done"
report_checks -through [get_pins or2/ZN]
puts "through or2/ZN: done"
# Through multiple intermediate points
report_checks -through [get_pins and1/ZN] -through [get_pins nand1/ZN]
puts "through and1->nand1: done"
report_checks -through [get_pins or1/ZN] -through [get_pins nand1/ZN]
puts "through or1->nand1: done"
#---------------------------------------------------------------
# Timing edge queries for all cells (exercises edge iteration)
#---------------------------------------------------------------
puts "--- timing edges all cells ---"
foreach cell_name {buf1 buf2 inv1 inv2 and1 or1 nand1 nor1 and2 or2 reg1 reg2 reg3 buf3 buf4} {
set edges [get_timing_edges -of_objects [get_cells $cell_name]]
puts "$cell_name edges: [llength $edges]"
}
# From/to specific pins
puts "--- specific edge queries ---"
set edges_and1_a1 [get_timing_edges -from [get_pins and1/A1] -to [get_pins and1/ZN]]
puts "and1 A1->ZN: [llength $edges_and1_a1]"
set edges_and1_a2 [get_timing_edges -from [get_pins and1/A2] -to [get_pins and1/ZN]]
puts "and1 A2->ZN: [llength $edges_and1_a2]"
set edges_or1_a1 [get_timing_edges -from [get_pins or1/A1] -to [get_pins or1/ZN]]
puts "or1 A1->ZN: [llength $edges_or1_a1]"
set edges_nand_a1 [get_timing_edges -from [get_pins nand1/A1] -to [get_pins nand1/ZN]]
puts "nand1 A1->ZN: [llength $edges_nand_a1]"
set edges_nor_a1 [get_timing_edges -from [get_pins nor1/A1] -to [get_pins nor1/ZN]]
puts "nor1 A1->ZN: [llength $edges_nor_a1]"
# DFF edges
set edges_reg1_ck_q [get_timing_edges -from [get_pins reg1/CK] -to [get_pins reg1/Q]]
puts "reg1 CK->Q: [llength $edges_reg1_ck_q]"
set edges_reg3_ck_q [get_timing_edges -from [get_pins reg3/CK] -to [get_pins reg3/Q]]
puts "reg3 CK->Q: [llength $edges_reg3_ck_q]"
#---------------------------------------------------------------
# Report edges for all cell types
#---------------------------------------------------------------
puts "--- report_edges ---"
report_edges -from [get_pins buf1/A] -to [get_pins buf1/Z]
report_edges -from [get_pins inv1/A] -to [get_pins inv1/ZN]
report_edges -from [get_pins and1/A1] -to [get_pins and1/ZN]
report_edges -from [get_pins and1/A2] -to [get_pins and1/ZN]
report_edges -from [get_pins or1/A1] -to [get_pins or1/ZN]
report_edges -from [get_pins nand1/A1] -to [get_pins nand1/ZN]
report_edges -from [get_pins nor1/A1] -to [get_pins nor1/ZN]
report_edges -from [get_pins reg1/CK] -to [get_pins reg1/Q]
report_edges -from [get_pins reg3/CK] -to [get_pins reg3/Q]
# From only
report_edges -from [get_ports d1]
report_edges -from [get_ports d3]
# To only
report_edges -to [get_ports q1]
report_edges -to [get_ports q2]
report_edges -to [get_ports q3]
#---------------------------------------------------------------
# Disable/enable timing on various cells
# Exercises: graph edge disable/enable, re-traversal
#---------------------------------------------------------------
puts "--- disable/enable timing ---"
# Disable individual cells
set_disable_timing [get_cells buf1]
report_checks
set_disable_timing [get_cells inv1]
report_checks
set_disable_timing [get_cells nand1]
report_checks
# Enable back one by one
unset_disable_timing [get_cells buf1]
report_checks
unset_disable_timing [get_cells inv1]
report_checks
unset_disable_timing [get_cells nand1]
report_checks
# Disable specific arcs on lib cells
set_disable_timing -from A1 -to ZN [get_lib_cells NangateOpenCellLibrary/AND2_X1]
report_disabled_edges
report_checks
unset_disable_timing -from A1 -to ZN [get_lib_cells NangateOpenCellLibrary/AND2_X1]
report_disabled_edges
report_checks
# Disable/enable on NOR and NAND
set_disable_timing -from A1 -to ZN [get_lib_cells NangateOpenCellLibrary/NAND2_X1]
report_checks
unset_disable_timing -from A1 -to ZN [get_lib_cells NangateOpenCellLibrary/NAND2_X1]
report_checks
set_disable_timing -from A1 -to ZN [get_lib_cells NangateOpenCellLibrary/NOR2_X1]
report_checks
unset_disable_timing -from A1 -to ZN [get_lib_cells NangateOpenCellLibrary/NOR2_X1]
report_checks
#---------------------------------------------------------------
# Case analysis / constant propagation
# Exercises: graph constant propagation, re-traversal
#---------------------------------------------------------------
puts "--- case analysis ---"
set_case_analysis 1 [get_ports rst]
report_checks
set_case_analysis 0 [get_ports rst]
report_checks
unset_case_analysis [get_ports rst]
report_checks
# Case analysis on data inputs
set_case_analysis 1 [get_ports d3]
report_checks
unset_case_analysis [get_ports d3]
report_checks
#---------------------------------------------------------------
# Report slews for pins in multi-clock design
# Exercises: vertex slew access across corners
#---------------------------------------------------------------
puts "--- report_slews ---"
report_slews [get_ports d1]
report_slews [get_ports d2]
report_slews [get_ports d3]
report_slews [get_ports d4]
report_slews [get_ports q1]
report_slews [get_ports q2]
report_slews [get_ports q3]
report_slews [get_pins buf1/Z]
report_slews [get_pins inv1/ZN]
report_slews [get_pins and1/ZN]
report_slews [get_pins or1/ZN]
report_slews [get_pins nand1/ZN]
report_slews [get_pins nor1/ZN]
report_slews [get_pins and2/ZN]
report_slews [get_pins or2/ZN]
report_slews [get_pins reg1/Q]
report_slews [get_pins reg2/Q]
report_slews [get_pins reg3/Q]
#---------------------------------------------------------------
# report_check_types (exercises check edge categorization)
#---------------------------------------------------------------
puts "--- report_check_types ---"
report_check_types -max_delay -verbose
report_check_types -min_delay -verbose
report_check_types -max_delay -min_delay -verbose
#---------------------------------------------------------------
# report_checks with various options
#---------------------------------------------------------------
puts "--- report_checks options ---"
report_checks -fields {slew cap input_pins nets fanout}
report_checks -format full_clock
report_checks -unconstrained
report_checks -group_count 3
report_checks -endpoint_count 5
report_checks -sort_by_slack
report_checks -endpoint_count 3 -path_delay min

View File

@ -0,0 +1,177 @@
--- get_timing_edges -of_objects instance ---
reg1 timing edges count: 1
--- get_timing_edges -from/-to on instance ---
CK->Q edges count: 1
--- get_timing_edges -from only ---
edges from CK count: 5
--- get_timing_edges -to only ---
edges to Q count: 1
--- report_edges -from/-to ---
CK -> Q Reg Clk to Q
^ -> ^ 0.08:0.08
^ -> v 0.08:0.08
--- report_edges -from ---
CK -> QN Reg Clk to Q
^ -> ^ 0.06:0.06
^ -> v 0.06:0.06
CK -> Q Reg Clk to Q
^ -> ^ 0.08:0.08
^ -> v 0.08:0.08
CK -> CK width
^ -> v 0.05:0.05
v -> ^ 0.05:0.05
CK -> D setup
^ -> ^ 0.03:0.03
^ -> v 0.04:0.04
CK -> D hold
^ -> ^ 0.00:0.00
^ -> v 0.00:0.00
--- report_edges -to ---
CK -> D setup
^ -> ^ 0.03:0.03
^ -> v 0.04:0.04
CK -> D hold
^ -> ^ 0.01:0.01
^ -> v 0.00:0.00
reg1/Q -> D wire
^ -> ^ 0.00:0.00
v -> v 0.00:0.00
--- report_disabled_edges (baseline) ---
--- set_disable_timing on instance ---
--- report_disabled_edges after disable ---
reg1 CK Q constraint
reg1 CK QN constraint
--- report_checks after disable ---
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ q (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
0.00 10.00 output external delay
10.00 data required time
---------------------------------------------------------
10.00 data required time
-0.08 data arrival time
---------------------------------------------------------
9.92 slack (MET)
--- unset_disable_timing on instance ---
--- report_disabled_edges after unset ---
--- set_disable_timing with -from/-to on lib cell ---
--- report_disabled_edges after lib cell disable ---
reg1 CK Q constraint
reg2 CK Q constraint
--- unset_disable_timing lib cell ---
--- report_checks baseline ---
Startpoint: reg1 (rising edge-triggered flip-flop clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg1/CK (DFF_X1)
0.08 0.08 v reg1/Q (DFF_X1)
0.00 0.08 v reg2/D (DFF_X1)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.04 9.96 library setup time
9.96 data required time
---------------------------------------------------------
9.96 data required time
-0.08 data arrival time
---------------------------------------------------------
9.88 slack (MET)
--- report_checks -path_delay max ---
Startpoint: reg1 (rising edge-triggered flip-flop clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg1/CK (DFF_X1)
0.08 0.08 v reg1/Q (DFF_X1)
0.00 0.08 v reg2/D (DFF_X1)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.04 9.96 library setup time
9.96 data required time
---------------------------------------------------------
9.96 data required time
-0.08 data arrival time
---------------------------------------------------------
9.88 slack (MET)
--- report_checks -path_delay min ---
Startpoint: d (input port clocked by clk)
Endpoint: reg1 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: min
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ input external delay
0.00 0.00 ^ d (in)
0.00 0.00 ^ reg1/D (DFF_X1)
0.00 data arrival time
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 clock reconvergence pessimism
0.00 ^ reg1/CK (DFF_X1)
0.00 0.00 library hold time
0.00 data required time
---------------------------------------------------------
0.00 data required time
-0.00 data arrival time
---------------------------------------------------------
0.00 slack (VIOLATED)
--- report_checks from d to q ---
No paths found.
--- report_edges -from port d ---
d -> reg1/D wire
^ -> ^ 0.00:0.00
v -> v 0.00:0.00
--- report_edges -to port q ---
reg2/Q -> q wire
^ -> ^ 0.00:0.00
v -> v 0.00:0.00
--- get_timing_edges -of_objects reg2 ---
reg2 timing edges count: 1
--- report_slews on d port ---
d ^ 0.00:0.00 v 0.00:0.00
--- report_slews on q port ---
q ^ 0.01:0.01 v 0.00:0.00

View File

@ -0,0 +1,88 @@
# Test graph timing edge queries and disable_timing
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog graph_test1.v
link_design graph_test1
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 0 [get_ports d]
set_output_delay -clock clk 0 [get_ports q]
puts "--- get_timing_edges -of_objects instance ---"
set edges [get_timing_edges -of_objects [get_cells reg1]]
puts "reg1 timing edges count: [llength $edges]"
puts "--- get_timing_edges -from/-to on instance ---"
set edges_ft [get_timing_edges -from [get_pins reg1/CK] -to [get_pins reg1/Q]]
puts "CK->Q edges count: [llength $edges_ft]"
puts "--- get_timing_edges -from only ---"
set edges_from [get_timing_edges -from [get_pins reg1/CK]]
puts "edges from CK count: [llength $edges_from]"
puts "--- get_timing_edges -to only ---"
set edges_to [get_timing_edges -to [get_pins reg1/Q]]
puts "edges to Q count: [llength $edges_to]"
puts "--- report_edges -from/-to ---"
report_edges -from [get_pins reg1/CK] -to [get_pins reg1/Q]
puts "--- report_edges -from ---"
report_edges -from [get_pins reg1/CK]
puts "--- report_edges -to ---"
report_edges -to [get_pins reg2/D]
puts "--- report_disabled_edges (baseline) ---"
report_disabled_edges
puts "--- set_disable_timing on instance ---"
set_disable_timing [get_cells reg1]
puts "--- report_disabled_edges after disable ---"
report_disabled_edges
puts "--- report_checks after disable ---"
report_checks
puts "--- unset_disable_timing on instance ---"
unset_disable_timing [get_cells reg1]
puts "--- report_disabled_edges after unset ---"
report_disabled_edges
puts "--- set_disable_timing with -from/-to on lib cell ---"
set_disable_timing -from CK -to Q [get_lib_cells NangateOpenCellLibrary/DFF_X1]
puts "--- report_disabled_edges after lib cell disable ---"
report_disabled_edges
puts "--- unset_disable_timing lib cell ---"
unset_disable_timing -from CK -to Q [get_lib_cells NangateOpenCellLibrary/DFF_X1]
puts "--- report_checks baseline ---"
report_checks
puts "--- report_checks -path_delay max ---"
report_checks -path_delay max
puts "--- report_checks -path_delay min ---"
report_checks -path_delay min
puts "--- report_checks from d to q ---"
report_checks -from [get_ports d] -to [get_ports q]
puts "--- report_edges -from port d ---"
report_edges -from [get_ports d]
puts "--- report_edges -to port q ---"
report_edges -to [get_ports q]
puts "--- get_timing_edges -of_objects reg2 ---"
set edges_r2 [get_timing_edges -of_objects [get_cells reg2]]
puts "reg2 timing edges count: [llength $edges_r2]"
puts "--- report_slews on d port ---"
report_slews [get_ports d]
puts "--- report_slews on q port ---"
report_slews [get_ports q]

View File

@ -0,0 +1,954 @@
--- Test 1: baseline edge count ---
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
buf1 edges: 1
buf2 edges: 1
inv1 edges: 1
and1 edges: 1
or1 edges: 1
nand1 edges: 1
nor1 edges: 1
--- Test 2: chain add/delete ---
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
chain_buf0 edges: 1
chain_buf1 edges: 1
chain_buf2 edges: 1
chain_buf3 edges: 1
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
--- Test 3: fan-out/fan-in ---
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
fo_drv edges: 1
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
--- Test 4: cell replacement cycle ---
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.13 ^ nand1/ZN (NAND2_X1)
0.00 1.13 ^ reg2/D (DFF_X1)
1.13 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.13 data arrival time
---------------------------------------------------------
8.84 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
--- Test 5: register add/delete ---
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
--- Test 6: slew and edge reports ---
d1 ^ 0.10:0.10 v 0.10:0.10
d2 ^ 0.10:0.10 v 0.10:0.10
d3 ^ 0.10:0.10 v 0.10:0.10
clk ^ 0.10:0.10 v 0.10:0.10
buf1/A ^ 0.10:0.10 v 0.10:0.10
buf1/Z ^ 0.01:0.01 v 0.01:0.01
and1/A1 ^ 0.01:0.01 v 0.01:0.01
and1/ZN ^ 0.01:0.01 v 0.01:0.01
inv1/A ^ 0.10:0.10 v 0.10:0.10
inv1/ZN ^ 0.02:0.02 v 0.02:0.02
nand1/ZN ^ 0.01:0.01 v 0.01:0.01
nor1/ZN ^ 0.01:0.01 v 0.01:0.01
A -> Z combinational
^ -> ^ 0.03:0.03
v -> v 0.06:0.06
A1 -> ZN combinational
^ -> ^ 0.04:0.04
v -> v 0.03:0.03
A -> ZN combinational
^ -> v 0.01:0.01
v -> ^ 0.04:0.04
--- Test 7: through-pin queries ---
Startpoint: d1 (input port clocked by clk)
Endpoint: reg3 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d1 (in)
0.06 1.06 v buf1/Z (BUF_X1)
0.03 1.09 v and1/ZN (AND2_X1)
0.02 1.11 ^ nor1/ZN (NOR2_X1)
0.00 1.11 ^ reg3/D (DFF_X1)
1.11 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg3/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.11 data arrival time
---------------------------------------------------------
8.86 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg3 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.04 1.09 v and1/ZN (AND2_X1)
0.02 1.11 ^ nor1/ZN (NOR2_X1)
0.00 1.11 ^ reg3/D (DFF_X1)
1.11 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg3/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.11 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d3 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d3 (in)
0.04 1.04 ^ inv1/ZN (INV_X1)
0.03 1.07 ^ or1/ZN (OR2_X1)
0.01 1.09 v nand1/ZN (NAND2_X1)
0.00 1.09 v reg2/D (DFF_X1)
1.09 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.04 9.96 library setup time
9.96 data required time
---------------------------------------------------------
9.96 data required time
-1.09 data arrival time
---------------------------------------------------------
8.88 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg3 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.04 1.09 v and1/ZN (AND2_X1)
0.02 1.11 ^ nor1/ZN (NOR2_X1)
0.00 1.11 ^ reg3/D (DFF_X1)
1.11 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg3/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.11 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: d2 (input port clocked by clk)
Endpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
1.00 1.00 v input external delay
0.00 1.00 v d2 (in)
0.06 1.06 v buf2/Z (BUF_X1)
0.05 1.11 v or1/ZN (OR2_X1)
0.02 1.12 ^ nand1/ZN (NAND2_X1)
0.00 1.12 ^ reg2/D (DFF_X1)
1.12 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
10.00 ^ reg2/CK (DFF_X1)
-0.03 9.97 library setup time
9.97 data required time
---------------------------------------------------------
9.97 data required time
-1.12 data arrival time
---------------------------------------------------------
8.85 slack (MET)
Startpoint: reg1 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q1 (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg1/CK (DFF_X1)
0.08 0.08 ^ reg1/Q (DFF_X1)
0.00 0.08 ^ q1 (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q2 (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ q2 (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)
Startpoint: reg3 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q3 (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg3/CK (DFF_X1)
0.08 0.08 ^ reg3/Q (DFF_X1)
0.00 0.08 ^ q3 (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)
Startpoint: reg4 (rising edge-triggered flip-flop clocked by clk)
Endpoint: q4 (output port clocked by clk)
Path Group: clk
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg4/CK (DFF_X1)
0.08 0.08 ^ reg4/Q (DFF_X1)
0.00 0.08 ^ q4 (out)
0.08 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-1.00 9.00 output external delay
9.00 data required time
---------------------------------------------------------
9.00 data required time
-0.08 data arrival time
---------------------------------------------------------
8.92 slack (MET)

View File

@ -0,0 +1,206 @@
# Test graph vertex and edge operations in depth: makeVertex, deleteVertex,
# makeEdge, deleteEdge, edge arc queries, bidirectional pin handling,
# hasFaninOne, vertex iteration, edge linking.
source ../../test/helpers.tcl
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog graph_delete_modify.v
link_design graph_delete_modify
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 1.0 [get_ports {d1 d2 d3 rst}]
set_output_delay -clock clk 1.0 [get_ports {q1 q2 q3 q4}]
set_input_transition 0.1 [get_ports {d1 d2 d3 rst clk}]
#---------------------------------------------------------------
# Test 1: Baseline - build graph and verify edges
#---------------------------------------------------------------
puts "--- Test 1: baseline edge count ---"
report_checks
# Query edges for each cell
foreach cell_name {buf1 buf2 inv1 and1 or1 nand1 nor1} {
set edges [get_timing_edges -of_objects [get_cells $cell_name]]
puts "$cell_name edges: [llength $edges]"
}
#---------------------------------------------------------------
# Test 2: Add chain of buffers, verify edges, then delete one by one
# Exercises: makeVertex, makeEdge, deleteVertex, deleteEdge,
# deleteInEdge, deleteOutEdge
#---------------------------------------------------------------
puts "--- Test 2: chain add/delete ---"
# Create 4-stage buffer chain
set chain_nets {}
set chain_insts {}
for {set i 0} {$i < 4} {incr i} {
lappend chain_nets [make_net "chain_n$i"]
}
lappend chain_nets [make_net "chain_n4"]
for {set i 0} {$i < 4} {incr i} {
set inst [make_instance "chain_buf$i" NangateOpenCellLibrary/BUF_X1]
lappend chain_insts $inst
connect_pin "chain_n$i" "chain_buf$i/A"
set j [expr {$i + 1}]
connect_pin "chain_n$j" "chain_buf$i/Z"
}
report_checks
# Query chain edges
for {set i 0} {$i < 4} {incr i} {
set edges [get_timing_edges -of_objects [get_cells "chain_buf$i"]]
puts "chain_buf$i edges: [llength $edges]"
}
# Delete chain from end to beginning (exercises reverse cleanup)
for {set i 3} {$i >= 0} {incr i -1} {
disconnect_pin "chain_n$i" "chain_buf$i/A"
set j [expr {$i + 1}]
disconnect_pin "chain_n$j" "chain_buf$i/Z"
delete_instance "chain_buf$i"
}
for {set i 0} {$i <= 4} {incr i} {
delete_net "chain_n$i"
}
report_checks
#---------------------------------------------------------------
# Test 3: Multiple fan-out and fan-in scenarios
# Exercises: makeWireEdgesFromPin with multi-driver nets
#---------------------------------------------------------------
puts "--- Test 3: fan-out/fan-in ---"
set fo_net [make_net "fanout_net"]
set fo_drv [make_instance "fo_drv" NangateOpenCellLibrary/BUF_X4]
set fo_load1 [make_instance "fo_load1" NangateOpenCellLibrary/BUF_X1]
set fo_load2 [make_instance "fo_load2" NangateOpenCellLibrary/BUF_X1]
set fo_load3 [make_instance "fo_load3" NangateOpenCellLibrary/BUF_X1]
set fo_in [make_net "fo_in"]
connect_pin fo_in fo_drv/A
connect_pin fanout_net fo_drv/Z
connect_pin fanout_net fo_load1/A
connect_pin fanout_net fo_load2/A
connect_pin fanout_net fo_load3/A
report_checks
# Query edge count on fanout driver
set drv_edges [get_timing_edges -of_objects [get_cells fo_drv]]
puts "fo_drv edges: [llength $drv_edges]"
# Disconnect loads one by one
disconnect_pin fanout_net fo_load3/A
report_checks
disconnect_pin fanout_net fo_load2/A
report_checks
# Cleanup
disconnect_pin fanout_net fo_load1/A
disconnect_pin fanout_net fo_drv/Z
disconnect_pin fo_in fo_drv/A
delete_instance fo_load1
delete_instance fo_load2
delete_instance fo_load3
delete_instance fo_drv
delete_net fanout_net
delete_net fo_in
report_checks
#---------------------------------------------------------------
# Test 4: Replace cell multiple times and verify edge rebuild
# Exercises: makeInstanceEdges rebuild, timing arc set changes
#---------------------------------------------------------------
puts "--- Test 4: cell replacement cycle ---"
# Replace buf1 through several sizes
foreach lib_cell {BUF_X1 BUF_X2 BUF_X4 BUF_X8 BUF_X4 BUF_X2 BUF_X1} {
replace_cell buf1 "NangateOpenCellLibrary/$lib_cell"
report_checks -path_delay max
}
# Replace AND gate
foreach lib_cell {AND2_X1 AND2_X2 AND2_X4 AND2_X2 AND2_X1} {
replace_cell and1 "NangateOpenCellLibrary/$lib_cell"
report_checks
}
#---------------------------------------------------------------
# Test 5: Register add/delete to exercise reg_clk_vertices
# Exercises: makeVertex is_reg_clk path, reg_clk_vertices_ insert/erase
#---------------------------------------------------------------
puts "--- Test 5: register add/delete ---"
# Add multiple registers
for {set i 0} {$i < 3} {incr i} {
set rn [make_net "reg_d$i"]
set rqn [make_net "reg_q$i"]
set ri [make_instance "test_reg$i" NangateOpenCellLibrary/DFF_X1]
connect_pin "reg_d$i" "test_reg$i/D"
connect_pin "reg_q$i" "test_reg$i/Q"
connect_pin clk "test_reg$i/CK"
}
report_checks
# Delete the registers
for {set i 0} {$i < 3} {incr i} {
disconnect_pin clk "test_reg$i/CK"
disconnect_pin "reg_d$i" "test_reg$i/D"
disconnect_pin "reg_q$i" "test_reg$i/Q"
delete_instance "test_reg$i"
delete_net "reg_d$i"
delete_net "reg_q$i"
}
report_checks
#---------------------------------------------------------------
# Test 6: Slew and timing edge reports
# Exercises: slew access, edge arc iteration
#---------------------------------------------------------------
puts "--- Test 6: slew and edge reports ---"
report_slews [get_ports d1]
report_slews [get_ports d2]
report_slews [get_ports d3]
report_slews [get_ports clk]
report_slews [get_pins buf1/A]
report_slews [get_pins buf1/Z]
report_slews [get_pins and1/A1]
report_slews [get_pins and1/ZN]
report_slews [get_pins inv1/A]
report_slews [get_pins inv1/ZN]
report_slews [get_pins nand1/ZN]
report_slews [get_pins nor1/ZN]
# Edge reports
report_edges -from [get_pins buf1/A] -to [get_pins buf1/Z]
report_edges -from [get_pins and1/A1] -to [get_pins and1/ZN]
report_edges -from [get_pins inv1/A] -to [get_pins inv1/ZN]
#---------------------------------------------------------------
# Test 7: Through-pin and endpoint queries
# Exercises: graph traversal paths
#---------------------------------------------------------------
puts "--- Test 7: through-pin queries ---"
report_checks -through [get_pins buf1/Z]
report_checks -through [get_pins and1/ZN]
report_checks -through [get_pins inv1/ZN]
report_checks -through [get_pins nand1/ZN]
report_checks -through [get_pins nor1/ZN]
report_checks -through [get_pins or1/ZN]
# Endpoint
report_checks -to [get_ports q1]
report_checks -to [get_ports q2]
report_checks -to [get_ports q3]
report_checks -to [get_ports q4]

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,251 @@
# Test graph construction, wire/instance edge creation, delay annotation,
# slew queries, and edge removal/modification.
# Targets:
# Graph.cc: makeGraph, makeVertex, makeWireEdge, makeInstEdge,
# removeWireEdge, removeInstEdge, arcDelayAnnotated, wireDelayAnnotated,
# slew/delay getters for rise/fall combinations, pinVertices,
# pinDrvrVertex, pinLoadVertex, vertexCount, edgeCount,
# setConstant, clearConstants, regClkVertices, isRegClk,
# widthCheckAnnotation, periodCheckAnnotation, setPeriodCheckAnnotation,
# hasDownstreamClkPin, minPulseWidthArc
source ../../test/helpers.tcl
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog graph_test3.v
link_design graph_test3
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 15 [get_ports clk2]
set_input_delay -clock clk1 1.0 [get_ports {d1 d2 d3 d4}]
set_output_delay -clock clk1 1.0 [get_ports {q1 q3}]
set_output_delay -clock clk2 1.0 [get_ports q2]
set_input_transition 0.1 [get_ports {d1 d2 d3 d4 rst clk1 clk2}]
#---------------------------------------------------------------
# Baseline timing: triggers makeGraph, all vertex/edge construction
#---------------------------------------------------------------
puts "--- baseline timing ---"
report_checks
report_checks -path_delay min
report_checks -path_delay max
#---------------------------------------------------------------
# Query all timing edges: exercises edge iteration
#---------------------------------------------------------------
puts "--- timing edges per cell ---"
foreach cell_name {buf1 buf2 inv1 inv2 and1 or1 nand1 nor1 and2 or2 reg1 reg2 reg3 buf3 buf4} {
set edges [get_timing_edges -of_objects [get_cells $cell_name]]
puts "$cell_name edges: [llength $edges]"
}
#---------------------------------------------------------------
# Specific edge queries: from/to pins
# Exercises arc delay access for all transition combinations
#---------------------------------------------------------------
puts "--- specific edge queries ---"
# BUF edges (rise/rise, fall/fall)
report_edges -from [get_pins buf1/A] -to [get_pins buf1/Z]
# INV edges (rise/fall, fall/rise)
report_edges -from [get_pins inv1/A] -to [get_pins inv1/ZN]
# NAND edges
report_edges -from [get_pins nand1/A1] -to [get_pins nand1/ZN]
report_edges -from [get_pins nand1/A2] -to [get_pins nand1/ZN]
# NOR edges
report_edges -from [get_pins nor1/A1] -to [get_pins nor1/ZN]
report_edges -from [get_pins nor1/A2] -to [get_pins nor1/ZN]
# AND2 edges
report_edges -from [get_pins and2/A1] -to [get_pins and2/ZN]
report_edges -from [get_pins and2/A2] -to [get_pins and2/ZN]
# OR2 edges
report_edges -from [get_pins or2/A1] -to [get_pins or2/ZN]
report_edges -from [get_pins or2/A2] -to [get_pins or2/ZN]
# DFF edges (CK->Q)
report_edges -from [get_pins reg1/CK] -to [get_pins reg1/Q]
report_edges -from [get_pins reg2/CK] -to [get_pins reg2/Q]
report_edges -from [get_pins reg3/CK] -to [get_pins reg3/Q]
# Wire edges (port to first gate)
report_edges -from [get_ports d1]
report_edges -from [get_ports d2]
report_edges -from [get_ports d3]
report_edges -from [get_ports d4]
# Wire edges to output ports
report_edges -to [get_ports q1]
report_edges -to [get_ports q2]
report_edges -to [get_ports q3]
#---------------------------------------------------------------
# Slew queries: exercises slew getters in Graph.cc
#---------------------------------------------------------------
puts "--- slew queries ---"
# Input port slews
report_slews [get_ports d1]
report_slews [get_ports d2]
report_slews [get_ports d3]
report_slews [get_ports d4]
report_slews [get_ports clk1]
report_slews [get_ports clk2]
# Output port slews
report_slews [get_ports q1]
report_slews [get_ports q2]
report_slews [get_ports q3]
# Internal pin slews
report_slews [get_pins buf1/Z]
report_slews [get_pins buf2/Z]
report_slews [get_pins inv1/ZN]
report_slews [get_pins inv2/ZN]
report_slews [get_pins and1/ZN]
report_slews [get_pins or1/ZN]
report_slews [get_pins nand1/ZN]
report_slews [get_pins nor1/ZN]
report_slews [get_pins and2/ZN]
report_slews [get_pins or2/ZN]
report_slews [get_pins reg1/Q]
report_slews [get_pins reg2/Q]
report_slews [get_pins reg3/Q]
report_slews [get_pins buf3/Z]
report_slews [get_pins buf4/Z]
#---------------------------------------------------------------
# Network modification: add/remove instances
# Exercises graph incremental update paths
#---------------------------------------------------------------
puts "--- network modification ---"
# Add instance and wire
set new_buf [make_instance extra_buf NangateOpenCellLibrary/BUF_X1]
set new_net [make_net extra_net]
set new_net2 [make_net extra_net2]
connect_pin extra_net extra_buf/A
connect_pin extra_net2 extra_buf/Z
# Timing after addition (exercises incremental graph update)
report_checks
# Disconnect and remove
disconnect_pin extra_net extra_buf/A
disconnect_pin extra_net2 extra_buf/Z
delete_instance extra_buf
delete_net extra_net
delete_net extra_net2
report_checks
#---------------------------------------------------------------
# Replace cell and verify edge update
#---------------------------------------------------------------
puts "--- replace cell ---"
replace_cell buf1 NangateOpenCellLibrary/BUF_X4
report_checks
report_edges -from [get_pins buf1/A] -to [get_pins buf1/Z]
replace_cell buf1 NangateOpenCellLibrary/BUF_X1
report_checks
replace_cell inv1 NangateOpenCellLibrary/INV_X2
report_checks
replace_cell inv1 NangateOpenCellLibrary/INV_X1
report_checks
#---------------------------------------------------------------
# Disable/enable timing on edges
# Exercises graph edge disable traversal
#---------------------------------------------------------------
puts "--- disable/enable timing ---"
set_disable_timing [get_cells buf1]
report_checks
set_disable_timing [get_cells inv1]
report_checks
set_disable_timing [get_cells nand1]
report_checks
unset_disable_timing [get_cells buf1]
unset_disable_timing [get_cells inv1]
unset_disable_timing [get_cells nand1]
report_checks
#---------------------------------------------------------------
# Case analysis: exercises setConstant, clearConstants
#---------------------------------------------------------------
puts "--- case analysis ---"
set_case_analysis 1 [get_ports rst]
report_checks
set_case_analysis 0 [get_ports rst]
report_checks
unset_case_analysis [get_ports rst]
report_checks
set_case_analysis 1 [get_ports d1]
report_checks
set_case_analysis 0 [get_ports d3]
report_checks
unset_case_analysis [get_ports d1]
unset_case_analysis [get_ports d3]
report_checks
#---------------------------------------------------------------
# Load changes trigger delay recomputation on graph edges
#---------------------------------------------------------------
puts "--- load changes ---"
set_load 0.01 [get_ports q1]
report_checks
set_load 0.05 [get_ports q2]
report_checks
set_load 0.1 [get_ports q3]
report_checks
set_load 0 [get_ports q1]
set_load 0 [get_ports q2]
set_load 0 [get_ports q3]
#---------------------------------------------------------------
# Through pin paths exercise reconvergent graph traversal
#---------------------------------------------------------------
puts "--- through pin queries ---"
report_checks -through [get_pins nand1/ZN]
puts "through nand1: done"
report_checks -through [get_pins nor1/ZN]
puts "through nor1: done"
report_checks -through [get_pins and2/ZN]
puts "through and2: done"
report_checks -through [get_pins or2/ZN]
puts "through or2: done"
#---------------------------------------------------------------
# report_check_types exercises check edge categorization
#---------------------------------------------------------------
puts "--- report_check_types ---"
report_check_types -max_delay -verbose
report_check_types -min_delay -verbose

View File

@ -1,6 +1,37 @@
sta_module_tests("liberty"
TESTS
arc_model_deep
busport_mem_iter
ccsn
cell_classify_pgpin
cell_deep
clkgate_lvlshift
ecsm
equiv_cells
equiv_cross_lib
equiv_deep
equiv_map_libs
func_expr
leakage_power_deep
multi_corner
multi_lib_equiv
opcond_scale
pgpin_voltage
power
properties
read_asap7
read_ihp
read_nangate
read_sky130
scan_signal_types
seq_scan_bus
sky130_corners
timing_models
timing_types_deep
wireload
write_roundtrip
writer
writer_roundtrip
)
add_subdirectory(cpp)

View File

@ -1,16 +1,32 @@
add_executable(TestLibertyClasses TestLibertyClasses.cc)
target_link_libraries(TestLibertyClasses
OpenSTA
GTest::gtest
GTest::gtest_main
${TCL_LIBRARY}
)
target_include_directories(TestLibertyClasses PRIVATE
${STA_HOME}/include/sta
${STA_HOME}
${CMAKE_BINARY_DIR}/include/sta
)
gtest_discover_tests(TestLibertyClasses
WORKING_DIRECTORY ${STA_HOME}
PROPERTIES LABELS "cpp\;module_liberty"
macro(sta_cpp_test name)
add_executable(${name} ${name}.cc)
target_link_libraries(${name}
OpenSTA
GTest::gtest
GTest::gtest_main
${TCL_LIBRARY}
)
target_include_directories(${name} PRIVATE
${STA_HOME}/include/sta
${STA_HOME}
${CMAKE_BINARY_DIR}/include/sta
)
gtest_discover_tests(${name}
WORKING_DIRECTORY ${STA_HOME}
PROPERTIES LABELS "cpp\;module_liberty"
)
endmacro()
sta_cpp_test(TestLibertyClasses)
sta_cpp_test(TestLibertyStaBasics)
sta_cpp_test(TestLibertyStaBasicsB)
sta_cpp_test(TestLibertyStaCallbacks)
# Compatibility aggregate target for legacy scripts that still build TestLiberty.
add_custom_target(TestLiberty
DEPENDS
TestLibertyClasses
TestLibertyStaBasics
TestLibertyStaBasicsB
TestLibertyStaCallbacks
)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,89 @@
INV_X1 is_leaf = 1
INV_X1 is_buffer = 0
INV_X1 is_inverter = 1
BUF_X1 is_leaf = 1
BUF_X1 is_buffer = 1
BUF_X1 is_inverter = 0
NAND2_X1 is_leaf = 1
NAND2_X1 is_buffer = 0
NAND2_X1 is_inverter = 0
DFF_X1 is_leaf = 1
DFF_X1 is_buffer = 0
DFF_X1 is_inverter = 0
INV_X1 lib name = NangateOpenCellLibrary
SDFF_X1 has test_cell
INV_X1/A function =
INV_X1/ZN function = !A
TINV_X1/EN function =
TINV_X1/ZN tristate_enable = !EN
INV_X1/A bus_name = A
INV_X1/A is_bus = 0
INV_X1/A is_bus_bit = 0
INV_X1/A is_bundle = 0
INV_X1/A is_bundle_member = 0
INV_X1/A has_members = 0
INV_X1/A is_pwr_gnd = 0
INV_X1/A scan_signal_type = none
SDFF_X1/SI scan_signal_type = none
SDFF_X1/SI is_bus = 0
INV_X1 all ports = 4
NAND2_X1 A* ports = 2
NAND2_X1 regexp ports = 2
NAND2_X1 nocase zn ports = 0
INV_X1 ports via iterator = 4
AOI21_X1 ports via iterator = 6
Arc: INV_X1 A -> ZN role=combinational is_check=0
sdf_cond=
DFF Arc: DFF_X1 CK -> D role=hold is_check=1
DFF Arc: DFF_X1 CK -> D role=setup is_check=1
DFF Arc: DFF_X1 CK -> CK role=width is_check=1
DFF Arc: DFF_X1 CK -> Q role=Reg Clk to Q is_check=0
DFF Arc: DFF_X1 CK -> QN role=Reg Clk to Q is_check=0
DFFR Arc: DFFR_X1 CK -> D role=hold is_check=1
DFFR Arc: DFFR_X1 CK -> D role=setup is_check=1
DFFR Arc: DFFR_X1 CK -> RN role=recovery is_check=1
DFFR Arc: DFFR_X1 CK -> RN role=removal is_check=1
DFFR Arc: DFFR_X1 RN -> RN role=width is_check=1
DFFR Arc: DFFR_X1 CK -> CK role=width is_check=1
DFFR Arc: DFFR_X1 CK -> Q role=Reg Clk to Q is_check=0
DFFR Arc: DFFR_X1 RN -> Q role=Reg Set/Clr is_check=0
DFFR Arc: DFFR_X1 RN -> Q role=Reg Set/Clr is_check=0
DFFR Arc: DFFR_X1 RN -> Q role=Reg Set/Clr is_check=0
DFFR Arc: DFFR_X1 RN -> Q role=Reg Set/Clr is_check=0
DFFR Arc: DFFR_X1 CK -> QN role=Reg Clk to Q is_check=0
DFFR Arc: DFFR_X1 RN -> QN role=Reg Set/Clr is_check=0
DFFR Arc: DFFR_X1 RN -> QN role=Reg Set/Clr is_check=0
DFFR Arc: DFFR_X1 RN -> QN role=Reg Set/Clr is_check=0
DFFR Arc: DFFR_X1 RN -> QN role=Reg Set/Clr is_check=0
Arc detail: A rise -> ZN fall role=combinational
Arc detail: A fall -> ZN rise role=combinational
DFF arc: rise -> rise role=hold
DFF arc: rise -> fall role=hold
DFF arc: rise -> rise role=setup
DFF arc: rise -> fall role=setup
DFF arc: rise -> fall role=width
DFF arc: fall -> rise role=width
DFF arc: rise -> rise role=Reg Clk to Q
DFF arc: rise -> fall role=Reg Clk to Q
DFF arc: rise -> rise role=Reg Clk to Q
DFF arc: rise -> fall role=Reg Clk to Q
Default opcond process = 1.0
Default opcond voltage = 1.100000023841858
Default opcond temperature = 25.0
Typical opcond process = 1.0
Typical opcond voltage = 1.100000023841858
Typical opcond temperature = 25.0
Found wireload 5K_hvratio_1_1
Found wireload selection
Library: NangateOpenCellLibrary
INV_X1/A cap max = 1.700229965024007e-15
INV_X1/A cap min = 1.5493600563490969e-15
PwrGnd port: VDD dir=power
PwrGnd port: VSS dir=ground
FA_X1 port: VDD dir=power is_bus=0
FA_X1 port: VSS dir=ground is_bus=0
FA_X1 port: A dir=input is_bus=0
FA_X1 port: B dir=input is_bus=0
FA_X1 port: CI dir=input is_bus=0
FA_X1 port: CO dir=output is_bus=0
FA_X1 port: S dir=output is_bus=0

View File

@ -0,0 +1,294 @@
# Deep timing arc and model queries exercising uncovered code paths.
# Targets:
# TimingArc.cc: TimingArcSet full_name, sdf_cond, role, from, to,
# timing_arcs iterator, from_edge_name, to_edge_name,
# TimingArc from/to/fromEdge/toEdge/role,
# timing_role_is_check
# TableModel.cc: table model axis queries, value queries
# Liberty.cc: findLibertyCell, findLibertyPort, timingArcSets iterator,
# find_liberty_cells_matching regexp/nocase,
# find_liberty_ports_matching, cell is_leaf/is_buffer/is_inverter,
# liberty_library/test_cell/cell methods, port is_bus/is_bus_bit/
# is_bundle/is_bundle_member/has_members/is_pwr_gnd/bus_name/
# function/tristate_enable/scan_signal_type/set_direction,
# LibertyPortMemberIterator, LibertyCellPortIterator
# LibertyBuilder.cc: various cell build paths
source ../../test/helpers.tcl
############################################################
# Read library
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
############################################################
# find_liberty_cells_matching with pattern/regexp/nocase
############################################################
set lib [lindex [get_libs NangateOpenCellLibrary] 0]
# Glob pattern matching
set cells [$lib find_liberty_cells_matching "INV_*" 0 0]
# Regexp matching
set cells_re [$lib find_liberty_cells_matching {^BUF_X[0-9]+$} 1 0]
# Case-insensitive matching
set cells_nc [$lib find_liberty_cells_matching "nand2_*" 0 1]
############################################################
# Cell property queries: is_leaf, is_buffer, is_inverter
############################################################
set inv_cell [get_lib_cell NangateOpenCellLibrary/INV_X1]
puts "INV_X1 is_leaf = [$inv_cell is_leaf]"
puts "INV_X1 is_buffer = [$inv_cell is_buffer]"
puts "INV_X1 is_inverter = [$inv_cell is_inverter]"
set buf_cell [get_lib_cell NangateOpenCellLibrary/BUF_X1]
puts "BUF_X1 is_leaf = [$buf_cell is_leaf]"
puts "BUF_X1 is_buffer = [$buf_cell is_buffer]"
puts "BUF_X1 is_inverter = [$buf_cell is_inverter]"
set nand_cell [get_lib_cell NangateOpenCellLibrary/NAND2_X1]
puts "NAND2_X1 is_leaf = [$nand_cell is_leaf]"
puts "NAND2_X1 is_buffer = [$nand_cell is_buffer]"
puts "NAND2_X1 is_inverter = [$nand_cell is_inverter]"
set dff_cell [get_lib_cell NangateOpenCellLibrary/DFF_X1]
puts "DFF_X1 is_leaf = [$dff_cell is_leaf]"
puts "DFF_X1 is_buffer = [$dff_cell is_buffer]"
puts "DFF_X1 is_inverter = [$dff_cell is_inverter]"
############################################################
# Cell liberty_library method
############################################################
set cell_lib [$inv_cell liberty_library]
puts "INV_X1 lib name = [$cell_lib name]"
############################################################
# Cell test_cell (for scan cells)
############################################################
set sdff_cell [get_lib_cell NangateOpenCellLibrary/SDFF_X1]
set test_cell [$sdff_cell test_cell]
if {$test_cell ne ""} {
puts "SDFF_X1 has test_cell"
} else {
puts "SDFF_X1 test_cell is null"
}
############################################################
# Port queries: bus_name, function, tristate_enable, scan_signal_type
############################################################
# Function queries
set inv_a [$inv_cell find_liberty_port A]
set inv_zn [$inv_cell find_liberty_port ZN]
puts "INV_X1/A function = [$inv_a function]"
puts "INV_X1/ZN function = [$inv_zn function]"
# Tristate enable
set tinv_cell [get_lib_cell NangateOpenCellLibrary/TINV_X1]
set tinv_en [$tinv_cell find_liberty_port EN]
set tinv_out [$tinv_cell find_liberty_port ZN]
puts "TINV_X1/EN function = [$tinv_en function]"
puts "TINV_X1/ZN tristate_enable = [$tinv_out tristate_enable]"
# Bus name (for bus ports - may be same as name for non-bus)
puts "INV_X1/A bus_name = [$inv_a bus_name]"
# Is bus/bundle queries
puts "INV_X1/A is_bus = [$inv_a is_bus]"
puts "INV_X1/A is_bus_bit = [$inv_a is_bus_bit]"
puts "INV_X1/A is_bundle = [$inv_a is_bundle]"
puts "INV_X1/A is_bundle_member = [$inv_a is_bundle_member]"
puts "INV_X1/A has_members = [$inv_a has_members]"
# is_pwr_gnd
puts "INV_X1/A is_pwr_gnd = [$inv_a is_pwr_gnd]"
# scan_signal_type
puts "INV_X1/A scan_signal_type = [$inv_a scan_signal_type]"
# Check SDFF scan port
set sdff_cell [get_lib_cell NangateOpenCellLibrary/SDFF_X1]
set sdff_si [$sdff_cell find_liberty_port SI]
if {$sdff_si ne ""} {
puts "SDFF_X1/SI scan_signal_type = [$sdff_si scan_signal_type]"
puts "SDFF_X1/SI is_bus = [$sdff_si is_bus]"
}
############################################################
# find_liberty_ports_matching on a cell
############################################################
set ports [$inv_cell find_liberty_ports_matching "*" 0 0]
puts "INV_X1 all ports = [llength $ports]"
set ports [$nand_cell find_liberty_ports_matching "A*" 0 0]
puts "NAND2_X1 A* ports = [llength $ports]"
# Regexp port matching
set ports_re [$nand_cell find_liberty_ports_matching {^A[0-9]$} 1 0]
puts "NAND2_X1 regexp ports = [llength $ports_re]"
# Case-insensitive port matching
set ports_nc [$nand_cell find_liberty_ports_matching "zn" 0 1]
puts "NAND2_X1 nocase zn ports = [llength $ports_nc]"
############################################################
# LibertyCellPortIterator
############################################################
set port_iter [$inv_cell liberty_port_iterator]
set port_count 0
while {[$port_iter has_next]} {
set port [$port_iter next]
incr port_count
}
$port_iter finish
puts "INV_X1 ports via iterator = $port_count"
# Port iterator on a more complex cell
set aoi_cell [get_lib_cell NangateOpenCellLibrary/AOI21_X1]
set port_iter [$aoi_cell liberty_port_iterator]
set port_count 0
while {[$port_iter has_next]} {
set port [$port_iter next]
set dir [sta::liberty_port_direction $port]
incr port_count
}
$port_iter finish
puts "AOI21_X1 ports via iterator = $port_count"
############################################################
# Timing arc set queries: full_name, sdf_cond, role
############################################################
set arc_sets [$inv_cell timing_arc_sets]
foreach arc_set $arc_sets {
set fn [$arc_set full_name]
set from_port [$arc_set from]
set to_port [$arc_set to]
set role [$arc_set role]
set is_check [sta::timing_role_is_check $role]
puts "Arc: $fn role=$role is_check=$is_check"
set sdf [$arc_set sdf_cond]
puts " sdf_cond=$sdf"
}
# DFF timing arcs (setup/hold/clk-to-q)
set arc_sets [$dff_cell timing_arc_sets]
foreach arc_set $arc_sets {
set fn [$arc_set full_name]
set role [$arc_set role]
set is_check [sta::timing_role_is_check $role]
puts "DFF Arc: $fn role=$role is_check=$is_check"
}
# DFFR has more arcs (recovery/removal)
set dffr_cell [get_lib_cell NangateOpenCellLibrary/DFFR_X1]
set arc_sets [$dffr_cell timing_arc_sets]
foreach arc_set $arc_sets {
set fn [$arc_set full_name]
set role [$arc_set role]
set is_check [sta::timing_role_is_check $role]
puts "DFFR Arc: $fn role=$role is_check=$is_check"
}
############################################################
# TimingArc details: from_edge_name, to_edge_name
############################################################
set arc_sets [$inv_cell timing_arc_sets]
foreach arc_set $arc_sets {
set arcs [$arc_set timing_arcs]
foreach arc $arcs {
set from_name [[$arc from] bus_name]
set to_name [[$arc to] bus_name]
set from_edge [$arc from_edge_name]
set to_edge [$arc to_edge_name]
set arc_role [$arc role]
puts " Arc detail: ${from_name} ${from_edge} -> ${to_name} ${to_edge} role=$arc_role"
}
}
# DFF arc details (different roles: setup, hold, clk-to-q)
set arc_sets [$dff_cell timing_arc_sets]
foreach arc_set $arc_sets {
set arcs [$arc_set timing_arcs]
foreach arc $arcs {
set from_edge [$arc from_edge_name]
set to_edge [$arc to_edge_name]
set arc_role [$arc role]
puts " DFF arc: ${from_edge} -> ${to_edge} role=$arc_role"
}
}
############################################################
# Operating conditions queries
############################################################
set op_cond [$lib default_operating_conditions]
if {$op_cond ne ""} {
puts "Default opcond process = [$op_cond process]"
puts "Default opcond voltage = [$op_cond voltage]"
puts "Default opcond temperature = [$op_cond temperature]"
}
# Named operating conditions
set typical_cond [$lib find_operating_conditions typical]
if {$typical_cond ne ""} {
puts "Typical opcond process = [$typical_cond process]"
puts "Typical opcond voltage = [$typical_cond voltage]"
puts "Typical opcond temperature = [$typical_cond temperature]"
}
############################################################
# Wireload queries
############################################################
set wl [$lib find_wireload "5K_hvratio_1_1"]
if {$wl ne ""} {
puts "Found wireload 5K_hvratio_1_1"
}
set wlsel [$lib find_wireload_selection "WiresloaSelection"]
if {$wlsel ne ""} {
puts "Found wireload selection"
}
############################################################
# LibertyLibraryIterator
############################################################
set lib_iter [sta::liberty_library_iterator]
set lib_count 0
while {[$lib_iter has_next]} {
set lib [$lib_iter next]
puts "Library: [$lib name]"
incr lib_count
}
$lib_iter finish
############################################################
# Port capacitance with corner/min_max
############################################################
set corner [lindex [sta::scenes] 0]
set inv_a_port [$inv_cell find_liberty_port A]
set cap_max [$inv_a_port capacitance $corner "max"]
puts "INV_X1/A cap max = $cap_max"
set cap_min [$inv_a_port capacitance $corner "min"]
puts "INV_X1/A cap min = $cap_min"
############################################################
# Power ground port queries
############################################################
set port_iter [$inv_cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
if {[$port is_pwr_gnd]} {
puts " PwrGnd port: [$port bus_name] dir=[sta::liberty_port_direction $port]"
}
}
$port_iter finish
# Check a cell with bus ports (FA_X1 has bus-like ports)
set fa_cell [get_lib_cell NangateOpenCellLibrary/FA_X1]
set port_iter [$fa_cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set dir [sta::liberty_port_direction $port]
puts " FA_X1 port: [$port bus_name] dir=$dir is_bus=[$port is_bus]"
}
$port_iter finish

View File

@ -0,0 +1,104 @@
fakeram cell found
clk dir=input bus=0 bit=0 bundle=0 bm=0 members=0 func="" tri=""
rd_out dir=output bus=1 bit=0 bundle=0 bm=0 members=1 func="" tri=""
member[0]: rd_out[6] dir=output bit=1
member[1]: rd_out[5] dir=output bit=1
member[2]: rd_out[4] dir=output bit=1
total members=7
we_in dir=input bus=0 bit=0 bundle=0 bm=0 members=0 func="" tri=""
ce_in dir=input bus=0 bit=0 bundle=0 bm=0 members=0 func="" tri=""
addr_in dir=input bus=1 bit=0 bundle=0 bm=0 members=1 func="" tri=""
member[0]: addr_in[5] dir=input bit=1
member[1]: addr_in[4] dir=input bit=1
member[2]: addr_in[3] dir=input bit=1
total members=6
wd_in dir=input bus=1 bit=0 bundle=0 bm=0 members=1 func="" tri=""
member[0]: wd_in[6] dir=input bit=1
member[1]: wd_in[5] dir=input bit=1
member[2]: wd_in[4] dir=input bit=1
total members=7
w_mask_in dir=input bus=1 bit=0 bundle=0 bm=0 members=1 func="" tri=""
member[0]: w_mask_in[6] dir=input bit=1
member[1]: w_mask_in[5] dir=input bit=1
member[2]: w_mask_in[4] dir=input bit=1
total members=7
fakeram45_64x32: bus_ports=4 total_bits=102
fakeram45_256x16: bus_ports=4 total_bits=56
fakeram45_512x64: bus_ports=4 total_bits=201
fakeram45_1024x32: bus_ports=4 total_bits=106
fakeram45_64x96: bus_ports=4 total_bits=294
Warning 353: liberty_busport_mem_iter.tcl line 1, library 'gf180mcu_fd_ip_sram__sram256x8m8wm1' not found.
gf180mcu cells: 0
INV_X1 leaf=1 buf=0 inv=1 area=0.532000 du=0 arcs=1
INV_X2 leaf=1 buf=0 inv=1 area=0.798000 du=0 arcs=1
BUF_X1 leaf=1 buf=1 inv=0 area=0.798000 du=0 arcs=1
BUF_X2 leaf=1 buf=1 inv=0 area=1.064000 du=0 arcs=1
CLKBUF_X1 leaf=1 buf=1 inv=0 area=0.798000 du=0 arcs=1
NAND2_X1 leaf=1 buf=0 inv=0 area=0.798000 du=0 arcs=2
NOR2_X1 leaf=1 buf=0 inv=0 area=0.798000 du=0 arcs=2
AND2_X1 leaf=1 buf=0 inv=0 area=1.064000 du=0 arcs=2
OR2_X1 leaf=1 buf=0 inv=0 area=1.064000 du=0 arcs=2
XOR2_X1 leaf=1 buf=0 inv=0 area=1.596000 du=0 arcs=4
MUX2_X1 leaf=1 buf=0 inv=0 area=1.862000 du=0 arcs=6
AOI21_X1 leaf=1 buf=0 inv=0 area=1.064000 du=0 arcs=5
OAI21_X1 leaf=1 buf=0 inv=0 area=1.064000 du=0 arcs=5
AOI22_X1 leaf=1 buf=0 inv=0 area=1.330000 du=0 arcs=12
OAI22_X1 leaf=1 buf=0 inv=0 area=1.330000 du=0 arcs=12
DFF_X1 leaf=1 buf=0 inv=0 area=4.522000 du=0 arcs=5
DFF_X2 leaf=1 buf=0 inv=0 area=5.054000 du=0 arcs=5
DFFR_X1 leaf=1 buf=0 inv=0 area=5.320000 du=0 arcs=16
DFFS_X1 leaf=1 buf=0 inv=0 area=5.320000 du=0 arcs=16
DFFRS_X1 leaf=1 buf=0 inv=0 area=6.384000 du=0 arcs=35
SDFF_X1 leaf=1 buf=0 inv=0 area=6.118000 du=0 arcs=9
SDFFR_X1 leaf=1 buf=0 inv=0 area=6.650000 du=0 arcs=44
SDFFRS_X1 leaf=1 buf=0 inv=0 area=7.714000 du=0 arcs=111
TLAT_X1 leaf=1 buf=0 inv=0 area=3.458000 du=0 arcs=7
TINV_X1 leaf=1 buf=0 inv=0 area=1.064000 du=0 arcs=3
CLKGATETST_X1 leaf=1 buf=0 inv=0 area=3.990000 du=0 arcs=9
HA_X1 leaf=1 buf=0 inv=0 area=2.660000 du=0 arcs=6
FA_X1 leaf=1 buf=0 inv=0 area=4.256000 du=0 arcs=18
ANTENNA_X1 leaf=1 buf=0 inv=0 area=0.266000 du=1 arcs=0
FILLCELL_X1 leaf=1 buf=0 inv=0 area=0.266000 du=1 arcs=0
FILLCELL_X2 leaf=1 buf=0 inv=0 area=0.266000 du=1 arcs=0
LOGIC0_X1 leaf=1 buf=0 inv=0 area=0.532000 du=1 arcs=0
LOGIC1_X1 leaf=1 buf=0 inv=0 area=0.532000 du=1 arcs=0
--- test_cell / scan queries ---
SDFF_X1 test_cell is null
SDFFR_X1 test_cell is null
SDFFRS_X1 test_cell is null
DFF_X1 has no test_cell (expected)
--- function and tristate queries ---
TINV_X1/VDD dir=power func="" tri=""
TINV_X1/VSS dir=ground func="" tri=""
TINV_X1/EN dir=input func="" tri=""
TINV_X1/I dir=input func="" tri=""
TINV_X1/ZN dir=tristate func="!I" tri="!EN"
CLKGATETST_X1/VDD dir=power func=""
CLKGATETST_X1/VSS dir=ground func=""
CLKGATETST_X1/IQ dir=internal func=""
CLKGATETST_X1/CK dir=input func=""
CLKGATETST_X1/E dir=input func=""
CLKGATETST_X1/SE dir=input func=""
CLKGATETST_X1/GCK dir=output func=""
INV_X1/ZN func=!A
BUF_X1/Z func=A
NAND2_X1/ZN func=!(A1*A2)
NOR2_X1/ZN func=!(A1+A2)
AND2_X1/ZN func=A1*A2
OR2_X1/ZN func=A1+A2
XOR2_X1/Z func=A^B
XNOR2_X1/ZN func=!(A^B)
AOI21_X1/ZN func=!(A+(B1*B2))
OAI21_X1/ZN func=!(A*(B1+B2))
MUX2_X1/Z func=(S*B)+(A*!S)
HA_X1/CO func=A*B
HA_X1/S func=A^B
FA_X1/CO func=(A*B)+(CI*(A+B))
FA_X1/S func=CI^(A^B)
sky130_fd_sc_hd__ebufn_1/A dir=input func="" tri=""
sky130_fd_sc_hd__ebufn_1/TE_B dir=input func="" tri=""
sky130_fd_sc_hd__ebufn_1/Z dir=tristate func="A" tri="!TE_B"
sky130_fd_sc_hd__ebufn_2/A dir=input func="" tri=""
sky130_fd_sc_hd__ebufn_2/TE_B dir=input func="" tri=""
sky130_fd_sc_hd__ebufn_2/Z dir=tristate func="A" tri="!TE_B"
Warning 1171: ../../test/nangate45/fake_macros.lib line 32, default_max_transition is 0.0.

View File

@ -0,0 +1,246 @@
# Test bus port member iteration, bundle ports, port functions,
# tristate enable, sequential queries, and diverse cell classification.
source ../../test/helpers.tcl
suppress_msg 1140
############################################################
# Read SRAM macro library (has bus ports)
############################################################
read_liberty ../../test/nangate45/fakeram45_64x7.lib
# Query bus port properties
set cell [get_lib_cell fakeram45_64x7/fakeram45_64x7]
puts "fakeram cell found"
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set name [get_name $port]
set dir [sta::liberty_port_direction $port]
set is_bus [$port is_bus]
set is_bit [$port is_bus_bit]
set is_bundle [$port is_bundle]
set is_bm [$port is_bundle_member]
set has_mem [$port has_members]
set func [$port function]
set tri [$port tristate_enable]
puts " $name dir=$dir bus=$is_bus bit=$is_bit bundle=$is_bundle bm=$is_bm members=$has_mem func=\"$func\" tri=\"$tri\""
if {$has_mem} {
set mem_iter [$port member_iterator]
set count 0
while {[$mem_iter has_next]} {
set mem [$mem_iter next]
set mname [get_name $mem]
set mdir [sta::liberty_port_direction $mem]
set m_is_bit [$mem is_bus_bit]
if {$count < 3} {
puts " member[$count]: $mname dir=$mdir bit=$m_is_bit"
}
incr count
}
$mem_iter finish
puts " total members=$count"
}
}
$port_iter finish
############################################################
# Read other SRAM macros with different bus widths
############################################################
foreach lib_name {fakeram45_64x32 fakeram45_256x16 fakeram45_512x64
fakeram45_1024x32 fakeram45_64x96} {
read_liberty ../../test/nangate45/${lib_name}.lib
set cell [get_lib_cell ${lib_name}/${lib_name}]
if {$cell != "NULL" && $cell ne ""} {
set port_iter [$cell liberty_port_iterator]
set bus_count 0
set bit_count 0
while {[$port_iter has_next]} {
set port [$port_iter next]
if {[$port is_bus]} {
incr bus_count
set mem_iter [$port member_iterator]
while {[$mem_iter has_next]} {
set mem [$mem_iter next]
incr bit_count
}
$mem_iter finish
}
}
$port_iter finish
puts "$lib_name: bus_ports=$bus_count total_bits=$bit_count"
}
}
############################################################
# Read SRAM macro from GF180MCU
############################################################
read_liberty ../../test/gf180mcu_sram.lib.gz
set gf_cells [get_lib_cells gf180mcu_fd_ip_sram__sram256x8m8wm1/*]
puts "gf180mcu cells: [llength $gf_cells]"
foreach cell_obj $gf_cells {
set cname [get_full_name $cell_obj]
set cell [get_lib_cell $cname]
set port_iter [$cell liberty_port_iterator]
set bus_count 0
while {[$port_iter has_next]} {
set port [$port_iter next]
if {[$port is_bus] || [$port has_members]} {
incr bus_count
}
$port_iter finish
puts " [get_name $cell_obj]: bus_ports=$bus_count"
}
}
############################################################
# Read Nangate for cell classification queries
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
# Cell classification
foreach cell_name {INV_X1 INV_X2 BUF_X1 BUF_X2 CLKBUF_X1
NAND2_X1 NOR2_X1 AND2_X1 OR2_X1 XOR2_X1
MUX2_X1 AOI21_X1 OAI21_X1 AOI22_X1 OAI22_X1
DFF_X1 DFF_X2 DFFR_X1 DFFS_X1 DFFRS_X1
SDFF_X1 SDFFR_X1 SDFFRS_X1 TLAT_X1
TINV_X1 CLKGATETST_X1 HA_X1 FA_X1
ANTENNA_X1 FILLCELL_X1 FILLCELL_X2 LOGIC0_X1 LOGIC1_X1} {
set cell [get_lib_cell NangateOpenCellLibrary/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set is_leaf [$cell is_leaf]
set is_buf [$cell is_buffer]
set is_inv [$cell is_inverter]
set area [get_property $cell area]
set du [get_property $cell dont_use]
set arc_sets [$cell timing_arc_sets]
set arc_count [llength $arc_sets]
puts "$cell_name leaf=$is_leaf buf=$is_buf inv=$is_inv area=$area du=$du arcs=$arc_count"
}
}
############################################################
# Test cell and scan signal type queries
############################################################
puts "--- test_cell / scan queries ---"
# SDFF has test_cell
set sdff [get_lib_cell NangateOpenCellLibrary/SDFF_X1]
set tc [$sdff test_cell]
if {$tc != "NULL" && $tc ne ""} {
puts "SDFF_X1 has test_cell"
} else {
puts "SDFF_X1 test_cell is null"
}
set sdffr [get_lib_cell NangateOpenCellLibrary/SDFFR_X1]
set tc [$sdffr test_cell]
if {$tc != "NULL" && $tc ne ""} {
puts "SDFFR_X1 has test_cell"
} else {
puts "SDFFR_X1 test_cell is null"
}
set sdffrs [get_lib_cell NangateOpenCellLibrary/SDFFRS_X1]
set tc [$sdffrs test_cell]
if {$tc != "NULL" && $tc ne ""} {
puts "SDFFRS_X1 has test_cell"
} else {
puts "SDFFRS_X1 test_cell is null"
}
# Regular DFF should NOT have test_cell
set dff [get_lib_cell NangateOpenCellLibrary/DFF_X1]
set tc [$dff test_cell]
if {$tc != "NULL" && $tc ne ""} {
puts "DFF_X1 has test_cell (unexpected)"
} else {
puts "DFF_X1 has no test_cell (expected)"
}
############################################################
# Port function and tristate enable queries
############################################################
puts "--- function and tristate queries ---"
# Tristate inverter
set tinv [get_lib_cell NangateOpenCellLibrary/TINV_X1]
set port_iter [$tinv liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set name [get_name $port]
set dir [sta::liberty_port_direction $port]
set func [$port function]
set tri [$port tristate_enable]
puts "TINV_X1/$name dir=$dir func=\"$func\" tri=\"$tri\""
}
$port_iter finish
# Clock gate tester
set clkgt [get_lib_cell NangateOpenCellLibrary/CLKGATETST_X1]
set port_iter [$clkgt liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set name [get_name $port]
set dir [sta::liberty_port_direction $port]
set func [$port function]
puts "CLKGATETST_X1/$name dir=$dir func=\"$func\""
}
$port_iter finish
# Output functions for various logic cells
foreach cell_name {INV_X1 BUF_X1 NAND2_X1 NOR2_X1 AND2_X1 OR2_X1
XOR2_X1 XNOR2_X1 AOI21_X1 OAI21_X1 MUX2_X1
HA_X1 FA_X1} {
set cell [get_lib_cell NangateOpenCellLibrary/$cell_name]
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set dir [sta::liberty_port_direction $port]
if {$dir == "output"} {
set func [$port function]
if {$func != ""} {
puts "$cell_name/[get_name $port] func=$func"
}
}
}
$port_iter finish
}
############################################################
# Read Sky130 for tristate and latch port queries
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
# Tristate buffer port queries
foreach cell_name {sky130_fd_sc_hd__ebufn_1 sky130_fd_sc_hd__ebufn_2} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set name [get_name $port]
set dir [sta::liberty_port_direction $port]
set func [$port function]
set tri [$port tristate_enable]
set is_pg [$port is_pwr_gnd]
if {!$is_pg} {
puts "$cell_name/$name dir=$dir func=\"$func\" tri=\"$tri\""
}
}
$port_iter finish
}
############################################################
# Read fake_macros library for memory/macro classification
############################################################
read_liberty ../../test/nangate45/fake_macros.lib
############################################################
# Write roundtrip with bus ports
############################################################
set outfile [make_result_file liberty_busport_mem_iter_write.lib]
sta::write_liberty fakeram45_64x7 $outfile
# Read back
read_liberty $outfile

24952
liberty/test/liberty_ccsn.ok Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,174 @@
# Test CCSN (current source) models and various timing model types.
# Targets:
# LibertyReader.cc: beginCcs/endCcs, receiver_capacitance groups,
# timing_type combinations,
# beginOutputCurrentRise/Fall, visitReceiverCapacitance,
# polynomial model visitors, ccsn noise model visitors,
# leakage_power groups, internal_power groups,
# max_capacitance/max_transition on pins, min_pulse_width
# TableModel.cc: different table axis variables, GateTableModel,
# CheckTableModel, 3D tables, receiver model tables
# TimingArc.cc: timing arc type queries (removal, recovery,
# three_state_enable, rising_edge, min_pulse_width)
# Liberty.cc: timing arc set queries, hasTimingArcs, timingArcSets
source ../../test/helpers.tcl
############################################################
# Read ASAP7 CCSN library (CCS models with receiver_capacitance)
############################################################
read_liberty ../../test/asap7_ccsn.lib.gz
# Report cells from CCSN library to exercise CCS model paths
set ccsn_cells [get_lib_cells */*]
foreach cell_obj $ccsn_cells {
report_lib_cell [get_full_name $cell_obj]
}
############################################################
# Read ASAP7 SEQ library (has setup/hold/recovery/removal arcs)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
# Report sequential cells which have diverse timing_type values
# DFF cells have setup, hold timing checks
set lib_seq [sta::find_liberty asap7sc7p5t_SEQ_RVT_FF_nldm_220123]
set seq_cells [$lib_seq find_liberty_cells_matching "DFF*" 0 0]
# Report specific cells to exercise different timing types
report_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DFFHQNx1_ASAP7_75t_R
report_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DFFHQNx2_ASAP7_75t_R
# Scan DFF cells (scan_in, scan_enable timing arcs)
report_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/SDFHQNx1_ASAP7_75t_R
report_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/SDFHQNx2_ASAP7_75t_R
# ICG cells (clock gating - exercises clock gate timing types)
report_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/ICGx1_ASAP7_75t_R
report_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/ICGx2_ASAP7_75t_R
# Async set/reset cells (recovery/removal timing types)
set async_cells [$lib_seq find_liberty_cells_matching "*ASYNC*" 0 0]
# DFFR cells with reset (recovery/removal)
set dffr_cells [$lib_seq find_liberty_cells_matching "DFFR*" 0 0]
foreach cell_obj $dffr_cells {
report_lib_cell [get_name $cell_obj]
}
############################################################
# Read ASAP7 SEQ SS corner for different model values
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_RVT_SS_nldm_220123.lib
############################################################
# Read ASAP7 SIMPLE library (combinational cells)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz
set simple_lib [sta::find_liberty asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120]
set simple_cells [$simple_lib find_liberty_cells_matching "*" 0 0]
############################################################
# Read ASAP7 AO library (AND-OR complex cells)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_AO_RVT_FF_nldm_211120.lib.gz
set ao_lib [sta::find_liberty asap7sc7p5t_AO_RVT_FF_nldm_211120]
set ao_cells [$ao_lib find_liberty_cells_matching "AO*" 0 0]
foreach c $ao_cells {
report_lib_cell [get_name $c]
}
############################################################
# Read ASAP7 OA library (OR-AND complex cells)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_OA_RVT_FF_nldm_211120.lib.gz
set oa_lib [sta::find_liberty asap7sc7p5t_OA_RVT_FF_nldm_211120]
set oa_cells [$oa_lib find_liberty_cells_matching "OA*" 0 0]
foreach c $oa_cells {
report_lib_cell [get_name $c]
}
############################################################
# Read ASAP7 INVBUF library
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_INVBUF_RVT_FF_nldm_220122.lib.gz
############################################################
# Read libraries from different process nodes
# Exercises different liberty features/syntax in each library
############################################################
# Read IHP SG13G2 library (has tristate, scan, different timing types)
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
set ihp_lib [sta::find_liberty sg13g2_stdcell_typ_1p20V_25C]
# Report tristate buffer cell (exercises three_state_enable paths)
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_ebufn_2
# Report scan flip-flop (exercises scan timing paths)
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_sdfbbp_1
# Report latch cell
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_dlhq_1
# MUX cell
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_mux2_1
# Read IHP second PVT corner
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p50V_25C.lib
############################################################
# Read latch library to exercise latch-specific code
############################################################
read_liberty ../../test/liberty_latch3.lib
############################################################
# Read liberty with backslash-EOL continuation
############################################################
read_liberty ../../test/liberty_backslash_eol.lib
############################################################
# Read liberty with float-as-string values
############################################################
read_liberty ../../test/liberty_float_as_str.lib
############################################################
# Read liberty arcs one2one libraries
############################################################
read_liberty ../../test/liberty_arcs_one2one_1.lib
read_liberty ../../test/liberty_arcs_one2one_2.lib
############################################################
# Read SRAM macro library (exercises macro/memory cells)
############################################################
read_liberty ../../test/gf180mcu_sram.lib.gz
############################################################
# Read ASAP7 SEQ LVT/SLVT (different threshold voltages)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_LVT_FF_nldm_220123.lib
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_SLVT_FF_nldm_220123.lib
############################################################
# Read ASAP7 INVBUF different Vt flavors
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_INVBUF_LVT_FF_nldm_220122.lib.gz
read_liberty ../../test/asap7/asap7sc7p5t_INVBUF_SLVT_FF_nldm_220122.lib.gz
############################################################
# Write liberty for ASAP7 SEQ
############################################################
set outfile [make_result_file liberty_ccsn_write.lib]
sta::write_liberty asap7sc7p5t_SEQ_RVT_FF_nldm_220123 $outfile
set outfile2 [make_result_file liberty_ccsn_write_ihp.lib]
sta::write_liberty sg13g2_stdcell_typ_1p20V_25C $outfile2

View File

@ -0,0 +1,291 @@
--- Nangate45 cell classification ---
BUF_X1 is_buffer = 1
BUF_X1 is_inverter = 0
BUF_X1 is_leaf = 1
INV_X1 is_buffer = 0
INV_X1 is_inverter = 1
CLKGATETST_X1 is_buffer = 0
CLKGATETST_X1 is_inverter = 0
DFF_X1 is_buffer = 0
DFF_X1 is_inverter = 0
DFF_X1 is_leaf = 1
SDFF_X1 test_cell = NULL
--- port function queries ---
INV_X1/ZN func=!A dir=output
BUF_X1/Z func=A dir=output
NAND2_X1/ZN func=!(A1*A2) dir=output
NOR2_X1/ZN func=!(A1+A2) dir=output
AND2_X1/ZN func=A1*A2 dir=output
OR2_X1/ZN func=A1+A2 dir=output
XOR2_X1/Z func=A^B dir=output
XNOR2_X1/ZN func=!(A^B) dir=output
AOI21_X1/ZN func=!(A+(B1*B2)) dir=output
OAI21_X1/ZN func=!(A*(B1+B2)) dir=output
MUX2_X1/Z func=(S*B)+(A*!S) dir=output
HA_X1/CO func=A*B dir=output
HA_X1/S func=A^B dir=output
FA_X1/CO func=(A*B)+(CI*(A+B)) dir=output
FA_X1/S func=CI^(A^B) dir=output
--- bus port member iteration ---
--- port capacitance corner ---
--- timing arc sets ---
INV_X1 arc_sets=1
A -> ZN is_check=0
rise -> fall
fall -> rise
BUF_X1 arc_sets=1
A -> Z is_check=0
rise -> rise
fall -> fall
DFF_X1 arc_sets=5
CK -> D is_check=1
rise -> rise
rise -> fall
CK -> D is_check=1
rise -> rise
rise -> fall
CK -> CK is_check=1
rise -> fall
fall -> rise
CK -> Q is_check=0
rise -> rise
rise -> fall
CK -> QN is_check=0
rise -> rise
rise -> fall
DFFR_X1 arc_sets=16
CK -> D is_check=1
rise -> rise
rise -> fall
CK -> D is_check=1
rise -> rise
rise -> fall
CK -> RN is_check=1
rise -> rise
CK -> RN is_check=1
rise -> rise
RN -> RN is_check=1
fall -> rise
CK -> CK is_check=1
rise -> fall
fall -> rise
CK -> Q is_check=0
rise -> rise
rise -> fall
RN -> Q is_check=0
fall -> fall
RN -> Q is_check=0
fall -> fall
RN -> Q is_check=0
fall -> fall
RN -> Q is_check=0
fall -> fall
CK -> QN is_check=0
rise -> rise
rise -> fall
RN -> QN is_check=0
fall -> rise
RN -> QN is_check=0
fall -> rise
RN -> QN is_check=0
fall -> rise
RN -> QN is_check=0
fall -> rise
NAND2_X1 arc_sets=2
A1 -> ZN is_check=0
rise -> fall
fall -> rise
A2 -> ZN is_check=0
rise -> fall
fall -> rise
AOI21_X1 arc_sets=5
A -> ZN is_check=0
rise -> fall
fall -> rise
A -> ZN is_check=0
rise -> fall
fall -> rise
A -> ZN is_check=0
rise -> fall
fall -> rise
B1 -> ZN is_check=0
rise -> fall
fall -> rise
B2 -> ZN is_check=0
rise -> fall
fall -> rise
MUX2_X1 arc_sets=6
A -> Z is_check=0
rise -> rise
fall -> fall
A -> Z is_check=0
rise -> rise
fall -> fall
B -> Z is_check=0
rise -> rise
fall -> fall
B -> Z is_check=0
rise -> rise
fall -> fall
S -> Z is_check=0
rise -> rise
fall -> fall
S -> Z is_check=0
rise -> fall
fall -> rise
SDFF_X1 arc_sets=9
CK -> D is_check=1
rise -> rise
rise -> fall
CK -> D is_check=1
rise -> rise
rise -> fall
CK -> SE is_check=1
rise -> rise
rise -> fall
CK -> SE is_check=1
rise -> rise
rise -> fall
CK -> SI is_check=1
rise -> rise
rise -> fall
CK -> SI is_check=1
rise -> rise
rise -> fall
CK -> CK is_check=1
rise -> fall
fall -> rise
CK -> Q is_check=0
rise -> rise
rise -> fall
CK -> QN is_check=0
rise -> rise
rise -> fall
CLKGATETST_X1 arc_sets=9
CK -> CK is_check=1
fall -> rise
CK -> E is_check=1
rise -> rise
rise -> fall
CK -> E is_check=1
rise -> rise
rise -> fall
CK -> SE is_check=1
rise -> rise
rise -> fall
CK -> SE is_check=1
rise -> rise
rise -> fall
CK -> GCK is_check=0
rise -> rise
fall -> fall
CK -> GCK is_check=0
rise -> rise
fall -> fall
CK -> GCK is_check=0
rise -> rise
fall -> fall
CK -> GCK is_check=0
fall -> fall
--- Sky130 cell queries ---
sky130_fd_sc_hd__inv_1 is_buffer=0 is_inverter=1
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
sky130_fd_sc_hd__inv_2 is_buffer=0 is_inverter=1
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
sky130_fd_sc_hd__inv_4 is_buffer=0 is_inverter=1
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
sky130_fd_sc_hd__buf_1 is_buffer=1 is_inverter=0
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
sky130_fd_sc_hd__buf_2 is_buffer=1 is_inverter=0
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
sky130_fd_sc_hd__nand2_1 is_buffer=0 is_inverter=0
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
sky130_fd_sc_hd__nor2_1 is_buffer=0 is_inverter=0
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
sky130_fd_sc_hd__and2_1 is_buffer=0 is_inverter=0
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
sky130_fd_sc_hd__or2_1 is_buffer=0 is_inverter=0
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
sky130_fd_sc_hd__dfxtp_1 is_buffer=0 is_inverter=0
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
sky130_fd_sc_hd__dfrtp_1 is_buffer=0 is_inverter=0
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
sky130_fd_sc_hd__mux2_1 is_buffer=0 is_inverter=0
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
sky130_fd_sc_hd__dlxtp_1 is_buffer=0 is_inverter=0
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
sky130_fd_sc_hd__ebufn_1 is_buffer=0 is_inverter=0
VGND pwr_gnd=1
VNB pwr_gnd=1
VPB pwr_gnd=1
VPWR pwr_gnd=1
--- operating conditions ---
Sky130 default OC process=1.0 voltage=1.7999999523162842 temp=25.0
--- IHP cell queries ---
sg13g2_inv_1 is_buffer=0 is_inverter=1
arc_sets=1
sg13g2_inv_2 is_buffer=0 is_inverter=1
arc_sets=1
sg13g2_buf_1 is_buffer=1 is_inverter=0
arc_sets=1
sg13g2_buf_2 is_buffer=1 is_inverter=0
arc_sets=1
sg13g2_nand2_1 is_buffer=0 is_inverter=0
arc_sets=2
sg13g2_nor2_1 is_buffer=0 is_inverter=0
arc_sets=2
sg13g2_and2_1 is_buffer=0 is_inverter=0
arc_sets=2
sg13g2_dfrbp_1 is_buffer=0 is_inverter=0
arc_sets=10
sg13g2_dfrbp_2 is_buffer=0 is_inverter=0
arc_sets=10
sg13g2_ebufn_2 is_buffer=0 is_inverter=0
arc_sets=3
--- ensure voltage waveforms ---
--- liberty cell matching ---
INV_* matches = 6
DFF* matches = 8
* matches = 134
regex INV_X matches = 6
INV_X1 port * matches = 4
INV_X1 port A matches = 1

View File

@ -0,0 +1,238 @@
# Test cell classification (isBuffer, isInverter, isClockGate, etc.),
# pg_pin iteration, bus port member iteration, internal power queries,
# and port function queries across multiple PDKs.
source ../../test/helpers.tcl
############################################################
# Read libraries with pg_pin info (Sky130 has pg_pin groups)
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
############################################################
# Cell classification queries on Nangate45
############################################################
puts "--- Nangate45 cell classification ---"
# Buffers
set buf_x1 [get_lib_cell NangateOpenCellLibrary/BUF_X1]
puts "BUF_X1 is_buffer = [$buf_x1 is_buffer]"
puts "BUF_X1 is_inverter = [$buf_x1 is_inverter]"
puts "BUF_X1 is_leaf = [$buf_x1 is_leaf]"
# Inverters
set inv_x1 [get_lib_cell NangateOpenCellLibrary/INV_X1]
puts "INV_X1 is_buffer = [$inv_x1 is_buffer]"
puts "INV_X1 is_inverter = [$inv_x1 is_inverter]"
# Clock gate cells
set clkgate [get_lib_cell NangateOpenCellLibrary/CLKGATETST_X1]
puts "CLKGATETST_X1 is_buffer = [$clkgate is_buffer]"
puts "CLKGATETST_X1 is_inverter = [$clkgate is_inverter]"
# DFF
set dff [get_lib_cell NangateOpenCellLibrary/DFF_X1]
puts "DFF_X1 is_buffer = [$dff is_buffer]"
puts "DFF_X1 is_inverter = [$dff is_inverter]"
puts "DFF_X1 is_leaf = [$dff is_leaf]"
# Test cell for scan DFF
set sdff [get_lib_cell NangateOpenCellLibrary/SDFF_X1]
set tc [$sdff test_cell]
puts "SDFF_X1 test_cell = $tc"
############################################################
# Port function queries (exercises FuncExpr::to_string)
############################################################
puts "--- port function queries ---"
foreach {lib_name cell_name} {
NangateOpenCellLibrary INV_X1
NangateOpenCellLibrary BUF_X1
NangateOpenCellLibrary NAND2_X1
NangateOpenCellLibrary NOR2_X1
NangateOpenCellLibrary AND2_X1
NangateOpenCellLibrary OR2_X1
NangateOpenCellLibrary XOR2_X1
NangateOpenCellLibrary XNOR2_X1
NangateOpenCellLibrary AOI21_X1
NangateOpenCellLibrary OAI21_X1
NangateOpenCellLibrary MUX2_X1
NangateOpenCellLibrary HA_X1
NangateOpenCellLibrary FA_X1
} {
set cell [get_lib_cell $lib_name/$cell_name]
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set func [$port function]
set tri [$port tristate_enable]
set dir [sta::liberty_port_direction $port]
set pwr [$port is_pwr_gnd]
if {$func != ""} {
puts " $cell_name/[$port bus_name] func=$func dir=$dir"
}
if {$tri != ""} {
puts " $cell_name/[$port bus_name] tristate=$tri"
}
}
$port_iter finish
}
############################################################
# Bus port and member iteration
############################################################
puts "--- bus port member iteration ---"
# ASAP7 SEQ has bus ports in some cells
set asap7_libs [get_libs asap7sc7p5t_SEQ_RVT_FF_nldm_220123]
set asap7_seq_lib [lindex $asap7_libs 0]
set asap7_cells [get_lib_cells asap7sc7p5t_SEQ_RVT_FF_nldm_220123/*]
foreach cell_obj $asap7_cells {
set cname [$cell_obj name]
set port_iter [$cell_obj liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
if {[$port is_bus]} {
puts "$cname/[$port bus_name] is_bus=1 has_members=[$port has_members]"
set mem_iter [$port member_iterator]
while {[$mem_iter has_next]} {
set member [$mem_iter next]
puts " member: [$member bus_name] is_bus_bit=[$member is_bus_bit]"
}
$mem_iter finish
}
if {[$port is_bundle]} {
puts "$cname/[$port bus_name] is_bundle=1"
}
}
$port_iter finish
}
############################################################
# Port capacitance with corner/min_max
############################################################
puts "--- port capacitance corner ---"
############################################################
# Timing arc set queries
############################################################
puts "--- timing arc sets ---"
foreach cell_name {INV_X1 BUF_X1 DFF_X1 DFFR_X1 NAND2_X1 AOI21_X1 MUX2_X1 SDFF_X1 CLKGATETST_X1} {
set cell [get_lib_cell NangateOpenCellLibrary/$cell_name]
set arc_sets [$cell timing_arc_sets]
puts "$cell_name arc_sets=[llength $arc_sets]"
foreach arc_set $arc_sets {
set from_port [$arc_set from]
set to_port [$arc_set to]
set role [$arc_set role]
set is_check [sta::timing_role_is_check $role]
set from_name [$from_port bus_name]
set to_name [$to_port bus_name]
puts " $from_name -> $to_name is_check=$is_check"
# Query timing arcs within the set
set arcs [$arc_set timing_arcs]
foreach arc $arcs {
set from_edge [$arc from_edge_name]
set to_edge [$arc to_edge_name]
puts " $from_edge -> $to_edge"
}
}
}
############################################################
# Sky130 cell queries (has pg_pin groups, different features)
############################################################
puts "--- Sky130 cell queries ---"
foreach cell_name {
sky130_fd_sc_hd__inv_1 sky130_fd_sc_hd__inv_2 sky130_fd_sc_hd__inv_4
sky130_fd_sc_hd__buf_1 sky130_fd_sc_hd__buf_2
sky130_fd_sc_hd__nand2_1 sky130_fd_sc_hd__nor2_1
sky130_fd_sc_hd__and2_1 sky130_fd_sc_hd__or2_1
sky130_fd_sc_hd__dfxtp_1 sky130_fd_sc_hd__dfrtp_1
sky130_fd_sc_hd__mux2_1
sky130_fd_sc_hd__dlxtp_1
sky130_fd_sc_hd__ebufn_1
} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
puts "$cell_name is_buffer=[$cell is_buffer] is_inverter=[$cell is_inverter]"
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set func [$port function]
set dir [sta::liberty_port_direction $port]
set pwr [$port is_pwr_gnd]
if {$pwr} {
puts " [$port bus_name] pwr_gnd=1"
}
}
$port_iter finish
}
############################################################
# Operating conditions (exercises find_operating_conditions)
############################################################
puts "--- operating conditions ---"
set sky_lib [lindex [get_libs sky130_fd_sc_hd__tt_025C_1v80] 0]
set default_oc [$sky_lib default_operating_conditions]
if {$default_oc != "NULL" && $default_oc ne ""} {
puts "Sky130 default OC process=[$default_oc process] voltage=[$default_oc voltage] temp=[$default_oc temperature]"
}
############################################################
# IHP cell queries (different vendor, might have different features)
############################################################
puts "--- IHP cell queries ---"
foreach cell_name {
sg13g2_inv_1 sg13g2_inv_2
sg13g2_buf_1 sg13g2_buf_2
sg13g2_nand2_1 sg13g2_nor2_1
sg13g2_and2_1
sg13g2_dfrbp_1 sg13g2_dfrbp_2
sg13g2_ebufn_2
} {
set cell [get_lib_cell sg13g2_stdcell_typ_1p20V_25C/$cell_name]
puts "$cell_name is_buffer=[$cell is_buffer] is_inverter=[$cell is_inverter]"
set arc_sets [$cell timing_arc_sets]
puts " arc_sets=[llength $arc_sets]"
}
############################################################
# Ensure voltage waveforms (exercises ensureVoltageWaveforms)
############################################################
puts "--- ensure voltage waveforms ---"
set inv [get_lib_cell NangateOpenCellLibrary/INV_X1]
$inv ensure_voltage_waveforms
set dff [get_lib_cell NangateOpenCellLibrary/DFF_X1]
$dff ensure_voltage_waveforms
############################################################
# Liberty cell matching with regex patterns
############################################################
puts "--- liberty cell matching ---"
set ng_lib [lindex [get_libs NangateOpenCellLibrary] 0]
set inv_matches [$ng_lib find_liberty_cells_matching "INV_*" 0 0]
puts "INV_* matches = [llength $inv_matches]"
set dff_matches [$ng_lib find_liberty_cells_matching "DFF*" 0 0]
puts "DFF* matches = [llength $dff_matches]"
set all_matches [$ng_lib find_liberty_cells_matching "*" 0 0]
puts "* matches = [llength $all_matches]"
# Regex matching
set regex_matches [$ng_lib find_liberty_cells_matching {^INV_X[0-9]+$} 1 0]
puts "regex INV_X matches = [llength $regex_matches]"
# Port matching on a cell
set inv [get_lib_cell NangateOpenCellLibrary/INV_X1]
set port_matches [$inv find_liberty_ports_matching "*" 0 0]
puts "INV_X1 port * matches = [llength $port_matches]"
set port_matches [$inv find_liberty_ports_matching "A" 0 0]
puts "INV_X1 port A matches = [llength $port_matches]"

View File

@ -0,0 +1,652 @@
INV_X1/A cap = 1.700230
INV_X2/A cap = 3.250891
INV_X4/A cap = 6.258425
INV_X8/A cap = 11.810652
INV_X16/A cap = 25.228138
INV_X32/A cap = 49.191467
BUF_X1/A cap = 0.974659
BUF_X2/A cap = 1.779209
BUF_X4/A cap = 3.401892
BUF_X8/A cap = 6.585178
BUF_X16/A cap = 12.410827
BUF_X32/A cap = 26.703922
INV_X1 area = 0.532000
INV_X2 area = 0.798000
INV_X4 area = 1.330000
INV_X8 area = 2.394000
INV_X16 area = 4.522000
INV_X32 area = 8.778000
BUF_X1 area = 0.798000
BUF_X2 area = 1.064000
BUF_X4 area = 1.862000
BUF_X8 area = 3.458000
BUF_X16 area = 6.650000
BUF_X32 area = 13.034000
DFF_X1 area = 4.522000
DFF_X2 area = 5.054000
DFFR_X1 area = 5.320000
DFFS_X1 area = 5.320000
DFFRS_X1 area = 6.384000
NAND2_X1 area = 0.798000
NAND2_X2 area = 1.330000
NAND2_X4 area = 2.394000
NOR2_X1 area = 0.798000
NOR2_X2 area = 1.330000
NOR2_X4 area = 2.394000
AOI21_X1 area = 1.064000
OAI21_X1 area = 1.064000
MUX2_X1 area = 1.862000
FA_X1 area = 4.256000
HA_X1 area = 2.660000
TINV_X1 area = 1.064000
CLKGATETST_X1 area = 3.990000
INV_X1 dont_use = 0
BUF_X1 dont_use = 0
DFF_X1 dont_use = 0
ANTENNA_X1 dont_use = 1
FILLCELL_X1 dont_use = 1
No paths found.
No paths found.
No paths found.
No paths found.
No paths found.
No paths found.
No paths found.
Group Slack
--------------------------------------------
clk1 2.05
clk2 0.08
clk1 6.92
clk2 9.88
max slew
Pin Limit Slew Slack
------------------------------------------------------------
inv1/ZN 0.20 0.02 0.18 (MET)
max capacitance
Pin Limit Cap Slack
------------------------------------------------------------
nor1/ZN 26.70 1.14 25.56 (MET)
Group Slack
--------------------------------------------
No paths found.
Required Actual
Pin Width Width Slack
------------------------------------------------------------
reg1/CK (high) 0.05 5.00 4.95 (MET)
Group Slack
--------------------------------------------
No paths found.
Group Internal Switching Leakage Total
Power Power Power Power (Watts)
----------------------------------------------------------------
Sequential 1.52e-06 6.90e-09 2.36e-07 1.76e-06 84.2%
Combinational 1.33e-07 7.11e-08 1.25e-07 3.29e-07 15.8%
Clock 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
Macro 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
Pad 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
----------------------------------------------------------------
Total 1.65e-06 7.80e-08 3.61e-07 2.09e-06 100.0%
79.0% 3.7% 17.3%
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
5.87e-07 6.90e-09 7.86e-08 6.73e-07 reg1
5.89e-07 0.00e+00 7.84e-08 6.67e-07 reg2
3.41e-07 0.00e+00 7.86e-08 4.20e-07 reg3
2.56e-08 2.00e-08 2.51e-08 7.07e-08 and1
2.70e-08 2.01e-08 2.27e-08 6.98e-08 or1
3.04e-08 1.13e-08 2.14e-08 6.31e-08 buf1
2.33e-08 5.90e-09 1.44e-08 4.35e-08 inv1
1.46e-08 6.90e-09 1.97e-08 4.11e-08 nor1
1.24e-08 6.90e-09 2.18e-08 4.11e-08 nand1
Cell sky130_fd_sc_hd__ebufn_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
A input 1.73-1.88
TE_B input 2.93-3.34
Z tristate enable=!TE_B function=A 2.26
Timing arcs
A -> Z
combinational
^ -> ^
v -> v
TE_B -> Z
tristate enable
v -> Z1
v -> Z0
TE_B -> Z
tristate disable
^ -> 0Z
^ -> 1Z
Cell sky130_fd_sc_hd__ebufn_2
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
A input 1.74-1.89
TE_B input 3.75-4.41
Z tristate enable=!TE_B function=A 2.75
Timing arcs
A -> Z
combinational
^ -> ^
v -> v
TE_B -> Z
tristate enable
v -> Z1
v -> Z0
TE_B -> Z
tristate disable
^ -> 0Z
^ -> 1Z
Cell sky130_fd_sc_hd__ebufn_4
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
A input 2.37-2.60
TE_B input 6.26-7.48
Z tristate enable=!TE_B function=A 5.20
Timing arcs
A -> Z
combinational
^ -> ^
v -> v
TE_B -> Z
tristate enable
v -> Z1
v -> Z0
TE_B -> Z
tristate disable
^ -> 0Z
^ -> 1Z
Cell sky130_fd_sc_hd__dlxtp_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
D input 1.70-1.85
GATE input 1.68-1.82
Q output function=IQ
IQ internal
IQ_N internal
Timing arcs
GATE -> D
setup
v -> ^
v -> v
GATE -> D
hold
v -> ^
v -> v
GATE -> GATE
width
^ -> v
D -> Q
Latch D to Q
^ -> ^
v -> v
GATE -> Q
Latch En to Q
^ -> ^
^ -> v
Cell sky130_fd_sc_hd__dlxtn_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
D input 1.70-1.89
GATE_N input 1.66-1.82
Q output function=IQ
IQ internal
IQ_N internal
Timing arcs
GATE_N -> D
setup
^ -> ^
^ -> v
GATE_N -> D
hold
^ -> ^
^ -> v
GATE_N -> GATE_N
width
v -> ^
D -> Q
Latch D to Q
^ -> ^
v -> v
GATE_N -> Q
Latch En to Q
v -> ^
v -> v
Cell sky130_fd_sc_hd__sdfxtp_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 1.69-1.86
D input 1.62-1.78
Q output function=IQ
SCD input 1.72-1.90
SCE input 3.19-3.58
IQ internal
IQ_N internal
Timing arcs
CLK -> CLK
width
^ -> v
v -> ^
CLK -> D
setup
^ -> ^
^ -> v
CLK -> D
hold
^ -> ^
^ -> v
CLK -> Q
Reg Clk to Q
^ -> ^
^ -> v
CLK -> SCD
setup
^ -> ^
^ -> v
CLK -> SCD
hold
^ -> ^
^ -> v
CLK -> SCE
setup
^ -> ^
^ -> v
CLK -> SCE
hold
^ -> ^
^ -> v
Cell sky130_fd_sc_hd__sdfxbp_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 1.70-1.87
D input 1.61-1.78
Q output function=IQ
Q_N output function=IQ_N
SCD input 1.72-1.90
SCE input 3.17-3.56
IQ internal
IQ_N internal
Timing arcs
CLK -> CLK
width
^ -> v
v -> ^
CLK -> D
setup
^ -> ^
^ -> v
CLK -> D
hold
^ -> ^
^ -> v
CLK -> Q
Reg Clk to Q
^ -> ^
^ -> v
CLK -> Q_N
Reg Clk to Q
^ -> ^
^ -> v
CLK -> SCD
setup
^ -> ^
^ -> v
CLK -> SCD
hold
^ -> ^
^ -> v
CLK -> SCE
setup
^ -> ^
^ -> v
CLK -> SCE
hold
^ -> ^
^ -> v
Cell sky130_fd_sc_hd__dfxtp_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 1.71-1.88
D input 1.67-1.68
Q output function=IQ
IQ internal
IQ_N internal
Timing arcs
CLK -> CLK
width
^ -> v
v -> ^
CLK -> D
setup
^ -> ^
^ -> v
CLK -> D
hold
^ -> ^
^ -> v
CLK -> Q
Reg Clk to Q
^ -> ^
^ -> v
Cell sky130_fd_sc_hd__dfrtp_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 1.71-1.87
D input 1.95-2.01
Q output function=IQ
RESET_B input 3.56-3.63
IQ internal
IQ_N internal
Timing arcs
CLK -> CLK
width
^ -> v
v -> ^
CLK -> D
setup
^ -> ^
^ -> v
CLK -> D
hold
^ -> ^
^ -> v
CLK -> Q
Reg Clk to Q
^ -> ^
^ -> v
RESET_B -> Q
Reg Set/Clr
v -> v
CLK -> RESET_B
recovery
^ -> ^
CLK -> RESET_B
removal
^ -> ^
RESET_B -> RESET_B
width
v -> ^
Cell sky130_fd_sc_hd__dfstp_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 1.69-1.86
D input 2.23-2.49
Q output function=IQ
SET_B input 3.36-3.44
IQ internal
IQ_N internal
Timing arcs
CLK -> CLK
width
^ -> v
v -> ^
CLK -> D
setup
^ -> ^
^ -> v
CLK -> D
hold
^ -> ^
^ -> v
CLK -> Q
Reg Clk to Q
^ -> ^
^ -> v
SET_B -> Q
Reg Set/Clr
v -> ^
CLK -> SET_B
recovery
^ -> ^
CLK -> SET_B
removal
^ -> ^
SET_B -> SET_B
width
v -> ^
Cell sky130_fd_sc_hd__dfbbp_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 1.69-1.89
D input 1.49-1.70
Q output function=IQ
Q_N output function=IQ_N
RESET_B input 1.53-1.67
SET_B input 3.35-3.53
IQ internal
IQ_N internal
Timing arcs
CLK -> CLK
width
^ -> v
v -> ^
CLK -> D
setup
^ -> ^
^ -> v
CLK -> D
hold
^ -> ^
^ -> v
CLK -> Q
Reg Clk to Q
^ -> ^
^ -> v
RESET_B -> Q
Reg Set/Clr
v -> v
SET_B -> Q
Reg Set/Clr
v -> ^
CLK -> Q_N
Reg Clk to Q
^ -> ^
^ -> v
RESET_B -> Q_N
Reg Set/Clr
v -> ^
SET_B -> Q_N
Reg Set/Clr
v -> v
CLK -> RESET_B
recovery
^ -> ^
CLK -> RESET_B
removal
^ -> ^
RESET_B -> RESET_B
width
v -> ^
SET_B -> RESET_B
non-sequential setup
^ -> ^
SET_B -> RESET_B
non-sequential hold
^ -> ^
CLK -> SET_B
recovery
^ -> ^
CLK -> SET_B
removal
^ -> ^
RESET_B -> SET_B
non-sequential setup
^ -> ^
SET_B -> SET_B
width
v -> ^
RESET_B -> SET_B
non-sequential hold
^ -> ^
Cell sky130_fd_sc_hd__mux2_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
A0 input 1.51-1.61
A1 input 1.81-1.96
S input 3.29-3.52
X output function=(A0*!S)+(A1*S)
Timing arcs
A0 -> X
combinational
^ -> ^
v -> v
A1 -> X
combinational
^ -> ^
v -> v
S -> X
combinational
^ -> ^
v -> v
S -> X
combinational
^ -> v
v -> ^
Cell sky130_fd_sc_hd__mux2i_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
A0 input 2.10-2.31
A1 input 2.15-2.36
S input 4.48-4.83
Y output function=(!A0*!S)+(!A1*S)
Timing arcs
A0 -> Y
combinational
^ -> v
v -> ^
A1 -> Y
combinational
^ -> v
v -> ^
S -> Y
combinational
^ -> v
v -> ^
S -> Y
combinational
^ -> ^
v -> v
Cell sky130_fd_sc_hd__mux4_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
A0 input 1.48-1.57
A1 input 1.40-1.48
A2 input 1.42-1.51
A3 input 1.44-1.52
S0 input 3.70-4.09
S1 input 2.61-2.74
X output function=((((A0*!S0)*!S1)+((A1*S0)*!S1))+((A2*!S0)*S1))+((A3*S0)*S1)
Timing arcs
A0 -> X
combinational
^ -> ^
v -> v
A1 -> X
combinational
^ -> ^
v -> v
A2 -> X
combinational
^ -> ^
v -> v
A3 -> X
combinational
^ -> ^
v -> v
S0 -> X
combinational
^ -> ^
v -> v
S0 -> X
combinational
^ -> v
v -> ^
S1 -> X
combinational
^ -> ^
v -> v
S1 -> X
combinational
^ -> v
v -> ^
Differences found at line 107.
cell_rise(Timing_7_7) {
cell_rise(Timing_7_7) {

View File

@ -0,0 +1,161 @@
# Deep cell property queries: timing arc traversal, port capacitance,
# sequential elements, leakage/internal power, and cell classification.
source ../../test/helpers.tcl
############################################################
# Read libraries
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
############################################################
# Port capacitance queries
# Exercises: LibertyPort capacitance getters/setters
############################################################
set inv_a [get_lib_pin NangateOpenCellLibrary/INV_X1/A]
set inv_zn [get_lib_pin NangateOpenCellLibrary/INV_X1/ZN]
set cap_a [get_property $inv_a capacitance]
set cap_zn [get_property $inv_zn capacitance]
# DFF capacitance queries
set dff_ck [get_lib_pin NangateOpenCellLibrary/DFF_X1/CK]
set cap_ck [get_property $dff_ck capacitance]
set dff_d [get_lib_pin NangateOpenCellLibrary/DFF_X1/D]
set cap_d [get_property $dff_d capacitance]
# Larger drive strengths have different capacitances
foreach size {1 2 4 8 16 32} {
set pin [get_lib_pin NangateOpenCellLibrary/INV_X${size}/A]
set cap [get_property $pin capacitance]
puts "INV_X${size}/A cap = $cap"
}
foreach size {1 2 4 8 16 32} {
set pin [get_lib_pin NangateOpenCellLibrary/BUF_X${size}/A]
set cap [get_property $pin capacitance]
puts "BUF_X${size}/A cap = $cap"
}
############################################################
# Cell area queries
############################################################
foreach cell_name {INV_X1 INV_X2 INV_X4 INV_X8 INV_X16 INV_X32
BUF_X1 BUF_X2 BUF_X4 BUF_X8 BUF_X16 BUF_X32
DFF_X1 DFF_X2 DFFR_X1 DFFS_X1 DFFRS_X1
NAND2_X1 NAND2_X2 NAND2_X4
NOR2_X1 NOR2_X2 NOR2_X4
AOI21_X1 OAI21_X1 MUX2_X1 FA_X1 HA_X1
TINV_X1 CLKGATETST_X1} {
set cell [get_lib_cell NangateOpenCellLibrary/$cell_name]
set area [get_property $cell area]
puts "$cell_name area = $area"
}
############################################################
# Cell dont_use, is_macro, is_memory queries
############################################################
foreach cell_name {INV_X1 BUF_X1 DFF_X1 ANTENNA_X1 FILLCELL_X1} {
set cell [get_lib_cell NangateOpenCellLibrary/$cell_name]
set du [get_property $cell dont_use]
puts "$cell_name dont_use = $du"
}
############################################################
# Leakage power queries
############################################################
############################################################
# Timing arc property queries
# Exercises: arc direction, sense, timing_type
############################################################
# Setup a design and run timing to exercise arc evaluation
read_verilog ../../sdc/test/sdc_test2.v
link_design sdc_test2
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 20 [get_ports clk2]
set_input_delay -clock clk1 2.0 [get_ports {in1 in2 in3}]
set_output_delay -clock clk1 3.0 [all_outputs]
set_input_transition 0.1 [all_inputs]
# Detailed timing reports exercise arc evaluation
report_checks -from [get_ports in1] -to [get_ports out1] -path_delay max
report_checks -from [get_ports in1] -to [get_ports out1] -path_delay min
report_checks -from [get_ports in2] -to [get_ports out2]
# Rise/fall reports exercise different arc transitions
report_checks -rise_from [get_ports in1] -to [get_ports out1]
report_checks -fall_from [get_ports in1] -to [get_ports out1]
report_checks -from [get_ports in1] -rise_to [get_ports out1]
report_checks -from [get_ports in1] -fall_to [get_ports out1]
############################################################
# Report check types exercises different check arc types
############################################################
report_check_types -max_delay -min_delay
report_check_types -max_slew -max_capacitance -max_fanout
report_check_types -recovery -removal
report_check_types -min_pulse_width -min_period
report_check_types -clock_gating_setup -clock_gating_hold
report_check_types -max_skew
############################################################
# Report power to exercise internal power model paths
############################################################
report_power
report_power -instances [get_cells *]
############################################################
# Sky130 cells - different tristate and latch cells
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
# Tristate buffer
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__ebufn_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__ebufn_2
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__ebufn_4
# Latch cells
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1
# Scan flip-flops
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_1
# DFF with async set/clear (exercises recovery/removal)
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbp_1
# Mux cells
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__mux2_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__mux2i_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__mux4_1
############################################################
# Write roundtrip to exercise all writer cell/arc/model paths
############################################################
set outfile [make_result_file liberty_cell_deep_write.lib]
sta::write_liberty NangateOpenCellLibrary $outfile
# Verify file contents against static golden.
diff_files liberty_cell_deep_write.libok $outfile

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,189 @@
--- voltage_map / supply queries ---
VPWR exists: 1
VGND exists: 1
VPB exists: 1
VNB exists: 1
KAPWR exists: 1
LOWLVPWR exists: 1
VPWRIN exists: 1
VSS exists: 1
FAKE_SUPPLY exists: 0
--- clock gate cell queries ---
sky130_fd_sc_hd__dlclkp_1 area=17.516800
Cell sky130_fd_sc_hd__dlclkp_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 0.00-0.00
GATE input 0.00-0.00
GCLK output
M0 internal
Timing arcs
CLK -> CLK
width
v -> ^
CLK -> GATE
setup
^ -> ^
^ -> v
CLK -> GATE
hold
^ -> ^
^ -> v
CLK -> GCLK
combinational
^ -> ^
v -> v
sky130_fd_sc_hd__dlclkp_2 area=18.768000
Cell sky130_fd_sc_hd__dlclkp_2
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 0.00-0.00
GATE input 0.00-0.00
GCLK output
M0 internal
Timing arcs
CLK -> CLK
width
v -> ^
CLK -> GATE
setup
^ -> ^
^ -> v
CLK -> GATE
hold
^ -> ^
^ -> v
CLK -> GCLK
combinational
^ -> ^
v -> v
sky130_fd_sc_hd__dlclkp_4 area=21.270399
Cell sky130_fd_sc_hd__dlclkp_4
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 0.00-0.01
GATE input 0.00-0.00
GCLK output
M0 internal
Timing arcs
CLK -> CLK
width
v -> ^
CLK -> GATE
setup
^ -> ^
^ -> v
CLK -> GATE
hold
^ -> ^
^ -> v
CLK -> GCLK
combinational
^ -> ^
v -> v
sky130_fd_sc_hd__sdlclkp_1 area=18.768000
VGND dir=ground func=
VNB dir=bias func=
VPB dir=bias func=
VPWR dir=power func=
CLK dir=input func=
GATE dir=input func=
GCLK dir=output func=
M0 dir=internal func=
SCE dir=input func=
sky130_fd_sc_hd__sdlclkp_2 area=20.019199
VGND dir=ground func=
VNB dir=bias func=
VPB dir=bias func=
VPWR dir=power func=
CLK dir=input func=
GATE dir=input func=
GCLK dir=output func=
M0 dir=internal func=
SCE dir=input func=
sky130_fd_sc_hd__sdlclkp_4 area=22.521601
VGND dir=ground func=
VNB dir=bias func=
VPB dir=bias func=
VPWR dir=power func=
CLK dir=input func=
GATE dir=input func=
GCLK dir=output func=
M0 dir=internal func=
SCE dir=input func=
--- level shifter cell queries ---
sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_1 area=35.033600
A dir=input
X dir=output
sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_2 area=35.033600
A dir=input
X dir=output
sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_4 area=40.038399
A dir=input
X dir=output
sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_4 area=40.038399
A dir=input
X dir=output
sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_1 area=35.033600
A dir=input
X dir=output
sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_2 area=35.033600
A dir=input
X dir=output
sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_4 area=40.038399
A dir=input
X dir=output
--- pg_pin queries ---
sky130_fd_sc_hd__inv_1: pwr_pins=4 signal_pins=2
sky130_fd_sc_hd__buf_1: pwr_pins=4 signal_pins=2
sky130_fd_sc_hd__nand2_1: pwr_pins=4 signal_pins=3
sky130_fd_sc_hd__dfxtp_1: pwr_pins=4 signal_pins=5
sky130_fd_sc_hd__dlclkp_1: pwr_pins=4 signal_pins=4
sky130_fd_sc_hd__sdfxtp_1: pwr_pins=4 signal_pins=7
--- clock gate timing arcs ---
dlclkp_1 arc_sets = 4
CLK -> CLK role=width
CLK -> GATE role=setup
CLK -> GATE role=hold
CLK -> GCLK role=combinational
sdlclkp_1 arc_sets = 6
CLK -> CLK role=width
CLK -> GATE role=setup
CLK -> GATE role=hold
CLK -> GCLK role=combinational
CLK -> SCE role=setup
CLK -> SCE role=hold
--- level shifter timing arcs ---
lsbuf_lh_hl_isowell_tap_1 arcs = 1
A -> X role=combinational
--- cell classification ---
sky130_fd_sc_hd__inv_1: is_buffer=0 is_inverter=1 is_leaf=1
sky130_fd_sc_hd__inv_2: is_buffer=0 is_inverter=1 is_leaf=1
sky130_fd_sc_hd__buf_1: is_buffer=1 is_inverter=0 is_leaf=1
sky130_fd_sc_hd__buf_2: is_buffer=1 is_inverter=0 is_leaf=1
sky130_fd_sc_hd__clkinv_1: is_buffer=0 is_inverter=1 is_leaf=1
sky130_fd_sc_hd__clkbuf_1: is_buffer=1 is_inverter=0 is_leaf=1
sky130_fd_sc_hd__nand2_1: is_buffer=0 is_inverter=0 is_leaf=1
sky130_fd_sc_hd__nor2_1: is_buffer=0 is_inverter=0 is_leaf=1
sky130_fd_sc_hd__dfxtp_1: is_buffer=0 is_inverter=0 is_leaf=1
sky130_fd_sc_hd__dlclkp_1: is_buffer=0 is_inverter=0 is_leaf=1
IHP VDD exists: 0
IHP sg13g2_inv_1: area=5.443200 buf=0 inv=1
IHP sg13g2_buf_1: area=7.257600 buf=1 inv=0
IHP sg13g2_nand2_1: area=7.257600 buf=0 inv=0
IHP sg13g2_nor2_1: area=7.257600 buf=0 inv=0

View File

@ -0,0 +1,236 @@
# Test clock gating cells, level shifter cells, pg_pin attributes,
# voltage_map/supply_voltage queries, and related cell classification.
source ../../test/helpers.tcl
############################################################
# Read Sky130 library (has clock gate cells, level shifters, pg_pins)
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
set lib [sta::find_liberty sky130_fd_sc_hd__tt_025C_1v80]
############################################################
# Voltage map / supply voltage queries
# Exercises: addSupplyVoltage, supplyVoltage, supplyExists
############################################################
puts "--- voltage_map / supply queries ---"
set vpwr_exists [sta::liberty_supply_exists VPWR]
puts "VPWR exists: $vpwr_exists"
set vgnd_exists [sta::liberty_supply_exists VGND]
puts "VGND exists: $vgnd_exists"
set vpb_exists [sta::liberty_supply_exists VPB]
puts "VPB exists: $vpb_exists"
set vnb_exists [sta::liberty_supply_exists VNB]
puts "VNB exists: $vnb_exists"
set kapwr_exists [sta::liberty_supply_exists KAPWR]
puts "KAPWR exists: $kapwr_exists"
set lowlv_exists [sta::liberty_supply_exists LOWLVPWR]
puts "LOWLVPWR exists: $lowlv_exists"
set vpwrin_exists [sta::liberty_supply_exists VPWRIN]
puts "VPWRIN exists: $vpwrin_exists"
set vss_exists [sta::liberty_supply_exists VSS]
puts "VSS exists: $vss_exists"
# Non-existent supply
set fake_exists [sta::liberty_supply_exists FAKE_SUPPLY]
puts "FAKE_SUPPLY exists: $fake_exists"
############################################################
# Clock gate cell queries (exercises clock_gating_integrated_cell)
# dlclkp cells have latch_posedge type
############################################################
puts "--- clock gate cell queries ---"
foreach cell_name {sky130_fd_sc_hd__dlclkp_1 sky130_fd_sc_hd__dlclkp_2
sky130_fd_sc_hd__dlclkp_4} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set area [get_property $cell area]
puts "$cell_name area=$area"
# Report the cell to exercise arc enumeration
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name
}
}
# sdlclkp cells have latch_posedge_precontrol type
foreach cell_name {sky130_fd_sc_hd__sdlclkp_1 sky130_fd_sc_hd__sdlclkp_2
sky130_fd_sc_hd__sdlclkp_4} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set area [get_property $cell area]
puts "$cell_name area=$area"
# Iterate ports to check clock_gate_* pin attributes
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set dir [sta::liberty_port_direction $port]
set func [$port function]
puts " [get_name $port] dir=$dir func=$func"
}
$port_iter finish
}
}
############################################################
# Level shifter cell queries
# Exercises: visitIsLevelShifter, visitLevelShifterType
############################################################
puts "--- level shifter cell queries ---"
foreach cell_name {sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_1
sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_2
sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_4
sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_4
sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_1
sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_2
sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_4} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set area [get_property $cell area]
puts "$cell_name area=$area"
# Iterate ports
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set dir [sta::liberty_port_direction $port]
set is_pwr [$port is_pwr_gnd]
if {!$is_pwr} {
puts " [get_name $port] dir=$dir"
}
}
$port_iter finish
}
}
############################################################
# PG pin queries on various cells
# Exercises: pg_pin parsing, isPwrGnd, voltage_name
############################################################
puts "--- pg_pin queries ---"
foreach cell_name {sky130_fd_sc_hd__inv_1 sky130_fd_sc_hd__buf_1
sky130_fd_sc_hd__nand2_1 sky130_fd_sc_hd__dfxtp_1
sky130_fd_sc_hd__dlclkp_1 sky130_fd_sc_hd__sdfxtp_1} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set pwr_count 0
set sig_count 0
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set is_pwr [$port is_pwr_gnd]
if {$is_pwr} {
incr pwr_count
} else {
incr sig_count
}
}
$port_iter finish
puts "$cell_name: pwr_pins=$pwr_count signal_pins=$sig_count"
}
}
############################################################
# Timing arc queries on clock gate cells
# Exercises: timing_type for clock gate arcs
############################################################
puts "--- clock gate timing arcs ---"
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_1]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
set arc_count [llength $arcs]
puts "dlclkp_1 arc_sets = $arc_count"
foreach arc $arcs {
set from_port [$arc from]
set to_port [$arc to]
set role [$arc role]
puts " [$from_port bus_name] -> [$to_port bus_name] role=$role"
}
}
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdlclkp_1]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
set arc_count [llength $arcs]
puts "sdlclkp_1 arc_sets = $arc_count"
foreach arc $arcs {
set from_port [$arc from]
set to_port [$arc to]
set role [$arc role]
puts " [$from_port bus_name] -> [$to_port bus_name] role=$role"
}
}
############################################################
# Timing arc queries on level shifter cells
############################################################
puts "--- level shifter timing arcs ---"
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_1]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
puts "lsbuf_lh_hl_isowell_tap_1 arcs = [llength $arcs]"
foreach arc $arcs {
set from_port [$arc from]
set to_port [$arc to]
set role [$arc role]
puts " [$from_port bus_name] -> [$to_port bus_name] role=$role"
}
}
############################################################
# Buffer/inverter classification on Sky130 cells
############################################################
puts "--- cell classification ---"
foreach cell_name {sky130_fd_sc_hd__inv_1 sky130_fd_sc_hd__inv_2
sky130_fd_sc_hd__buf_1 sky130_fd_sc_hd__buf_2
sky130_fd_sc_hd__clkinv_1 sky130_fd_sc_hd__clkbuf_1
sky130_fd_sc_hd__nand2_1 sky130_fd_sc_hd__nor2_1
sky130_fd_sc_hd__dfxtp_1 sky130_fd_sc_hd__dlclkp_1} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set is_buf [$cell is_buffer]
set is_inv [$cell is_inverter]
set is_leaf [$cell is_leaf]
puts "$cell_name: is_buffer=$is_buf is_inverter=$is_inv is_leaf=$is_leaf"
}
}
############################################################
# Write liberty for sky130 (exercises writer for pg_pin, level_shifter)
############################################################
set outfile [make_result_file liberty_clkgate_lvlshift_write.lib]
sta::write_liberty sky130_fd_sc_hd__tt_025C_1v80 $outfile
############################################################
# Read IHP library for more voltage_map / pg_pin coverage
############################################################
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
# Check supply exists after IHP
set ihp_vdd_exists [sta::liberty_supply_exists VDD]
puts "IHP VDD exists: $ihp_vdd_exists"
# Query IHP cells
foreach cell_name {sg13g2_inv_1 sg13g2_buf_1 sg13g2_nand2_1 sg13g2_nor2_1} {
set cell [get_lib_cell sg13g2_stdcell_typ_1p20V_25C/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set area [get_property $cell area]
set is_buf [$cell is_buffer]
set is_inv [$cell is_inverter]
puts "IHP $cell_name: area=$area buf=$is_buf inv=$is_inv"
}
}

View File

@ -0,0 +1,59 @@
library(test_ecsm_lib) {
delay_model : table_lookup ;
time_unit : "1ns" ;
voltage_unit : "1V" ;
current_unit : "1mA" ;
capacitive_load_unit(1, ff) ;
input_threshold_pct_rise : 50 ;
output_threshold_pct_rise : 50 ;
slew_lower_threshold_pct_rise : 20 ;
slew_upper_threshold_pct_rise : 80 ;
input_threshold_pct_fall : 50 ;
output_threshold_pct_fall : 50 ;
slew_lower_threshold_pct_fall : 20 ;
slew_upper_threshold_pct_fall : 80 ;
lu_table_template(delay_template_2x2) {
variable_1 : input_net_transition ;
variable_2 : total_output_net_capacitance ;
index_1("0.01, 0.1") ;
index_2("0.001, 0.01") ;
}
cell(ECSM1) {
area : 2.0 ;
pin(A) { direction : input ; capacitance : 0.01 ; }
pin(Z) {
direction : output ;
function : "A" ;
timing() {
related_pin : "A" ;
timing_sense : positive_unate ;
cell_rise(delay_template_2x2) { values("0.01, 0.02", "0.03, 0.04") ; }
cell_fall(delay_template_2x2) { values("0.01, 0.02", "0.03, 0.04") ; }
rise_transition(delay_template_2x2) { values("0.01, 0.02", "0.03, 0.04") ; }
fall_transition(delay_template_2x2) { values("0.01, 0.02", "0.03, 0.04") ; }
ecsm_waveform() {}
}
}
}
cell(ECSM2) {
area : 2.0 ;
pin(A) { direction : input ; capacitance : 0.01 ; }
pin(Z) {
direction : output ;
function : "A" ;
timing() {
related_pin : "A" ;
timing_sense : positive_unate ;
cell_rise(delay_template_2x2) { values("0.01, 0.02", "0.03, 0.04") ; }
cell_fall(delay_template_2x2) { values("0.01, 0.02", "0.03, 0.04") ; }
rise_transition(delay_template_2x2) { values("0.01, 0.02", "0.03, 0.04") ; }
fall_transition(delay_template_2x2) { values("0.01, 0.02", "0.03, 0.04") ; }
ecsm_waveform_set() {}
ecsm_capacitance() {}
}
}
}
}

View File

@ -0,0 +1,5 @@
ecsm cell count: 2
ecsm cell: ECSM1
ecsm cell: ECSM2
ecsm timing max: ok
ecsm timing min: ok

View File

@ -0,0 +1,74 @@
source ../../test/helpers.tcl
read_liberty liberty_ecsm.lib
set ecsm_src [open liberty_ecsm.lib r]
set ecsm_text [read $ecsm_src]
close $ecsm_src
foreach token {ecsm_waveform ecsm_waveform_set ecsm_capacitance} {
if {[string first $token $ecsm_text] < 0} {
error "liberty_ecsm.lib is missing expected ECSM token '$token'"
}
}
set cell_names {}
foreach cell [get_lib_cells test_ecsm_lib/*] {
lappend cell_names [get_name $cell]
}
set cell_names [lsort $cell_names]
puts "ecsm cell count: [llength $cell_names]"
foreach cell_name $cell_names {
puts "ecsm cell: $cell_name"
}
if {$cell_names ne [list ECSM1 ECSM2]} {
error "unexpected ECSM cell list: $cell_names"
}
foreach cell_name $cell_names {
set cell [get_lib_cell test_ecsm_lib/$cell_name]
set arc_sets [$cell timing_arc_sets]
if {[llength $arc_sets] == 0} {
error "$cell_name has no timing arc sets"
}
set arc_count 0
foreach arc_set $arc_sets {
incr arc_count [llength [$arc_set timing_arcs]]
}
if {$arc_count == 0} {
error "$cell_name has no timing arcs"
}
}
# Verify ECSM-tagged library also participates in actual timing paths.
read_verilog liberty_ecsm_test.v
link_design liberty_ecsm_test
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 1.0 [get_ports in1]
set_output_delay -clock clk 1.0 [get_ports out1]
with_output_to_variable max_rep {
report_checks -path_delay max -from [get_ports in1] -to [get_ports out1]
}
if {![regexp {Startpoint:\s+in1} $max_rep]
|| ![regexp {Endpoint:\s+out1} $max_rep]
|| ![regexp {u1/} $max_rep]
|| ![regexp {u2/} $max_rep]
|| ![regexp {slack} $max_rep]} {
error "ECSM max timing report missing expected path content"
}
puts "ecsm timing max: ok"
with_output_to_variable min_rep {
report_checks -path_delay min -from [get_ports in1] -to [get_ports out1]
}
if {![regexp {Startpoint:\s+in1} $min_rep]
|| ![regexp {Endpoint:\s+out1} $min_rep]
|| ![regexp {u1/} $min_rep]
|| ![regexp {u2/} $min_rep]
|| ![regexp {slack} $min_rep]} {
error "ECSM min timing report missing expected path content"
}
puts "ecsm timing min: ok"

View File

@ -0,0 +1,19 @@
module liberty_ecsm_test (
input clk,
input in1,
output out1
);
wire n1;
ECSM1 u1 (
.A(in1),
.Z(n1)
);
ECSM2 u2 (
.A(n1),
.Z(out1)
);
endmodule

View File

@ -0,0 +1,39 @@
INV equiv count: 6
BUF equiv count: 9
NAND2 equiv count: 3
NOR2 equiv count: 3
AND2 equiv count: 3
OR2 equiv count: 3
DFF equiv count: 2
DFFR equiv count: 2
DFFS equiv count: 2
AOI21 equiv count: 3
OAI21 equiv count: 3
MUX2 equiv count: 2
SDFF equiv count: 2
INV_X1 equiv INV_X2: 1
BUF_X1 equiv BUF_X2: 1
INV_X1 equiv BUF_X1: 0
NAND2 equiv NOR2: 0
DFF_X1 equiv DFF_X2: 1
DFF_X1 equiv DFFR_X1: 0
NAND2 equiv NAND3: 0
INV_X4 equiv INV_X8: 1
equiv_cell_ports INV_X1 INV_X2: 1
equiv_cell_ports INV_X1 BUF_X1: 0
equiv_cell_ports NAND2_X1 NAND2_X2: 1
equiv_cell_ports NAND2_X1 NAND3_X1: 0
equiv_cell_timing_arcs INV_X1 INV_X2: 1
equiv_cell_timing_arcs BUF_X1 BUF_X2: 1
equiv_cell_timing_arcs INV_X1 BUF_X1: 0
library buffers count: 9
find_liberty: NangateOpenCellLibrary
supply VDD exists: 1
supply VSS exists: 1
supply NONEXISTENT exists: 0
INV_X1/A direction: input
INV_X1/ZN direction: output
DFF_X1/CK direction: input
DFF_X1/Q direction: output
fast INV equiv count: 6
INV_X1 (typ) equiv INV_X1 (fast): 1

View File

@ -0,0 +1,204 @@
# Test equivalent cell finding for EquivCells.cc code coverage
read_liberty ../../test/nangate45/Nangate45_typ.lib
############################################################
# make_equiv_cells / find_equiv_cells / equiv_cells
############################################################
# Make equivalent cells for the Nangate library
set lib [lindex [get_libs NangateOpenCellLibrary] 0]
sta::make_equiv_cells $lib
# Find equiv cells for various cell types
# INV_X1 should have equivalents (INV_X2, INV_X4, etc.)
set inv_cell [get_lib_cell NangateOpenCellLibrary/INV_X1]
set inv_equivs [sta::find_equiv_cells $inv_cell]
puts "INV equiv count: [llength $inv_equivs]"
set buf_cell [get_lib_cell NangateOpenCellLibrary/BUF_X1]
set buf_equivs [sta::find_equiv_cells $buf_cell]
puts "BUF equiv count: [llength $buf_equivs]"
set nand_cell [get_lib_cell NangateOpenCellLibrary/NAND2_X1]
set nand_equivs [sta::find_equiv_cells $nand_cell]
puts "NAND2 equiv count: [llength $nand_equivs]"
set nor_cell [get_lib_cell NangateOpenCellLibrary/NOR2_X1]
set nor_equivs [sta::find_equiv_cells $nor_cell]
puts "NOR2 equiv count: [llength $nor_equivs]"
set and_cell [get_lib_cell NangateOpenCellLibrary/AND2_X1]
set and_equivs [sta::find_equiv_cells $and_cell]
puts "AND2 equiv count: [llength $and_equivs]"
set or_cell [get_lib_cell NangateOpenCellLibrary/OR2_X1]
set or_equivs [sta::find_equiv_cells $or_cell]
puts "OR2 equiv count: [llength $or_equivs]"
# DFF cells
set dff_cell [get_lib_cell NangateOpenCellLibrary/DFF_X1]
set dff_equivs [sta::find_equiv_cells $dff_cell]
puts "DFF equiv count: [llength $dff_equivs]"
set dffr_cell [get_lib_cell NangateOpenCellLibrary/DFFR_X1]
set dffr_equivs [sta::find_equiv_cells $dffr_cell]
puts "DFFR equiv count: [llength $dffr_equivs]"
set dffs_cell [get_lib_cell NangateOpenCellLibrary/DFFS_X1]
set dffs_equivs [sta::find_equiv_cells $dffs_cell]
puts "DFFS equiv count: [llength $dffs_equivs]"
# AOI cells
set aoi_cell [get_lib_cell NangateOpenCellLibrary/AOI21_X1]
set aoi_equivs [sta::find_equiv_cells $aoi_cell]
puts "AOI21 equiv count: [llength $aoi_equivs]"
# OAI cells
set oai_cell [get_lib_cell NangateOpenCellLibrary/OAI21_X1]
set oai_equivs [sta::find_equiv_cells $oai_cell]
puts "OAI21 equiv count: [llength $oai_equivs]"
# MUX cells
set mux_cell [get_lib_cell NangateOpenCellLibrary/MUX2_X1]
set mux_equivs [sta::find_equiv_cells $mux_cell]
puts "MUX2 equiv count: [llength $mux_equivs]"
# SDFF cells
set sdff_cell [get_lib_cell NangateOpenCellLibrary/SDFF_X1]
set sdff_equivs [sta::find_equiv_cells $sdff_cell]
puts "SDFF equiv count: [llength $sdff_equivs]"
############################################################
# equiv_cells comparison
############################################################
# Same-function cells should be equivalent
set inv_x1 [get_lib_cell NangateOpenCellLibrary/INV_X1]
set inv_x2 [get_lib_cell NangateOpenCellLibrary/INV_X2]
set result [sta::equiv_cells $inv_x1 $inv_x2]
puts "INV_X1 equiv INV_X2: $result"
set buf_x1 [get_lib_cell NangateOpenCellLibrary/BUF_X1]
set buf_x2 [get_lib_cell NangateOpenCellLibrary/BUF_X2]
set result [sta::equiv_cells $buf_x1 $buf_x2]
puts "BUF_X1 equiv BUF_X2: $result"
# Different-function cells should NOT be equivalent
set result [sta::equiv_cells $inv_x1 $buf_x1]
puts "INV_X1 equiv BUF_X1: $result"
set result [sta::equiv_cells $nand_cell $nor_cell]
puts "NAND2 equiv NOR2: $result"
# DFF equivalence
set dff_x1 [get_lib_cell NangateOpenCellLibrary/DFF_X1]
set dff_x2 [get_lib_cell NangateOpenCellLibrary/DFF_X2]
set result [sta::equiv_cells $dff_x1 $dff_x2]
puts "DFF_X1 equiv DFF_X2: $result"
# DFF vs DFFR (different function - has reset)
set result [sta::equiv_cells $dff_x1 $dffr_cell]
puts "DFF_X1 equiv DFFR_X1: $result"
# NAND2 vs NAND3 (different port count)
set nand3_cell [get_lib_cell NangateOpenCellLibrary/NAND3_X1]
set result [sta::equiv_cells $nand_cell $nand3_cell]
puts "NAND2 equiv NAND3: $result"
# Larger drive strengths
set inv_x4 [get_lib_cell NangateOpenCellLibrary/INV_X4]
set inv_x8 [get_lib_cell NangateOpenCellLibrary/INV_X8]
set result [sta::equiv_cells $inv_x4 $inv_x8]
puts "INV_X4 equiv INV_X8: $result"
############################################################
# equiv_cell_ports comparison
############################################################
set result [sta::equiv_cell_ports $inv_x1 $inv_x2]
puts "equiv_cell_ports INV_X1 INV_X2: $result"
set result [sta::equiv_cell_ports $inv_x1 $buf_x1]
puts "equiv_cell_ports INV_X1 BUF_X1: $result"
set nand2_x1 [get_lib_cell NangateOpenCellLibrary/NAND2_X1]
set nand2_x2 [get_lib_cell NangateOpenCellLibrary/NAND2_X2]
set result [sta::equiv_cell_ports $nand2_x1 $nand2_x2]
puts "equiv_cell_ports NAND2_X1 NAND2_X2: $result"
# Different port count cells
set nand3_x1 [get_lib_cell NangateOpenCellLibrary/NAND3_X1]
set result [sta::equiv_cell_ports $nand2_x1 $nand3_x1]
puts "equiv_cell_ports NAND2_X1 NAND3_X1: $result"
############################################################
# equiv_cell_timing_arcs comparison
############################################################
set result [sta::equiv_cell_timing_arcs $inv_x1 $inv_x2]
puts "equiv_cell_timing_arcs INV_X1 INV_X2: $result"
set result [sta::equiv_cell_timing_arcs $buf_x1 $buf_x2]
puts "equiv_cell_timing_arcs BUF_X1 BUF_X2: $result"
set result [sta::equiv_cell_timing_arcs $inv_x1 $buf_x1]
puts "equiv_cell_timing_arcs INV_X1 BUF_X1: $result"
############################################################
# find_library_buffers
############################################################
set buffers [sta::find_library_buffers $lib]
puts "library buffers count: [llength $buffers]"
############################################################
# Additional library queries
############################################################
set found_lib [sta::find_liberty NangateOpenCellLibrary]
puts "find_liberty: [get_name $found_lib]"
set lib_iter [sta::liberty_library_iterator]
# liberty_supply_exists
set result [sta::liberty_supply_exists VDD]
puts "supply VDD exists: $result"
set result [sta::liberty_supply_exists VSS]
puts "supply VSS exists: $result"
set result [sta::liberty_supply_exists NONEXISTENT]
puts "supply NONEXISTENT exists: $result"
# liberty_port_direction on various pins
set pin [get_lib_pin NangateOpenCellLibrary/INV_X1/A]
set dir [sta::liberty_port_direction $pin]
puts "INV_X1/A direction: $dir"
set pin [get_lib_pin NangateOpenCellLibrary/INV_X1/ZN]
set dir [sta::liberty_port_direction $pin]
puts "INV_X1/ZN direction: $dir"
set pin [get_lib_pin NangateOpenCellLibrary/DFF_X1/CK]
set dir [sta::liberty_port_direction $pin]
puts "DFF_X1/CK direction: $dir"
set pin [get_lib_pin NangateOpenCellLibrary/DFF_X1/Q]
set dir [sta::liberty_port_direction $pin]
puts "DFF_X1/Q direction: $dir"
############################################################
# EquivCells across fast library
############################################################
read_liberty ../../test/nangate45/Nangate45_fast.lib
set fast_lib [lindex [get_libs NangateOpenCellLibrary_fast] 0]
sta::make_equiv_cells $fast_lib
set fast_inv [get_lib_cell NangateOpenCellLibrary_fast/INV_X1]
set fast_inv_equivs [sta::find_equiv_cells $fast_inv]
puts "fast INV equiv count: [llength $fast_inv_equivs]"
# Cross-library equiv check
set result [sta::equiv_cells $inv_x1 $fast_inv]
puts "INV_X1 (typ) equiv INV_X1 (fast): $result"

View File

@ -0,0 +1,60 @@
INVx1_ASAP7_75t_R equiv count = 21
INVx2_ASAP7_75t_R equiv count = 21
INVx3_ASAP7_75t_R equiv count = 21
INVx4_ASAP7_75t_R equiv count = 21
INVx5_ASAP7_75t_R equiv count = 21
INVx8_ASAP7_75t_R equiv count = 21
INVx11_ASAP7_75t_R equiv count = 21
INVx13_ASAP7_75t_R equiv count = 21
Warning 354: liberty_equiv_cross_lib.tcl line 1, cell 'INVx16_ASAP7_75t_R' not found.
Warning 354: liberty_equiv_cross_lib.tcl line 1, cell 'BUFx1_ASAP7_75t_R' not found.
BUFx2_ASAP7_75t_R equiv count = 16
BUFx3_ASAP7_75t_R equiv count = 16
BUFx4_ASAP7_75t_R equiv count = 16
BUFx5_ASAP7_75t_R equiv count = 16
BUFx8_ASAP7_75t_R equiv count = 16
Warning 354: liberty_equiv_cross_lib.tcl line 1, cell 'BUFx11_ASAP7_75t_R' not found.
Warning 354: liberty_equiv_cross_lib.tcl line 1, cell 'BUFx13_ASAP7_75t_R' not found.
Warning 354: liberty_equiv_cross_lib.tcl line 1, cell 'BUFx16_ASAP7_75t_R' not found.
LVT INVx1_ASAP7_75t_L equiv count = 21
LVT INVx2_ASAP7_75t_L equiv count = 21
LVT INVx4_ASAP7_75t_L equiv count = 21
LVT INVx8_ASAP7_75t_L equiv count = 21
Warning 354: liberty_equiv_cross_lib.tcl line 1, cell 'BUFx1_ASAP7_75t_L' not found.
LVT BUFx2_ASAP7_75t_L equiv count = 16
LVT BUFx4_ASAP7_75t_L equiv count = 16
LVT BUFx8_ASAP7_75t_L equiv count = 16
--- cross-Vt equiv comparisons ---
equiv RVT/LVT INVx1 = 1
port_equiv RVT/LVT INVx1 = 1
arc_equiv RVT/LVT INVx1 = 1
SEQ RVT DFFHQNx1 equiv count = 3
equiv: DFFHQNx1_ASAP7_75t_R
equiv: DFFHQNx2_ASAP7_75t_R
equiv: DFFHQNx3_ASAP7_75t_R
SEQ RVT ICGx1 equiv count = 10
SEQ RVT DLLx1 equiv count = 3
Warning 354: liberty_equiv_cross_lib.tcl line 1, cell 'SDFHQNx1_ASAP7_75t_R' not found.
equiv SEQ RVT/LVT DFFHQNx1 = 1
port_equiv SEQ RVT/LVT DFFHQNx1 = 1
Sky130 inv_1 equiv count = 16
equiv: sky130_fd_sc_hd__clkinvlp_2
equiv: sky130_fd_sc_hd__inv_1
equiv: sky130_fd_sc_hd__clkinv_1
equiv: sky130_fd_sc_hd__clkinvlp_4
equiv: sky130_fd_sc_hd__inv_2
equiv: sky130_fd_sc_hd__clkinv_2
equiv: sky130_fd_sc_hd__inv_4
equiv: sky130_fd_sc_hd__inv_6
equiv: sky130_fd_sc_hd__clkinv_4
equiv: sky130_fd_sc_hd__bufinv_8
equiv: sky130_fd_sc_hd__inv_8
equiv: sky130_fd_sc_hd__clkinv_8
equiv: sky130_fd_sc_hd__inv_12
equiv: sky130_fd_sc_hd__bufinv_16
equiv: sky130_fd_sc_hd__inv_16
equiv: sky130_fd_sc_hd__clkinv_16
Sky130 dfxtp_1 equiv count = 3
equiv: sky130_fd_sc_hd__dfxtp_1
equiv: sky130_fd_sc_hd__dfxtp_2
equiv: sky130_fd_sc_hd__dfxtp_4

View File

@ -0,0 +1,187 @@
# Test equivalent cells across multiple libraries from different PDKs,
# exercising mapEquivCells and cross-library equivalence hashing.
source ../../test/helpers.tcl
############################################################
# Read multiple ASAP7 Vt flavors for cross-library equiv
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_INVBUF_RVT_FF_nldm_220122.lib.gz
read_liberty ../../test/asap7/asap7sc7p5t_INVBUF_LVT_FF_nldm_220122.lib.gz
read_liberty ../../test/asap7/asap7sc7p5t_INVBUF_SLVT_FF_nldm_220122.lib.gz
############################################################
# Make equiv cells for RVT library
############################################################
set rvt_lib [lindex [get_libs asap7sc7p5t_INVBUF_RVT_FF_nldm_211120] 0]
sta::make_equiv_cells $rvt_lib
# Find equiv cells in ASAP7 RVT
foreach cell_prefix {INVx BUFx} {
foreach size {1 2 3 4 5 8 11 13 16} {
set cell_name "${cell_prefix}${size}_ASAP7_75t_R"
set cell [get_lib_cell asap7sc7p5t_INVBUF_RVT_FF_nldm_211120/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set equivs [sta::find_equiv_cells $cell]
if {$equivs != ""} {
puts "$cell_name equiv count = [llength $equivs]"
} else {
puts "$cell_name equiv count = 0"
}
}
}
}
# Find library buffers
set rvt_buffers [sta::find_library_buffers $rvt_lib]
############################################################
# Make equiv cells for LVT library
############################################################
set lvt_lib [lindex [get_libs asap7sc7p5t_INVBUF_LVT_FF_nldm_211120] 0]
sta::make_equiv_cells $lvt_lib
foreach cell_prefix {INVx BUFx} {
foreach size {1 2 4 8} {
set cell_name "${cell_prefix}${size}_ASAP7_75t_L"
set cell [get_lib_cell asap7sc7p5t_INVBUF_LVT_FF_nldm_211120/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set equivs [sta::find_equiv_cells $cell]
if {$equivs != ""} {
puts "LVT $cell_name equiv count = [llength $equivs]"
} else {
puts "LVT $cell_name equiv count = 0"
}
}
}
}
set lvt_buffers [sta::find_library_buffers $lvt_lib]
############################################################
# Make equiv cells for SLVT library
############################################################
set slvt_lib [lindex [get_libs asap7sc7p5t_INVBUF_SLVT_FF_nldm_211120] 0]
sta::make_equiv_cells $slvt_lib
set slvt_buffers [sta::find_library_buffers $slvt_lib]
############################################################
# Cross-Vt equiv_cells comparisons
############################################################
puts "--- cross-Vt equiv comparisons ---"
# RVT vs LVT (different cell name suffix -> not equiv)
set rvt_inv [get_lib_cell asap7sc7p5t_INVBUF_RVT_FF_nldm_211120/INVx1_ASAP7_75t_R]
set lvt_inv [get_lib_cell asap7sc7p5t_INVBUF_LVT_FF_nldm_211120/INVx1_ASAP7_75t_L]
set result [sta::equiv_cells $rvt_inv $lvt_inv]
puts "equiv RVT/LVT INVx1 = $result"
set result [sta::equiv_cell_ports $rvt_inv $lvt_inv]
puts "port_equiv RVT/LVT INVx1 = $result"
set result [sta::equiv_cell_timing_arcs $rvt_inv $lvt_inv]
puts "arc_equiv RVT/LVT INVx1 = $result"
############################################################
# Read ASAP7 SEQ libraries for sequential equiv
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_LVT_FF_nldm_220123.lib
set seq_rvt_lib [lindex [get_libs asap7sc7p5t_SEQ_RVT_FF_nldm_220123] 0]
sta::make_equiv_cells $seq_rvt_lib
# Find equiv cells for DFF cells
set dff [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DFFHQNx1_ASAP7_75t_R]
if {$dff != "NULL" && $dff ne ""} {
set equivs [sta::find_equiv_cells $dff]
if {$equivs != ""} {
puts "SEQ RVT DFFHQNx1 equiv count = [llength $equivs]"
foreach eq $equivs {
puts " equiv: [$eq name]"
}
} else {
puts "SEQ RVT DFFHQNx1 equiv count = 0"
}
}
# ICG equiv cells
set icg [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/ICGx1_ASAP7_75t_R]
if {$icg != "NULL" && $icg ne ""} {
set equivs [sta::find_equiv_cells $icg]
if {$equivs != ""} {
puts "SEQ RVT ICGx1 equiv count = [llength $equivs]"
} else {
puts "SEQ RVT ICGx1 equiv count = 0"
}
}
# Latch equiv cells
set dll [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DLLx1_ASAP7_75t_R]
if {$dll != "NULL" && $dll ne ""} {
set equivs [sta::find_equiv_cells $dll]
if {$equivs != ""} {
puts "SEQ RVT DLLx1 equiv count = [llength $equivs]"
} else {
puts "SEQ RVT DLLx1 equiv count = 0"
}
}
# SDFF equiv cells
set sdff [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/SDFHQNx1_ASAP7_75t_R]
if {$sdff != "NULL" && $sdff ne ""} {
set equivs [sta::find_equiv_cells $sdff]
if {$equivs != ""} {
puts "SEQ RVT SDFHQNx1 equiv count = [llength $equivs]"
} else {
puts "SEQ RVT SDFHQNx1 equiv count = 0"
}
}
############################################################
# Cross-library comparisons of DFF cells
############################################################
set rvt_dff [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DFFHQNx1_ASAP7_75t_R]
set lvt_dff [get_lib_cell asap7sc7p5t_SEQ_LVT_FF_nldm_220123/DFFHQNx1_ASAP7_75t_L]
set result [sta::equiv_cells $rvt_dff $lvt_dff]
puts "equiv SEQ RVT/LVT DFFHQNx1 = $result"
set result [sta::equiv_cell_ports $rvt_dff $lvt_dff]
puts "port_equiv SEQ RVT/LVT DFFHQNx1 = $result"
############################################################
# Read Sky130 and make equiv cells for a very different PDK
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
set sky_lib [lindex [get_libs sky130_fd_sc_hd__tt_025C_1v80] 0]
sta::make_equiv_cells $sky_lib
# Find equiv cells for Sky130 inverters
set sky_inv [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__inv_1]
if {$sky_inv != "NULL" && $sky_inv ne ""} {
set equivs [sta::find_equiv_cells $sky_inv]
if {$equivs != ""} {
puts "Sky130 inv_1 equiv count = [llength $equivs]"
foreach eq $equivs {
puts " equiv: [$eq name]"
}
} else {
puts "Sky130 inv_1 equiv count = 0"
}
}
# Find equiv for Sky130 DFF
set sky_dff [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_1]
if {$sky_dff != "NULL" && $sky_dff ne ""} {
set equivs [sta::find_equiv_cells $sky_dff]
if {$equivs != ""} {
puts "Sky130 dfxtp_1 equiv count = [llength $equivs]"
foreach eq $equivs {
puts " equiv: [$eq name]"
}
} else {
puts "Sky130 dfxtp_1 equiv count = 0"
}
}
set sky_buffers [sta::find_library_buffers $sky_lib]

View File

@ -0,0 +1,70 @@
INV_X1 equiv count = 6
equiv: INV_X1
equiv: INV_X2
equiv: INV_X4
equiv: INV_X8
equiv: INV_X16
equiv: INV_X32
BUF_X1 equiv count = 9
equiv: BUF_X1
equiv: CLKBUF_X1
equiv: BUF_X2
equiv: CLKBUF_X2
equiv: CLKBUF_X3
equiv: BUF_X4
equiv: BUF_X8
equiv: BUF_X16
equiv: BUF_X32
NAND2_X1 equiv count = 3
NOR2_X1 equiv count = 3
AND2_X1 equiv count = 3
OR2_X1 equiv count = 3
XOR2_X1 equiv count = 2
XNOR2_X1 equiv count = 2
NAND3_X1 equiv count = 3
NOR3_X1 equiv count = 3
AND3_X1 equiv count = 3
OR3_X1 equiv count = 3
NAND4_X1 equiv count = 3
NOR4_X1 equiv count = 3
AND4_X1 equiv count = 3
OR4_X1 equiv count = 3
AOI21_X1 equiv count = 3
OAI21_X1 equiv count = 3
AOI22_X1 equiv count = 3
OAI22_X1 equiv count = 3
AOI211_X1 equiv count = 2
OAI211_X1 equiv count = 3
MUX2_X1 equiv count = 2
DFF_X1 equiv count = 2
equiv: DFF_X1
equiv: DFF_X2
DFFR_X1 equiv count = 2
DFFS_X1 equiv count = 2
SDFF_X1 equiv count = 2
equiv INV BUF = 0
equiv INV NAND = 0
equiv NAND NOR = 0
equiv INV DFF = 0
port_equiv INV_X1 INV_X2 = 1
port_equiv INV_X1 BUF_X1 = 0
port_equiv NAND2_X1 NAND2_X2 = 1
arc_equiv INV_X1 INV_X2 = 1
arc_equiv INV_X1 BUF_X1 = 0
arc_equiv DFF_X1 DFF_X2 = 1
arc_equiv DFF_X1 DFFR_X1 = 0
equiv typ_INV fast_INV = 1
equiv typ_INV fast_BUF = 0
port_equiv typ_INV fast_INV = 1
arc_equiv typ_INV fast_INV = 1
fast INV_X1 equiv count = 6
Library buffers count = 9
buffer: BUF_X1
buffer: BUF_X16
buffer: BUF_X2
buffer: BUF_X32
buffer: BUF_X4
buffer: BUF_X8
buffer: CLKBUF_X1
buffer: CLKBUF_X2
buffer: CLKBUF_X3

View File

@ -0,0 +1,156 @@
# Deep equivalent cell testing for EquivCells.cc code coverage.
# Targets:
# EquivCells.cc: findEquivCells, mapEquivCells,
# hashCell, hashCellPorts, hashCellSequentials, hashSequential,
# hashFuncExpr, hashPort, hashStatetable, hashStatetableRow,
# equivCells, equivCellPorts, equivCellFuncs, equivCellSequentials,
# equivCellStatetables, equivCellTimingArcSets, equivCellsArcs,
# cellHasFuncs, cellDriveResistance, CellDriveResistanceGreater
# Liberty.cc: Sequential related, Statetable related,
# LibertyPort::equiv, FuncExpr::equiv
source ../../test/helpers.tcl
############################################################
# Read Nangate library
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
set lib [lindex [get_libs NangateOpenCellLibrary] 0]
############################################################
# Make equiv cells
############################################################
sta::make_equiv_cells $lib
############################################################
# Test equiv cells for all major gate families
############################################################
# Inverters (should find INV_X1/X2/X4/X8/X16/X32 as equivalent)
set inv_x1 [get_lib_cell NangateOpenCellLibrary/INV_X1]
set equivs [sta::find_equiv_cells $inv_x1]
puts "INV_X1 equiv count = [llength $equivs]"
foreach eq $equivs {
puts " equiv: [$eq name]"
}
# Buffers
set buf_x1 [get_lib_cell NangateOpenCellLibrary/BUF_X1]
set equivs [sta::find_equiv_cells $buf_x1]
puts "BUF_X1 equiv count = [llength $equivs]"
foreach eq $equivs {
puts " equiv: [$eq name]"
}
# 2-input gates
foreach gate {NAND2 NOR2 AND2 OR2 XOR2 XNOR2} {
set cell [get_lib_cell NangateOpenCellLibrary/${gate}_X1]
set equivs [sta::find_equiv_cells $cell]
puts "${gate}_X1 equiv count = [llength $equivs]"
}
# 3-input gates
foreach gate {NAND3 NOR3 AND3 OR3} {
set cell [get_lib_cell NangateOpenCellLibrary/${gate}_X1]
set equivs [sta::find_equiv_cells $cell]
puts "${gate}_X1 equiv count = [llength $equivs]"
}
# 4-input gates
foreach gate {NAND4 NOR4 AND4 OR4} {
set cell [get_lib_cell NangateOpenCellLibrary/${gate}_X1]
set equivs [sta::find_equiv_cells $cell]
puts "${gate}_X1 equiv count = [llength $equivs]"
}
# AOI/OAI gates
foreach gate {AOI21 OAI21 AOI22 OAI22 AOI211 OAI211} {
set cell [get_lib_cell NangateOpenCellLibrary/${gate}_X1]
set equivs [sta::find_equiv_cells $cell]
puts "${gate}_X1 equiv count = [llength $equivs]"
}
# MUX cells
set mux_cell [get_lib_cell NangateOpenCellLibrary/MUX2_X1]
set equivs [sta::find_equiv_cells $mux_cell]
puts "MUX2_X1 equiv count = [llength $equivs]"
# DFF cells (sequential equivalence)
set dff_x1 [get_lib_cell NangateOpenCellLibrary/DFF_X1]
set dff_equivs [sta::find_equiv_cells $dff_x1]
puts "DFF_X1 equiv count = [llength $dff_equivs]"
foreach eq $dff_equivs {
puts " equiv: [$eq name]"
}
# DFFR cells (reset flip-flop)
set dffr_x1 [get_lib_cell NangateOpenCellLibrary/DFFR_X1]
set dffr_equivs [sta::find_equiv_cells $dffr_x1]
puts "DFFR_X1 equiv count = [llength $dffr_equivs]"
# DFFS cells (set flip-flop)
set dffs_x1 [get_lib_cell NangateOpenCellLibrary/DFFS_X1]
set dffs_equivs [sta::find_equiv_cells $dffs_x1]
puts "DFFS_X1 equiv count = [llength $dffs_equivs]"
# SDFF cells (scan DFF)
set sdff_x1 [get_lib_cell NangateOpenCellLibrary/SDFF_X1]
set sdff_equivs [sta::find_equiv_cells $sdff_x1]
puts "SDFF_X1 equiv count = [llength $sdff_equivs]"
############################################################
# Cross-cell type equiv comparisons (should be false)
############################################################
set inv_x1 [get_lib_cell NangateOpenCellLibrary/INV_X1]
set buf_x1 [get_lib_cell NangateOpenCellLibrary/BUF_X1]
set nand2_x1 [get_lib_cell NangateOpenCellLibrary/NAND2_X1]
set nor2_x1 [get_lib_cell NangateOpenCellLibrary/NOR2_X1]
set dff_x1 [get_lib_cell NangateOpenCellLibrary/DFF_X1]
# Pairwise comparisons that should be false
puts "equiv INV BUF = [sta::equiv_cells $inv_x1 $buf_x1]"
puts "equiv INV NAND = [sta::equiv_cells $inv_x1 $nand2_x1]"
puts "equiv NAND NOR = [sta::equiv_cells $nand2_x1 $nor2_x1]"
puts "equiv INV DFF = [sta::equiv_cells $inv_x1 $dff_x1]"
# Port equivalence detailed
puts "port_equiv INV_X1 INV_X2 = [sta::equiv_cell_ports $inv_x1 [get_lib_cell NangateOpenCellLibrary/INV_X2]]"
puts "port_equiv INV_X1 BUF_X1 = [sta::equiv_cell_ports $inv_x1 $buf_x1]"
puts "port_equiv NAND2_X1 NAND2_X2 = [sta::equiv_cell_ports $nand2_x1 [get_lib_cell NangateOpenCellLibrary/NAND2_X2]]"
# Timing arc equivalence
puts "arc_equiv INV_X1 INV_X2 = [sta::equiv_cell_timing_arcs $inv_x1 [get_lib_cell NangateOpenCellLibrary/INV_X2]]"
puts "arc_equiv INV_X1 BUF_X1 = [sta::equiv_cell_timing_arcs $inv_x1 $buf_x1]"
puts "arc_equiv DFF_X1 DFF_X2 = [sta::equiv_cell_timing_arcs $dff_x1 [get_lib_cell NangateOpenCellLibrary/DFF_X2]]"
puts "arc_equiv DFF_X1 DFFR_X1 = [sta::equiv_cell_timing_arcs $dff_x1 $dffr_x1]"
############################################################
# Multi-library equivalence (exercises mapEquivCells)
############################################################
read_liberty ../../test/nangate45/Nangate45_fast.lib
set fast_lib [lindex [get_libs NangateOpenCellLibrary_fast] 0]
sta::make_equiv_cells $fast_lib
# Cross-library comparisons
set fast_inv [get_lib_cell NangateOpenCellLibrary_fast/INV_X1]
set fast_buf [get_lib_cell NangateOpenCellLibrary_fast/BUF_X1]
puts "equiv typ_INV fast_INV = [sta::equiv_cells $inv_x1 $fast_inv]"
puts "equiv typ_INV fast_BUF = [sta::equiv_cells $inv_x1 $fast_buf]"
puts "port_equiv typ_INV fast_INV = [sta::equiv_cell_ports $inv_x1 $fast_inv]"
puts "arc_equiv typ_INV fast_INV = [sta::equiv_cell_timing_arcs $inv_x1 $fast_inv]"
# Find equiv cells in the fast library
set fast_equivs [sta::find_equiv_cells $fast_inv]
puts "fast INV_X1 equiv count = [llength $fast_equivs]"
############################################################
# Find library buffers
############################################################
set lib [lindex [get_libs NangateOpenCellLibrary] 0]
set buffers [sta::find_library_buffers $lib]
puts "Library buffers count = [llength $buffers]"
foreach buf $buffers {
puts " buffer: [$buf name]"
}

View File

@ -0,0 +1,168 @@
INV_X1 equiv=6
INV_X2 equiv=6
INV_X4 equiv=6
INV_X8 equiv=6
INV_X16 equiv=6
INV_X32 equiv=6
BUF_X1 equiv=9
BUF_X2 equiv=9
BUF_X4 equiv=9
BUF_X8 equiv=9
BUF_X16 equiv=9
BUF_X32 equiv=9
NAND2_X1 equiv=3
NAND2_X2 equiv=3
NAND2_X4 equiv=3
NOR2_X1 equiv=3
NOR2_X2 equiv=3
NOR2_X4 equiv=3
AND2_X1 equiv=3
AND2_X2 equiv=3
AND2_X4 equiv=3
OR2_X1 equiv=3
OR2_X2 equiv=3
OR2_X4 equiv=3
NAND3_X1 equiv=3
NAND3_X2 equiv=3
NAND3_X4 equiv=3
NOR3_X1 equiv=3
NOR3_X2 equiv=3
NOR3_X4 equiv=3
AND3_X1 equiv=3
AND3_X2 equiv=3
AND3_X4 equiv=3
OR3_X1 equiv=3
OR3_X2 equiv=3
OR3_X4 equiv=3
NAND4_X1 equiv=3
NAND4_X2 equiv=3
NAND4_X4 equiv=3
NOR4_X1 equiv=3
NOR4_X2 equiv=3
NOR4_X4 equiv=3
AND4_X1 equiv=3
AND4_X2 equiv=3
AND4_X4 equiv=3
OR4_X1 equiv=3
OR4_X2 equiv=3
OR4_X4 equiv=3
XOR2_X1 equiv=2
XOR2_X2 equiv=2
XNOR2_X1 equiv=2
XNOR2_X2 equiv=2
AOI21_X1 equiv=3
AOI21_X2 equiv=3
AOI21_X4 equiv=3
OAI21_X1 equiv=3
OAI21_X2 equiv=3
OAI21_X4 equiv=3
AOI22_X1 equiv=3
AOI22_X2 equiv=3
AOI22_X4 equiv=3
OAI22_X1 equiv=3
OAI22_X2 equiv=3
OAI22_X4 equiv=3
AOI211_X1 equiv=2
AOI211_X2 equiv=2
OAI211_X1 equiv=3
OAI211_X2 equiv=3
OAI211_X4 equiv=3
MUX2_X1 equiv=2
MUX2_X2 equiv=2
DFF_X1 equiv=2
DFF_X2 equiv=2
DFFR_X1 equiv=2
DFFR_X2 equiv=2
DFFS_X1 equiv=2
DFFS_X2 equiv=2
DFFRS_X1 equiv=2
DFFRS_X2 equiv=2
SDFF_X1 equiv=2
SDFF_X2 equiv=2
SDFFR_X1 equiv=2
SDFFR_X2 equiv=2
SDFFS_X1 equiv=2
SDFFS_X2 equiv=2
SDFFRS_X1 equiv=2
SDFFRS_X2 equiv=2
CLKBUF_X1 equiv=9
CLKBUF_X2 equiv=9
CLKBUF_X3 equiv=9
CLKGATETST_X1 equiv=4
CLKGATETST_X2 equiv=4
CLKGATETST_X4 equiv=4
CLKGATETST_X8 equiv=4
equiv INV_X1 INV_X2 = 1
equiv BUF_X1 BUF_X2 = 1
equiv NAND2_X1 NAND2_X2 = 1
equiv NOR2_X1 NOR2_X2 = 1
equiv DFF_X1 DFF_X2 = 1
equiv CLKGATE_X1 CLKGATE_X2 = 1
equiv INV BUF = 0
equiv NAND2 NOR2 = 0
equiv NAND2 NAND3 = 0
equiv AND2 OR2 = 0
equiv DFF DFFR = 0
equiv DFF SDFF = 0
equiv INV DFF = 0
equiv INV CLKGATE = 0
ports INV_X1 INV_X2 = 1
ports INV BUF = 0
ports NAND2_X1 NAND2_X2 = 1
ports NAND2 NAND3 = 0
ports DFF_X1 DFF_X2 = 1
ports DFF DFFR = 0
arcs INV_X1 INV_X2 = 1
arcs INV BUF = 0
arcs DFF_X1 DFF_X2 = 1
arcs DFF DFFR = 0
arcs NAND2_X1 NAND2_X2 = 1
arcs NAND2 NOR2 = 1
Nangate45 buffers = 9
SKY sky130_fd_sc_hd__inv_1 equiv=16
SKY sky130_fd_sc_hd__inv_2 equiv=16
SKY sky130_fd_sc_hd__inv_4 equiv=16
SKY sky130_fd_sc_hd__inv_8 equiv=16
SKY sky130_fd_sc_hd__buf_1 equiv=30
SKY sky130_fd_sc_hd__buf_2 equiv=30
SKY sky130_fd_sc_hd__buf_4 equiv=30
SKY sky130_fd_sc_hd__buf_8 equiv=30
SKY sky130_fd_sc_hd__nand2_1 equiv=4
SKY sky130_fd_sc_hd__nand2_2 equiv=4
SKY sky130_fd_sc_hd__nand2_4 equiv=4
SKY sky130_fd_sc_hd__nor2_1 equiv=4
SKY sky130_fd_sc_hd__nor2_2 equiv=4
SKY sky130_fd_sc_hd__nor2_4 equiv=4
SKY sky130_fd_sc_hd__and2_1 equiv=4
SKY sky130_fd_sc_hd__and2_2 equiv=4
SKY sky130_fd_sc_hd__and2_4 equiv=4
SKY sky130_fd_sc_hd__or2_1 equiv=4
SKY sky130_fd_sc_hd__or2_2 equiv=4
SKY sky130_fd_sc_hd__or2_4 equiv=4
SKY sky130_fd_sc_hd__dfxtp_1 equiv=3
SKY sky130_fd_sc_hd__dfxtp_2 equiv=3
SKY sky130_fd_sc_hd__dfxtp_4 equiv=3
SKY sky130_fd_sc_hd__dfrtp_1 equiv=3
SKY sky130_fd_sc_hd__dfrtp_2 equiv=3
SKY sky130_fd_sc_hd__dfrtp_4 equiv=3
SKY sky130_fd_sc_hd__clkbuf_1 equiv=30
SKY sky130_fd_sc_hd__clkbuf_2 equiv=30
SKY sky130_fd_sc_hd__clkbuf_4 equiv=30
Sky130 buffers = 35
IHP sg13g2_inv_1 equiv=5
IHP sg13g2_inv_2 equiv=5
IHP sg13g2_inv_4 equiv=5
IHP sg13g2_inv_8 equiv=5
IHP sg13g2_buf_1 equiv=8
IHP sg13g2_buf_2 equiv=8
IHP sg13g2_buf_4 equiv=8
IHP sg13g2_buf_8 equiv=8
IHP sg13g2_nand2_1 equiv=2
IHP sg13g2_nand2_2 equiv=2
IHP sg13g2_nor2_1 equiv=2
IHP sg13g2_nor2_2 equiv=2
IHP sg13g2_and2_1 equiv=2
IHP sg13g2_and2_2 equiv=2
IHP sg13g2_or2_1 equiv=2
IHP sg13g2_or2_2 equiv=2
IHP buffers = 8

View File

@ -0,0 +1,182 @@
# Test EquivCells pairwise comparisons across multiple PDKs.
# Exercises all comparison functions and drive-strength sorting.
# Targets:
# EquivCells.cc: EquivCells constructor, findEquivCells,
# hashCell, hashCellPorts, hashCellSequentials, hashSequential,
# hashFuncExpr, hashPort, equivCells, equivCellPorts, equivCellFuncs,
# equivCellSequentials, equivCellTimingArcSets, equivCellsArcs,
# cellHasFuncs, cellDriveResistance, CellDriveResistanceGreater
source ../../test/helpers.tcl
############################################################
# Test 1: Nangate45 pairwise
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
set ng_lib [lindex [get_libs NangateOpenCellLibrary] 0]
sta::make_equiv_cells $ng_lib
# Known-working families for find_equiv_cells
foreach cell_name {INV_X1 INV_X2 INV_X4 INV_X8 INV_X16 INV_X32
BUF_X1 BUF_X2 BUF_X4 BUF_X8 BUF_X16 BUF_X32
NAND2_X1 NAND2_X2 NAND2_X4
NOR2_X1 NOR2_X2 NOR2_X4
AND2_X1 AND2_X2 AND2_X4
OR2_X1 OR2_X2 OR2_X4
NAND3_X1 NAND3_X2 NAND3_X4
NOR3_X1 NOR3_X2 NOR3_X4
AND3_X1 AND3_X2 AND3_X4
OR3_X1 OR3_X2 OR3_X4
NAND4_X1 NAND4_X2 NAND4_X4
NOR4_X1 NOR4_X2 NOR4_X4
AND4_X1 AND4_X2 AND4_X4
OR4_X1 OR4_X2 OR4_X4
XOR2_X1 XOR2_X2
XNOR2_X1 XNOR2_X2
AOI21_X1 AOI21_X2 AOI21_X4
OAI21_X1 OAI21_X2 OAI21_X4
AOI22_X1 AOI22_X2 AOI22_X4
OAI22_X1 OAI22_X2 OAI22_X4
AOI211_X1 AOI211_X2
OAI211_X1 OAI211_X2 OAI211_X4
MUX2_X1 MUX2_X2
DFF_X1 DFF_X2
DFFR_X1 DFFR_X2
DFFS_X1 DFFS_X2
DFFRS_X1 DFFRS_X2
SDFF_X1 SDFF_X2
SDFFR_X1 SDFFR_X2
SDFFS_X1 SDFFS_X2
SDFFRS_X1 SDFFRS_X2
CLKBUF_X1 CLKBUF_X2 CLKBUF_X3
CLKGATETST_X1 CLKGATETST_X2 CLKGATETST_X4 CLKGATETST_X8} {
set cell [get_lib_cell -quiet NangateOpenCellLibrary/$cell_name]
if {$cell != ""} {
set equivs [sta::find_equiv_cells $cell]
if {$equivs != "" && $equivs != "NULL"} {
puts "$cell_name equiv=[llength $equivs]"
} else {
puts "$cell_name equiv=0"
}
}
}
# Extensive pairwise comparisons
set inv_x1 [get_lib_cell NangateOpenCellLibrary/INV_X1]
set inv_x2 [get_lib_cell NangateOpenCellLibrary/INV_X2]
set buf_x1 [get_lib_cell NangateOpenCellLibrary/BUF_X1]
set buf_x2 [get_lib_cell NangateOpenCellLibrary/BUF_X2]
set nand2_x1 [get_lib_cell NangateOpenCellLibrary/NAND2_X1]
set nand2_x2 [get_lib_cell NangateOpenCellLibrary/NAND2_X2]
set nand3_x1 [get_lib_cell NangateOpenCellLibrary/NAND3_X1]
set nor2_x1 [get_lib_cell NangateOpenCellLibrary/NOR2_X1]
set nor2_x2 [get_lib_cell NangateOpenCellLibrary/NOR2_X2]
set and2_x1 [get_lib_cell NangateOpenCellLibrary/AND2_X1]
set or2_x1 [get_lib_cell NangateOpenCellLibrary/OR2_X1]
set xor2_x1 [get_lib_cell NangateOpenCellLibrary/XOR2_X1]
set dff_x1 [get_lib_cell NangateOpenCellLibrary/DFF_X1]
set dff_x2 [get_lib_cell NangateOpenCellLibrary/DFF_X2]
set dffr_x1 [get_lib_cell NangateOpenCellLibrary/DFFR_X1]
set sdff_x1 [get_lib_cell NangateOpenCellLibrary/SDFF_X1]
set clkgate_x1 [get_lib_cell NangateOpenCellLibrary/CLKGATETST_X1]
set clkgate_x2 [get_lib_cell NangateOpenCellLibrary/CLKGATETST_X2]
# Same-function equivalence (should be true)
puts "equiv INV_X1 INV_X2 = [sta::equiv_cells $inv_x1 $inv_x2]"
puts "equiv BUF_X1 BUF_X2 = [sta::equiv_cells $buf_x1 $buf_x2]"
puts "equiv NAND2_X1 NAND2_X2 = [sta::equiv_cells $nand2_x1 $nand2_x2]"
puts "equiv NOR2_X1 NOR2_X2 = [sta::equiv_cells $nor2_x1 $nor2_x2]"
puts "equiv DFF_X1 DFF_X2 = [sta::equiv_cells $dff_x1 $dff_x2]"
puts "equiv CLKGATE_X1 CLKGATE_X2 = [sta::equiv_cells $clkgate_x1 $clkgate_x2]"
# Different-function comparisons (should be false)
puts "equiv INV BUF = [sta::equiv_cells $inv_x1 $buf_x1]"
puts "equiv NAND2 NOR2 = [sta::equiv_cells $nand2_x1 $nor2_x1]"
puts "equiv NAND2 NAND3 = [sta::equiv_cells $nand2_x1 $nand3_x1]"
puts "equiv AND2 OR2 = [sta::equiv_cells $and2_x1 $or2_x1]"
puts "equiv DFF DFFR = [sta::equiv_cells $dff_x1 $dffr_x1]"
puts "equiv DFF SDFF = [sta::equiv_cells $dff_x1 $sdff_x1]"
puts "equiv INV DFF = [sta::equiv_cells $inv_x1 $dff_x1]"
puts "equiv INV CLKGATE = [sta::equiv_cells $inv_x1 $clkgate_x1]"
# Port equivalence
puts "ports INV_X1 INV_X2 = [sta::equiv_cell_ports $inv_x1 $inv_x2]"
puts "ports INV BUF = [sta::equiv_cell_ports $inv_x1 $buf_x1]"
puts "ports NAND2_X1 NAND2_X2 = [sta::equiv_cell_ports $nand2_x1 $nand2_x2]"
puts "ports NAND2 NAND3 = [sta::equiv_cell_ports $nand2_x1 $nand3_x1]"
puts "ports DFF_X1 DFF_X2 = [sta::equiv_cell_ports $dff_x1 $dff_x2]"
puts "ports DFF DFFR = [sta::equiv_cell_ports $dff_x1 $dffr_x1]"
# Timing arc equivalence
puts "arcs INV_X1 INV_X2 = [sta::equiv_cell_timing_arcs $inv_x1 $inv_x2]"
puts "arcs INV BUF = [sta::equiv_cell_timing_arcs $inv_x1 $buf_x1]"
puts "arcs DFF_X1 DFF_X2 = [sta::equiv_cell_timing_arcs $dff_x1 $dff_x2]"
puts "arcs DFF DFFR = [sta::equiv_cell_timing_arcs $dff_x1 $dffr_x1]"
puts "arcs NAND2_X1 NAND2_X2 = [sta::equiv_cell_timing_arcs $nand2_x1 $nand2_x2]"
puts "arcs NAND2 NOR2 = [sta::equiv_cell_timing_arcs $nand2_x1 $nor2_x1]"
set ng_bufs [sta::find_library_buffers $ng_lib]
puts "Nangate45 buffers = [llength $ng_bufs]"
############################################################
# Test 2: Sky130 families
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
set sky_lib [lindex [get_libs sky130_fd_sc_hd__tt_025C_1v80] 0]
sta::make_equiv_cells $sky_lib
foreach cell_name {
sky130_fd_sc_hd__inv_1 sky130_fd_sc_hd__inv_2 sky130_fd_sc_hd__inv_4 sky130_fd_sc_hd__inv_8
sky130_fd_sc_hd__buf_1 sky130_fd_sc_hd__buf_2 sky130_fd_sc_hd__buf_4 sky130_fd_sc_hd__buf_8
sky130_fd_sc_hd__nand2_1 sky130_fd_sc_hd__nand2_2 sky130_fd_sc_hd__nand2_4
sky130_fd_sc_hd__nor2_1 sky130_fd_sc_hd__nor2_2 sky130_fd_sc_hd__nor2_4
sky130_fd_sc_hd__and2_1 sky130_fd_sc_hd__and2_2 sky130_fd_sc_hd__and2_4
sky130_fd_sc_hd__or2_1 sky130_fd_sc_hd__or2_2 sky130_fd_sc_hd__or2_4
sky130_fd_sc_hd__dfxtp_1 sky130_fd_sc_hd__dfxtp_2 sky130_fd_sc_hd__dfxtp_4
sky130_fd_sc_hd__dfrtp_1 sky130_fd_sc_hd__dfrtp_2 sky130_fd_sc_hd__dfrtp_4
sky130_fd_sc_hd__clkbuf_1 sky130_fd_sc_hd__clkbuf_2 sky130_fd_sc_hd__clkbuf_4
} {
set cell [get_lib_cell -quiet sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != ""} {
set equivs [sta::find_equiv_cells $cell]
if {$equivs != "" && $equivs != "NULL"} {
puts "SKY $cell_name equiv=[llength $equivs]"
} else {
puts "SKY $cell_name equiv=0"
}
}
}
set sky_bufs [sta::find_library_buffers $sky_lib]
puts "Sky130 buffers = [llength $sky_bufs]"
############################################################
# Test 3: IHP cell families
############################################################
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
set ihp_lib [lindex [get_libs sg13g2_stdcell_typ_1p20V_25C] 0]
sta::make_equiv_cells $ihp_lib
foreach cell_name {
sg13g2_inv_1 sg13g2_inv_2 sg13g2_inv_4 sg13g2_inv_8
sg13g2_buf_1 sg13g2_buf_2 sg13g2_buf_4 sg13g2_buf_8
sg13g2_nand2_1 sg13g2_nand2_2
sg13g2_nor2_1 sg13g2_nor2_2
sg13g2_and2_1 sg13g2_and2_2
sg13g2_or2_1 sg13g2_or2_2
} {
set cell [get_lib_cell -quiet sg13g2_stdcell_typ_1p20V_25C/$cell_name]
if {$cell != ""} {
set equivs [sta::find_equiv_cells $cell]
if {$equivs != "" && $equivs != "NULL"} {
puts "IHP $cell_name equiv=[llength $equivs]"
} else {
puts "IHP $cell_name equiv=0"
}
}
}
set ihp_bufs [sta::find_library_buffers $ihp_lib]
puts "IHP buffers = [llength $ihp_bufs]"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,200 @@
# Test complex boolean function expressions and cell type classification
# Targets: FuncExpr.cc (to_string, port matching, op types),
# Liberty.cc (cell property queries, function expression evaluation),
# LibertyReader.cc (function expression parsing),
# TimingArc.cc (arc queries on cells with complex functions)
source ../../test/helpers.tcl
############################################################
# Read Nangate45 - has AOI, OAI, MUX, XOR, XNOR etc.
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
# Link a design to enable timing queries
read_verilog ../../sdc/test/sdc_test2.v
link_design sdc_test2
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 20 [get_ports clk2]
set_input_delay -clock clk1 2.0 [all_inputs]
set_output_delay -clock clk1 3.0 [all_outputs]
############################################################
# XOR/XNOR cells (FuncExpr op_xor)
############################################################
report_lib_cell NangateOpenCellLibrary/XOR2_X1
report_lib_cell NangateOpenCellLibrary/XOR2_X2
report_lib_cell NangateOpenCellLibrary/XNOR2_X1
report_lib_cell NangateOpenCellLibrary/XNOR2_X2
############################################################
# AOI cells (complex AND-OR-INVERT functions)
############################################################
# AOI21: !(A1&A2 | B)
report_lib_cell NangateOpenCellLibrary/AOI21_X1
report_lib_cell NangateOpenCellLibrary/AOI21_X2
report_lib_cell NangateOpenCellLibrary/AOI21_X4
# AOI22: !(A1&A2 | B1&B2)
report_lib_cell NangateOpenCellLibrary/AOI22_X1
report_lib_cell NangateOpenCellLibrary/AOI22_X2
report_lib_cell NangateOpenCellLibrary/AOI22_X4
# AOI211: !(A1&A2 | B | C)
report_lib_cell NangateOpenCellLibrary/AOI211_X1
report_lib_cell NangateOpenCellLibrary/AOI211_X2
report_lib_cell NangateOpenCellLibrary/AOI211_X4
############################################################
# OAI cells (complex OR-AND-INVERT functions)
############################################################
# OAI21: !((A1|A2) & B)
report_lib_cell NangateOpenCellLibrary/OAI21_X1
report_lib_cell NangateOpenCellLibrary/OAI21_X2
report_lib_cell NangateOpenCellLibrary/OAI21_X4
# OAI22: !((A1|A2) & (B1|B2))
report_lib_cell NangateOpenCellLibrary/OAI22_X1
report_lib_cell NangateOpenCellLibrary/OAI22_X2
report_lib_cell NangateOpenCellLibrary/OAI22_X4
# OAI211: !((A1|A2) & B & C)
report_lib_cell NangateOpenCellLibrary/OAI211_X1
report_lib_cell NangateOpenCellLibrary/OAI211_X2
report_lib_cell NangateOpenCellLibrary/OAI211_X4
# OAI33: !((A1|A2|A3) & (B1|B2|B3))
report_lib_cell NangateOpenCellLibrary/OAI33_X1
############################################################
# MUX cells (complex function: S?B:A)
############################################################
report_lib_cell NangateOpenCellLibrary/MUX2_X1
report_lib_cell NangateOpenCellLibrary/MUX2_X2
############################################################
# Full/half adder (complex multi-output functions)
############################################################
report_lib_cell NangateOpenCellLibrary/FA_X1
report_lib_cell NangateOpenCellLibrary/HA_X1
############################################################
# Tristate cells (three_state enable)
############################################################
report_lib_cell NangateOpenCellLibrary/TINV_X1
report_lib_cell NangateOpenCellLibrary/TBUF_X1
report_lib_cell NangateOpenCellLibrary/TBUF_X2
############################################################
# Special cells: antenna, filler, tie, clock gate
############################################################
report_lib_cell NangateOpenCellLibrary/ANTENNA_X1
report_lib_cell NangateOpenCellLibrary/FILLCELL_X1
report_lib_cell NangateOpenCellLibrary/FILLCELL_X2
report_lib_cell NangateOpenCellLibrary/FILLCELL_X4
report_lib_cell NangateOpenCellLibrary/FILLCELL_X8
report_lib_cell NangateOpenCellLibrary/FILLCELL_X16
report_lib_cell NangateOpenCellLibrary/FILLCELL_X32
report_lib_cell NangateOpenCellLibrary/LOGIC0_X1
report_lib_cell NangateOpenCellLibrary/LOGIC1_X1
report_lib_cell NangateOpenCellLibrary/CLKGATETST_X1
report_lib_cell NangateOpenCellLibrary/CLKGATETST_X2
report_lib_cell NangateOpenCellLibrary/CLKGATETST_X4
report_lib_cell NangateOpenCellLibrary/CLKGATETST_X8
############################################################
# Scan DFF cells (complex function with scan mux)
############################################################
report_lib_cell NangateOpenCellLibrary/SDFF_X1
report_lib_cell NangateOpenCellLibrary/SDFF_X2
report_lib_cell NangateOpenCellLibrary/SDFFR_X1
report_lib_cell NangateOpenCellLibrary/SDFFR_X2
report_lib_cell NangateOpenCellLibrary/SDFFS_X1
report_lib_cell NangateOpenCellLibrary/SDFFS_X2
report_lib_cell NangateOpenCellLibrary/SDFFRS_X1
report_lib_cell NangateOpenCellLibrary/SDFFRS_X2
############################################################
# Write liberty to exercise FuncExpr::to_string for all types
############################################################
set outfile1 [make_result_file liberty_func_expr_write.lib]
sta::write_liberty NangateOpenCellLibrary $outfile1
############################################################
# Read IHP library (different function syntax/features)
############################################################
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
# IHP has different cell naming and function formats
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_inv_1
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_buf_1
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_nand2_1
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_nor2_1
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_xor2_1
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_xnor2_1
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_mux2_1
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_dfrbp_1
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_ebufn_2
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_antn
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_tiehi
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_tielo
set outfile2 [make_result_file liberty_func_expr_write_ihp.lib]
sta::write_liberty sg13g2_stdcell_typ_1p20V_25C $outfile2
############################################################
# Read Sky130 library (yet another function expression style)
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
# Sky130 has complex cells with different function expression styles
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__a21o_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__a21oi_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__a22o_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__a22oi_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__a31o_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__a32o_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__o21a_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__o21ai_0
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__o22a_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__mux2_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__mux4_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__xor2_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__xnor2_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__fa_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__ha_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__maj3_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__ebufn_1
set outfile3 [make_result_file liberty_func_expr_write_sky130.lib]
sta::write_liberty sky130_fd_sc_hd__tt_025C_1v80 $outfile3
############################################################
# Timing path reports through complex cells
############################################################
report_checks -from [get_ports in1] -to [get_ports out1]
report_checks -from [get_ports in1] -to [get_ports out1] -path_delay min

View File

@ -0,0 +1,126 @@
--- leakage power queries ---
--- detailed cell reports ---
Cell sky130_fd_sc_hd__inv_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
A input 0.00-0.00
Y output function=!A
Timing arcs
A -> Y
combinational
^ -> v
v -> ^
Cell sky130_fd_sc_hd__nand2_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
A input 0.00-0.00
B input 0.00-0.00
Y output function=!A+!B
Timing arcs
A -> Y
combinational
^ -> v
v -> ^
B -> Y
combinational
^ -> v
v -> ^
Cell sky130_fd_sc_hd__dfxtp_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 0.00-0.00
D input 0.00-0.00
Q output function=IQ
IQ internal
IQ_N internal
Timing arcs
CLK -> CLK
width
^ -> v
v -> ^
CLK -> D
setup
^ -> ^
^ -> v
CLK -> D
hold
^ -> ^
^ -> v
CLK -> Q
Reg Clk to Q
^ -> ^
^ -> v
Warning 441: liberty_leakage_power_deep.tcl line 1, set_input_delay relative to a clock defined on the same port/pin not allowed.
Group Internal Switching Leakage Total
Power Power Power Power (Watts)
----------------------------------------------------------------
Sequential 1.76e-06 6.90e-09 2.36e-07 2.01e-06 86.3%
Combinational 1.22e-07 7.11e-08 1.25e-07 3.18e-07 13.7%
Clock 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
Macro 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
Pad 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
----------------------------------------------------------------
Total 1.88e-06 7.80e-08 3.61e-07 2.32e-06 100.0%
81.1% 3.4% 15.5%
Group Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------------------------------------------
Sequential 1.76263279e-06 6.89875490e-09 2.35681341e-07 2.00521299e-06 86.3%
Combinational 1.22147213e-07 7.10827521e-08 1.25075346e-07 3.18305297e-07 13.7%
Clock 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.0%
Macro 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.0%
Pad 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.0%
--------------------------------------------------------------------------------
Total 1.88477998e-06 7.79815039e-08 3.60756701e-07 2.32351817e-06 100.0%
81.1% 3.4% 15.5%
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
2.69e-08 1.13e-08 2.14e-08 5.96e-08 buf1
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
1.68e-08 5.90e-09 1.44e-08 3.71e-08 inv1
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
2.56e-08 2.00e-08 2.51e-08 7.07e-08 and1
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
2.59e-08 2.01e-08 2.27e-08 6.87e-08 or1
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
1.24e-08 6.90e-09 2.18e-08 4.11e-08 nand1
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
1.46e-08 6.90e-09 1.97e-08 4.11e-08 nor1
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
5.87e-07 6.90e-09 7.86e-08 6.73e-07 reg1
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
5.89e-07 0.00e+00 7.84e-08 6.67e-07 reg2
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
5.87e-07 0.00e+00 7.86e-08 6.65e-07 reg3

View File

@ -0,0 +1,66 @@
# Test deep leakage power groups with when conditions, internal power
# with related_pg_pin, and power attribute parsing across PDKs.
source ../../test/helpers.tcl
############################################################
# Read Sky130 library (has leakage_power groups with when conditions)
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
############################################################
# Query leakage power on various cell types
# Sky130 has per-state leakage_power groups with when conditions
############################################################
puts "--- leakage power queries ---"
# Note: cell_leakage_power is not a supported get_property property.
# Leakage power is exercised through report_power and report_lib_cell below.
############################################################
# Report lib cells to exercise detailed leakage/power info
############################################################
puts "--- detailed cell reports ---"
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__inv_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__nand2_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_1
############################################################
# Read Nangate library for internal power with when conditions
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
############################################################
# Link design and run power analysis to exercise internal power
############################################################
read_verilog ../../sdc/test/sdc_test2.v
link_design sdc_test2
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 20 [get_ports clk2]
set_input_delay -clock clk1 2.0 [all_inputs]
set_output_delay -clock clk1 3.0 [all_outputs]
set_input_transition 0.1 [all_inputs]
# Power reports exercise internal power evaluation
report_power
report_power -digits 8
# Per-instance power
foreach inst_name {buf1 inv1 and1 or1 nand1 nor1 reg1 reg2 reg3} {
report_power -instances [get_cells $inst_name]
}
############################################################
# Read IHP library for different power model format
############################################################
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
############################################################
# Write liberty roundtrip for Sky130 (exercises power writer)
############################################################
set outfile [make_result_file liberty_leakage_power_deep_write.lib]
sta::write_liberty sky130_fd_sc_hd__tt_025C_1v80 $outfile

View File

@ -0,0 +1,205 @@
Startpoint: reg1 (rising edge-triggered flip-flop clocked by clk)
Endpoint: out1 (output port clocked by clk)
Path Group: clk
Path Type: max
Corner: fast
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg1/CK (DFF_X1)
0.05 0.05 v reg1/Q (DFF_X1)
0.00 0.05 v out1 (out)
0.05 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.05 data arrival time
---------------------------------------------------------
6.95 slack (MET)
Startpoint: reg1 (rising edge-triggered flip-flop clocked by clk)
Endpoint: out1 (output port clocked by clk)
Path Group: clk
Path Type: max
Corner: slow
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg1/CK (DFF_X1)
0.29 0.29 ^ reg1/Q (DFF_X1)
0.00 0.29 ^ out1 (out)
0.29 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.29 data arrival time
---------------------------------------------------------
6.71 slack (MET)
Clock Period Waveform
----------------------------------------------------
clk 10.00 0.00 5.00
Startpoint: in1 (input port clocked by clk)
Endpoint: reg1 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: min
Corner: fast
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
2.00 2.00 ^ input external delay
0.00 2.00 ^ in1 (in)
0.01 2.01 ^ buf1/Z (BUF_X1)
0.00 2.01 ^ reg1/D (DFF_X1)
2.01 data arrival time
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 clock reconvergence pessimism
0.00 ^ reg1/CK (DFF_X1)
0.00 0.00 library hold time
0.00 data required time
---------------------------------------------------------
0.00 data required time
-2.01 data arrival time
---------------------------------------------------------
2.01 slack (MET)
Startpoint: reg1 (rising edge-triggered flip-flop clocked by clk)
Endpoint: out1 (output port clocked by clk)
Path Group: clk
Path Type: max
Corner: slow
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg1/CK (DFF_X1)
0.29 0.29 ^ reg1/Q (DFF_X1)
0.00 0.29 ^ out1 (out)
0.29 data arrival time
10.00 10.00 clock clk (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.29 data arrival time
---------------------------------------------------------
6.71 slack (MET)
Cell BUF_X1
Library NangateOpenCellLibrary_fast
File ../../test/nangate45/Nangate45_fast.lib
VDD power
VSS ground
A input 0.91-0.98
Z output function=A
Timing arcs
A -> Z
combinational
^ -> ^
v -> v
Cell BUF_X1
Library NangateOpenCellLibrary_slow
File ../../test/nangate45/Nangate45_slow.lib
VDD power
VSS ground
A input 0.84-0.93
Z output function=A
Timing arcs
A -> Z
combinational
^ -> ^
v -> v
Cell DFF_X1
Library NangateOpenCellLibrary_fast
File ../../test/nangate45/Nangate45_fast.lib
VDD power
VSS ground
D input 1.10-1.16
CK input 0.89-0.97
Q output function=IQ
QN output function=IQN
IQ internal
IQN internal
Timing arcs
CK -> D
hold
^ -> ^
^ -> v
CK -> D
setup
^ -> ^
^ -> v
CK -> CK
width
^ -> v
v -> ^
CK -> Q
Reg Clk to Q
^ -> ^
^ -> v
CK -> QN
Reg Clk to Q
^ -> ^
^ -> v
Cell DFF_X1
Library NangateOpenCellLibrary_slow
File ../../test/nangate45/Nangate45_slow.lib
VDD power
VSS ground
D input 1.03-1.11
CK input 0.82-0.91
Q output function=IQ
QN output function=IQN
IQ internal
IQN internal
Timing arcs
CK -> D
hold
^ -> ^
^ -> v
CK -> D
setup
^ -> ^
^ -> v
CK -> CK
width
^ -> v
v -> ^
CK -> Q
Reg Clk to Q
^ -> ^
^ -> v
CK -> QN
Reg Clk to Q
^ -> ^
^ -> v

View File

@ -0,0 +1,67 @@
# Test multi-corner liberty reading for code coverage
define_corners fast slow
read_liberty -corner fast ../../test/nangate45/Nangate45_fast.lib
read_liberty -corner slow ../../test/nangate45/Nangate45_slow.lib
# Verify both corners loaded
set fast_lib [get_libs NangateOpenCellLibrary_fast]
if { $fast_lib == "" } {
puts "FAIL: fast library not found"
exit 1
}
set slow_lib [get_libs NangateOpenCellLibrary_slow]
if { $slow_lib == "" } {
puts "FAIL: slow library not found"
exit 1
}
# Query cells in each corner
set fast_inv [get_lib_cells NangateOpenCellLibrary_fast/INV_X1]
if { $fast_inv == "" } {
puts "FAIL: fast INV_X1 not found"
exit 1
}
set slow_inv [get_lib_cells NangateOpenCellLibrary_slow/INV_X1]
if { $slow_inv == "" } {
puts "FAIL: slow INV_X1 not found"
exit 1
}
# Read verilog and link
read_verilog ../../sdc/test/sdc_test1.v
link_design sdc_test1
# Setup constraints
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 2.0 [get_ports in1]
set_output_delay -clock clk 3.0 [get_ports out1]
# Report for each corner
report_checks -corner fast
report_checks -corner slow
# Report clock properties
report_clock_properties
# Report with path details
report_checks -corner fast -path_delay min
report_checks -corner slow -path_delay max
# Query lib cells from both corners
report_lib_cell NangateOpenCellLibrary_fast/BUF_X1
report_lib_cell NangateOpenCellLibrary_slow/BUF_X1
report_lib_cell NangateOpenCellLibrary_fast/DFF_X1
report_lib_cell NangateOpenCellLibrary_slow/DFF_X1
# Get lib pins from both corners
set fast_buf_pins [get_lib_pins NangateOpenCellLibrary_fast/BUF_X1/*]
set slow_buf_pins [get_lib_pins NangateOpenCellLibrary_slow/BUF_X1/*]

View File

@ -0,0 +1,47 @@
INV equiv count: 6
BUF equiv count: 9
NAND2 equiv count: 3
NAND3 equiv count: 3
NAND4 equiv count: 3
NOR2 equiv count: 3
NOR3 equiv count: 3
NOR4 equiv count: 3
AND2 equiv count: 3
OR2 equiv count: 3
AOI21 equiv count: 3
OAI21 equiv count: 3
DFF equiv count: 2
SDFF equiv count: 2
CLKBUF equiv count: 9
XOR2 equiv count: 2
INV_X1 typ equiv fast: 1
INV_X1 typ equiv slow: 1
INV_X1 fast equiv slow: 1
BUF_X1 typ equiv fast: 1
NAND2_X1 typ equiv fast: 1
DFF_X1 typ equiv fast: 1
equiv_cell_ports INV typ/fast: 1
equiv_cell_ports BUF typ/fast: 1
equiv_cell_ports INV/BUF: 0
equiv_cell_ports NAND2/NAND3: 0
equiv_cell_timing_arcs INV typ/fast: 1
equiv_cell_timing_arcs BUF typ/fast: 1
equiv_cell_timing_arcs INV/BUF: 0
typ library buffers: 9
fast library buffers: 9
slow library buffers: 9
INV_X1 equiv INV_X2: 1
INV_X1 equiv INV_X4: 1
INV_X1 equiv INV_X8: 1
INV_X1 equiv INV_X16: 1
INV_X1 equiv INV_X32: 1
NAND2 equiv NOR2: 0
AND2 equiv OR2: 0
AOI21 equiv OAI21: 0
DFF equiv DFFR: 0
DFF equiv DFFS: 0
DFFR equiv DFFRS: 0
LVT INV equiv count: 6
LVT library buffers: 9
INV_X1 equiv LVT INV_X1_L: 1
equiv_cell_ports INV/LVT_INV: 1

View File

@ -0,0 +1,254 @@
# Test multi-library equivalent cell analysis for code coverage
# Targets: EquivCells.cc (hashCell, hashCellPorts, equivCellPorts, equivCellTimingArcSets,
# CellDriveResistanceGreater, cross-library matching),
# Liberty.cc (cell comparison, port iteration),
# LibertyReader.cc (multiple library reading)
source ../../test/helpers.tcl
############################################################
# Read multiple Nangate45 corners for cross-library equiv
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_liberty ../../test/nangate45/Nangate45_fast.lib
read_liberty ../../test/nangate45/Nangate45_slow.lib
############################################################
# Make equiv cells for typ library
############################################################
set typ_lib [lindex [get_libs NangateOpenCellLibrary] 0]
sta::make_equiv_cells $typ_lib
############################################################
# Find equiv cells in typ library (various cell families)
############################################################
# INV family
set inv_x1 [get_lib_cell NangateOpenCellLibrary/INV_X1]
set inv_equivs [sta::find_equiv_cells $inv_x1]
puts "INV equiv count: [llength $inv_equivs]"
# BUF family
set buf_x1 [get_lib_cell NangateOpenCellLibrary/BUF_X1]
set buf_equivs [sta::find_equiv_cells $buf_x1]
puts "BUF equiv count: [llength $buf_equivs]"
# NAND2 family
set nand2_x1 [get_lib_cell NangateOpenCellLibrary/NAND2_X1]
set nand2_equivs [sta::find_equiv_cells $nand2_x1]
puts "NAND2 equiv count: [llength $nand2_equivs]"
# NAND3 family
set nand3_x1 [get_lib_cell NangateOpenCellLibrary/NAND3_X1]
set nand3_equivs [sta::find_equiv_cells $nand3_x1]
puts "NAND3 equiv count: [llength $nand3_equivs]"
# NAND4 family
set nand4_x1 [get_lib_cell NangateOpenCellLibrary/NAND4_X1]
set nand4_equivs [sta::find_equiv_cells $nand4_x1]
puts "NAND4 equiv count: [llength $nand4_equivs]"
# NOR2 family
set nor2_x1 [get_lib_cell NangateOpenCellLibrary/NOR2_X1]
set nor2_equivs [sta::find_equiv_cells $nor2_x1]
puts "NOR2 equiv count: [llength $nor2_equivs]"
# NOR3 family
set nor3_x1 [get_lib_cell NangateOpenCellLibrary/NOR3_X1]
set nor3_equivs [sta::find_equiv_cells $nor3_x1]
puts "NOR3 equiv count: [llength $nor3_equivs]"
# NOR4 family
set nor4_x1 [get_lib_cell NangateOpenCellLibrary/NOR4_X1]
set nor4_equivs [sta::find_equiv_cells $nor4_x1]
puts "NOR4 equiv count: [llength $nor4_equivs]"
# AND2 family
set and2_x1 [get_lib_cell NangateOpenCellLibrary/AND2_X1]
set and2_equivs [sta::find_equiv_cells $and2_x1]
puts "AND2 equiv count: [llength $and2_equivs]"
# OR2 family
set or2_x1 [get_lib_cell NangateOpenCellLibrary/OR2_X1]
set or2_equivs [sta::find_equiv_cells $or2_x1]
puts "OR2 equiv count: [llength $or2_equivs]"
# AOI21 family
set aoi21_x1 [get_lib_cell NangateOpenCellLibrary/AOI21_X1]
set aoi21_equivs [sta::find_equiv_cells $aoi21_x1]
puts "AOI21 equiv count: [llength $aoi21_equivs]"
# OAI21 family
set oai21_x1 [get_lib_cell NangateOpenCellLibrary/OAI21_X1]
set oai21_equivs [sta::find_equiv_cells $oai21_x1]
puts "OAI21 equiv count: [llength $oai21_equivs]"
# DFF family
set dff_x1 [get_lib_cell NangateOpenCellLibrary/DFF_X1]
set dff_equivs [sta::find_equiv_cells $dff_x1]
puts "DFF equiv count: [llength $dff_equivs]"
# SDFF family
set sdff_x1 [get_lib_cell NangateOpenCellLibrary/SDFF_X1]
set sdff_equivs [sta::find_equiv_cells $sdff_x1]
puts "SDFF equiv count: [llength $sdff_equivs]"
# CLKBUF family
set clkbuf_x1 [get_lib_cell NangateOpenCellLibrary/CLKBUF_X1]
set clkbuf_equivs [sta::find_equiv_cells $clkbuf_x1]
puts "CLKBUF equiv count: [llength $clkbuf_equivs]"
# XOR2 family
set xor2_x1 [get_lib_cell NangateOpenCellLibrary/XOR2_X1]
set xor2_equivs [sta::find_equiv_cells $xor2_x1]
puts "XOR2 equiv count: [llength $xor2_equivs]"
############################################################
# Cross-library equiv_cells comparisons
############################################################
set fast_inv_x1 [get_lib_cell NangateOpenCellLibrary_fast/INV_X1]
set slow_inv_x1 [get_lib_cell NangateOpenCellLibrary_slow/INV_X1]
set result [sta::equiv_cells $inv_x1 $fast_inv_x1]
puts "INV_X1 typ equiv fast: $result"
set result [sta::equiv_cells $inv_x1 $slow_inv_x1]
puts "INV_X1 typ equiv slow: $result"
set result [sta::equiv_cells $fast_inv_x1 $slow_inv_x1]
puts "INV_X1 fast equiv slow: $result"
# Cross-library BUF
set fast_buf_x1 [get_lib_cell NangateOpenCellLibrary_fast/BUF_X1]
set result [sta::equiv_cells $buf_x1 $fast_buf_x1]
puts "BUF_X1 typ equiv fast: $result"
# Cross-library NAND2
set fast_nand2_x1 [get_lib_cell NangateOpenCellLibrary_fast/NAND2_X1]
set result [sta::equiv_cells $nand2_x1 $fast_nand2_x1]
puts "NAND2_X1 typ equiv fast: $result"
# Cross-library DFF
set fast_dff_x1 [get_lib_cell NangateOpenCellLibrary_fast/DFF_X1]
set result [sta::equiv_cells $dff_x1 $fast_dff_x1]
puts "DFF_X1 typ equiv fast: $result"
############################################################
# equiv_cell_ports cross-library
############################################################
set result [sta::equiv_cell_ports $inv_x1 $fast_inv_x1]
puts "equiv_cell_ports INV typ/fast: $result"
set result [sta::equiv_cell_ports $buf_x1 $fast_buf_x1]
puts "equiv_cell_ports BUF typ/fast: $result"
# Different function should NOT match
set result [sta::equiv_cell_ports $inv_x1 $buf_x1]
puts "equiv_cell_ports INV/BUF: $result"
set result [sta::equiv_cell_ports $nand2_x1 $nand3_x1]
puts "equiv_cell_ports NAND2/NAND3: $result"
############################################################
# equiv_cell_timing_arcs cross-library
############################################################
set result [sta::equiv_cell_timing_arcs $inv_x1 $fast_inv_x1]
puts "equiv_cell_timing_arcs INV typ/fast: $result"
set result [sta::equiv_cell_timing_arcs $buf_x1 $fast_buf_x1]
puts "equiv_cell_timing_arcs BUF typ/fast: $result"
set result [sta::equiv_cell_timing_arcs $inv_x1 $buf_x1]
puts "equiv_cell_timing_arcs INV/BUF: $result"
############################################################
# Find library buffers for each library
############################################################
set typ_buffers [sta::find_library_buffers $typ_lib]
puts "typ library buffers: [llength $typ_buffers]"
set fast_lib [lindex [get_libs NangateOpenCellLibrary_fast] 0]
set fast_buffers [sta::find_library_buffers $fast_lib]
puts "fast library buffers: [llength $fast_buffers]"
set slow_lib [lindex [get_libs NangateOpenCellLibrary_slow] 0]
set slow_buffers [sta::find_library_buffers $slow_lib]
puts "slow library buffers: [llength $slow_buffers]"
############################################################
# Additional equiv cells in typ library - within family
############################################################
# Same family - different sizes
set inv_x2 [get_lib_cell NangateOpenCellLibrary/INV_X2]
set inv_x4 [get_lib_cell NangateOpenCellLibrary/INV_X4]
set inv_x8 [get_lib_cell NangateOpenCellLibrary/INV_X8]
set inv_x16 [get_lib_cell NangateOpenCellLibrary/INV_X16]
set inv_x32 [get_lib_cell NangateOpenCellLibrary/INV_X32]
set result [sta::equiv_cells $inv_x1 $inv_x2]
puts "INV_X1 equiv INV_X2: $result"
set result [sta::equiv_cells $inv_x1 $inv_x4]
puts "INV_X1 equiv INV_X4: $result"
set result [sta::equiv_cells $inv_x1 $inv_x8]
puts "INV_X1 equiv INV_X8: $result"
set result [sta::equiv_cells $inv_x1 $inv_x16]
puts "INV_X1 equiv INV_X16: $result"
set result [sta::equiv_cells $inv_x1 $inv_x32]
puts "INV_X1 equiv INV_X32: $result"
# Different family comparisons
set result [sta::equiv_cells $nand2_x1 $nor2_x1]
puts "NAND2 equiv NOR2: $result"
set result [sta::equiv_cells $and2_x1 $or2_x1]
puts "AND2 equiv OR2: $result"
set result [sta::equiv_cells $aoi21_x1 $oai21_x1]
puts "AOI21 equiv OAI21: $result"
set dffr_x1 [get_lib_cell NangateOpenCellLibrary/DFFR_X1]
set result [sta::equiv_cells $dff_x1 $dffr_x1]
puts "DFF equiv DFFR: $result"
set dffs_x1 [get_lib_cell NangateOpenCellLibrary/DFFS_X1]
set result [sta::equiv_cells $dff_x1 $dffs_x1]
puts "DFF equiv DFFS: $result"
set dffrs_x1 [get_lib_cell NangateOpenCellLibrary/DFFRS_X1]
set result [sta::equiv_cells $dffr_x1 $dffrs_x1]
puts "DFFR equiv DFFRS: $result"
############################################################
# Read LVT library and make equiv cells
############################################################
read_liberty ../../test/nangate45/Nangate45_lvt.lib
set lvt_lib [lindex [get_libs NangateOpenCellLibrary_lvt] 0]
sta::make_equiv_cells $lvt_lib
set lvt_inv_x1 [get_lib_cell NangateOpenCellLibrary_lvt/INV_X1_L]
set lvt_inv_equivs [sta::find_equiv_cells $lvt_inv_x1]
puts "LVT INV equiv count: [llength $lvt_inv_equivs]"
set lvt_buffers [sta::find_library_buffers $lvt_lib]
puts "LVT library buffers: [llength $lvt_buffers]"
# Cross library with LVT (different cell naming so not equiv)
set result [sta::equiv_cells $inv_x1 $lvt_inv_x1]
puts "INV_X1 equiv LVT INV_X1_L: $result"
set result [sta::equiv_cell_ports $inv_x1 $lvt_inv_x1]
puts "equiv_cell_ports INV/LVT_INV: $result"

View File

@ -0,0 +1,21 @@
Warning 441: liberty_opcond_scale.tcl line 1, set_input_delay relative to a clock defined on the same port/pin not allowed.
No paths found.
INFO: wireload selection not found
No paths found.
No paths found.
max slew
Pin inv1/ZN ^
max slew 0.15
slew 0.02
----------------
Slack 0.13 (MET)
max capacitance
Pin nor1/ZN ^
max capacitance 26.70
capacitance 1.16
-----------------------
Slack 25.55 (MET)

View File

@ -0,0 +1,230 @@
# Test operating conditions, scale factors, and multi-corner features.
# Targets:
# Liberty.cc: findOperatingConditions, defaultOperatingConditions,
# scaleFactor (all overloads), addScaleFactors, findScaleFactors,
# inverters(), buffers(), makeCornerMap, setDelayModelType,
# findLibertyCellsMatching, findLibertyPortsMatching,
# ocvArcDepth, defaultOcvDerate, supplyVoltage, supplyExists,
# slewDerateFromLibrary, input/output/slewThresholds,
# defaultMaxFanout/Slew/Capacitance, defaultFanoutLoad,
# defaultIntrinsic, defaultPinResistance, footprint
# LibertyReader.cc: operating_conditions, scale_factors visitor paths
# EquivCells.cc: EquivCells constructor with map_libs path
source ../../test/helpers.tcl
############################################################
# Read Nangate45 library - has operating conditions
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
set lib [sta::find_liberty NangateOpenCellLibrary]
############################################################
# Operating conditions queries
############################################################
set op_cond [$lib find_operating_conditions typical]
if { $op_cond == "NULL" } {
puts "INFO: no operating_conditions named typical"
}
set def_op [$lib default_operating_conditions]
if { $def_op == "NULL" } {
puts "INFO: no default operating conditions"
}
############################################################
# Set operating conditions and run timing
############################################################
read_verilog ../../sdc/test/sdc_test2.v
link_design sdc_test2
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 20 [get_ports clk2]
set_input_delay -clock clk1 2.0 [all_inputs]
set_output_delay -clock clk1 3.0 [all_outputs]
set_input_transition 0.1 [all_inputs]
set_operating_conditions typical
report_checks -from [get_ports in1] -to [get_ports out1]
############################################################
# Library cell classification queries
# Exercises: inverters(), buffers(), isBuffer(), isInverter()
############################################################
set inv_cell [sta::find_liberty_cell INV_X1]
set buf_cell [sta::find_liberty_cell BUF_X1]
set inv_is_inv [$inv_cell is_inverter]
set inv_is_buf [$inv_cell is_buffer]
set buf_is_buf [$buf_cell is_buffer]
set buf_is_inv [$buf_cell is_inverter]
# Test is_leaf on various cells
set dff_cell [sta::find_liberty_cell DFF_X1]
set dff_leaf [$dff_cell is_leaf]
# Liberty library accessor on cell
set cell_lib [$inv_cell liberty_library]
############################################################
# Pattern matching on liberty cells
# Exercises: findLibertyCellsMatching, findLibertyPortsMatching
############################################################
set inv_matches [$lib find_liberty_cells_matching "INV*" 0 0]
set buf_matches [$lib find_liberty_cells_matching "BUF*" 0 0]
set dff_matches [$lib find_liberty_cells_matching "DFF*" 0 0]
set sdff_matches [$lib find_liberty_cells_matching "SDFF*" 0 0]
set all_matches [$lib find_liberty_cells_matching "*" 0 0]
# Port pattern matching
set inv_port_matches [$inv_cell find_liberty_ports_matching "*" 0 0]
set dff_port_matches [$dff_cell find_liberty_ports_matching "*" 0 0]
############################################################
# Timing arc queries on cells
# Exercises: timingArcSets, timingArcSetCount, hasTimingArcs
############################################################
set inv_arc_sets [$inv_cell timing_arc_sets]
set dff_arc_sets [$dff_cell timing_arc_sets]
# Check timing arc set ports
set clkgate_cell [sta::find_liberty_cell CLKGATETST_X1]
set clkgate_arcs [$clkgate_cell timing_arc_sets]
############################################################
# Find port on liberty cell
# Exercises: findLibertyPort
############################################################
set inv_a [$inv_cell find_liberty_port A]
set inv_zn [$inv_cell find_liberty_port ZN]
set dff_ck [$dff_cell find_liberty_port CK]
set dff_d [$dff_cell find_liberty_port D]
set dff_q [$dff_cell find_liberty_port Q]
############################################################
# Liberty port iterator on cell
# Exercises: LibertyCellPortIterator
############################################################
set port_iter [$inv_cell liberty_port_iterator]
set count 0
while { [$port_iter has_next] } {
set port [$port_iter next]
incr count
}
$port_iter finish
set port_iter2 [$dff_cell liberty_port_iterator]
set count2 0
while { [$port_iter2 has_next] } {
set port [$port_iter2 next]
incr count2
}
$port_iter2 finish
############################################################
# Wireload queries
# Exercises: findWireload, findWireloadSelection
############################################################
set wl [$lib find_wireload "1K_hvratio_1_1"]
if { $wl == "NULL" } {
puts "INFO: wireload not found"
}
set wls [$lib find_wireload_selection "WireloadSelection"]
if { $wls == "NULL" } {
puts "INFO: wireload selection not found"
}
############################################################
# Read Sky130 library - has different features
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
set sky_lib [sta::find_liberty sky130_fd_sc_hd__tt_025C_1v80]
set sky_op [$sky_lib find_operating_conditions "tt_025C_1v80"]
if { $sky_op == "NULL" } {
puts "INFO: sky130 no named operating conditions"
}
set sky_def_op [$sky_lib default_operating_conditions]
if { $sky_def_op == "NULL" } {
puts "INFO: sky130 no default operating conditions"
}
############################################################
# Read fast/slow libraries for multi-corner analysis
# Exercises: makeCornerMap path, setCornerCell, scaleFactor
############################################################
read_liberty ../../test/nangate45/Nangate45_fast.lib
# Read slow too - exercises more corner mapping paths
read_liberty ../../test/sky130hd/sky130_fd_sc_hd__ff_n40C_1v95.lib
read_liberty ../../test/sky130hd/sky130_fd_sc_hd__ss_n40C_1v40.lib
# Report checks exercises multi-library corner paths
report_checks -from [get_ports in1] -to [get_ports out1]
############################################################
# set_timing_derate - exercises OCV paths
############################################################
set_timing_derate -early 0.95
set_timing_derate -late 1.05
report_checks -from [get_ports in1] -to [get_ports out1]
############################################################
# Write liberty for Nangate to exercise all writer paths
############################################################
set outfile [make_result_file liberty_opcond_scale_write.lib]
sta::write_liberty NangateOpenCellLibrary $outfile
set outfile2 [make_result_file liberty_opcond_scale_sky130.lib]
sta::write_liberty sky130_fd_sc_hd__tt_025C_1v80 $outfile2
############################################################
# EquivCells with multiple libraries
# Exercises: EquivCells constructor with map_libs
############################################################
set lib1 [lindex [get_libs NangateOpenCellLibrary] 0]
set lib2 [lindex [get_libs NangateOpenCellLibrary_fast] 0]
sta::make_equiv_cells $lib1
sta::make_equiv_cells $lib2
# Cross-library equiv
set inv_typ [get_lib_cell NangateOpenCellLibrary/INV_X1]
set inv_fast [get_lib_cell NangateOpenCellLibrary_fast/INV_X1]
set result [sta::equiv_cells $inv_typ $inv_fast]
set buf_typ [get_lib_cell NangateOpenCellLibrary/BUF_X1]
set buf_fast [get_lib_cell NangateOpenCellLibrary_fast/BUF_X1]
set result [sta::equiv_cells $buf_typ $buf_fast]
# equiv_cell_ports across libraries
set result [sta::equiv_cell_ports $inv_typ $inv_fast]
# equiv_cell_timing_arcs across libraries
set result [sta::equiv_cell_timing_arcs $inv_typ $inv_fast]
############################################################
# Report check types for max_cap, max_slew, max_fanout
############################################################
report_check_types -max_slew -max_capacitance -max_fanout -verbose

View File

@ -0,0 +1,713 @@
--- supply voltage queries ---
VPWR exists = 1
VGND exists = 1
VPB exists = 1
VNB exists = 1
BOGUS_SUPPLY exists = 0
--- pg pin port queries ---
inv_1/VGND dir=ground is_pg=1
inv_1/VNB dir=bias is_pg=1
inv_1/VPB dir=bias is_pg=1
inv_1/VPWR dir=power is_pg=1
sky130_fd_sc_hd__buf_1 pg_pin_count=4
sky130_fd_sc_hd__nand2_1 pg_pin_count=4
sky130_fd_sc_hd__dfxtp_1 pg_pin_count=4
sky130_fd_sc_hd__dfrtp_1 pg_pin_count=4
sky130_fd_sc_hd__ebufn_1 pg_pin_count=4
sky130_fd_sc_hd__dlclkp_1 pg_pin_count=4
sky130_fd_sc_hd__mux2_1 pg_pin_count=4
sky130_fd_sc_hd__sdfxtp_1 pg_pin_count=4
--- leakage power per-state queries ---
sky130_fd_sc_hd__inv_1 area=3.753600
sky130_fd_sc_hd__inv_2 area=3.753600
sky130_fd_sc_hd__inv_4 area=6.256000
sky130_fd_sc_hd__inv_8 area=11.260800
sky130_fd_sc_hd__buf_1 area=3.753600
sky130_fd_sc_hd__buf_2 area=5.004800
sky130_fd_sc_hd__nand2_1 area=3.753600
sky130_fd_sc_hd__nand3_1 area=5.004800
sky130_fd_sc_hd__nor2_1 area=3.753600
sky130_fd_sc_hd__nor3_1 area=5.004800
sky130_fd_sc_hd__and2_1 area=6.256000
sky130_fd_sc_hd__and3_1 area=6.256000
sky130_fd_sc_hd__or2_1 area=6.256000
sky130_fd_sc_hd__or3_1 area=6.256000
sky130_fd_sc_hd__xor2_1 area=8.758400
sky130_fd_sc_hd__xnor2_1 area=8.758400
sky130_fd_sc_hd__a21o_1 area=7.507200
sky130_fd_sc_hd__a21oi_1 area=5.004800
sky130_fd_sc_hd__a22o_1 area=8.758400
sky130_fd_sc_hd__a22oi_1 area=7.507200
sky130_fd_sc_hd__o21a_1 area=7.507200
sky130_fd_sc_hd__o21ai_0 area=5.004800
sky130_fd_sc_hd__o22a_1 area=8.758400
sky130_fd_sc_hd__o22ai_1 area=6.256000
sky130_fd_sc_hd__mux2_1 area=11.260800
sky130_fd_sc_hd__mux2i_1 area=10.009600
sky130_fd_sc_hd__mux4_1 area=26.275200
sky130_fd_sc_hd__ha_1 area=12.512000
sky130_fd_sc_hd__fa_1 area=20.019199
sky130_fd_sc_hd__dfxtp_1 area=20.019199
sky130_fd_sc_hd__dfxtp_2 area=21.270399
sky130_fd_sc_hd__dfxtp_4 area=23.772800
sky130_fd_sc_hd__dfrtp_1 area=25.024000
sky130_fd_sc_hd__dfrtp_2 area=26.275200
sky130_fd_sc_hd__dfrtp_4 area=28.777599
sky130_fd_sc_hd__dfstp_1 area=26.275200
sky130_fd_sc_hd__dfstp_2 area=26.275200
sky130_fd_sc_hd__dfstp_4 area=30.028799
sky130_fd_sc_hd__dfbbp_1 area=32.531200
Warning 354: liberty_pgpin_voltage.tcl line 1, cell 'sky130_fd_sc_hd__dfbbp_2' not found.
sky130_fd_sc_hd__dlxtp_1 area=15.014400
sky130_fd_sc_hd__dlxtn_1 area=15.014400
sky130_fd_sc_hd__dlxbn_1 area=18.768000
sky130_fd_sc_hd__sdfxtp_1 area=26.275200
sky130_fd_sc_hd__sdfxtp_2 area=27.526400
sky130_fd_sc_hd__sdfrtp_1 area=31.280001
sky130_fd_sc_hd__sdfstp_1 area=33.782398
sky130_fd_sc_hd__sdlclkp_1 area=18.768000
sky130_fd_sc_hd__dlclkp_1 area=17.516800
--- detailed cell reports with pg_pin ---
Cell sky130_fd_sc_hd__inv_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
A input 0.00-0.00
Y output function=!A
Timing arcs
A -> Y
combinational
^ -> v
v -> ^
Cell sky130_fd_sc_hd__dfxtp_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 0.00-0.00
D input 0.00-0.00
Q output function=IQ
IQ internal
IQ_N internal
Timing arcs
CLK -> CLK
width
^ -> v
v -> ^
CLK -> D
setup
^ -> ^
^ -> v
CLK -> D
hold
^ -> ^
^ -> v
CLK -> Q
Reg Clk to Q
^ -> ^
^ -> v
Cell sky130_fd_sc_hd__dfrtp_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 0.00-0.00
D input 0.00-0.00
Q output function=IQ
RESET_B input 0.00-0.00
IQ internal
IQ_N internal
Timing arcs
CLK -> CLK
width
^ -> v
v -> ^
CLK -> D
setup
^ -> ^
^ -> v
CLK -> D
hold
^ -> ^
^ -> v
CLK -> Q
Reg Clk to Q
^ -> ^
^ -> v
RESET_B -> Q
Reg Set/Clr
v -> v
CLK -> RESET_B
recovery
^ -> ^
CLK -> RESET_B
removal
^ -> ^
RESET_B -> RESET_B
width
v -> ^
Cell sky130_fd_sc_hd__ebufn_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
A input 0.00-0.00
TE_B input 0.00-0.00
Z tristate enable=!TE_B function=A 0.00
Timing arcs
A -> Z
combinational
^ -> ^
v -> v
TE_B -> Z
tristate enable
v -> Z1
v -> Z0
TE_B -> Z
tristate disable
^ -> 0Z
^ -> 1Z
Cell sky130_fd_sc_hd__dlclkp_1
Library sky130_fd_sc_hd__tt_025C_1v80
File ../../test/sky130hd/sky130hd_tt.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 0.00-0.00
GATE input 0.00-0.00
GCLK output
M0 internal
Timing arcs
CLK -> CLK
width
v -> ^
CLK -> GATE
setup
^ -> ^
^ -> v
CLK -> GATE
hold
^ -> ^
^ -> v
CLK -> GCLK
combinational
^ -> ^
v -> v
IHP sg13g2_inv_1 area=5.443200
IHP sg13g2_inv_1 pg_pins=0
IHP sg13g2_buf_1 area=7.257600
IHP sg13g2_buf_1 pg_pins=0
IHP sg13g2_nand2_1 area=7.257600
IHP sg13g2_nand2_1 pg_pins=0
IHP sg13g2_nor2_1 area=7.257600
IHP sg13g2_nor2_1 pg_pins=0
IHP sg13g2_and2_1 area=9.072000
IHP sg13g2_and2_1 pg_pins=0
IHP sg13g2_or2_1 area=9.072000
IHP sg13g2_or2_1 pg_pins=0
IHP sg13g2_dfrbp_1 area=47.174400
IHP sg13g2_dfrbp_1 pg_pins=0
IHP sg13g2_dlhq_1 area=30.844801
IHP sg13g2_dlhq_1 pg_pins=0
Warning 441: liberty_pgpin_voltage.tcl line 1, set_input_delay relative to a clock defined on the same port/pin not allowed.
Group Internal Switching Leakage Total
Power Power Power Power (Watts)
----------------------------------------------------------------
Sequential 1.76e-06 6.90e-09 2.36e-07 2.01e-06 86.3%
Combinational 1.22e-07 7.11e-08 1.25e-07 3.18e-07 13.7%
Clock 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
Macro 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
Pad 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
----------------------------------------------------------------
Total 1.88e-06 7.80e-08 3.61e-07 2.32e-06 100.0%
81.1% 3.4% 15.5%
Group Internal Switching Leakage Total
Power Power Power Power (Watts)
------------------------------------------------------------------------
Sequential 1.762633e-06 6.898755e-09 2.356813e-07 2.005213e-06 86.3%
Combinational 1.221472e-07 7.108275e-08 1.250753e-07 3.183053e-07 13.7%
Clock 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.0%
Macro 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.0%
Pad 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.0%
------------------------------------------------------------------------
Total 1.884780e-06 7.798150e-08 3.607567e-07 2.323518e-06 100.0%
81.1% 3.4% 15.5%
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_1 port M0 not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_2 port M0 not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_4 port M0 not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 GATE_N -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 GATE_N -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 GATE_N -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 GATE_N -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 GATE -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 GATE -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 GATE -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 GATE -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 GATE_N -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 GATE_N -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 GATE_N -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 GATE_N -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 GATE -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 GATE -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1 SLEEP_B -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1 SLEEP_B -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdlclkp_1 port M0 not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdlclkp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdlclkp_2 port M0 not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdlclkp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdlclkp_4 port M0 not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdlclkp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfsbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_1 port M0 not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_2 port M0 not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_4 port M0 not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 GATE_N -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1 GATE_N -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 GATE_N -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2 GATE_N -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 GATE -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1 GATE -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 GATE -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2 GATE -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtn_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlrtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 GATE_N -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1 GATE_N -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 GATE_N -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2 GATE_N -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 D -> Q_N timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 GATE -> Q_N timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 D -> Q_N timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1 GATE -> Q_N timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4 GATE_N -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4 GATE_N -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtn_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1 GATE -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1 GATE -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__edfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1 D -> Q timing group Latch D to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1 SLEEP_B -> Q timing group Latch En to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1 D -> Q timing group combinational not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1.
Warning 1111: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1 SLEEP_B -> Q timing group Reg Clk to Q not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__lpflow_inputisolatch_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbn_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfbbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtn_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtn_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtn_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfsbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdlclkp_1 port M0 not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdlclkp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdlclkp_2 port M0 not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdlclkp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdlclkp_4 port M0 not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdlclkp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxbp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_1 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_1 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_1.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_2 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_2 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_2.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_4 port IQ not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_4.
Warning 1110: cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_4 port IQ_N not found in cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sedfxtp_4.

View File

@ -0,0 +1,184 @@
# Test pg_pin, voltage_map, supply voltage, and power group parsing.
source ../../test/helpers.tcl
suppress_msg 1140
############################################################
# Read Sky130 library (has pg_pin, voltage_map extensively)
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
set sky_lib [sta::find_liberty sky130_fd_sc_hd__tt_025C_1v80]
############################################################
# Check supply voltage existence
############################################################
puts "--- supply voltage queries ---"
# sky130hd has VPWR and VGND supply names
set vpwr_exists [sta::liberty_supply_exists "VPWR"]
puts "VPWR exists = $vpwr_exists"
set vgnd_exists [sta::liberty_supply_exists "VGND"]
puts "VGND exists = $vgnd_exists"
set vbp_exists [sta::liberty_supply_exists "VPB"]
puts "VPB exists = $vbp_exists"
set vbn_exists [sta::liberty_supply_exists "VNB"]
puts "VNB exists = $vbn_exists"
set nonexist [sta::liberty_supply_exists "BOGUS_SUPPLY"]
puts "BOGUS_SUPPLY exists = $nonexist"
############################################################
# Query PG pin ports (power/ground pins)
############################################################
puts "--- pg pin port queries ---"
# Inverter has VPWR, VGND, VPB, VNB pg_pins
set inv_cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__inv_1]
set port_iter [$inv_cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set is_pg [$port is_pwr_gnd]
set dir [sta::liberty_port_direction $port]
set name [get_name $port]
if {$is_pg} {
puts "inv_1/$name dir=$dir is_pg=$is_pg"
}
}
$port_iter finish
# Query PG pins on various cell types
foreach cell_name {sky130_fd_sc_hd__buf_1 sky130_fd_sc_hd__nand2_1
sky130_fd_sc_hd__dfxtp_1 sky130_fd_sc_hd__dfrtp_1
sky130_fd_sc_hd__ebufn_1 sky130_fd_sc_hd__dlclkp_1
sky130_fd_sc_hd__mux2_1 sky130_fd_sc_hd__sdfxtp_1} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set pg_count 0
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
if {[$port is_pwr_gnd]} {
incr pg_count
}
}
$port_iter finish
puts "$cell_name pg_pin_count=$pg_count"
}
}
############################################################
# Leakage power with when conditions per state
# Sky130 has per-state leakage_power groups
############################################################
puts "--- leakage power per-state queries ---"
foreach cell_name {sky130_fd_sc_hd__inv_1 sky130_fd_sc_hd__inv_2
sky130_fd_sc_hd__inv_4 sky130_fd_sc_hd__inv_8
sky130_fd_sc_hd__buf_1 sky130_fd_sc_hd__buf_2
sky130_fd_sc_hd__nand2_1 sky130_fd_sc_hd__nand3_1
sky130_fd_sc_hd__nor2_1 sky130_fd_sc_hd__nor3_1
sky130_fd_sc_hd__and2_1 sky130_fd_sc_hd__and3_1
sky130_fd_sc_hd__or2_1 sky130_fd_sc_hd__or3_1
sky130_fd_sc_hd__xor2_1 sky130_fd_sc_hd__xnor2_1
sky130_fd_sc_hd__a21o_1 sky130_fd_sc_hd__a21oi_1
sky130_fd_sc_hd__a22o_1 sky130_fd_sc_hd__a22oi_1
sky130_fd_sc_hd__o21a_1 sky130_fd_sc_hd__o21ai_0
sky130_fd_sc_hd__o22a_1 sky130_fd_sc_hd__o22ai_1
sky130_fd_sc_hd__mux2_1 sky130_fd_sc_hd__mux2i_1
sky130_fd_sc_hd__mux4_1 sky130_fd_sc_hd__ha_1
sky130_fd_sc_hd__fa_1} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set area [get_property $cell area]
puts "$cell_name area=$area"
}
}
# Sequential cells
foreach cell_name {sky130_fd_sc_hd__dfxtp_1 sky130_fd_sc_hd__dfxtp_2
sky130_fd_sc_hd__dfxtp_4 sky130_fd_sc_hd__dfrtp_1
sky130_fd_sc_hd__dfrtp_2 sky130_fd_sc_hd__dfrtp_4
sky130_fd_sc_hd__dfstp_1 sky130_fd_sc_hd__dfstp_2
sky130_fd_sc_hd__dfstp_4 sky130_fd_sc_hd__dfbbp_1
sky130_fd_sc_hd__dfbbp_2 sky130_fd_sc_hd__dlxtp_1
sky130_fd_sc_hd__dlxtn_1 sky130_fd_sc_hd__dlxbn_1
sky130_fd_sc_hd__sdfxtp_1 sky130_fd_sc_hd__sdfxtp_2
sky130_fd_sc_hd__sdfrtp_1 sky130_fd_sc_hd__sdfstp_1
sky130_fd_sc_hd__sdlclkp_1 sky130_fd_sc_hd__dlclkp_1} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set area [get_property $cell area]
puts "$cell_name area=$area"
}
}
############################################################
# Report cells to exercise detailed pg_pin/power writer paths
############################################################
puts "--- detailed cell reports with pg_pin ---"
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__inv_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfxtp_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__ebufn_1
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlclkp_1
############################################################
# Read IHP library (different voltage/supply naming)
############################################################
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
foreach cell_name {sg13g2_inv_1 sg13g2_buf_1 sg13g2_nand2_1
sg13g2_nor2_1 sg13g2_and2_1 sg13g2_or2_1
sg13g2_dfrbp_1 sg13g2_dlhq_1} {
set cell [get_lib_cell sg13g2_stdcell_typ_1p20V_25C/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set area [get_property $cell area]
puts "IHP $cell_name area=$area"
# Query pg pins
set pg_count 0
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
if {[$port is_pwr_gnd]} {
incr pg_count
}
}
$port_iter finish
puts "IHP $cell_name pg_pins=$pg_count"
}
}
############################################################
# Read IHP second corner
############################################################
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p50V_25C.lib
############################################################
# Link design and run power analysis
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog ../../sdc/test/sdc_test2.v
link_design sdc_test2
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 20 [get_ports clk2]
set_input_delay -clock clk1 2.0 [all_inputs]
set_output_delay -clock clk1 3.0 [all_outputs]
set_input_transition 0.1 [all_inputs]
report_power
report_power -digits 6
############################################################
# Write liberty roundtrip for Sky130 (with pg_pin groups)
############################################################
set outfile [make_result_file liberty_pgpin_voltage_write.lib]
sta::write_liberty sky130_fd_sc_hd__tt_025C_1v80 $outfile
# Read back the written library to verify
read_liberty $outfile

View File

@ -0,0 +1,69 @@
Group Internal Switching Leakage Total
Power Power Power Power (Watts)
----------------------------------------------------------------
Sequential 1.52e-06 6.90e-09 2.36e-07 1.76e-06 84.2%
Combinational 1.33e-07 7.11e-08 1.25e-07 3.29e-07 15.8%
Clock 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
Macro 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
Pad 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
----------------------------------------------------------------
Total 1.65e-06 7.80e-08 3.61e-07 2.09e-06 100.0%
79.0% 3.7% 17.3%
Group Internal Switching Leakage Total
Power Power Power Power (Watts)
------------------------------------------------------------------------
Sequential 1.517312e-06 6.898755e-09 2.356813e-07 1.759892e-06 84.2%
Combinational 1.332258e-07 7.108275e-08 1.250753e-07 3.293839e-07 15.8%
Clock 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.0%
Macro 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.0%
Pad 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.0%
------------------------------------------------------------------------
Total 1.650538e-06 7.798150e-08 3.607567e-07 2.089276e-06 100.0%
79.0% 3.7% 17.3%
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
3.04e-08 1.13e-08 2.14e-08 6.31e-08 buf1
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
2.33e-08 5.90e-09 1.44e-08 4.35e-08 inv1
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
2.56e-08 2.00e-08 2.51e-08 7.07e-08 and1
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
5.87e-07 6.90e-09 7.86e-08 6.73e-07 reg1
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
5.89e-07 0.00e+00 7.84e-08 6.67e-07 reg2
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
3.41e-07 0.00e+00 7.86e-08 4.20e-07 reg3
Internal Switching Leakage Total
Power Power Power Power (Watts)
--------------------------------------------
5.87e-07 6.90e-09 7.86e-08 6.73e-07 reg1
5.89e-07 0.00e+00 7.84e-08 6.67e-07 reg2
3.41e-07 0.00e+00 7.86e-08 4.20e-07 reg3
2.56e-08 2.00e-08 2.51e-08 7.07e-08 and1
2.70e-08 2.01e-08 2.27e-08 6.98e-08 or1
3.04e-08 1.13e-08 2.14e-08 6.31e-08 buf1
2.33e-08 5.90e-09 1.44e-08 4.35e-08 inv1
1.46e-08 6.90e-09 1.97e-08 4.11e-08 nor1
1.24e-08 6.90e-09 2.18e-08 4.11e-08 nand1
INV_X1 area: 0.532000
BUF_X1 area: 0.798000
DFF_X1 area: 4.522000
INV_X1 is_inverter: 1
INV_X1 is_buffer: 0
BUF_X1 is_buffer: 1
BUF_X1 is_inverter: 0
DFF_X1 is_buffer: 0
sky130 inv area: 3.753600
IHP inv area: 5.443200
ASAP7 DFF area: 0.291600

View File

@ -0,0 +1,121 @@
# Test internal power, leakage power, and power reporting for code coverage
source ../../test/helpers.tcl
############################################################
# Read libraries with power models
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
# Read a design to enable power reporting
read_verilog ../../sdc/test/sdc_test2.v
link_design sdc_test2
# Setup constraints for power analysis
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 20 [get_ports clk2]
set_input_delay -clock clk1 2.0 [get_ports in1]
set_input_delay -clock clk1 2.0 [get_ports in2]
set_input_delay -clock clk1 2.0 [get_ports in3]
set_output_delay -clock clk1 3.0 [get_ports out1]
set_output_delay -clock clk2 3.0 [get_ports out2]
set_input_transition 0.1 [get_ports in1]
set_input_transition 0.1 [get_ports in2]
set_input_transition 0.1 [get_ports in3]
############################################################
# Report power (exercises internal power computation)
############################################################
report_power
report_power -digits 6
# Report power for specific instances
report_power -instances [get_cells buf1]
report_power -instances [get_cells inv1]
report_power -instances [get_cells and1]
report_power -instances [get_cells reg1]
report_power -instances [get_cells reg2]
report_power -instances [get_cells reg3]
report_power -instances [get_cells {buf1 inv1 and1 or1 nand1 nor1 reg1 reg2 reg3}]
############################################################
# Cell leakage power property (exercises LeakagePower.cc)
############################################################
set inv_cell [get_lib_cell NangateOpenCellLibrary/INV_X1]
set buf_cell [get_lib_cell NangateOpenCellLibrary/BUF_X1]
set dff_cell [get_lib_cell NangateOpenCellLibrary/DFF_X1]
set nand_cell [get_lib_cell NangateOpenCellLibrary/NAND2_X1]
# Area property
puts "INV_X1 area: [get_property $inv_cell area]"
puts "BUF_X1 area: [get_property $buf_cell area]"
puts "DFF_X1 area: [get_property $dff_cell area]"
############################################################
# Cell properties - is_buffer, is_inverter, etc.
############################################################
puts "INV_X1 is_inverter: [get_property $inv_cell is_inverter]"
puts "INV_X1 is_buffer: [get_property $inv_cell is_buffer]"
puts "BUF_X1 is_buffer: [get_property $buf_cell is_buffer]"
puts "BUF_X1 is_inverter: [get_property $buf_cell is_inverter]"
puts "DFF_X1 is_buffer: [get_property $dff_cell is_buffer]"
############################################################
# Write liberty and re-read (exercises writer power paths)
############################################################
set outfile [make_result_file liberty_power_write.lib]
sta::write_liberty NangateOpenCellLibrary $outfile
############################################################
# Read more libraries with power data
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
# Query sky130 cell leakage powers
set sky_inv [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__inv_1]
puts "sky130 inv area: [get_property $sky_inv area]"
# Write sky130 liberty
set outfile2 [make_result_file liberty_power_write_sky130.lib]
sta::write_liberty sky130_fd_sc_hd__tt_025C_1v80 $outfile2
############################################################
# Read IHP library and query power
############################################################
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
set ihp_inv [get_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_inv_1]
puts "IHP inv area: [get_property $ihp_inv area]"
############################################################
# Read ASAP7 CCSN library (CCS timing + power models)
############################################################
read_liberty ../../test/asap7_ccsn.lib.gz
set outfile3 [make_result_file liberty_power_write_ccsn.lib]
sta::write_liberty asap7sc7p5t_AO_LVT_FF_ccsn_211120 $outfile3
############################################################
# Read ASAP7 SEQ for power on sequential cells
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
set asap7_dff [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DFFHQNx1_ASAP7_75t_R]
puts "ASAP7 DFF area: [get_property $asap7_dff area]"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,167 @@
# Test liberty cell/pin/arc property queries for code coverage
# Targets: Liberty.cc, TimingArc.cc, InternalPower.cc, FuncExpr.cc, TableModel.cc
read_liberty ../../test/nangate45/Nangate45_typ.lib
############################################################
# Library-level properties
############################################################
set lib [get_libs NangateOpenCellLibrary]
# Library iterator
set lib_iter [sta::liberty_library_iterator]
# find_liberty
set found_lib [sta::find_liberty NangateOpenCellLibrary]
############################################################
# Cell property queries on various cell types
############################################################
# Query cell properties using get_property / report_lib_cell
# Inverter
set inv [get_lib_cell NangateOpenCellLibrary/INV_X1]
report_lib_cell NangateOpenCellLibrary/INV_X1
# Buffer
set buf [get_lib_cell NangateOpenCellLibrary/BUF_X1]
report_lib_cell NangateOpenCellLibrary/BUF_X1
# Sequential cells - DFF
set dff [get_lib_cell NangateOpenCellLibrary/DFF_X1]
report_lib_cell NangateOpenCellLibrary/DFF_X1
# DFF with reset
set dffr [get_lib_cell NangateOpenCellLibrary/DFFR_X1]
report_lib_cell NangateOpenCellLibrary/DFFR_X1
# DFF with set
set dffs [get_lib_cell NangateOpenCellLibrary/DFFS_X1]
report_lib_cell NangateOpenCellLibrary/DFFS_X1
# DFF with set and reset
set dffrs [get_lib_cell NangateOpenCellLibrary/DFFRS_X1]
report_lib_cell NangateOpenCellLibrary/DFFRS_X1
# Latch
set latch [get_lib_cell NangateOpenCellLibrary/TLAT_X1]
report_lib_cell NangateOpenCellLibrary/TLAT_X1
# Complex cells
foreach cell_name {AOI21_X1 AOI22_X1 OAI21_X1 OAI22_X1 AOI211_X1 OAI211_X1 \
HA_X1 FA_X1 XNOR2_X1 XOR2_X1 MUX2_X1 \
CLKBUF_X1 CLKBUF_X2 CLKBUF_X3 TINV_X1 \
NAND2_X1 NAND3_X1 NAND4_X1 NOR2_X1 NOR3_X1 NOR4_X1 \
AND2_X1 AND3_X1 AND4_X1 OR2_X1 OR3_X1 OR4_X1 \
ANTENNA_X1 FILLCELL_X1 LOGIC0_X1 LOGIC1_X1 \
CLKGATETST_X1 CLKGATETST_X2 SDFF_X1 SDFFR_X1 SDFFS_X1 SDFFRS_X1} {
report_lib_cell NangateOpenCellLibrary/$cell_name
}
############################################################
# Pin direction queries
############################################################
# Test liberty_port_direction on various pin types
foreach {cell_name pin_name} {
INV_X1 A INV_X1 ZN
BUF_X1 A BUF_X1 Z
DFF_X1 D DFF_X1 CK DFF_X1 Q DFF_X1 QN
NAND2_X1 A1 NAND2_X1 A2 NAND2_X1 ZN
DFFR_X1 RN
DFFS_X1 SN
CLKGATETST_X1 CK CLKGATETST_X1 E CLKGATETST_X1 SE CLKGATETST_X1 GCK
} {
set pin [get_lib_pin NangateOpenCellLibrary/$cell_name/$pin_name]
if { $pin != "" } {
set dir [sta::liberty_port_direction $pin]
}
}
############################################################
# get_lib_pins and get_lib_cells with various patterns
############################################################
# Wildcard patterns
set all_cells [get_lib_cells NangateOpenCellLibrary/*]
set inv_cells [get_lib_cells NangateOpenCellLibrary/INV_*]
set dff_cells [get_lib_cells NangateOpenCellLibrary/DFF*]
set sdff_cells [get_lib_cells NangateOpenCellLibrary/SDFF*]
# All pins of a cell
set inv_pins [get_lib_pins NangateOpenCellLibrary/INV_X1/*]
set dff_pins [get_lib_pins NangateOpenCellLibrary/DFF_X1/*]
set dffr_pins [get_lib_pins NangateOpenCellLibrary/DFFR_X1/*]
set aoi_pins [get_lib_pins NangateOpenCellLibrary/AOI21_X1/*]
set fa_pins [get_lib_pins NangateOpenCellLibrary/FA_X1/*]
set clkgate_pins [get_lib_pins NangateOpenCellLibrary/CLKGATETST_X1/*]
############################################################
# liberty_supply_exists
############################################################
set result [sta::liberty_supply_exists VDD]
set result [sta::liberty_supply_exists VSS]
set result [sta::liberty_supply_exists NONEXISTENT]
############################################################
# Read ASAP7 SEQ library (exercises different liberty features)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
# Query ASAP7 sequential cells
set asap7_dff [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DFFHQNx1_ASAP7_75t_R]
report_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DFFHQNx1_ASAP7_75t_R
set asap7_dff_pins [get_lib_pins asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DFFHQNx1_ASAP7_75t_R/*]
# ICG cell (clock gating)
set icg [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/ICGx1_ASAP7_75t_R]
report_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/ICGx1_ASAP7_75t_R
############################################################
# Read IHP library (different vendor, different features)
############################################################
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
# Tristate buffer
set ebufn [get_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_ebufn_2]
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_ebufn_2
# Scan DFF
set sdff [get_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_sdfbbp_1]
if { $sdff != "" } {
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_sdfbbp_1
}
############################################################
# Read Sky130 library
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
# Query sky130 cells
report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__inv_1
# Query all sky130 cells
set sky_cells [get_lib_cells sky130_fd_sc_hd__tt_025C_1v80/*]
############################################################
# Write liberty
############################################################
source ../../test/helpers.tcl
set outfile [make_result_file liberty_properties_write.lib]
sta::write_liberty NangateOpenCellLibrary $outfile

View File

@ -0,0 +1,160 @@
Cell DFFHQNx1_ASAP7_75t_R
Library asap7sc7p5t_SEQ_RVT_FF_nldm_220123
File ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
VDD power
VSS ground
QN output function=IQN
CLK input 0.40-0.52
D input 0.55-0.62
IQN internal
IQNN internal
Timing arcs
CLK -> QN
Reg Clk to Q
^ -> ^
^ -> v
CLK -> CLK
width
when D
^ -> v
v -> ^
CLK -> CLK
width
when !D
^ -> v
v -> ^
CLK -> D
hold
^ -> ^
^ -> v
CLK -> D
setup
^ -> ^
^ -> v
Cell DLLx1_ASAP7_75t_R
Library asap7sc7p5t_SEQ_RVT_FF_nldm_220123
File ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
VDD power
VSS ground
Q output function=IQ
CLK input 0.41-0.53
D input 0.50-0.63
IQ internal
IQN internal
Timing arcs
CLK -> Q
Latch En to Q
v -> ^
v -> v
D -> Q
Latch D to Q
^ -> ^
v -> v
CLK -> CLK
width
when D
v -> ^
CLK -> CLK
width
when !D
v -> ^
CLK -> D
hold
^ -> ^
^ -> v
CLK -> D
setup
^ -> ^
^ -> v
Cell ICGx1_ASAP7_75t_R
Library asap7sc7p5t_SEQ_RVT_FF_nldm_220123
File ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
VDD power
VSS ground
IQ internal
GCLK output
CLK input 1.63-2.39
ENA input 0.33-0.47
SE input 0.39-0.47
Timing arcs
CLK -> GCLK
combinational
when ENA+(!ENA*SE)
v -> v
CLK -> GCLK
combinational
when !ENA*!SE
v -> v
CLK -> GCLK
combinational
^ -> ^
v -> v
CLK -> CLK
width
when ENA+(!ENA*SE)
^ -> v
v -> ^
CLK -> CLK
width
when !ENA*!SE
v -> ^
CLK -> ENA
hold
when !SE
^ -> ^
^ -> v
CLK -> ENA
hold
^ -> ^
^ -> v
CLK -> ENA
setup
when !SE
^ -> ^
^ -> v
CLK -> ENA
setup
^ -> ^
^ -> v
CLK -> SE
hold
when !ENA
^ -> ^
^ -> v
CLK -> SE
hold
^ -> ^
^ -> v
CLK -> SE
setup
when !ENA
^ -> ^
^ -> v
CLK -> SE
setup
^ -> ^
^ -> v
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13178, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13211, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13244, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13277, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13310, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13343, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13376, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 14772, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 14805, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 14838, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13156, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13189, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13222, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13255, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13288, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13321, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13354, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 14748, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 14781, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 14814, timing group from output port.
Warning 1171: ../../test/nangate45/fake_macros.lib line 32, default_max_transition is 0.0.

View File

@ -0,0 +1,174 @@
# Test ASAP7 library reading for code coverage
# Tests multiple lib reading including compressed (.lib.gz) files
############################################################
# Read uncompressed ASAP7 SEQ library
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
set seq_lib [get_libs asap7sc7p5t_SEQ_RVT_FF_nldm_220123]
if { $seq_lib == "" } {
puts "FAIL: SEQ RVT FF library not found"
exit 1
}
# Query DFF cells
set dff [get_lib_cells asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DFFHQNx1_ASAP7_75t_R]
if { $dff == "" } {
puts "FAIL: DFFHQNx1 not found"
exit 1
}
report_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DFFHQNx1_ASAP7_75t_R
# Query latch cells
set latch [get_lib_cells asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DLLx1_ASAP7_75t_R]
if { $latch == "" } {
puts "FAIL: DLLx1 not found"
exit 1
}
report_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DLLx1_ASAP7_75t_R
# Query ICG (integrated clock gate) cells
set icg [get_lib_cells asap7sc7p5t_SEQ_RVT_FF_nldm_220123/ICGx1_ASAP7_75t_R]
if { $icg == "" } {
puts "FAIL: ICGx1 not found"
exit 1
}
report_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/ICGx1_ASAP7_75t_R
# Query all cells in SEQ library
set all_seq_cells [get_lib_cells asap7sc7p5t_SEQ_RVT_FF_nldm_220123/*]
if { [llength $all_seq_cells] == 0 } {
error "expected cells in asap7 SEQ FF library"
}
# Get pins of DFF
set dff_pins [get_lib_pins asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DFFHQNx1_ASAP7_75t_R/*]
if { [llength $dff_pins] < 3 } {
error "expected DFFHQNx1 pins in asap7 SEQ FF library"
}
############################################################
# Read compressed ASAP7 SIMPLE library (.lib.gz)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz
set simple_lib [get_libs asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120]
if { $simple_lib == "" } {
puts "FAIL: SIMPLE RVT FF library not found"
exit 1
}
# Query cells in SIMPLE library
set all_simple_cells [get_lib_cells asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120/*]
if { [llength $all_simple_cells] == 0 } {
error "expected cells in asap7 SIMPLE FF library"
}
############################################################
# Read compressed ASAP7 INVBUF library (.lib.gz)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_INVBUF_RVT_FF_nldm_220122.lib.gz
set invbuf_lib [get_libs asap7sc7p5t_INVBUF_RVT_FF_nldm_211120]
if { $invbuf_lib == "" } {
puts "FAIL: INVBUF RVT FF library not found"
exit 1
}
set all_invbuf_cells [get_lib_cells asap7sc7p5t_INVBUF_RVT_FF_nldm_211120/*]
if { [llength $all_invbuf_cells] == 0 } {
error "expected cells in asap7 INVBUF FF library"
}
############################################################
# Read compressed ASAP7 OA library (.lib.gz)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_OA_RVT_FF_nldm_211120.lib.gz
set oa_lib [get_libs asap7sc7p5t_OA_RVT_FF_nldm_211120]
if { $oa_lib == "" } {
puts "FAIL: OA RVT FF library not found"
exit 1
}
set all_oa_cells [get_lib_cells asap7sc7p5t_OA_RVT_FF_nldm_211120/*]
if { [llength $all_oa_cells] == 0 } {
error "expected cells in asap7 OA FF library"
}
############################################################
# Read compressed ASAP7 AO library (.lib.gz)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_AO_RVT_FF_nldm_211120.lib.gz
set ao_lib [get_libs asap7sc7p5t_AO_RVT_FF_nldm_211120]
if { $ao_lib == "" } {
puts "FAIL: AO RVT FF library not found"
exit 1
}
set all_ao_cells [get_lib_cells asap7sc7p5t_AO_RVT_FF_nldm_211120/*]
if { [llength $all_ao_cells] == 0 } {
error "expected cells in asap7 AO FF library"
}
############################################################
# Read SS corner for different timing
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_RVT_SS_nldm_220123.lib
read_liberty ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz
read_liberty ../../test/asap7/asap7sc7p5t_INVBUF_RVT_SS_nldm_220122.lib.gz
if { [llength [get_lib_cells asap7sc7p5t_SEQ_RVT_SS_nldm_220123/*]] == 0 } {
error "expected cells in asap7 SEQ SS library"
}
if { [llength [get_lib_cells asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120/*]] == 0 } {
error "expected cells in asap7 SIMPLE SS library"
}
if { [llength [get_lib_cells asap7sc7p5t_INVBUF_RVT_SS_nldm_211120/*]] == 0 } {
error "expected cells in asap7 INVBUF SS library"
}
############################################################
# Read CCSN library (compressed, exercises LibertyReader CCSN)
############################################################
read_liberty ../../test/asap7_ccsn.lib.gz
if { [llength [get_lib_cells asap7sc7p5t_AO_LVT_FF_ccsn_211120/*]] == 0 } {
error "expected cells in asap7 CCSN library"
}
############################################################
# Read latch library (exercises latch-specific parsing)
############################################################
read_liberty ../../test/liberty_latch3.lib
if { [llength [get_lib_cells asap7sc7p5t_lvt_ff/*]] == 0 } {
error "expected cells in latch3 library"
}
############################################################
# Read fakeram (macro library)
############################################################
read_liberty ../../test/nangate45/fake_macros.lib
read_liberty ../../test/nangate45/fakeram45_256x16.lib
if { [llength [get_lib_cells fake_macros/*]] == 0 } {
error "expected cells in fake_macros library"
}
if { [llength [get_lib_cells fakeram45_256x16/*]] == 0 } {
error "expected cells in fakeram45_256x16 library"
}

View File

@ -0,0 +1,369 @@
Cell sg13g2_inv_1
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
Y output function=!A
A input 0.00-0.00
Timing arcs
A -> Y
combinational
^ -> v
v -> ^
Cell sg13g2_buf_1
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
X output function=A
A input 0.00-0.00
Timing arcs
A -> X
combinational
^ -> ^
v -> v
Cell sg13g2_nand2_1
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
Y output function=!(A*B)
A input 0.00-0.00
B input 0.00-0.00
Timing arcs
A -> Y
combinational
^ -> v
v -> ^
B -> Y
combinational
^ -> v
v -> ^
Cell sg13g2_nor2_1
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
Y output function=!(A+B)
A input 0.00-0.00
B input 0.00-0.00
Timing arcs
A -> Y
combinational
^ -> v
v -> ^
B -> Y
combinational
^ -> v
v -> ^
Cell sg13g2_and2_1
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
X output function=A*B
A input 0.00-0.00
B input 0.00-0.00
Timing arcs
A -> X
combinational
^ -> ^
v -> v
B -> X
combinational
^ -> ^
v -> v
Cell sg13g2_mux2_1
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
X output function=(!S*A0)+(S*A1)
A0 input 0.00-0.00
A1 input 0.00-0.00
S input 0.01-0.01
Timing arcs
A0 -> X
combinational
^ -> ^
v -> v
A1 -> X
combinational
^ -> ^
v -> v
S -> X
combinational
when !A0*A1
^ -> ^
v -> v
S -> X
combinational
v -> v
^ -> v
^ -> ^
v -> ^
S -> X
combinational
when A0*!A1
^ -> v
v -> ^
Cell sg13g2_mux4_1
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
X output function=(((A0*(!S0*!S1))+(A1*(S0*!S1)))+(A2*(!S0*S1)))+(A3*(S0*S1))
A0 input 0.00-0.00
A1 input 0.00-0.00
A2 input 0.00-0.00
A3 input 0.00-0.00
S0 input 0.01-0.01
S1 input 0.00-0.01
Timing arcs
A0 -> X
combinational
^ -> ^
v -> v
A1 -> X
combinational
^ -> ^
v -> v
A2 -> X
combinational
^ -> ^
v -> v
A3 -> X
combinational
^ -> ^
v -> v
S0 -> X
combinational
when (!A2*A3)*S1
^ -> ^
v -> v
S0 -> X
combinational
when (!A0*A1)*!S1
^ -> ^
v -> v
S0 -> X
combinational
v -> v
^ -> v
^ -> ^
v -> ^
S0 -> X
combinational
when (A2*!A3)*S1
^ -> v
v -> ^
S0 -> X
combinational
when (A0*!A1)*!S1
^ -> v
v -> ^
S1 -> X
combinational
when (!A1*A3)*S0
^ -> ^
v -> v
S1 -> X
combinational
when (!A0*A2)*!S0
^ -> ^
v -> v
S1 -> X
combinational
v -> v
^ -> v
^ -> ^
v -> ^
S1 -> X
combinational
when (A1*!A3)*S0
^ -> v
v -> ^
S1 -> X
combinational
when (A0*!A2)*!S0
^ -> v
v -> ^
Cell sg13g2_dfrbp_1
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
Q output function=IQ
Q_N output function=IQN
CLK input 0.00-0.00
D input 0.00-0.00
RESET_B input 0.01-0.01
IQ internal
IQN internal
Timing arcs
CLK -> Q
Reg Clk to Q
^ -> ^
^ -> v
RESET_B -> Q
Reg Set/Clr
v -> v
CLK -> Q_N
Reg Clk to Q
^ -> ^
^ -> v
RESET_B -> Q_N
Reg Set/Clr
v -> ^
CLK -> CLK
width
^ -> v
v -> ^
CLK -> D
hold
^ -> ^
^ -> v
CLK -> D
setup
^ -> ^
^ -> v
CLK -> RESET_B
recovery
^ -> ^
CLK -> RESET_B
removal
^ -> ^
RESET_B -> RESET_B
width
v -> ^
Cell sg13g2_dlhq_1
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
Q output function=IQ
D input 0.00-0.00
GATE input 0.00-0.00
IQ internal
IQN internal
Timing arcs
D -> Q
Latch D to Q
^ -> ^
v -> v
GATE -> Q
Latch En to Q
^ -> ^
^ -> v
GATE -> D
hold
v -> ^
v -> v
GATE -> D
setup
v -> ^
v -> v
GATE -> GATE
width
^ -> v
Cell sg13g2_a21o_1
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
X output function=(A1*A2)+B1
A1 input 0.00-0.00
A2 input 0.00-0.00
B1 input 0.00-0.00
Timing arcs
A1 -> X
combinational
^ -> ^
v -> v
A2 -> X
combinational
^ -> ^
v -> v
B1 -> X
combinational
when A1*!A2
^ -> ^
v -> v
B1 -> X
combinational
when !A1*A2
^ -> ^
v -> v
B1 -> X
combinational
^ -> ^
v -> v
Cell sg13g2_xor2_1
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
X output function=A^B
A input 0.01-0.01
B input 0.01-0.01
Timing arcs
A -> X
combinational
^ -> ^
v -> v
A -> X
combinational
^ -> v
v -> ^
B -> X
combinational
^ -> ^
v -> v
B -> X
combinational
^ -> v
v -> ^
Cell sg13g2_xnor2_1
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
Y output function=!(A^B)
A input 0.01-0.01
B input 0.01-0.01
Timing arcs
A -> Y
combinational
^ -> ^
v -> v
A -> Y
combinational
^ -> v
v -> ^
B -> Y
combinational
^ -> ^
v -> v
B -> Y
combinational
^ -> v
v -> ^
Cell sg13g2_ebufn_2
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
Z tristate enable=!TE_B function=A 0.00-0.01
A input 0.00-0.00
TE_B input 0.01-0.01
Timing arcs
A -> Z
combinational
^ -> ^
v -> v
TE_B -> Z
tristate disable
^ -> 0Z
^ -> 1Z
TE_B -> Z
tristate enable
v -> Z1
v -> Z0
Cell sg13g2_dlygate4sd1_1
Library sg13g2_stdcell_typ_1p20V_25C
File ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
X output function=A
A input 0.00-0.00
Timing arcs
A -> X
combinational
^ -> ^
v -> v

View File

@ -0,0 +1,218 @@
# Test IHP SG13G2 library reading for code coverage
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
############################################################
# Library queries
############################################################
set lib [get_libs sg13g2_stdcell_typ_1p20V_25C]
if { $lib == "" } {
puts "FAIL: IHP library not found"
exit 1
}
############################################################
# Query various cell types
############################################################
# Inverters
set inv [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_inv_1]
if { $inv == "" } {
puts "FAIL: sg13g2_inv_1 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_inv_1
set inv_pins [get_lib_pins sg13g2_stdcell_typ_1p20V_25C/sg13g2_inv_1/*]
if { [llength $inv_pins] != 2 } {
error "expected 2 pins on sg13g2_inv_1, found [llength $inv_pins]"
}
foreach sz {2 4 8 16} {
set cell [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_inv_$sz]
if { $cell == "" } {
puts "FAIL: sg13g2_inv_$sz not found"
exit 1
}
}
# Buffers
set buf [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_buf_1]
if { $buf == "" } {
puts "FAIL: sg13g2_buf_1 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_buf_1
# NAND gates
set nand2 [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_nand2_1]
if { $nand2 == "" } {
puts "FAIL: sg13g2_nand2_1 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_nand2_1
foreach cell_name {sg13g2_nand2_2 sg13g2_nand3_1 sg13g2_nand4_1} {
set cell [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/$cell_name]
if { $cell == "" } {
puts "FAIL: $cell_name not found"
exit 1
}
}
# NOR gates
set nor2 [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_nor2_1]
if { $nor2 == "" } {
puts "FAIL: sg13g2_nor2_1 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_nor2_1
foreach cell_name {sg13g2_nor2_2 sg13g2_nor3_1 sg13g2_nor4_1} {
set cell [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/$cell_name]
if { $cell == "" } {
puts "FAIL: $cell_name not found"
exit 1
}
}
# AND gates
set and2 [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_and2_1]
if { $and2 == "" } {
puts "FAIL: sg13g2_and2_1 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_and2_1
foreach cell_name {sg13g2_and2_2 sg13g2_and3_1 sg13g2_and4_1} {
set cell [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/$cell_name]
if { $cell == "" } {
puts "FAIL: $cell_name not found"
exit 1
}
}
# MUX cells
set mux2 [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_mux2_1]
if { $mux2 == "" } {
puts "FAIL: sg13g2_mux2_1 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_mux2_1
set mux4 [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_mux4_1]
if { $mux4 == "" } {
puts "FAIL: sg13g2_mux4_1 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_mux4_1
# Flip-flop cells
set dfrbp [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_dfrbp_1]
if { $dfrbp == "" } {
puts "FAIL: sg13g2_dfrbp_1 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_dfrbp_1
set dfrbp_pins [get_lib_pins sg13g2_stdcell_typ_1p20V_25C/sg13g2_dfrbp_1/*]
if { [llength $dfrbp_pins] < 4 } {
error "expected dfrbp_1 to have at least 4 pins, found [llength $dfrbp_pins]"
}
# Latch cells
set dlhq [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_dlhq_1]
if { $dlhq == "" } {
puts "FAIL: sg13g2_dlhq_1 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_dlhq_1
# Complex cells (AOI)
set a21o [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_a21o_1]
if { $a21o == "" } {
puts "FAIL: sg13g2_a21o_1 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_a21o_1
# XOR/XNOR
set xor [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_xor2_1]
if { $xor == "" } {
puts "FAIL: sg13g2_xor2_1 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_xor2_1
set xnor [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_xnor2_1]
if { $xnor == "" } {
puts "FAIL: sg13g2_xnor2_1 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_xnor2_1
# Tri-state / enable buffers
set ebufn [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_ebufn_2]
if { $ebufn == "" } {
puts "FAIL: sg13g2_ebufn_2 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_ebufn_2
# Delay cells
set dlygate [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_dlygate4sd1_1]
if { $dlygate == "" } {
puts "FAIL: sg13g2_dlygate4sd1_1 not found"
exit 1
}
report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_dlygate4sd1_1
############################################################
# Pattern matching across library
############################################################
set all_cells [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/*]
if { [llength $all_cells] < 70 } {
error "expected broad sg13g2 1p20V cell set, found [llength $all_cells]"
}
set all_inv [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_inv_*]
if { [llength $all_inv] < 4 } {
error "expected sg13g2 inverter variants, found [llength $all_inv]"
}
set all_nand [get_lib_cells sg13g2_stdcell_typ_1p20V_25C/sg13g2_nand*]
if { [llength $all_nand] < 3 } {
error "expected sg13g2 nand variants, found [llength $all_nand]"
}
############################################################
# Also read the 1.50V variant
############################################################
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p50V_25C.lib
set lib_1p5 [get_libs sg13g2_stdcell_typ_1p50V_25C]
if { $lib_1p5 == "" } {
puts "FAIL: IHP 1p50V library not found"
exit 1
}
set cells_1p5 [get_lib_cells sg13g2_stdcell_typ_1p50V_25C/*]
if { [llength $cells_1p5] < 70 } {
error "expected broad sg13g2 1p50V cell set, found [llength $cells_1p5]"
}

View File

View File

@ -0,0 +1,48 @@
# Read sky130hd liberty and query cells/pins
read_liberty ../../test/sky130hd/sky130_fd_sc_hd__tt_025C_1v80.lib
set lib [get_libs sky130_fd_sc_hd__tt_025C_1v80]
if { $lib == "" } {
puts "FAIL: library not found"
exit 1
}
# Query a common cell
set cell [get_lib_cells sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__inv_1]
if { $cell == "" } {
puts "FAIL: inv_1 cell not found"
exit 1
}
# Query pins
set pins [get_lib_pins sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__inv_1/*]
if { [llength $pins] == 0 } {
puts "FAIL: no pins found"
exit 1
}
if { [llength $pins] != 2 } {
error "expected exactly 2 pins on sky130 inv_1, found [llength $pins]"
}
set inv_area [get_property $cell area]
if { $inv_area <= 0.0 } {
error "expected positive area for sky130 inv_1, got $inv_area"
}
set inv_a [get_lib_pins sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__inv_1/A]
set inv_y [get_lib_pins sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__inv_1/Y]
if { $inv_a == "" || $inv_y == "" } {
error "expected both A and Y pins on sky130 inv_1"
}
# Query a 2-input gate
set nand [get_lib_cells sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__nand2_1]
if { $nand == "" } {
puts "FAIL: nand2_1 not found"
exit 1
}
set nand_pins [get_lib_pins sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__nand2_1/*]
if { [llength $nand_pins] != 3 } {
error "expected 3 pins on sky130 nand2_1, found [llength $nand_pins]"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,238 @@
--- scan DFF cell queries ---
sky130_fd_sc_hd__sdfxtp_1 area=26.275200
has test_cell: yes
CLK dir=input scan_type=none func=
D dir=input scan_type=none func=
Q dir=output scan_type=none func=IQ
SCD dir=input scan_type=none func=
SCE dir=input scan_type=none func=
IQ dir=internal scan_type=none func=
IQ_N dir=internal scan_type=none func=
sky130_fd_sc_hd__sdfxtp_2 area=27.526400
has test_cell: yes
CLK dir=input scan_type=none func=
D dir=input scan_type=none func=
Q dir=output scan_type=none func=IQ
SCD dir=input scan_type=none func=
SCE dir=input scan_type=none func=
IQ dir=internal scan_type=none func=
IQ_N dir=internal scan_type=none func=
sky130_fd_sc_hd__sdfxtp_4 area=30.028799
has test_cell: yes
CLK dir=input scan_type=none func=
D dir=input scan_type=none func=
Q dir=output scan_type=none func=IQ
SCD dir=input scan_type=none func=
SCE dir=input scan_type=none func=
IQ dir=internal scan_type=none func=
IQ_N dir=internal scan_type=none func=
sky130_fd_sc_hd__sdfxbp_1 area=30.028799
has test_cell: yes
CLK dir=input scan_type=none
D dir=input scan_type=none
Q dir=output scan_type=none
Q_N dir=output scan_type=none
SCD dir=input scan_type=none
SCE dir=input scan_type=none
IQ dir=internal scan_type=none
IQ_N dir=internal scan_type=none
sky130_fd_sc_hd__sdfxbp_2 area=32.531200
has test_cell: yes
CLK dir=input scan_type=none
D dir=input scan_type=none
Q dir=output scan_type=none
Q_N dir=output scan_type=none
SCD dir=input scan_type=none
SCE dir=input scan_type=none
IQ dir=internal scan_type=none
IQ_N dir=internal scan_type=none
sky130_fd_sc_hd__sdfrtp_1 area=31.280001
has test_cell: yes
CLK dir=input scan_type=none
D dir=input scan_type=none
Q dir=output scan_type=none
RESET_B dir=input scan_type=none
SCD dir=input scan_type=none
SCE dir=input scan_type=none
IQ dir=internal scan_type=none
IQ_N dir=internal scan_type=none
sky130_fd_sc_hd__sdfrtp_2 area=32.531200
has test_cell: yes
CLK dir=input scan_type=none
D dir=input scan_type=none
Q dir=output scan_type=none
RESET_B dir=input scan_type=none
SCD dir=input scan_type=none
SCE dir=input scan_type=none
IQ dir=internal scan_type=none
IQ_N dir=internal scan_type=none
sky130_fd_sc_hd__sdfrtp_4 area=35.033600
has test_cell: yes
CLK dir=input scan_type=none
D dir=input scan_type=none
Q dir=output scan_type=none
RESET_B dir=input scan_type=none
SCD dir=input scan_type=none
SCE dir=input scan_type=none
IQ dir=internal scan_type=none
IQ_N dir=internal scan_type=none
sky130_fd_sc_hd__sdfstp_1 area=33.782398
CLK dir=input scan_type=none
D dir=input scan_type=none
Q dir=output scan_type=none
SCD dir=input scan_type=none
SCE dir=input scan_type=none
SET_B dir=input scan_type=none
IQ dir=internal scan_type=none
IQ_N dir=internal scan_type=none
sky130_fd_sc_hd__sdfstp_2 area=35.033600
CLK dir=input scan_type=none
D dir=input scan_type=none
Q dir=output scan_type=none
SCD dir=input scan_type=none
SCE dir=input scan_type=none
SET_B dir=input scan_type=none
IQ dir=internal scan_type=none
IQ_N dir=internal scan_type=none
sky130_fd_sc_hd__sdfstp_4 area=37.535999
CLK dir=input scan_type=none
D dir=input scan_type=none
Q dir=output scan_type=none
SCD dir=input scan_type=none
SCE dir=input scan_type=none
SET_B dir=input scan_type=none
IQ dir=internal scan_type=none
IQ_N dir=internal scan_type=none
--- scan DFF timing arcs ---
sky130_fd_sc_hd__sdfxtp_1 arc_sets = 8
sky130_fd_sc_hd__sdfxtp_1 CLK -> CLK role=width
sky130_fd_sc_hd__sdfxtp_1 CLK -> D role=setup
sky130_fd_sc_hd__sdfxtp_1 CLK -> D role=hold
sky130_fd_sc_hd__sdfxtp_1 CLK -> Q role=Reg Clk to Q
sky130_fd_sc_hd__sdfxtp_1 CLK -> SCD role=setup
sky130_fd_sc_hd__sdfxtp_1 CLK -> SCD role=hold
sky130_fd_sc_hd__sdfxtp_1 CLK -> SCE role=setup
sky130_fd_sc_hd__sdfxtp_1 CLK -> SCE role=hold
sky130_fd_sc_hd__sdfrtp_1 arc_sets = 12
sky130_fd_sc_hd__sdfrtp_1 CLK -> CLK role=width
sky130_fd_sc_hd__sdfrtp_1 CLK -> D role=setup
sky130_fd_sc_hd__sdfrtp_1 CLK -> D role=hold
sky130_fd_sc_hd__sdfrtp_1 CLK -> Q role=Reg Clk to Q
sky130_fd_sc_hd__sdfrtp_1 RESET_B -> Q role=Reg Set/Clr
sky130_fd_sc_hd__sdfrtp_1 CLK -> RESET_B role=recovery
sky130_fd_sc_hd__sdfrtp_1 CLK -> RESET_B role=removal
sky130_fd_sc_hd__sdfrtp_1 RESET_B -> RESET_B role=width
sky130_fd_sc_hd__sdfrtp_1 CLK -> SCD role=setup
sky130_fd_sc_hd__sdfrtp_1 CLK -> SCD role=hold
sky130_fd_sc_hd__sdfrtp_1 CLK -> SCE role=setup
sky130_fd_sc_hd__sdfrtp_1 CLK -> SCE role=hold
sky130_fd_sc_hd__sdfstp_1 arc_sets = 12
sky130_fd_sc_hd__sdfstp_1 CLK -> CLK role=width
sky130_fd_sc_hd__sdfstp_1 CLK -> D role=setup
sky130_fd_sc_hd__sdfstp_1 CLK -> D role=hold
sky130_fd_sc_hd__sdfstp_1 CLK -> Q role=Reg Clk to Q
sky130_fd_sc_hd__sdfstp_1 SET_B -> Q role=Reg Set/Clr
sky130_fd_sc_hd__sdfstp_1 CLK -> SCD role=setup
sky130_fd_sc_hd__sdfstp_1 CLK -> SCD role=hold
sky130_fd_sc_hd__sdfstp_1 CLK -> SCE role=setup
sky130_fd_sc_hd__sdfstp_1 CLK -> SCE role=hold
sky130_fd_sc_hd__sdfstp_1 CLK -> SET_B role=recovery
sky130_fd_sc_hd__sdfstp_1 CLK -> SET_B role=removal
sky130_fd_sc_hd__sdfstp_1 SET_B -> SET_B role=width
SDFF_X1 test_cell=no
SDFF_X2 test_cell=no
SDFFR_X1 test_cell=no
SDFFS_X1 test_cell=no
SDFFRS_X1 test_cell=no
CLKGATETST_X1 area=3.990000 test_cell=no
CLKGATETST_X1 CK -> CK role=width
CLKGATETST_X1 CK -> E role=hold
CLKGATETST_X1 CK -> E role=setup
CLKGATETST_X1 CK -> SE role=hold
CLKGATETST_X1 CK -> SE role=setup
CLKGATETST_X1 CK -> GCK role=combinational
CLKGATETST_X1 CK -> GCK role=combinational
CLKGATETST_X1 CK -> GCK role=combinational
CLKGATETST_X1 CK -> GCK role=combinational
ASAP7 ICGx1 arc_sets = 13
ICGx1_ASAP7_75t_R CLK -> GCLK role=combinational
ICGx1_ASAP7_75t_R CLK -> GCLK role=combinational
ICGx1_ASAP7_75t_R CLK -> GCLK role=combinational
ICGx1_ASAP7_75t_R CLK -> CLK role=width
ICGx1_ASAP7_75t_R CLK -> CLK role=width
ICGx1_ASAP7_75t_R CLK -> ENA role=hold
ICGx1_ASAP7_75t_R CLK -> ENA role=hold
ICGx1_ASAP7_75t_R CLK -> ENA role=setup
ICGx1_ASAP7_75t_R CLK -> ENA role=setup
ICGx1_ASAP7_75t_R CLK -> SE role=hold
ICGx1_ASAP7_75t_R CLK -> SE role=hold
ICGx1_ASAP7_75t_R CLK -> SE role=setup
ICGx1_ASAP7_75t_R CLK -> SE role=setup
DFFHQNx1_ASAP7_75t_R arcs=5
DFFHQNx1_ASAP7_75t_R CLK -> QN role=Reg Clk to Q
DFFHQNx1_ASAP7_75t_R CLK -> CLK role=width
DFFHQNx1_ASAP7_75t_R CLK -> CLK role=width
DFFHQNx1_ASAP7_75t_R CLK -> D role=hold
DFFHQNx1_ASAP7_75t_R CLK -> D role=setup
Warning 354: liberty_scan_signal_types.tcl line 1, cell 'DFFHQx1_ASAP7_75t_R' not found.
DFFHQNx2_ASAP7_75t_R arcs=5
DFFHQNx2_ASAP7_75t_R CLK -> QN role=Reg Clk to Q
DFFHQNx2_ASAP7_75t_R CLK -> CLK role=width
DFFHQNx2_ASAP7_75t_R CLK -> CLK role=width
DFFHQNx2_ASAP7_75t_R CLK -> D role=hold
DFFHQNx2_ASAP7_75t_R CLK -> D role=setup
Warning 354: liberty_scan_signal_types.tcl line 1, cell 'DFFHQx2_ASAP7_75t_R' not found.
Warning 441: liberty_scan_signal_types.tcl line 1, set_input_delay relative to a clock defined on the same port/pin not allowed.
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg1 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: reg3 (rising edge-triggered flip-flop clocked by clk2)
Path Group: clk2
Path Type: max
Delay Time Description
---------------------------------------------------------
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 ^ reg1/CK (DFF_X1)
0.08 10.08 v reg1/Q (DFF_X1)
0.00 10.08 v reg3/D (DFF_X1)
10.08 data arrival time
20.00 20.00 clock clk2 (rise edge)
0.00 20.00 clock network delay (ideal)
0.00 20.00 clock reconvergence pessimism
20.00 ^ reg3/CK (DFF_X1)
-0.04 19.96 library setup time
19.96 data required time
---------------------------------------------------------
19.96 data required time
-10.08 data arrival time
---------------------------------------------------------
9.88 slack (MET)

View File

@ -0,0 +1,226 @@
# Test scan signal_type parsing, test_cell construction, and
# scan-related port attributes across multiple PDKs.
source ../../test/helpers.tcl
############################################################
# Read Sky130 library (has scan flip-flop cells with test_cell groups)
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
############################################################
# Query scan DFF cells - these have test_cell groups with signal_type
############################################################
puts "--- scan DFF cell queries ---"
# sdfxtp cells are scan DFFs
foreach cell_name {sky130_fd_sc_hd__sdfxtp_1 sky130_fd_sc_hd__sdfxtp_2
sky130_fd_sc_hd__sdfxtp_4} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set area [get_property $cell area]
puts "$cell_name area=$area"
# Check test_cell
set tc [$cell test_cell]
if {$tc != "NULL" && $tc ne ""} {
puts " has test_cell: yes"
} else {
puts " has test_cell: no"
}
# Iterate ports and check scan_signal_type
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set dir [sta::liberty_port_direction $port]
set is_pwr [$port is_pwr_gnd]
if {!$is_pwr} {
set sst [$port scan_signal_type]
set func [$port function]
puts " [get_name $port] dir=$dir scan_type=$sst func=$func"
}
}
$port_iter finish
}
}
# sdfxbp cells are scan DFFs with complementary outputs
foreach cell_name {sky130_fd_sc_hd__sdfxbp_1 sky130_fd_sc_hd__sdfxbp_2} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set area [get_property $cell area]
puts "$cell_name area=$area"
set tc [$cell test_cell]
if {$tc != "NULL" && $tc ne ""} {
puts " has test_cell: yes"
} else {
puts " has test_cell: no"
}
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set is_pwr [$port is_pwr_gnd]
if {!$is_pwr} {
set dir [sta::liberty_port_direction $port]
set sst [$port scan_signal_type]
puts " [get_name $port] dir=$dir scan_type=$sst"
}
}
$port_iter finish
}
}
# sdfrtp cells are scan DFFs with async reset
foreach cell_name {sky130_fd_sc_hd__sdfrtp_1 sky130_fd_sc_hd__sdfrtp_2
sky130_fd_sc_hd__sdfrtp_4} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set area [get_property $cell area]
puts "$cell_name area=$area"
set tc [$cell test_cell]
if {$tc != "NULL" && $tc ne ""} {
puts " has test_cell: yes"
} else {
puts " has test_cell: no"
}
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set is_pwr [$port is_pwr_gnd]
if {!$is_pwr} {
set dir [sta::liberty_port_direction $port]
set sst [$port scan_signal_type]
puts " [get_name $port] dir=$dir scan_type=$sst"
}
}
$port_iter finish
}
}
# sdfstp cells are scan DFFs with async set
foreach cell_name {sky130_fd_sc_hd__sdfstp_1 sky130_fd_sc_hd__sdfstp_2
sky130_fd_sc_hd__sdfstp_4} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set area [get_property $cell area]
puts "$cell_name area=$area"
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set is_pwr [$port is_pwr_gnd]
if {!$is_pwr} {
set dir [sta::liberty_port_direction $port]
set sst [$port scan_signal_type]
puts " [get_name $port] dir=$dir scan_type=$sst"
}
}
$port_iter finish
}
}
############################################################
# Timing arcs on scan DFFs (exercises recovery/removal arcs)
############################################################
puts "--- scan DFF timing arcs ---"
foreach cell_name {sky130_fd_sc_hd__sdfxtp_1 sky130_fd_sc_hd__sdfrtp_1
sky130_fd_sc_hd__sdfstp_1} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
set arc_count [llength $arcs]
puts "$cell_name arc_sets = $arc_count"
foreach arc $arcs {
set role [$arc role]
puts " [$arc full_name] role=$role"
}
}
}
############################################################
# Read Nangate library and query scan cells there too
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
# Nangate SDFF cells
foreach cell_name {SDFF_X1 SDFF_X2 SDFFR_X1 SDFFS_X1 SDFFRS_X1} {
set cell [get_lib_cell NangateOpenCellLibrary/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set tc [$cell test_cell]
puts "$cell_name test_cell=[expr {$tc != "NULL" ? "yes" : "no"}]"
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set dir [sta::liberty_port_direction $port]
set sst [$port scan_signal_type]
if {$sst != "none"} {
puts " [get_name $port] dir=$dir scan_type=$sst"
}
}
$port_iter finish
}
}
# Nangate CLKGATETST cell (clock gate test)
set cell [get_lib_cell NangateOpenCellLibrary/CLKGATETST_X1]
if {$cell != "NULL" && $cell ne ""} {
set tc [$cell test_cell]
set area [get_property $cell area]
puts "CLKGATETST_X1 area=$area test_cell=[expr {$tc != "NULL" ? "yes" : "no"}]"
set arcs [$cell timing_arc_sets]
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
}
############################################################
# Read ASAP7 SEQ for ICG (integrated clock gate) scan coverage
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
# ASAP7 ICG cell has statetable (exercises clock gate paths)
set cell [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/ICGx1_ASAP7_75t_R]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
puts "ASAP7 ICGx1 arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
}
# ASAP7 DFFs with scan
foreach cell_name {DFFHQNx1_ASAP7_75t_R DFFHQx1_ASAP7_75t_R
DFFHQNx2_ASAP7_75t_R DFFHQx2_ASAP7_75t_R} {
set cell [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
puts "$cell_name arcs=[llength $arcs]"
foreach arc $arcs {
set role [$arc role]
if {$role != "combinational"} {
puts " [$arc full_name] role=$role"
}
}
}
}
############################################################
# Link design with Nangate and report checks to exercise
# scan cell timing through a design
############################################################
read_verilog ../../sdc/test/sdc_test2.v
link_design sdc_test2
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 20 [get_ports clk2]
set_input_delay -clock clk1 2.0 [all_inputs]
set_output_delay -clock clk1 3.0 [all_outputs]
set_input_transition 0.1 [all_inputs]
report_checks

View File

@ -0,0 +1,216 @@
sdfxtp_1 area = 26.275200
sdfxtp_1/SCD dir=input
sdfxtp_1/SCE dir=input
sdfxtp_1/CLK dir=input
sdfxtp_1/D dir=input
sdfxtp_1/Q dir=output
sdfxbp_1 area = 30.028799
sky130_fd_sc_hd__ebufn_1 area = 10.009600
sky130_fd_sc_hd__ebufn_1 Z tristate_enable = !TE_B
sky130_fd_sc_hd__ebufn_2 area = 11.260800
sky130_fd_sc_hd__ebufn_2 Z tristate_enable = !TE_B
sky130_fd_sc_hd__ebufn_4 area = 16.265600
sky130_fd_sc_hd__ebufn_4 Z tristate_enable = !TE_B
sky130_fd_sc_hd__ebufn_8 area = 26.275200
sky130_fd_sc_hd__ebufn_8 Z tristate_enable = !TE_B
sky130_fd_sc_hd__dlxtp_1 area = 15.014400
sky130_fd_sc_hd__dlxtn_1 area = 15.014400
sky130_fd_sc_hd__dlxbn_1 area = 18.768000
sky130_fd_sc_hd__dlxbp_1 area = 18.768000
sky130_fd_sc_hd__dfrtp_1 area=25.024000 is_buf=0 is_inv=0
sky130_fd_sc_hd__dfstp_1 area=26.275200 is_buf=0 is_inv=0
sky130_fd_sc_hd__dfxtp_1 area=20.019199 is_buf=0 is_inv=0
sky130_fd_sc_hd__dfbbp_1 area=32.531200 is_buf=0 is_inv=0
sky130_fd_sc_hd__and2_1/X dir=output func=A*B
sky130_fd_sc_hd__or2_1/X dir=output func=A+B
sky130_fd_sc_hd__xor2_1/X dir=output func=(A*!B)+(!A*B)
sky130_fd_sc_hd__xnor2_1/Y dir=output func=(!A*!B)+(A*B)
sky130_fd_sc_hd__mux2_1/X dir=output func=(A0*!S)+(A1*S)
INV_X1/A cap=0.001700
INV_X2/A cap=0.003251
INV_X4/A cap=0.006258
BUF_X1/A cap=0.000975
BUF_X2/A cap=0.001779
BUF_X4/A cap=0.003402
NAND2_X1/A1 cap=0.001599
NAND2_X1/A2 cap=0.001664
NOR2_X1/A1 cap=0.001714
NOR2_X1/A2 cap=0.001651
AOI21_X1/A cap=0.001626
AOI21_X1/B1 cap=0.001647
AOI21_X1/B2 cap=0.001677
OAI21_X1/A cap=0.001671
OAI21_X1/B1 cap=0.001662
OAI21_X1/B2 cap=0.001572
DFF_X1 arc_sets = 5
DFF_X1 CK -> D role=hold
DFF_X1 CK -> D role=setup
DFF_X1 CK -> CK role=width
DFF_X1 CK -> Q role=Reg Clk to Q
DFF_X1 CK -> QN role=Reg Clk to Q
DFFR_X1 arc_sets = 16
DFFR_X1 CK -> D role=hold
DFFR_X1 CK -> D role=setup
DFFR_X1 CK -> RN role=recovery
DFFR_X1 CK -> RN role=removal
DFFR_X1 RN -> RN role=width
DFFR_X1 CK -> CK role=width
DFFR_X1 CK -> Q role=Reg Clk to Q
DFFR_X1 RN -> Q role=Reg Set/Clr
DFFR_X1 RN -> Q role=Reg Set/Clr
DFFR_X1 RN -> Q role=Reg Set/Clr
DFFR_X1 RN -> Q role=Reg Set/Clr
DFFR_X1 CK -> QN role=Reg Clk to Q
DFFR_X1 RN -> QN role=Reg Set/Clr
DFFR_X1 RN -> QN role=Reg Set/Clr
DFFR_X1 RN -> QN role=Reg Set/Clr
DFFR_X1 RN -> QN role=Reg Set/Clr
DFFS_X1 arc_sets = 16
DFFS_X1 CK -> D role=hold
DFFS_X1 CK -> D role=setup
DFFS_X1 CK -> SN role=recovery
DFFS_X1 CK -> SN role=removal
DFFS_X1 SN -> SN role=width
DFFS_X1 CK -> CK role=width
DFFS_X1 CK -> Q role=Reg Clk to Q
DFFS_X1 SN -> Q role=Reg Set/Clr
DFFS_X1 SN -> Q role=Reg Set/Clr
DFFS_X1 SN -> Q role=Reg Set/Clr
DFFS_X1 SN -> Q role=Reg Set/Clr
DFFS_X1 CK -> QN role=Reg Clk to Q
DFFS_X1 SN -> QN role=Reg Set/Clr
DFFS_X1 SN -> QN role=Reg Set/Clr
DFFS_X1 SN -> QN role=Reg Set/Clr
DFFS_X1 SN -> QN role=Reg Set/Clr
DFFRS_X1 arc_sets = 35
DFFRS_X1 CK -> D role=hold
DFFRS_X1 CK -> D role=setup
DFFRS_X1 CK -> RN role=recovery
DFFRS_X1 CK -> RN role=removal
DFFRS_X1 RN -> RN role=width
DFFRS_X1 CK -> SN role=recovery
DFFRS_X1 CK -> SN role=removal
DFFRS_X1 SN -> SN role=width
DFFRS_X1 CK -> CK role=width
DFFRS_X1 CK -> Q role=Reg Clk to Q
DFFRS_X1 RN -> Q role=Reg Set/Clr
DFFRS_X1 RN -> Q role=Reg Set/Clr
DFFRS_X1 RN -> Q role=Reg Set/Clr
DFFRS_X1 RN -> Q role=Reg Set/Clr
DFFRS_X1 RN -> Q role=Reg Set/Clr
DFFRS_X1 RN -> Q role=Reg Set/Clr
DFFRS_X1 RN -> Q role=Reg Set/Clr
DFFRS_X1 RN -> Q role=Reg Set/Clr
DFFRS_X1 SN -> Q role=Reg Set/Clr
DFFRS_X1 SN -> Q role=Reg Set/Clr
DFFRS_X1 SN -> Q role=Reg Set/Clr
DFFRS_X1 SN -> Q role=Reg Set/Clr
DFFRS_X1 CK -> QN role=Reg Clk to Q
DFFRS_X1 RN -> QN role=Reg Set/Clr
DFFRS_X1 RN -> QN role=Reg Set/Clr
DFFRS_X1 RN -> QN role=Reg Set/Clr
DFFRS_X1 RN -> QN role=Reg Set/Clr
DFFRS_X1 SN -> QN role=Reg Set/Clr
DFFRS_X1 SN -> QN role=Reg Set/Clr
DFFRS_X1 SN -> QN role=Reg Set/Clr
DFFRS_X1 SN -> QN role=Reg Set/Clr
DFFRS_X1 SN -> QN role=Reg Set/Clr
DFFRS_X1 SN -> QN role=Reg Set/Clr
DFFRS_X1 SN -> QN role=Reg Set/Clr
DFFRS_X1 SN -> QN role=Reg Set/Clr
fakeram/clk dir=input bus=0 bundle=0 has_members=0
fakeram/rd_out dir=output bus=1 bundle=0 has_members=1
member_count = 7
fakeram/we_in dir=input bus=0 bundle=0 has_members=0
fakeram/ce_in dir=input bus=0 bundle=0 has_members=0
fakeram/addr_in dir=input bus=1 bundle=0 has_members=1
member_count = 6
fakeram/wd_in dir=input bus=1 bundle=0 has_members=1
member_count = 7
fakeram/w_mask_in dir=input bus=1 bundle=0 has_members=1
member_count = 7
DLLx1 arc_sets = 6
DLLx1_ASAP7_75t_R CLK -> Q role=Latch En to Q
DLLx1_ASAP7_75t_R D -> Q role=Latch D to Q
DLLx1_ASAP7_75t_R CLK -> CLK role=width
DLLx1_ASAP7_75t_R CLK -> CLK role=width
DLLx1_ASAP7_75t_R CLK -> D role=hold
DLLx1_ASAP7_75t_R CLK -> D role=setup
ICGx1 arc_sets = 13
ICGx1_ASAP7_75t_R CLK -> GCLK role=combinational
ICGx1_ASAP7_75t_R CLK -> GCLK role=combinational
ICGx1_ASAP7_75t_R CLK -> GCLK role=combinational
ICGx1_ASAP7_75t_R CLK -> CLK role=width
ICGx1_ASAP7_75t_R CLK -> CLK role=width
ICGx1_ASAP7_75t_R CLK -> ENA role=hold
ICGx1_ASAP7_75t_R CLK -> ENA role=hold
ICGx1_ASAP7_75t_R CLK -> ENA role=setup
ICGx1_ASAP7_75t_R CLK -> ENA role=setup
ICGx1_ASAP7_75t_R CLK -> SE role=hold
ICGx1_ASAP7_75t_R CLK -> SE role=hold
ICGx1_ASAP7_75t_R CLK -> SE role=setup
ICGx1_ASAP7_75t_R CLK -> SE role=setup
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg1 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: reg3 (rising edge-triggered flip-flop clocked by clk2)
Path Group: clk2
Path Type: max
Delay Time Description
---------------------------------------------------------
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 ^ reg1/CK (DFF_X1)
0.08 10.08 v reg1/Q (DFF_X1)
0.00 10.08 v reg3/D (DFF_X1)
10.08 data arrival time
20.00 20.00 clock clk2 (rise edge)
0.00 20.00 clock network delay (ideal)
0.00 20.00 clock reconvergence pessimism
20.00 ^ reg3/CK (DFF_X1)
-0.04 19.96 library setup time
19.96 data required time
---------------------------------------------------------
19.96 data required time
-10.08 data arrival time
---------------------------------------------------------
9.88 slack (MET)
Group Internal Switching Leakage Total
Power Power Power Power (Watts)
----------------------------------------------------------------
Sequential 1.52e-06 6.90e-09 2.36e-07 1.76e-06 84.7%
Combinational 1.22e-07 7.11e-08 1.25e-07 3.18e-07 15.3%
Clock 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
Macro 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
Pad 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
----------------------------------------------------------------
Total 1.64e-06 7.80e-08 3.61e-07 2.08e-06 100.0%
78.9% 3.8% 17.4%

View File

@ -0,0 +1,223 @@
# Test liberty reading and querying of sequential cells (latch, ff, statetable),
# test_cell/scan definitions, bus/bundle ports, tristate outputs,
# internal power, and scaled cells through multi-corner.
source ../../test/helpers.tcl
############################################################
# Read Sky130 library (has test_cell, scan, tristate, latch cells)
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
############################################################
# Query scan flip-flop cells (exercises test_cell path in reader)
############################################################
# sdfxtp has a test_cell group with scan ports
set sdf_cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_1]
set sdf_area [get_property $sdf_cell area]
puts "sdfxtp_1 area = $sdf_area"
# Check test_cell exists
set tc [$sdf_cell test_cell]
# Query scan ports
foreach port_name {SCD SCE CLK D Q} {
set port [$sdf_cell find_liberty_port $port_name]
if {$port != "NULL" && $port ne ""} {
set dir [sta::liberty_port_direction $port]
puts "sdfxtp_1/$port_name dir=$dir"
}
}
# Another scan cell
set sdf_cell2 [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxbp_1]
set area2 [get_property $sdf_cell2 area]
puts "sdfxbp_1 area = $area2"
############################################################
# Query tristate buffer cells (exercises three_state parsing)
############################################################
foreach cell_name {sky130_fd_sc_hd__ebufn_1 sky130_fd_sc_hd__ebufn_2
sky130_fd_sc_hd__ebufn_4 sky130_fd_sc_hd__ebufn_8} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell ne ""} {
set area [get_property $cell area]
puts "$cell_name area = $area"
# Query tristate enable function
set z_port [$cell find_liberty_port "Z"]
if {$z_port != "NULL" && $z_port ne ""} {
set tri_en [$z_port tristate_enable]
puts "$cell_name Z tristate_enable = $tri_en"
}
}
}
############################################################
# Query latch cells (exercises latch sequential parsing)
############################################################
foreach cell_name {sky130_fd_sc_hd__dlxtp_1 sky130_fd_sc_hd__dlxtn_1
sky130_fd_sc_hd__dlxbn_1 sky130_fd_sc_hd__dlxbp_1} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set area [get_property $cell area]
puts "$cell_name area = $area"
}
}
############################################################
# Query DFF cells with async set/clear (exercises recovery/removal arcs)
############################################################
foreach cell_name {sky130_fd_sc_hd__dfrtp_1 sky130_fd_sc_hd__dfstp_1
sky130_fd_sc_hd__dfxtp_1 sky130_fd_sc_hd__dfbbp_1} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set area [get_property $cell area]
set is_buf [$cell is_buffer]
set is_inv [$cell is_inverter]
puts "$cell_name area=$area is_buf=$is_buf is_inv=$is_inv"
}
}
############################################################
# Port function and direction queries (exercises setFunction)
############################################################
foreach cell_name {sky130_fd_sc_hd__and2_1 sky130_fd_sc_hd__or2_1
sky130_fd_sc_hd__xor2_1 sky130_fd_sc_hd__xnor2_1
sky130_fd_sc_hd__mux2_1} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set dir [sta::liberty_port_direction $port]
set func [$port function]
if {$func != ""} {
puts "$cell_name/[get_name $port] dir=$dir func=$func"
}
}
$port_iter finish
}
}
############################################################
# Read Nangate library for more queries
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
############################################################
# Port capacitance and drive resistance
############################################################
foreach cell_name {INV_X1 INV_X2 INV_X4 BUF_X1 BUF_X2 BUF_X4
NAND2_X1 NOR2_X1 AOI21_X1 OAI21_X1} {
set cell [get_lib_cell NangateOpenCellLibrary/$cell_name]
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set dir [sta::liberty_port_direction $port]
if {$dir == "input"} {
set cap [get_property $port capacitance]
puts "$cell_name/[get_name $port] cap=$cap"
}
}
$port_iter finish
}
############################################################
# Timing arc set queries (exercises makeTimingArcMap paths)
############################################################
foreach cell_name {DFF_X1 DFFR_X1 DFFS_X1 DFFRS_X1} {
set cell [get_lib_cell NangateOpenCellLibrary/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
set arc_count [llength $arcs]
puts "$cell_name arc_sets = $arc_count"
foreach arc $arcs {
set from_port [$arc from]
set to_port [$arc to]
set role [$arc role]
puts " [$arc full_name] role=$role"
}
}
}
############################################################
# Read bus-port library (exercises bus port parsing)
############################################################
read_liberty ../../test/nangate45/fakeram45_64x7.lib
# Query bus ports
set cell [get_lib_cell fakeram45_64x7/fakeram45_64x7]
if {$cell != "NULL" && $cell ne ""} {
set port_iter [$cell liberty_port_iterator]
while {[$port_iter has_next]} {
set port [$port_iter next]
set dir [sta::liberty_port_direction $port]
set is_bus [$port is_bus]
set is_bundle [$port is_bundle]
set has_mem [$port has_members]
puts "fakeram/[get_name $port] dir=$dir bus=$is_bus bundle=$is_bundle has_members=$has_mem"
if {$is_bus || $has_mem} {
# Iterate members
set mem_iter [$port member_iterator]
set mem_count 0
while {[$mem_iter has_next]} {
set mem [$mem_iter next]
incr mem_count
}
$mem_iter finish
puts " member_count = $mem_count"
}
}
$port_iter finish
}
############################################################
# Read ASAP7 SEQ for statetable/latch coverage
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
# Query ASAP7 latch cells
set cell [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DLLx1_ASAP7_75t_R]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
set arc_count [llength $arcs]
puts "DLLx1 arc_sets = $arc_count"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
}
# Query ICG (Integrated Clock Gate) cell with statetable
set cell [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/ICGx1_ASAP7_75t_R]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
set arc_count [llength $arcs]
puts "ICGx1 arc_sets = $arc_count"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
}
############################################################
# Link a design and run timing to exercise more Liberty.cc paths
############################################################
read_verilog ../../sdc/test/sdc_test2.v
link_design sdc_test2
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 20 [get_ports clk2]
set_input_delay -clock clk1 2.0 [get_ports in1]
set_input_delay -clock clk1 2.0 [get_ports in2]
set_input_delay -clock clk2 2.0 [get_ports in3]
set_output_delay -clock clk1 3.0 [get_ports out1]
set_output_delay -clock clk2 3.0 [get_ports out2]
set_input_transition 0.1 [all_inputs]
report_checks
# Report power to exercise internal power models
report_power
############################################################
# Write liberty roundtrip
############################################################
set outfile [make_result_file liberty_seq_scan_bus_write.lib]
sta::write_liberty NangateOpenCellLibrary $outfile

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,139 @@
# Test multi-corner library reading and timing analysis with Sky130HD.
source ../../test/helpers.tcl
suppress_msg 1140
############################################################
# Define corners and read Sky130HD libraries with explicit -max/-min views
############################################################
define_corners fast slow
read_liberty -corner fast -max ../../test/sky130hd/sky130_fd_sc_hd__ff_n40C_1v95.lib
read_liberty -corner fast -min ../../test/sky130hd/sky130_fd_sc_hd__ff_n40C_1v95.lib
read_liberty -corner slow -min ../../test/sky130hd/sky130_fd_sc_hd__ss_n40C_1v40.lib
read_liberty -corner slow -max ../../test/sky130hd/sky130_fd_sc_hd__ss_n40C_1v40.lib
############################################################
# Read design and link
############################################################
read_verilog sky130_corners_test.v
link_design sky130_corners_test
############################################################
# Create constraints
############################################################
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 2.0 [get_ports in1]
set_input_delay -clock clk 2.0 [get_ports in2]
set_output_delay -clock clk 3.0 [get_ports out1]
set_output_delay -clock clk 3.0 [get_ports out2]
############################################################
# Report timing per corner (shows different delays per corner)
############################################################
puts "--- Fast corner, max ---"
report_checks -corner fast -path_delay max
puts "--- Slow corner, max ---"
report_checks -corner slow -path_delay max
puts "--- Fast corner, min ---"
report_checks -corner fast -path_delay min
puts "--- Slow corner, min ---"
report_checks -corner slow -path_delay min
# Additional non-printing checks ensure report_checks emits corner-specific paths
# for both max and min views loaded with -max/-min.
with_output_to_variable fast_max_rep {
report_checks -corner fast -path_delay max
}
if {![regexp {Corner:\s+fast} $fast_max_rep] || ![regexp {Path Type:\s+max} $fast_max_rep]} {
error "fast corner max report did not include expected corner/path markers"
}
with_output_to_variable slow_min_rep {
report_checks -corner slow -path_delay min
}
if {![regexp {Corner:\s+slow} $slow_min_rep] || ![regexp {Path Type:\s+min} $slow_min_rep]} {
error "slow corner min report did not include expected corner/path markers"
}
############################################################
# Comprehensive cell reports - fast corner library
############################################################
set sky130_cells_to_report {
sky130_fd_sc_hd__inv_1 sky130_fd_sc_hd__inv_2 sky130_fd_sc_hd__inv_4
sky130_fd_sc_hd__buf_1 sky130_fd_sc_hd__buf_2 sky130_fd_sc_hd__buf_4
sky130_fd_sc_hd__nand2_1 sky130_fd_sc_hd__nand3_1 sky130_fd_sc_hd__nand4_1
sky130_fd_sc_hd__nor2_1 sky130_fd_sc_hd__nor3_1 sky130_fd_sc_hd__nor4_1
sky130_fd_sc_hd__and2_1 sky130_fd_sc_hd__and3_1 sky130_fd_sc_hd__and4_1
sky130_fd_sc_hd__or2_1 sky130_fd_sc_hd__or3_1 sky130_fd_sc_hd__or4_1
sky130_fd_sc_hd__xor2_1 sky130_fd_sc_hd__xnor2_1
sky130_fd_sc_hd__a21o_1 sky130_fd_sc_hd__a21oi_1
sky130_fd_sc_hd__a22o_1 sky130_fd_sc_hd__a22oi_1
sky130_fd_sc_hd__o21a_1 sky130_fd_sc_hd__o21ai_0
sky130_fd_sc_hd__o22a_1 sky130_fd_sc_hd__o22ai_1
sky130_fd_sc_hd__a31o_1 sky130_fd_sc_hd__a32o_1
sky130_fd_sc_hd__mux2_1 sky130_fd_sc_hd__mux4_1
sky130_fd_sc_hd__fa_1 sky130_fd_sc_hd__ha_1 sky130_fd_sc_hd__maj3_1
sky130_fd_sc_hd__dfxtp_1 sky130_fd_sc_hd__dfrtp_1
sky130_fd_sc_hd__dfstp_1 sky130_fd_sc_hd__dfbbp_1
sky130_fd_sc_hd__dlxtp_1 sky130_fd_sc_hd__dlxtn_1
sky130_fd_sc_hd__sdfxtp_1 sky130_fd_sc_hd__sdfxbp_1
sky130_fd_sc_hd__ebufn_1 sky130_fd_sc_hd__ebufn_2
sky130_fd_sc_hd__clkbuf_1 sky130_fd_sc_hd__clkbuf_2
sky130_fd_sc_hd__clkinv_1 sky130_fd_sc_hd__clkinv_2
sky130_fd_sc_hd__conb_1
sky130_fd_sc_hd__diode_2
}
foreach cell_name $sky130_cells_to_report {
report_lib_cell sky130_fd_sc_hd__ff_n40C_1v95/$cell_name
}
############################################################
# Cell property queries - slow corner library
############################################################
foreach cell_name {sky130_fd_sc_hd__inv_1 sky130_fd_sc_hd__buf_1
sky130_fd_sc_hd__dfxtp_1 sky130_fd_sc_hd__dlxtp_1
sky130_fd_sc_hd__sdfxtp_1 sky130_fd_sc_hd__ebufn_1
sky130_fd_sc_hd__mux2_1 sky130_fd_sc_hd__fa_1} {
set cell [lindex [get_lib_cell sky130_fd_sc_hd__ss_n40C_1v40/$cell_name] 0]
set area [get_property $cell area]
set du [get_property $cell dont_use]
puts "$cell_name: area=$area dont_use=$du"
}
############################################################
# Pin capacitance queries - fast corner library
############################################################
foreach {cell_name pin_name} {
sky130_fd_sc_hd__inv_1 A
sky130_fd_sc_hd__inv_1 Y
sky130_fd_sc_hd__buf_1 A
sky130_fd_sc_hd__buf_1 X
sky130_fd_sc_hd__nand2_1 A
sky130_fd_sc_hd__nand2_1 B
sky130_fd_sc_hd__nand2_1 Y
sky130_fd_sc_hd__dfxtp_1 CLK
sky130_fd_sc_hd__dfxtp_1 D
sky130_fd_sc_hd__dfxtp_1 Q
sky130_fd_sc_hd__dfrtp_1 CLK
sky130_fd_sc_hd__dfrtp_1 D
sky130_fd_sc_hd__dfrtp_1 RESET_B
sky130_fd_sc_hd__dfrtp_1 Q
} {
set pin [lindex [get_lib_pin sky130_fd_sc_hd__ff_n40C_1v95/$cell_name/$pin_name] 0]
set cap [get_property $pin capacitance]
set dir [sta::liberty_port_direction $pin]
puts "$cell_name/$pin_name: cap=$cap dir=$dir"
}
############################################################
# Write libraries to exercise writer paths
############################################################
set outfile1 [make_result_file liberty_sky130_hd_ff.lib]
sta::write_liberty sky130_fd_sc_hd__ff_n40C_1v95 $outfile1
set outfile2 [make_result_file liberty_sky130_hd_ss.lib]
sta::write_liberty sky130_fd_sc_hd__ss_n40C_1v40 $outfile2

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,164 @@
# Test timing arc/model queries and various cell types for code coverage
# Targets: TimingArc.cc, TableModel.cc, Liberty.cc (deep model queries),
# LibertyReader.cc (timing type parsing), Sequential.cc
source ../../test/helpers.tcl
############################################################
# Read libraries with different timing model types
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog ../../sdc/test/sdc_test2.v
link_design sdc_test2
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 20 [get_ports clk2]
set_input_delay -clock clk1 2.0 [get_ports in1]
set_input_delay -clock clk1 2.0 [get_ports in2]
set_input_delay -clock clk1 2.0 [get_ports in3]
set_output_delay -clock clk1 3.0 [get_ports out1]
set_output_delay -clock clk2 3.0 [get_ports out2]
############################################################
# Query timing arcs on various cell types
############################################################
# Combinational cells - report_lib_cell shows timing arcs
report_lib_cell NangateOpenCellLibrary/INV_X1
report_lib_cell NangateOpenCellLibrary/BUF_X1
report_lib_cell NangateOpenCellLibrary/NAND2_X1
report_lib_cell NangateOpenCellLibrary/NOR2_X1
report_lib_cell NangateOpenCellLibrary/AOI21_X1
report_lib_cell NangateOpenCellLibrary/OAI21_X1
report_lib_cell NangateOpenCellLibrary/AND2_X1
report_lib_cell NangateOpenCellLibrary/OR2_X1
# XOR cells
report_lib_cell NangateOpenCellLibrary/XOR2_X1
report_lib_cell NangateOpenCellLibrary/XNOR2_X1
# Full/Half adder
report_lib_cell NangateOpenCellLibrary/FA_X1
report_lib_cell NangateOpenCellLibrary/HA_X1
# MUX
report_lib_cell NangateOpenCellLibrary/MUX2_X1
# Tristate
report_lib_cell NangateOpenCellLibrary/TINV_X1
############################################################
# Sequential cells (timing arcs: setup, hold, clk-to-q)
############################################################
report_lib_cell NangateOpenCellLibrary/DFF_X1
report_lib_cell NangateOpenCellLibrary/DFF_X2
report_lib_cell NangateOpenCellLibrary/DFFR_X1
report_lib_cell NangateOpenCellLibrary/DFFS_X1
report_lib_cell NangateOpenCellLibrary/DFFRS_X1
# Scan DFFs
report_lib_cell NangateOpenCellLibrary/SDFF_X1
report_lib_cell NangateOpenCellLibrary/SDFFR_X1
report_lib_cell NangateOpenCellLibrary/SDFFS_X1
report_lib_cell NangateOpenCellLibrary/SDFFRS_X1
# Latch
report_lib_cell NangateOpenCellLibrary/TLAT_X1
# Clock gate
report_lib_cell NangateOpenCellLibrary/CLKGATETST_X1
report_lib_cell NangateOpenCellLibrary/CLKGATETST_X2
############################################################
# Query timing paths (exercises timing arc evaluation)
############################################################
report_checks -from [get_ports in1] -to [get_ports out1]
report_checks -from [get_ports in2] -to [get_ports out1]
report_checks -from [get_ports in1] -to [get_ports out2]
# Min delay paths
report_checks -path_delay min -from [get_ports in1] -to [get_ports out1]
# Rise/fall reports
report_checks -from [get_ports in1] -rise_to [get_ports out1]
report_checks -from [get_ports in1] -fall_to [get_ports out1]
############################################################
# Drive strength variations (larger cells with different tables)
############################################################
foreach size {1 2 4 8 16 32} {
report_lib_cell NangateOpenCellLibrary/INV_X${size}
}
foreach size {1 2 4 8 16 32} {
report_lib_cell NangateOpenCellLibrary/BUF_X${size}
}
foreach size {1 2 4} {
report_lib_cell NangateOpenCellLibrary/NAND2_X${size}
report_lib_cell NangateOpenCellLibrary/NAND3_X${size}
report_lib_cell NangateOpenCellLibrary/NAND4_X${size}
report_lib_cell NangateOpenCellLibrary/NOR2_X${size}
report_lib_cell NangateOpenCellLibrary/NOR3_X${size}
report_lib_cell NangateOpenCellLibrary/NOR4_X${size}
}
############################################################
# Write liberty (exercises timing model writing)
############################################################
set outfile [make_result_file liberty_timing_models_write.lib]
sta::write_liberty NangateOpenCellLibrary $outfile
############################################################
# Read ASAP7 CCSN (CCS noise models)
############################################################
read_liberty ../../test/asap7_ccsn.lib.gz
############################################################
# Read latch library (exercises latch-specific paths)
############################################################
read_liberty ../../test/liberty_latch3.lib
############################################################
# Report check types to exercise more report paths
############################################################
report_check_types -max_slew -max_capacitance -max_fanout
############################################################
# ASAP7 cells with different timing model variations
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz
# Query AO/OA complex gates
read_liberty ../../test/asap7/asap7sc7p5t_AO_RVT_FF_nldm_211120.lib.gz
read_liberty ../../test/asap7/asap7sc7p5t_OA_RVT_FF_nldm_211120.lib.gz

View File

@ -0,0 +1,335 @@
--- async reset DFF cells ---
dfrtp_1 arc_sets = 8
sky130_fd_sc_hd__dfrtp_1 CLK -> CLK role=width
sky130_fd_sc_hd__dfrtp_1 CLK -> D role=setup
sky130_fd_sc_hd__dfrtp_1 CLK -> D role=hold
sky130_fd_sc_hd__dfrtp_1 CLK -> Q role=Reg Clk to Q
sky130_fd_sc_hd__dfrtp_1 RESET_B -> Q role=Reg Set/Clr
sky130_fd_sc_hd__dfrtp_1 CLK -> RESET_B role=recovery
sky130_fd_sc_hd__dfrtp_1 CLK -> RESET_B role=removal
sky130_fd_sc_hd__dfrtp_1 RESET_B -> RESET_B role=width
dfstp_1 arc_sets = 8
sky130_fd_sc_hd__dfstp_1 CLK -> CLK role=width
sky130_fd_sc_hd__dfstp_1 CLK -> D role=setup
sky130_fd_sc_hd__dfstp_1 CLK -> D role=hold
sky130_fd_sc_hd__dfstp_1 CLK -> Q role=Reg Clk to Q
sky130_fd_sc_hd__dfstp_1 SET_B -> Q role=Reg Set/Clr
sky130_fd_sc_hd__dfstp_1 CLK -> SET_B role=recovery
sky130_fd_sc_hd__dfstp_1 CLK -> SET_B role=removal
sky130_fd_sc_hd__dfstp_1 SET_B -> SET_B role=width
dfbbp_1 arc_sets = 19
sky130_fd_sc_hd__dfbbp_1 CLK -> CLK role=width
sky130_fd_sc_hd__dfbbp_1 CLK -> D role=setup
sky130_fd_sc_hd__dfbbp_1 CLK -> D role=hold
sky130_fd_sc_hd__dfbbp_1 CLK -> Q role=Reg Clk to Q
sky130_fd_sc_hd__dfbbp_1 RESET_B -> Q role=Reg Set/Clr
sky130_fd_sc_hd__dfbbp_1 SET_B -> Q role=Reg Set/Clr
sky130_fd_sc_hd__dfbbp_1 CLK -> Q_N role=Reg Clk to Q
sky130_fd_sc_hd__dfbbp_1 RESET_B -> Q_N role=Reg Set/Clr
sky130_fd_sc_hd__dfbbp_1 SET_B -> Q_N role=Reg Set/Clr
sky130_fd_sc_hd__dfbbp_1 CLK -> RESET_B role=recovery
sky130_fd_sc_hd__dfbbp_1 CLK -> RESET_B role=removal
sky130_fd_sc_hd__dfbbp_1 RESET_B -> RESET_B role=width
sky130_fd_sc_hd__dfbbp_1 SET_B -> RESET_B role=non-sequential setup
sky130_fd_sc_hd__dfbbp_1 SET_B -> RESET_B role=non-sequential hold
sky130_fd_sc_hd__dfbbp_1 CLK -> SET_B role=recovery
sky130_fd_sc_hd__dfbbp_1 CLK -> SET_B role=removal
sky130_fd_sc_hd__dfbbp_1 RESET_B -> SET_B role=non-sequential setup
sky130_fd_sc_hd__dfbbp_1 SET_B -> SET_B role=width
sky130_fd_sc_hd__dfbbp_1 RESET_B -> SET_B role=non-sequential hold
sdfrtp_1 arc_sets = 12
sky130_fd_sc_hd__sdfrtp_1 CLK -> CLK role=width
sky130_fd_sc_hd__sdfrtp_1 CLK -> D role=setup
sky130_fd_sc_hd__sdfrtp_1 CLK -> D role=hold
sky130_fd_sc_hd__sdfrtp_1 CLK -> Q role=Reg Clk to Q
sky130_fd_sc_hd__sdfrtp_1 RESET_B -> Q role=Reg Set/Clr
sky130_fd_sc_hd__sdfrtp_1 CLK -> RESET_B role=recovery
sky130_fd_sc_hd__sdfrtp_1 CLK -> RESET_B role=removal
sky130_fd_sc_hd__sdfrtp_1 RESET_B -> RESET_B role=width
sky130_fd_sc_hd__sdfrtp_1 CLK -> SCD role=setup
sky130_fd_sc_hd__sdfrtp_1 CLK -> SCD role=hold
sky130_fd_sc_hd__sdfrtp_1 CLK -> SCE role=setup
sky130_fd_sc_hd__sdfrtp_1 CLK -> SCE role=hold
sdfstp_1 arc_sets = 12
sky130_fd_sc_hd__sdfstp_1 CLK -> CLK role=width
sky130_fd_sc_hd__sdfstp_1 CLK -> D role=setup
sky130_fd_sc_hd__sdfstp_1 CLK -> D role=hold
sky130_fd_sc_hd__sdfstp_1 CLK -> Q role=Reg Clk to Q
sky130_fd_sc_hd__sdfstp_1 SET_B -> Q role=Reg Set/Clr
sky130_fd_sc_hd__sdfstp_1 CLK -> SCD role=setup
sky130_fd_sc_hd__sdfstp_1 CLK -> SCD role=hold
sky130_fd_sc_hd__sdfstp_1 CLK -> SCE role=setup
sky130_fd_sc_hd__sdfstp_1 CLK -> SCE role=hold
sky130_fd_sc_hd__sdfstp_1 CLK -> SET_B role=recovery
sky130_fd_sc_hd__sdfstp_1 CLK -> SET_B role=removal
sky130_fd_sc_hd__sdfstp_1 SET_B -> SET_B role=width
--- tristate cell timing arcs ---
sky130_fd_sc_hd__ebufn_1 arc_sets = 3
sky130_fd_sc_hd__ebufn_1 A -> Z role=combinational
sky130_fd_sc_hd__ebufn_1 TE_B -> Z role=tristate enable
sky130_fd_sc_hd__ebufn_1 TE_B -> Z role=tristate disable
sky130_fd_sc_hd__ebufn_2 arc_sets = 3
sky130_fd_sc_hd__ebufn_2 A -> Z role=combinational
sky130_fd_sc_hd__ebufn_2 TE_B -> Z role=tristate enable
sky130_fd_sc_hd__ebufn_2 TE_B -> Z role=tristate disable
sky130_fd_sc_hd__ebufn_4 arc_sets = 3
sky130_fd_sc_hd__ebufn_4 A -> Z role=combinational
sky130_fd_sc_hd__ebufn_4 TE_B -> Z role=tristate enable
sky130_fd_sc_hd__ebufn_4 TE_B -> Z role=tristate disable
sky130_fd_sc_hd__ebufn_8 arc_sets = 3
sky130_fd_sc_hd__ebufn_8 A -> Z role=combinational
sky130_fd_sc_hd__ebufn_8 TE_B -> Z role=tristate enable
sky130_fd_sc_hd__ebufn_8 TE_B -> Z role=tristate disable
--- clock gate cell timing arcs ---
sky130_fd_sc_hd__dlclkp_1 arc_sets = 4
sky130_fd_sc_hd__dlclkp_1 CLK -> CLK role=width
sky130_fd_sc_hd__dlclkp_1 CLK -> GATE role=setup
sky130_fd_sc_hd__dlclkp_1 CLK -> GATE role=hold
sky130_fd_sc_hd__dlclkp_1 CLK -> GCLK role=combinational
sky130_fd_sc_hd__dlclkp_2 arc_sets = 4
sky130_fd_sc_hd__dlclkp_2 CLK -> CLK role=width
sky130_fd_sc_hd__dlclkp_2 CLK -> GATE role=setup
sky130_fd_sc_hd__dlclkp_2 CLK -> GATE role=hold
sky130_fd_sc_hd__dlclkp_2 CLK -> GCLK role=combinational
sky130_fd_sc_hd__sdlclkp_1 arc_sets = 6
sky130_fd_sc_hd__sdlclkp_1 CLK -> CLK role=width
sky130_fd_sc_hd__sdlclkp_1 CLK -> GATE role=setup
sky130_fd_sc_hd__sdlclkp_1 CLK -> GATE role=hold
sky130_fd_sc_hd__sdlclkp_1 CLK -> GCLK role=combinational
sky130_fd_sc_hd__sdlclkp_1 CLK -> SCE role=setup
sky130_fd_sc_hd__sdlclkp_1 CLK -> SCE role=hold
sky130_fd_sc_hd__sdlclkp_2 arc_sets = 6
sky130_fd_sc_hd__sdlclkp_2 CLK -> CLK role=width
sky130_fd_sc_hd__sdlclkp_2 CLK -> GATE role=setup
sky130_fd_sc_hd__sdlclkp_2 CLK -> GATE role=hold
sky130_fd_sc_hd__sdlclkp_2 CLK -> GCLK role=combinational
sky130_fd_sc_hd__sdlclkp_2 CLK -> SCE role=setup
sky130_fd_sc_hd__sdlclkp_2 CLK -> SCE role=hold
--- latch cell timing arcs ---
sky130_fd_sc_hd__dlxtp_1 arc_sets = 5
sky130_fd_sc_hd__dlxtp_1 GATE -> D role=setup
sky130_fd_sc_hd__dlxtp_1 GATE -> D role=hold
sky130_fd_sc_hd__dlxtp_1 GATE -> GATE role=width
sky130_fd_sc_hd__dlxtp_1 D -> Q role=Latch D to Q
sky130_fd_sc_hd__dlxtp_1 GATE -> Q role=Latch En to Q
sky130_fd_sc_hd__dlxtn_1 arc_sets = 5
sky130_fd_sc_hd__dlxtn_1 GATE_N -> D role=setup
sky130_fd_sc_hd__dlxtn_1 GATE_N -> D role=hold
sky130_fd_sc_hd__dlxtn_1 GATE_N -> GATE_N role=width
sky130_fd_sc_hd__dlxtn_1 D -> Q role=Latch D to Q
sky130_fd_sc_hd__dlxtn_1 GATE_N -> Q role=Latch En to Q
sky130_fd_sc_hd__dlxbn_1 arc_sets = 7
sky130_fd_sc_hd__dlxbn_1 GATE_N -> D role=setup
sky130_fd_sc_hd__dlxbn_1 GATE_N -> D role=hold
sky130_fd_sc_hd__dlxbn_1 GATE_N -> GATE_N role=width
sky130_fd_sc_hd__dlxbn_1 D -> Q role=Latch D to Q
sky130_fd_sc_hd__dlxbn_1 GATE_N -> Q role=Latch En to Q
sky130_fd_sc_hd__dlxbn_1 D -> Q_N role=Latch D to Q
sky130_fd_sc_hd__dlxbn_1 GATE_N -> Q_N role=Latch En to Q
sky130_fd_sc_hd__dlxbp_1 arc_sets = 7
sky130_fd_sc_hd__dlxbp_1 GATE -> D role=setup
sky130_fd_sc_hd__dlxbp_1 GATE -> D role=hold
sky130_fd_sc_hd__dlxbp_1 GATE -> GATE role=width
sky130_fd_sc_hd__dlxbp_1 D -> Q role=Latch D to Q
sky130_fd_sc_hd__dlxbp_1 GATE -> Q role=Latch En to Q
sky130_fd_sc_hd__dlxbp_1 D -> Q_N role=Latch D to Q
sky130_fd_sc_hd__dlxbp_1 GATE -> Q_N role=Latch En to Q
DFFHQNx1 arc_sets = 5
DFFHQNx1_ASAP7_75t_R CLK -> QN role=Reg Clk to Q
DFFHQNx1_ASAP7_75t_R CLK -> CLK role=width
DFFHQNx1_ASAP7_75t_R CLK -> CLK role=width
DFFHQNx1_ASAP7_75t_R CLK -> D role=hold
DFFHQNx1_ASAP7_75t_R CLK -> D role=setup
DLLx1 arc_sets = 6
DLLx1_ASAP7_75t_R CLK -> Q role=Latch En to Q
DLLx1_ASAP7_75t_R D -> Q role=Latch D to Q
DLLx1_ASAP7_75t_R CLK -> CLK role=width
DLLx1_ASAP7_75t_R CLK -> CLK role=width
DLLx1_ASAP7_75t_R CLK -> D role=hold
DLLx1_ASAP7_75t_R CLK -> D role=setup
ICGx1 arc_sets = 13
ICGx1_ASAP7_75t_R CLK -> GCLK role=combinational
ICGx1_ASAP7_75t_R CLK -> GCLK role=combinational
ICGx1_ASAP7_75t_R CLK -> GCLK role=combinational
ICGx1_ASAP7_75t_R CLK -> CLK role=width
ICGx1_ASAP7_75t_R CLK -> CLK role=width
ICGx1_ASAP7_75t_R CLK -> ENA role=hold
ICGx1_ASAP7_75t_R CLK -> ENA role=hold
ICGx1_ASAP7_75t_R CLK -> ENA role=setup
ICGx1_ASAP7_75t_R CLK -> ENA role=setup
ICGx1_ASAP7_75t_R CLK -> SE role=hold
ICGx1_ASAP7_75t_R CLK -> SE role=hold
ICGx1_ASAP7_75t_R CLK -> SE role=setup
ICGx1_ASAP7_75t_R CLK -> SE role=setup
sg13g2_dlhq_1 arc_sets = 5
sg13g2_dlhq_1 D -> Q role=Latch D to Q
sg13g2_dlhq_1 GATE -> Q role=Latch En to Q
sg13g2_dlhq_1 GATE -> D role=hold
sg13g2_dlhq_1 GATE -> D role=setup
sg13g2_dlhq_1 GATE -> GATE role=width
Warning 354: liberty_timing_types_deep.tcl line 1, cell 'sg13g2_dllq_1' not found.
sg13g2_dfrbp_1 arc_sets = 10
sg13g2_dfrbp_1 CLK -> Q role=Reg Clk to Q
sg13g2_dfrbp_1 RESET_B -> Q role=Reg Set/Clr
sg13g2_dfrbp_1 CLK -> Q_N role=Reg Clk to Q
sg13g2_dfrbp_1 RESET_B -> Q_N role=Reg Set/Clr
sg13g2_dfrbp_1 CLK -> CLK role=width
sg13g2_dfrbp_1 CLK -> D role=hold
sg13g2_dfrbp_1 CLK -> D role=setup
sg13g2_dfrbp_1 CLK -> RESET_B role=recovery
sg13g2_dfrbp_1 CLK -> RESET_B role=removal
sg13g2_dfrbp_1 RESET_B -> RESET_B role=width
sg13g2_dfrbp_2 arc_sets = 10
sg13g2_dfrbp_2 CLK -> Q role=Reg Clk to Q
sg13g2_dfrbp_2 RESET_B -> Q role=Reg Set/Clr
sg13g2_dfrbp_2 CLK -> Q_N role=Reg Clk to Q
sg13g2_dfrbp_2 RESET_B -> Q_N role=Reg Set/Clr
sg13g2_dfrbp_2 CLK -> CLK role=width
sg13g2_dfrbp_2 CLK -> D role=hold
sg13g2_dfrbp_2 CLK -> D role=setup
sg13g2_dfrbp_2 CLK -> RESET_B role=recovery
sg13g2_dfrbp_2 CLK -> RESET_B role=removal
sg13g2_dfrbp_2 RESET_B -> RESET_B role=width
sg13g2_sdfbbp_1 arc_sets = 23
sg13g2_sdfbbp_1 CLK -> Q role=Reg Clk to Q
sg13g2_sdfbbp_1 CLK -> Q role=Reg Clk to Q
sg13g2_sdfbbp_1 RESET_B -> Q role=Reg Set/Clr
sg13g2_sdfbbp_1 SET_B -> Q role=Reg Set/Clr
sg13g2_sdfbbp_1 CLK -> Q_N role=Reg Clk to Q
sg13g2_sdfbbp_1 CLK -> Q_N role=Reg Clk to Q
sg13g2_sdfbbp_1 RESET_B -> Q_N role=Reg Set/Clr
sg13g2_sdfbbp_1 SET_B -> Q_N role=Reg Set/Clr
sg13g2_sdfbbp_1 CLK -> CLK role=width
sg13g2_sdfbbp_1 CLK -> D role=hold
sg13g2_sdfbbp_1 CLK -> D role=setup
sg13g2_sdfbbp_1 CLK -> RESET_B role=recovery
sg13g2_sdfbbp_1 CLK -> RESET_B role=removal
sg13g2_sdfbbp_1 RESET_B -> RESET_B role=width
sg13g2_sdfbbp_1 CLK -> SCD role=hold
sg13g2_sdfbbp_1 CLK -> SCD role=setup
sg13g2_sdfbbp_1 CLK -> SCE role=hold
sg13g2_sdfbbp_1 CLK -> SCE role=setup
sg13g2_sdfbbp_1 CLK -> SET_B role=recovery
sg13g2_sdfbbp_1 CLK -> SET_B role=removal
sg13g2_sdfbbp_1 RESET_B -> SET_B role=non-sequential hold
sg13g2_sdfbbp_1 RESET_B -> SET_B role=non-sequential setup
sg13g2_sdfbbp_1 SET_B -> SET_B role=width
Warning 441: liberty_timing_types_deep.tcl line 1, set_input_delay relative to a clock defined on the same port/pin not allowed.
Group Slack
--------------------------------------------
clk1 2.05
clk2 0.08
clk1 6.92
clk2 9.88
Group Slack
--------------------------------------------
No paths found.
Required Actual
Pin Width Width Slack
------------------------------------------------------------
reg1/CK (high) 0.05 5.00 4.95 (MET)
Group Slack
--------------------------------------------
No paths found.
max slew
Pin Limit Slew Slack
------------------------------------------------------------
inv1/ZN 0.20 0.02 0.18 (MET)
max capacitance
Pin Limit Cap Slack
------------------------------------------------------------
nor1/ZN 0.03 0.00 0.03 (MET)
Cell sky130_fd_sc_hd__dfrtp_1
Library sky130_fd_sc_hd__ff_n40C_1v95
File ../../test/sky130hd/sky130_fd_sc_hd__ff_n40C_1v95.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 0.00-0.00
D input 0.00-0.00
Q output function=IQ
RESET_B input 0.00-0.00
IQ internal
IQ_N internal
Timing arcs
CLK -> CLK
width
^ -> v
v -> ^
CLK -> D
setup
^ -> ^
^ -> v
CLK -> D
hold
^ -> ^
^ -> v
CLK -> Q
Reg Clk to Q
^ -> ^
^ -> v
RESET_B -> Q
Reg Set/Clr
v -> v
CLK -> RESET_B
recovery
^ -> ^
CLK -> RESET_B
removal
^ -> ^
RESET_B -> RESET_B
width
v -> ^
Cell sky130_fd_sc_hd__dfrtp_1
Library sky130_fd_sc_hd__ss_n40C_1v40
File ../../test/sky130hd/sky130_fd_sc_hd__ss_n40C_1v40.lib
VGND ground
VNB bias
VPB bias
VPWR power
CLK input 0.00-0.00
D input 0.00-0.00
Q output function=IQ
RESET_B input 0.00-0.00
IQ internal
IQ_N internal
Timing arcs
CLK -> CLK
width
^ -> v
v -> ^
CLK -> D
setup
^ -> ^
^ -> v
CLK -> D
hold
^ -> ^
^ -> v
CLK -> Q
Reg Clk to Q
^ -> ^
^ -> v
RESET_B -> Q
Reg Set/Clr
v -> v
CLK -> RESET_B
recovery
^ -> ^
CLK -> RESET_B
removal
^ -> ^
RESET_B -> RESET_B
width
v -> ^

View File

@ -0,0 +1,209 @@
# Deep timing type and timing arc attribute testing across diverse PDKs.
source ../../test/helpers.tcl
############################################################
# Read Sky130 library - has pg_pin, voltage_map, DFF with
# async clear/set (recovery/removal arcs), latches
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
set sky_lib [sta::find_liberty sky130_fd_sc_hd__tt_025C_1v80]
############################################################
# Query cells with async reset (DFRTP has RESET_B -> recovery/removal)
# Uses full_name which returns "cell from -> to"
############################################################
puts "--- async reset DFF cells ---"
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfrtp_1]
set arcs [$cell timing_arc_sets]
puts "dfrtp_1 arc_sets = [llength $arcs]"
foreach arc $arcs {
set role [$arc role]
puts " [$arc full_name] role=$role"
}
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfstp_1]
set arcs [$cell timing_arc_sets]
puts "dfstp_1 arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dfbbp_1]
set arcs [$cell timing_arc_sets]
puts "dfbbp_1 arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
# sdfrtp has scan + async reset
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfrtp_1]
set arcs [$cell timing_arc_sets]
puts "sdfrtp_1 arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
# sdfstp has scan + async set
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfstp_1]
set arcs [$cell timing_arc_sets]
puts "sdfstp_1 arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
############################################################
# Query tristate cells (three_state_enable/disable timing types)
############################################################
puts "--- tristate cell timing arcs ---"
foreach cell_name {sky130_fd_sc_hd__ebufn_1 sky130_fd_sc_hd__ebufn_2
sky130_fd_sc_hd__ebufn_4 sky130_fd_sc_hd__ebufn_8} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
set arcs [$cell timing_arc_sets]
puts "$cell_name arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
}
############################################################
# Query clock gate cells
############################################################
puts "--- clock gate cell timing arcs ---"
foreach cell_name {sky130_fd_sc_hd__dlclkp_1 sky130_fd_sc_hd__dlclkp_2
sky130_fd_sc_hd__sdlclkp_1 sky130_fd_sc_hd__sdlclkp_2} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
puts "$cell_name arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
}
}
############################################################
# Query latch cells
############################################################
puts "--- latch cell timing arcs ---"
foreach cell_name {sky130_fd_sc_hd__dlxtp_1 sky130_fd_sc_hd__dlxtn_1
sky130_fd_sc_hd__dlxbn_1 sky130_fd_sc_hd__dlxbp_1} {
set cell [get_lib_cell sky130_fd_sc_hd__tt_025C_1v80/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
puts "$cell_name arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
}
}
############################################################
# Read ASAP7 SEQ library
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
set cell [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DFFHQNx1_ASAP7_75t_R]
set arcs [$cell timing_arc_sets]
puts "DFFHQNx1 arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
set cell [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/DLLx1_ASAP7_75t_R]
set arcs [$cell timing_arc_sets]
puts "DLLx1 arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
set cell [get_lib_cell asap7sc7p5t_SEQ_RVT_FF_nldm_220123/ICGx1_ASAP7_75t_R]
set arcs [$cell timing_arc_sets]
puts "ICGx1 arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
############################################################
# Read IHP library
############################################################
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
foreach cell_name {sg13g2_dlhq_1 sg13g2_dllq_1} {
set cell [get_lib_cell sg13g2_stdcell_typ_1p20V_25C/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
puts "$cell_name arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
}
}
foreach cell_name {sg13g2_dfrbp_1 sg13g2_dfrbp_2} {
set cell [get_lib_cell sg13g2_stdcell_typ_1p20V_25C/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
puts "$cell_name arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
}
}
foreach cell_name {sg13g2_sdfbbp_1} {
set cell [get_lib_cell sg13g2_stdcell_typ_1p20V_25C/$cell_name]
if {$cell != "NULL" && $cell ne ""} {
set arcs [$cell timing_arc_sets]
puts "$cell_name arc_sets = [llength $arcs]"
foreach arc $arcs {
puts " [$arc full_name] role=[$arc role]"
}
}
}
############################################################
# Link design and exercise check timing types
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog ../../sdc/test/sdc_test2.v
link_design sdc_test2
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 20 [get_ports clk2]
set_input_delay -clock clk1 2.0 [all_inputs]
set_output_delay -clock clk1 3.0 [all_outputs]
set_input_transition 0.1 [all_inputs]
report_check_types -max_delay -min_delay
report_check_types -recovery -removal
report_check_types -min_pulse_width -min_period
report_check_types -clock_gating_setup -clock_gating_hold
report_check_types -max_slew -max_capacitance -max_fanout
report_check_types -max_skew
############################################################
# Read Sky130 fast/slow corners
############################################################
read_liberty ../../test/sky130hd/sky130_fd_sc_hd__ff_n40C_1v95.lib
read_liberty ../../test/sky130hd/sky130_fd_sc_hd__ss_n40C_1v40.lib
report_lib_cell sky130_fd_sc_hd__ff_n40C_1v95/sky130_fd_sc_hd__dfrtp_1
report_lib_cell sky130_fd_sc_hd__ss_n40C_1v40/sky130_fd_sc_hd__dfrtp_1
############################################################
# Write liberty
############################################################
set outfile [make_result_file liberty_timing_types_deep_write.lib]
sta::write_liberty sky130_fd_sc_hd__tt_025C_1v80 $outfile

View File

@ -0,0 +1,390 @@
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)
Startpoint: reg2 (rising edge-triggered flip-flop clocked by clk1)
Endpoint: out1 (output port clocked by clk1)
Path Group: clk1
Path Type: max
Delay Time Description
---------------------------------------------------------
0.00 0.00 clock clk1 (rise edge)
0.00 0.00 clock network delay (ideal)
0.00 0.00 ^ reg2/CK (DFF_X1)
0.08 0.08 ^ reg2/Q (DFF_X1)
0.00 0.08 ^ out1 (out)
0.08 data arrival time
10.00 10.00 clock clk1 (rise edge)
0.00 10.00 clock network delay (ideal)
0.00 10.00 clock reconvergence pessimism
-3.00 7.00 output external delay
7.00 data required time
---------------------------------------------------------
7.00 data required time
-0.08 data arrival time
---------------------------------------------------------
6.92 slack (MET)

View File

@ -0,0 +1,117 @@
# Test wire load model handling for code coverage
source ../../test/helpers.tcl
############################################################
# Read library with wire load models
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
# Read verilog and link design to enable wireload operations
read_verilog ../../sdc/test/sdc_test2.v
link_design sdc_test2
############################################################
# Setup constraints (needed before report_checks)
############################################################
create_clock -name clk1 -period 10 [get_ports clk1]
set_input_delay -clock clk1 2.0 [get_ports in1]
set_input_delay -clock clk1 2.0 [get_ports in2]
set_input_delay -clock clk1 2.0 [get_ports in3]
set_output_delay -clock clk1 3.0 [get_ports out1]
set_output_delay -clock clk1 3.0 [get_ports out2]
############################################################
# Wire load model queries - report_checks after each to show timing impact
############################################################
set_wire_load_model -name "1K_hvratio_1_1"
report_checks
set_wire_load_model -name "1K_hvratio_1_2"
report_checks
set_wire_load_model -name "1K_hvratio_1_4"
report_checks
set_wire_load_model -name "3K_hvratio_1_1"
report_checks
set_wire_load_model -name "3K_hvratio_1_2"
report_checks
set_wire_load_model -name "3K_hvratio_1_4"
report_checks
set_wire_load_model -name "5K_hvratio_1_1"
report_checks
set_wire_load_model -name "5K_hvratio_1_2"
report_checks
set_wire_load_model -name "5K_hvratio_1_4"
report_checks
############################################################
# Wire load mode switching (exercises wireloadModeString)
############################################################
set_wire_load_mode top
report_checks
set_wire_load_mode enclosed
report_checks
set_wire_load_mode segmented
report_checks
############################################################
# Write SDC with wireload info
############################################################
set sdc_file [make_result_file liberty_wireload.sdc]
write_sdc -no_timestamp $sdc_file
############################################################
# Write liberty (exercises wireload writing in LibertyWriter)
############################################################
set outfile [make_result_file liberty_wireload_write.lib]
sta::write_liberty NangateOpenCellLibrary $outfile
############################################################
# Read Sky130 library (different wireload models)
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
# Try Sky130 wire load models
set_wire_load_model -name "Small"
report_checks
set_wire_load_model -name "Medium"
report_checks
############################################################
# Write liberty for sky130 (different wireload format)
############################################################
set outfile2 [make_result_file liberty_wireload_write_sky130.lib]
sta::write_liberty sky130_fd_sc_hd__tt_025C_1v80 $outfile2
############################################################
# Read IHP library
############################################################
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
set outfile3 [make_result_file liberty_wireload_write_ihp.lib]
sta::write_liberty sg13g2_stdcell_typ_1p20V_25C $outfile3
############################################################
# Operating conditions + wireload interaction
############################################################
set_operating_conditions typical
report_checks

View File

@ -0,0 +1,42 @@
Differences found at line 107.
cell_rise(Timing_7_7) {
cell_rise(Timing_7_7) {
Differences found at line 118.
cell_rise(del_1_7_7) {
cell_rise(del_1_7_7) {
Differences found at line 70.
cell_rise(TIMING_DELAY_7x7ds1) {
cell_rise(TIMING_DELAY_7x7ds1) {
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13178, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13211, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13244, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13277, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13310, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13343, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 13376, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 14772, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 14805, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz line 14838, timing group from output port.
Differences found at line 83.
cell_rise(delay_template_7x7_x1) {
cell_rise(delay_template_7x7_x1) {
Differences found at line 81.
cell_rise(delay_template_7x7) {
cell_rise(delay_template_7x7) {
Differences found at line 83.
cell_rise(delay_template_7x7_x1) {
cell_rise(delay_template_7x7_x1) {
Differences found at line 90.
cell_rise(fakeram7_256x32_mem_out_delay_template) {
cell_rise(fakeram7_256x32_mem_out_delay_template) {
Warning 1171: ../../test/nangate45/fake_macros.lib line 32, default_max_transition is 0.0.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13156, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13189, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13222, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13255, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13288, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13321, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 13354, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 14748, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 14781, timing group from output port.
Warning 1212: ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz line 14814, timing group from output port.

View File

@ -0,0 +1,221 @@
# Test liberty write and verify output for code coverage
# Targets: LibertyWriter.cc (all write functions: writeHeader, writeCells, writePort,
# writePwrGndPort, writeBusPort, writeTimingArcSet, writeTimingModels,
# writeTableModel0/1/2, writeTableTemplates, writeBusDcls, timingTypeString),
# TableModel.cc (table iteration during write),
# TimingArc.cc (arc iteration during write),
# Liberty.cc (property queries during write)
source ../../test/helpers.tcl
proc assert_written_liberty {path lib_name} {
if {![file exists $path]} {
error "missing written liberty file: $path"
}
set in [open $path r]
set text [read $in]
close $in
if {[string length $text] <= 0} {
error "written liberty file is empty: $path"
}
if {[string first "library (" $text] < 0} {
error "written liberty file has no library block: $path"
}
if {[string first $lib_name $text] < 0} {
error "written liberty file does not contain library name '$lib_name': $path"
}
if {![regexp {cell[[:space:]]*\(} $text]} {
error "written liberty file has no cell blocks: $path"
}
}
############################################################
# Read and write Nangate45 (comprehensive cell library)
############################################################
read_liberty ../../test/nangate45/Nangate45_typ.lib
# Write liberty - this exercises most of LibertyWriter.cc
set outfile1 [make_result_file liberty_roundtrip_nangate.lib]
sta::write_liberty NangateOpenCellLibrary $outfile1
assert_written_liberty $outfile1 NangateOpenCellLibrary
diff_files liberty_roundtrip_nangate.libok $outfile1
############################################################
# Read and write Sky130 (large library with different features)
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
set outfile2 [make_result_file liberty_roundtrip_sky130.lib]
sta::write_liberty sky130_fd_sc_hd__tt_025C_1v80 $outfile2
assert_written_liberty $outfile2 sky130_fd_sc_hd__tt_025C_1v80
diff_files liberty_roundtrip_sky130.libok $outfile2
############################################################
# Read and write IHP (different vendor format)
############################################################
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
set outfile3 [make_result_file liberty_roundtrip_ihp.lib]
sta::write_liberty sg13g2_stdcell_typ_1p20V_25C $outfile3
assert_written_liberty $outfile3 sg13g2_stdcell_typ_1p20V_25C
diff_files liberty_roundtrip_ihp.libok $outfile3
############################################################
# Read and write ASAP7 SIMPLE (compressed input)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz
set outfile4 [make_result_file liberty_roundtrip_asap7_simple.lib]
sta::write_liberty asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120 $outfile4
assert_written_liberty $outfile4 asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120
diff_files liberty_roundtrip_asap7_simple.libok $outfile4
############################################################
# Read and write ASAP7 SEQ (sequential cell writing)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
set outfile5 [make_result_file liberty_roundtrip_asap7_seq.lib]
sta::write_liberty asap7sc7p5t_SEQ_RVT_FF_nldm_220123 $outfile5
assert_written_liberty $outfile5 asap7sc7p5t_SEQ_RVT_FF_nldm_220123
diff_files liberty_roundtrip_asap7_seq.libok $outfile5
############################################################
# Read and write ASAP7 INVBUF (compressed input)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_INVBUF_RVT_FF_nldm_220122.lib.gz
set outfile6 [make_result_file liberty_roundtrip_asap7_invbuf.lib]
sta::write_liberty asap7sc7p5t_INVBUF_RVT_FF_nldm_211120 $outfile6
assert_written_liberty $outfile6 asap7sc7p5t_INVBUF_RVT_FF_nldm_211120
diff_files liberty_roundtrip_asap7_invbuf.libok $outfile6
############################################################
# Read and write ASAP7 AO (AND-OR cells)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_AO_RVT_FF_nldm_211120.lib.gz
set outfile7 [make_result_file liberty_roundtrip_asap7_ao.lib]
sta::write_liberty asap7sc7p5t_AO_RVT_FF_nldm_211120 $outfile7
assert_written_liberty $outfile7 asap7sc7p5t_AO_RVT_FF_nldm_211120
############################################################
# Read and write ASAP7 OA (OR-AND cells)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_OA_RVT_FF_nldm_211120.lib.gz
set outfile8 [make_result_file liberty_roundtrip_asap7_oa.lib]
sta::write_liberty asap7sc7p5t_OA_RVT_FF_nldm_211120 $outfile8
assert_written_liberty $outfile8 asap7sc7p5t_OA_RVT_FF_nldm_211120
############################################################
# Read and write fakeram (SRAM macro with bus ports)
############################################################
read_liberty ../../test/asap7/fakeram7_256x32.lib
set outfile9 [make_result_file liberty_roundtrip_fakeram.lib]
sta::write_liberty fakeram7_256x32 $outfile9
assert_written_liberty $outfile9 fakeram7_256x32
diff_files liberty_roundtrip_fakeram.libok $outfile9
############################################################
# Read and write fake_macros
############################################################
read_liberty ../../test/nangate45/fake_macros.lib
set outfile10 [make_result_file liberty_roundtrip_fake_macros.lib]
sta::write_liberty fake_macros $outfile10
assert_written_liberty $outfile10 fake_macros
############################################################
# Read and write Nangate45 fast (different corner parameters)
############################################################
read_liberty ../../test/nangate45/Nangate45_fast.lib
set outfile11 [make_result_file liberty_roundtrip_nangate_fast.lib]
sta::write_liberty NangateOpenCellLibrary_fast $outfile11
assert_written_liberty $outfile11 NangateOpenCellLibrary_fast
############################################################
# Read and write Nangate45 slow
############################################################
read_liberty ../../test/nangate45/Nangate45_slow.lib
set outfile12 [make_result_file liberty_roundtrip_nangate_slow.lib]
sta::write_liberty NangateOpenCellLibrary_slow $outfile12
assert_written_liberty $outfile12 NangateOpenCellLibrary_slow
############################################################
# Read and write Nangate45 LVT
############################################################
read_liberty ../../test/nangate45/Nangate45_lvt.lib
set outfile13 [make_result_file liberty_roundtrip_nangate_lvt.lib]
sta::write_liberty NangateOpenCellLibrary_lvt $outfile13
assert_written_liberty $outfile13 NangateOpenCellLibrary_lvt
############################################################
# Read and write multiple fakeram sizes
############################################################
read_liberty ../../test/nangate45/fakeram45_256x16.lib
set outfile14 [make_result_file liberty_roundtrip_fakeram45_256x16.lib]
sta::write_liberty fakeram45_256x16 $outfile14
assert_written_liberty $outfile14 fakeram45_256x16
read_liberty ../../test/nangate45/fakeram45_64x32.lib
set outfile15 [make_result_file liberty_roundtrip_fakeram45_64x32.lib]
sta::write_liberty fakeram45_64x32 $outfile15
assert_written_liberty $outfile15 fakeram45_64x32
############################################################
# Read and write ASAP7 SS corner (different operating conditions)
############################################################
read_liberty ../../test/asap7/asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120.lib.gz
set outfile17 [make_result_file liberty_roundtrip_asap7_ss.lib]
sta::write_liberty asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120 $outfile17
assert_written_liberty $outfile17 asap7sc7p5t_SIMPLE_RVT_SS_nldm_211120
############################################################
# Read and write Sky130 FF corner
############################################################
read_liberty ../../test/sky130hd/sky130_fd_sc_hd__ff_n40C_1v95.lib
set outfile18 [make_result_file liberty_roundtrip_sky130_ff.lib]
sta::write_liberty sky130_fd_sc_hd__ff_n40C_1v95 $outfile18
assert_written_liberty $outfile18 sky130_fd_sc_hd__ff_n40C_1v95
############################################################
# Read and write Sky130 SS corner
############################################################
read_liberty ../../test/sky130hd/sky130_fd_sc_hd__ss_n40C_1v40.lib
set outfile19 [make_result_file liberty_roundtrip_sky130_ss.lib]
sta::write_liberty sky130_fd_sc_hd__ss_n40C_1v40 $outfile19
assert_written_liberty $outfile19 sky130_fd_sc_hd__ss_n40C_1v40

Some files were not shown because too many files have changed in this diff Show More