pyedb 0.10.dev0__py3-none-any.whl → 0.11.2__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/configuration/cfg_boundaries.py +115 -0
- pyedb/configuration/cfg_components.py +205 -0
- pyedb/configuration/cfg_data.py +38 -15
- pyedb/configuration/cfg_general.py +34 -0
- pyedb/{dotnet/sim_setup_data/data/siw_dc_ir_settings.py → configuration/cfg_nets.py} +18 -21
- pyedb/configuration/cfg_padstacks.py +125 -0
- pyedb/configuration/cfg_pin_groups.py +58 -0
- pyedb/configuration/cfg_ports_sources.py +164 -0
- pyedb/configuration/cfg_s_parameter_models.py +60 -0
- pyedb/configuration/cfg_setup.py +201 -0
- pyedb/configuration/cfg_spice_models.py +49 -0
- pyedb/configuration/configuration.py +37 -532
- pyedb/dotnet/edb.py +37 -8
- pyedb/dotnet/edb_core/components.py +43 -0
- pyedb/dotnet/edb_core/edb_data/hfss_pi_simulation_setup_data.py +465 -0
- pyedb/dotnet/edb_core/edb_data/nets_data.py +6 -2
- pyedb/dotnet/edb_core/edb_data/padstacks_data.py +17 -1
- pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +0 -4
- pyedb/dotnet/edb_core/edb_data/siwave_simulation_setup_data.py +4 -2
- pyedb/dotnet/edb_core/edb_data/sources.py +21 -5
- pyedb/dotnet/edb_core/edb_data/terminals.py +2 -1
- pyedb/dotnet/edb_core/layout.py +13 -8
- pyedb/dotnet/edb_core/nets.py +7 -3
- pyedb/dotnet/edb_core/padstack.py +23 -3
- pyedb/dotnet/edb_core/sim_setup_data/__init__.py +3 -0
- pyedb/dotnet/edb_core/sim_setup_data/data/__init__.py +3 -0
- pyedb/dotnet/edb_core/sim_setup_data/data/siw_dc_ir_settings.py +235 -0
- pyedb/dotnet/edb_core/siwave.py +2 -1
- pyedb/dotnet/edb_core/stackup.py +45 -33
- pyedb/dotnet/edb_core/utilities/simulation_setup.py +21 -5
- pyedb/generic/plot.py +6 -5
- pyedb/siwave.py +32 -6
- pyedb/siwave_core/icepak.py +153 -0
- {pyedb-0.10.dev0.dist-info → pyedb-0.11.2.dist-info}/METADATA +6 -6
- {pyedb-0.10.dev0.dist-info → pyedb-0.11.2.dist-info}/RECORD +38 -25
- pyedb/configuration/cfg_ports.py +0 -149
- {pyedb-0.10.dev0.dist-info → pyedb-0.11.2.dist-info}/LICENSE +0 -0
- {pyedb-0.10.dev0.dist-info → pyedb-0.11.2.dist-info}/WHEEL +0 -0
|
@@ -60,11 +60,13 @@ class EDBPadProperties(object):
|
|
|
60
60
|
"""
|
|
61
61
|
|
|
62
62
|
def __init__(self, edb_padstack, layer_name, pad_type, p_edb_padstack):
|
|
63
|
-
self.
|
|
63
|
+
self._edb_object = edb_padstack
|
|
64
64
|
self._pedbpadstack = p_edb_padstack
|
|
65
65
|
self.layer_name = layer_name
|
|
66
66
|
self.pad_type = pad_type
|
|
67
67
|
|
|
68
|
+
self._edb_padstack = self._edb_object
|
|
69
|
+
|
|
68
70
|
@property
|
|
69
71
|
def _padstack_methods(self):
|
|
70
72
|
return self._pedbpadstack._padstack_methods
|
|
@@ -1195,6 +1197,12 @@ class EDBPadstackInstance(EDBPrimitivesMain):
|
|
|
1195
1197
|
|
|
1196
1198
|
@pyedb_function_handler()
|
|
1197
1199
|
def _create_terminal(self, name=None):
|
|
1200
|
+
"""Create a padstack instance terminal"""
|
|
1201
|
+
warnings.warn("`_create_terminal` is deprecated. Use `create_terminal` instead.", DeprecationWarning)
|
|
1202
|
+
return self.create_terminal(name)
|
|
1203
|
+
|
|
1204
|
+
@pyedb_function_handler
|
|
1205
|
+
def create_terminal(self, name=None):
|
|
1198
1206
|
"""Create a padstack instance terminal"""
|
|
1199
1207
|
from pyedb.dotnet.edb_core.edb_data.terminals import PadstackInstanceTerminal
|
|
1200
1208
|
|
|
@@ -1618,6 +1626,14 @@ class EDBPadstackInstance(EDBPrimitivesMain):
|
|
|
1618
1626
|
"""
|
|
1619
1627
|
self._edb_padstackinstance.SetIsLayoutPin(pin)
|
|
1620
1628
|
|
|
1629
|
+
@property
|
|
1630
|
+
def component(self):
|
|
1631
|
+
"""Component."""
|
|
1632
|
+
from pyedb.dotnet.edb_core.edb_data.components_data import EDBComponent
|
|
1633
|
+
|
|
1634
|
+
comp = EDBComponent(self._pedb, self._edb_object.GetComponent())
|
|
1635
|
+
return comp if not comp.is_null else False
|
|
1636
|
+
|
|
1621
1637
|
@property
|
|
1622
1638
|
def position(self):
|
|
1623
1639
|
"""Padstack instance position.
|
|
@@ -74,10 +74,6 @@ class RaptorXSimulationSetup(BaseSimulationSetup):
|
|
|
74
74
|
else:
|
|
75
75
|
self.logger.error(f"RaptorX setup position input setter must be an integer. Provided value {value}")
|
|
76
76
|
|
|
77
|
-
@property
|
|
78
|
-
def frequency_sweeps(self):
|
|
79
|
-
return list(self._edb_setup_info.SweepDataList)
|
|
80
|
-
|
|
81
77
|
@pyedb_function_handler()
|
|
82
78
|
def add_frequency_sweep(self, name=None, frequency_sweep=None):
|
|
83
79
|
"""Add frequency sweep.
|
|
@@ -26,8 +26,10 @@ from pyedb.dotnet.edb_core.general import (
|
|
|
26
26
|
convert_netdict_to_pydict,
|
|
27
27
|
convert_pydict_to_netdict,
|
|
28
28
|
)
|
|
29
|
+
from pyedb.dotnet.edb_core.sim_setup_data.data.siw_dc_ir_settings import (
|
|
30
|
+
SiwaveDCIRSettings,
|
|
31
|
+
)
|
|
29
32
|
from pyedb.dotnet.edb_core.utilities.simulation_setup import BaseSimulationSetup
|
|
30
|
-
from pyedb.dotnet.sim_setup_data.data.siw_dc_ir_settings import SiwaveDCIRSettings
|
|
31
33
|
from pyedb.generic.general_methods import is_linux, pyedb_function_handler
|
|
32
34
|
|
|
33
35
|
|
|
@@ -986,7 +988,7 @@ class SiwaveSYZSimulationSetup(BaseSimulationSetup):
|
|
|
986
988
|
val = val.replace("SourceTermsToGround(", "").replace(")", "").split(",")
|
|
987
989
|
for v in val:
|
|
988
990
|
source = v.split("=")
|
|
989
|
-
sources[source[0]] = source[1]
|
|
991
|
+
sources[source[0]] = int(source[1].replace("'", ""))
|
|
990
992
|
edb_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround = convert_pydict_to_netdict(
|
|
991
993
|
sources
|
|
992
994
|
)
|
|
@@ -309,13 +309,18 @@ class PinGroup(object):
|
|
|
309
309
|
@pyedb_function_handler
|
|
310
310
|
def get_terminal(self, name=None, create_new_terminal=False):
|
|
311
311
|
"""Terminal."""
|
|
312
|
-
|
|
312
|
+
warnings.warn("Use new property :func:`terminal` instead.", DeprecationWarning)
|
|
313
313
|
if create_new_terminal:
|
|
314
314
|
term = self._create_terminal(name)
|
|
315
315
|
else:
|
|
316
|
-
|
|
316
|
+
return self.terminal
|
|
317
|
+
|
|
318
|
+
@property
|
|
319
|
+
def terminal(self):
|
|
320
|
+
"""Terminal."""
|
|
321
|
+
from pyedb.dotnet.edb_core.edb_data.terminals import PinGroupTerminal
|
|
317
322
|
|
|
318
|
-
|
|
323
|
+
term = PinGroupTerminal(self._pedb, self._edb_pin_group.GetPinGroupTerminal())
|
|
319
324
|
return term if not term.is_null else None
|
|
320
325
|
|
|
321
326
|
@pyedb_function_handler()
|
|
@@ -332,17 +337,28 @@ class PinGroup(object):
|
|
|
332
337
|
-------
|
|
333
338
|
:class:`pyedb.dotnet.edb_core.edb_data.terminals.PinGroupTerminal`
|
|
334
339
|
"""
|
|
340
|
+
warnings.warn("`_create_terminal` is deprecated. Use `create_terminal` instead.", DeprecationWarning)
|
|
341
|
+
|
|
335
342
|
terminal = self.get_terminal()
|
|
336
343
|
if terminal:
|
|
337
344
|
return terminal
|
|
345
|
+
else:
|
|
346
|
+
return self.create_terminal(name)
|
|
338
347
|
|
|
348
|
+
@pyedb_function_handler()
|
|
349
|
+
def create_terminal(self, name=None):
|
|
350
|
+
"""Create a terminal.
|
|
351
|
+
|
|
352
|
+
Parameters
|
|
353
|
+
----------
|
|
354
|
+
name : str, optional
|
|
355
|
+
Name of the terminal.
|
|
356
|
+
"""
|
|
339
357
|
if not name:
|
|
340
358
|
name = generate_unique_name(self.name)
|
|
341
|
-
|
|
342
359
|
from pyedb.dotnet.edb_core.edb_data.terminals import PinGroupTerminal
|
|
343
360
|
|
|
344
361
|
term = PinGroupTerminal(self._pedb)
|
|
345
|
-
|
|
346
362
|
term = term.create(name, self.net_name, self.name)
|
|
347
363
|
return term
|
|
348
364
|
|
|
@@ -643,9 +643,10 @@ class PinGroupTerminal(Terminal):
|
|
|
643
643
|
-------
|
|
644
644
|
:class:`pyedb.dotnet.edb_core.edb_data.terminals.PinGroupTerminal`
|
|
645
645
|
"""
|
|
646
|
+
net_obj = self._pedb.edb_api.cell.net.find_by_name(self._pedb.active_layout, net_name)
|
|
646
647
|
term = self._pedb.edb_api.cell.terminal.PinGroupTerminal.Create(
|
|
647
648
|
self._pedb.active_layout,
|
|
648
|
-
|
|
649
|
+
net_obj.api_object,
|
|
649
650
|
name,
|
|
650
651
|
self._pedb.siwave.pin_groups[pin_group_name]._edb_object,
|
|
651
652
|
is_ref,
|
pyedb/dotnet/edb_core/layout.py
CHANGED
|
@@ -152,10 +152,12 @@ class EdbLayout(object):
|
|
|
152
152
|
for lay in self.layers:
|
|
153
153
|
_primitives_by_layer[lay] = []
|
|
154
154
|
for i in self._layout.primitives:
|
|
155
|
-
|
|
156
|
-
|
|
155
|
+
try:
|
|
156
|
+
lay = i.GetLayer().GetName()
|
|
157
|
+
_primitives_by_layer[lay].append(cast(i, self._pedb))
|
|
158
|
+
except:
|
|
159
|
+
self._logger.warning(f"Failed to get layer on primitive {i}, skipping.")
|
|
157
160
|
continue
|
|
158
|
-
_primitives_by_layer[lay].append(cast(i, self._pedb))
|
|
159
161
|
return _primitives_by_layer
|
|
160
162
|
|
|
161
163
|
@property
|
|
@@ -233,11 +235,14 @@ class EdbLayout(object):
|
|
|
233
235
|
"""
|
|
234
236
|
objinst = []
|
|
235
237
|
for el in self.polygons:
|
|
236
|
-
|
|
237
|
-
if
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
238
|
+
try:
|
|
239
|
+
if el.GetLayer().GetName() == layer_name:
|
|
240
|
+
if net_list and el.GetNet().GetName() in net_list:
|
|
241
|
+
objinst.append(el)
|
|
242
|
+
else:
|
|
243
|
+
objinst.append(el)
|
|
244
|
+
except:
|
|
245
|
+
self._logger.warning(f"Failed to retrieve layer on polygon {el}")
|
|
241
246
|
return objinst
|
|
242
247
|
|
|
243
248
|
@pyedb_function_handler()
|
pyedb/dotnet/edb_core/nets.py
CHANGED
|
@@ -822,6 +822,7 @@ class EdbNets(object):
|
|
|
822
822
|
size=(2000, 1000),
|
|
823
823
|
plot_components_on_top=False,
|
|
824
824
|
plot_components_on_bottom=False,
|
|
825
|
+
show=True,
|
|
825
826
|
):
|
|
826
827
|
"""Plot a Net to Matplotlib 2D Chart.
|
|
827
828
|
|
|
@@ -838,8 +839,8 @@ class EdbNets(object):
|
|
|
838
839
|
If ``True`` the legend is shown in the plot. (default)
|
|
839
840
|
If ``False`` the legend is not shown.
|
|
840
841
|
save_plot : str, optional
|
|
841
|
-
If
|
|
842
|
-
If
|
|
842
|
+
If a path is specified the plot will be saved in this location.
|
|
843
|
+
If ``save_plot`` is provided, the ``show`` parameter is ignored.
|
|
843
844
|
outline : list, optional
|
|
844
845
|
List of points of the outline to plot.
|
|
845
846
|
size : tuple, int, optional
|
|
@@ -852,6 +853,8 @@ class EdbNets(object):
|
|
|
852
853
|
If ``True`` the components placed on bottom layer are plotted.
|
|
853
854
|
If ``False`` the components are not plotted. (default)
|
|
854
855
|
If nets and/or layers is specified, only the components belonging to the specified nets/layers are plotted.
|
|
856
|
+
show : bool, optional
|
|
857
|
+
Whether to show the plot or not. Default is `True`.
|
|
855
858
|
"""
|
|
856
859
|
if is_ironpython:
|
|
857
860
|
self._logger.warning("Plot functionalities are enabled only in CPython.")
|
|
@@ -880,8 +883,9 @@ class EdbNets(object):
|
|
|
880
883
|
xlabel="X (m)",
|
|
881
884
|
ylabel="Y (m)",
|
|
882
885
|
title=self._pedb.active_cell.GetName(),
|
|
883
|
-
|
|
886
|
+
save_plot=save_plot,
|
|
884
887
|
axis_equal=True,
|
|
888
|
+
show=show,
|
|
885
889
|
)
|
|
886
890
|
|
|
887
891
|
@pyedb_function_handler()
|
|
@@ -236,7 +236,7 @@ class EdbPadstacks(object):
|
|
|
236
236
|
|
|
237
237
|
"""
|
|
238
238
|
padstack_instances = {}
|
|
239
|
-
for _, edb_padstack_instance in self.
|
|
239
|
+
for _, edb_padstack_instance in self.instances.items():
|
|
240
240
|
if edb_padstack_instance.aedt_name:
|
|
241
241
|
padstack_instances[edb_padstack_instance.aedt_name] = EDBPadstackInstance(
|
|
242
242
|
edb_padstack_instance, self._pedb
|
|
@@ -1353,7 +1353,15 @@ class EdbPadstacks(object):
|
|
|
1353
1353
|
return True
|
|
1354
1354
|
|
|
1355
1355
|
@pyedb_function_handler()
|
|
1356
|
-
def get_instances(
|
|
1356
|
+
def get_instances(
|
|
1357
|
+
self,
|
|
1358
|
+
name=None,
|
|
1359
|
+
pid=None,
|
|
1360
|
+
definition_name=None,
|
|
1361
|
+
net_name=None,
|
|
1362
|
+
component_reference_designator=None,
|
|
1363
|
+
component_pin=None,
|
|
1364
|
+
):
|
|
1357
1365
|
"""Get padstack instances by conditions.
|
|
1358
1366
|
|
|
1359
1367
|
Parameters
|
|
@@ -1366,7 +1374,8 @@ class EdbPadstacks(object):
|
|
|
1366
1374
|
Name of the padstack definition.
|
|
1367
1375
|
net_name : str, optional
|
|
1368
1376
|
The net name to be used for filtering padstack instances.
|
|
1369
|
-
|
|
1377
|
+
component_pin: str, optional
|
|
1378
|
+
Pin Number of the component.
|
|
1370
1379
|
Returns
|
|
1371
1380
|
-------
|
|
1372
1381
|
list
|
|
@@ -1386,6 +1395,17 @@ class EdbPadstacks(object):
|
|
|
1386
1395
|
if net_name:
|
|
1387
1396
|
net_name = net_name if isinstance(net_name, list) else [net_name]
|
|
1388
1397
|
instances = [inst for inst in instances if inst.net_name in net_name]
|
|
1398
|
+
if component_reference_designator:
|
|
1399
|
+
refdes = (
|
|
1400
|
+
component_reference_designator
|
|
1401
|
+
if isinstance(component_reference_designator, list)
|
|
1402
|
+
else [component_reference_designator]
|
|
1403
|
+
)
|
|
1404
|
+
instances = [inst for inst in instances if inst.component]
|
|
1405
|
+
instances = [inst for inst in instances if inst.component.refdes in refdes]
|
|
1406
|
+
if component_pin:
|
|
1407
|
+
component_pin = component_pin if isinstance(component_pin, list) else [component_pin]
|
|
1408
|
+
instances = [inst for inst in instances if inst.pin_number in component_pin]
|
|
1389
1409
|
return instances
|
|
1390
1410
|
|
|
1391
1411
|
@pyedb_function_handler()
|
|
@@ -0,0 +1,235 @@
|
|
|
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
|
+
from pyedb.dotnet.edb_core.general import (
|
|
24
|
+
convert_netdict_to_pydict,
|
|
25
|
+
convert_pydict_to_netdict,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class SiwaveDCIRSettings:
|
|
30
|
+
"""Class for DC IR settings."""
|
|
31
|
+
|
|
32
|
+
def __init__(self, parent):
|
|
33
|
+
self._parent = parent
|
|
34
|
+
|
|
35
|
+
@property
|
|
36
|
+
def export_dc_thermal_data(self):
|
|
37
|
+
"""Export DC Thermal Data.
|
|
38
|
+
|
|
39
|
+
Returns
|
|
40
|
+
-------
|
|
41
|
+
bool
|
|
42
|
+
``True`` when activated, ``False`` deactivated.
|
|
43
|
+
"""
|
|
44
|
+
return self._parent.get_sim_setup_info.SimulationSettings.DCIRSettings.ExportDCThermalData
|
|
45
|
+
|
|
46
|
+
@export_dc_thermal_data.setter
|
|
47
|
+
def export_dc_thermal_data(self, value):
|
|
48
|
+
edb_setup_info = self._parent.get_sim_setup_info
|
|
49
|
+
edb_setup_info.SimulationSettings.DCIRSettings.ExportDCThermalData = value
|
|
50
|
+
self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info)
|
|
51
|
+
self._parent._update_setup()
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def import_thermal_data(self):
|
|
55
|
+
"""Import Thermal Data.
|
|
56
|
+
|
|
57
|
+
Returns
|
|
58
|
+
-------
|
|
59
|
+
bool
|
|
60
|
+
``True`` when activated, ``False`` deactivated.
|
|
61
|
+
"""
|
|
62
|
+
return self._parent.get_sim_setup_info.SimulationSettings.DCIRSettings.ImportThermalData
|
|
63
|
+
|
|
64
|
+
@import_thermal_data.setter
|
|
65
|
+
def import_thermal_data(self, value):
|
|
66
|
+
edb_setup_info = self._parent.get_sim_setup_info
|
|
67
|
+
edb_setup_info.SimulationSettings.DCIRSettings.ImportThermalData = value
|
|
68
|
+
self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info)
|
|
69
|
+
self._parent._update_setup()
|
|
70
|
+
|
|
71
|
+
@property
|
|
72
|
+
def dc_report_show_active_devices(self):
|
|
73
|
+
"""DC Report Show Active Devices.
|
|
74
|
+
|
|
75
|
+
Returns
|
|
76
|
+
-------
|
|
77
|
+
bool
|
|
78
|
+
``True`` when activated, ``False`` deactivated.
|
|
79
|
+
"""
|
|
80
|
+
return self._parent.get_sim_setup_info.SimulationSettings.DCIRSettings.DCReportShowActiveDevices
|
|
81
|
+
|
|
82
|
+
@dc_report_show_active_devices.setter
|
|
83
|
+
def dc_report_show_active_devices(self, value):
|
|
84
|
+
edb_setup_info = self._parent.get_sim_setup_info
|
|
85
|
+
edb_setup_info.SimulationSettings.DCIRSettings.DCReportShowActiveDevices = value
|
|
86
|
+
self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info)
|
|
87
|
+
self._parent._update_setup()
|
|
88
|
+
|
|
89
|
+
@property
|
|
90
|
+
def per_pin_use_pin_format(self):
|
|
91
|
+
"""Per Pin Use Pin Format.
|
|
92
|
+
|
|
93
|
+
Returns
|
|
94
|
+
-------
|
|
95
|
+
bool
|
|
96
|
+
``True`` when activated, ``False`` deactivated.
|
|
97
|
+
"""
|
|
98
|
+
return self._parent.get_sim_setup_info.SimulationSettings.DCIRSettings.PerPinUsePinFormat
|
|
99
|
+
|
|
100
|
+
@per_pin_use_pin_format.setter
|
|
101
|
+
def per_pin_use_pin_format(self, value):
|
|
102
|
+
edb_setup_info = self._parent.get_sim_setup_info
|
|
103
|
+
edb_setup_info.SimulationSettings.DCIRSettings.PerPinUsePinFormat = value
|
|
104
|
+
self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info)
|
|
105
|
+
self._parent._update_setup()
|
|
106
|
+
|
|
107
|
+
@property
|
|
108
|
+
def use_loop_res_for_per_pin(self):
|
|
109
|
+
"""Use loop Res Per Pin.
|
|
110
|
+
|
|
111
|
+
Returns
|
|
112
|
+
-------
|
|
113
|
+
bool
|
|
114
|
+
``True`` when activated, ``False`` deactivated.
|
|
115
|
+
"""
|
|
116
|
+
return self._parent.get_sim_setup_info.SimulationSettings.DCIRSettings.UseLoopResForPerPin
|
|
117
|
+
|
|
118
|
+
@use_loop_res_for_per_pin.setter
|
|
119
|
+
def use_loop_res_for_per_pin(self, value):
|
|
120
|
+
edb_setup_info = self._parent.get_sim_setup_info
|
|
121
|
+
edb_setup_info.SimulationSettings.DCIRSettings.UseLoopResForPerPin = value
|
|
122
|
+
self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info)
|
|
123
|
+
self._parent._update_setup()
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def dc_report_config_file(self):
|
|
127
|
+
"""DC Report Config File.
|
|
128
|
+
|
|
129
|
+
Returns
|
|
130
|
+
-------
|
|
131
|
+
str
|
|
132
|
+
path to the DC report configuration file.
|
|
133
|
+
"""
|
|
134
|
+
return self._parent.get_sim_setup_info.SimulationSettings.DCIRSettings.DCReportConfigFile
|
|
135
|
+
|
|
136
|
+
@dc_report_config_file.setter
|
|
137
|
+
def dc_report_config_file(self, value):
|
|
138
|
+
edb_setup_info = self._parent.get_sim_setup_info
|
|
139
|
+
edb_setup_info.SimulationSettings.DCIRSettings.DCReportConfigFile = value
|
|
140
|
+
self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info)
|
|
141
|
+
self._parent._update_setup()
|
|
142
|
+
|
|
143
|
+
@property
|
|
144
|
+
def full_dc_report_path(self):
|
|
145
|
+
"""Full DC Report Path.
|
|
146
|
+
|
|
147
|
+
Returns
|
|
148
|
+
-------
|
|
149
|
+
str
|
|
150
|
+
full path to the DC report file.
|
|
151
|
+
"""
|
|
152
|
+
return self._parent.get_sim_setup_info.SimulationSettings.DCIRSettings.FullDCReportPath
|
|
153
|
+
|
|
154
|
+
@full_dc_report_path.setter
|
|
155
|
+
def full_dc_report_path(self, value):
|
|
156
|
+
edb_setup_info = self._parent.get_sim_setup_info
|
|
157
|
+
edb_setup_info.SimulationSettings.DCIRSettings.FullDCReportPath = value
|
|
158
|
+
self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info)
|
|
159
|
+
self._parent._update_setup()
|
|
160
|
+
|
|
161
|
+
@property
|
|
162
|
+
def icepak_temp_file(self):
|
|
163
|
+
"""Icepack Temp File.
|
|
164
|
+
|
|
165
|
+
Returns
|
|
166
|
+
-------
|
|
167
|
+
str
|
|
168
|
+
path to the temp Icepak file.
|
|
169
|
+
"""
|
|
170
|
+
return self._parent.get_sim_setup_info.SimulationSettings.DCIRSettings.IcepakTempFile
|
|
171
|
+
|
|
172
|
+
@icepak_temp_file.setter
|
|
173
|
+
def icepak_temp_file(self, value):
|
|
174
|
+
edb_setup_info = self._parent.get_sim_setup_info
|
|
175
|
+
edb_setup_info.SimulationSettings.DCIRSettings.IcepakTempFile = value
|
|
176
|
+
self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info)
|
|
177
|
+
self._parent._update_setup()
|
|
178
|
+
|
|
179
|
+
@property
|
|
180
|
+
def per_pin_res_path(self):
|
|
181
|
+
"""Per Pin Res Path.
|
|
182
|
+
|
|
183
|
+
Returns
|
|
184
|
+
-------
|
|
185
|
+
str
|
|
186
|
+
path for per pin res.
|
|
187
|
+
"""
|
|
188
|
+
return self._parent.get_sim_setup_info.SimulationSettings.DCIRSettings.PerPinResPath
|
|
189
|
+
|
|
190
|
+
@per_pin_res_path.setter
|
|
191
|
+
def per_pin_res_path(self, value):
|
|
192
|
+
edb_setup_info = self._parent.get_sim_setup_info
|
|
193
|
+
edb_setup_info.SimulationSettings.DCIRSettings.PerPinResPath = value
|
|
194
|
+
self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info)
|
|
195
|
+
self._parent._update_setup()
|
|
196
|
+
|
|
197
|
+
@property
|
|
198
|
+
def via_report_path(self):
|
|
199
|
+
"""Via Report Path.
|
|
200
|
+
|
|
201
|
+
Returns
|
|
202
|
+
-------
|
|
203
|
+
str
|
|
204
|
+
path for the Via Report.
|
|
205
|
+
"""
|
|
206
|
+
return self._parent.get_sim_setup_info.SimulationSettings.DCIRSettings.ViaReportPath
|
|
207
|
+
|
|
208
|
+
@via_report_path.setter
|
|
209
|
+
def via_report_path(self, value):
|
|
210
|
+
edb_setup_info = self._parent.get_sim_setup_info
|
|
211
|
+
edb_setup_info.SimulationSettings.DCIRSettings.ViaReportPath = value
|
|
212
|
+
self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info)
|
|
213
|
+
self._parent._update_setup()
|
|
214
|
+
|
|
215
|
+
@property
|
|
216
|
+
def source_terms_to_ground(self):
|
|
217
|
+
"""A dictionary of SourceName, NodeToGround pairs,
|
|
218
|
+
where NodeToGround is one of 0 (unspecified), 1 (negative), 2 (positive).
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
Returns
|
|
222
|
+
-------
|
|
223
|
+
dict <str, int>
|
|
224
|
+
str: source name,
|
|
225
|
+
int: node to ground pairs, 0 (unspecified), 1 (negative), 2 (positive) .
|
|
226
|
+
"""
|
|
227
|
+
temp = self._parent.get_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround
|
|
228
|
+
return convert_netdict_to_pydict(temp)
|
|
229
|
+
|
|
230
|
+
@source_terms_to_ground.setter
|
|
231
|
+
def source_terms_to_ground(self, value):
|
|
232
|
+
edb_setup_info = self._parent.get_sim_setup_info
|
|
233
|
+
edb_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround = convert_pydict_to_netdict(value)
|
|
234
|
+
self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info)
|
|
235
|
+
self._parent._update_setup()
|
pyedb/dotnet/edb_core/siwave.py
CHANGED
|
@@ -1261,7 +1261,8 @@ class EdbSiwave(object):
|
|
|
1261
1261
|
if edb_pingroup.IsNull(): # pragma: no cover
|
|
1262
1262
|
return False
|
|
1263
1263
|
else:
|
|
1264
|
-
|
|
1264
|
+
names = [i for i in pins if i.GetNet().GetName()]
|
|
1265
|
+
edb_pingroup.SetNet(names[0].GetNet())
|
|
1265
1266
|
return group_name, self.pin_groups[group_name]
|
|
1266
1267
|
|
|
1267
1268
|
@pyedb_function_handler()
|