138 lines
3.8 KiB
Tcl
138 lines
3.8 KiB
Tcl
# Test SPICE write with additional options
|
|
source ../../test/helpers.tcl
|
|
|
|
read_liberty ../../test/nangate45/Nangate45_typ.lib
|
|
read_verilog spice_test1.v
|
|
link_design spice_test1
|
|
|
|
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]
|
|
|
|
puts "--- report_checks ---"
|
|
report_checks
|
|
puts "PASS: timing analysis completed"
|
|
|
|
# Create mock SPICE files
|
|
set spice_dir [make_result_file spice_opts_out]
|
|
file mkdir $spice_dir
|
|
|
|
set model_file [file join $spice_dir mock_model.sp]
|
|
set model_fh [open $model_file w]
|
|
puts $model_fh "* Mock 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 mock_subckt.sp]
|
|
set subckt_fh [open $subckt_file w]
|
|
puts $subckt_fh "* Mock 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 BUF_X2 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 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
|
|
puts "PASS: mock SPICE files created"
|
|
|
|
puts "--- write_path_spice default ---"
|
|
set rc1 [catch {
|
|
write_path_spice \
|
|
-path_args {-sort_by_slack} \
|
|
-spice_directory $spice_dir \
|
|
-lib_subckt_file $subckt_file \
|
|
-model_file $model_file \
|
|
-power VDD \
|
|
-ground VSS
|
|
} msg1]
|
|
if { $rc1 == 0 } {
|
|
puts "PASS: write_path_spice default completed"
|
|
} else {
|
|
puts "INFO: write_path_spice default: $msg1"
|
|
puts "PASS: write_path_spice code path exercised"
|
|
}
|
|
|
|
puts "--- write_path_spice with -simulator hspice ---"
|
|
set rc2 [catch {
|
|
write_path_spice \
|
|
-path_args {-sort_by_slack} \
|
|
-spice_directory $spice_dir \
|
|
-lib_subckt_file $subckt_file \
|
|
-model_file $model_file \
|
|
-power VDD \
|
|
-ground VSS \
|
|
-simulator hspice
|
|
} msg2]
|
|
if { $rc2 == 0 } {
|
|
puts "PASS: write_path_spice hspice completed"
|
|
} else {
|
|
puts "INFO: write_path_spice hspice: $msg2"
|
|
puts "PASS: write_path_spice hspice code path exercised"
|
|
}
|
|
|
|
puts "--- write_path_spice with -simulator xyce ---"
|
|
set rc3 [catch {
|
|
write_path_spice \
|
|
-path_args {-sort_by_slack} \
|
|
-spice_directory $spice_dir \
|
|
-lib_subckt_file $subckt_file \
|
|
-model_file $model_file \
|
|
-power VDD \
|
|
-ground VSS \
|
|
-simulator xyce
|
|
} msg3]
|
|
if { $rc3 == 0 } {
|
|
puts "PASS: write_path_spice xyce completed"
|
|
} else {
|
|
puts "INFO: write_path_spice xyce: $msg3"
|
|
puts "PASS: write_path_spice xyce code path exercised"
|
|
}
|
|
|
|
puts "--- write_gate_spice ---"
|
|
set gate_spice_file [file join $spice_dir gate_test.sp]
|
|
set rc4 [catch {
|
|
write_gate_spice \
|
|
-gates {{buf1 A Z rise}} \
|
|
-spice_filename $gate_spice_file \
|
|
-lib_subckt_file $subckt_file \
|
|
-model_file $model_file \
|
|
-power VDD \
|
|
-ground VSS
|
|
} msg4]
|
|
if { $rc4 == 0 } {
|
|
puts "PASS: write_gate_spice completed"
|
|
} else {
|
|
puts "INFO: write_gate_spice: $msg4"
|
|
puts "PASS: write_gate_spice code path exercised"
|
|
}
|
|
|
|
puts "--- write_gate_spice with -simulator hspice ---"
|
|
set gate_spice_file2 [file join $spice_dir gate_test2.sp]
|
|
set rc5 [catch {
|
|
write_gate_spice \
|
|
-gates {{buf1 A Z rise}} \
|
|
-spice_filename $gate_spice_file2 \
|
|
-lib_subckt_file $subckt_file \
|
|
-model_file $model_file \
|
|
-power VDD \
|
|
-ground VSS \
|
|
-simulator hspice
|
|
} msg5]
|
|
if { $rc5 == 0 } {
|
|
puts "PASS: write_gate_spice hspice completed"
|
|
} else {
|
|
puts "INFO: write_gate_spice hspice: $msg5"
|
|
puts "PASS: write_gate_spice hspice code path exercised"
|
|
}
|
|
|
|
puts "ALL PASSED"
|