Exemplo n.º 1
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        my_column = IoColumnGroup(
            south_east=(2000.0, 0.0),  # column width = 2000um
            y_spacing=25.0)  # vertical spacing between waveguides

        # define a component
        from picazzo.filters.ring import RingRect180DropFilter
        my_ring = RingRect180DropFilter(name="My_Ring")

        # add the component to the column
        my_column.add(
            my_ring,
            # the following are parameters of the IOFibcoup adapter, which are passed on
            taper_length=
            50.0,  # taper from component to intermediate waveguide. Default = 300.
            wg_width=2.0,  # width of intermediate waveguide. Default = 3.0
            trench_width=
            2.0,  # trench width of intermediate waveguide. Default from TECH
            connect_length=100.0,  # horizontal length of Fanout. Default = 40.0
            bend_radius=30.0,  # bend radius of Fanout. Default from TECH 
            minimum_straight=8.0,  # minimum straight sections
            fibcoup=TECH.IO.FIBCOUP.DEFAULT_GRATING,  # default fiber coupler
            fibcoup_offset=
            30.0,  # offset of grating coupler from the edge. Default = 25.6
            fibcoup_taper_length=
            200.0,  # Taper length from intermedeate waveguide to fiber coupler
            merged_waveguides=False  # bundle waveguide in Fanout
        )
        elems += my_column
        return elems
Exemplo n.º 2
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        from picazzo.io.fibcoup import IoFibcoupGeneric
        my_column = IoColumnGroup(
            south_east=(2000.0, 0.0),  # column width = 2000um
            y_spacing=25.0,  # vertical spacing between waveguides
            adapter=IoFibcoupGeneric)  # new default adapter

        # define a component
        from picazzo.filters.ring import RingRect180DropFilter
        my_ring = RingRect180DropFilter(name="My_Ring")

        # add the component to the column
        my_column.add(
            my_ring,
            west_fibcoups=[
                TECH.IO.FIBCOUP.DEFAULT_GRATING_TE,
                TECH.IO.FIBCOUP.DEFAULT_GRATING_TM
            ],  # list
            east_fibcoup_taper_lengths=[50.0, 300.0, 500.0],  # list
        )  # each individual fiber coupler interface can now be set separately
        # if there are more parts than elements in a list, the adapter will cycle through
        # the elements in the list. in this case, the west fiber couplers will
        # alternate between TE and TM. The east taper lengths will cycle between the
        # three values.
        # The cycling restarts with each new invokation of the adapter.
        # all parameters of IoFibcoup can be used, but with prefix 'east_' or 'west_',
        # and converted to plural
        elems += my_column
        return elems
Exemplo n.º 3
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        from picazzo.io.fibcoup import IoFibcoupAsymmetric
        my_column = IoColumnGroup(
            south_east=(2000.0, 0.0),  # column width = 2000um
            y_spacing=25.0,  # vertical spacing between waveguides
            adapter=IoFibcoupAsymmetric)  # new default adapter

        # define a component
        from picazzo.filters.ring import RingRect180DropFilter
        my_ring = RingRect180DropFilter(name="My_Ring")

        # add the component to the column
        my_column.add(
            my_ring,
            west_fibcoup=TECH.IO.FIBCOUP.DEFAULT_GRATING_TE,
            east_fibcoup=TECH.IO.FIBCOUP.DEFAULT_GRATING_TM,
            east_merged_waveguides=False,
        )  # all adapter parameters can be set for east and west separately
        # all the regular parameters if IoFibcoup can be used, now with prefix
        # 'east_' or "west_' (see previous example).

        elems += my_column
        return elems
Exemplo n.º 4
0
 def define_elements(self, elems):
     from picazzo.filters.ring import RingRect180DropFilter
     from ipkiss.plugins.photonics.wg.basic import WgElDefinition
     huge_ring = RingRect180DropFilter(
         ring_wg_definition=WgElDefinition(wg_width=0.5),
         coupler_wg_definitions=[
             WgElDefinition(wg_width=0.4),
             WgElDefinition(wg_width=0.6)
         ],
         coupler_spacings=[5.0, 5.0],
         straights=(60.0, 120.0),
         bend_radius=110.0)
     from picazzo.io.fibcoup import IoFibcoup
     from picazzo.fibcoup.uniform import UniformLineGrating
     grating = UniformLineGrating(
         origin=(0.0, 0.0),
         period=0.689,
         line_width=0.423,
         n_o_periods=20,
         wg_definition=WgElDefinition(wg_width=9.0),
         process=TECH.PROCESS.FC)
     ring_with_fibcoup = IoFibcoup(struct=huge_ring,
                                   offset=(0.0, 0.0),
                                   y_spacing=huge_ring.size_info().height,
                                   south_west=(0.0, 0.0),
                                   south_east=(1500.0, 0.0),
                                   fibcoup=grating)
     elems += SRef(reference=ring_with_fibcoup)
     return elems
Exemplo n.º 5
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        my_column = IoColumnGroup(south_east=(2000.0, 0.0), y_spacing=25.0)

        from picazzo.filters.ring import RingRect180DropFilter
        for r in [5.0, 6.0, 7.0]:
            my_ring = RingRect180DropFilter(bend_radius=r)
            my_column.add(my_ring)
        my_column.add_blocktitle("RING")

        elems += my_column
        return elems
Exemplo n.º 6
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        my_column = IoColumnGroup(
            south_east=(2000.0, 0.0),  # column width = 2000um
            y_spacing=25.0)  # vertical spacing between waveguides

        # define a component
        from picazzo.filters.ring import RingRect180DropFilter
        my_ring = RingRect180DropFilter(name="My_Ring")

        # add the component to the column
        my_column.add(my_ring)

        elems += my_column
        return elems
Exemplo n.º 7
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        my_column = IoColumnGroup(
            south_east=(2000.0, 0.0),  # column width = 2000um
            y_spacing=25.0)  # vertical spacing between waveguides

        # define a component
        from picazzo.filters.ring import RingRect180DropFilter
        my_ring = RingRect180DropFilter(name="My_Ring")

        # add the component to the column
        from picazzo.io.fibcoup import IoFibcoup
        my_column.add(
            my_ring,
            offset=(50, 50),  # offset the structure from the center
            adapter=IoFibcoup,  # this is the default adapter.
            transformation=Rotation(rotation=10.0))  # transform the structure

        elems += my_column
        return elems
Exemplo n.º 8
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        my_column = IoColumnGroup(south_east=(2000.0, 0.0), y_spacing=25.0)

        from picazzo.filters.ring import RingRect180DropFilter
        from picazzo.container import RoutePortsAroundCorner
        for r in [5.0, 6.0, 7.0]:
            my_ring = RingRect180DropFilter(bend_radius=r)
            my_ring_routed = RoutePortsAroundCorner(
                structure=my_ring,
                port_labels=["W1"],
                first_step_direction=NORTH,
                output_direction=EAST,
                spacing=5.0,
            )  # routes add port to the east
            my_column.add(my_ring_routed)
        my_column.add_blocktitle("RING")

        elems += my_column
        return elems
Exemplo n.º 9
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        my_column = IoColumnGroup(south_east=(2000.0, 0.0), y_spacing=25.0)

        from picazzo.filters.ring import RingRect180DropFilter
        from picazzo.container import RoutePortsAroundCorner
        for r in [25.0, 30.0, 35.0]:  # we make the rings 5 times larger
            my_ring = RingRect180DropFilter(bend_radius=r)
            my_ring_routed = RoutePortsAroundCorner(
                structure=my_ring,
                port_labels=["W1"],
                first_step_direction=NORTH,
                output_direction=EAST,
                spacing=5.0,
            )  # routes add port to the east
            my_column.add(my_ring_routed)
            my_column.straighten_to_north(
            )  # levels out both sides, taking into account the
            # size of the last structure in the middle

        my_column.add_blocktitle("RING")
        elems += my_column
        return elems
Exemplo n.º 10
0
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
#
# i-depot BBIE 7396, 7556, 7748
#
# Contact: [email protected]

from technologies.si_photonics.picazzo.default import *
from ipkiss.all import *

# our basic component that we will use...
from picazzo.filters.ring import RingRect180DropFilter
my_ring = RingRect180DropFilter(name="My_Ring")

from picazzo.container import RoutePortsAroundCorner

# Routing using default parameters
my_ring_routed = RoutePortsAroundCorner(
    structure=my_ring,
    port_labels=["W1", "W0"],  # ports to be routed
    first_step_direction=SOUTH,  # when rounding corner, go this direction first
    output_direction=EAST)  # final output direction
my_ring_routed.write_gdsii("route_ports_1.gds")

# customizing: similar as fanout
my_ring_routed_2 = RoutePortsAroundCorner(
    structure=my_ring,
    port_labels=["W1", "W0"],
Exemplo n.º 11
0
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
#
# i-depot BBIE 7396, 7556, 7748
#
# Contact: [email protected]

from technologies.si_photonics.picazzo.default import *
from ipkiss.all import *

# our basic component that we will use...
from picazzo.filters.ring import RingRect180DropFilter

my_ring = RingRect180DropFilter(name="My_Ring")

from picazzo.container import TaperDeepPorts
from ipkiss.plugins.photonics.wg import WgElDefinition

my_ring_tapered = TaperDeepPorts(structure=my_ring,
                                 port_labels=["W0", "E0", "E1"],
                                 end_wg_def=WgElDefinition(wg_width=0.7))
my_ring_tapered.write_gdsii("taper_ports_1.gds")

from picazzo.wg.wgdefs.wg_fc import ShallowWgElDefinition

my_shallow_wg = ShallowWgElDefinition(
    wg_width=0.6)  # a shallow etched waveguide
my_shallow_ring = RingRect180DropFilter(
    name="My_Shallow_Ring",
Exemplo n.º 12
0
 def get_ring(self, radius):
     from picazzo.filters.ring import RingRect180DropFilter
     return RingRect180DropFilter(bend_radius=radius,
                                  straights=(0.0, 0.0),
                                  coupler_spacings=[0.67, 0.67])