OpenSTA/sdc/test/sdc_write_read.tcl

115 lines
3.1 KiB
Tcl

# Test SDC write/read roundtrip for code coverage
source ../../test/helpers.tcl
read_liberty ../../test/nangate45/Nangate45_typ.lib
read_verilog sdc_test2.v
link_design sdc_test2
############################################################
# Setup various constraints
############################################################
# Clocks
create_clock -name clk1 -period 10 [get_ports clk1]
create_clock -name clk2 -period 20 -waveform {0 10} [get_ports clk2]
puts "PASS: clocks created"
# Generated clock
create_generated_clock -name gen_div2 -source [get_ports clk1] -divide_by 2 [get_pins reg1/Q]
puts "PASS: generated clock created"
# Delays
set_input_delay -clock clk1 2.0 [get_ports in1]
set_input_delay -clock clk1 1.5 [get_ports in2]
set_input_delay -clock clk1 1.8 [get_ports in3]
set_output_delay -clock clk1 3.0 [get_ports out1]
set_output_delay -clock clk2 2.5 [get_ports out2]
puts "PASS: delays set"
# Clock uncertainty
set_clock_uncertainty -setup 0.2 [get_clocks clk1]
set_clock_uncertainty -hold 0.1 [get_clocks clk1]
puts "PASS: uncertainty set"
# Clock latency
set_clock_latency -source 0.5 [get_clocks clk1]
set_clock_latency 0.3 [get_clocks clk2]
puts "PASS: latency set"
# Clock transition
set_clock_transition 0.1 [get_clocks clk1]
puts "PASS: transition set"
# Driving cell
set_driving_cell -lib_cell BUF_X1 [get_ports in1]
puts "PASS: driving cell set"
# Load
set_load 0.05 [get_ports out1]
set_load 0.04 [get_ports out2]
puts "PASS: load set"
# Input transition
set_input_transition 0.15 [get_ports in1]
puts "PASS: input transition set"
# False path
set_false_path -from [get_clocks clk1] -to [get_clocks clk2]
puts "PASS: false path set"
# Multicycle
set_multicycle_path -setup 2 -from [get_ports in1] -to [get_ports out1]
puts "PASS: multicycle set"
# Max/min delay
set_max_delay -from [get_ports in2] -to [get_ports out1] 8.0
puts "PASS: max delay set"
# Max transition/capacitance/fanout
set_max_transition 0.5 [current_design]
set_max_capacitance 0.2 [current_design]
set_max_fanout 20 [current_design]
puts "PASS: design limits set"
# Case analysis
set_case_analysis 0 [get_ports in3]
puts "PASS: case analysis set"
# Operating conditions
set_operating_conditions typical
puts "PASS: operating conditions set"
# Wire load
set_wire_load_model -name "5K_hvratio_1_1"
puts "PASS: wire load model set"
# Timing derate
set_timing_derate -early 0.95
set_timing_derate -late 1.05
puts "PASS: timing derate set"
# Propagated clock
set_propagated_clock [get_clocks clk1]
puts "PASS: propagated clock set"
############################################################
# Write SDC
############################################################
set sdc_file [make_result_file sdc_write_read.sdc]
write_sdc -no_timestamp $sdc_file
puts "PASS: write_sdc"
############################################################
# Clear and read back
############################################################
# Report before clear
report_checks -from [get_ports in1] -to [get_ports out1]
puts "PASS: report_checks before clear"
report_clock_properties
puts "PASS: report_clock_properties before clear"
puts "ALL PASSED"