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 | ###############################################################################
# Copyright (c) 2021-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
# Connect two Selected Instances in the Cone
# @namespace
# ConnectTwoInsts
# @section
# GUI Specific Userware Examples
# @description
# Extend the popup menu and add an entry to add all direct connections
# between two selected instance in the Cone window.
# @files
# cust22/coneConnectTwoInsts.tcl
# @tag
# gui zdb
###############################################################################
# =============================================================================
# Init - Initialize the plugin.
# =============================================================================
#
proc ConnectTwoInsts:Init {} {
##
# Extend the popup menu and add and entry to connect the two selected
# instances in the Cone.
#
gui popup append \
{Connect Two Instances} \
{ConnectTwoInsts:Start} \
{-class Cone}
}
# =============================================================================
# Finit - Finalize the plugin.
# =============================================================================
#
proc ConnectTwoInsts:Finit {} {
gui popup remove {Connect Two Instances}
}
# =============================================================================
# Start - Start connecting two selected instances in the Cone.
# =============================================================================
#
proc ConnectTwoInsts:Start {oidList} {
set db [gui database get]
##
# Return if the database is empty.
#
if {$db == {}} {
return
}
##
# We expect exactly two instance objects in $oidList.
#
if {[llength $oidList] != 2} {
zmessage print ERR "Expect exactly 2 objects selected."
return
}
set inst1 [lindex $oidList 0]
set inst2 [lindex $oidList 1]
if {[$db oid type $inst1] ne "inst"} {
zmessage print ERR "Selected object 1 is not an instance."
return
}
if {[$db oid type $inst2] ne "inst"} {
zmessage print ERR "Selected object 2 is not an instance."
return
}
##
# Calculate and show the results.
#
set res [ConnectTwoInsts:_calculateConnection $db $inst1 $inst2]
gui cone append $res
}
# -----------------------------------------------------------------------------
# _calculateConnection - Calculate the connections between the two given
# instances.
# -----------------------------------------------------------------------------
#
proc ConnectTwoInsts:_calculateConnection {db inst1 inst2} {
array set _netTable {}
set pinList {}
##
# Loop over all pins of inst1 and fill a hash table with all connected
# nets as the key and the corresponding pin as the value.
#
$db foreach pin $inst1 pin {
if {[$db isConnected $pin]} {
set net [$db connectedNet $pin]
set _netTable($net) $pin
}
}
##
# Loop over all pins of inst2 and check if the connected net is already in
# the net hash table filled above.
#
$db foreach pin $inst2 pin {
if {[$db isConnected $pin]} {
set net [$db connectedNet $pin]
if {[info exists _netTable($net)]} {
lappend pinList $_netTable($net)
lappend pinList $pin
}
}
}
return $pinList
}
# =============================================================================
# Call the initialization procedure.
# =============================================================================
#
ConnectTwoInsts:Init
|