pyedb 0.13.dev0__py3-none-any.whl → 0.14.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 -1
- pyedb/configuration/cfg_common.py +0 -5
- pyedb/configuration/cfg_components.py +0 -2
- pyedb/configuration/cfg_operations.py +0 -2
- pyedb/configuration/cfg_package_definition.py +0 -2
- pyedb/configuration/cfg_ports_sources.py +14 -11
- pyedb/configuration/cfg_stackup.py +0 -7
- pyedb/configuration/configuration.py +0 -6
- pyedb/dotnet/application/Variables.py +4 -40
- pyedb/dotnet/edb.py +27 -82
- pyedb/dotnet/edb_core/{edb_data/components_data.py → cell/hierarchy/component.py} +13 -133
- pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -3
- pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py +30 -0
- pyedb/dotnet/edb_core/cell/hierarchy/pin_pair_model.py +105 -0
- pyedb/dotnet/edb_core/cell/hierarchy/s_parameter_model.py +34 -0
- pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py +34 -0
- pyedb/dotnet/edb_core/cell/layout.py +137 -0
- pyedb/dotnet/edb_core/cell/layout_obj.py +2 -4
- pyedb/dotnet/edb_core/cell/primitive.py +199 -1
- pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +52 -0
- pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +50 -0
- pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py +88 -0
- pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py +59 -0
- pyedb/dotnet/edb_core/cell/terminal/point_terminal.py +73 -0
- pyedb/dotnet/edb_core/{edb_data/terminals.py → cell/terminal/terminal.py} +33 -242
- pyedb/dotnet/edb_core/components.py +10 -56
- pyedb/dotnet/edb_core/definition/component_def.py +1 -8
- pyedb/dotnet/edb_core/definition/component_model.py +0 -2
- pyedb/dotnet/edb_core/definition/definitions.py +0 -2
- pyedb/dotnet/edb_core/definition/package_def.py +7 -5
- pyedb/dotnet/edb_core/edb_data/control_file.py +0 -3
- pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -5
- pyedb/dotnet/edb_core/edb_data/hfss_pi_simulation_setup_data.py +4 -9
- pyedb/dotnet/edb_core/edb_data/layer_data.py +0 -7
- pyedb/dotnet/edb_core/edb_data/nets_data.py +2 -5
- pyedb/dotnet/edb_core/edb_data/padstacks_data.py +11 -29
- pyedb/dotnet/edb_core/edb_data/ports.py +4 -4
- pyedb/dotnet/edb_core/edb_data/primitives_data.py +3 -26
- pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +13 -20
- pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +3 -11
- pyedb/dotnet/edb_core/edb_data/sources.py +12 -17
- pyedb/dotnet/edb_core/general.py +1 -6
- pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -3
- pyedb/dotnet/edb_core/hfss.py +1 -33
- pyedb/dotnet/edb_core/layout.py +0 -35
- pyedb/dotnet/edb_core/layout_validation.py +1 -3
- pyedb/dotnet/edb_core/materials.py +1 -22
- pyedb/dotnet/edb_core/net_class.py +0 -8
- pyedb/dotnet/edb_core/nets.py +4 -29
- pyedb/dotnet/edb_core/padstack.py +76 -30
- pyedb/dotnet/edb_core/sim_setup_data/data/adaptive_frequency_data.py +72 -0
- pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +287 -0
- pyedb/dotnet/edb_core/{edb_data/hfss_simulation_setup_data.py → sim_setup_data/data/settings.py} +174 -878
- pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +509 -0
- pyedb/dotnet/edb_core/sim_setup_data/io/__init__.py +0 -0
- pyedb/dotnet/edb_core/{edb_data/siwave_simulation_setup_data.py → sim_setup_data/io/siwave.py} +0 -341
- pyedb/dotnet/edb_core/siwave.py +5 -33
- pyedb/dotnet/edb_core/stackup.py +4 -51
- pyedb/dotnet/edb_core/utilities/simulation_setup.py +612 -366
- pyedb/generic/data_handlers.py +1 -9
- pyedb/generic/general_methods.py +3 -53
- pyedb/generic/plot.py +1 -2
- pyedb/ipc2581/ecad/cad_data/layer_feature.py +1 -7
- pyedb/ipc2581/ecad/cad_data/package.py +1 -4
- pyedb/ipc2581/ecad/cad_data/path.py +1 -3
- pyedb/ipc2581/ecad/cad_data/polygon.py +1 -6
- pyedb/ipc2581/ecad/cad_data/step.py +1 -10
- pyedb/ipc2581/ipc2581.py +8 -15
- pyedb/modeler/geometry_operators.py +164 -67
- pyedb/siwave.py +1 -16
- {pyedb-0.13.dev0.dist-info → pyedb-0.14.0.dist-info}/METADATA +2 -2
- {pyedb-0.13.dev0.dist-info → pyedb-0.14.0.dist-info}/RECORD +75 -61
- /pyedb/dotnet/edb_core/cell/{__init__.py → terminal/__init__.py} +0 -0
- {pyedb-0.13.dev0.dist-info → pyedb-0.14.0.dist-info}/LICENSE +0 -0
- {pyedb-0.13.dev0.dist-info → pyedb-0.14.0.dist-info}/WHEEL +0 -0
|
@@ -25,8 +25,6 @@ import re
|
|
|
25
25
|
from pyedb.dotnet.edb_core.cell.layout_obj import Connectable
|
|
26
26
|
from pyedb.dotnet.edb_core.edb_data.padstacks_data import EDBPadstackInstance
|
|
27
27
|
from pyedb.dotnet.edb_core.edb_data.primitives_data import cast
|
|
28
|
-
from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
|
|
29
|
-
from pyedb.generic.general_methods import generate_unique_name, pyedb_function_handler
|
|
30
28
|
|
|
31
29
|
|
|
32
30
|
class Terminal(Connectable):
|
|
@@ -57,14 +55,6 @@ class Terminal(Connectable):
|
|
|
57
55
|
"PinGroupTerminal": self._pedb.edb_api.cell.terminal.TerminalType.PinGroupTerminal,
|
|
58
56
|
}
|
|
59
57
|
|
|
60
|
-
self._terminal_mapping = {
|
|
61
|
-
"EdgeTerminal": EdgeTerminal,
|
|
62
|
-
"PointTerminal": PointTerminal,
|
|
63
|
-
"PadstackInstanceTerminal": PadstackInstanceTerminal,
|
|
64
|
-
"BundleTerminal": BundleTerminal,
|
|
65
|
-
"PinGroupTerminal": PinGroupTerminal,
|
|
66
|
-
}
|
|
67
|
-
|
|
68
58
|
@property
|
|
69
59
|
def _hfss_port_property(self):
|
|
70
60
|
"""HFSS port property."""
|
|
@@ -112,6 +102,34 @@ class Terminal(Connectable):
|
|
|
112
102
|
p["HFSS Type"] = value
|
|
113
103
|
self._hfss_port_property = p
|
|
114
104
|
|
|
105
|
+
@property
|
|
106
|
+
def layer(self):
|
|
107
|
+
"""Get layer of the terminal."""
|
|
108
|
+
point_data = self._pedb.point_data(0, 0)
|
|
109
|
+
layer = list(self._pedb.stackup.layers.values())[0]._edb_layer
|
|
110
|
+
if self._edb_object.GetParameters(point_data, layer):
|
|
111
|
+
return layer
|
|
112
|
+
else:
|
|
113
|
+
self._pedb.logger.warning(f"No pad parameters found for terminal {self.name}")
|
|
114
|
+
|
|
115
|
+
@layer.setter
|
|
116
|
+
def layer(self, value):
|
|
117
|
+
layer = self._pedb.stackup.layers[value]._edb_layer
|
|
118
|
+
point_data = self._pedb.point_data(*self.location)
|
|
119
|
+
self._edb_object.SetParameters(point_data, layer)
|
|
120
|
+
|
|
121
|
+
@property
|
|
122
|
+
def location(self):
|
|
123
|
+
"""Location of the terminal."""
|
|
124
|
+
layer = list(self._pedb.stackup.layers.values())[0]._edb_layer
|
|
125
|
+
_, point_data, _ = self._edb_object.GetParameters(None, layer)
|
|
126
|
+
return [point_data.X.ToDouble(), point_data.Y.ToDouble()]
|
|
127
|
+
|
|
128
|
+
@location.setter
|
|
129
|
+
def location(self, value):
|
|
130
|
+
layer = self.layer
|
|
131
|
+
self._edb_object.SetParameters(self._pedb.point_data(*value), layer)
|
|
132
|
+
|
|
115
133
|
@property
|
|
116
134
|
def is_circuit_port(self):
|
|
117
135
|
"""Whether it is a circuit port."""
|
|
@@ -219,7 +237,7 @@ class Terminal(Connectable):
|
|
|
219
237
|
|
|
220
238
|
terminal = Terminal(self._pedb, self._edb_object.GetReferenceTerminal())
|
|
221
239
|
if not terminal.is_null:
|
|
222
|
-
return
|
|
240
|
+
return terminal
|
|
223
241
|
|
|
224
242
|
@ref_terminal.setter
|
|
225
243
|
def ref_terminal(self, value):
|
|
@@ -265,7 +283,6 @@ class Terminal(Connectable):
|
|
|
265
283
|
|
|
266
284
|
return ""
|
|
267
285
|
|
|
268
|
-
@pyedb_function_handler()
|
|
269
286
|
def get_padstack_terminal_reference_pin(self, gnd_net_name_preference=None): # pragma : no cover
|
|
270
287
|
"""Get a list of pad stacks instances and serves Coax wave ports,
|
|
271
288
|
pingroup terminals, PadEdge terminals.
|
|
@@ -289,7 +306,6 @@ class Terminal(Connectable):
|
|
|
289
306
|
pins = self._pedb.components.get_pin_from_component(compInst.GetName())
|
|
290
307
|
return self._get_closest_pin(padStackInstance, pins, gnd_net_name_preference)
|
|
291
308
|
|
|
292
|
-
@pyedb_function_handler()
|
|
293
309
|
def get_pin_group_terminal_reference_pin(self, gnd_net_name_preference=None): # pragma : no cover
|
|
294
310
|
"""Return a list of pins and serves terminals connected to pingroups.
|
|
295
311
|
|
|
@@ -322,10 +338,9 @@ class Terminal(Connectable):
|
|
|
322
338
|
_, refTermPSI, _ = refTerm.GetParameters()
|
|
323
339
|
return EDBPadstackInstance(refTermPSI, self._pedb)
|
|
324
340
|
except AttributeError:
|
|
325
|
-
return
|
|
326
|
-
return
|
|
341
|
+
return False
|
|
342
|
+
return False
|
|
327
343
|
|
|
328
|
-
@pyedb_function_handler()
|
|
329
344
|
def get_edge_terminal_reference_primitive(self): # pragma : no cover
|
|
330
345
|
"""Check and return a primitive instance that serves Edge ports,
|
|
331
346
|
wave ports and coupled edge ports that are directly connedted to primitives.
|
|
@@ -349,7 +364,6 @@ class Terminal(Connectable):
|
|
|
349
364
|
return cast(primitive, self._pedb)
|
|
350
365
|
return None # pragma: no cover
|
|
351
366
|
|
|
352
|
-
@pyedb_function_handler()
|
|
353
367
|
def get_point_terminal_reference_primitive(self): # pragma : no cover
|
|
354
368
|
"""Find and return the primitive reference for the point terminal or the padstack instance.
|
|
355
369
|
|
|
@@ -378,9 +392,8 @@ class Terminal(Connectable):
|
|
|
378
392
|
rectangle_data = vias._pedb.modeler.shape_to_polygon_data(plane)
|
|
379
393
|
if rectangle_data.PointInPolygon(shape_pd):
|
|
380
394
|
return vias
|
|
381
|
-
return
|
|
395
|
+
return False
|
|
382
396
|
|
|
383
|
-
@pyedb_function_handler()
|
|
384
397
|
def get_pad_edge_terminal_reference_pin(self, gnd_net_name_preference=None):
|
|
385
398
|
"""Get the closest pin padstack instances and serves any edge terminal connected to a pad.
|
|
386
399
|
|
|
@@ -398,11 +411,10 @@ class Terminal(Connectable):
|
|
|
398
411
|
try:
|
|
399
412
|
edges = self._edb_object.GetEdges()
|
|
400
413
|
except AttributeError:
|
|
401
|
-
return
|
|
414
|
+
return False
|
|
402
415
|
_, pad_edge_pstack_inst, _, _ = edges[0].GetParameters()
|
|
403
416
|
return self._get_closest_pin(pad_edge_pstack_inst, pins, gnd_net_name_preference)
|
|
404
417
|
|
|
405
|
-
@pyedb_function_handler()
|
|
406
418
|
def _get_closest_pin(self, ref_pin, pin_list, gnd_net=None):
|
|
407
419
|
_, pad_stack_inst_point, _ = ref_pin.GetPositionAndRotation() # get the xy of the padstack
|
|
408
420
|
if gnd_net is not None:
|
|
@@ -432,224 +444,3 @@ class Terminal(Connectable):
|
|
|
432
444
|
pin_obj = pin
|
|
433
445
|
if pin_obj:
|
|
434
446
|
return EDBPadstackInstance(pin_obj, self._pedb)
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
class EdgeTerminal(Terminal):
|
|
438
|
-
def __init__(self, pedb, edb_object):
|
|
439
|
-
super().__init__(pedb, edb_object)
|
|
440
|
-
|
|
441
|
-
@pyedb_function_handler()
|
|
442
|
-
def couple_ports(self, port):
|
|
443
|
-
"""Create a bundle wave port.
|
|
444
|
-
|
|
445
|
-
Parameters
|
|
446
|
-
----------
|
|
447
|
-
port : :class:`dotnet.edb_core.ports.WavePort`, :class:`dotnet.edb_core.ports.GapPort`, list, optional
|
|
448
|
-
Ports to be added.
|
|
449
|
-
|
|
450
|
-
Returns
|
|
451
|
-
-------
|
|
452
|
-
:class:`dotnet.edb_core.ports.BundleWavePort`
|
|
453
|
-
|
|
454
|
-
"""
|
|
455
|
-
if not isinstance(port, (list, tuple)):
|
|
456
|
-
port = [port]
|
|
457
|
-
temp = [self._edb_object]
|
|
458
|
-
temp.extend([i._edb_object for i in port])
|
|
459
|
-
edb_list = convert_py_list_to_net_list(temp, self._edb.cell.terminal.Terminal)
|
|
460
|
-
_edb_bundle_terminal = self._edb.cell.terminal.BundleTerminal.Create(edb_list)
|
|
461
|
-
return self._pedb.ports[self.name]
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
class BundleTerminal(Terminal):
|
|
465
|
-
"""Manages bundle terminal properties.
|
|
466
|
-
|
|
467
|
-
Parameters
|
|
468
|
-
----------
|
|
469
|
-
pedb : pyedb.edb.Edb
|
|
470
|
-
EDB object from the ``Edblib`` library.
|
|
471
|
-
edb_object : Ansys.Ansoft.Edb.Cell.Terminal.BundleTerminal
|
|
472
|
-
BundleTerminal instance from EDB.
|
|
473
|
-
"""
|
|
474
|
-
|
|
475
|
-
def __init__(self, pedb, edb_object):
|
|
476
|
-
super().__init__(pedb, edb_object)
|
|
477
|
-
|
|
478
|
-
@property
|
|
479
|
-
def terminals(self):
|
|
480
|
-
"""Get terminals belonging to this excitation."""
|
|
481
|
-
return [EdgeTerminal(self._pedb, i) for i in list(self._edb_object.GetTerminals())]
|
|
482
|
-
|
|
483
|
-
@property
|
|
484
|
-
def name(self):
|
|
485
|
-
return self.terminals[0].name
|
|
486
|
-
|
|
487
|
-
@pyedb_function_handler()
|
|
488
|
-
def decouple(self):
|
|
489
|
-
"""Ungroup a bundle of terminals."""
|
|
490
|
-
return self._edb_object.Ungroup()
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
class PadstackInstanceTerminal(Terminal):
|
|
494
|
-
"""Manages bundle terminal properties."""
|
|
495
|
-
|
|
496
|
-
def __init__(self, pedb, edb_object):
|
|
497
|
-
super().__init__(pedb, edb_object)
|
|
498
|
-
|
|
499
|
-
@property
|
|
500
|
-
def position(self):
|
|
501
|
-
"""Return terminal position.
|
|
502
|
-
Returns
|
|
503
|
-
-------
|
|
504
|
-
Position [x,y] : [float, float]
|
|
505
|
-
"""
|
|
506
|
-
edb_padstack_instance = self._edb_object.GetParameters()
|
|
507
|
-
if edb_padstack_instance[0]:
|
|
508
|
-
return EDBPadstackInstance(edb_padstack_instance[1], self._pedb).position
|
|
509
|
-
return False
|
|
510
|
-
|
|
511
|
-
def create(self, padstack_instance, name=None, layer=None, is_ref=False):
|
|
512
|
-
"""Create an edge terminal.
|
|
513
|
-
|
|
514
|
-
Parameters
|
|
515
|
-
----------
|
|
516
|
-
prim_id : int
|
|
517
|
-
Primitive ID.
|
|
518
|
-
point_on_edge : list
|
|
519
|
-
Coordinate of the point to define the edge terminal.
|
|
520
|
-
The point must be on the target edge but not on the two
|
|
521
|
-
ends of the edge.
|
|
522
|
-
terminal_name : str, optional
|
|
523
|
-
Name of the terminal. The default is ``None``, in which case the
|
|
524
|
-
default name is assigned.
|
|
525
|
-
is_ref : bool, optional
|
|
526
|
-
Whether it is a reference terminal. The default is ``False``.
|
|
527
|
-
|
|
528
|
-
Returns
|
|
529
|
-
-------
|
|
530
|
-
Edb.Cell.Terminal.EdgeTerminal
|
|
531
|
-
"""
|
|
532
|
-
if not name:
|
|
533
|
-
pin_name = padstack_instance._edb_object.GetName()
|
|
534
|
-
refdes = padstack_instance.component.refdes
|
|
535
|
-
name = "{}_{}".format(refdes, pin_name)
|
|
536
|
-
name = generate_unique_name(name)
|
|
537
|
-
|
|
538
|
-
if not layer:
|
|
539
|
-
layer = padstack_instance.start_layer
|
|
540
|
-
|
|
541
|
-
layer_obj = self._pedb.stackup.signal_layers[layer]
|
|
542
|
-
|
|
543
|
-
terminal = self._edb.cell.terminal.PadstackInstanceTerminal.Create(
|
|
544
|
-
self._pedb.active_layout,
|
|
545
|
-
padstack_instance.net.net_object,
|
|
546
|
-
name,
|
|
547
|
-
padstack_instance._edb_object,
|
|
548
|
-
layer_obj._edb_layer,
|
|
549
|
-
isRef=is_ref,
|
|
550
|
-
)
|
|
551
|
-
terminal = PadstackInstanceTerminal(self._pedb, terminal)
|
|
552
|
-
|
|
553
|
-
return terminal if not terminal.is_null else False
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
class PointTerminal(Terminal):
|
|
557
|
-
"""Manages point terminal properties."""
|
|
558
|
-
|
|
559
|
-
def __init__(self, pedb, edb_object=None):
|
|
560
|
-
super().__init__(pedb, edb_object)
|
|
561
|
-
|
|
562
|
-
@pyedb_function_handler
|
|
563
|
-
def create(self, name, net, location, layer, is_ref=False):
|
|
564
|
-
"""Create a point terminal.
|
|
565
|
-
|
|
566
|
-
Parameters
|
|
567
|
-
----------
|
|
568
|
-
name : str
|
|
569
|
-
Name of the terminal.
|
|
570
|
-
net : str
|
|
571
|
-
Name of the net.
|
|
572
|
-
location : list
|
|
573
|
-
Location of the terminal.
|
|
574
|
-
layer : str
|
|
575
|
-
Name of the layer.
|
|
576
|
-
is_ref : bool, optional
|
|
577
|
-
Whether it is a reference terminal.
|
|
578
|
-
|
|
579
|
-
Returns
|
|
580
|
-
-------
|
|
581
|
-
:class:`pyedb.dotnet.edb_core.edb_data.terminals.PointTerminal`
|
|
582
|
-
"""
|
|
583
|
-
terminal = self._pedb.edb_api.cell.terminal.PointTerminal.Create(
|
|
584
|
-
self._pedb.active_layout,
|
|
585
|
-
self._pedb.nets[net].net_object,
|
|
586
|
-
name,
|
|
587
|
-
self._pedb.point_data(*location),
|
|
588
|
-
self._pedb.stackup[layer]._edb_layer,
|
|
589
|
-
is_ref,
|
|
590
|
-
)
|
|
591
|
-
terminal = PointTerminal(self._pedb, terminal)
|
|
592
|
-
return terminal if not terminal.is_null else False
|
|
593
|
-
|
|
594
|
-
@property
|
|
595
|
-
def location(self):
|
|
596
|
-
"""Location of the terminal."""
|
|
597
|
-
layer = list(self._pedb.stackup.layers.values())[0]._edb_layer
|
|
598
|
-
_, point_data, _ = self._edb_object.GetParameters(None, layer)
|
|
599
|
-
return [point_data.X.ToDouble(), point_data.Y.ToDouble()]
|
|
600
|
-
|
|
601
|
-
@location.setter
|
|
602
|
-
def location(self, value):
|
|
603
|
-
layer = self.layer
|
|
604
|
-
self._edb_object.SetParameters(self._pedb.point_data(*value), layer)
|
|
605
|
-
|
|
606
|
-
@property
|
|
607
|
-
def layer(self):
|
|
608
|
-
"""Get layer of the terminal."""
|
|
609
|
-
point_data = self._pedb.point_data(0, 0)
|
|
610
|
-
layer = list(self._pedb.stackup.layers.values())[0]._edb_layer
|
|
611
|
-
if self._edb_object.GetParameters(point_data, layer):
|
|
612
|
-
return layer
|
|
613
|
-
|
|
614
|
-
@layer.setter
|
|
615
|
-
def layer(self, value):
|
|
616
|
-
layer = self._pedb.stackup.layers[value]._edb_layer
|
|
617
|
-
point_data = self._pedb.point_data(*self.location)
|
|
618
|
-
self._edb_object.SetParameters(point_data, layer)
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
class PinGroupTerminal(Terminal):
|
|
622
|
-
"""Manages pin group terminal properties."""
|
|
623
|
-
|
|
624
|
-
def __init__(self, pedb, edb_object=None):
|
|
625
|
-
super().__init__(pedb, edb_object)
|
|
626
|
-
|
|
627
|
-
@pyedb_function_handler
|
|
628
|
-
def create(self, name, net_name, pin_group_name, is_ref=False):
|
|
629
|
-
"""Create a pin group terminal.
|
|
630
|
-
|
|
631
|
-
Parameters
|
|
632
|
-
----------
|
|
633
|
-
name : str
|
|
634
|
-
Name of the terminal.
|
|
635
|
-
net_name : str
|
|
636
|
-
Name of the net.
|
|
637
|
-
pin_group_name : str,
|
|
638
|
-
Name of the pin group.
|
|
639
|
-
is_ref : bool, optional
|
|
640
|
-
Whether it is a reference terminal. The default is ``False``.
|
|
641
|
-
|
|
642
|
-
Returns
|
|
643
|
-
-------
|
|
644
|
-
:class:`pyedb.dotnet.edb_core.edb_data.terminals.PinGroupTerminal`
|
|
645
|
-
"""
|
|
646
|
-
net_obj = self._pedb.edb_api.cell.net.find_by_name(self._pedb.active_layout, net_name)
|
|
647
|
-
term = self._pedb.edb_api.cell.terminal.PinGroupTerminal.Create(
|
|
648
|
-
self._pedb.active_layout,
|
|
649
|
-
net_obj.api_object,
|
|
650
|
-
name,
|
|
651
|
-
self._pedb.siwave.pin_groups[pin_group_name]._edb_object,
|
|
652
|
-
is_ref,
|
|
653
|
-
)
|
|
654
|
-
term = PinGroupTerminal(self._pedb, term)
|
|
655
|
-
return term if not term.is_null else False
|