pyedb 0.53.0__py3-none-any.whl → 0.55.0__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 -8
- pyedb/configuration/cfg_boundaries.py +69 -151
- pyedb/configuration/cfg_components.py +201 -460
- pyedb/configuration/cfg_data.py +4 -2
- pyedb/configuration/cfg_general.py +13 -36
- pyedb/configuration/cfg_modeler.py +2 -1
- pyedb/configuration/cfg_nets.py +21 -35
- pyedb/configuration/cfg_operations.py +22 -151
- pyedb/configuration/cfg_package_definition.py +56 -112
- pyedb/configuration/cfg_padstacks.py +292 -688
- pyedb/configuration/cfg_pin_groups.py +32 -79
- pyedb/configuration/cfg_ports_sources.py +20 -9
- pyedb/configuration/cfg_s_parameter_models.py +67 -172
- pyedb/configuration/cfg_setup.py +102 -295
- pyedb/configuration/configuration.py +66 -6
- pyedb/dotnet/database/cell/connectable.py +38 -9
- pyedb/dotnet/database/cell/hierarchy/component.py +28 -28
- pyedb/dotnet/database/cell/hierarchy/model.py +1 -1
- pyedb/dotnet/database/cell/layout.py +64 -3
- pyedb/dotnet/database/cell/layout_obj.py +3 -3
- pyedb/dotnet/database/cell/primitive/path.py +6 -8
- pyedb/dotnet/database/cell/primitive/primitive.py +10 -31
- pyedb/dotnet/database/cell/terminal/edge_terminal.py +2 -2
- pyedb/dotnet/database/cell/terminal/padstack_instance_terminal.py +1 -1
- pyedb/dotnet/database/cell/terminal/pingroup_terminal.py +1 -1
- pyedb/dotnet/database/cell/terminal/point_terminal.py +1 -1
- pyedb/dotnet/database/cell/terminal/terminal.py +26 -28
- pyedb/dotnet/database/cell/voltage_regulator.py +0 -21
- pyedb/dotnet/database/components.py +99 -91
- pyedb/dotnet/database/definition/component_def.py +4 -4
- pyedb/dotnet/database/definition/component_model.py +1 -1
- pyedb/dotnet/database/definition/package_def.py +2 -3
- pyedb/dotnet/database/dotnet/database.py +27 -218
- pyedb/dotnet/database/dotnet/primitive.py +16 -16
- pyedb/dotnet/database/edb_data/control_file.py +5 -5
- pyedb/dotnet/database/edb_data/hfss_extent_info.py +6 -6
- pyedb/dotnet/database/edb_data/layer_data.py +35 -35
- pyedb/dotnet/database/edb_data/padstacks_data.py +65 -90
- pyedb/dotnet/database/edb_data/primitives_data.py +5 -5
- pyedb/dotnet/database/edb_data/sources.py +6 -6
- pyedb/dotnet/database/edb_data/variables.py +8 -4
- pyedb/dotnet/database/geometry/point_data.py +14 -10
- pyedb/dotnet/database/geometry/polygon_data.py +3 -5
- pyedb/dotnet/database/hfss.py +50 -52
- pyedb/dotnet/database/layout_validation.py +14 -11
- pyedb/dotnet/database/materials.py +10 -11
- pyedb/dotnet/database/modeler.py +104 -101
- pyedb/dotnet/database/nets.py +20 -23
- pyedb/dotnet/database/padstack.py +156 -84
- pyedb/dotnet/database/sim_setup_data/data/settings.py +24 -0
- pyedb/dotnet/database/sim_setup_data/io/siwave.py +26 -1
- pyedb/dotnet/database/siwave.py +47 -47
- pyedb/dotnet/database/stackup.py +152 -87
- pyedb/dotnet/database/utilities/heatsink.py +4 -4
- pyedb/dotnet/database/utilities/obj_base.py +3 -3
- pyedb/dotnet/database/utilities/simulation_setup.py +2 -2
- pyedb/dotnet/database/utilities/value.py +116 -0
- pyedb/dotnet/edb.py +248 -170
- pyedb/edb_logger.py +12 -27
- pyedb/extensions/via_design_backend.py +6 -3
- pyedb/generic/design_types.py +68 -21
- pyedb/generic/general_methods.py +0 -120
- pyedb/generic/process.py +44 -108
- pyedb/generic/settings.py +75 -19
- pyedb/grpc/__init__.py +0 -0
- pyedb/grpc/database/components.py +55 -17
- pyedb/grpc/database/control_file.py +5 -5
- pyedb/grpc/database/definition/materials.py +24 -31
- pyedb/grpc/database/definition/package_def.py +18 -18
- pyedb/grpc/database/definition/padstack_def.py +104 -51
- pyedb/grpc/database/geometry/arc_data.py +7 -5
- pyedb/grpc/database/geometry/point_3d_data.py +8 -7
- pyedb/grpc/database/geometry/polygon_data.py +4 -3
- pyedb/grpc/database/hierarchy/component.py +43 -38
- pyedb/grpc/database/hierarchy/pin_pair_model.py +15 -14
- pyedb/grpc/database/hierarchy/pingroup.py +9 -9
- pyedb/grpc/database/layers/stackup_layer.py +45 -44
- pyedb/grpc/database/layout/layout.py +17 -13
- pyedb/grpc/database/layout/voltage_regulator.py +7 -7
- pyedb/grpc/database/layout_validation.py +16 -15
- pyedb/grpc/database/modeler.py +60 -58
- pyedb/grpc/database/net/net.py +15 -14
- pyedb/grpc/database/nets.py +112 -31
- pyedb/grpc/database/padstacks.py +303 -190
- pyedb/grpc/database/ports/ports.py +5 -6
- pyedb/grpc/database/primitive/bondwire.py +8 -7
- pyedb/grpc/database/primitive/circle.py +4 -4
- pyedb/grpc/database/primitive/padstack_instance.py +191 -23
- pyedb/grpc/database/primitive/path.py +7 -7
- pyedb/grpc/database/primitive/polygon.py +3 -3
- pyedb/grpc/database/primitive/primitive.py +13 -17
- pyedb/grpc/database/primitive/rectangle.py +13 -13
- pyedb/grpc/database/simulation_setup/hfss_general_settings.py +1 -1
- pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +10 -0
- pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +17 -1
- pyedb/grpc/database/siwave.py +31 -25
- pyedb/grpc/database/source_excitations.py +335 -233
- pyedb/grpc/database/stackup.py +165 -148
- pyedb/grpc/database/terminal/bundle_terminal.py +18 -8
- pyedb/grpc/database/terminal/edge_terminal.py +10 -0
- pyedb/grpc/database/terminal/padstack_instance_terminal.py +16 -5
- pyedb/grpc/database/terminal/pingroup_terminal.py +12 -11
- pyedb/grpc/database/terminal/point_terminal.py +4 -3
- pyedb/grpc/database/terminal/terminal.py +9 -9
- pyedb/grpc/database/utility/value.py +109 -0
- pyedb/grpc/database/utility/xml_control_file.py +5 -5
- pyedb/grpc/edb.py +130 -63
- pyedb/grpc/edb_init.py +3 -10
- pyedb/grpc/rpc_session.py +10 -10
- pyedb/libraries/common.py +366 -0
- pyedb/libraries/rf_libraries/base_functions.py +1358 -0
- pyedb/libraries/rf_libraries/planar_antennas.py +628 -0
- pyedb/misc/decorators.py +61 -0
- pyedb/misc/misc.py +0 -13
- pyedb/siwave.py +2 -2
- {pyedb-0.53.0.dist-info → pyedb-0.55.0.dist-info}/METADATA +2 -3
- {pyedb-0.53.0.dist-info → pyedb-0.55.0.dist-info}/RECORD +119 -112
- {pyedb-0.53.0.dist-info → pyedb-0.55.0.dist-info}/WHEEL +0 -0
- {pyedb-0.53.0.dist-info → pyedb-0.55.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -49,7 +49,7 @@ class LayerEdbClass(object):
|
|
|
49
49
|
layer_type = self._layer_name_mapping[layer_type]
|
|
50
50
|
layer_type = self._doc_layer_mapping[layer_type]
|
|
51
51
|
|
|
52
|
-
self._edb_object = self._pedb.
|
|
52
|
+
self._edb_object = self._pedb.core.Cell.Layer(
|
|
53
53
|
self._name,
|
|
54
54
|
layer_type,
|
|
55
55
|
)
|
|
@@ -83,30 +83,30 @@ class LayerEdbClass(object):
|
|
|
83
83
|
@property
|
|
84
84
|
def _stackup_layer_mapping(self):
|
|
85
85
|
return {
|
|
86
|
-
"SignalLayer": self._edb.
|
|
87
|
-
"DielectricLayer": self._edb.
|
|
86
|
+
"SignalLayer": self._edb.Cell.LayerType.SignalLayer,
|
|
87
|
+
"DielectricLayer": self._edb.Cell.LayerType.DielectricLayer,
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
@property
|
|
91
91
|
def _doc_layer_mapping(self):
|
|
92
92
|
return {
|
|
93
|
-
"ConductingLayer": self._edb.
|
|
94
|
-
"AirlinesLayer": self._edb.
|
|
95
|
-
"ErrorsLayer": self._edb.
|
|
96
|
-
"SymbolLayer": self._edb.
|
|
97
|
-
"MeasureLayer": self._edb.
|
|
98
|
-
"AssemblyLayer": self._edb.
|
|
99
|
-
"SilkscreenLayer": self._edb.
|
|
100
|
-
"SolderMaskLayer": self._edb.
|
|
101
|
-
"SolderPasteLayer": self._edb.
|
|
102
|
-
"GlueLayer": self._edb.
|
|
103
|
-
"WirebondLayer": self._edb.
|
|
104
|
-
"UserLayer": self._edb.
|
|
105
|
-
"SIwaveHFSSSolverRegions": self._edb.
|
|
106
|
-
"PostprocessingLayer": self._edb.
|
|
107
|
-
"OutlineLayer": self._edb.
|
|
108
|
-
"LayerTypesCount": self._edb.
|
|
109
|
-
"UndefinedLayerType": self._edb.
|
|
93
|
+
"ConductingLayer": self._edb.Cell.LayerType.ConductingLayer,
|
|
94
|
+
"AirlinesLayer": self._edb.Cell.LayerType.AirlinesLayer,
|
|
95
|
+
"ErrorsLayer": self._edb.Cell.LayerType.ErrorsLayer,
|
|
96
|
+
"SymbolLayer": self._edb.Cell.LayerType.SymbolLayer,
|
|
97
|
+
"MeasureLayer": self._edb.Cell.LayerType.MeasureLayer,
|
|
98
|
+
"AssemblyLayer": self._edb.Cell.LayerType.AssemblyLayer,
|
|
99
|
+
"SilkscreenLayer": self._edb.Cell.LayerType.SilkscreenLayer,
|
|
100
|
+
"SolderMaskLayer": self._edb.Cell.LayerType.SolderMaskLayer,
|
|
101
|
+
"SolderPasteLayer": self._edb.Cell.LayerType.SolderPasteLayer,
|
|
102
|
+
"GlueLayer": self._edb.Cell.LayerType.GlueLayer,
|
|
103
|
+
"WirebondLayer": self._edb.Cell.LayerType.WirebondLayer,
|
|
104
|
+
"UserLayer": self._edb.Cell.LayerType.UserLayer,
|
|
105
|
+
"SIwaveHFSSSolverRegions": self._edb.Cell.LayerType.SIwaveHFSSSolverRegions,
|
|
106
|
+
"PostprocessingLayer": self._edb.Cell.LayerType.PostprocessingLayer,
|
|
107
|
+
"OutlineLayer": self._edb.Cell.LayerType.OutlineLayer,
|
|
108
|
+
"LayerTypesCount": self._edb.Cell.LayerType.LayerTypesCount,
|
|
109
|
+
"UndefinedLayerType": self._edb.Cell.LayerType.UndefinedLayerType,
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
@property
|
|
@@ -146,7 +146,7 @@ class LayerEdbClass(object):
|
|
|
146
146
|
|
|
147
147
|
@property
|
|
148
148
|
def _edb(self):
|
|
149
|
-
return self._pedb.
|
|
149
|
+
return self._pedb.core
|
|
150
150
|
|
|
151
151
|
@property
|
|
152
152
|
def _edb_layer(self):
|
|
@@ -289,7 +289,7 @@ class StackupLayerEdbClass(LayerEdbClass):
|
|
|
289
289
|
def _create(self, layer_type):
|
|
290
290
|
layer_type_edb_name = self._layer_name_mapping[layer_type]
|
|
291
291
|
layer_type = self._layer_type_mapping[layer_type_edb_name]
|
|
292
|
-
self._edb_object = self._pedb.
|
|
292
|
+
self._edb_object = self._pedb.core.Cell.StackupLayer(
|
|
293
293
|
self._name,
|
|
294
294
|
layer_type,
|
|
295
295
|
self._pedb.edb_value(0),
|
|
@@ -639,11 +639,11 @@ class StackupLayerEdbClass(LayerEdbClass):
|
|
|
639
639
|
if not self.is_stackup_layer: # pragma: no cover
|
|
640
640
|
return
|
|
641
641
|
if surface == "top":
|
|
642
|
-
return self._edb_layer.GetRoughnessModel(self._pedb.
|
|
642
|
+
return self._edb_layer.GetRoughnessModel(self._pedb.core.Cell.RoughnessModel.Region.Top)
|
|
643
643
|
elif surface == "bottom":
|
|
644
|
-
return self._edb_layer.GetRoughnessModel(self._pedb.
|
|
644
|
+
return self._edb_layer.GetRoughnessModel(self._pedb.core.Cell.RoughnessModel.Region.Bottom)
|
|
645
645
|
elif surface == "side":
|
|
646
|
-
return self._edb_layer.GetRoughnessModel(self._pedb.
|
|
646
|
+
return self._edb_layer.GetRoughnessModel(self._pedb.core.Cell.RoughnessModel.Region.Side)
|
|
647
647
|
|
|
648
648
|
def assign_roughness_model(
|
|
649
649
|
self,
|
|
@@ -685,27 +685,27 @@ class StackupLayerEdbClass(LayerEdbClass):
|
|
|
685
685
|
if apply_on_surface == "all":
|
|
686
686
|
self._side_roughness = "all"
|
|
687
687
|
regions = [
|
|
688
|
-
self._pedb.
|
|
689
|
-
self._pedb.
|
|
690
|
-
self._pedb.
|
|
688
|
+
self._pedb.core.Cell.RoughnessModel.Region.Top,
|
|
689
|
+
self._pedb.core.Cell.RoughnessModel.Region.Side,
|
|
690
|
+
self._pedb.core.Cell.RoughnessModel.Region.Bottom,
|
|
691
691
|
]
|
|
692
692
|
elif apply_on_surface == "top":
|
|
693
693
|
self._side_roughness = "top"
|
|
694
|
-
regions = [self._pedb.
|
|
694
|
+
regions = [self._pedb.core.Cell.RoughnessModel.Region.Top]
|
|
695
695
|
elif apply_on_surface == "bottom":
|
|
696
696
|
self._side_roughness = "bottom"
|
|
697
|
-
regions = [self._pedb.
|
|
697
|
+
regions = [self._pedb.core.Cell.RoughnessModel.Region.Bottom]
|
|
698
698
|
elif apply_on_surface == "side":
|
|
699
699
|
self._side_roughness = "side"
|
|
700
|
-
regions = [self._pedb.
|
|
700
|
+
regions = [self._pedb.core.Cell.RoughnessModel.Region.Side]
|
|
701
701
|
|
|
702
702
|
layer_clone = self._edb_layer
|
|
703
703
|
layer_clone.SetRoughnessEnabled(True)
|
|
704
704
|
for r in regions:
|
|
705
705
|
if model_type == "huray":
|
|
706
|
-
model = self._pedb.
|
|
706
|
+
model = self._pedb.core.Cell.HurrayRoughnessModel(radius, surface_ratio)
|
|
707
707
|
else:
|
|
708
|
-
model = self._pedb.
|
|
708
|
+
model = self._pedb.core.Cell.GroisseRoughnessModel(groisse_roughness)
|
|
709
709
|
layer_clone.SetRoughnessModel(r, model)
|
|
710
710
|
return self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
|
|
711
711
|
|
|
@@ -800,7 +800,7 @@ class StackupLayerEdbClass(LayerEdbClass):
|
|
|
800
800
|
"factor": self._edb_layer.GetEtchFactor().ToString(),
|
|
801
801
|
"enabled": self._edb_layer.IsEtchFactorEnabled(),
|
|
802
802
|
}
|
|
803
|
-
if self._pedb.
|
|
803
|
+
if self._pedb.version >= "2024.2":
|
|
804
804
|
etch_power_ground_nets = int(self._edb_layer.GetEtchNetClass())
|
|
805
805
|
etch_power_ground_nets = False if etch_power_ground_nets else True
|
|
806
806
|
data["etching"]["etch_power_ground_nets"] = etch_power_ground_nets
|
|
@@ -869,7 +869,7 @@ class StackupLayerEdbClass(LayerEdbClass):
|
|
|
869
869
|
layer_clone = self._edb_layer
|
|
870
870
|
layer_clone.SetEtchFactorEnabled(etching["enabled"])
|
|
871
871
|
layer_clone.SetEtchFactor(self._pedb.stackup._edb_value(float(etching["factor"])))
|
|
872
|
-
if self._pedb.
|
|
872
|
+
if self._pedb.version >= "2024.2":
|
|
873
873
|
if etching["etch_power_ground_nets"]:
|
|
874
874
|
layer_clone.SetEtchNetClass(self._pedb._edb.Cell.EtchNetClass.NoEtchPowerGroundNets)
|
|
875
875
|
else:
|
|
@@ -25,7 +25,7 @@ import math
|
|
|
25
25
|
import warnings
|
|
26
26
|
|
|
27
27
|
from pyedb.dotnet.clr_module import String
|
|
28
|
-
from pyedb.dotnet.database.cell.primitive.primitive import
|
|
28
|
+
from pyedb.dotnet.database.cell.primitive.primitive import Connectable
|
|
29
29
|
from pyedb.dotnet.database.dotnet.database import PolygonDataDotNet
|
|
30
30
|
from pyedb.dotnet.database.edb_data.edbvalue import EdbValue
|
|
31
31
|
from pyedb.dotnet.database.general import (
|
|
@@ -167,7 +167,7 @@ class EDBPadProperties(object):
|
|
|
167
167
|
self.layer_name, self.int_to_pad_type(self.pad_type)
|
|
168
168
|
)
|
|
169
169
|
if flag:
|
|
170
|
-
return PolygonData(self.
|
|
170
|
+
return PolygonData(self._pedbpadstack._ppadstack._pedb, edb_object)
|
|
171
171
|
else: # pragma no cover
|
|
172
172
|
raise AttributeError("No polygon data.")
|
|
173
173
|
|
|
@@ -180,15 +180,12 @@ class EDBPadProperties(object):
|
|
|
180
180
|
list
|
|
181
181
|
List of parameters.
|
|
182
182
|
"""
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
else:
|
|
190
|
-
return
|
|
191
|
-
except:
|
|
183
|
+
pad_values = self._edb_padstack.GetData().GetPolygonalPadParameters(
|
|
184
|
+
self.layer_name, self.int_to_pad_type(self.pad_type)
|
|
185
|
+
)
|
|
186
|
+
if pad_values[1]:
|
|
187
|
+
return PolygonDataDotNet(self._pedbpadstack._ppadstack._pedb, pad_values[1])
|
|
188
|
+
else:
|
|
192
189
|
return
|
|
193
190
|
|
|
194
191
|
@property
|
|
@@ -383,7 +380,7 @@ class EDBPadProperties(object):
|
|
|
383
380
|
``True`` when successful, ``False`` when failed.
|
|
384
381
|
"""
|
|
385
382
|
originalPadstackDefinitionData = self._edb_padstack.GetData()
|
|
386
|
-
newPadstackDefinitionData = self._edb.
|
|
383
|
+
newPadstackDefinitionData = self._edb.Definition.PadstackDefData(originalPadstackDefinitionData)
|
|
387
384
|
if not pad_type:
|
|
388
385
|
pad_type = self.pad_type
|
|
389
386
|
if not geom_type:
|
|
@@ -470,7 +467,7 @@ class EDBPadstack(object):
|
|
|
470
467
|
|
|
471
468
|
"""
|
|
472
469
|
pstack_data = self._edb_object.GetData()
|
|
473
|
-
return self._edb.
|
|
470
|
+
return self._edb.Definition.PadstackDefData(pstack_data)
|
|
474
471
|
|
|
475
472
|
@_padstack_def_data.setter
|
|
476
473
|
def _padstack_def_data(self, value):
|
|
@@ -591,7 +588,7 @@ class EDBPadstack(object):
|
|
|
591
588
|
``True`` when successful, ``False`` when failed.
|
|
592
589
|
"""
|
|
593
590
|
originalPadstackDefinitionData = self.edb_padstack.GetData()
|
|
594
|
-
newPadstackDefinitionData = self._edb.
|
|
591
|
+
newPadstackDefinitionData = self._edb.Definition.PadstackDefData(originalPadstackDefinitionData)
|
|
595
592
|
if not hole_type:
|
|
596
593
|
hole_type = self.hole_type
|
|
597
594
|
if not params:
|
|
@@ -705,12 +702,12 @@ class EDBPadstack(object):
|
|
|
705
702
|
float
|
|
706
703
|
Percentage for the hole plating.
|
|
707
704
|
"""
|
|
708
|
-
return self._edb.
|
|
705
|
+
return self._edb.Definition.PadstackDefData(self.edb_padstack.GetData()).GetHolePlatingPercentage()
|
|
709
706
|
|
|
710
707
|
@hole_plating_ratio.setter
|
|
711
708
|
def hole_plating_ratio(self, ratio):
|
|
712
709
|
originalPadstackDefinitionData = self.edb_padstack.GetData()
|
|
713
|
-
newPadstackDefinitionData = self._edb.
|
|
710
|
+
newPadstackDefinitionData = self._edb.Definition.PadstackDefData(originalPadstackDefinitionData)
|
|
714
711
|
newPadstackDefinitionData.SetHolePlatingPercentage(self._get_edb_value(ratio))
|
|
715
712
|
self.edb_padstack.SetData(newPadstackDefinitionData)
|
|
716
713
|
|
|
@@ -797,7 +794,7 @@ class EDBPadstack(object):
|
|
|
797
794
|
@hole_range.setter
|
|
798
795
|
def hole_range(self, value):
|
|
799
796
|
pdef_data = self._padstack_def_data
|
|
800
|
-
pdef_data.SetHoleRange(getattr(self._edb.
|
|
797
|
+
pdef_data.SetHoleRange(getattr(self._edb.Definition.PadstackHoleRange, snake_to_pascal(value)))
|
|
801
798
|
self._padstack_def_data = pdef_data
|
|
802
799
|
|
|
803
800
|
def convert_to_3d_microvias(self, convert_only_signal_vias=True, hole_wall_angle=75, delete_padstack_def=True):
|
|
@@ -847,7 +844,7 @@ class EDBPadstack(object):
|
|
|
847
844
|
net_name=via._edb_padstackinstance.GetNet().GetName(),
|
|
848
845
|
)
|
|
849
846
|
else:
|
|
850
|
-
self._edb.
|
|
847
|
+
self._edb.Cell.Primitive.Circle.Create(
|
|
851
848
|
layout,
|
|
852
849
|
self.via_start_layer,
|
|
853
850
|
via._edb_padstackinstance.GetNet(),
|
|
@@ -862,7 +859,7 @@ class EDBPadstack(object):
|
|
|
862
859
|
net_name=via._edb_padstackinstance.GetNet().GetName(),
|
|
863
860
|
)
|
|
864
861
|
else:
|
|
865
|
-
self._edb.
|
|
862
|
+
self._edb.Cell.Primitive.Circle.Create(
|
|
866
863
|
layout,
|
|
867
864
|
self.via_stop_layer,
|
|
868
865
|
via._edb_padstackinstance.GetNet(),
|
|
@@ -890,7 +887,7 @@ class EDBPadstack(object):
|
|
|
890
887
|
rad_u = rad_small
|
|
891
888
|
rad_l = rad_large
|
|
892
889
|
|
|
893
|
-
cloned_circle = self._edb.
|
|
890
|
+
cloned_circle = self._edb.Cell.Primitive.Circle.Create(
|
|
894
891
|
layout,
|
|
895
892
|
start,
|
|
896
893
|
via._edb_padstackinstance.GetNet(),
|
|
@@ -898,7 +895,7 @@ class EDBPadstack(object):
|
|
|
898
895
|
self._get_edb_value(pos[1]),
|
|
899
896
|
self._get_edb_value(rad_u),
|
|
900
897
|
)
|
|
901
|
-
cloned_circle2 = self._edb.
|
|
898
|
+
cloned_circle2 = self._edb.Cell.Primitive.Circle.Create(
|
|
902
899
|
layout,
|
|
903
900
|
stop,
|
|
904
901
|
via._edb_padstackinstance.GetNet(),
|
|
@@ -906,13 +903,13 @@ class EDBPadstack(object):
|
|
|
906
903
|
self._get_edb_value(pos[1]),
|
|
907
904
|
self._get_edb_value(rad_l),
|
|
908
905
|
)
|
|
909
|
-
s3d = self._edb.
|
|
906
|
+
s3d = self._edb.Cell.Hierarchy.Structure3D.Create(
|
|
910
907
|
layout, generate_unique_name("via3d_" + via.aedt_name.replace("via_", ""), n=3)
|
|
911
908
|
)
|
|
912
|
-
s3d.AddMember(cloned_circle
|
|
913
|
-
s3d.AddMember(cloned_circle2
|
|
909
|
+
s3d.AddMember(cloned_circle)
|
|
910
|
+
s3d.AddMember(cloned_circle2)
|
|
914
911
|
s3d.SetMaterial(self.material)
|
|
915
|
-
s3d.SetMeshClosureProp(self._edb.
|
|
912
|
+
s3d.SetMeshClosureProp(self._edb.Cell.Hierarchy.Structure3D.TClosure.EndsClosed)
|
|
916
913
|
started = True
|
|
917
914
|
i += 1
|
|
918
915
|
if stop == via.stop_layer:
|
|
@@ -954,13 +951,13 @@ class EDBPadstack(object):
|
|
|
954
951
|
stop = layer_names[layer_names.index(layer_name) + 1]
|
|
955
952
|
new_padstack_name = "MV_{}_{}_{}".format(self.name, start, stop)
|
|
956
953
|
included = [start, stop]
|
|
957
|
-
new_padstack_definition_data = self._ppadstack._pedb.
|
|
954
|
+
new_padstack_definition_data = self._ppadstack._pedb.core.Definition.PadstackDefData.Create()
|
|
958
955
|
new_padstack_definition_data.AddLayers(convert_py_list_to_net_list(included))
|
|
959
956
|
for layer in included:
|
|
960
957
|
pl = self.pad_by_layer[layer]
|
|
961
958
|
new_padstack_definition_data.SetPadParameters(
|
|
962
959
|
layer,
|
|
963
|
-
self._ppadstack._pedb.
|
|
960
|
+
self._ppadstack._pedb.core.Definition.PadType.RegularPad,
|
|
964
961
|
pl.int_to_geometry_type(pl.geometry_type),
|
|
965
962
|
list(
|
|
966
963
|
pl._edb_padstack.GetData().GetPadParametersValue(
|
|
@@ -980,7 +977,7 @@ class EDBPadstack(object):
|
|
|
980
977
|
pl = self.antipad_by_layer[layer]
|
|
981
978
|
new_padstack_definition_data.SetPadParameters(
|
|
982
979
|
layer,
|
|
983
|
-
self._ppadstack._pedb.
|
|
980
|
+
self._ppadstack._pedb.core.Definition.PadType.AntiPad,
|
|
984
981
|
pl.int_to_geometry_type(pl.geometry_type),
|
|
985
982
|
list(
|
|
986
983
|
pl._edb_padstack.GetData().GetPadParametersValue(
|
|
@@ -1000,7 +997,7 @@ class EDBPadstack(object):
|
|
|
1000
997
|
pl = self.thermalpad_by_layer[layer]
|
|
1001
998
|
new_padstack_definition_data.SetPadParameters(
|
|
1002
999
|
layer,
|
|
1003
|
-
self._ppadstack._pedb.
|
|
1000
|
+
self._ppadstack._pedb.core.Definition.PadType.ThermalPad,
|
|
1004
1001
|
pl.int_to_geometry_type(pl.geometry_type),
|
|
1005
1002
|
list(
|
|
1006
1003
|
pl._edb_padstack.GetData().GetPadParametersValue(
|
|
@@ -1026,7 +1023,7 @@ class EDBPadstack(object):
|
|
|
1026
1023
|
)
|
|
1027
1024
|
new_padstack_definition_data.SetMaterial(self.material)
|
|
1028
1025
|
new_padstack_definition_data.SetHolePlatingPercentage(self._get_edb_value(self.hole_plating_ratio))
|
|
1029
|
-
padstack_definition = self._edb.
|
|
1026
|
+
padstack_definition = self._edb.Definition.PadstackDef.Create(
|
|
1030
1027
|
self._ppadstack._pedb.active_db, new_padstack_name
|
|
1031
1028
|
)
|
|
1032
1029
|
padstack_definition.SetData(new_padstack_definition_data)
|
|
@@ -1048,7 +1045,7 @@ class EDBPadstack(object):
|
|
|
1048
1045
|
for l in self._ppadstack._pedb.stackup._edb_layer_list
|
|
1049
1046
|
if l.GetName() == list(instance.GetData().GetLayerNames())[-1]
|
|
1050
1047
|
][0]
|
|
1051
|
-
padstack_instance = self._edb.
|
|
1048
|
+
padstack_instance = self._edb.Cell.Primitive.PadstackInstance.Create(
|
|
1052
1049
|
layout,
|
|
1053
1050
|
via._edb_padstackinstance.GetNet(),
|
|
1054
1051
|
generate_unique_name(instance.GetName()),
|
|
@@ -1060,7 +1057,7 @@ class EDBPadstack(object):
|
|
|
1060
1057
|
None,
|
|
1061
1058
|
None,
|
|
1062
1059
|
)
|
|
1063
|
-
padstack_instance.
|
|
1060
|
+
padstack_instance.SetIsLayoutPin(via.is_pin)
|
|
1064
1061
|
i += 1
|
|
1065
1062
|
via.delete()
|
|
1066
1063
|
self._ppadstack._pedb.logger.info("Created {} new microvias.".format(i))
|
|
@@ -1079,8 +1076,8 @@ class EDBPadstack(object):
|
|
|
1079
1076
|
bool
|
|
1080
1077
|
``True`` when succeed ``False`` when failed.
|
|
1081
1078
|
"""
|
|
1082
|
-
cloned_padstack_data = self._edb.
|
|
1083
|
-
new_padstack_data = self._edb.
|
|
1079
|
+
cloned_padstack_data = self._edb.Definition.PadstackDefData(self.edb_padstack.GetData())
|
|
1080
|
+
new_padstack_data = self._edb.Definition.PadstackDefData.Create()
|
|
1084
1081
|
layers_name = cloned_padstack_data.GetLayerNames()
|
|
1085
1082
|
layers_to_add = []
|
|
1086
1083
|
for layer in layers_name:
|
|
@@ -1092,7 +1089,7 @@ class EDBPadstack(object):
|
|
|
1092
1089
|
for layer in layers_name:
|
|
1093
1090
|
updated_pad = self.pad_by_layer[layer]
|
|
1094
1091
|
if not updated_pad.geometry_type == 0: # pragma no cover
|
|
1095
|
-
pad_type = self._edb.
|
|
1092
|
+
pad_type = self._edb.Definition.PadType.RegularPad
|
|
1096
1093
|
geom_type = self.pad_by_layer[layer]._pad_parameter_value[1]
|
|
1097
1094
|
parameters = self.pad_by_layer[layer]._pad_parameter_value[2]
|
|
1098
1095
|
offset_x = self.pad_by_layer[layer]._pad_parameter_value[3]
|
|
@@ -1107,7 +1104,7 @@ class EDBPadstack(object):
|
|
|
1107
1104
|
|
|
1108
1105
|
updated_anti_pad = self.antipad_by_layer[layer]
|
|
1109
1106
|
if not updated_anti_pad.geometry_type == 0: # pragma no cover
|
|
1110
|
-
pad_type = self._edb.
|
|
1107
|
+
pad_type = self._edb.Definition.PadType.AntiPad
|
|
1111
1108
|
geom_type = self.pad_by_layer[layer]._pad_parameter_value[1]
|
|
1112
1109
|
parameters = self.pad_by_layer[layer]._pad_parameter_value[2]
|
|
1113
1110
|
offset_x = self.pad_by_layer[layer]._pad_parameter_value[3]
|
|
@@ -1124,7 +1121,7 @@ class EDBPadstack(object):
|
|
|
1124
1121
|
|
|
1125
1122
|
updated_thermal_pad = self.thermalpad_by_layer[layer]
|
|
1126
1123
|
if not updated_thermal_pad.geometry_type == 0: # pragma no cover
|
|
1127
|
-
pad_type = self._edb.
|
|
1124
|
+
pad_type = self._edb.Definition.PadType.ThermalPad
|
|
1128
1125
|
geom_type = self.pad_by_layer[layer]._pad_parameter_value[1]
|
|
1129
1126
|
parameters = self.pad_by_layer[layer]._pad_parameter_value[2]
|
|
1130
1127
|
offset_x = self.pad_by_layer[layer]._pad_parameter_value[3]
|
|
@@ -1164,7 +1161,7 @@ class EDBPadstack(object):
|
|
|
1164
1161
|
return True
|
|
1165
1162
|
|
|
1166
1163
|
|
|
1167
|
-
class EDBPadstackInstance(
|
|
1164
|
+
class EDBPadstackInstance(Connectable):
|
|
1168
1165
|
"""Manages EDB functionalities for a padstack.
|
|
1169
1166
|
|
|
1170
1167
|
Parameters
|
|
@@ -1422,7 +1419,7 @@ class EDBPadstackInstance(Primitive):
|
|
|
1422
1419
|
tuple
|
|
1423
1420
|
Tuple of the layer name, drill diameter, and offset if it exists.
|
|
1424
1421
|
"""
|
|
1425
|
-
layer = self._pedb.
|
|
1422
|
+
layer = self._pedb.core.Cell.Layer("", self._pedb.core.Cell.LayerType.SignalLayer)
|
|
1426
1423
|
val = self._pedb.edb_value(0)
|
|
1427
1424
|
offset = self._pedb.edb_value(0.0)
|
|
1428
1425
|
(
|
|
@@ -1488,7 +1485,7 @@ class EDBPadstackInstance(Primitive):
|
|
|
1488
1485
|
tuple
|
|
1489
1486
|
Tuple of the layer name, drill diameter, and drill offset if it exists.
|
|
1490
1487
|
"""
|
|
1491
|
-
layer = self._pedb.
|
|
1488
|
+
layer = self._pedb.core.Cell.Layer("", self._pedb.core.Cell.LayerType.SignalLayer)
|
|
1492
1489
|
val = self._pedb.edb_value(0)
|
|
1493
1490
|
offset = self._pedb.edb_value(0.0)
|
|
1494
1491
|
(
|
|
@@ -1509,7 +1506,7 @@ class EDBPadstackInstance(Primitive):
|
|
|
1509
1506
|
def backdrill_parameters(self):
|
|
1510
1507
|
data = {}
|
|
1511
1508
|
flag, drill_to_layer, offset, diameter = self._edb_object.GetBackDrillParametersLayerValue(
|
|
1512
|
-
self._pedb.
|
|
1509
|
+
self._pedb.core.Cell.Layer("", self._pedb.core.Cell.LayerType.SignalLayer),
|
|
1513
1510
|
self._pedb.edb_value(0),
|
|
1514
1511
|
self._pedb.edb_value(0.0),
|
|
1515
1512
|
True,
|
|
@@ -1522,7 +1519,7 @@ class EDBPadstackInstance(Primitive):
|
|
|
1522
1519
|
"stub_length": offset.ToString(),
|
|
1523
1520
|
}
|
|
1524
1521
|
flag, drill_to_layer, offset, diameter = self._edb_object.GetBackDrillParametersLayerValue(
|
|
1525
|
-
self._pedb.
|
|
1522
|
+
self._pedb.core.Cell.Layer("", self._pedb.core.Cell.LayerType.SignalLayer),
|
|
1526
1523
|
self._pedb.edb_value(0),
|
|
1527
1524
|
self._pedb.edb_value(0.0),
|
|
1528
1525
|
False,
|
|
@@ -1676,14 +1673,6 @@ class EDBPadstackInstance(Primitive):
|
|
|
1676
1673
|
"""
|
|
1677
1674
|
self._edb_padstackinstance.SetIsLayoutPin(pin)
|
|
1678
1675
|
|
|
1679
|
-
@property
|
|
1680
|
-
def component(self):
|
|
1681
|
-
"""Component."""
|
|
1682
|
-
from pyedb.dotnet.database.cell.hierarchy.component import EDBComponent
|
|
1683
|
-
|
|
1684
|
-
comp = EDBComponent(self._pedb, self._edb_object.GetComponent())
|
|
1685
|
-
return comp if not comp.is_null else False
|
|
1686
|
-
|
|
1687
1676
|
@property
|
|
1688
1677
|
def position(self):
|
|
1689
1678
|
"""Padstack instance position.
|
|
@@ -1710,8 +1699,10 @@ class EDBPadstackInstance(Primitive):
|
|
|
1710
1699
|
pos.append(self._pedb.edb_value(v))
|
|
1711
1700
|
else:
|
|
1712
1701
|
pos.append(v)
|
|
1713
|
-
point_data = self._pedb.
|
|
1714
|
-
|
|
1702
|
+
point_data = self._pedb.pedb_class.database.geometry.point_data.PointData.create_from_xy(
|
|
1703
|
+
self._pedb, pos[0], pos[1]
|
|
1704
|
+
)
|
|
1705
|
+
self._edb_padstackinstance.SetPositionAndRotation(point_data._edb_object, self._pedb.edb_value(self.rotation))
|
|
1715
1706
|
|
|
1716
1707
|
@property
|
|
1717
1708
|
def rotation(self):
|
|
@@ -1727,19 +1718,6 @@ class EDBPadstackInstance(Primitive):
|
|
|
1727
1718
|
if out[0]:
|
|
1728
1719
|
return round(out[2].ToDouble(), 6)
|
|
1729
1720
|
|
|
1730
|
-
@property
|
|
1731
|
-
def name(self):
|
|
1732
|
-
"""Padstack Instance Name. If it is a pin, the syntax will be like in AEDT ComponentName-PinName."""
|
|
1733
|
-
if self.is_pin:
|
|
1734
|
-
return self.aedt_name
|
|
1735
|
-
else:
|
|
1736
|
-
return self.component_pin
|
|
1737
|
-
|
|
1738
|
-
@name.setter
|
|
1739
|
-
def name(self, value):
|
|
1740
|
-
self._edb_padstackinstance.SetName(value)
|
|
1741
|
-
self._edb_padstackinstance.SetProductProperty(self._pedb.edb_api.ProductId.Designer, 11, value)
|
|
1742
|
-
|
|
1743
1721
|
@property
|
|
1744
1722
|
def metal_volume(self):
|
|
1745
1723
|
"""Metal volume of the via hole instance in cubic units (m3). Metal plating ratio is accounted.
|
|
@@ -1776,13 +1754,14 @@ class EDBPadstackInstance(Primitive):
|
|
|
1776
1754
|
@property
|
|
1777
1755
|
def pin_number(self):
|
|
1778
1756
|
"""Get pin number."""
|
|
1779
|
-
warnings.warn("`pin_number` is deprecated. Use `
|
|
1780
|
-
return self.
|
|
1757
|
+
warnings.warn("`pin_number` is deprecated. Use `name` method instead.", DeprecationWarning)
|
|
1758
|
+
return self.name
|
|
1781
1759
|
|
|
1782
1760
|
@property
|
|
1783
1761
|
def component_pin(self):
|
|
1784
1762
|
"""Get component pin."""
|
|
1785
|
-
|
|
1763
|
+
warnings.warn("`pin_number` is deprecated. Use `name` method instead.", DeprecationWarning)
|
|
1764
|
+
return self.name
|
|
1786
1765
|
|
|
1787
1766
|
@property
|
|
1788
1767
|
def aedt_name(self):
|
|
@@ -1806,19 +1785,19 @@ class EDBPadstackInstance(Primitive):
|
|
|
1806
1785
|
"""
|
|
1807
1786
|
|
|
1808
1787
|
val = String("")
|
|
1809
|
-
_, name = self._edb_padstackinstance.GetProductProperty(self._pedb.
|
|
1788
|
+
_, name = self._edb_padstackinstance.GetProductProperty(self._pedb.core.ProductId.Designer, 11, val)
|
|
1810
1789
|
aedt_name = str(name).strip("'")
|
|
1811
1790
|
if aedt_name == "":
|
|
1812
|
-
if self.
|
|
1813
|
-
aedt_name = f"{self.
|
|
1814
|
-
|
|
1815
|
-
aedt_name = self.
|
|
1791
|
+
if self.component_name:
|
|
1792
|
+
aedt_name = f"{self.component_name}-{self.name}"
|
|
1793
|
+
else:
|
|
1794
|
+
aedt_name = "Via_{}".format(self.id)
|
|
1816
1795
|
self.aedt_name = aedt_name
|
|
1817
1796
|
return aedt_name
|
|
1818
1797
|
|
|
1819
1798
|
@aedt_name.setter
|
|
1820
1799
|
def aedt_name(self, value):
|
|
1821
|
-
self._edb_object.SetProductProperty(self._pedb.
|
|
1800
|
+
self._edb_object.SetProductProperty(self._pedb.core.ProductId.Designer, 11, value)
|
|
1822
1801
|
|
|
1823
1802
|
def parametrize_position(self, prefix=None):
|
|
1824
1803
|
"""Parametrize the instance position.
|
|
@@ -1983,17 +1962,13 @@ class EDBPadstackInstance(Primitive):
|
|
|
1983
1962
|
padstack_center = self.position
|
|
1984
1963
|
rotation = self.rotation # in radians
|
|
1985
1964
|
padstack_name = self.padstack_definition
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
try:
|
|
1994
|
-
padstack_pad = padstack.pad_by_layer[padstack.via_start_layer]
|
|
1995
|
-
except KeyError: # pragma: no cover
|
|
1996
|
-
return False
|
|
1965
|
+
|
|
1966
|
+
padstack = self._pedb.padstacks.definitions[padstack_name]
|
|
1967
|
+
padstack_pad = (
|
|
1968
|
+
padstack.pad_by_layer[layer_name]
|
|
1969
|
+
if layer_name in padstack.pad_by_layer
|
|
1970
|
+
else padstack.pad_by_layer[padstack.via_start_layer]
|
|
1971
|
+
)
|
|
1997
1972
|
|
|
1998
1973
|
pad_shape = padstack_pad.geometry_type
|
|
1999
1974
|
params = padstack_pad.parameters_values
|
|
@@ -2134,7 +2109,7 @@ class EDBPadstackInstance(Primitive):
|
|
|
2134
2109
|
rect[i] = _translate(_rotate(rect[i]))
|
|
2135
2110
|
|
|
2136
2111
|
if rect is None or len(rect) != 4:
|
|
2137
|
-
|
|
2112
|
+
raise RuntimeError()
|
|
2138
2113
|
offset_rect = [_translate(p, _rotate(pad_offset)) for p in rect]
|
|
2139
2114
|
path = self._pedb.modeler.Shape("polygon", points=offset_rect)
|
|
2140
2115
|
pdata = self._pedb.modeler.shape_to_polygon_data(path)
|
|
@@ -2240,7 +2215,7 @@ class EDBPadstackInstance(Primitive):
|
|
|
2240
2215
|
rad_l = rad_large
|
|
2241
2216
|
|
|
2242
2217
|
layout = self._pedb.active_layout
|
|
2243
|
-
cloned_circle = self._edb.
|
|
2218
|
+
cloned_circle = self._edb.Cell.Primitive.Circle.Create(
|
|
2244
2219
|
layout,
|
|
2245
2220
|
self.start_layer,
|
|
2246
2221
|
self._edb_padstackinstance.GetNet(),
|
|
@@ -2248,7 +2223,7 @@ class EDBPadstackInstance(Primitive):
|
|
|
2248
2223
|
self._pedb.edb_value(pos[1]),
|
|
2249
2224
|
self._pedb.edb_value(rad_u),
|
|
2250
2225
|
)
|
|
2251
|
-
cloned_circle2 = self._edb.
|
|
2226
|
+
cloned_circle2 = self._edb.Cell.Primitive.Circle.Create(
|
|
2252
2227
|
layout,
|
|
2253
2228
|
self.stop_layer,
|
|
2254
2229
|
self._edb_padstackinstance.GetNet(),
|
|
@@ -2259,8 +2234,8 @@ class EDBPadstackInstance(Primitive):
|
|
|
2259
2234
|
s3d = self._pedb._edb.Cell.Hierarchy.Structure3D.Create(
|
|
2260
2235
|
layout, generate_unique_name("via3d_" + self.aedt_name.replace("via_", ""), n=3)
|
|
2261
2236
|
)
|
|
2262
|
-
s3d.AddMember(cloned_circle
|
|
2263
|
-
s3d.AddMember(cloned_circle2
|
|
2237
|
+
s3d.AddMember(cloned_circle)
|
|
2238
|
+
s3d.AddMember(cloned_circle2)
|
|
2264
2239
|
s3d.SetMaterial(self.definition.material)
|
|
2265
2240
|
s3d.SetMeshClosureProp(self._pedb._edb.Cell.Hierarchy.Structure3D.TClosure.EndsClosed)
|
|
2266
2241
|
|
|
@@ -109,7 +109,7 @@ class EdbPolygon(Primitive):
|
|
|
109
109
|
new_polygons = list(self.polygon_data._edb_object.RemoveSelfIntersections())
|
|
110
110
|
self._edb_object.SetPolygonData(new_polygons[0])
|
|
111
111
|
for p in new_polygons[1:]:
|
|
112
|
-
cloned_poly = self._app.
|
|
112
|
+
cloned_poly = self._app.core.Cell.primitive.polygon.create(
|
|
113
113
|
self._app.active_layout, self.layer_name, self.net, p
|
|
114
114
|
)
|
|
115
115
|
new_polys.append(cloned_poly)
|
|
@@ -258,10 +258,10 @@ class EdbPolygon(Primitive):
|
|
|
258
258
|
``True`` when successful, ``False`` when failed.
|
|
259
259
|
"""
|
|
260
260
|
if isinstance(point_data, list):
|
|
261
|
-
point_data = self._app.
|
|
262
|
-
self._app.edb_value(point_data[0]), self._app.edb_value(point_data[1])
|
|
261
|
+
point_data = self._app.pedb_class.database.geometry.point_data.PointData.create_from_xy(
|
|
262
|
+
self._app, self._app.edb_value(point_data[0]), self._app.edb_value(point_data[1])
|
|
263
263
|
)
|
|
264
|
-
int_val = int(self.polygon_data._edb_object.PointInPolygon(point_data))
|
|
264
|
+
int_val = int(self.polygon_data._edb_object.PointInPolygon(point_data._edb_object))
|
|
265
265
|
|
|
266
266
|
# Intersection type:
|
|
267
267
|
# 0 = objects do not intersect
|
|
@@ -297,7 +297,7 @@ class EdbPolygon(Primitive):
|
|
|
297
297
|
# if _poly is None or _poly.IsNull() or _poly is False:
|
|
298
298
|
# self._logger.error("Failed to create void polygon data")
|
|
299
299
|
# return False
|
|
300
|
-
# prim = self._app.
|
|
300
|
+
# prim = self._app.core.Cell.primitive.polygon.create(
|
|
301
301
|
# self._app.active_layout, self.layer_name, self.primitive_object.GetNet(), _poly
|
|
302
302
|
# )
|
|
303
303
|
# elif isinstance(point_list, Primitive):
|
|
@@ -369,28 +369,28 @@ class PinGroup(object):
|
|
|
369
369
|
|
|
370
370
|
def create_current_source_terminal(self, magnitude=1, phase=0):
|
|
371
371
|
terminal = self.create_terminal()._edb_object
|
|
372
|
-
terminal.SetBoundaryType(self._pedb.
|
|
372
|
+
terminal.SetBoundaryType(self._pedb.core.Cell.Terminal.BoundaryType.kCurrentSource)
|
|
373
373
|
terminal.SetSourceAmplitude(self._pedb.edb_value(magnitude))
|
|
374
|
-
terminal.SetSourcePhase(self._pedb.
|
|
374
|
+
terminal.SetSourcePhase(self._pedb.core.Utility.Value(phase))
|
|
375
375
|
return terminal
|
|
376
376
|
|
|
377
377
|
def create_voltage_source_terminal(self, magnitude=1, phase=0, impedance=0.001):
|
|
378
378
|
terminal = self.create_terminal()._edb_object
|
|
379
|
-
terminal.SetBoundaryType(self._pedb.
|
|
379
|
+
terminal.SetBoundaryType(self._pedb.core.Cell.Terminal.BoundaryType.kVoltageSource)
|
|
380
380
|
terminal.SetSourceAmplitude(self._pedb.edb_value(magnitude))
|
|
381
|
-
terminal.SetSourcePhase(self._pedb.
|
|
381
|
+
terminal.SetSourcePhase(self._pedb.core.Utility.Value(phase))
|
|
382
382
|
terminal.SetImpedance(self._pedb.edb_value(impedance))
|
|
383
383
|
return terminal
|
|
384
384
|
|
|
385
385
|
def create_voltage_probe_terminal(self, impedance=1000000):
|
|
386
386
|
terminal = self.create_terminal()._edb_object
|
|
387
|
-
terminal.SetBoundaryType(self._pedb.
|
|
387
|
+
terminal.SetBoundaryType(self._pedb.core.Cell.Terminal.BoundaryType.kVoltageProbe)
|
|
388
388
|
terminal.SetImpedance(self._pedb.edb_value(impedance))
|
|
389
389
|
return terminal
|
|
390
390
|
|
|
391
391
|
def create_port_terminal(self, impedance=50):
|
|
392
392
|
terminal = self.create_terminal()._edb_object
|
|
393
|
-
terminal.SetBoundaryType(self._pedb.
|
|
393
|
+
terminal.SetBoundaryType(self._pedb.core.Cell.Terminal.BoundaryType.PortBoundary)
|
|
394
394
|
terminal.SetImpedance(self._pedb.edb_value(impedance))
|
|
395
395
|
terminal.SetIsCircuitPort(True)
|
|
396
396
|
return terminal
|