# Auxiliary function:
# Converts DC collection to
TCL list
#-----------------------------------
proc c2l {collection}
{
set my_list {}
foreach_in_collection coll_element $collection {
set element [get_object_name $coll_element]
lappend my_list $element
}
return $my_list
}
# Auxiliary function:
# Deletes one list (or
element) from another list
# -----------------------------------------------
proc ldelete {list
list_to_del} {
foreach str $list_to_del {
set ix [lsearch -exact $list $str]
if {$ix >= 0} {set list [lreplace $list $ix $ix]}
}
return $list
}
# Reports about registered
input ports in design.
# Registered input port
should be connected to register only.
#
-----------------------------------------------
proc report_registered_inputs
{} {
foreach in [c2l [all_inputs]] {
set conn_pins [ldelete [c2l [all_connected $in]] $in]
if {[llength $conn_pins] == 1 && [lsearch $conn_pins
"*_reg*"] > -1} {
echo "
}
}
}
# Reports about registered
output ports in design.
# Registered output port
should be connected to register only.
# -----------------------------------------------
proc report_registered_outputs
{} {
foreach out [c2l [all_outputs]] {
set conn_pins [ldelete [c2l [all_connected $out]] $out]
if {[llength $conn_pins] == 2 && [lsearch $conn_pins
"*_reg*"] > -1} {
echo "
}
}
}
# Reports about disconnected
input ports in design
#
------------------------------------------------
proc report_disconnected_inputs
{} {
set data_inputs [remove_from_collection [all_inputs] [get_ports
[all_clocks]]]
foreach input [c2l $data_inputs] {
if {[llength [c2l [all_connected $input]]] <1} {
echo "$input input port is disconnected"
lappend ret_list $input
}
}
if {[info exists ret_list]} {return $ret_list}
}
# Reports about disconnected
output ports in design
#
------------------------------------------------
proc report_disconnected_outputs
{} {
foreach output [c2l [all_outputs]] {
if {[llength [c2l [all_connected $output]]] <1} {
echo "$output output port is disconnected"
lappend ret_list $output
}
}
if {[info exists ret_list]} {return $ret_list}
}
# Generates INPUT - TO - REGS Connectivity report
#====================================================================
proc in_to_regs_report {} {
puts
"\n\n INPUT -
TO - REGS REPORT"
puts
"|------------------------------------------------------------------|"
puts
[format "%-25s %-40s %-1s" "|INPUT NAME" "|RELATED
REGISTERS" "|"]
puts
[format "%-25s %-40s %-1s" "|=========="
"|=================" "|"]
puts
"|-------------------------|----------------------------------------|"
foreach_in_collection input [all_inputs] {
set
connected [all_fanout -from [get_object_name $input] -endpoints_only]
set conn_pins
[remove_from_collection $connected [all_outputs]]
if
{[sizeof_collection $conn_pins] > 0} {
set
conn_regs [c2l [cell_of $conn_pins]]
set in
[get_object_name $input]
puts
[format "%-25s %-40s %-1s" "| $in" "| [lindex
$conn_regs 0]" "|"]
for
{set i 1} {$i < [llength $conn_regs]} {incr i} {
puts
[format "%-25s %-40s %-1s" "|" "| [lindex $conn_regs
$i]" "|"]
}
puts
"|-------------------------|----------------------------------------|"
}
}
}
# Generates OUTPUT - TO - REGS Connectivity
report
#====================================================================
proc out_to_regs_report {} {
puts
"\n\n OUTPUT -
TO - REGS REPORT"
puts
"|------------------------------------------------------------------|"
puts
[format "%-25s %-40s %-1s" "|OUTPUT NAME" "|RELATED
REGISTERS" "|"]
puts
[format "%-25s %-40s %-1s" "|==========="
"|=================" "|"]
puts
"|-------------------------|----------------------------------------|"
foreach_in_collection output [all_outputs] {
set
connected [all_fanin -to [get_object_name $output] -startpoints_only]
set
conn_pins [remove_from_collection $connected [all_inputs]]
if
{[sizeof_collection $conn_pins] > 0} {
set
conn_regs [c2l [cell_of $conn_pins]]
set out
[get_object_name $output]
puts
[format "%-25s %-40s %-1s" "| $out" "| [lindex
$conn_regs 0]" "|"]
for
{set i 1} {$i < [llength $conn_regs]} {incr i} {
puts
[format "%-25s %-40s %-1s" "|" "| [lindex $conn_regs
$i]" "|"]
}
puts
"|-------------------------|----------------------------------------|"
}
}
}
# Generated Asynchronous path reports (Input
ports - to Output ports)
#====================================================================
proc in_to_out_report {} {
puts
"\n\n
ASYNCRONOUS PATHS REPORT"
puts
"|------------------------------------------------------------------|"
puts
[format "%-25s %-40s %-1s" "| FROM INPUT" "| TO
OUTPUT" "|"]
puts
[format "%-25s %-40s %-1s" "| ==========" "|
=========" "|"]
puts
"|-------------------------|----------------------------------------|"
foreach_in_collection input [all_inputs] {
set
conn_ports [get_ports [c2l [all_fanout -from [get_object_name $input]
-endpoints_only]] \
-filter
"@port_direction == out"]
if
{[sizeof_collection $conn_ports] > 0} {
set in
[get_object_name $input]
set
out_ports [c2l $conn_ports]
puts
[format "%-25s %-40s %-1s" "| $in" "| [lindex
$out_ports 0]" "|"]
for
{set i 1} {$i < [llength $out_ports]} {incr i} {
puts
[format "%-25s %-40s %-1s" "|" "| [lindex $out_ports
$i]" "|"]
}
puts
"|-------------------------|----------------------------------------|"
}
}
}