Skip to content

Commit

Permalink
FIX: Create pingroup fix (#668)
Browse files Browse the repository at this point in the history
* hfsspi SimsetupInfo bug fixed

* temp

* create pingroup fix

* create pingroup fix

* Update src/pyedb/dotnet/edb_core/modeler.py

Co-authored-by: Sébastien Morais <[email protected]>

---------

Co-authored-by: Sébastien Morais <[email protected]>
  • Loading branch information
svandenb-dev and SMoraisAnsys committed Jul 11, 2024
1 parent 3aa242f commit 41aceea
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 16 deletions.
55 changes: 39 additions & 16 deletions src/pyedb/dotnet/edb_core/modeler.py
Original file line number Diff line number Diff line change
Expand Up @@ -1396,7 +1396,13 @@ def create_bondwire(
net=self._pedb.nets[net]._edb_object,
)

def create_pin_group(self, name: str, pins_by_id: list[int] = None, pins_by_aedt_name: list[str] = None):
def create_pin_group(
self,
name: str,
pins_by_id: list[int] = None,
pins_by_aedt_name: list[str] = None,
pins_by_name: list[str] = None,
):
"""Create a PinGroup.
Parameters
Expand All @@ -1406,23 +1412,40 @@ def create_pin_group(self, name: str, pins_by_id: list[int] = None, pins_by_aedt
List of pins by ID.
pins_by_aedt_name : list[str] or None
List of pins by AEDT name.
pins_by_name : list[str] or None
List of pins by name.
"""
pins = []

if pins_by_id is not None:
pins = {}
if pins_by_id:
for p in pins_by_id:
pins.append(self._pedb.layout.find_object_by_id(p._edb_object))
else:
edb_pin = self._pedb.layout.find_object_by_id(p)
if edb_pin and not p in pins:
pins[p] = edb_pin._edb_object
if not pins_by_aedt_name:
pins_by_aedt_name = []
if not pins_by_name:
pins_by_name = []
if pins_by_aedt_name or pins_by_name:
p_inst = self._pedb.layout.padstack_instances
while True:
p = p_inst.pop(0)
if p.aedt_name in pins_by_aedt_name:
pins.append(p._edb_object)
pins_by_aedt_name.remove(p.aedt_name)
if len(pins_by_aedt_name) == 0:
break

self._edb.cell.hierarchy.pin_group.Create(
self._pedb.layout._edb_object, name, convert_py_list_to_net_list(pins)
_pins = {
pin.id: pin._edb_object
for pin in p_inst
if pin.aedt_name in pins_by_aedt_name or pin.name in pins_by_name
}
if not pins:
pins = _pins
else:
for id, pin in _pins.items():
if not id in pins:
pins[id] = pin
if not pins:
self._logger.error("No pin found.")
return False
pins = list(pins.values())
obj = self._edb.cell.hierarchy.pin_group.Create(
self._pedb.active_layout, name, convert_py_list_to_net_list(pins)
)
if obj.IsNull():
self._logger.debug("Pin group creation returned Null obj.")
return False
return self._pedb.siwave.pin_groups[name]
17 changes: 17 additions & 0 deletions tests/legacy/system/test_edb.py
Original file line number Diff line number Diff line change
Expand Up @@ -1682,3 +1682,20 @@ def test_create_port_ob_component_no_ref_pins_in_component(self, edb_examples):
sim_setup.do_cutout_subdesign = False
edbapp.build_simulation_project(sim_setup)
assert len(edbapp.ports) == 15

def test_create_ping_group(self, edb_examples):
edbapp = edb_examples.get_si_verse()
assert edbapp.modeler.create_pin_group(
name="test1", pins_by_id=[4294969495, 4294969494, 4294969496, 4294969497]
)

assert edbapp.modeler.create_pin_group(
name="test2", pins_by_id=[4294969502, 4294969503], pins_by_aedt_name=["U1-A11", "U1-A12", "U1-A13"]
)
assert edbapp.modeler.create_pin_group(
name="test3",
pins_by_id=[4294969502, 4294969503],
pins_by_aedt_name=["U1-A11", "U1-A12", "U1-A13"],
pins_by_name=["A11", "A12", "A15", "A16"],
)
edbapp.close()

0 comments on commit 41aceea

Please sign in to comment.