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 | ###############################################################################
# Copyright (c) 2011-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
# Find Transistor Devices by Name
# @section
# Miscellaneous Userware Examples
# @description
# Search for transistor devices by name. The device might be moved to a
# new hierarchy created by the 'Recognize Gate' feature.
# @files
# findInst.tcl
# @example
# demo/spice/gl85.sp
# @cmdline
# -userware @files[0]
# -hspice @example[0]
# @tag
# spice
###############################################################################
# -----------------------------------------------------------------------------
# findInst -
# -----------------------------------------------------------------------------
#
proc findInst {instName moduleName} {
##
# Get the database.
#
set db [gui database get]
##
# Find the module given by moduleName.
#
set module [$db search module $moduleName]
if {[$db oid isnull $module]} {
error "Module '$moduleName' not found."
}
##
# Try to find the instance given by instName.
#
set transistor [$db search inst $module $instName]
##
# If the instance could not be found then do some extra work and try to
# find the instance in one of the modules created by recognize gate.
#
if {[$db oid isnull $transistor]} {
##
# Initialize the result OID with null.
#
set transistor null
##
# Loop over all instances in the module given as moduleName.
#
$db foreach inst $module inst {
##
# Skip all non hierarchical instances.
#
if {![$db isModule $inst]} {
continue
}
##
# Skip all instances where the name does not start with a 'G'.
#
if {![string match "G*" [$db oid oname $inst]]} {
continue
}
##
# Get the module this instance refers to.
#
set recognizeModule [$db moduleOf $inst]
##
# Search for the instance inside this module.
#
set transistor [$db search inst $recognizeModule $instName]
##
# Break the loop if the instance was found.
#
if {![$db oid isnull $transistor]} {
break
}
}
##
# Show an error if the instance was not found.
#
if {[$db oid isnull $transistor]} {
set msg "Cannot find instance '$instName' in a module "
append msg "created by recognizeGate."
error $msg
}
}
##
# Return the transistor instance OID.
#
return $transistor
}
|