Ports Reference

Ports are locations on the layout where connections are made. Each port has a name and a location. In IPKISS there are optical ports for the connection of optical waveguides or fibers or electrical ports for the connection with electrical wires.

class MyPCell(i3.PCell):
    class Layout(i3.LayoutView):

        def _generate_ports(self, ports):
            ports += i3.OpticalPort(name="in", position=(0.0,0.0), angle=180.0)
            ports += i3.OpticalPort(name="out1", position=(8.0,3.0), angle=0.0)
            ports += i3.OpticalPort(name="out2", position=(8.0,-3.0), angle=0.0)
            return ports

Optical Ports

OpticalPort

In-plane Port in the Optical Domain

VerticalOpticalPort

Out-of-plane Port in the Optical Domain

OpticalPortProperty

Property type for storing an OpticalPort

Electrical Ports

ElectricalPort

Port in the electrical domain.

ElectricalPortProperty

Property type for storing an ElectricalPort

Create Ports

When creating a circuit, you can use i3.expose_ports to easily expose the ports of the instances.

class MyPCell(i3.PCell):
    class Layout(i3.LayoutView):

        def _generate_instances(self, insts):
           insts += i3.SRef(reference=self.wg, name='wg1')
           insts += i3.SRef(reference=self.wg, name='wg2', position=(30, 0))
           return insts

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

           return ports

expose_ports

Expose ports of a list of instances by copying and renaming the instance-ports specified in the port name map.