OpenSTA/spice/test/spice_subckt_file.tcl

101 lines
3.3 KiB
Tcl

# Test write_path_spice with -subcircuit_file option
# and various path configurations to exercise uncovered WriteSpice.cc paths:
# WriteSpice constructor paths
# writeSubckt, findSubckt paths
# simulator-specific code paths (ngspice, hspice, xyce)
# Also targets WritePathSpice.cc:
# writePathSpice with different -path_args options
# NOTE: write_gate_spice tests removed - write_gate_spice_cmd SWIG binding
# is missing. See bug_report_missing_write_gate_spice_cmd.md.
source ../../test/helpers.tcl
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog spice_test2.v
link_design spice_test2
create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 1.0 [get_ports {in1 in2}]
set_output_delay -clock clk 1.0 [get_ports {out1 out2}]
set_input_transition 0.1 [get_ports {in1 in2}]
puts "--- report_checks ---"
report_checks
# Create mock SPICE subcircuit and model files
set spice_dir [make_result_file spice_subckt_out]
file mkdir $spice_dir
set model_file [file join $spice_dir model.sp]
set model_fh [open $model_file w]
puts $model_fh "* SPICE model file"
puts $model_fh ".model nmos nmos level=1"
puts $model_fh ".model pmos pmos level=1"
close $model_fh
set subckt_file [file join $spice_dir subckt.sp]
set subckt_fh [open $subckt_file w]
puts $subckt_fh "* SPICE subckt file"
puts $subckt_fh ".subckt BUF_X1 A Z VDD VSS"
puts $subckt_fh "M1 Z A VDD VDD pmos W=1u L=100n"
puts $subckt_fh "M2 Z A VSS VSS nmos W=1u L=100n"
puts $subckt_fh ".ends"
puts $subckt_fh ""
puts $subckt_fh ".subckt INV_X1 A ZN VDD VSS"
puts $subckt_fh "M1 ZN A VDD VDD pmos W=1u L=100n"
puts $subckt_fh "M2 ZN A VSS VSS nmos W=1u L=100n"
puts $subckt_fh ".ends"
puts $subckt_fh ""
puts $subckt_fh ".subckt AND2_X1 A1 A2 ZN VDD VSS"
puts $subckt_fh "M1 ZN A1 VDD VDD pmos W=1u L=100n"
puts $subckt_fh "M2 ZN A2 VSS VSS nmos W=1u L=100n"
puts $subckt_fh ".ends"
puts $subckt_fh ""
puts $subckt_fh ".subckt OR2_X1 A1 A2 ZN VDD VSS"
puts $subckt_fh "M1 ZN A1 VDD VDD pmos W=1u L=100n"
puts $subckt_fh "M2 ZN A2 VSS VSS nmos W=1u L=100n"
puts $subckt_fh ".ends"
puts $subckt_fh ""
puts $subckt_fh ".subckt DFF_X1 D CK Q QN VDD VSS"
puts $subckt_fh "M1 Q D VDD VDD pmos W=1u L=100n"
puts $subckt_fh "M2 Q D VSS VSS nmos W=1u L=100n"
puts $subckt_fh ".ends"
close $subckt_fh
#---------------------------------------------------------------
# write_path_spice with various options
#---------------------------------------------------------------
puts "--- write_path_spice to out1 ---"
set spice_dir2 [file join $spice_dir path_out1]
file mkdir $spice_dir2
write_path_spice \
-path_args {-to out1 -path_delay max} \
-spice_file [file join $spice_dir2 spice] \
-lib_subckt_file $subckt_file \
-model_file $model_file \
-power VDD \
-ground VSS
puts "--- write_path_spice to out2 ---"
set spice_dir3 [file join $spice_dir path_out2]
file mkdir $spice_dir3
write_path_spice \
-path_args {-to out2 -path_delay max} \
-spice_file [file join $spice_dir3 spice] \
-lib_subckt_file $subckt_file \
-model_file $model_file \
-power VDD \
-ground VSS
puts "--- write_path_spice with ngspice ---"
set spice_dir4 [file join $spice_dir path_ng]
file mkdir $spice_dir4
write_path_spice \
-path_args {-sort_by_slack} \
-spice_file [file join $spice_dir4 spice] \
-lib_subckt_file $subckt_file \
-model_file $model_file \
-power VDD \
-ground VSS \
-simulator ngspice