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 | ###############################################################################
# Copyright (c) 2022-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.
# =============================================================================
# @plugin
# Add Direct Connections
# @namespace
# AddDirectConnections
# @section
# GUI Specific Userware Examples
# @description
# Add a new main menu entry to loop over all objects loaded to the Cone
# window and automatically load all direct connections between objects.
# @files
# addDirectConnections.tcl
# @example
# demo/spice/buf.sp
# @cmdline
# -hspice @example[0]
# -userware @files[0]
# @tag
# gui
###############################################################################
# =============================================================================
# Init - Initialize the plugin.
# =============================================================================
#
proc AddDirectConnections:Init {} {
##
# Add a menu entry.
#
gui menu command {"Userware" "Add Direct Connections"} \
[list AddDirectConnections:Start]
}
# =============================================================================
# Finit - Finalize the plugin.
# =============================================================================
#
proc AddDirectConnections:Finit {} {
##
# Undo modifications of the GUI.
#
gui menu removeEntry {"Userware" "Add Direct Connections"}
}
# =============================================================================
# Start - Start finding direct connections.
# =============================================================================
#
proc AddDirectConnections:Start {} {
##
# Return if no database is available.
#
set db [gui database get]
if {$db == {}} {
return
}
##
# Process all object loaded to the Cone window and
# create a list containing only pin and port objects.
#
set pinList {}
foreach oid [gui cone contents] {
if {[$db oid type $oid] eq "inst"} {
$db foreach pin $oid pin {
lappend pinList $pin
}
}
if {[$db oid type $oid] eq "port"} {
lappend pinList $oid
}
if {[$db oid type $oid] eq "portBus"} {
$db foreach port $oid port {
lappend pinList $port
}
}
}
##
# Loop over all pin objects and investigate the connected net.
# Create a hast table with the net OID as the key and a list of all
# connected pin/port objects as the value.
#
array set _netTable {}
foreach pin $pinList {
if {![$db isConnected $pin]} {
continue
}
set net [$db connectedNet $pin]
if {[$db isPgNet $net]} {
continue
}
if {![info exists _netTable($net)]} {
set _netTable($net) {}
}
lappend _netTable($net) $pin
}
##
# Process the net -> pin table and load every net with two or more pins
# to the Cone window.
#
set pinList {}
foreach {net pins} [array get _netTable] {
if {[llength $pins] > 1} {
set pinList [concat $pinList $pins]
}
}
gui cone append $pinList
}
# =============================================================================
# Call the initialization procedure.
# =============================================================================
#
AddDirectConnections:Init
|