前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PhotoCAD助力快速构建光栅结构

PhotoCAD助力快速构建光栅结构

作者头像
光学小豆芽
发布2023-12-21 15:57:04
2970
发布2023-12-21 15:57:04
举报
文章被收录于专栏:硅光技术分享

本文旨在使用智能版图设计工具PhotoCAD帮助用户快速创建基于光栅的链路结构,通过工具创建的版图文件支持多种形式导出,从而方便用户后续导入仿真软件作进一步结构验证。并且生成的结构,可以通过脚本快速实现参数修改,真正意义上实现一次创建全流程受益。

1. 光栅简介 光子晶体由周期性结构构成,可以建立光子带隙,从而实现操纵光。目前被广泛应用于微波、光子学等领域,值得关注的是,拓扑光子学就是以光子晶体为基础的热门研究领域。其中,光栅结构作为一维光子晶体结构,其具有结构理论清晰简单、物理理论健全等优势,得到许多科研人员的青睐。

光栅结构是由两种折射率不同的材料进行周期性键合从而形成的微腔结构,通过调整两种材料的占空比可以调节有效折射率,为新型的光子器件提供了新的设计思路,并进一步提高了设计纬度。其中,亚波长光栅是指微腔小于波长的光栅结构。

2. 常见光栅结构的版图实现 光栅是一种重要的光学元件,它在各种应用场景中发挥着重要的作用。为了满足不同的需求,光栅的结构设计也有多种类型。本文将介绍三种常见光栅结构的设计方案,包括两端过渡型光栅、常规光栅以及Taper型光栅结构。 2.1 两端过渡型光栅 两端过渡型光栅是一种特殊的光栅结构,它通过在光栅的两端引入渐变结构,使得光栅在两端具有平滑的过渡。这种设计可以有效地减少光栅在端面的反射和散射,提高光栅的透过率和成像质量。同时,两端过渡型光栅还可以有效地抑制光学噪声和干扰,提高光学系统的稳定性。两端过渡型光栅结构如图2-1所示。

图2-1 两端过渡型光栅结构

代码语言:text
复制
  import math
  from fnpcell import all as fp
  from typing_extensions import Tuple, List, cast
  from gpdk import all as pdk
  from gpdk.technology import get_technology
 from gpdk.technology.wg.types import CoreCladdingWaveguideType
   
  class SWG(fp.PCell):
      """
      Attributes:
          w_length_init default=480
          w_length default=880
          swg_segments default=63
          trans_segments default=9
          swg_width default=120
          swg_period default=232
   
      Examples:
      SWG = SWG(w_length_init=480, w_length=880, swg_segments=63,trans_segments=9, swg_width=120, swg_period=232)
      """
      ## init parameters
      swg_segments:int = fp.IntParam(default = 63, min=0)
      trans_segments:int = fp.IntParam(default = 9, min=0)
      swg_width:float = fp.PositiveFloatParam(default = 120)
      w_length: float = fp.PositiveFloatParam(default = 880)
      w_length_init: float = fp.PositiveFloatParam(default = 480)
      swg_period: float = fp.PositiveFloatParam(default = 232)
      wavegide_type: CoreCladdingWaveguideType = fp.WaveguideTypeParam(type=CoreCladdingWaveguideType, default=get_technology().WG.FWG.C.WIRE)
   
      def build(self):
          ## initial
          insts, elems, ports = super().build()
   
          ## trans parameters
          swg_length    = self.swg_period*self.swg_segments+self.swg_width
          trans_length  = self.trans_segments*self.swg_period
          swg_dutycycle = self.swg_width/self.swg_period
          w_steplength  = (self.w_length
self.w_length_init)/(self.trans_segments-1)
          w_lengthlist  = []
          for i in range(self.trans_segments):
              w_lengthlist.append(self.w_length_init+w_steplength*i)
          for i in range(self.swg_segments):
              w_lengthlist.append(self.w_length)
          for i in range(self.trans_segments):
              w_lengthlist.append(self.w_length-w_steplength*i)
   
          ## define core area
          for i in range(len(w_lengthlist)):
              swg_polygon = fp.el.Rect(width=self.swg_width,
                                      height=w_lengthlist[i],
                                      layer=self.wavegide_type.core_layer,
                                      center=((-(swg_length/2)-trans_length)+i*self.swg_period, 0)
                                      )
              elems += swg_polygon
   
          return insts, elems, ports
   

2.2 常规光栅

常规光栅是一种常见的光栅结构,它由一系列平行且等间距的狭缝组成。常规光栅具有较高的透过率和分辨率,适用于各种光学应用场景。然而,常规光栅也存在一些缺点,如衍射效应较强、光谱分辨率较低等。为了克服这些缺点,人们不断尝试对常规光栅进行改进和优化。常规光栅结构如图2-2所示,这类光栅可以理解为没有两端过渡的光栅,直接调用上述代码将过渡区段数设置为0即可实现。

图2-2 常规光栅结构

2.3 Taper型光栅

Taper型光栅结构是一种新型的光栅结构,它通过在光栅的一侧引入渐变结构,使得光栅在横向方向上逐渐变窄。这种设计可以有效地抑制衍射效应和提高光谱分辨率。同时,Taper型光栅结构还可以有效地改善光学系统的成像质量,提高光学系统的稳定性。Taper型光栅如图2-3所示,实现手段类似上述方法,不过仅有过渡区。

图2-3 Taper型光栅

代码语言:text
复制
  class TaperSWG(fp.PCell):
      """
      Attributes:
          w_length_init default=480
          w_length default=880
          trans_segments default=20
          swg_width default=120
          swg_period default=232
      Examples:
          TaperSWG=TaperSWG(w_length_init=480, w_length=880, trans_segments=20, swg_width=120, swg_period=232)
      """
      ## init parameters
      trans_segments:int = fp.IntParam(default = 20, min=0)
      swg_width:float = fp.PositiveFloatParam(default = 120)
      w_length: float = fp.PositiveFloatParam(default = 880)
      w_length_init: float = fp.PositiveFloatParam(default = 480)
      swg_period: float = fp.PositiveFloatParam(default = 232)
      wavegide_type: CoreCladdingWaveguideType = fp.WaveguideTypeParam(type=CoreCladdingWaveguideType, default=get_technology().WG.FWG.C.WIRE)

      def build(self):
          ## initial
          insts, elems, ports = super().build()
   
          ## trans parameters
          trans_length  = self.trans_segments*self.swg_period
          swg_dutycycle = self.swg_width/self.swg_period
          w_steplength  = (self.w_length-self.w_length_init)/(self.trans_segments-1)
          w_lengthlist  = []
          for i in range(self.trans_segments):
              w_lengthlist.append(self.w_length_init+w_steplength*i)
   
          ## define core area
          for i in range(len(w_lengthlist)):
              swg_polygon = fp.el.Rect(width=self.swg_width,
                                      height=w_lengthlist[i],
                                      layer=self.wavegide_type.core_layer,
                                      center=((-trans_length)+i*self.swg_period, 0)
                                      )
              elems += swg_polygon
   
          return insts, elems, ports

三种常见光栅结构的设计方案各有优缺点,适用于不同的应用场景。在实际应用中,需要根据具体需求选择合适的光栅结构类型,以达到最佳的应用效果。

3. 基于亚波长光栅的偏振分束器

3.1 论文结构展示

为了验证上述光栅结构的通用便捷性,下面以基于亚波长结构光栅的偏振分束器为例,利用 PhotoCAD 工具设计了其版图。其结构示意图如图3-1所示,实际光栅结构过渡区周期为18,稳态周期为63。

图3-1 基于SWG的PBS结构示意图[1]

3.2 代码实现
代码语言:text
复制
  import math
  from fnpcell import all as fp
  from typing_extensions import Tuple, List, cast
  from gpdk import all as pdk
  from gpdk.technology import get_technology
  from gpdk.technology.wg.types import CoreCladdingWaveguideType
  from SWG import SWG
  from SWG import Straight
  from gpdk.technology.waveguide_factory import EulerBendFactory
   
  class PBS_SWG(fp.PCell):
      """
      Lu Liu, Qingzhong Deng, and Zhiping Zhou, "Manipulation of beat length and wavelength dependence of a polarization beam splitter using a subwavelength grating," Opt. Lett. 41, 5126-5129 (2016)
      """
      def raw_curve(self, length, anchor):
          return fp.g.Line(
              length=length,
              anchor=anchor,
          )
   
      def build(self):
   
          insts, elems, ports = super().build()
   
          ## define MainBody
          w_length      = 1830e-3
          w_length_init = 1430e-3
          w_width       = 120e-3
          width         = 500e-3
          gap           = 230e-3
          swg_segments  = 63
          trans_segments= 9
          swg_period    = 232e-3
          ss = SWG(w_length_init=w_length_init, w_length=w_length, swg_segments=swg_segments,trans_segments=trans_segments, swg_width=w_width,swg_period=swg_period)
          insts += ss
          wg_bottom = get_technology().WG.FWG.C.WIRE(curve=self.raw_curve(length=((swg_segments+trans_segments*4)*swg_period), anchor=fp.Anchor.CENTER)).with_ports(["port_1","port_2"])
          get_position_x   = wg_bottom["port_1"].position[0]
          get_position_max = wg_bottom["port_2"].position[0]
          wg_bottom = wg_bottom["port_1"].repositioned(at = (get_position_x, -(width+gap)/2)).owner
          insts += wg_bottom
          wg_top = get_technology().WG.FWG.C.WIRE(curve=self.raw_curve(length=((swg_segments+trans_segments*4)*swg_period), anchor=fp.Anchor.CENTER)).with_ports(["port_0","port_3"])
          wg_top = wg_top["port_0"].repositioned(at = (get_position_x, (width+gap)/2)).owner
          insts += wg_top
          g_wg_tl = get_technology().WG.FWG.C.WIRE(curve=self.raw_curve(length=50e-3, anchor=fp.Anchor.CENTER)).with_ports(["port_0","port_1"])
          g_wg_tr = get_technology().WG.FWG.C.WIRE(curve=self.raw_curve(length=50e-3, anchor=fp.Anchor.CENTER)).with_ports(["port_0","port_1"])
          g_wg_bl = get_technology().WG.FWG.C.WIRE(curve=self.raw_curve(length=50e-3, anchor=fp.Anchor.CENTER)).with_ports(["port_0","port_1"])
          g_wg_br = get_technology().WG.FWG.C.WIRE(curve=self.raw_curve(length=50e-3, anchor=fp.Anchor.CENTER)).with_ports(["port_0","port_1"])
          g_wg_tl = g_wg_tl["port_1"].repositioned(at =(get_position_x-15,(width+gap)/2+5)).owner
          g_wg_bl = g_wg_tl["port_1"].repositioned(at =(get_position_x-15,-(width+gap)/2-5)).owner
          g_wg_tr = g_wg_tl["port_0"].repositioned(at =(get_position_max+15,(width+gap)/2+5)).owner
          g_wg_br = g_wg_tl["port_0"].repositioned(at =(get_position_max+15,-(width+gap)/2-5)).owner

          insts += g_wg_tl
          insts += g_wg_bl
          insts += g_wg_br
          insts += g_wg_tr
   
          link1 =fp.LinkBetween(
              start=wg_top["port_0"],
              end=g_wg_tl["port_1"],
              bend_factory=EulerBendFactory(radius_min=5,l_max=5,waveguide_type=get_technology().WG.FWG.C.WIRE)
          )
          link2 =fp.LinkBetween(
              start=wg_bottom["port_1"],
              end=g_wg_bl["port_1"],
             bend_factory=EulerBendFactory(radius_min=5,l_max=5,waveguide_type=get_technology().WG.FWG.C.WIRE)
          )
          link3 =fp.LinkBetween(
              start=wg_bottom["port_2"],
              end=g_wg_br["port_0"],
              bend_factory=EulerBendFactory(radius_min=5,l_max=5,waveguide_type=get_technology().WG.FWG.C.WIRE)
          )
          link4 =fp.LinkBetween(
              start=wg_top["port_3"],
              end=g_wg_tr["port_0"],
              bend_factory=EulerBendFactory(radius_min=5,l_max=5,waveguide_type=get_technology().WG.FWG.C.WIRE)
          )
          insts += link1
          insts += link2
          insts += link3
          insts += link4
          ports += g_wg_tl["port_0"].with_name("p0")
          ports += g_wg_bl["port_0"].with_name("p1")
          ports += g_wg_br["port_1"].with_name("p2")
          ports += g_wg_tr["port_1"].with_name("p3")
          return insts, elems, ports

3.3 结果显示

图3-2 基于亚波长结构的偏振分束器版图

4. 参考文献

[1]Lu Liu, Qingzhong Deng, and Zhiping Zhou, "Manipulation of beat length and wavelength dependence of a polarization beam splitter using a subwavelength grating," Opt. Lett. 41, 5126-5129 (2016)

5. 结论

本文利用PhotoCAD工具实现了多种形式的光栅结构创建,利用本文提供的模块(模块代码详讯客服),可以帮助用户便捷快速地创建任意光栅结构。此外,并通过实现基于亚波长结构的偏振分束器进一步证明上述模块的通用便捷性。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光学小豆芽 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.2 常规光栅
  • 2.3 Taper型光栅
  • 3. 基于亚波长光栅的偏振分束器
    • 3.1 论文结构展示
      • 3.2 代码实现
        • 3.3 结果显示
        • 4. 参考文献
        • 5. 结论
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档