OpenSTA/liberty/test/liberty_func_expr.tcl

235 lines
9.7 KiB
Tcl

# 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
puts "PASS: read Nangate45"
# 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]
puts "PASS: design setup"
############################################################
# XOR/XNOR cells (FuncExpr op_xor)
############################################################
report_lib_cell NangateOpenCellLibrary/XOR2_X1
puts "PASS: report XOR2_X1"
report_lib_cell NangateOpenCellLibrary/XOR2_X2
puts "PASS: report XOR2_X2"
report_lib_cell NangateOpenCellLibrary/XNOR2_X1
puts "PASS: report XNOR2_X1"
report_lib_cell NangateOpenCellLibrary/XNOR2_X2
puts "PASS: report 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
puts "PASS: report AOI21 variants"
# AOI22: !(A1&A2 | B1&B2)
report_lib_cell NangateOpenCellLibrary/AOI22_X1
report_lib_cell NangateOpenCellLibrary/AOI22_X2
report_lib_cell NangateOpenCellLibrary/AOI22_X4
puts "PASS: report AOI22 variants"
# AOI211: !(A1&A2 | B | C)
report_lib_cell NangateOpenCellLibrary/AOI211_X1
report_lib_cell NangateOpenCellLibrary/AOI211_X2
report_lib_cell NangateOpenCellLibrary/AOI211_X4
puts "PASS: report AOI211 variants"
############################################################
# 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
puts "PASS: report OAI21 variants"
# OAI22: !((A1|A2) & (B1|B2))
report_lib_cell NangateOpenCellLibrary/OAI22_X1
report_lib_cell NangateOpenCellLibrary/OAI22_X2
report_lib_cell NangateOpenCellLibrary/OAI22_X4
puts "PASS: report OAI22 variants"
# OAI211: !((A1|A2) & B & C)
report_lib_cell NangateOpenCellLibrary/OAI211_X1
report_lib_cell NangateOpenCellLibrary/OAI211_X2
report_lib_cell NangateOpenCellLibrary/OAI211_X4
puts "PASS: report OAI211 variants"
# OAI33: !((A1|A2|A3) & (B1|B2|B3))
catch { report_lib_cell NangateOpenCellLibrary/OAI33_X1 }
puts "PASS: report OAI33"
############################################################
# MUX cells (complex function: S?B:A)
############################################################
report_lib_cell NangateOpenCellLibrary/MUX2_X1
report_lib_cell NangateOpenCellLibrary/MUX2_X2
puts "PASS: report MUX2 variants"
############################################################
# Full/half adder (complex multi-output functions)
############################################################
report_lib_cell NangateOpenCellLibrary/FA_X1
puts "PASS: report FA_X1 (full adder)"
report_lib_cell NangateOpenCellLibrary/HA_X1
puts "PASS: report HA_X1 (half adder)"
############################################################
# Tristate cells (three_state enable)
############################################################
report_lib_cell NangateOpenCellLibrary/TINV_X1
puts "PASS: report TINV_X1 (tristate inv)"
catch { report_lib_cell NangateOpenCellLibrary/TBUF_X1 }
catch { report_lib_cell NangateOpenCellLibrary/TBUF_X2 }
puts "PASS: report TBUF tristate buffer"
############################################################
# Special cells: antenna, filler, tie, clock gate
############################################################
report_lib_cell NangateOpenCellLibrary/ANTENNA_X1
puts "PASS: report 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
puts "PASS: report FILLCELL variants"
report_lib_cell NangateOpenCellLibrary/LOGIC0_X1
report_lib_cell NangateOpenCellLibrary/LOGIC1_X1
puts "PASS: report tie cells"
report_lib_cell NangateOpenCellLibrary/CLKGATETST_X1
report_lib_cell NangateOpenCellLibrary/CLKGATETST_X2
report_lib_cell NangateOpenCellLibrary/CLKGATETST_X4
report_lib_cell NangateOpenCellLibrary/CLKGATETST_X8
puts "PASS: report clock gate cells"
############################################################
# 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
puts "PASS: report scan DFF variants"
############################################################
# 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
puts "PASS: write_liberty (exercises FuncExpr::to_string)"
############################################################
# Read IHP library (different function syntax/features)
############################################################
read_liberty ../../test/ihp-sg13g2/sg13g2_stdcell_typ_1p20V_25C.lib
puts "PASS: read IHP library"
# IHP has different cell naming and function formats
catch { report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_inv_1 }
catch { report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_buf_1 }
catch { report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_nand2_1 }
catch { report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_nor2_1 }
catch { report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_xor2_1 }
catch { report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_xnor2_1 }
catch { report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_mux2_1 }
catch { report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_dfrbp_1 }
catch { report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_ebufn_2 }
catch { report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_antn }
catch { report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_tiehi }
catch { report_lib_cell sg13g2_stdcell_typ_1p20V_25C/sg13g2_tielo }
puts "PASS: IHP cell reports"
set outfile2 [make_result_file liberty_func_expr_write_ihp.lib]
sta::write_liberty sg13g2_stdcell_typ_1p20V_25C $outfile2
puts "PASS: write_liberty IHP"
############################################################
# Read Sky130 library (yet another function expression style)
############################################################
read_liberty ../../test/sky130hd/sky130hd_tt.lib
puts "PASS: read Sky130"
# Sky130 has complex cells with different function expression styles
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__a21o_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__a21oi_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__a22o_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__a22oi_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__a31o_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__a32o_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__o21a_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__o21ai_0 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__o22a_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__mux2_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__mux4_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__xor2_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__xnor2_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__fa_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__ha_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__maj3_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__dlxtp_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__sdfxtp_1 }
catch { report_lib_cell sky130_fd_sc_hd__tt_025C_1v80/sky130_fd_sc_hd__ebufn_1 }
puts "PASS: Sky130 complex cell reports"
set outfile3 [make_result_file liberty_func_expr_write_sky130.lib]
sta::write_liberty sky130_fd_sc_hd__tt_025C_1v80 $outfile3
puts "PASS: write_liberty Sky130"
############################################################
# Timing path reports through complex cells
############################################################
report_checks -from [get_ports in1] -to [get_ports out1]
puts "PASS: report_checks"
report_checks -from [get_ports in1] -to [get_ports out1] -path_delay min
puts "PASS: report_checks min delay"
puts "ALL PASSED"