ipkiss3.all.NetlistFromLayout

class ipkiss3.all.NetlistFromLayout(*args, **kwargs)

Netlist extraction from a layout view.

This allows to extract the netlist based on layout information.

The optical nets are extracted by comparing whether the optical ports in the layout are connecting. An optical port is connected when they touch, have opposite angle, and their trace template matches. The latter is important to ensure there’s no error in user’s design.

Parameters:

view_name: str, optional

The name of the view

layout_view: _LayoutView, locked

Layout view on which this netlist is based

Examples

import ipkiss3.all as i3

class MyPCell(i3.PCell):
    class Layout(i3.LayoutView):
        def _generate_instances(self, insts):
            wg = i3.Waveguide()
            wg.Layout(shape=[(0, 0), (10, 0)])

            # Place 2 waveguides which are connected (output of wg1 is connected to input of wg2)
            insts += i3.SRef(name='wg1', reference=wg, position=(0, 0))
            insts += i3.SRef(name='wg2', reference=wg, position=(10, 0))

            return insts

        def _generate_ports(self, ports):
            ports += i3.expose_ports(self.instances, {'wg1:in': 'input', 'wg2:out': 'output'})
            return ports

    class Netlist(i3.NetlistFromLayout):
        pass

pcell = MyPCell()

nl = pcell.Netlist()
print(nl.netlist)

# This will print:

# netlist:
# --------
# instances:
#     - wg1 : <Single instance in netlist of WG_TRACE_1>
#     - wg2 : <Single instance in netlist of WG_TRACE_1>

# terms:
#     - input
#     - output

# nets:
#     - output-wg2:out: <OpticalLink output to wg2:out>
#     - input-wg1:in: <OpticalLink input to wg1:in>
#     - wg1:out-wg2:in: <OpticalLink wg1:out to wg2:in>