3. 无源器件(上):硅波导、MMI耦合器、光栅耦合器设计与仿真
各位同学,咱们今天聊聊无源器件。说实话,无源器件是硅光芯片的骨架。你想想看,有源器件再厉害,光信号传不出去、分不开、耦合不进来,那都是白搭。我个人做工艺这些年,踩过的坑有一半都跟无源器件有关。今天咱们就挑三个最基础的来讲:硅波导、MMI耦合器、光栅耦合器。
3.1 硅波导:光的路由器
硅波导,说白了就是光走的“管道”。在硅光工艺里,最常用的是脊形波导和条形波导。我刚开始接触时,总觉得波导不就是刻一条沟嘛,有什么难的?后来发现,单模条件、损耗控制、工艺容差,每一个都是坑。
3.1.1 波导结构设计要点
设计波导,核心就三个参数:芯层厚度、刻蚀深度、波导宽度。以220nm SOI平台为例:
- 芯层厚度:通常220nm,这是SOI标准厚度。太厚了多模,太薄了光约束不够。
- 刻蚀深度:脊形波导一般刻70nm(浅刻蚀),条形波导刻到底(220nm全刻)。
- 波导宽度:单模条件一般在400-500nm。我习惯取450nm,工艺窗口比较宽。
关键点:波导宽度决定了你是单模还是多模。宽度超过600nm,大概率会出现高阶模。我在一个项目中为了降低耦合损耗,把波导加宽到800nm,结果多模干涉严重,最后不得不重新流片。嗯,这个教训挺深刻的。
3.1.2 波导损耗来源
波导损耗主要来自三个方面:
- 侧壁粗糙度散射损耗——这是大头。刻蚀工艺越差,侧壁越毛糙,损耗越大。
- 衬底泄漏损耗——波导太薄或者上包层太薄,光会漏到硅衬底里去。
- 弯曲损耗——弯半径太小,光就“甩”出去了。
我的经验:弯曲半径建议取5μm以上。我曾经为了省面积,把弯半径压到2μm,结果损耗直接飙到3dB以上。后来老老实实改回5μm,损耗降到0.1dB以下。有些东西真不能省。
3.1.3 波导仿真示例(Lumerical MODE)
仿真波导,我一般用Lumerical MODE的FDE求解器。下面是一个简单的脚本,计算450nm宽、220nm厚的条形波导的有效折射率:
# 波导有效折射率计算脚本(Lumerical MODE)
# 条形波导,Si芯层,SiO2包层
switchtolayout;
loadlayout; # 加载默认布局
# 设置波导几何参数
set("width", 450e-9); # 波导宽度 450nm
set("height", 220e-9); # 波导高度 220nm
# 设置材料
set("material", "Si (Silicon) - Palik");
set("cladding", "SiO2 (Glass) - Palik");
# 设置网格精度
set("mesh accuracy", 4); # 网格精度4,够用了
# 运行求解
run;
# 提取结果
neff = getdata("neff"); # 有效折射率
printf("有效折射率: %f\n", neff);
跑完之后,你会得到TE模和TM模的有效折射率。TE0模一般在2.8左右,TM0模在1.9左右。如果算出来差太多,检查一下材料参数是不是设对了。
3.2 MMI耦合器:光的分配器
MMI耦合器,全称是多模干涉耦合器。它的原理很简单:光进入一个多模波导区,激发出多个模式,这些模式在传播过程中相互干涉,在特定位置形成自映像。你想想看,这不就是光的“分束器”吗?
3.2.1 1×2 MMI设计公式
设计1×2 MMI,核心公式就一个:
L_MMI = 3 * L_π / 2
其中L_π是拍长,计算公式为:
L_π = π / (β₀ - β₁)
β₀和β₁分别是基模和一阶模的传播常数。说白了,就是两个模式之间的相位差走完π长度时对应的距离。
实际设计步骤:
- 先确定多模波导宽度W_MMI,一般取2-3μm。
- 用FDE算出基模和一阶模的有效折射率,算出L_π。
- MMI长度取1.5倍L_π。
- 输入/输出波导位置:1×2 MMI的两个输出波导对称分布在中心线两侧,间距取W_MMI/2。
3.2.2 我的避坑指南
我曾经设计过一个1×2 MMI,仿真结果完美,分光比50:50,损耗只有0.2dB。结果流片回来一测,分光比变成了60:40。为什么?
- 原因1:工艺偏差。刻蚀宽度偏了20nm,MMI宽度变了,拍长也跟着变。
- 原因2:输入波导位置没对准。光没有完美耦合进多模区,高阶模激发比例不对。
注意:MMI对工艺偏差非常敏感。建议在设计时做容差分析,把宽度偏差±20nm、刻蚀深度偏差±10nm都跑一遍。如果分光比变化超过5%,说明你的设计太“脆”了,需要优化。
3.2.3 MMI仿真示例(Lumerical FDTD)
# 1×2 MMI FDTD仿真脚本(简化版)
# 几何参数
W_mmi = 2.5e-6; # MMI宽度 2.5μm
L_mmi = 8.5e-6; # MMI长度 8.5μm(根据拍长计算得到)
W_wg = 0.45e-6; # 输入/输出波导宽度 450nm
gap = 1.25e-6; # 输出波导间距
# 创建结构
addrect;
set("x", 0);
set("y", 0);
set("x span", L_mmi);
set("y span", W_mmi);
set("material", "Si (Silicon) - Palik");
# 添加输入波导
addrect;
set("x", -L_mmi/2 - 2e-6);
set("y", 0);
set("x span", 2e-6);
set("y span", W_wg);
set("material", "Si (Silicon) - Palik");
# 添加输出波导(两个)
addrect;
set("x", L_mmi/2 + 1e-6);
set("y", gap/2);
set("x span", 2e-6);
set("y span", W_wg);
set("material", "Si (Silicon) - Palik");
addrect;
set("x", L_mmi/2 + 1e-6);
set("y", -gap/2);
set("x span", 2e-6);
set("y span", W_wg);
set("material", "Si (Silicon) - Palik");
# 添加监视器
addpower;
set("name", "output1");
set("x", L_mmi/2 + 2e-6);
set("y", gap/2);
addpower;
set("name", "output2");
set("x", L_mmi/2 + 2e-6);
set("y", -gap/2);
# 运行仿真
run;
# 提取结果
T1 = getresult("output1", "T");
T2 = getresult("output2", "T");
printf("输出1透过率: %f\n", T1);
printf("输出2透过率: %f\n", T2);
printf("分光比: %f : %f\n", T1/(T1+T2)*100, T2/(T1+T2)*100);
3.3 光栅耦合器:光的“天线”
光栅耦合器,说白了就是芯片和光纤之间的“桥梁”。光从光纤出来是垂直的,要耦合进芯片的水平波导,怎么办?靠光栅。光栅把垂直入射的光“拐弯”到水平方向。
3.3.1 光栅耦合原理
光栅耦合器的核心是布拉格条件:
n_eff - n_c * sin(θ) = m * λ / Λ
其中:
- n_eff:波导模式有效折射率
- n_c:包层折射率(空气=1,SiO2=1.45)
- θ:入射角(通常8°-15°,避免反射光回到光纤)
- m:衍射级次(通常取1)
- λ:工作波长
- Λ:光栅周期
我的习惯:设计时先定波长和入射角,然后反推光栅周期。比如1550nm波长,入射角10°,n_eff≈2.8,算出来Λ≈630nm。然后在这个值附近做参数扫描,找到最优值。
3.3.2 光栅结构参数
| 参数 | 典型值 | 说明 |
|---|---|---|
| 光栅周期 Λ | 600-700 nm | 由布拉格条件决定 |
| 占空比 DC | 50% | 刻蚀部分与周期之比 |
| 刻蚀深度 | 70 nm(浅刻蚀) | 全刻蚀耦合效率低,浅刻蚀更好 |
| 光栅长度 | 10-20 μm | 太短耦合效率低,太长带宽窄 |
| 光栅宽度 | 10-12 μm | 与光纤模场匹配 |
3.3.3 优化技巧
光栅耦合器的优化,说白了就是跟损耗做斗争。我做过一个项目,初始设计耦合效率只有30%,后来优化到65%。怎么做到的?
- 加底部反射镜:在光栅下方加一层DBR反射镜,把向下漏的光反射回来。效率能提10-15%。
- 非均匀光栅:光栅齿的占空比从入口到出口逐渐变化,让光慢慢“漏”出来,而不是一下子全漏。效率能再提5-10%。
- 加抗反射层:在光栅表面镀一层SiN或SiO2,减少表面反射。
注意:加了底部反射镜之后,工艺复杂度会上升。你需要额外做一次键合或者沉积。如果成本敏感,可以考虑用厚BOX层(3μm以上)代替,效果差一点但工艺简单。
3.4 本章知识体系
下面这张图是我自己整理的,把三个器件的设计流程串起来了。你照着这个思路走,基本不会跑偏。
好了,这一章的内容就到这儿。波导、MMI、光栅,这三个东西你吃透了,无源器件这块就稳了一半。下一章咱们接着聊无源器件的下半部分——阵列波导光栅和微环谐振器。到时候见。
公众号:蓝海资料掘金营,微信deep3321