前置条件
- 安装 klink:
pip install klayout-klink(一条命令装好 klink 和它的 Rust 内核,无需第三方科学库)。 - KLayout 正在运行,并已加载 klink 插件。
klink init之后:python example_template/passives/<名>.py离线运行,往test_outputs/写一个 GDS 并打印结构化自检 summary;加--live --port <会话端口>则改为推送到 KLayout 会话(仓库克隆里也可以直接用模块形式python -m examples_klink.public.passives.<名>跑同一份代码,命令行参数一致)。
build_*() 函数用两组不同参数各跑一次的真实结果——变体参数和 tests/unit/test_passive_templates.py 里的"扩展参数"用例完全一致,两张图对比就是在看同一份合约在参数变大之后长什么样。每族末尾的"Port 在哪 + 自检数字",都是本教程实际重跑这两组参数、由模板自己的 write_offline() 自检重新算出来的数字,不是抄实现报告。1IDC 叉指电容
两条对置母线(bottom bus / top bus),中间是交替归属左右母线的叉指:每根指的宽度是 finger_width,相邻两指间距(同时也是指到对面母线的间隙)都是 gap,所以指距 = finger_width + gap。单一金属层。
| 参数 | 含义 | 默认值 |
|---|---|---|
finger_count | 总指数(>=2,交替归属两条母线) | 10 |
finger_length | 每根指从自己那条母线伸出的长度 | 20.0 µm |
finger_width | 指宽(也决定指距 = 指宽 + 间隙) | 2.0 µm |
gap | 指与指、指与对面母线的间隙 | 1.5 µm |
bus_width | 母线厚度 | 4.0 µm |
python example_template/passives/idc_capacitor.py --live --port <会话端口>
finger_count 10→24,同时 finger_width 2.0→3.0、gap 1.5→2.0、finger_length 20.0→35.0、bus_width 4.0→6.0(与单测的扩展参数用例一致)。Port 在哪: P1 在下母线外边缘中点(本次实跑 center_um=[16.75, -4.0],朝向 270°),P2 在上母线外边缘中点([16.75, 25.5],朝向 90°),都在 10/0 层。自检数字(本次实跑): 默认参数下合并区域数 2(no_short=true,两条母线各自的叉指网络没有短路),总金属面积 668.0 µm²;变体参数下同样 2 个合并区域、no_short=true,总金属面积增至 3936.0 µm²。
几何模板,不是验证过的电学设计——把数字改成你自己的工艺,用你自己的模型验证电容值。
2方形螺旋电感
顶层金属上向外绕的方形螺旋,从内开口 inner_size 开始,每圈边长增加一个 pitch(track_width + spacing)。螺旋自己的内端被绕线困住、无法直接出线:一个过孔从内端一个小 pad 垂直下沉到 metal_under 层的一段下穿走线,穿出绕线范围外作为 IN 端口;OUT 就是螺旋在顶层金属上的外端。
| 参数 | 含义 | 默认值 |
|---|---|---|
turns | 圈数(>=1) | 3 |
track_width | 螺旋走线宽度 | 2.0 µm |
spacing | 相邻两圈间距(pitch = track_width + spacing) | 1.5 µm |
inner_size | 内开口方形边长(第一段线长) | 10.0 µm |
underpass_width | 下穿走线宽度 | 3.0 µm |
python example_template/passives/spiral_inductor.py --live --port <会话端口>
turns 3→6,同时 track_width 2.0→3.0、spacing 1.5→2.0、inner_size 10.0→15.0、underpass_width 3.0→4.0(与单测的扩展参数用例一致)。Port 在哪: OUT 在螺旋顶层金属的外端(本次实跑 center_um=[-10.5, -10.5],朝向 270°,11/0 层),IN 在下穿走线的外端([-12.5, 0.0],朝向 180°,12/0 层)。自检数字(本次实跑): 默认参数下顶层金属、下穿走线各自恰好 1 个合并区域(no_self_short=true,绕线连续无自短路),下穿走线跨过 4 段螺旋线段(>= turns=3),过孔完全落在内端 pad 与下穿走线内部(via_in_pad / via_in_underpass 均为 true);变体参数下同样两层各 1 个合并区域,下穿走线跨过段数增至 7(>= turns=6),过孔位置检查同样通过。
几何模板,不是验证过的电学设计——把数字改成你自己的工艺,用你自己的模型验证电感值和 Q。
3SAW IDT 滤波器
两个完全相同的叉指换能器(发射 TX、接收 RX)沿声轴相对放置,可选在两侧各加一组短路光栅反射器。每个 IDT 本质上就是一个电学梳状结构(和 IDC 电容同款:两条母线 + 交替叉指),电极宽 = pitch/4(金属化率 0.5,指间隙同样是 pitch/4),交叠区长度 = aperture(本版本未建模变迹,均匀交叠,是将来的旋钮)。单一金属层。
| 参数 | 含义 | 默认值 |
|---|---|---|
pitch | 电极周期(电极宽 = pitch/4) | 4.0 µm |
pairs | 每个 IDT 的指对数(总指数 = 2×pairs) | 12 |
aperture | 叉指交叠长度(声学孔径) | 40.0 µm |
bus_width | 母线厚度 | 6.0 µm |
idt_gap | 两个 IDT 沿声轴的边到边距离 | 30.0 µm |
reflector_fingers | 每组反射光栅的指数(0 = 不启用) | 8 |
reflector_gap | IDT 到反射光栅的边到边距离 | 4.0 µm |
python example_template/passives/saw_idt_filter.py --live --port <会话端口>
pitch 4.0→6.0,同时 pairs 12→20、aperture 40.0→60.0、bus_width 6.0→8.0、idt_gap 30.0→45.0、reflector_fingers 8→15、reflector_gap 4.0→6.0(与单测的扩展参数用例一致)。Port 在哪: 4 个电学 Port,均在各自母线外边缘中点、朝外,都在 14/0 层——本次实跑 TX_N=[23.5, -6.0](270°)、TX_P=[23.5, 47.0](90°)、RX_N=[100.5, -6.0](270°)、RX_P=[100.5, 47.0](90°)。自检数字(本次实跑): 默认参数下每个 IDT(按 x 范围裁剪后)恰好 2 个合并区域(指间无短路),每组反射光栅恰好 1 个合并区域(短路光栅本就该连成一片),电极宽 1.0 µm(= pitch/4);变体参数下同样每个 IDT 2 个、每组反射光栅 1 个合并区域,电极宽增至 1.5 µm(= 6.0/4)。
几何模板,不是验证过的声学设计——不对频率或材料做任何声明;真实 SAW 响应取决于压电衬底的切向/取向,本俯视模板完全不建模。把数字改成你自己的工艺,用你自己的声学仿真验证。
4BAW / FBAR 俯视图
薄膜体声波谐振器的俯视模板:top_electrode 是一个任意两条边都不平行的不规则五边形(抑制杂散模的变迹惯例),由一个固定、确定性、无随机数的顶点方案按目标 active_area_um2 整体缩放得到;bottom_electrode 是一个覆盖五边形包围盒、并在顶连接对侧继续延伸到自己 pad 的矩形(因此顶/底交叠面积就是整个五边形面积);top_connect 从五边形最靠东的一条边引到探针 pad,bottom_connect 就是底电极自己往西的延伸。一个描述性的 StackSpec 以数据形式记录预期的垂直叠层(顶电极/压电层/底电极)——仅描述,不画膜层剖面,这只是一个俯视模板。
| 参数 | 含义 | 默认值 |
|---|---|---|
active_area_um2 | 目标五边形(有效膜层)面积 | 2000.0 µm² |
connect_width_um | 顶/底连接走线宽度 | 8.0 µm |
pad_size_um | 方形探针 pad 边长 | 30.0 µm |
bottom_extension_um | 底电极在顶连接对侧超出五边形的距离 | 60.0 µm |
overlap_margin_um | 底电极在其余三侧超出五边形包围盒的余量 | 6.0 µm |
membrane_margin_um | 可选 membrane_release 文档层的余量 | 15.0 µm |
python example_template/passives/baw_fbar_planview.py --live --port <会话端口>
membrane_release 文档层描出五边形自身的轮廓——即便填充被盖住,真实的谐振形状也能透过这圈轮廓看见。
active_area_um2 2000.0→6000.0,同时 connect_width_um 8.0→12.0、pad_size_um 30.0→40.0、bottom_extension_um 60.0→90.0、overlap_margin_um 6.0→10.0、membrane_margin_um 15.0→20.0(与单测的扩展参数用例一致;default 和 variant 两图共用同一个取景框,所以尺寸变大一眼可见)。五边形任意两边都不平行是这个模板的核心不变量,光看整体截图不容易确认,下面放大标注默认参数下距离"平行"最近的一对边——即便是最接近的一对,也仍然不平行:
Port 在哪: TOP 在顶连接探针 pad(本次实跑 center_um=[116.9, 5.44],朝向 0°,15/0 层),BOT 在底电极延伸出的 pad([-124.85, 0.0],朝向 180°,16/0 层)。自检数字(本次实跑): 默认参数下顶、底电极各自 1 个合并区域,五边形任意两边不平行 true,五边形面积 1999.996 µm²(目标 2000,误差 0%),顶/底交叠面积占五边形面积的 100%;变体参数下同样各 1 个合并区域、不平行为 true,面积 5999.991 µm²(目标 6000,1% 以内),交叠同样 100%。
几何模板,不是验证过的声学设计——不对频率或材料做任何声明;本模板只是俯视图,不画膜层剖面/压电层几何。把数字改成你自己的工艺,用你自己的声学仿真验证谐振频率。
下一步
把某个模板文件复制一份改成自己的层号/参数,跑一遍 --live 确认自检 ok=true 之后,就可以直接用它标好的 klink Port 接入路由后端(参见 MCP 参考 · Port)。想看 geometry-first 的完整闭环(画几何 → 标 Port/Anchor → 路由 → 验证),可以接着看Hall bar 图文教程;四族命令和真实数字的文字版在 示例画廊 对应的 demos.md 词条里。