基于openscad的三维gds浏览器
gds3xtrude的Python项目详细描述
gds3xtrude
一个简单的三维布局转换器。
gds3xtrude获取布局的图层,并通过挤压将其转换为三维体积。
gds3xtrude
打算以两种不同的方式使用:
- 作为Klayout扩展:显示活动视图的三维模型。
- 作为独立工具:从命令行将gds转换为openscad/blender。
依赖关系
- openscad:三维建模工具。可以使用大多数Linux发行版的包管理器安装。
- solidpython:用于创建openscad模型的python库。
- klayout:klayout的python模块,用于gds输入/输出和多边形操作。
安装(Linux)
作为Klayout包
使用klayout包管理器安装gds3xtrude
。
依赖项(gds3xtrude python包,openscad)必须手动安装:
apt install openscad pip3 install --user gds3xtrude
作为独立工具
当作为独立工具使用时gds3xtrude
还依赖于klayout python包。
pip3 install --user gds3xtrude pip3 install --user klayout
从git安装(而不是使用pip安装)
git clone [this repo]cd gds3xtrude python3 setup.py install --user
安装(Windows)
Windows目前不受支持,但很有可能通过一些调整让gds3xtrude在那里运行。 以下是一些安装方法:
- 安装python和pip
- 获取openscad:http://www.openscad.org/downloads.html
- rest应该类似于linux安装说明。
用法
作为Klayout模块
- 打开布局。
- 放大到要传递给gds3xtrude的区域。
- 选择
Tools -> gds3xtrude -> run script
- 为您的技术选择layerstack文件。(freepdk45的示例可以在
examples/freepdk45.layerstack
中找到)
作为独立工具
示例用法:
# Get layerstack file for FreePDK45. wget https://codeberg.org/tok/gds3xtrude/raw/branch/master/examples/freepdk45.layerstack # Get a GDS file. wget https://codeberg.org/tok/gds3xtrude/raw/branch/master/examples/NAND2X1.gds # Run gds3xtrude gds3xtrude --tech freepdk45.layerstack --input NAND2X1.gds --view
如果遇到类似gds3xtrude: command not found
的错误,则程序可能不在PATH
环境变量中。
尝试先将pip二进制目录添加到path变量:
PATH=$PATH:$HOME/.local/bin # And now again: gds3xtrude ...
层堆栈定义
要将二维布局转换为三维模型,需要有关物理层堆栈的一些信息。
此信息必须作为文件传递给gds3xtrude。一个简单的层堆栈描述示例
对于freepdk45,可以在examples/freepdk45.layerstack
中找到。使用此文件作为起点,并根据您的需要进行调整。
基本上layerstack文件只是定义一些数据结构的python脚本。
示例:
fromgds3xtrude.includeimportlayer,Material# Define layerspoly=layer(15)contact=layer(16)metal1=layer(21)# Define materials and colorsm_poly=Material('poly',color=(0.8,0.2,0.2))m_metal1=Material('metal1',color=(0.8,0.2,0.2))# Assign materialspoly.material=m_polymetal1.material=m_metal1# Define additional layers from boolean operationcontact_to_silicon=contact-poly# Define layer stack structure as a list of (layer thickness, [masks, ...]).# The 3D model is created layer by layer from bottom to top.layerstack=[(10,contact_to_silicon),(20,[contact,poly]),(50,contact),(50,metal1),]
上面例子中描述的层堆栈的横截面在这里显示。请注意,从metal1到silicon(示例中未显示也未包含)的接触由三部分组成。这仅仅是由于三维模型的逐层创建,但是对于编写layerstack定义来说,理解这一点很重要。例如,在最底层,只有一块接触到硅。下面有多晶硅的触点不能到达这个最低层。这被建模为布尔差分contact_to_silicon = contact - poly
。
可以通过将掩码放入用于第二层的列表([contact, poly]
)来合并它们。
搅拌机
三维模型也可以在搅拌机中生成。使用命令行工具进行此操作:
gds3xtrude --tech freepdk45.layerstack --input NAND2X1.gds --cad blender
注意,blender脚本api上的当前实现速度非常慢,因此只能看到标准单元格等小东西。
FreeCAD
生成的openscad模型(.scad)可以导入到freecad中。
颜色问题
应用布尔并集时,freecad会去掉颜色。因此,导出的.obj模型将完全为灰色。有一个解决方法:
- 在FreeCAD中打开OpenSCAD模型
- 打开
Combo View
中的Model
选项卡 - 展开可能命名为
Unnamed
的导入模型的列表
- 找到标记为
union
的子节点,选择并删除它 - 选择要导出的完整模型(ctrl-a)
- 现在可以导出到.obj不丢失颜色信息
除了.obj文件之外,freecad还将创建一个包含材料/颜色信息的.mtl文件。Blender将在导入.obj文件时自动读取它。