NetlistFromLayout

class ipkiss3.all.NetlistFromLayout

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.

By default, electrical nets are only created for exposed electrical ports, but not for connectivity between instances inside the circuit.

Parameters:
view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters:
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>