Step-by-step tutorial · passives

图文教程:无源器件几何模板

对应 passives/ 类的四个 starter:IDC 叉指电容、方形螺旋电感、SAW IDT 滤波器、BAW/FBAR 俯视图(完整合约见仓库 docs/PASSIVE_TEMPLATES_SPEC.md)。四族共用一个铁律,全文只说一次:这些是几何模板,不是验证过的电学/声学设计——把数字改成你自己的工艺,用你自己的模型验证;SAW/BAW 两族尤其不做任何频率或材料声明。这四个是 passives/ 类的 starterklink initpython example_template/passives/<名>.py 就能跑(offline 默认写 GDS,--live 推 KLayout);参见示例画廊 · 无源器件几何模板了解其余 demo 的运行方式。

前置条件

  • 安装 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 <会话端口>
默认参数下的 IDC 叉指电容:10 根交替归属上下母线的叉指
默认参数(10 指)实跑截图。
变体参数下的 IDC 叉指电容:24 根更宽更长的叉指,整体明显变大
变体: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 层。自检数字(本次实跑): 默认参数下合并区域数 2no_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 <会话端口>
默认参数下的方形螺旋电感:3 圈绕线,内端经下穿走线引出
默认参数(3 圈)实跑截图。
变体参数下的方形螺旋电感:6 圈更宽的绕线,整体明显更大更密
变体: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_gapIDT 到反射光栅的边到边距离4.0 µm
python example_template/passives/saw_idt_filter.py --live --port <会话端口>
默认参数下的 SAW IDT 滤波器:左右两组带反射光栅的叉指换能器相对放置
默认参数(pitch 4 µm、12 对指)实跑截图;每个 IDT 外侧各有一组反射光栅。
变体参数下的 SAW IDT 滤波器:电极更宽、孔径更大、指对更多,整体明显放大
变体: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 <会话端口>
默认参数下的 BAW/FBAR 俯视图:五边形顶电极、覆盖它的矩形底电极、顶连接走线和两个探针 pad
默认参数(目标面积 2000 µm²)实跑截图。底电极矩形物理上必须完全盖住五边形(谐振器全交叠),所以 membrane_release 文档层描出五边形自身的轮廓——即便填充被盖住,真实的谐振形状也能透过这圈轮廓看见。
变体参数下的 BAW/FBAR 俯视图:五边形明显更大,pad 和连接走线也相应变粗变长
变体: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 两图共用同一个取景框,所以尺寸变大一眼可见)。

五边形任意两边都不平行是这个模板的核心不变量,光看整体截图不容易确认,下面放大标注默认参数下距离"平行"最近的一对边——即便是最接近的一对,也仍然不平行:

放大的五边形顶电极,橙色高亮标出两条方向最接近的边,标注两边夹角约12.5度,不平行
五边形五条边里方向最接近的一对(本次实跑独立重新计算,非抄实现报告):边 2 与边 3 夹角 12.5°——足够接近到肉眼要仔细看,但确认不平行,符合 spec §3.4 的不变量。

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 词条里。