pyedb 0.38.0__py3-none-any.whl → 0.39.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyedb might be problematic. Click here for more details.
- pyedb/__init__.py +1 -1
- pyedb/common/nets.py +53 -139
- pyedb/configuration/cfg_components.py +1 -1
- pyedb/configuration/cfg_general.py +4 -2
- pyedb/configuration/cfg_modeler.py +1 -1
- pyedb/configuration/cfg_package_definition.py +1 -1
- pyedb/configuration/cfg_padstacks.py +1 -1
- pyedb/configuration/cfg_ports_sources.py +56 -23
- pyedb/configuration/configuration.py +18 -1
- pyedb/dotnet/{application → database}/Variables.py +21 -21
- pyedb/dotnet/{edb_core → database}/cell/connectable.py +5 -5
- pyedb/dotnet/{edb_core → database}/cell/hierarchy/component.py +11 -11
- pyedb/dotnet/{edb_core → database}/cell/hierarchy/hierarchy_obj.py +1 -1
- pyedb/dotnet/{edb_core → database}/cell/hierarchy/model.py +1 -1
- pyedb/dotnet/{edb_core → database}/cell/layout.py +17 -17
- pyedb/dotnet/{edb_core → database}/cell/layout_obj.py +3 -3
- pyedb/dotnet/{edb_core → database}/cell/primitive/bondwire.py +1 -1
- pyedb/dotnet/{edb_core → database}/cell/primitive/path.py +4 -4
- pyedb/dotnet/{edb_core → database}/cell/primitive/primitive.py +14 -14
- pyedb/dotnet/{edb_core → database}/cell/terminal/bundle_terminal.py +2 -2
- pyedb/dotnet/{edb_core → database}/cell/terminal/edge_terminal.py +4 -4
- pyedb/dotnet/{edb_core → database}/cell/terminal/padstack_instance_terminal.py +2 -2
- pyedb/dotnet/{edb_core → database}/cell/terminal/pingroup_terminal.py +2 -2
- pyedb/dotnet/{edb_core → database}/cell/terminal/point_terminal.py +2 -2
- pyedb/dotnet/{edb_core → database}/cell/terminal/terminal.py +11 -11
- pyedb/dotnet/{edb_core → database}/cell/voltage_regulator.py +2 -2
- pyedb/dotnet/{edb_core → database}/components.py +101 -124
- pyedb/dotnet/{edb_core → database}/definition/component_def.py +5 -5
- pyedb/dotnet/{edb_core → database}/definition/component_model.py +1 -1
- pyedb/dotnet/{edb_core → database}/definition/definition_obj.py +1 -1
- pyedb/dotnet/{edb_core → database}/definition/definitions.py +2 -2
- pyedb/dotnet/{edb_core → database}/definition/package_def.py +4 -4
- pyedb/dotnet/{edb_core → database}/dotnet/database.py +8 -8
- pyedb/dotnet/{edb_core → database}/dotnet/primitive.py +9 -9
- pyedb/dotnet/{edb_core → database}/edb_data/control_file.py +12 -12
- pyedb/dotnet/{edb_core → database}/edb_data/hfss_extent_info.py +7 -7
- pyedb/dotnet/{edb_core → database}/edb_data/nets_data.py +10 -13
- pyedb/dotnet/{edb_core → database}/edb_data/padstacks_data.py +16 -16
- pyedb/dotnet/{edb_core → database}/edb_data/ports.py +4 -4
- pyedb/dotnet/{edb_core → database}/edb_data/primitives_data.py +5 -5
- pyedb/dotnet/{edb_core → database}/edb_data/raptor_x_simulation_setup_data.py +4 -4
- pyedb/dotnet/{edb_core → database}/edb_data/simulation_configuration.py +10 -10
- pyedb/dotnet/{edb_core → database}/edb_data/sources.py +4 -4
- pyedb/dotnet/{edb_core → database}/edb_data/variables.py +1 -1
- pyedb/dotnet/{edb_core → database}/geometry/polygon_data.py +4 -4
- pyedb/dotnet/{edb_core → database}/hfss.py +8 -8
- pyedb/dotnet/{edb_core → database}/layout_obj_instance.py +1 -1
- pyedb/dotnet/{edb_core → database}/layout_validation.py +2 -2
- pyedb/dotnet/{edb_core → database}/materials.py +23 -8
- pyedb/dotnet/{edb_core → database}/modeler.py +27 -27
- pyedb/dotnet/{edb_core → database}/net_class.py +8 -8
- pyedb/dotnet/{edb_core → database}/nets.py +12 -12
- pyedb/dotnet/{edb_core → database}/padstack.py +15 -15
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/mesh_operation.py +1 -1
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/settings.py +3 -3
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/sim_setup_info.py +2 -2
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/simulation_settings.py +1 -1
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/siw_dc_ir_settings.py +1 -1
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/sweep_data.py +1 -1
- pyedb/dotnet/{edb_core → database}/siwave.py +10 -10
- pyedb/dotnet/{edb_core → database}/stackup.py +12 -12
- pyedb/dotnet/{edb_core → database}/utilities/hfss_simulation_setup.py +15 -15
- pyedb/dotnet/{edb_core → database}/utilities/obj_base.py +1 -1
- pyedb/dotnet/{edb_core → database}/utilities/simulation_setup.py +3 -3
- pyedb/dotnet/{edb_core → database}/utilities/siwave_simulation_setup.py +6 -6
- pyedb/dotnet/edb.py +117 -112
- pyedb/generic/design_types.py +26 -19
- pyedb/generic/general_methods.py +1 -1
- pyedb/generic/plot.py +0 -2
- pyedb/grpc/database/__init__.py +1 -0
- pyedb/grpc/database/components.py +2354 -0
- pyedb/grpc/database/control_file.py +1277 -0
- pyedb/grpc/database/definition/component_def.py +218 -0
- pyedb/grpc/database/definition/component_model.py +39 -0
- pyedb/grpc/database/definition/component_pin.py +32 -0
- pyedb/grpc/database/definition/materials.py +1207 -0
- pyedb/grpc/database/definition/n_port_component_model.py +34 -0
- pyedb/grpc/database/definition/package_def.py +227 -0
- pyedb/grpc/database/definition/padstack_def.py +842 -0
- pyedb/grpc/database/definitions.py +70 -0
- pyedb/grpc/database/general.py +43 -0
- pyedb/grpc/database/geometry/__init__.py +0 -0
- pyedb/grpc/database/geometry/arc_data.py +93 -0
- pyedb/grpc/database/geometry/point_3d_data.py +79 -0
- pyedb/grpc/database/geometry/point_data.py +30 -0
- pyedb/grpc/database/geometry/polygon_data.py +133 -0
- pyedb/grpc/database/hfss.py +1279 -0
- pyedb/grpc/database/hierarchy/__init__.py +0 -0
- pyedb/grpc/database/hierarchy/component.py +1301 -0
- pyedb/grpc/database/hierarchy/model.py +31 -0
- pyedb/grpc/database/hierarchy/netlist_model.py +30 -0
- pyedb/grpc/database/hierarchy/pin_pair_model.py +128 -0
- pyedb/grpc/database/hierarchy/pingroup.py +245 -0
- pyedb/grpc/database/hierarchy/s_parameter_model.py +33 -0
- pyedb/grpc/database/hierarchy/spice_model.py +48 -0
- pyedb/grpc/database/layers/__init__.py +0 -0
- pyedb/grpc/database/layers/layer.py +57 -0
- pyedb/grpc/database/layers/stackup_layer.py +410 -0
- pyedb/grpc/database/layout/__init__.py +0 -0
- pyedb/grpc/database/layout/cell.py +30 -0
- pyedb/grpc/database/layout/layout.py +196 -0
- pyedb/grpc/database/layout/voltage_regulator.py +149 -0
- pyedb/grpc/database/layout_validation.py +319 -0
- pyedb/grpc/database/modeler.py +1468 -0
- pyedb/grpc/database/net/__init__.py +0 -0
- pyedb/grpc/database/net/differential_pair.py +138 -0
- pyedb/grpc/database/net/extended_net.py +340 -0
- pyedb/grpc/database/net/net.py +198 -0
- pyedb/grpc/database/net/net_class.py +93 -0
- pyedb/grpc/database/nets.py +633 -0
- pyedb/grpc/database/padstacks.py +1500 -0
- pyedb/grpc/database/ports/__init__.py +0 -0
- pyedb/grpc/database/ports/ports.py +396 -0
- pyedb/grpc/database/primitive/__init__.py +3 -0
- pyedb/grpc/database/primitive/bondwire.py +181 -0
- pyedb/grpc/database/primitive/circle.py +75 -0
- pyedb/grpc/database/primitive/padstack_instance.py +1116 -0
- pyedb/grpc/database/primitive/path.py +346 -0
- pyedb/grpc/database/primitive/polygon.py +276 -0
- pyedb/grpc/database/primitive/primitive.py +739 -0
- pyedb/grpc/database/primitive/rectangle.py +146 -0
- pyedb/grpc/database/simulation_setup/__init__.py +0 -0
- pyedb/grpc/database/simulation_setup/adaptive_frequency.py +33 -0
- pyedb/grpc/database/simulation_setup/hfss_advanced_meshing_settings.py +32 -0
- pyedb/grpc/database/simulation_setup/hfss_advanced_settings.py +59 -0
- pyedb/grpc/database/simulation_setup/hfss_dcr_settings.py +35 -0
- pyedb/grpc/database/simulation_setup/hfss_general_settings.py +61 -0
- pyedb/grpc/database/simulation_setup/hfss_settings_options.py +78 -0
- pyedb/grpc/database/simulation_setup/hfss_simulation_settings.py +118 -0
- pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +355 -0
- pyedb/grpc/database/simulation_setup/hfss_solver_settings.py +34 -0
- pyedb/grpc/database/simulation_setup/mesh_operation.py +34 -0
- pyedb/grpc/database/simulation_setup/raptor_x_advanced_settings.py +34 -0
- pyedb/grpc/database/simulation_setup/raptor_x_general_settings.py +33 -0
- pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py +64 -0
- pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py +125 -0
- pyedb/grpc/database/simulation_setup/siwave_dcir_simulation_setup.py +34 -0
- pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +119 -0
- pyedb/grpc/database/simulation_setup/sweep_data.py +32 -0
- pyedb/grpc/database/siwave.py +1023 -0
- pyedb/grpc/database/source_excitations.py +2572 -0
- pyedb/grpc/database/stackup.py +2574 -0
- pyedb/grpc/database/terminal/__init__.py +0 -0
- pyedb/grpc/database/terminal/bundle_terminal.py +218 -0
- pyedb/grpc/database/terminal/edge_terminal.py +51 -0
- pyedb/grpc/database/terminal/padstack_instance_terminal.py +171 -0
- pyedb/grpc/database/terminal/pingroup_terminal.py +162 -0
- pyedb/grpc/database/terminal/point_terminal.py +99 -0
- pyedb/grpc/database/terminal/terminal.py +470 -0
- pyedb/grpc/database/utility/__init__.py +3 -0
- pyedb/grpc/database/utility/constants.py +25 -0
- pyedb/grpc/database/utility/heat_sink.py +124 -0
- pyedb/grpc/database/utility/hfss_extent_info.py +448 -0
- pyedb/grpc/database/utility/layout_statistics.py +277 -0
- pyedb/grpc/database/utility/rlc.py +80 -0
- pyedb/grpc/database/utility/simulation_configuration.py +3305 -0
- pyedb/grpc/database/utility/sources.py +388 -0
- pyedb/grpc/database/utility/sweep_data_distribution.py +83 -0
- pyedb/grpc/database/utility/xml_control_file.py +1277 -0
- pyedb/grpc/edb.py +4152 -0
- pyedb/grpc/edb_init.py +481 -0
- pyedb/grpc/rpc_session.py +177 -0
- pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +3 -2
- pyedb/ipc2581/ecad/cad_data/feature.py +4 -3
- pyedb/ipc2581/ecad/cad_data/layer_feature.py +32 -20
- pyedb/ipc2581/ecad/cad_data/outline.py +3 -2
- pyedb/ipc2581/ecad/cad_data/package.py +4 -3
- pyedb/ipc2581/ecad/cad_data/path.py +82 -31
- pyedb/ipc2581/ecad/cad_data/polygon.py +122 -60
- pyedb/ipc2581/ecad/cad_data/profile.py +13 -12
- pyedb/ipc2581/ecad/cad_data/step.py +53 -21
- pyedb/ipc2581/ipc2581.py +47 -49
- pyedb/modeler/geometry_operators.py +1 -1
- {pyedb-0.38.0.dist-info → pyedb-0.39.1.dist-info}/METADATA +5 -2
- pyedb-0.39.1.dist-info/RECORD +288 -0
- pyedb-0.38.0.dist-info/RECORD +0 -195
- /pyedb/dotnet/{edb_core → database}/__init__.py +0 -0
- /pyedb/dotnet/{application → database/cell}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/cell → database/cell/hierarchy}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/hierarchy/netlist_model.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/hierarchy/pin_pair_model.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/hierarchy/s_parameter_model.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/hierarchy/spice_model.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/primitive/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/cell/hierarchy → database/cell/terminal}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/cell/terminal → database/definition}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/definition → database/dotnet}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/dotnet → database/edb_data}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/edb_data/design_options.py +0 -0
- /pyedb/dotnet/{edb_core → database}/edb_data/edbvalue.py +0 -0
- /pyedb/dotnet/{edb_core → database}/edb_data/layer_data.py +0 -0
- /pyedb/dotnet/{edb_core → database}/edb_data/utilities.py +0 -0
- /pyedb/dotnet/{edb_core → database}/general.py +0 -0
- /pyedb/dotnet/{edb_core/edb_data → database/geometry}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/geometry/point_data.py +0 -0
- /pyedb/dotnet/{edb_core → database}/sim_setup_data/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/sim_setup_data/data/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/sim_setup_data/data/adaptive_frequency_data.py +0 -0
- /pyedb/dotnet/{edb_core/geometry → database/sim_setup_data/io}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/sim_setup_data/io/siwave.py +0 -0
- /pyedb/dotnet/{edb_core → database}/utilities/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/utilities/heatsink.py +0 -0
- /pyedb/{dotnet/edb_core/sim_setup_data/io → grpc/database/definition}/__init__.py +0 -0
- {pyedb-0.38.0.dist-info → pyedb-0.39.1.dist-info}/LICENSE +0 -0
- {pyedb-0.38.0.dist-info → pyedb-0.39.1.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,1023 @@
|
|
|
1
|
+
# Copyright (C) 2023 - 2024 ANSYS, Inc. and/or its affiliates.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
#
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
# furnished to do so, subject to the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
# copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
# SOFTWARE.
|
|
22
|
+
|
|
23
|
+
"""
|
|
24
|
+
This module contains these classes: ``CircuitPort``, ``CurrentSource``, ``EdbSiwave``,
|
|
25
|
+
``PinGroup``, ``ResistorSource``, ``Source``, ``SourceType``, and ``VoltageSource``.
|
|
26
|
+
"""
|
|
27
|
+
import os
|
|
28
|
+
import warnings
|
|
29
|
+
|
|
30
|
+
from ansys.edb.core.database import ProductIdType as GrpcProductIdType
|
|
31
|
+
from ansys.edb.core.simulation_setup.simulation_setup import SweepData as GrpcSweepData
|
|
32
|
+
|
|
33
|
+
from pyedb.misc.siw_feature_config.xtalk_scan.scan_config import SiwaveScanConfig
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class Siwave(object):
|
|
37
|
+
"""Manages EDB methods related to Siwave Setup accessible from `Edb.siwave` property.
|
|
38
|
+
|
|
39
|
+
Parameters
|
|
40
|
+
----------
|
|
41
|
+
edb_class : :class:`pyedb.edb.Edb`
|
|
42
|
+
Inherited parent object.
|
|
43
|
+
|
|
44
|
+
Examples
|
|
45
|
+
--------
|
|
46
|
+
>>> from pyedb import Edb
|
|
47
|
+
>>> edbapp = Edb("myaedbfolder", edbversion="2021.2")
|
|
48
|
+
>>> edb_siwave = edbapp.siwave
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
def __init__(self, p_edb):
|
|
52
|
+
self._pedb = p_edb
|
|
53
|
+
|
|
54
|
+
@property
|
|
55
|
+
def _edb(self):
|
|
56
|
+
"""EDB."""
|
|
57
|
+
return self._pedb
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
def _logger(self):
|
|
61
|
+
"""EDB."""
|
|
62
|
+
return self._pedb.logger
|
|
63
|
+
|
|
64
|
+
@property
|
|
65
|
+
def _active_layout(self):
|
|
66
|
+
"""Active layout."""
|
|
67
|
+
return self._pedb.active_layout
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def _layout(self):
|
|
71
|
+
"""Active layout."""
|
|
72
|
+
return self._pedb.layout
|
|
73
|
+
|
|
74
|
+
@property
|
|
75
|
+
def _cell(self):
|
|
76
|
+
"""Cell."""
|
|
77
|
+
return self._pedb.active_cell
|
|
78
|
+
|
|
79
|
+
@property
|
|
80
|
+
def _db(self):
|
|
81
|
+
""" """
|
|
82
|
+
return self._pedb.active_db
|
|
83
|
+
|
|
84
|
+
@property
|
|
85
|
+
def excitations(self):
|
|
86
|
+
"""Get all excitations."""
|
|
87
|
+
return self._pedb.excitations
|
|
88
|
+
|
|
89
|
+
@property
|
|
90
|
+
def sources(self):
|
|
91
|
+
"""Get all sources."""
|
|
92
|
+
return self._pedb.sources
|
|
93
|
+
|
|
94
|
+
@property
|
|
95
|
+
def probes(self):
|
|
96
|
+
"""Get all probes."""
|
|
97
|
+
return self._pedb.probes
|
|
98
|
+
|
|
99
|
+
@property
|
|
100
|
+
def pin_groups(self):
|
|
101
|
+
"""All Layout Pin groups.
|
|
102
|
+
|
|
103
|
+
Returns
|
|
104
|
+
-------
|
|
105
|
+
list
|
|
106
|
+
List of all layout pin groups.
|
|
107
|
+
"""
|
|
108
|
+
_pingroups = {}
|
|
109
|
+
for el in self._pedb.layout.pin_groups:
|
|
110
|
+
_pingroups[el.name] = el
|
|
111
|
+
return _pingroups
|
|
112
|
+
|
|
113
|
+
def _create_terminal_on_pins(self, source):
|
|
114
|
+
"""Create a terminal on pins.
|
|
115
|
+
. deprecated:: pyedb 0.28.0
|
|
116
|
+
Use :func:`pyedb.grpc.core.excitations._create_terminal_on_pins` instead.
|
|
117
|
+
|
|
118
|
+
Parameters
|
|
119
|
+
----------
|
|
120
|
+
source : VoltageSource, CircuitPort, CurrentSource or ResistorSource
|
|
121
|
+
Name of the source.
|
|
122
|
+
|
|
123
|
+
"""
|
|
124
|
+
warnings.warn(
|
|
125
|
+
"`_create_terminal_on_pins` is deprecated and is now located here "
|
|
126
|
+
"`pyedb.grpc.core.excitations._create_terminal_on_pins` instead.",
|
|
127
|
+
DeprecationWarning,
|
|
128
|
+
)
|
|
129
|
+
return self._pedb.source_excitation._create_terminal_on_pins(source)
|
|
130
|
+
|
|
131
|
+
def create_circuit_port_on_pin(self, pos_pin, neg_pin, impedance=50, port_name=None):
|
|
132
|
+
"""Create a circuit port on a pin.
|
|
133
|
+
|
|
134
|
+
. deprecated:: pyedb 0.28.0
|
|
135
|
+
Use :func:`pyedb.grpc.core.excitations.create_circuit_port_on_pin` instead.
|
|
136
|
+
|
|
137
|
+
Parameters
|
|
138
|
+
----------
|
|
139
|
+
pos_pin : Object
|
|
140
|
+
Edb Pin
|
|
141
|
+
neg_pin : Object
|
|
142
|
+
Edb Pin
|
|
143
|
+
impedance : float
|
|
144
|
+
Port Impedance
|
|
145
|
+
port_name : str, optional
|
|
146
|
+
Port Name
|
|
147
|
+
|
|
148
|
+
Returns
|
|
149
|
+
-------
|
|
150
|
+
str
|
|
151
|
+
Port Name.
|
|
152
|
+
"""
|
|
153
|
+
warnings.warn(
|
|
154
|
+
"`create_circuit_port_on_pin` is deprecated and is now located here "
|
|
155
|
+
"`pyedb.grpc.core.excitations.create_circuit_port_on_pin` instead.",
|
|
156
|
+
DeprecationWarning,
|
|
157
|
+
)
|
|
158
|
+
return self._pedb.source_excitation.create_circuit_port_on_pin(pos_pin, neg_pin, impedance, port_name)
|
|
159
|
+
|
|
160
|
+
def create_port_between_pin_and_layer(
|
|
161
|
+
self, component_name=None, pins_name=None, layer_name=None, reference_net=None, impedance=50.0
|
|
162
|
+
):
|
|
163
|
+
"""Create circuit port between pin and a reference layer.
|
|
164
|
+
|
|
165
|
+
. deprecated:: pyedb 0.28.0
|
|
166
|
+
Use :func:`pyedb.grpc.core.excitations.create_port_between_pin_and_layer` instead.
|
|
167
|
+
|
|
168
|
+
Parameters
|
|
169
|
+
----------
|
|
170
|
+
component_name : str
|
|
171
|
+
Component name. The default is ``None``.
|
|
172
|
+
pins_name : str
|
|
173
|
+
Pin name or list of pin names. The default is ``None``.
|
|
174
|
+
layer_name : str
|
|
175
|
+
Layer name. The default is ``None``.
|
|
176
|
+
reference_net : str
|
|
177
|
+
Reference net name. The default is ``None``.
|
|
178
|
+
impedance : float, optional
|
|
179
|
+
Port impedance. The default is ``50.0`` in ohms.
|
|
180
|
+
|
|
181
|
+
Returns
|
|
182
|
+
-------
|
|
183
|
+
PadstackInstanceTerminal
|
|
184
|
+
Created terminal.
|
|
185
|
+
"""
|
|
186
|
+
warnings.warn(
|
|
187
|
+
"`create_port_between_pin_and_layer` is deprecated and is now located here "
|
|
188
|
+
"`pyedb.grpc.core.excitations.create_port_between_pin_and_layer` instead.",
|
|
189
|
+
DeprecationWarning,
|
|
190
|
+
)
|
|
191
|
+
return self._pedb.source_excitation.create_port_between_pin_and_layer(
|
|
192
|
+
component_name, pins_name, layer_name, reference_net, impedance
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
def create_voltage_source_on_pin(self, pos_pin, neg_pin, voltage_value=3.3, phase_value=0, source_name=""):
|
|
196
|
+
"""Create a voltage source.
|
|
197
|
+
. deprecated:: pyedb 0.28.0
|
|
198
|
+
Use :func:`pyedb.grpc.core.excitations.create_voltage_source_on_pin` instead.
|
|
199
|
+
|
|
200
|
+
Parameters
|
|
201
|
+
----------
|
|
202
|
+
pos_pin : Object
|
|
203
|
+
Positive Pin.
|
|
204
|
+
neg_pin : Object
|
|
205
|
+
Negative Pin.
|
|
206
|
+
voltage_value : float, optional
|
|
207
|
+
Value for the voltage. The default is ``3.3``.
|
|
208
|
+
phase_value : optional
|
|
209
|
+
Value for the phase. The default is ``0``.
|
|
210
|
+
source_name : str, optional
|
|
211
|
+
Name of the source. The default is ``""``.
|
|
212
|
+
|
|
213
|
+
Returns
|
|
214
|
+
-------
|
|
215
|
+
str
|
|
216
|
+
Source Name.
|
|
217
|
+
"""
|
|
218
|
+
|
|
219
|
+
warnings.warn(
|
|
220
|
+
"`create_voltage_source_on_pin` is deprecated and is now located here "
|
|
221
|
+
"`pyedb.grpc.core.excitations.create_voltage_source_on_pin` instead.",
|
|
222
|
+
DeprecationWarning,
|
|
223
|
+
)
|
|
224
|
+
return self._pedb.source_excitation.create_voltage_source_on_pin(
|
|
225
|
+
pos_pin, neg_pin, voltage_value, phase_value, source_name
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
def create_current_source_on_pin(self, pos_pin, neg_pin, current_value=0.1, phase_value=0, source_name=""):
|
|
229
|
+
"""Create a current source.
|
|
230
|
+
|
|
231
|
+
. deprecated:: pyedb 0.28.0
|
|
232
|
+
Use :func:`pyedb.grpc.core.excitations.create_current_source_on_pin` instead.
|
|
233
|
+
|
|
234
|
+
Parameters
|
|
235
|
+
----------
|
|
236
|
+
pos_pin : Object
|
|
237
|
+
Positive pin.
|
|
238
|
+
neg_pin : Object
|
|
239
|
+
Negative pin.
|
|
240
|
+
current_value : float, optional
|
|
241
|
+
Value for the current. The default is ``0.1``.
|
|
242
|
+
phase_value : optional
|
|
243
|
+
Value for the phase. The default is ``0``.
|
|
244
|
+
source_name : str, optional
|
|
245
|
+
Name of the source. The default is ``""``.
|
|
246
|
+
|
|
247
|
+
Returns
|
|
248
|
+
-------
|
|
249
|
+
str
|
|
250
|
+
Source Name.
|
|
251
|
+
"""
|
|
252
|
+
warnings.warn(
|
|
253
|
+
"`create_current_source_on_pin` is deprecated and is now located here "
|
|
254
|
+
"`pyedb.grpc.core.excitations.create_current_source_on_pin` instead.",
|
|
255
|
+
DeprecationWarning,
|
|
256
|
+
)
|
|
257
|
+
return self._pedb.source_excitation.create_current_source_on_pin(
|
|
258
|
+
pos_pin, neg_pin, current_value, phase_value, source_name
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
def create_resistor_on_pin(self, pos_pin, neg_pin, rvalue=1, resistor_name=""):
|
|
262
|
+
"""Create a Resistor boundary between two given pins.
|
|
263
|
+
|
|
264
|
+
. deprecated:: pyedb 0.28.0
|
|
265
|
+
Use :func:`pyedb.grpc.core.excitations.create_resistor_on_pin` instead.
|
|
266
|
+
|
|
267
|
+
Parameters
|
|
268
|
+
----------
|
|
269
|
+
pos_pin : Object
|
|
270
|
+
Positive Pin.
|
|
271
|
+
neg_pin : Object
|
|
272
|
+
Negative Pin.
|
|
273
|
+
rvalue : float, optional
|
|
274
|
+
Resistance value. The default is ``1``.
|
|
275
|
+
resistor_name : str, optional
|
|
276
|
+
Name of the resistor. The default is ``""``.
|
|
277
|
+
|
|
278
|
+
Returns
|
|
279
|
+
-------
|
|
280
|
+
str
|
|
281
|
+
Name of the resistor.
|
|
282
|
+
"""
|
|
283
|
+
warnings.warn(
|
|
284
|
+
"`create_resistor_on_pin` is deprecated and is now located here "
|
|
285
|
+
"`pyedb.grpc.core.excitations.create_resistor_on_pin` instead.",
|
|
286
|
+
DeprecationWarning,
|
|
287
|
+
)
|
|
288
|
+
return self._pedb.source_excitation.create_resistor_on_pin(pos_pin, neg_pin, rvalue, resistor_name)
|
|
289
|
+
|
|
290
|
+
def _check_gnd(self, component_name):
|
|
291
|
+
"""
|
|
292
|
+
. deprecated:: pyedb 0.28.0
|
|
293
|
+
Use :func:`pyedb.grpc.core.excitations._check_gnd` instead.
|
|
294
|
+
|
|
295
|
+
"""
|
|
296
|
+
warnings.warn(
|
|
297
|
+
"`_check_gnd` is deprecated and is now located here " "`pyedb.grpc.core.excitations._check_gnd` instead.",
|
|
298
|
+
DeprecationWarning,
|
|
299
|
+
)
|
|
300
|
+
return self._pedb.source_excitation._check_gnd(component_name)
|
|
301
|
+
|
|
302
|
+
def create_circuit_port_on_net(
|
|
303
|
+
self,
|
|
304
|
+
positive_component_name,
|
|
305
|
+
positive_net_name,
|
|
306
|
+
negative_component_name=None,
|
|
307
|
+
negative_net_name=None,
|
|
308
|
+
impedance_value=50,
|
|
309
|
+
port_name="",
|
|
310
|
+
):
|
|
311
|
+
"""Create a circuit port on a NET.
|
|
312
|
+
|
|
313
|
+
. deprecated:: pyedb 0.28.0
|
|
314
|
+
Use :func:`pyedb.grpc.core.excitations.create_circuit_port_on_net` instead.
|
|
315
|
+
|
|
316
|
+
It groups all pins belonging to the specified net and then applies the port on PinGroups.
|
|
317
|
+
|
|
318
|
+
Parameters
|
|
319
|
+
----------
|
|
320
|
+
positive_component_name : str
|
|
321
|
+
Name of the positive component.
|
|
322
|
+
positive_net_name : str
|
|
323
|
+
Name of the positive net.
|
|
324
|
+
negative_component_name : str, optional
|
|
325
|
+
Name of the negative component. The default is ``None``, in which case the name of
|
|
326
|
+
the positive net is assigned.
|
|
327
|
+
negative_net_name : str, optional
|
|
328
|
+
Name of the negative net name. The default is ``None`` which will look for GND Nets.
|
|
329
|
+
impedance_value : float, optional
|
|
330
|
+
Port impedance value. The default is ``50``.
|
|
331
|
+
port_name : str, optional
|
|
332
|
+
Name of the port. The default is ``""``.
|
|
333
|
+
|
|
334
|
+
Returns
|
|
335
|
+
-------
|
|
336
|
+
str
|
|
337
|
+
The name of the port.
|
|
338
|
+
|
|
339
|
+
"""
|
|
340
|
+
warnings.warn(
|
|
341
|
+
"`create_circuit_port_on_net` is deprecated and is now located here "
|
|
342
|
+
"`pyedb.grpc.core.source_excitation.create_circuit_port_on_net` instead.",
|
|
343
|
+
DeprecationWarning,
|
|
344
|
+
)
|
|
345
|
+
return self._pedb.source_excitation.create_circuit_port_on_net(
|
|
346
|
+
positive_component_name,
|
|
347
|
+
positive_net_name,
|
|
348
|
+
negative_component_name,
|
|
349
|
+
negative_net_name,
|
|
350
|
+
impedance_value,
|
|
351
|
+
port_name,
|
|
352
|
+
)
|
|
353
|
+
|
|
354
|
+
def create_voltage_source_on_net(
|
|
355
|
+
self,
|
|
356
|
+
positive_component_name,
|
|
357
|
+
positive_net_name,
|
|
358
|
+
negative_component_name=None,
|
|
359
|
+
negative_net_name=None,
|
|
360
|
+
voltage_value=3.3,
|
|
361
|
+
phase_value=0,
|
|
362
|
+
source_name="",
|
|
363
|
+
):
|
|
364
|
+
"""Create a voltage source.
|
|
365
|
+
|
|
366
|
+
. deprecated:: pyedb 0.28.0
|
|
367
|
+
Use :func:`pyedb.grpc.core.excitations.create_voltage_source_on_net` instead.
|
|
368
|
+
|
|
369
|
+
Parameters
|
|
370
|
+
----------
|
|
371
|
+
positive_component_name : str
|
|
372
|
+
Name of the positive component.
|
|
373
|
+
positive_net_name : str
|
|
374
|
+
Name of the positive net.
|
|
375
|
+
negative_component_name : str, optional
|
|
376
|
+
Name of the negative component. The default is ``None``, in which case the name of
|
|
377
|
+
the positive net is assigned.
|
|
378
|
+
negative_net_name : str, optional
|
|
379
|
+
Name of the negative net name. The default is ``None`` which will look for GND Nets.
|
|
380
|
+
voltage_value : float, optional
|
|
381
|
+
Value for the voltage. The default is ``3.3``.
|
|
382
|
+
phase_value : optional
|
|
383
|
+
Value for the phase. The default is ``0``.
|
|
384
|
+
source_name : str, optional
|
|
385
|
+
Name of the source. The default is ``""``.
|
|
386
|
+
|
|
387
|
+
Returns
|
|
388
|
+
-------
|
|
389
|
+
str
|
|
390
|
+
The name of the source.
|
|
391
|
+
|
|
392
|
+
"""
|
|
393
|
+
warnings.warn(
|
|
394
|
+
"`create_voltage_source_on_net` is deprecated and is now located here "
|
|
395
|
+
"`pyedb.grpc.core.excitations.create_voltage_source_on_net` instead.",
|
|
396
|
+
DeprecationWarning,
|
|
397
|
+
)
|
|
398
|
+
return self._pedb.source_excitation.create_voltage_source_on_net(
|
|
399
|
+
positive_component_name,
|
|
400
|
+
positive_net_name,
|
|
401
|
+
negative_component_name,
|
|
402
|
+
negative_net_name,
|
|
403
|
+
voltage_value,
|
|
404
|
+
phase_value,
|
|
405
|
+
source_name,
|
|
406
|
+
)
|
|
407
|
+
|
|
408
|
+
def create_current_source_on_net(
|
|
409
|
+
self,
|
|
410
|
+
positive_component_name,
|
|
411
|
+
positive_net_name,
|
|
412
|
+
negative_component_name=None,
|
|
413
|
+
negative_net_name=None,
|
|
414
|
+
current_value=0.1,
|
|
415
|
+
phase_value=0,
|
|
416
|
+
source_name="",
|
|
417
|
+
):
|
|
418
|
+
"""Create a current source.
|
|
419
|
+
|
|
420
|
+
. deprecated:: pyedb 0.28.0
|
|
421
|
+
Use :func:`pyedb.grpc.core.excitations.create_current_source_on_net` instead.
|
|
422
|
+
|
|
423
|
+
Parameters
|
|
424
|
+
----------
|
|
425
|
+
positive_component_name : str
|
|
426
|
+
Name of the positive component.
|
|
427
|
+
positive_net_name : str
|
|
428
|
+
Name of the positive net.
|
|
429
|
+
negative_component_name : str, optional
|
|
430
|
+
Name of the negative component. The default is ``None``, in which case the name of
|
|
431
|
+
the positive net is assigned.
|
|
432
|
+
negative_net_name : str, optional
|
|
433
|
+
Name of the negative net name. The default is ``None`` which will look for GND Nets.
|
|
434
|
+
current_value : float, optional
|
|
435
|
+
Value for the current. The default is ``0.1``.
|
|
436
|
+
phase_value : optional
|
|
437
|
+
Value for the phase. The default is ``0``.
|
|
438
|
+
source_name : str, optional
|
|
439
|
+
Name of the source. The default is ``""``.
|
|
440
|
+
|
|
441
|
+
Returns
|
|
442
|
+
-------
|
|
443
|
+
str
|
|
444
|
+
The name of the source.
|
|
445
|
+
"""
|
|
446
|
+
warnings.warn(
|
|
447
|
+
"`create_current_source_on_net` is deprecated and is now located here "
|
|
448
|
+
"`pyedb.grpc.core.excitations.create_current_source_on_net` instead.",
|
|
449
|
+
DeprecationWarning,
|
|
450
|
+
)
|
|
451
|
+
return self._pedb.source_excitation.create_current_source_on_net(
|
|
452
|
+
positive_component_name,
|
|
453
|
+
positive_net_name,
|
|
454
|
+
negative_component_name,
|
|
455
|
+
negative_net_name,
|
|
456
|
+
current_value,
|
|
457
|
+
phase_value,
|
|
458
|
+
source_name,
|
|
459
|
+
)
|
|
460
|
+
|
|
461
|
+
def create_dc_terminal(
|
|
462
|
+
self,
|
|
463
|
+
component_name,
|
|
464
|
+
net_name,
|
|
465
|
+
source_name="",
|
|
466
|
+
):
|
|
467
|
+
"""Create a dc terminal.
|
|
468
|
+
|
|
469
|
+
. deprecated:: pyedb 0.28.0
|
|
470
|
+
Use :func:`pyedb.grpc.core.excitations.create_dc_terminal` instead.
|
|
471
|
+
|
|
472
|
+
Parameters
|
|
473
|
+
----------
|
|
474
|
+
component_name : str
|
|
475
|
+
Name of the positive component.
|
|
476
|
+
net_name : str
|
|
477
|
+
Name of the positive net.
|
|
478
|
+
|
|
479
|
+
source_name : str, optional
|
|
480
|
+
Name of the source. The default is ``""``.
|
|
481
|
+
|
|
482
|
+
Returns
|
|
483
|
+
-------
|
|
484
|
+
str
|
|
485
|
+
The name of the source.
|
|
486
|
+
"""
|
|
487
|
+
warnings.warn(
|
|
488
|
+
"`create_dc_terminal` is deprecated and is now located here "
|
|
489
|
+
"`pyedb.grpc.core.excitations.create_dc_terminal` instead.",
|
|
490
|
+
DeprecationWarning,
|
|
491
|
+
)
|
|
492
|
+
return self._pedb.source_excitation.create_dc_terminal(component_name, net_name, source_name)
|
|
493
|
+
|
|
494
|
+
def create_exec_file(
|
|
495
|
+
self, add_dc=False, add_ac=False, add_syz=False, export_touchstone=False, touchstone_file_path=""
|
|
496
|
+
):
|
|
497
|
+
"""Create an executable file.
|
|
498
|
+
|
|
499
|
+
Parameters
|
|
500
|
+
----------
|
|
501
|
+
add_dc : bool, optional
|
|
502
|
+
Whether to add the DC option in the EXE file. The default is ``False``.
|
|
503
|
+
add_ac : bool, optional
|
|
504
|
+
Whether to add the AC option in the EXE file. The default is
|
|
505
|
+
``False``.
|
|
506
|
+
add_syz : bool, optional
|
|
507
|
+
Whether to add the SYZ option in the EXE file
|
|
508
|
+
export_touchstone : bool, optional
|
|
509
|
+
Add the Touchstone file export option in the EXE file.
|
|
510
|
+
The default is ``False``.
|
|
511
|
+
touchstone_file_path : str, optional
|
|
512
|
+
File path for the Touchstone file. The default is ``""``. When no path is
|
|
513
|
+
specified and ``export_touchstone=True``, the path for the project is
|
|
514
|
+
used.
|
|
515
|
+
"""
|
|
516
|
+
workdir = os.path.dirname(self._pedb.edbpath)
|
|
517
|
+
file_name = os.path.join(workdir, os.path.splitext(os.path.basename(self._pedb.edbpath))[0] + ".exec")
|
|
518
|
+
if os.path.isfile(file_name):
|
|
519
|
+
os.remove(file_name)
|
|
520
|
+
with open(file_name, "w") as f:
|
|
521
|
+
if add_ac:
|
|
522
|
+
f.write("ExecAcSim\n")
|
|
523
|
+
if add_dc:
|
|
524
|
+
f.write("ExecDcSim\n")
|
|
525
|
+
if add_syz:
|
|
526
|
+
f.write("ExecSyzSim\n")
|
|
527
|
+
if export_touchstone:
|
|
528
|
+
if touchstone_file_path: # pragma no cover
|
|
529
|
+
f.write('ExportTouchstone "{}"\n'.format(touchstone_file_path))
|
|
530
|
+
else: # pragma no cover
|
|
531
|
+
touchstone_file_path = os.path.join(
|
|
532
|
+
workdir, os.path.splitext(os.path.basename(self._pedb.edbpath))[0] + "_touchstone"
|
|
533
|
+
)
|
|
534
|
+
f.write('ExportTouchstone "{}"\n'.format(touchstone_file_path))
|
|
535
|
+
f.write("SaveSiw\n")
|
|
536
|
+
|
|
537
|
+
return True if os.path.exists(file_name) else False
|
|
538
|
+
|
|
539
|
+
def add_siwave_syz_analysis(
|
|
540
|
+
self,
|
|
541
|
+
accuracy_level=1,
|
|
542
|
+
distribution="linear",
|
|
543
|
+
start_freq=1,
|
|
544
|
+
stop_freq=1e9,
|
|
545
|
+
step_freq=1e6,
|
|
546
|
+
discrete_sweep=False,
|
|
547
|
+
):
|
|
548
|
+
"""Add a SIwave AC analysis to EDB.
|
|
549
|
+
|
|
550
|
+
Parameters
|
|
551
|
+
----------
|
|
552
|
+
accuracy_level : int, optional
|
|
553
|
+
Level of accuracy of SI slider. The default is ``1``.
|
|
554
|
+
distribution : str, optional
|
|
555
|
+
Type of the sweep. The default is `"linear"`. Options are:
|
|
556
|
+
- `"linear"`
|
|
557
|
+
- `"linear_count"`
|
|
558
|
+
- `"decade_count"`
|
|
559
|
+
- `"octave_count"`
|
|
560
|
+
- `"exponential"`
|
|
561
|
+
start_freq : str, float, optional
|
|
562
|
+
Starting frequency. The default is ``1``.
|
|
563
|
+
stop_freq : str, float, optional
|
|
564
|
+
Stopping frequency. The default is ``1e9``.
|
|
565
|
+
step_freq : str, float, int, optional
|
|
566
|
+
Frequency step. The default is ``1e6``. or used for `"decade_count"`, "linear_count"`, "octave_count"`
|
|
567
|
+
distribution. Must be integer in that case.
|
|
568
|
+
discrete_sweep : bool, optional
|
|
569
|
+
Whether the sweep is discrete. The default is ``False``.
|
|
570
|
+
|
|
571
|
+
Returns
|
|
572
|
+
-------
|
|
573
|
+
:class:`pyedb.dotnet.database.edb_data.siwave_simulation_setup_data.SiwaveSYZSimulationSetup`
|
|
574
|
+
Setup object class.
|
|
575
|
+
"""
|
|
576
|
+
setup = self._pedb.create_siwave_syz_setup()
|
|
577
|
+
start_freq = self._pedb.number_with_units(start_freq, "Hz")
|
|
578
|
+
stop_freq = self._pedb.number_with_units(stop_freq, "Hz")
|
|
579
|
+
setup.settings.general.si_slider_pos = accuracy_level
|
|
580
|
+
if distribution.lower() == "linear":
|
|
581
|
+
distribution = "LIN"
|
|
582
|
+
elif distribution.lower() == "linear_count":
|
|
583
|
+
distribution = "LINC"
|
|
584
|
+
elif distribution.lower() == "exponential":
|
|
585
|
+
distribution = "ESTP"
|
|
586
|
+
elif distribution.lower() == "decade_count":
|
|
587
|
+
distribution = "DEC"
|
|
588
|
+
elif distribution.lower() == "octave_count":
|
|
589
|
+
distribution = "OCT"
|
|
590
|
+
else:
|
|
591
|
+
distribution = "LIN"
|
|
592
|
+
sweep_name = f"sweep_{len(setup.sweep_data) + 1}"
|
|
593
|
+
sweep_data = [
|
|
594
|
+
GrpcSweepData(
|
|
595
|
+
name=sweep_name, distribution=distribution, start_f=start_freq, end_f=stop_freq, step=step_freq
|
|
596
|
+
)
|
|
597
|
+
]
|
|
598
|
+
if discrete_sweep:
|
|
599
|
+
sweep_data[0].type = sweep_data[0].type.DISCRETE_SWEEP
|
|
600
|
+
for sweep in setup.sweep_data:
|
|
601
|
+
sweep_data.append(sweep)
|
|
602
|
+
setup.sweep_data = sweep_data
|
|
603
|
+
self.create_exec_file(add_ac=True)
|
|
604
|
+
return setup
|
|
605
|
+
|
|
606
|
+
def add_siwave_dc_analysis(self, name=None):
|
|
607
|
+
"""Add a Siwave DC analysis in EDB.
|
|
608
|
+
|
|
609
|
+
If a setup is present, it is deleted and replaced with
|
|
610
|
+
actual settings.
|
|
611
|
+
|
|
612
|
+
.. note::
|
|
613
|
+
Source Reference to Ground settings works only from 2021.2
|
|
614
|
+
|
|
615
|
+
Parameters
|
|
616
|
+
----------
|
|
617
|
+
name : str, optional
|
|
618
|
+
Setup name.
|
|
619
|
+
|
|
620
|
+
Returns
|
|
621
|
+
-------
|
|
622
|
+
:class:`pyedb.dotnet.database.edb_data.siwave_simulation_setup_data.SiwaveDCSimulationSetup`
|
|
623
|
+
Setup object class.
|
|
624
|
+
|
|
625
|
+
Examples
|
|
626
|
+
--------
|
|
627
|
+
>>> from pyedb import Edb
|
|
628
|
+
>>> edb = Edb("pathtoaedb", edbversion="2021.2")
|
|
629
|
+
>>> edb.siwave.add_siwave_ac_analysis()
|
|
630
|
+
>>> edb.siwave.add_siwave_dc_analysis2("my_setup")
|
|
631
|
+
|
|
632
|
+
"""
|
|
633
|
+
setup = self._pedb.create_siwave_dc_setup(name)
|
|
634
|
+
self.create_exec_file(add_dc=True)
|
|
635
|
+
return setup
|
|
636
|
+
|
|
637
|
+
def create_pin_group_terminal(self, source):
|
|
638
|
+
"""Create a pin group terminal.
|
|
639
|
+
|
|
640
|
+
. deprecated:: pyedb 0.28.0
|
|
641
|
+
Use :func:`pyedb.grpc.core.excitations.create_pin_group_terminal` instead.
|
|
642
|
+
|
|
643
|
+
Parameters
|
|
644
|
+
----------
|
|
645
|
+
source : VoltageSource, CircuitPort, CurrentSource, DCTerminal or ResistorSource
|
|
646
|
+
Name of the source.
|
|
647
|
+
|
|
648
|
+
"""
|
|
649
|
+
warnings.warn(
|
|
650
|
+
"`create_pin_group_terminal` is deprecated and is now located here "
|
|
651
|
+
"`pyedb.grpc.core.excitations.create_pin_group_terminal` instead.",
|
|
652
|
+
DeprecationWarning,
|
|
653
|
+
)
|
|
654
|
+
return self._pedb.source_excitation.create_pin_group_terminal(source)
|
|
655
|
+
|
|
656
|
+
def create_rlc_component(
|
|
657
|
+
self,
|
|
658
|
+
pins,
|
|
659
|
+
component_name="",
|
|
660
|
+
r_value=1.0,
|
|
661
|
+
c_value=1e-9,
|
|
662
|
+
l_value=1e-9,
|
|
663
|
+
is_parallel=False,
|
|
664
|
+
):
|
|
665
|
+
"""Create physical Rlc component.
|
|
666
|
+
|
|
667
|
+
. deprecated:: pyedb 0.28.0
|
|
668
|
+
Use :func:`pyedb.grpc.core.components.create_pin_group_terminal` instead.
|
|
669
|
+
|
|
670
|
+
Parameters
|
|
671
|
+
----------
|
|
672
|
+
pins : list[Edb.Cell.Primitive.PadstackInstance]
|
|
673
|
+
List of EDB pins.
|
|
674
|
+
|
|
675
|
+
component_name : str
|
|
676
|
+
Component name.
|
|
677
|
+
|
|
678
|
+
r_value : float
|
|
679
|
+
Resistor value.
|
|
680
|
+
|
|
681
|
+
c_value : float
|
|
682
|
+
Capacitance value.
|
|
683
|
+
|
|
684
|
+
l_value : float
|
|
685
|
+
Inductor value.
|
|
686
|
+
|
|
687
|
+
is_parallel : bool
|
|
688
|
+
Using parallel model when ``True``, series when ``False``.
|
|
689
|
+
|
|
690
|
+
Returns
|
|
691
|
+
-------
|
|
692
|
+
class:`pyedb.dotnet.database.components.Components`
|
|
693
|
+
Created EDB component.
|
|
694
|
+
|
|
695
|
+
"""
|
|
696
|
+
warnings.warn(
|
|
697
|
+
"`create_rlc_component` is deprecated and is now located here "
|
|
698
|
+
"`pyedb.grpc.core.components.create_rlc_component` instead.",
|
|
699
|
+
DeprecationWarning,
|
|
700
|
+
)
|
|
701
|
+
return self._pedb.components.create(
|
|
702
|
+
pins,
|
|
703
|
+
component_name=component_name,
|
|
704
|
+
is_rlc=True,
|
|
705
|
+
r_value=r_value,
|
|
706
|
+
c_value=c_value,
|
|
707
|
+
l_value=l_value,
|
|
708
|
+
is_parallel=is_parallel,
|
|
709
|
+
) # pragma no cover
|
|
710
|
+
|
|
711
|
+
def create_pin_group(self, reference_designator, pin_numbers, group_name=None):
|
|
712
|
+
"""Create pin group on the component.
|
|
713
|
+
|
|
714
|
+
. deprecated:: pyedb 0.28.0
|
|
715
|
+
Use :func:`pyedb.grpc.core.components.create_pin_group_terminal` instead.
|
|
716
|
+
|
|
717
|
+
Parameters
|
|
718
|
+
----------
|
|
719
|
+
reference_designator : str
|
|
720
|
+
References designator of the component.
|
|
721
|
+
pin_numbers : int, str, list
|
|
722
|
+
List of pin names.
|
|
723
|
+
group_name : str, optional
|
|
724
|
+
Name of the pin group.
|
|
725
|
+
|
|
726
|
+
Returns
|
|
727
|
+
-------
|
|
728
|
+
PinGroup
|
|
729
|
+
"""
|
|
730
|
+
warnings.warn(
|
|
731
|
+
"`create_pin_group` is deprecated and is now located here "
|
|
732
|
+
"`pyedb.grpc.core.components.create_pin_group` instead.",
|
|
733
|
+
DeprecationWarning,
|
|
734
|
+
)
|
|
735
|
+
return self._pedb.components.create_pin_group(reference_designator, pin_numbers, group_name)
|
|
736
|
+
|
|
737
|
+
def create_pin_group_on_net(self, reference_designator, net_name, group_name=None):
|
|
738
|
+
"""Create pin group on component by net name.
|
|
739
|
+
|
|
740
|
+
. deprecated:: pyedb 0.28.0
|
|
741
|
+
Use :func:`pyedb.grpc.core.components.create_pin_group_terminal` instead.
|
|
742
|
+
|
|
743
|
+
Parameters
|
|
744
|
+
----------
|
|
745
|
+
reference_designator : str
|
|
746
|
+
References designator of the component.
|
|
747
|
+
net_name : str
|
|
748
|
+
Name of the net.
|
|
749
|
+
group_name : str, optional
|
|
750
|
+
Name of the pin group. The default value is ``None``.
|
|
751
|
+
|
|
752
|
+
Returns
|
|
753
|
+
-------
|
|
754
|
+
PinGroup
|
|
755
|
+
"""
|
|
756
|
+
warnings.warn(
|
|
757
|
+
"`create_pin_group_on_net` is deprecated and is now located here "
|
|
758
|
+
"`pyedb.grpc.core.components.create_pin_group_on_net` instead.",
|
|
759
|
+
DeprecationWarning,
|
|
760
|
+
)
|
|
761
|
+
return self._pedb.components.create_pin_group_on_net(reference_designator, net_name, group_name)
|
|
762
|
+
|
|
763
|
+
def create_current_source_on_pin_group(
|
|
764
|
+
self, pos_pin_group_name, neg_pin_group_name, magnitude=1, phase=0, name=None
|
|
765
|
+
):
|
|
766
|
+
"""Create current source between two pin groups.
|
|
767
|
+
|
|
768
|
+
.deprecated:: pyedb 0.28.0
|
|
769
|
+
Use: func:`pyedb.grpc.core.excitations.create_current_source_on_pin_group`
|
|
770
|
+
instead.
|
|
771
|
+
|
|
772
|
+
Parameters
|
|
773
|
+
----------
|
|
774
|
+
pos_pin_group_name : str
|
|
775
|
+
Name of the positive pin group.
|
|
776
|
+
neg_pin_group_name : str
|
|
777
|
+
Name of the negative pin group.
|
|
778
|
+
magnitude : int, float, optional
|
|
779
|
+
Magnitude of the source.
|
|
780
|
+
phase : int, float, optional
|
|
781
|
+
Phase of the source
|
|
782
|
+
name : str, optional
|
|
783
|
+
source name.
|
|
784
|
+
|
|
785
|
+
Returns
|
|
786
|
+
-------
|
|
787
|
+
bool
|
|
788
|
+
|
|
789
|
+
"""
|
|
790
|
+
warnings.warn(
|
|
791
|
+
"`create_current_source_on_pin_group` is deprecated and is now located here "
|
|
792
|
+
"`pyedb.grpc.core.excitations.create_current_source_on_pin_group` instead.",
|
|
793
|
+
DeprecationWarning,
|
|
794
|
+
)
|
|
795
|
+
return self._pedb.source_excitation.create_current_source_on_pin_group(
|
|
796
|
+
pos_pin_group_name, neg_pin_group_name, magnitude, phase, name
|
|
797
|
+
)
|
|
798
|
+
|
|
799
|
+
def create_voltage_source_on_pin_group(
|
|
800
|
+
self, pos_pin_group_name, neg_pin_group_name, magnitude=1, phase=0, name=None, impedance=0.001
|
|
801
|
+
):
|
|
802
|
+
"""Create voltage source between two pin groups.
|
|
803
|
+
|
|
804
|
+
.deprecated:: pyedb 0.28.0
|
|
805
|
+
Use: func:`pyedb.grpc.core.excitations.create_voltage_source_on_pin_group`
|
|
806
|
+
instead.
|
|
807
|
+
|
|
808
|
+
Parameters
|
|
809
|
+
----------
|
|
810
|
+
pos_pin_group_name : str
|
|
811
|
+
Name of the positive pin group.
|
|
812
|
+
neg_pin_group_name : str
|
|
813
|
+
Name of the negative pin group.
|
|
814
|
+
magnitude : int, float, optional
|
|
815
|
+
Magnitude of the source.
|
|
816
|
+
phase : int, float, optional
|
|
817
|
+
Phase of the source
|
|
818
|
+
|
|
819
|
+
Returns
|
|
820
|
+
-------
|
|
821
|
+
bool
|
|
822
|
+
|
|
823
|
+
"""
|
|
824
|
+
warnings.warn(
|
|
825
|
+
"`create_voltage_source_on_pin_group` is deprecated and is now located here "
|
|
826
|
+
"`pyedb.grpc.core.excitations.create_voltage_source_on_pin_group` instead.",
|
|
827
|
+
DeprecationWarning,
|
|
828
|
+
)
|
|
829
|
+
return self._pedb.source_excitation.create_voltage_source_on_pin_group(
|
|
830
|
+
pos_pin_group_name, neg_pin_group_name, magnitude, phase, name, impedance
|
|
831
|
+
)
|
|
832
|
+
|
|
833
|
+
def create_voltage_probe_on_pin_group(self, probe_name, pos_pin_group_name, neg_pin_group_name, impedance=1e6):
|
|
834
|
+
"""Create voltage probe between two pin groups.
|
|
835
|
+
|
|
836
|
+
.deprecated:: pyedb 0.28.0
|
|
837
|
+
Use: func:`pyedb.grpc.core.excitations.create_voltage_probe_on_pin_group`
|
|
838
|
+
instead.
|
|
839
|
+
|
|
840
|
+
Parameters
|
|
841
|
+
----------
|
|
842
|
+
probe_name : str
|
|
843
|
+
Name of the probe.
|
|
844
|
+
pos_pin_group_name : str
|
|
845
|
+
Name of the positive pin group.
|
|
846
|
+
neg_pin_group_name : str
|
|
847
|
+
Name of the negative pin group.
|
|
848
|
+
impedance : int, float, optional
|
|
849
|
+
Phase of the source.
|
|
850
|
+
|
|
851
|
+
Returns
|
|
852
|
+
-------
|
|
853
|
+
bool
|
|
854
|
+
|
|
855
|
+
"""
|
|
856
|
+
|
|
857
|
+
warnings.warn(
|
|
858
|
+
"`create_voltage_probe_on_pin_group` is deprecated and is now located here "
|
|
859
|
+
"`pyedb.grpc.core.excitations.create_voltage_probe_on_pin_group` instead.",
|
|
860
|
+
DeprecationWarning,
|
|
861
|
+
)
|
|
862
|
+
return self._pedb.source_excitation.create_voltage_probe_on_pin_group(
|
|
863
|
+
probe_name, pos_pin_group_name, neg_pin_group_name, impedance=impedance
|
|
864
|
+
)
|
|
865
|
+
|
|
866
|
+
def create_circuit_port_on_pin_group(self, pos_pin_group_name, neg_pin_group_name, impedance=50, name=None):
|
|
867
|
+
"""Create a port between two pin groups.
|
|
868
|
+
|
|
869
|
+
.deprecated:: pyedb 0.28.0
|
|
870
|
+
Use: func:`pyedb.grpc.core.excitations.create_circuit_port_on_pin_group`
|
|
871
|
+
instead.
|
|
872
|
+
|
|
873
|
+
Parameters
|
|
874
|
+
----------
|
|
875
|
+
pos_pin_group_name : str
|
|
876
|
+
Name of the positive pin group.
|
|
877
|
+
neg_pin_group_name : str
|
|
878
|
+
Name of the negative pin group.
|
|
879
|
+
impedance : int, float, optional
|
|
880
|
+
Impedance of the port. Default is ``50``.
|
|
881
|
+
name : str, optional
|
|
882
|
+
Port name.
|
|
883
|
+
|
|
884
|
+
Returns
|
|
885
|
+
-------
|
|
886
|
+
bool
|
|
887
|
+
|
|
888
|
+
"""
|
|
889
|
+
warnings.warn(
|
|
890
|
+
"`create_circuit_port_on_pin_group` is deprecated and is now located here "
|
|
891
|
+
"`pyedb.grpc.core.excitations.create_circuit_port_on_pin_group` instead.",
|
|
892
|
+
DeprecationWarning,
|
|
893
|
+
)
|
|
894
|
+
return self._pedb.source_excitation.create_circuit_port_on_pin_group(
|
|
895
|
+
pos_pin_group_name, neg_pin_group_name, impedance, name
|
|
896
|
+
)
|
|
897
|
+
|
|
898
|
+
def place_voltage_probe(
|
|
899
|
+
self,
|
|
900
|
+
name,
|
|
901
|
+
positive_net_name,
|
|
902
|
+
positive_location,
|
|
903
|
+
positive_layer,
|
|
904
|
+
negative_net_name,
|
|
905
|
+
negative_location,
|
|
906
|
+
negative_layer,
|
|
907
|
+
):
|
|
908
|
+
"""Place a voltage probe between two points.
|
|
909
|
+
|
|
910
|
+
.deprecated:: pyedb 0.28.0
|
|
911
|
+
Use: func:`pyedb.grpc.core.excitations.place_voltage_probe`
|
|
912
|
+
instead.
|
|
913
|
+
|
|
914
|
+
Parameters
|
|
915
|
+
----------
|
|
916
|
+
name : str,
|
|
917
|
+
Name of the probe.
|
|
918
|
+
positive_net_name : str
|
|
919
|
+
Name of the positive net.
|
|
920
|
+
positive_location : list
|
|
921
|
+
Location of the positive terminal.
|
|
922
|
+
positive_layer : str,
|
|
923
|
+
Layer of the positive terminal.
|
|
924
|
+
negative_net_name : str,
|
|
925
|
+
Name of the negative net.
|
|
926
|
+
negative_location : list
|
|
927
|
+
Location of the negative terminal.
|
|
928
|
+
negative_layer : str
|
|
929
|
+
Layer of the negative terminal.
|
|
930
|
+
"""
|
|
931
|
+
warnings.warn(
|
|
932
|
+
"`place_voltage_probe` is deprecated and is now located here "
|
|
933
|
+
"`pyedb.grpc.core.excitations.place_voltage_probe` instead.",
|
|
934
|
+
DeprecationWarning,
|
|
935
|
+
)
|
|
936
|
+
return self._pedb.source_excitation.place_voltage_probe(
|
|
937
|
+
name,
|
|
938
|
+
positive_net_name,
|
|
939
|
+
positive_location,
|
|
940
|
+
positive_layer,
|
|
941
|
+
negative_net_name,
|
|
942
|
+
negative_location,
|
|
943
|
+
negative_layer,
|
|
944
|
+
)
|
|
945
|
+
|
|
946
|
+
# def create_vrm_module(
|
|
947
|
+
# self,
|
|
948
|
+
# name=None,
|
|
949
|
+
# is_active=True,
|
|
950
|
+
# voltage="3V",
|
|
951
|
+
# positive_sensor_pin=None,
|
|
952
|
+
# negative_sensor_pin=None,
|
|
953
|
+
# load_regulation_current="1A",
|
|
954
|
+
# load_regulation_percent=0.1,
|
|
955
|
+
# ):
|
|
956
|
+
# """Create a voltage regulator module.
|
|
957
|
+
#
|
|
958
|
+
# Parameters
|
|
959
|
+
# ----------
|
|
960
|
+
# name : str
|
|
961
|
+
# Name of the voltage regulator.
|
|
962
|
+
# is_active : bool optional
|
|
963
|
+
# Set the voltage regulator active or not. Default value is ``True``.
|
|
964
|
+
# voltage ; str, float
|
|
965
|
+
# Set the voltage value.
|
|
966
|
+
# positive_sensor_pin : int, .class pyedb.dotnet.database.edb_data.padstacks_data.EDBPadstackInstance
|
|
967
|
+
# defining the positive sensor pin.
|
|
968
|
+
# negative_sensor_pin : int, .class pyedb.dotnet.database.edb_data.padstacks_data.EDBPadstackInstance
|
|
969
|
+
# defining the negative sensor pin.
|
|
970
|
+
# load_regulation_current : str or float
|
|
971
|
+
# definition the load regulation current value.
|
|
972
|
+
# load_regulation_percent : float
|
|
973
|
+
# definition the load regulation percent value.
|
|
974
|
+
# """
|
|
975
|
+
# from pyedb.grpc.database.voltage_regulator import VoltageRegulator
|
|
976
|
+
#
|
|
977
|
+
# voltage = self._pedb.edb_value(voltage)
|
|
978
|
+
# load_regulation_current = self._pedb.edb_value(load_regulation_current)
|
|
979
|
+
# load_regulation_percent = self._pedb.edb_value(load_regulation_percent)
|
|
980
|
+
# edb_vrm = self._edb_object = self._pedb._edb.Cell.VoltageRegulator.Create(
|
|
981
|
+
# self._pedb.active_layout, name, is_active, voltage, load_regulation_current, load_regulation_percent
|
|
982
|
+
# )
|
|
983
|
+
# vrm = VoltageRegulator(self._pedb, edb_vrm)
|
|
984
|
+
# if positive_sensor_pin:
|
|
985
|
+
# vrm.positive_remote_sense_pin = positive_sensor_pin
|
|
986
|
+
# if negative_sensor_pin:
|
|
987
|
+
# vrm.negative_remote_sense_pin = negative_sensor_pin
|
|
988
|
+
# return vrm
|
|
989
|
+
|
|
990
|
+
@property
|
|
991
|
+
def icepak_use_minimal_comp_defaults(self):
|
|
992
|
+
"""Icepak default setting. If "True", only resistor are active in Icepak simulation.
|
|
993
|
+
The power dissipation of the resistors are calculated from DC results.
|
|
994
|
+
"""
|
|
995
|
+
return self._pedb.active_cell.get_product_property(GrpcProductIdType.SIWAVE, 422).value
|
|
996
|
+
|
|
997
|
+
def create_impedance_crosstalk_scan(self, scan_type="impedance"):
|
|
998
|
+
"""Create Siwave crosstalk scan object
|
|
999
|
+
|
|
1000
|
+
Parameters
|
|
1001
|
+
----------
|
|
1002
|
+
scan_type : str
|
|
1003
|
+
Scan type to be analyzed. 3 options are available, ``impedance`` for frequency impedance scan,
|
|
1004
|
+
``frequency_xtalk`` for frequency domain crosstalk and ``time_xtalk`` for time domain crosstalk.
|
|
1005
|
+
Default value is ``frequency``.
|
|
1006
|
+
|
|
1007
|
+
"""
|
|
1008
|
+
return SiwaveScanConfig(self._pedb, scan_type)
|
|
1009
|
+
|
|
1010
|
+
@icepak_use_minimal_comp_defaults.setter
|
|
1011
|
+
def icepak_use_minimal_comp_defaults(self, value):
|
|
1012
|
+
value = "True" if bool(value) else ""
|
|
1013
|
+
self._pedb.active_cell.set_product_property(GrpcProductIdType.SIWAVE, 422, value)
|
|
1014
|
+
|
|
1015
|
+
@property
|
|
1016
|
+
def icepak_component_file(self):
|
|
1017
|
+
"""Icepak component file path."""
|
|
1018
|
+
return self._pedb.active_cell.get_product_property(GrpcProductIdType.SIWAVE, 420).value
|
|
1019
|
+
return value
|
|
1020
|
+
|
|
1021
|
+
@icepak_component_file.setter
|
|
1022
|
+
def icepak_component_file(self, value):
|
|
1023
|
+
self._pedb.active_cell.set_product_property(GrpcProductIdType.SIWAVE, 420, value)
|