121 lines
3.7 KiB
Tcl
121 lines
3.7 KiB
Tcl
# Test SDF re-read, annotation after constraint changes, and
|
|
# write-read roundtrip.
|
|
# Targets: SdfReader.cc (re-read/overwrite, unescaped paths)
|
|
# SdfWriter.cc (write after timing changes)
|
|
# ReportAnnotation.cc (unannotated entries with partial annotation)
|
|
|
|
source ../../test/helpers.tcl
|
|
set test_name sdf_reread_cond
|
|
|
|
read_liberty ../../test/nangate45/Nangate45_typ.lib
|
|
read_verilog sdf_test2.v
|
|
link_design sdf_test2
|
|
|
|
create_clock -name clk -period 10 [get_ports clk]
|
|
set_input_delay -clock clk 0 [get_ports d]
|
|
set_input_delay -clock clk 0 [get_ports en]
|
|
set_output_delay -clock clk 0 [get_ports q]
|
|
|
|
#---------------------------------------------------------------
|
|
# First read SDF
|
|
#---------------------------------------------------------------
|
|
puts "--- first read_sdf ---"
|
|
read_sdf sdf_test2.sdf
|
|
|
|
report_checks
|
|
|
|
#---------------------------------------------------------------
|
|
# Report annotation before re-read
|
|
#---------------------------------------------------------------
|
|
puts "--- report_annotated before re-read ---"
|
|
report_annotated_delay -cell -report_annotated
|
|
|
|
report_annotated_check -setup -report_annotated
|
|
|
|
report_annotated_delay -report_unannotated
|
|
|
|
report_annotated_check -report_unannotated
|
|
|
|
#---------------------------------------------------------------
|
|
# Write SDF (captures current state)
|
|
#---------------------------------------------------------------
|
|
puts "--- write_sdf before re-read ---"
|
|
set sdf_out1 [make_result_file "${test_name}_first.sdf"]
|
|
write_sdf $sdf_out1
|
|
|
|
set sdf_out1_typ [make_result_file "${test_name}_first_typ.sdf"]
|
|
write_sdf -include_typ $sdf_out1_typ
|
|
|
|
#---------------------------------------------------------------
|
|
# Re-read the same SDF (tests overwrite path)
|
|
#---------------------------------------------------------------
|
|
puts "--- re-read_sdf ---"
|
|
read_sdf sdf_test2.sdf
|
|
|
|
report_checks
|
|
|
|
report_annotated_delay
|
|
|
|
report_annotated_check
|
|
|
|
#---------------------------------------------------------------
|
|
# Read-write roundtrip: write SDF then read it back
|
|
#---------------------------------------------------------------
|
|
puts "--- write-read roundtrip ---"
|
|
set sdf_out2 [make_result_file "${test_name}_roundtrip.sdf"]
|
|
write_sdf -no_timestamp -no_version $sdf_out2
|
|
|
|
# Change design constraints and re-read
|
|
set_input_delay -clock clk 1.0 [get_ports d]
|
|
set_output_delay -clock clk 2.0 [get_ports q]
|
|
create_clock -name clk -period 5 [get_ports clk]
|
|
|
|
# Re-read the written SDF
|
|
read_sdf $sdf_out2
|
|
|
|
report_checks
|
|
|
|
report_annotated_delay -cell
|
|
|
|
report_annotated_check -setup -hold
|
|
|
|
#---------------------------------------------------------------
|
|
# Write SDF with different dividers and read back
|
|
#---------------------------------------------------------------
|
|
puts "--- write with dot divider ---"
|
|
set sdf_out3 [make_result_file "${test_name}_dot.sdf"]
|
|
write_sdf -divider . -no_timestamp -no_version $sdf_out3
|
|
|
|
#---------------------------------------------------------------
|
|
# Report annotation with max_lines variations
|
|
#---------------------------------------------------------------
|
|
puts "--- report_annotated_delay max_lines variations ---"
|
|
report_annotated_delay -max_lines 1
|
|
|
|
report_annotated_delay -max_lines 5
|
|
|
|
report_annotated_delay -max_lines 10
|
|
|
|
report_annotated_delay -max_lines 100
|
|
|
|
puts "--- report_annotated_check max_lines variations ---"
|
|
report_annotated_check -max_lines 1
|
|
|
|
report_annotated_check -max_lines 5
|
|
|
|
#---------------------------------------------------------------
|
|
# Gzip roundtrip
|
|
#---------------------------------------------------------------
|
|
puts "--- gzip write-read roundtrip ---"
|
|
set sdf_gz [make_result_file "${test_name}_gz.sdf.gz"]
|
|
write_sdf -gzip -no_timestamp $sdf_gz
|
|
|
|
# Read gzip SDF
|
|
set rc [catch { read_sdf $sdf_gz } msg]
|
|
if { $rc == 0 } {
|
|
} else {
|
|
puts "INFO: read gzip SDF: $msg"
|
|
}
|
|
|
|
report_checks
|