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只需放置一个DCPadpcells数组,并包含参数pad_array_countpad_array_pitch,还包含属于DCPad的参数,例如layer_metallayer_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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javascript问题:通过URL用网站数据填充Textview   java TabLayout Android,如何用几个标签填充整个屏幕宽度,并用大量标签滚动?   Eclipse Java运行的文件不再存在于我的工作区中   安装两个Java版本时,使用Java的windows链接不起作用   java将多个图形添加到单个JPanel   java Kafka ConsumerFactory,带有两个Desiarizer   使用反射更改java类超类   当一致性测试失败时,java有没有办法让堆栈跟踪显示在控制台中   java映射到基元类型的HashMap的快速替代方案是什么?   java关闭一个jframe所有剩余的打开jframe都将关闭。   java为什么不推荐“使用getString()获取设备标识符”?   java值比较和值赋值之间有什么性能差异吗?   Java实体数组到JavaScript数组   java使用流将一个列表转换为另一个列表   在JTree中保存对象,但更改显示的名称(java swing)?   java“Hello world”Android应用程序,文件尽可能少,没有IDE,只有文本编辑器   java在方法之间传递值   java如何为项目数组创建ParseQuery?