ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SPP全光逻辑门COMSOL仿真实战:从MIM波导到干涉判据

SPP全光逻辑门COMSOL仿真实战:从MIM波导到干涉判据 做微纳光学的朋友对表面等离激元这几个字应该都不陌生。SPP这两年从物理课本一路火到了工程仿真尤其是“全光逻辑门”这个概念——大家都想用光直接完成逻辑运算省掉光电光转换那一整套开销。COMSOL里的SPP全光逻辑门小案例我最近完整复现了一遍结构不复杂一个Y型合束器加两根银-空气-银波导但把模式分析、干涉、端口设置、网格控制、参数化扫描这些东西全串了起来做完之后收获很大。这篇文章把整个案例从头到尾拆开从原理到参数表再到真值表连同我踩过的坑一起讲清楚。刚接触等离激元仿真、或者想做光计算入门Demo的朋友可以直接照着复现。1. 先搞清楚SPP是什么这个案例凭什么有意思1.1 SPP到底是什么东西表面等离激元极化激元缩写就是SPP。说人话就是当一束光打到金属和介质的分界面上光的电磁场会和金属表面那层自由电子的集体振荡耦合到一起形成一种沿界面传播的电磁模式。这种模式最特别的地方在于它的能量被死死压在界面附近法向方向按指数衰减往金属里和往空气里都传不进去多深。我一般跟刚入门的同学打个比方这就像体育场里的人浪人群能量在观众席表面传但没人真的跑到看台深处去。SPP也一样能量贴着金属表面跑纵深只有几十纳米到一两百纳米。正是这种亚波长的局域特性让SPP成了微纳光子学里的明星。它能让光的特征尺寸突破衍射极限把光场压缩到纳米尺度。代价也很明显金属有损耗SPP传不了多远通常在几微米到几十微米量级就衰减得差不多了。1.2 为什么全光逻辑门要找SPP帮忙全光逻辑门意思是用光信号本身来完成AND、OR、XOR这类逻辑运算中间不经过电学转换。传统做法里要么依赖非线性材料的功率变化要么靠电光调制器件尺寸大、响应速度也受限制。SPP的天然优势就是把光约束在纳米尺度的界面附近器件整体可以做得特别紧凑一个逻辑单元只有波长量级甚至更小。另一个更实际的原因是SPP无源干涉型逻辑门实现起来门槛很低。不需要非线性材料不需要外加调制只要把两路输入光的相位和振幅控制好让它们在输出端发生干涉相长或相消就能译出逻辑电平。这在COMSOL里几乎是纯线性电磁仿真对一个教学案例来说再合适不过。这个案例的核心价值就在这里看似复杂的光计算概念落到SPP干涉上其实就是两个波导、一个合束区、一堆参数扫描的事。1.3 案例目标与总体思路这个案例的目标很明确设计一个工作在1550 nm通信波段的SPP全光逻辑门两根输入波导分别承载逻辑输入A和B输出端检测光功率按预定阈值判读出逻辑结果。整体思路是干涉。两个输入臂的光汇入同一个输出波导如果两路光同相到达输出功率就等于两路场强相干叠加峰值可以接近单臂输入的四倍如果反相到达就会互相抵消输出接近零。有了这两类状态再配合不同的阈值设定同一个结构可以分别实现AND、OR和XOR三种基本逻辑门。我之所以说这个案例“超有意思”是因为它把多个核心概念串在了一个小结构里SPP色散、MIM波导模式、相位控制、干涉判据、参数化扫描。做完一遍等于把COMSOL微纳光学仿真的主干流程都走了一遍。2. 动手前的方案设计几何、材料、物理场怎么选2.1 几何结构三个波导加一个作用区的故事这个案例的几何不复杂我用的是经典的MIM波导结构也就是金属-绝缘体-金属三层夹心。金属选银中间芯层是空气。光被限制在空气芯层里传播芯层两侧各有一大块银。整体布局是一个Y型合束器两个输入臂宽度均为100 nm长度各约2 μm从左侧以一个小角度5度左右汇入中央相互作用区两臂合并后的一段水平波导长度大概11.5 μm输出臂从作用区右侧引出宽度可以略宽到150200 nm方便观察输出功率。两个输入臂的几何长度差是后面实现XOR的关键。如果两臂完全等长两路光到达作用区时相位一致如果刻意让其中一个臂比另一个长出一段特定距离就能在汇合点引入固定的相位差。这个结构在COMSOL里画起来很快关键是别把合束尖角做得太尖锐否则网格会局部畸变求解器容易在尖角处出问题。我习惯在合束处加一小段圆弧过渡让几何更干净。2.2 材料参数银的介电常数怎么给材料是整个仿真的物理基础。SPP只有在一侧介电常数实部为负的材料界面上才能存在这里选银没有悬念。1550 nm波长附近银的相对介电常数实部大约在-130左右虚部大约34。我建模时用了一个近似值ε_Ag -132 3.2i作为频域单点计算足够了。如果你用的是COMSOL内置材料库要注意它默认给的可能是插值色散模型也可以自己在材料节点里手填一个常数反正在单频点仿真里两者差别不大。为什么不选金金的化学稳定性确实更好但1550 nm附近金的损耗明显高于银SPP传播距离更短做干涉型器件的时候输出功率会很难看。银的缺点是容易氧化但仿真里不存在这个问题放心用。中间芯层用空气n 1。想提高模式约束或者模拟实际器件也可以换成n 1.46的二氧化硅但案例里用空气最简单色散关系也最清晰。2.3 物理场与边界条件频域求解端口怎么设物理场选择“电磁波频域”这是COMSOL里做SPP仿真的默认入口。SPP有严格的偏振要求只能是TM偏振也就是磁场垂直于传播面。在二维模型里这意味着我们关心的是面内电场Ex/Ey和面外磁场Hz。初学者经常在这里踩坑如果选了TE偏振金属界面根本激不出表面波场图一片空白。端口设置是这个案例的另一个关键点。两个输入臂各设一个数值端口输出臂设一个数值端口。所谓数值端口就是让COMSOL先做一个局部模式分析算出波导里实际传播的模式再把这个模式作为激励源注入。外层边界一定要处理干净。我用的是散射边界条件配合完美匹配层PML厚度设在λ0/2左右放在模型最外层。如果不加PML边界反射会污染干涉结果输出端口的功率曲线会出现莫名其妙的振荡。3. COMSOL实操全流程从参数表到真值表3.1 全局参数表怎么定建模之前先把全局参数定义好这是让项目变得可维护的关键。我通常会在“全局定义-参数”里建一张表参数名表达式说明lambda01550[nm]工作波长f0c_const/lambda0工作频率w_core100[nm]MIM芯层宽度L_arm2000[nm]输入臂基准长度dL0[nm]第二臂长度增量相位偏置用L_region1200[nm]相互作用区长度w_out180[nm]输出波导宽度P_in11[W/m]输入端口1功率二维里是每米功率P_in20[W/m]输入端口2功率dL这个参数就是后面实现XOR的开关。把它设为0两臂等长同相合束把它设成λ_spp/2对应的长度两臂反相合束。3.2 几何建模与布尔运算细节几何层面我用二维平面模型因为教学案例用2D足够计算量小出图直观。画法上先画两个倾斜的矩形作为输入臂再画一个水平矩形作为作用区和输出臂最后用布尔并集把它们合成一个整体。有一点要特别提醒COMSOL里做布尔并集之后材料域会合并边界上的内部线条会被吸收。MIM波导结构本质上需要区分金属区域和空气芯层区域所以要分两步先把所有空气芯层的矩形并成一个几何对象再把所有银区域并成另一个几何对象两层叠在一起。这样材料指派时逻辑清晰网格划分也不会因为在空气-金属界面误判而产生退化单元。合束处的尖角问题我之前提过最稳妥的办法是画几何时给输入臂末端加一小段圆角过渡。COMSOL二维里可以直接用“圆角”工具半径给50 nm左右就够。3.3 端口激励与模式配置端口设置是整个案例里最容易出问题、也最体现基本功的地方。COMSOL的“端口”边界条件支持数值端口类型它会自动在端口边界上计算波导模式。配置数值端口时有几个参数必须注意模式数一般设1就够但如果没有把握设23个让求解器多找几个候选模式再从结果里挑场型最像SPP的那个。模式搜索基准建议把有效折射率的搜索初值设在1.0 0.01i附近。因为空气芯层MIM波导的表面模式有效折射率非常接近1。如果初值给得离谱比如默认的1.5求解器可能搜不到模式。端口激励方向输入端口1和2设为“激励端口”输出端口设为“接收端口”。激励幅度用P_in1、P_in2两个参数控制后面参数化扫描真值表全靠这两个值。端口设置完之后强烈建议先单独跑一次模式分析看一眼端口截面上的电场分布。如果电场峰值在芯层内部、且在金属界面附近有明显的高亮条带说明模式抓对了。如果场型一片均匀那就是搜到了平面波本身而不是SPP模式需要回头调整搜索基准。3.4 网格划分SPP仿真的命门网格是整个案例里最不能省的一步。SPP场的特征是能量极度集中在金属-介质界面附近法向方向几个纳米内场强就掉一个量级。如果界面网格画得太粗数值上根本分辨不出表面波出来的场图就是一坨平的。我的网格策略是这样的芯层内部最大单元尺寸控制在1520 nm100 nm宽的芯层至少保证5到7个单元金属-空气界面必须加边界层网格。第一层厚度给1 nm层数68层增长率1.2。这样法向方向能清晰解析场的指数衰减银的深层区域和PML区域单元尺寸可以放到50100 nm反正场很强地衰减了整个模型最大单元尺寸不超过100 nm保证背景场也平滑。划分完之后自由度数通常在大几十万到一百多万之间。这个规模对COMSOL来说非常轻松用直接求解器几秒到几十秒就能算完。网格是否够细有个简单验证方法把界面第一层厚度从1 nm加密到0.5 nm再算一次同一频点如果输出端口功率变化小于2%说明网格已经收敛可以放心扫参数了。3.5 求解与后处理怎么把场图变成逻辑判据求解设置上因为是单频点问题不需要扫频率直接做参数化扫描就行。扫描变量是两个输入功率的组合我用显式组合列表(P_in1, P_in2)依次取(0,0)、(1,0)、(0,1)、(1,1)正好对应逻辑输入的00、01、10、11四种状态。求解器我用的是MUMPS直接求解器。这种小模型用直接法比迭代法稳得多。金属介电常数实部是大负数迭代求解器经常收敛困难直接法完全没有这个问题。后处理部分第一件事是画电场模|E|的分布图。SPP的典型特征是在金属界面沿传播方向有一条细亮的能量带到合束区之后出现清晰的干涉条纹。第二件事是定量读出输出功率。在输出端口上定义“端口功率”派生值或直接对输出边界做坡印廷矢量的线积分得到四个输入组合下的输出功率。有了这四个功率值逻辑门就呼之欲出了。4. 干涉的魔法同一套结构变出AND、OR、XOR4.1 输出端口的功率与逻辑阈值在干涉型逻辑门里逻辑电平不是看瞬时相位而是看输出端口的稳态光功率相对于阈值的位置。具体做法是先跑一个单臂输入的对照仿真也就是(1,0)状态记下此时的输出功率为P0。P0就是整个判读系统的参考基准。然后定阈值逻辑门组合阈值 1.5 × P0只有两路强相干叠加才能超过这个值OR门阈值 0.5 × P0只要任意一路有光进来就能超过XOR门阈值 0.5 × P0但需要配合反相相位偏置。这里的单位是二维仿真里的“每米功率”反正只是做归一化比例不影响逻辑判断。4.2 同相叠加AND门与OR门的实现当dL 0两个输入臂等长两路光到达合束区时相位一致。四种输入组合下的输出功率如下输入组合输出功率归一化AND判读OR判读A0, B0000A1, B01.0×P001A0, B11.0×P001A1, B1约3.8×P011为什么两路同相输入时输出接近4倍P0而不是2倍因为相干叠加是场强的叠加两路等幅场的幅度相加变成2E功率正比于幅度平方自然就是4倍。当然实际会受损耗和模式失配影响我的仿真结果大约在3.63.8倍这个区间。阈值定在1.5×P0时只有AB1这一种状态超出阈值这就是AND门。阈值降到0.5×P0时只要有任意一路输入就判为1这就是OR门。同一个结构只改阈值就能切换两种逻辑功能这正是干涉型逻辑门的巧妙之处。4.3 反相叠加XOR门的实现XOR门的定义是两输入相异时输出1相同时输出0。这比AND、OR要难一点因为要求AB1时输出必须为0。我的做法是通过几何长度差引入π相位偏置。前面说过SPP在MIM波导里的模式波长λ_spp是真空波长除以有效折射率约等于1.545 μm。如果把第二个输入臂比第一个加长半个模式波长也就是约772 nm那么两路光到达合束区时就反相了。输入组合输出功率归一化XOR判读A0, B000A1, B01.0×P01A0, B11.0×P01A1, B1约0.05×P00两路同相输入时本应叠加增强结果因为反相偏置变成了相消输出接近零正好满足XOR对“相同为0”的要求。实际中由于两路损耗不完全相同、模式幅值略有差异相消后会有少量残余功率我的仿真里大约是0.05×P0不影响判读。这就是我特别喜欢这个案例的原因一个相位偏置的参数dL从0改到772 nm就把逻辑功能从AND/OR切换成了XOR整个结构完全不用动。4.4 消光比是怎么算出来的逻辑门不能只看真值表正确还要看信号质量。最常用的指标是消光比定义是输出为1状态的最小功率与输出为0状态的最大功率之比用分贝表示ER 10 × log10(P_on_min / P_off_max)我的仿真结果大致是这样的逻辑门P_on_minP_off_max消光比AND约3.6×P0约1.0×P0约5.6 dBOR约1.0×P00理论无穷XOR约1.0×P0约0.05×P0约13 dBAND门的消光比天然就吃亏因为它的“0”状态里包含了单臂输入这种功率不低的组合。想提高AND消光比可以优化相互作用区的长度让单臂传输到输出端的效率降低一些同时尽量保住双臂同相叠加的功率。这本质上是个参数优化问题后面我会讲具体怎么扫。5. 我踩过的坑常见问题与排查实录5.1 求解不收敛频域单点求解按理说极难不收敛但如果出现报错或NaN八成出在PML和求解器配置上。我遇到过一次典型的发散PML厚度给得太薄边界吸收不干净反射波在结构里形成驻波导致局部场强异常放大。解决方法是把PML厚度加到λ0/2以上并选择“多项式”渐变类型阶数给23。另外提醒一句如果默认的迭代求解器不收敛直接换MUMPS直接求解器。很多SPP模型里金属介电常数实部是大负数迭代矩阵性质很差用直接法一劳永逸。5.2 场图很平SPP根本没被激发这是新手最容易撞的墙。画完网格、跑完求解结果场图干干净净金属界面上没有任何能量带。排查顺序我建议是这样的先确认偏振方向。SPP必须是TM偏振选错偏振就什么都没有再查网格。界面没有边界层、网格太粗的话表面波会被数值耗散掉最后查端口模式。模式分析搜出来的可能不是SPP模式而是自由空间平面波解。我自己的经验是以上三条里至少有一条是问题根源。尤其是第二条表面波的解析需要法向网格足够细第一层1 nm、一共6层边界层这个配置是起步价不是可选优化。5.3 端口报错与模式缺失端口设置最常见的报错是“特征值求解器找不到所需模式数”。这个报错十有八九是模式搜索基准给得不对。MIM波导的表面模式有效折射率接近于1但略大于背景介质折射率。如果搜索基准落在远离1的位置比如默认值可能关联到某个绝缘材料折射率求解器就会扑空。把搜索基准改成1.001或者1.0 0.01i通常立刻就能找到。还有一种情况是芯层宽度被改得过小比如小于30 nm模式有效折射率大幅偏离基准。这时候可以在模式分析设置里把模式搜索上限放宽同时多搜几个模式再从模式列表里挑场分布最像表面波的那个。5.4 消光比不理想怎么调如果跑完真值表发现AND门的消光比只有3 dB甚至XOR门的“0”状态功率高到接近阈值那就需要对结构做参数优化。我常用的方法是参数化扫描相互作用区长度L_region。从800 nm开始步长50 nm一直扫到2 μm同时记录四种输入组合下的输出功率。画成曲线后很直观双臂同相输入和单臂输入的功率差最大处就是AND门消光比最好的位置。XOR门如果相消残余太大多半是两臂损耗不对称。解决思路是先让两个输入臂几何完全对称再把引入的臂长差精确换算成半波长。注意是模式波长λ_spp不是真空波长这两个差着零点几个微米用错了我实测会差出相当大的残余功率。5.5 我的调参习惯与后续扩展这套案例做下来我最大的感受是SPP仿真七成功夫在网格和模式分析这两个前置环节。很多朋友第一次跑出来场图是平的第一反应是换材料、改结构其实多半是网格没把表面波喂饱。我现在的习惯是先花十分钟做一次网格收敛性检验确认结果稳定了再开始扫参数。另一个非常实用的小技巧保持一个“单臂输入”的对照仿真。后面所有真值表判读都拿它归一化定位问题会快很多。比如输出功率比预期低了一半先看单臂输入的P0是不是也低了如果是问题在传输损耗和端口匹配而不是在干涉逻辑本身如果P0正常但四倍峰值不对再回头查相位偏置和合束区几何。这种分层定位的思路能让调试效率提升不少。这个案例往后扩展的空间也很大。最常见的方向是把三个逻辑门组合起来在输出端再接一段波导做一个半加器实现简单的全光加法。COMSOL里所有物理场、端口、网格设置都可以直接复用只需要在几何上增加级联结构再做一轮参数化扫描验证。另一个方向是换成SiO2芯层、换成金材料对比不同材料体系下的损耗和消光比顺便把SPP色散理解得更透。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进