ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

光子集成电路设计流程集成:Lumerical与OptoCompiler协同仿真实践

光子集成电路设计流程集成:Lumerical与OptoCompiler协同仿真实践 做光子集成电路PIC设计的人估计都经历过这种拧巴的状态Lumerical的FDTD把器件仿真结果算得明明白白OptoCompiler里也能把版图画得规规矩矩但这两个工具之间就像隔了一道看不见的墙。器件事仿完把S参数导出成Excel表格发给做版图的同事版图改了一版又得回到Lumerical里重新验证。数据靠人肉搬运版本靠微信群对齐改一次MZI调制器整个链路要来回折腾一周。我们最近把Lumerical和OptoCompiler做了一次流程级集成用S参数文件作为光学模型的标准交换格式用GDS加层映射表统一物理版图定义再把OptoCompiler的版图网表接回Lumerical INTERCONNECT做电光协同仿真。这篇文章不打算写成工具广告而是把这条集成链路里的架构选择、实操步骤和踩过的坑原原本本讲一遍。1. 集成之前先看清光子集成设计的真实流程很多人以为光子集成设计的核心难点在某个仿真工具的算法精度上但真正在项目里跑过一轮你会发现最耗时间的往往不是仿真本身而是工具链之间的“接口”。Lumerical擅长场级物理仿真OptoCompiler擅长版图级实现两者在各自领域都很能打但一旦要协同工作数据和规范就成了决定项目进度的隐形瓶颈。1.1 传统流程的割裂感从哪来在实际流片中我们面对的不只是一个仿真器而是由器件物理验证、系统行为级验证、版图设计、电学版图寄生提取等多种工具组成的链条。Lumerical解决的是“单个光子器件在电场分布下到底表现如何”OptoCompiler解决的是“这些器件在芯片版图上怎么摆、怎么连线、怎么满足工艺约束”。两者的学科重心不一样天然有分工。但分工如果没有统一的接口就会变成割裂器件工程师交付的通常是频点数据版图工程师需要的却是可落地的物理图层系统工程师想要的是能直接跑仿真的动态模型而不是一堆原始仿真曲线。文档传递在这种流程里是最大的瓶颈。我们遇到过的典型场景是调制器移相区的掺杂浓度改了一个数量级Lumerical这边重新算完接口文档更新慢了一拍版图组还按旧参数画电极最后流片回来发现驱动电压算错。这已经不是工具能力问题是流程本身的设计问题。1.2 集成后的流程长什么样既然问题出在接口我们就先定义一套接口规则再让工具围绕着这套规则工作。集成后的流程分四步走第一步在Lumerical里完成器件级FDTD/EM仿真提取S参数同时导出带正确层映射的GDS第二步将S参数文件和层映射文件做成一个“模型包”连同器件端口定义、工作波长范围一起放进统一的模型库第三步在OptoCompiler中以标准单元方式引用这个模型包画出来的原理图直接使用S参数模型生成版图时也引用同一个GDS和层映射表保证模型和版图对得上第四步把得到的版图网表和器件S参数同时送进Lumerical INTERCONNECT与驱动电路、探测器电路放在同一套环境中跑电光协同仿真。这样改版时器件工程师只需要重新生成模型包下游所有工具读取到的都是同一份最新数据不再需要人工二次录入。下面这个表格可以直观看出差别。环节传统流程集成流程器件仿真结果传递Excel/报告人工填写S参数文件模型元数据自动入库版图与仿真对应关系靠经验核对层号统一层映射表校验脚本自动检查电学与光学协同两边分开做最后拼接INTERCONNECT统一联合仿真版本管理文件名口头约定模型库带版本号引用不可变一次MZI改版的周期约5个工作日1.5天左右1.3 标准化的前提是数据模型一致这套流程的核心不是“让两个软件变得兼容”而是“让数据在离开Lumerical之前就已经按照OptoCompiler能理解的方式组织好”。S参数描述端口行为GDS描述几何层映射描述工艺语义。三者合起来才是一个完整的、可以在两端流转的模型包。集成本质上是把人对接口的理解固化成机器可读取、可校验的规范。这一步做扎实了后面所有环节都会顺畅很多。2. 整体架构与模型传递方式的选择模型传递是集成流程的心脏。到底该用什么格式把Lumerical的物理结果送给OptoCompiler是把FDTD计算出的场分布整个导过去还是只传行为级参数我们在这个问题上花费的讨论时间最长最终确定的分层思路也直接决定了整个流程的稳定程度。2.1 器件级仿真和版图级设计之间需要一个“翻译层”物理场的连续分布怎么变成电路仿真里可用的端口行为这是集成最核心的抽象问题。在Lumerical里一个波导耦合器本质上是电磁场的响应计算结果里包含不同模式在空间上的干涉、散射、吸收而OptoCompiler里我们只需要知道从端口A进的光子有多少比例、什么相位关系到了端口B。这两个视角之间需要一个“翻译层”。最常见的翻译层就是S参数矩阵。S参数把光器件当成一个线性网络不考虑内部的场分布只用一组频域响应描述端口之间的传输、反射和相位关系。对于无源器件这个近似足够准确对于有源调制器件我们可以在一组偏置电压下分别提取S参数再用插值方式建立偏置相关模型。这样就把物理层的连续域信息压缩成了模型层的有限参数集。压缩过程当然会丢失一些信息比如非线性谐波但对绝大多数光子集成系统级的性能评估来说已经够用。2.2 三种模型传递方式S参数、紧凑模型、电路级等效模型我们在实际项目里同时评估过三种传递方式它们各有适用边界S参数模型适合无源线性器件导出为Touchstone格式OptoCompiler和INTERCONNECT都能直接识别。优势是通用、免参数拟合缺点是不含非线性不能直接描述调制器的物理效应。紧凑模型比如用有效折射率、群折射率、耦合系数等参数描述波导和耦合器。优点是仿真速度最快适合链路预算估算缺点是需要对器件做大量先验标定换工艺就不准。电路级等效模型针对调制器、光电探测器这类有源器件把PN结电容、串联电阻、等效RC和光电转换关系用SPICE子电路表达。优点是天然能和电学驱动电路在同一电路仿真器里协同缺点是建立过程比较繁琐需要和S参数模型配合使用。我们最终把主线放在S参数上。无源器件全部使用S参数文件传递有源器件则是“S参数光学部分SPICE电路子电路电学部分”的组合包。OptoCompiler主要负责把这两类模型在版图环境中组合起来。很多人会走弯路以为只要把Touchstone文件一股脑丢进OptoCompiler就能跑电光协同仿真。实际上Touchstone只能描述频域线性光学行为瞬时电光联合仿真还需要额外把S参数做有理函数拟合或者换成等效电路模型。集成流程的节点放在S参数上不是因为它能解决所有问题而是因为它是不同工具之间最通用、最容易自动校验的中间格式。2.3 为什么不是直接选一套全家桶市场上也有厂商提供“设计到仿真”全家桶式的光子集成工具链但我们在评估后发现Lumerical在无源/有源器件的物理仿真深度上更成熟而OptoCompiler在版图编辑、单元库处理、与晶圆厂PDK的接口方面更有优势。强行把两个工具放在同一家生态里反而会牺牲各自的长板。我们选择用标准文件格式和无状态的中间目录把它们拼接起来本质上是把“工具集成”改写成了“数据集成”。工具之间不互相调用API只读写约定好的模型包。这样做的另一个好处是工具的版本升级不会破坏整个流程只要接口格式不变任何一个工具单独升级其他环节都不用动。当然缺点也很明显就是需要自己维护脚本和规范这部分成本在项目初期会很高但用一次就值回来了。3. 端到端实操从Lumerical到OptoCompiler再到电光协同仿真这一节是真正动手的部分。我会以一个MZI调制器作为最小实例把四条核心步骤拆开讲清楚器件端口化、S参数导出与模型包制作、OptoCompiler实例化与版图关联、最终的电光协同仿真链路搭设。3.1 第一步在Lumerical里把器件“收拾”成能对接的状态以最常用的MZI调制器为例。几何结构有两个多模干涉耦合器MMI、两个移相区、若干段波导和电极。要在FDTD里仿真完整器件通常很贵所以我们分两步走先用FDTD分别仿真两个MMI耦合器得到各自的S参数再用MODE或INTERCONNECT对移相区波导建立一个基于有效折射率变化的传输模型。这样做的好处是把大器件拆成基本单元每个单元的网格都设置到合理精细度。端口设置是关键中的关键。每个端口平面必须放在远离突变结构的均匀波导区域保证能明确指定是TE0、TE1还是TM0模。我们用Lumerical脚本自动扫描端口1激励其余端口只放模式监视器记录透射系数。网格在波导芯层加密到5nm左右因为硅波导的模场对网格非常敏感包层网格放宽到20nm这样不会让资源消耗失控。端口数量决定了Touchstone文件的通道数两个MMI各4个端口移相波导2个端口组合后的调制器整体可以等效成一个2x2光端口网络。3.2 第二步S参数导出与模型包制作仿真完成后在Lumerical的S参数分析对象里设置好端口顺序和扫频范围直接导出Touchstone文件。这里有两个容易忽略的细节。第一个是频率范围。一般我们会从1500nm到1600nm连续扫这样既覆盖C波段也给后续带宽分析留余量。第二个是端口命名。Touchstone里的端口没有名字只有编号所以必须在文件头部或者配套的yaml/json元数据里写清楚“1输入2直通3交叉4监测”。否则等文件进了OptoCompiler很容易把直通和交叉端口弄反。导出后我们会用一段Python脚本对S参数做无源性校验对所有频点计算Hermitian矩阵的特征值如果发现特征值大于1就说明有数值增益需要回头检查网格或PML边界。这一步虽然只花十几分钟但能救回后面几天的调试时间。校验通过的s2p/s4p文件和对应的端口定义、层映射信息一起打包成“模型包”扔进一个带版本号的Git仓库。3.3 第三步在OptoCompiler里实例化外部模型并关联版图OptoCompiler本身有一套光子集成组件库但外部工具生成的S参数怎么挂进来需要按我们自己的PDK风格建一套影子单元。具体是在原理图环境中创建自定义symbol让它的光学端口和Touchstone文件端口一一对应然后为这个symbol绑定一个GDS对应的pcell视图。pcell内部可以写参数比如波长、端口编号引用的S参数文件路径。我们习惯把模型包路径作为pcell的参数这样同一个symbol只要换文件路径就能切换到偏压-2V和0V两个版本不需要改动版图结构。同步需要做的是把Lumerical导出的GDS分批导进OptoCompiler并按层映射表分配工艺层。比如硅波导层在我们的工艺里是layer 50暗/亮掺杂是layer 60和62金属电极是layer 120。如果这一步的层号和晶圆厂PDK不一致后面的DRC会立刻报错而且错误信息经常看不懂。所以从开始就要让版图工程师维护一份层映射表并在每次导入时用脚本比对。3.4 第四步搭起电光协同仿真的链路完成版图后光学系统仿真还只是“静态链路预算”。真正要达到电光协同仿真需要把电学驱动器、调制器PN结、光学传输和探测器放在同一个时间轴上求解。我们的做法是把OptoCompiler生成的版图网表连同器件S参数导入Lumerical INTERCONNECT构成光学信号链路同时把驱动电路和接收电路的SPICE网表通过接口挂进去。简单说一下协同机制驱动电压每一时刻都在改变调制器移相区载流子浓度载流子浓度变化改写有效折射率折射率变化反映为S参数相位项的偏移INTERCONNECT把相位变化换算成MZI两个臂的光场干涉结果得到输出光功率探测器再将光功率转换成光电流回到SPICE侧的TIA。要实现这个闭环关键一步是给调制器建立一个“电压相关的S参数模型”。我们取了-2V、-1V、0V、1V四个偏置点分别仿真并拟合出相位偏移随偏压的关系然后在INTERCONNECT里用受控相移器模型去复现这个关系。这种做法牺牲了一部分器件物理细节但对系统级误码率评估足够准确。3.5 最小闭环示例一个MZI的端到端验证我们用一个最小例子验证这套流程是否跑通。先在Lumerical里分别仿真两个MMI提取s4p文件再用波导有效折射率模型组合成一个MZI的光学行为模型。把s4p文件放到模型库在OptoCompiler里建了名为mzi_basic的pcell用两个MMI的GDS单元拼接出版图。接着在OptoCompiler原理图中放置mzi_basic用端口连接测试结构跑一次小规模的光链路仿真确认直通端口和交叉端口的功率分配和FDTD原始结果一致。最后在INTERCONNECT里搭了驱动源、调制器、光电探测器和采样示波器跑偏压调制下的眼图。整个过程从数据结构建立到眼图出来大概花了两天。第一天主要耗在端口映射排错上第二天全是自动化脚本调试。如果你的项目里PDK已经规范这个时间可以压缩到半天。4. 踩坑实录集成链路里最容易翻车的四个环节任何集成流程都会遇到各种不按套路出牌的问题。如果只看官方的集成文档你大概率会觉得一切都很顺滑但实际项目中端口顺序错位、层映射漂移、时域步长冲突、模型版本覆盖每一个都足以让项目卡住一到三天。把这些问题记录下来对后来者比任何夸大的流程宣导都有用。4.1 端口顺序错位仿真结果居然有增益第一次把MMI的s4p文件放进OptoCompiler跑频域仿真时回波损耗结果显示是负的但传输端口出现了大于1的透射率能量不守恒。查了很久最后发现是Lumerical导出Touchstone文件时端口编号默认按空间位置排序而我们在OptoCompiler里建立的symbol端口顺序是按习惯编的两个顺序正好错开。解决方案很简单导出S参数前在Lumerical里把端口按目标symbol的顺序重排同时用一个脚本将Touchstone文件名、端口描述、日期写进元数据导入OptoCompiler时按元数据自动分配端口。这个坑给我的教训是文件格式通用不代表语义通用接口规范必须由两端共同确认而不是各自按默认方式理解。4.2 层映射表不一致DRC满屏飘红GDS本身不包含工艺语义layer号只是数字。同一份版图在Lumerical里用的是调试用层号到OptoCompiler却要按PDK映射。我们最早图省事器件仿真导出的GDS直接扔给版图组结果OptoCompiler里所有波导都没有被识别成硅层DRC报告上百个错误还出现“最小面积”这种莫名其妙的规则报错。最终改法是用工艺PDK的标准层映射表写了一个层转换脚本在导出模型包时自动把GDS层号映射为PDK层号。从此以后每个模型包的版图都经过层校验再没有出现过类似问题。这里建议读者一定把层映射配置当成PDK资产来管理而不是每次手工配。层映射表里哪怕差一个数字下游所有DRC结果都会变得不可信。4.3 瞬态电光协同仿真的时间步长“两难”协同仿真最让人头疼的是时间尺度差异。光学信号周期大约在飞秒量级但驱动电信号通常是几十吉赫兹纳秒量级。如果在瞬态仿真里直接解析光学载波计算量会大到完全不可行。我们第一次尝试时把INTERCONNECT和SPICE仿真器的步长设成统一的小步长结果仿真跑了三个小时才跑完2ns还出现数值振荡。后来采用基带等效模型把光载波从分析中消去只保留包络信息时间步长就可以放到驱动信号周期的几十分之一。这样眼图仿真和时域响应仿真才真正可落地。如果你也在做类似协同仿真一定要先想清楚要不要看载波级效果还是只看包络。两者对模型和步长的要求完全不同硬上只会浪费大量算力。4.4 模型版本漂移排查一个奇怪的光损问题某天系统仿真发现链路插损突然增加了0.8dB但前端器件仿真显示没有变化。最后查到原因是模型库里一个波导交叉的s4p文件被某个同事用新版本覆盖了而原理图引用的是绝对路径没有版本号。从那以后我们规定所有模型文件路径必须包含版本号原理图中只引用带版本号的路径旧文件归档进archive目录。同时用Git对模型库做版本管理每次改动都留commit记录。这件事本身不大但暴露了流程集成的本质问题工具之间的缝隙可以用文件填但填补之后必须靠规范来维持。如果集成只是把文件放到一个共享目录而没有配套的命名和版本策略迟早会随机踩雷。5. 集成带来的实际收益与后续延伸流程跑通之后我发现集成带来的最大变化不是某个仿真步骤变快了而是整个团队的沟通方式变了。以前做项目汇报时大家讨论的是“你给我的数据是不是最新的”现在讨论的更多是“器件的边界条件在哪、仿真的假设合不合理”。这种从“数据搬运”到“数据问责”的转变是一个流程成熟的重要标志。5.1 协作方式和效率的变化流程打通后器件工程师不再需要为每次改版发“最终版”文档。他们只需要把模型包推送到共享模型库更新pcell引用的版本号。版图工程师打开OptoCompiler时模型库会提示新版本直接刷新即可。电学工程师也能更早介入在版图尚未完全定稿时就可以用相同S参数模型做驱动器的摆幅和功耗优化。我们统计过一个带16个MZI的中等规模芯片一次设计迭代从原来的平均5天降到了1.5天。节省的时间大多不在仿真速度上而在“到处找对版本的数据”这件事上。当所有人都从同一个模型库拉取同一份数据时很多无谓的沟通成本和返工成本就自然消失了。5.2 设计质量控制的提升集成不光是快更关键的是所有环节引用同一套数据误差链条被缩短。以前容易出现的“原理图仿真和版图后仿真不一致”问题很大程度上是因为原理图模型和版图几何各说各话。现在器件模型包里同时包含S参数和对应GDS原理图和版图由同一个pcell驱动一致性天然有保障。我们还把层映射校验和无源性校验做成了CI脚本每次提交模型包自动跑一遍不合格的一律不能入库。这就像一个自动门卫把低级错误挡在流片之前。整个过程不需要太多人工干预但能持续保证模型质量。5.3 下一步自动化方向这套流程跑通后可以继续往几个方向深化。一是PDK化把常用器件MMI、光栅耦合器、微环全部做成可参数化的pcell器件仿真通过脚本批量扫描几何参数直接把结果生成PDK库。二是设计自动化用优化算法在Lumerical和OptoCompiler之间闭环迭代比如根据版图中的实际弯曲半径自动修正S参数。三是回归测试每周对全芯片跑一遍频域仿真对比模型库各器件的S参数差异及时暴露工艺版本变化或仿真设置漂移。这些方向本质上是同一个思路的延伸把原来靠人盯的流程变成靠数据和脚本自动联动的流程。只要一开始的标准模型包和层映射规范不打折扣后续扩展会非常顺。我个人实际体会最深的一点是很多团队低估了集成流程里“规范”的比重。一开始我们以为难点在Lumerical的仿真技巧或者OptoCompiler的库配置真正做下来发现最难的是让所有工程师在端口命名、版本管理、层映射这些“小事”上保持一致。如果你也打算搭类似的集成流程我建议先别求全选一个最简单的定向耦合器或MZI从FDTD到S参数再到OptoCompiler和协同仿真把这条线完整跑通。只要这条线是稳的往里面加再复杂的器件都只是重复劳动。工具之间的接口缝隙不会自动消失但用统一的数据交换规范完全可以把缝隙收到不影响效率的程度。这是我在这个项目里最值得分享的一条经验。
返回列表