def _default_wg_t1(self): wg_t1 = WireWaveguideTemplate( name="dongbo{}".format(str(np.random.randint(0, 10000)))) wg_t1.Layout(core_width=self.widtha, cladding_width=self.widtha + 16.0, core_process=i3.TECH.PROCESS.WG) return wg_t1
def _default_wg_t1(self): wg_t1 = WireWaveguideTemplate( name="port_template{}".format(str(self.start_id + 1))) wg_t1.Layout(core_width=self.width, cladding_width=self.width + 16.0, core_process=i3.TECH.PROCESS.WG) return wg_t1
def _default_wg_t(self): tt_n = WireWaveguideTemplate() tt_n.Layout( core_width=3.3, cladding_width=3.3 + 2 * 8, ) return tt_n
def _default_wg_t1(self): wg_t1 = WireWaveguideTemplate(name="port20") wg_t1.Layout( core_width=20, cladding_width=20 + 2 * 12.0, ) return wg_t1
def _default_wg_t_MM(self): tt_w = WireWaveguideTemplate() tt_w.Layout( core_width=self.width, cladding_width=self.width + 2 * 8, ) return tt_w
def _default_wg_dc(self): wg_t1 = WireWaveguideTemplate(name="dc") wg_t1.Layout( core_width=2.8, cladding_width=2.8 + 2 * 12.0, ) return wg_t1
def _default_wg_t1(self): wg_t1 = WireWaveguideTemplate(name="port_{}".format(str(self.width))) wg_t1.Layout( core_width=self.width, cladding_width=self.width + 16, ) return wg_t1
def _default_wg_t_port(self): tt_w = WireWaveguideTemplate() tt_w.Layout( core_width=8.75, cladding_width=8.75 + 2 * 8, ) return tt_w
def _default_tt_cross(self): tt_w = WireWaveguideTemplate() tt_w.Layout(core_width=(self.width), cladding_width=(self.width), **self.props ) return tt_w
def _default_wg_t2(self): wg_t2 = WireWaveguideTemplate( name="port_{}_{}".format(str(self.width), str(self.offset))) wg_t2.Layout( core_width=self.width, cladding_width=self.width + 2 * 12.0, ) return wg_t2
def _default_tt_square(self): tt_w = WireWaveguideTemplate() tt_w.Layout(core_width=(self.size), cladding_width=(self.size), **self.props ) print 'ttw in Square is ', tt_w return tt_w
def _default_MMI22_list(self): print '____________ MMI 2x2 ______________' MMI22_list = [] for l, dl in enumerate(self.length_inc_vec): print 'length number ' + str(l) print 'dl ' + str(dl) print 'MM length ' + str(self.length_22 + dl) cell = MMI2x2Tapered(mmi_trace_template=self.wg_t_MM, input_trace_template=self.wg_t_port, output_trace_template=self.wg_t_port, trace_template=self.wg_t, name='MMI22_w_' + str(self.width) + '_l_' + str(self.length_22 + dl)) cell.Layout(transition_length=self.l_taper, length=self.length_22 + dl, trace_spacing=self.ts_12) MMI22_list.append(cell) print 'cell name ' + str(cell.name) print '__________________________' for w, dw in enumerate(self.width_inc_vec): MM_w = self.width + dw print 'width number ' + str(w) print 'dw ' + str(dw) print 'MM width ' + str(MM_w) wg_t_MM_w = WireWaveguideTemplate() wg_t_MM_w.Layout( core_width=MM_w, cladding_width=MM_w + 2 * 8, ) cell = MMI2x2Tapered(mmi_trace_template=wg_t_MM_w, input_trace_template=self.wg_t_port, output_trace_template=self.wg_t_port, trace_template=self.wg_t, name='MMI22_w_' + str(self.width + dw) + '_l_' + str(self.length_22)) cell.Layout(transition_length=self.l_taper, length=self.length_22, trace_spacing=self.ts_12 + dw) #.visualize(annotate=True) print cell MMI22_list.append(cell) print 'cell name ' + str(cell.name) print '__________________________' print 'last MMI22 done' print '_ _ _ _ _ _ _ _ _ _ _ _ _ ' return MMI22_list
def _default_Spirals_w_list(self): Spirals_w_list = [] for w, width in enumerate(self.width_vec): print 'The core width is: ', width wg_t = WireWaveguideTemplate() wg_t.Layout(core_width=width, cladding_width=width, ) Spirals_w_list.append(Spirals(s_length_vec=self.s_length_vec, waveguide_template=wg_t, tipo=self.tipo, width=w+1, n=self.n, R=self.R, tlport=self.tlport,chip_length=self.chip_length, name = 'Spirals_w_'+ str(width))#.Layout(local_mbend_radius = radius) ) return Spirals_w_list
def __example_layout(self): from technologies import silicon_photonics from picazzo3.traces.wire_wg.trace import WireWaveguideTemplate import ipkiss3.all as i3 import numpy as np from euler_rounding_algorithm import Euler90Algorithm from SplittersAndCascades import Bent_Coupler_Symm # set waveguide templates for # the north waveguide (wg_t1) # and the south waveguide (wg_t2) wg_t1 = WireWaveguideTemplate(name="south_arm") wg_t1.Layout(core_width=2.400, cladding_width=i3.TECH.WG.CLADDING_WIDTH, core_process=i3.TECH.PROCESS.WG) wg_t2 = WireWaveguideTemplate(name="north arm") wg_t2.Layout(core_width=1.500, cladding_width=i3.TECH.WG.CLADDING_WIDTH, core_process=i3.TECH.PROCESS.WG) # set the directional coupler (can also be MMI) # and then pass it as an child PCell to Bend_Coupler PCell C = Bent_Coupler_Symmr(name="my_dircoup_2", trace_template1=wg_t1, trace_template2=wg_t2, coupler_length=20.0) layout = C.Layout(bend_radius=10.0, straight_after_bend=6.0, bend_angle=60.0) layout.visualize()
def __example_layout(self): from technologies import silicon_photonics from picazzo3.traces.wire_wg.trace import WireWaveguideTemplate import ipkiss3.all as i3 import numpy as np from euler_rounding_algorithm import EulerArbAlgorithm from SplittersAndCascades import Bent_Coupler_Symm # wg_t1: waveguide template of the south arm # wg_t2: waveguide template of the north arm # define the template, set the core waveguide width wg_t1 = WireWaveguideTemplate(name="south_arm") wg_t1.Layout(core_width=2.400, cladding_width=i3.TECH.WG.CLADDING_WIDTH, core_process=i3.TECH.PROCESS.WG) wg_t2 = WireWaveguideTemplate(name="north arm") wg_t2.Layout(core_width=1.500, cladding_width=i3.TECH.WG.CLADDING_WIDTH, core_process=i3.TECH.PROCESS.WG) DC = StraightDirectionalCoupler(name="Directional coupler", trace_template1=wg_t1, trace_template2=wg_t2, coupler_length=50.0) layout_DC = DC.Layout(coupler_spacing=10.0) C = S_Bend_Coupler_Arb(name="modal_coupler", wg_template1=wg_t1, wg_template2=wg_t2, coupler=DC) layout = C.Layout(bend_radius=30.0, bend_angle_deg=60.0, s_bend_straight=10.0, straight_after_bend=50.0, in1_bent=True, in2_bent=True, out1_bent=False, out2_bent=True, rounding_algorithm=EulerArbAlgorithm) layout.visualize()
def _default_wg_t1(self): wg_t1 = WireWaveguideTemplate() wg_t1.Layout(core_width=15.0, cladding_width=15.0 + 16.0, core_process=i3.TECH.PROCESS.WG) return wg_t1
def _default_trace_template(self): wg_sm2 = WireWaveguideTemplate() wg_sm2.Layout(core_width=3.1, cladding_width=3.1 + 24.0) return wg_sm2
def _default_mmi_access_template(self): mmi_access_template = WireWaveguideTemplate(name="MMI_at") mmi_access_template.Layout(core_width=9.0, cladding_width=9.0 + 2 * 12) return mmi_access_template
def _default_mmi_trace_template(self): mmi_trace_template = WireWaveguideTemplate(name="MMI_tt") mmi_trace_template.Layout(core_width=20.0, cladding_width=20.0 + 2 * 12) # MMI_width return mmi_trace_template
def _default_trace_template(self): wg_sm = WireWaveguideTemplate(name="sm_template") wg_sm.Layout(core_width=3.8, cladding_width=3.8 + 2 * 12.0) return wg_sm
def _default_mmi_access_template(self): mmi_access_template = WireWaveguideTemplate( name="dongbo{}".format(str(self.start_id + 5))) mmi_access_template.Layout(core_width=9.0, cladding_width=9.0 + 16.0) return mmi_access_template
def _default_mmi_trace_template(self): mmi_trace_template = WireWaveguideTemplate( name="dongbo{}".format(str(self.start_id + 4))) mmi_trace_template.Layout(core_width=20.0, cladding_width=20.0 + 16.0) # MMI_width return mmi_trace_template
def _default_wg_sm(self): wg_sm = WireWaveguideTemplate( name="dongbo{}".format(str(self.start_id + 3))) wg_sm.Layout(core_width=3.8, cladding_width=3.8 + 16.0) return wg_sm
def _default_tt_port(self): tt_port = WireWaveguideTemplate() tt_port_layout=tt_port.Layout(core_width=15.0, cladding_width=15.0+2*8) return tt_port
def _default_mmi_access_template(self): mmi_access_template = WireWaveguideTemplate() mmi_access_template.Layout(core_width=9.0, cladding_width=9.0 + 16.0) return mmi_access_template
def _default_wg_sm(self): wg_sm = WireWaveguideTemplate() wg_sm.Layout(core_width=3.8, cladding_width=3.8 + 16.0) return wg_sm
def _default_mmi_trace_template(self): mmi_trace_template = WireWaveguideTemplate() mmi_trace_template.Layout(core_width=20.0, cladding_width=20.0 + 16.0) # MMI_width return mmi_trace_template
def _default_wg_dc2(self): wg_dc2 = WireWaveguideTemplate(name="dc2_template") wg_dc2.Layout(core_width=2.8, cladding_width=2.8 + 16.0) return wg_dc2
# from picazzo3.routing.place_route import PlaceAndConnect from picazzo3.routing.place_route import PlaceAndAutoRoute import ipkiss3.all as i3 from picazzo3.wg.dircoup import BendDirectionalCoupler # wg_t = WireWaveguideTemplate(name="my_wg_template1") # wg_t.Layout(core_width=0.550, # cladding_width=i3.TECH.WG.CLADDING_WIDTH, # core_process=i3.TECH.PROCESS.WG) # Define Templates wg_t1 = WireWaveguideTemplate() wg_t1.Layout(core_width=15.0, cladding_width=15.0 + 16.0, core_process=i3.TECH.PROCESS.WG) wg_sm = WireWaveguideTemplate() wg_sm.Layout(core_width=3.8, cladding_width=3.8 + 16.0) # wg_sm2 = WireWaveguideTemplate() # wg_sm2.Layout(core_width=3.1, cladding_width=3.1 + 16.0) mmi_trace_template = WireWaveguideTemplate() mmi_trace_template.Layout(core_width=20.0, cladding_width=20.0 + 16.0) # MMI_width mmi_access_template = WireWaveguideTemplate()
def _default_trace_template(self): wg_sm = WireWaveguideTemplate(name="sm_template" + str(self.sm_width)) wg_sm.Layout(core_width=self.sm_width, cladding_width=self.sm_width + 16.0) return wg_sm