1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152 | ###############################################################################
# Copyright (c) 2012-2024 by Altair Engineering, Inc.
# All rights reserved.
#
# Altair Engineering, Inc. makes this software available as part of the Vision
# tool platform. As long as you are a licensee of the Vision tool platform
# you may make copies of the software and modify it to be used within the
# Vision tool platform, but you must include all of this notice on any copy.
# Redistribution without written permission to any third party, with or
# without modification, is not permitted.
# Altair Engineering, Inc. does not warrant that this software is error free
# or fit for any purpose. Altair Engineering, Inc. disclaims any liability for
# all claims, expenses, losses, damages and costs any user may incur as a
# result of using, copying or modifying the software.
# =============================================================================
# @script
# Dump Erc Reports
###############################################################################
# -----------------------------------------------------------------------------
# createErcReports - Dump a text file for each ERC check.
# -----------------------------------------------------------------------------
#
proc createErcReports {db} {
##
# First call 'floatingNodeReport' to create the floating node report.
#
floatingNodeReport $db "floatingNodeReport.txt"
##
# All other erc reports are using the '$db tools' command.
#
foreach ercTool {
heavyNodes
zeroDriverCheck
heavyCR
wrongBulk
cCoupling
multiDriverCheck
openGate
} {
##
# Call the '$db tools' command with the given erc tool.
#
set resList [$db tools $ercTool]
##
# Dump the result list to the a text file.
#
set reportFile "${ercTool}Report.txt"
set out [open $reportFile "w"]
set title "$ercTool report"
puts $out "$title\n[string repeat = [string length $title]]"
foreach oid $resList {
puts $out $oid
}
close $out
}
}
# -----------------------------------------------------------------------------
# floatingNodeReport - This procedure creates the floatingNodeReport.
# -----------------------------------------------------------------------------
#
proc floatingNodeReport {db reportFile} {
##
# Return if the database is empty.
#
if {$db == {}} {
return
}
##
# The result list array. Used to distinguish input and output nodes.
#
array set resList {input {} output {} inout {} unknown {}}
##
# Loop over all nets in all modules.
#
$db foreach module mod {
$db foreach net $mod net {
##
# Skip power, ground and negpower nets.
#
if {[$db isPgNet $net]} {
continue
}
##
# Skip nets with a value.
#
if {[$db value $net] != ""} {
continue
}
##
# Count the number of connected pins (stop counting if the net
# is connected to more than one pin.
#
set cnt 0
$db foreach pin $net pin {
if {[incr cnt] > 1} {
break
}
}
##
# If the net is exactly connected to one pin then it is a floating
# node - add it to the result list.
#
if {$cnt == 1} {
set dir [$db directionOf $pin]
lappend resList($dir) $net
}
}
}
##
# Dump the result list to the given report file.
#
set out [open $reportFile "w"]
foreach dir {input output inout unknown} {
##
# Skip empty results.
#
if {[llength $resList($dir)] == 0} {
continue
}
##
# Dump the result to the output file.
#
set title "Floating node report ($dir)"
puts $out "$title\n[string repeat = [string length $title]]"
foreach oid $resList($dir) {
puts $out $oid
}
}
close $out
}
##
# Use gui database runOrRegisterChangedCallback to immediately run
# createErcReports
# if we have a database, or otherwise register the proc to be executed after
# the database is available.
#
gui database runOrRegisterChangedCallback createErcReports
|