Klayout入门(3)单元层次结构

这篇博客介绍了如何在Klayout中进行单元层次结构的操作,包括导入底层图形、对绘制的Array进行编辑、制作hole以及创建同一cell的不同样式structure。详细步骤包括建立层、新建cell、实例化操作、删除部分元素、实现hole以及调整cell阵列等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、导入底层图形 

1.建立一个层   -  下面有一个layers 绘制如下图形

 2.在左侧cell区,点右键,新建一个cell

 

3.点击工具栏的 Instance 弹出一个Object Editor Options 的对话框(如果没有,那应该是缩小在了cell那一块)

点Cell旁边的放大镜可以选择自己要reference的cell过来,勾选Array Instance(可以生成你所绘制的基本图像的矩阵)

右键生成图形。 

04-03
### KLayout 的下载与安装 KLayout 是一款用于微电子设计的开源版图编辑器和支持 GDSII 文件格式的强大工具。可以从其官方镜像站点获取最新版本[^1]: [KLayout GitCode 镜像](https://gitcode.com/gh_mirrors/kl/klayout) 对于 Windows 用户,可以直接访问上述链接并找到预编译好的二进制文件进行下载;Linux 和 macOS 用户则可以选择通过包管理器或者自行编译源码来完成安装。 --- ### KLayout 基本使用教程 #### 创建一个新的布局 启动程序后,在主界面中选择 `File -> New Layout` 来初始化一个新的工作环境。此时可以设置一些基本参数比如单位大小等。 #### 添加 Layer 层次结构 在实际操作前需先定义好所需的 Layers(层)。这一步骤非常重要因为所有的图形对象都必须归属于某一层之上才能被保存到最终输出文件当中去。右键点击左侧导航树下的空白区域然后选取 “Add Layer…” 即可弹出对话框让你输入具体属性值如颜色线条宽度等等[^3]。 #### 绘制简单几何形状 利用内置脚本功能能够快速实现复杂图案的设计需求。下面给出几个常见例子说明如何借助 Python 脚本来构建不同的实体模型[^2]: ##### 示例 1: 绘制单一矩形盒子 (Box) ```python from pya import * # 初始化数据库单元格 Cell cell = Cell("TOP") # 定义边界框 Rectangle 参数 box = Box(Point(0, 0), Point(1000, 500)) # 将该 box 插入至指定 layer 上面 layer_index = cell.layout().add_layer(LayerInfo(1, 0)) cell.shapes(layer_index).insert(box) ``` ##### 示例 2: 同时生成两个独立盒状物 ```python from pya import * cell = Cell("TOP") layer_index = cell.layout().add_layer(LayerInfo(1, 0)) boxes = [ Box(Point(-750, -250), Point(-250, 250)), Box(Point(250, -250), Point(750, 250)) ] for b in boxes: cell.shapes(layer_index).insert(b) ``` ##### 自由手绘多边形 Polygon 如果需要更加灵活自由的形式,则可以通过鼠标交互方式手动描绘轮廓线段序列形成闭合路径从而构成目标 shape 。按照文档指引选中对应按钮之后便可在视窗区域内拖拽节点位置直至满意为止。 --- ### 对象变换处理技巧 除了静态建模之外,还经常涉及到方位调整方面的任务。这里列举两种典型场景及其解决方案如下所示: #### 方法 A: 固定角度旋转加位移补偿 假设希望把某个 element 沿顺时针方向偏转九十度后再沿 X 方向移动一定距离 d_x ,那么可以用以下代码片段达成目的: ```python import math from pya import * def rotate_and_translate(shape, angle_degrees=90, dx=0): radian_angle = math.radians(angle_degrees) trans_matrix = Trans( Trans.R90 * int((angle_degrees % 360)/90), Vector(dx*math.cos(radian_angle)-dx*math.sin(radian_angle), dx*math.sin(radian_angle)+dx*math.cos(radian_angle))) return shape.transformed(trans_matrix) original_shape = ... # Your original shape here. transformed_shape = rotate_and_translate(original_shape, 90, 1000) ``` #### 方法 B: 动态设定任意角变化量 当面对更通用的情况即允许用户随意指定倾斜程度 alpha (弧度制表示法)时候,推荐采用矩阵运算形式重写逻辑表达式以便于扩展维护: ```python transformation_matrix = DCplxTrans.new_1( scale_factor, rotation_in_radians, mirror_flag, translation_vector.x, translation_vector.y ) new_position = old_position.translated_by(transformation_matrix) ``` --- ### 总结 以上内容涵盖了从基础入门级概念介绍一直到高级特性应用示范等多个方面知识点。随着实践经验积累相信你会逐渐掌握更多关于此款强大EDA 工具的知识体系!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值