127 lines
5.3 KiB
Tcl
127 lines
5.3 KiB
Tcl
# Additional Property.cc tests - port slew/slack, liberty port, TimingArcSet
|
|
read_liberty ../../test/nangate45/Nangate45_typ.lib
|
|
read_verilog search_test1.v
|
|
link_design search_test1
|
|
|
|
create_clock -name clk -period 10 [get_ports clk]
|
|
set_input_delay -clock clk 1.0 [get_ports in1]
|
|
set_input_delay -clock clk 1.0 [get_ports in2]
|
|
set_output_delay -clock clk 2.0 [get_ports out1]
|
|
|
|
report_checks > /dev/null
|
|
|
|
puts "--- Port timing properties ---"
|
|
set port [get_ports in1]
|
|
puts "port direction: [get_property $port direction]"
|
|
puts "port port_direction: [get_property $port port_direction]"
|
|
puts "port slack_max: [get_property $port slack_max]"
|
|
puts "port slack_max_rise: [get_property $port slack_max_rise]"
|
|
puts "port slack_max_fall: [get_property $port slack_max_fall]"
|
|
puts "port slack_min: [get_property $port slack_min]"
|
|
puts "port slack_min_rise: [get_property $port slack_min_rise]"
|
|
puts "port slack_min_fall: [get_property $port slack_min_fall]"
|
|
puts "port slew_max: [get_property $port slew_max]"
|
|
puts "port slew_max_rise: [get_property $port slew_max_rise]"
|
|
puts "port slew_max_fall: [get_property $port slew_max_fall]"
|
|
puts "port slew_min: [get_property $port slew_min]"
|
|
puts "port slew_min_rise: [get_property $port slew_min_rise]"
|
|
puts "port slew_min_fall: [get_property $port slew_min_fall]"
|
|
puts "port activity: [get_property $port activity]"
|
|
set lp [get_property $port liberty_port]
|
|
if { $lp != "" && $lp != "NULL" } {
|
|
puts "port liberty_port: [get_name $lp]"
|
|
} else {
|
|
puts "port liberty_port: none"
|
|
}
|
|
|
|
puts "--- Output port properties ---"
|
|
set oport [get_ports out1]
|
|
puts "oport slack_max: [get_property $oport slack_max]"
|
|
puts "oport slack_min: [get_property $oport slack_min]"
|
|
puts "oport slew_max: [get_property $oport slew_max]"
|
|
puts "oport slew_min: [get_property $oport slew_min]"
|
|
|
|
puts "--- LibertyPort extra properties ---"
|
|
set lport [get_lib_pins NangateOpenCellLibrary/AND2_X1/ZN]
|
|
puts "lport name: [get_property $lport name]"
|
|
puts "lport full_name: [get_property $lport full_name]"
|
|
puts "lport direction: [get_property $lport direction]"
|
|
puts "lport capacitance: [get_property $lport capacitance]"
|
|
puts "lport is_register_clock: [get_property $lport is_register_clock]"
|
|
puts "lport is_clock: [get_property $lport is_clock]"
|
|
|
|
puts "--- LibertyCell extra properties ---"
|
|
set buf_cell [get_lib_cells NangateOpenCellLibrary/BUF_X1]
|
|
puts "buf is_buffer: [get_property $buf_cell is_buffer]"
|
|
set and_cell [get_lib_cells NangateOpenCellLibrary/AND2_X1]
|
|
puts "and is_buffer: [get_property $and_cell is_buffer]"
|
|
set dff_cell [get_lib_cells NangateOpenCellLibrary/DFF_X1]
|
|
puts "dff is_buffer: [get_property $dff_cell is_buffer]"
|
|
puts "dff area: [get_property $dff_cell area]"
|
|
|
|
puts "--- LibertyLibrary properties ---"
|
|
set lib [get_libs NangateOpenCellLibrary]
|
|
set lib_cell_property [get_property -object_type lib $lib name]
|
|
puts "lib by lib type: $lib_cell_property"
|
|
|
|
puts "--- Clock extra properties ---"
|
|
set clk_obj [get_clocks clk]
|
|
puts "clock is_propagated: [get_property $clk_obj is_propagated]"
|
|
|
|
puts "--- TimingArcSet property via LibertyCell ---"
|
|
set and_cell2 [get_lib_cells NangateOpenCellLibrary/AND2_X1]
|
|
set arcsets [$and_cell2 timing_arc_sets]
|
|
foreach arcset $arcsets {
|
|
set arcprop [sta::timing_arc_property $arcset full_name]
|
|
puts "arc_set full_name: $arcprop"
|
|
set arcprop2 [sta::timing_arc_property $arcset name]
|
|
puts "arc_set name: $arcprop2"
|
|
}
|
|
|
|
puts "--- Edge properties on different arc types ---"
|
|
# Setup check arcs
|
|
set ck_edges [get_timing_edges -from [get_pins reg1/CK]]
|
|
foreach edge $ck_edges {
|
|
puts "edge: [get_property $edge full_name] sense=[get_property $edge sense]"
|
|
}
|
|
|
|
puts "--- Edge properties on BUF arcs ---"
|
|
set buf_edges [get_timing_edges -from [get_pins buf1/A] -to [get_pins buf1/Z]]
|
|
foreach edge $buf_edges {
|
|
puts "buf edge: [get_property $edge full_name]"
|
|
puts "buf delay_max_rise: [get_property $edge delay_max_rise]"
|
|
puts "buf delay_max_fall: [get_property $edge delay_max_fall]"
|
|
}
|
|
|
|
puts "--- Slew check limits ---"
|
|
set_max_transition 0.1 [current_design]
|
|
# TODO: sta::check_slew_limits removed from SWIG interface; use report_slew_checks
|
|
# set slew_pins [sta::check_slew_limits "NULL" 1 "NULL" max]
|
|
# puts "Slew limit violations: [llength $slew_pins]"
|
|
# foreach p $slew_pins {
|
|
# sta::report_slew_limit_short_header
|
|
# sta::report_slew_limit_short $p "NULL" max
|
|
# sta::report_slew_limit_verbose $p "NULL" max
|
|
# break
|
|
# }
|
|
puts "Slew check limits: skipped (API removed)"
|
|
|
|
puts "--- Cap check limits ---"
|
|
# TODO: check_capacitance_limits, report_capacitance_limit_* removed from SWIG
|
|
puts "Cap limit violations: skipped (API removed)"
|
|
|
|
puts "--- Fanout check limits ---"
|
|
# TODO: check_fanout_limits, report_fanout_limit_* removed from SWIG
|
|
puts "Fanout limit violations: skipped (API removed)"
|
|
|
|
puts "--- Slew/Cap/Fanout check slack ---"
|
|
puts "Max slew check slack: [sta::max_slew_check_slack]"
|
|
puts "Max slew check limit: [sta::max_slew_check_limit]"
|
|
puts "Max cap check slack: [sta::max_capacitance_check_slack]"
|
|
puts "Max cap check limit: [sta::max_capacitance_check_limit]"
|
|
puts "Max fanout check slack: [sta::max_fanout_check_slack]"
|
|
puts "Max fanout check limit: [sta::max_fanout_check_limit]"
|
|
puts "Max slew violation count: [sta::max_slew_violation_count]"
|
|
puts "Max cap violation count: [sta::max_capacitance_violation_count]"
|
|
puts "Max fanout violation count: [sta::max_fanout_violation_count]"
|