器件布局设计-方法汇总

IPKISS 提供了多种方式帮助设计者调用已有器件或构建自定义器件,下面逐一介绍四种常见方法(由简单到困难)。

方法编号方法名称难度适用场景
方法一调用 PDK 中的器件🟢 简单直接调用PDK 提供的标准器件,以及不同PDK之间的器件迁移和复用
方法二调用 Picazzo 库器件🟢 简单使用 IPKISS 自带的通用组件并映射到 PDK
方法三从 GDS 文件导入器件🟡 中等有现成的版图文件,导入IPKSS中使用
方法四自定义器件(PCell)🟠 稍难构建特殊结构或参数化器件,需完全自定义

方法一:直接调用PDK中的component

以si fab为例,调用该PDK中的MMI器件,并将MMI的结构参数设置成目标参数后导出版图
from si_fab import all as pdk #导入PDK mmi = pdk.MMI1x2(width=4,length=10) #调用PDK中的MMI1X2器件,并设置参数 mmi.Layout().visualize(annotate=True) #将器件布局结构可视化出来 mmi.Layout().write_gdsii("mmi1x2.gds") #将器件布局结构导出 GDSII 文件

延伸问题:

Q1: 如何查看PDK中有哪些器件可以调用?
A1: 方法一:一般情况下 PDK/all.py文件中包含该PDK中 所有可直接调用的器件,可通过ctrl+左键单击 all 跳转至si_fab/all.py 查看,如下图所示
A1:方法二:打开Luceda Control Center进入Desgin Kits页面,点击对应PDK右侧 Documentation图标,在手册中查看。(部分 PDK 可能暂无文档,此时请使用方法一)
Q2:如何知道器件哪些参数可以调整?
A2:ctrl+左键单击器件名称,可跳转定义器件的源码。
如果目标器件只存在于 si_fab PDK 中,如何迁移到当前使用的 PDK?
当你在 si_fab PDK 中找到了所需的 PCell 器件,但当前项目使用的是另一个 PDK(如 siepic 或自建 PDK),该如何将该器件迁移并复用呢?参考教程:如何将 si fab PDK 中 Pcell 器件运用到其他 PDK 中 | LUCEDA PHOTONICS 
ps:这种迁移方法不仅适用于 si_fab,同样适用于任意两个 PDK 之间的器件迁移。

方法二:调用 Picazzo 库中的器件

Picazzo 库是一个建立在 IPKISS 框架之上的通用光子器件库,提供丰富的硅光器件。可点击链接查看所含器件及用法:Picazzo Library Reference — Luceda Academy 2025.06 documentation
picazzo 库中包含的器件
import si_fab.all as pdk # 导入PDK from picazzo3.electrical.contact import ContactHole #导入Picazzo库中的 ContactHole cell = ContactHole() layout = cell.Layout() layout.visualize(annotate=True)

延伸问题:

Q:为什么使用 picazzo 库中的器件,还需要调用 PDK 呢?
A:Picazzo 中的器件使用的是虚拟图层和工艺信息,不能直接用于流片。引入 PDK 后,我们可以将实际的图层与工艺绑定到器件上,从而生成可流片的版图。

方法三:从GDS导入

当你手头已有器件的 GDSII 文件时,也可以导入到 IPKISS 中作为一个可复用器件。

导入前准备:

  • 请确认 GDS 文件中使用的图层已经在 PDK 中定义。
  • 若未定义,需要先在 PDK 中添加相关图层。

导入方法:

方法四:自定义器件结构(自定义 PCell)

当 PDK 和 Picazzo 都不包含你所需的结构时,可以通过 IPKISS 自定义结构参数、形状和端口。
IPKISS 有一套标准的 自定义器件代码框架,如下,只需要对该框架进行填充即可。
class MyCell(i3.PCell): # we define a component using i3.PCell """This is my Pcell.""" # a short description of the class is always useful to include class Layout(i3.LayoutView): ... class Netlist(i3.NetlistFromLayout): ... class CircuitModel(i3.CircuitModelView): ...
我们在 Layout 视图中定义器件结构,主要包含以下三个部分:
  • elements:绘制基本几何形状。一般使用 i3.Shape()函数生成自定义形状。此外,IPKISS提供了一些封装好形状函数可直接使用,如i3.Rectangle()、i3.Wedge()等等。形状函数参考:Elements and Layers — Luceda Academy 2025.03 documentation
  • instances:在当前器件中复用已有cell,作为器件的一部分,以实现复杂的参数化模块设计
  • ports:定义输入/出端口,光学端口一般由 i3.OpticalPort() 函数定义,电学端口 i3.EletricalPort() 函数定义。端口函数参考:Elements and Layers — Luceda Academy 2025.03 documentation
ps:除了基本的形状绘制和端口定义,IPKISS 还提供了 布尔运算旋转形状修改 等功能,可用于高级版图编辑。详细内容请参考:Layout Reference — Luceda Academy 2025.03 documentation 
2025-06-19
0