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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174 | ###############################################################################
# Copyright (c) 2016-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.
# =============================================================================
# @userware
# ERC Usage Example
# @section
# Create Reports
# @description
# Usage example for ERC:check02 "Floating Gates".
# @files
# erc/example.tcl
# @tag
# report
###############################################################################
set dir [file dirname [info script]]
source [file join $dir utils.tcl]
source [file join $dir check02.tcl]
# =============================================================================
# AddComment - Helper to add comment to object.
# =============================================================================
#
proc FloatingGates:AddComment {db oid comment} {
if {[$db oid isTopRoot $oid]} {
set attrCmd flatattr
} else {
set attrCmd attr
}
$db $attrCmd $oid set "@comment=$comment"
}
# -----------------------------------------------------------------------------
# details - Helper to generate detailed info.
# -----------------------------------------------------------------------------
#
proc FloatingGates:details {db inst} {
set name [$db oid print $inst -hiersep . -notype]
set str {}
append str "$name\n"
append str " Status: Floating gate\n"
append str " Connectivity:\n"
$db foreach pin $inst pin {
set pname [$db oid pname $pin]
if {[$db isConnected $pin]} {
set net [$db connectedNet $pin]
set sig [$db flat signalOf $net]
if {[$db flag $net is ground]} {
set pg ", gnd"
} elseif {[$db flag $net is power]} {
set pg ", pwr"
} else {
set pg ""
}
set nname [$db oid print $sig -hiersep . -notype]
} else {
set nname "unconnected"
}
append str " $pname: $nname$pg\n"
}
}
# -----------------------------------------------------------------------------
# intoMem - Put floating gates into memory tab.
# -----------------------------------------------------------------------------
#
proc FloatingGates:intoMem {} {
set db [gui database get]
if {$db == {}} {
zmessage print ERR "No database loaded."
return
}
zprogress begin
zprogress push "Find Floating Gates" 0.90
set res [ERC:Check02 $db]
if {[zprogress pop]} {
return
}
gui mem clear
zprogress push "Show Result" 1.0
set count [llength $res]
set i 0
set instList {}
foreach gatePin $res {
if {[zprogress update "" [incr i] $count]} {
break
}
set inst [$db oid convertTo inst $gatePin]
lappend instList $inst
set details [FloatingGates:details $db $inst]
FloatingGates:AddComment $db $inst $details
}
if {[zprogress pop]} {
return
}
zprogress end
gui mem append $instList
gui attribute changed
gui window show Mem
}
# -----------------------------------------------------------------------------
# writeReport - Get the name of the output file and generate report.
# -----------------------------------------------------------------------------
#
proc FloatingGates:writeReport {} {
set db [gui database get]
if {$db == {}} {
zmessage print ERR "No database loaded."
return
}
set filename \
[gui window fileDialog saveFile "Write Report" {{"Text Files" .txt}}]
if {$filename == ""} {
return
}
set fp [open $filename w]
zprogress begin
zprogress push "Find Floating Gates" 0.90
set res [ERC:Check02 $db]
if {[zprogress pop]} {
return
}
set no 1
zprogress push "Write Report" 1.0
set count [llength $res]
foreach gatePin $res {
set inst [$db oid convertTo inst $gatePin]
set details [FloatingGates:details $db $inst]
puts $fp "Dev #$no: $details"
incr no
if {[zprogress update "" $no $count]} {
break
}
}
zprogress pop
zprogress end
close $fp
}
# =============================================================================
# Add "Floating Gates" to a new Userware main menu.
# =============================================================================
#
gui menu command {"Userware" "Floating Gates into memory"} \
{FloatingGates:intoMem}
gui menu command {"Userware" "Floating Gates report"} \
{FloatingGates:writeReport}
|