.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_basic/14_merge_ports.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_basic_14_merge_ports.py: ========================= Merging one or more ports ========================= This example demonstrate how to merge two instance in the design to create a new merged definition .. GENERATED FROM PYTHON SOURCE LINES 10-75 .. code-block:: Python import spydrnet as sdn from spydrnet_physical.util import get_names from itertools import chain with open("_temp_merge_ports.v", "w", encoding="UTF-8") as tmp: tmp.write( """ module top(); wire [4:0] mode; module1 inst1 (.wire1(mode[4]), .wire2(mode[3]), .wire3(mode[2:0])); endmodule module module1(wire1, wire2, wire3); input wire1; input wire2; input [2:0]wire3; endmodule """ ) def merge_ports(self, new_port_name, port_sequence, reverse=False): new_port = self.create_port(new_port_name) new_cable = self.create_cable(new_port_name) for port in list(port_sequence): print(f"Adding wires from {port.name}") for pin in list(port.pins): wire = pin.wire port._pins.remove(pin) pin._port = None new_port.add_pin(pin) wire._cable = None new_cable.add_wire(wire) self.remove_cable(next(self.get_cables(port.name))) self.remove_port(port) print(f"Total pins {len(new_port.pins)}") print(f"Total wires {len(new_port.pins)}") new_port.direction = port.direction return new_port netlist = sdn.parse("_temp_merge_ports.v") top = netlist.top_instance module = next(netlist.get_definitions("top")) module1 = next(netlist.get_definitions("module1")) print(get_names(module1.get_ports())) merge_ports(module1, "merged_port", chain( module1.get_ports("wire3*"), module1.get_ports("wire2*"), module1.get_ports("wire1*"), ), ) print(get_names(module1.get_ports())) sdn.compose( netlist, "_temp_merge_ports_rewrite.v", skip_constraints=True, write_blackbox=False ) .. _sphx_glr_download_auto_basic_14_merge_ports.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: 14_merge_ports.ipynb <14_merge_ports.ipynb>` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: 14_merge_ports.py <14_merge_ports.py>` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: 14_merge_ports.zip <14_merge_ports.zip>` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_