PDK粘土厂
zeropdk的Python项目详细描述
零PDK
这是一个纯python pdk工厂,支持klayout脚本化布局。它有助于光子集成电路的布局,这有赖于具有特殊的弯曲波导和非方角形状。
安装
这个包主要基于python的klayout package,在本文撰写之时(2019年7月)仍处于beta版本。
使用PIP安装(强烈建议使用虚拟环境):
pip install zeropdk
从源安装:
python setup.py install
功能
Klayout扩展
通过导入zeropdk,klayout有一些有用的功能。例如:
importklayout.dbaskdbimportzeropdklayout=kdb.Layout()plogo=layout.read_cell(cell_name='princeton_logo',filepath='gdslibrary/princeton_logo_simple.gds')# plogo is a cell in the current layout. It can be inserted in the top cell.
轻松技术层定义
基于包含图层定义的Klayout布局特性文件(.lyp),可以轻松导入和使用所有图层。例如:
fromzeropdkimportTechlyp_path="examples/EBeam.lyp"EBeam=Tech.load_from_xml(lyp_path)layerM1=EBeam.layers["M1"]print(layerM1,type(layerM1))# M1 (41/0) <class 'klayout.dbcore.LayerInfo'>
上面的文件属于一个名为SiEPIC EBeam PDK的项目,用于无源硅光子晶体铸造。
高级PCell定义
pcells可以是分层的,如Sec. IV.C of this article中所述。一个pcell可以在其定义中使用另一个pcell,在这种情况下,父pcell应该继承子pcell的参数。从zeropdk.default_library.io
中得到的一个例子是:
classDCPadArray(DCPad):params=ParamContainer(pad_array_count,pad_array_pitch)defdraw(self,cell):# ...foriinrange(cp.pad_array_count):dcpad=DCPad(name=f"pad_{i}",params=cp)returncell,ports
在这种情况下,DCPadArray
只需放置一个DCPad
pcells数组,并包含参数pad_array_count
和pad_array_pitch
,还包含属于DCPad
的参数,例如layer_metal
和layer_opening
。
在ebeam pdk示例中,可以编辑使pcells的标准库适应其自己的参数集。例如,EPOLL PDK使用特定的层用于其金属沉积和氧化物蚀刻步骤。因此,可以通过以下方式更改dcpadarray:
classDCPadArray(DCPadArray):params=ParamContainer(PCellParameter(name="layer_metal",type=TypeLayer,description="Metal Layer",default=EBeam.layers["M1"],),PCellParameter(name="layer_opening",type=TypeLayer,description="Open Layer",default=EBeam.layers["13_MLopen"],),)
TODO:将提供的here示例改编为ZeroPDK。
光子学启发的布局功能
几种处理光子形状的辅助工具。例如,有时需要绘制具有渐进宽度(锥度)的波导。
fromzeropdk.layoutimportlayout_waveguidewav_polygon=layout_waveguide(cell,layer,points_list,width)
开发人员注释
这个项目还在开发阶段。有关详细信息,请参见development notes。