Cadence带隙基准仿真全流程:从原理到温漂PSRR验证 1. 为什么带隙基准是模拟电路设计的“成人礼”如果你在模拟IC设计这个行当里待过一段时间就会发现一个很有意思的现象面试官考察一个候选人的基本功往往不会上来就问你怎么设计一个高增益的运算放大器而是会问“你做过带隙基准吗温漂做到多少”。这个问题看似简单实际上能刷掉一大半人。原因很直接——带隙基准电压源Bandgap Reference简称BGR是几乎所有模拟芯片里都必须有的模块它给LDO提供参考电压、给ADC提供基准、给比较器提供阈值一旦它的精度和稳定性出了问题整个系统的性能都会跟着塌方。我刚开始接触Cadence Virtuoso做仿真的那会儿觉得带隙基准不就是个Brokaw cell或者Banba结构嘛书上电路图都画得清清楚楚照着搭出来跑个DC仿真温度扫描一看曲线挺平的就觉得完事了。结果流片回来一测室温下输出偏离仿真值将近20mV温漂曲线在高温段直接翘起来了。那次经历让我彻底明白一个道理带隙基准的仿真难点从来不在电路拓扑本身而在于你怎么在Cadence里把仿真环境搭对、把模型选对、把各种寄生和失配因素考虑进去。这篇文章主要面向已经有一点Cadence Virtuoso使用基础、但还没有完整跑通过带隙基准仿真全流程的朋友。我会从原理出发把每一个仿真步骤背后的“为什么”讲清楚然后给出可以直接复现的操作细节。不管你是刚进实验室的研究生还是刚转岗做模拟设计的工程师只要跟着走一遍应该能少踩不少我当年踩过的坑。2. 带隙基准的核心原理与仿真前的关键决策2.1 带隙基准到底在“补偿”什么很多教程一上来就给你看公式什么Vref Vbe K·ΔVbe然后说因为Vbe是负温度系数、ΔVbe是正温度系数两者加权求和就能得到零温漂。这个说法本身没错但它太“结果导向”了容易让人忽略一个关键问题为什么偏偏是“带隙”电压实际上硅的带隙电压在0K时外推到大约1.2V左右这个值恰好是Vbe和K·ΔVbe相互抵消的那个点。换句话说带隙基准的“带隙”二字指的是你最终输出的那个电压值在数值上接近硅的带隙电压而不是说电路里真的用到了什么带隙材料。理解了这一点你就能明白为什么不同结构的带隙基准输出都在1.2V附近——这是物理规律决定的不是设计者随便选的。在Cadence里做仿真的时候这个原理直接影响到你的仿真目标设定。你需要观察的核心指标有三个输出电压的绝对值、温度系数TC、以及电源抑制比PSRR。这三个指标不是孤立的它们之间存在微妙的权衡关系后面我会结合具体仿真步骤来讲。2.2 拓扑选择Brokaw、Banba还是电流模在Cadence里搭电路之前你得先决定用哪种拓扑。常见的带隙基准结构有这么几类拓扑类型核心特点适用场景仿真难点Brokaw型输出约1.25V结构直观教学、低压差场景运放失调影响大Banba型输出可低于1V电流模结构低电源电压设计需要精确的电流镜匹配电流模CMOS型输出灵活易于低压设计先进工艺节点运放增益和失调要求高我个人的建议是如果你是第一次在Cadence里完整跑带隙基准仿真从Brokaw型或者简单的Kuijk型入手。原因很简单——这两种结构的核心节点电压变化范围大仿真器容易收敛而且温度扫描出来的曲线直观方便你理解正负温度系数是怎么叠加的。等你把基本流程跑通了再去尝试Banba那种低压电流模结构那时候你对仿真器的脾气也摸清楚了。2.3 工艺库和模型文件的选择这一步看起来是“环境配置”但实际上它直接决定了你仿真结果的可信度。在Cadence里你需要确认三件事第一工艺库是否包含带隙基准所需的器件模型。具体来说你需要有纵向PNP或者NPN的模型用于产生Vbe以及匹配性好的电阻模型用于产生ΔVbe的加权系数。有些工艺库的电阻模型只给了典型值没有给出温度系数和匹配参数这种情况下你跑出来的温漂曲线只能看趋势不能看绝对值。第二模型文件的温度范围是否覆盖你的仿真需求。工业级芯片通常要求-40°C到125°C车规级要求-40°C到150°C甚至更高。如果你用的模型文件只覆盖到125°C那你在Cadence里设置温度扫描到150°C的时候仿真器可能会外推模型参数结果不可信。第三是否启用了统计模型。如果你要做蒙特卡洛仿真看失配影响必须确认工艺库提供了统计模型文件通常是.scs或.lib文件中的statistics段。没有统计模型的话你只能手动设置失配参数工作量大且容易遗漏。提示在Cadence ADE里加载模型文件时注意检查Model Libraries的设置。有些工艺库需要同时加载多个section比如tt、ff、ss如果你只加载了tt蒙特卡洛仿真会报错。3. 在Virtuoso里从零搭建仿真环境的完整链路3.1 原理图绘制中的“隐形陷阱”画原理图这件事看起来就是连线但实际上有几个细节会直接影响后续仿真能不能跑通。首先是器件命名和属性设置。在Cadence里每个器件的instance name默认是I0、I1、I2这样的自动编号但如果你要做失配仿真或者参数扫描最好手动改成有意义的名称比如M1_input、M2_load、Q1_pnp这样的。这样做的好处是当仿真报错说“某节点不收敛”的时候你能快速定位到是哪个器件的问题。其次是PNP管的接法。在CMOS工艺里纵向PNP的集电极通常必须接到最低电位通常是地基极和集电极短接作为二极管使用。如果你在原理图里把PNP的集电极接到了其他节点仿真可能不报错但结果完全不对。我见过有同学把PNP的集电极悬空跑出来的Vbe曲线看着挺正常实际上那个PNP根本没导通输出电压是靠其他路径撑起来的。第三是电阻的匹配方向。在版图层面电阻的匹配需要考虑方向一致性但在原理图仿真阶段你至少要做到电阻的W/L比例精确。比如你需要一个8:1的电阻比来产生ΔVbe那就老老实实放一个单位电阻和一个8倍单位电阻不要用一个1kΩ和一个8kΩ的电阻来凑——虽然后者在理想仿真里结果一样但它掩盖了匹配性问题等你做蒙特卡洛的时候就会发现偏差比预期大得多。3.2 仿真器选择与收敛性设置Cadence ADE里常用的仿真器有Spectre和APSAccelerated Parallel Simulator。对于带隙基准这种电路我建议用Spectre原因是它的收敛算法更成熟对温度扫描和DC扫描的支持更稳定。APS虽然速度快但在处理高阻抗节点和温度扫描的时候偶尔会出现不收敛的情况。关于收敛性设置有几个参数你需要特别关注reltol相对误差容限默认是1e-3。对于带隙基准的DC仿真建议收紧到1e-5甚至1e-6因为你需要观察mV级别的电压变化。abstol绝对误差容限默认是1e-12。对于电流模带隙基准节点电流可能在nA级别这个值需要适当调整。vntol电压误差容限默认是1e-6。如果你发现温度扫描曲线有毛刺可以试着收紧这个值。gmin最小电导默认是1e-12。这个参数影响仿真器对高阻抗节点的处理带隙基准里的运放输出节点通常阻抗很高如果仿真不收敛可以试着把gmin调到1e-10。在ADE的Simulation菜单下找到Options→Analog里面有一个Convergence选项卡你可以在这里调整上述参数。我的经验是先按默认值跑一遍如果不收敛再逐步收紧不要一上来就把所有参数都调到最严格那样仿真时间会成倍增加。3.3 温度扫描仿真的正确打开方式温度扫描是带隙基准仿真的核心。在ADE里你可以通过Tools→Parametric Analysis来设置温度扫描也可以通过DC仿真里的Temperature选项来设置。两种方式的区别在于Parametric Analysis可以同时扫描多个变量比如温度电源电压而DC仿真里的Temperature只能扫温度。我通常的做法是先用DC仿真里的Temperature扫一遍-40°C到125°C步长设为5°C快速看一下温漂曲线的形状。如果曲线形状不对比如单调上升或下降说明你的正负温度系数没有抵消好需要回去调整电阻比或者PNP的个数比。如果曲线形状对了但温漂系数偏大再用Parametric Analysis做精细扫描步长设为1°C同时把电源电压也加进去扫看PSRR对温漂的影响。这里有一个容易被忽略的细节温度扫描的起始温度会影响仿真器的初始条件。如果你从-40°C开始扫仿真器会先在这个温度下算一个DC工作点然后逐步升温。如果你从27°C开始扫初始工作点不同最终曲线在低温段可能会有细微差异。我的建议是始终从最低温度开始扫这样更接近实际芯片的启动过程。4. 温漂曲线调不平时我在排查什么4.1 先看DC工作点再看曲线很多人一看到温漂曲线翘起来第一反应就是去调电阻比。这个思路方向没错但顺序错了。你应该先检查DC工作点确认所有管子都在饱和区运放的输入失调电压在合理范围内然后再去看温漂曲线。具体操作是在ADE里跑一个单点DC仿真温度设为27°C然后在Results→Print→DC Operating Points里查看每个管子的region和vdsat。如果发现某个管子在线性区那温漂曲线肯定不对因为你的电流镜没有正常工作ΔVbe的产生路径可能已经断了。我遇到过一次典型情况温漂曲线在高温段突然上翘检查DC工作点发现高温下运放的输出管进入了线性区导致反馈环路增益下降Vbe和ΔVbe的加权关系被破坏。解决办法是在运放输出端加一个源极跟随器或者调整运放的偏置电流让它在高温下仍然保持足够的增益。4.2 电阻温度系数的影响被低估了在理想公式里我们假设电阻的温度系数为零或者至少两个电阻的温度系数完全一致可以相互抵消。但在实际工艺里不同类型的电阻温度系数差异很大。比如多晶硅电阻的温度系数可能在-100ppm/°C到100ppm/°C之间而扩散电阻的温度系数可能更大。如果你用的两个电阻类型不同比如一个用多晶硅一个用扩散电阻它们的温度系数不匹配会直接体现在温漂曲线上。解决办法是尽量使用同一类型的电阻并且按照相同的方向摆放在版图里在原理图仿真阶段至少保证它们的温度系数参数是一致的。在Cadence里你可以通过修改电阻模型的温度系数参数来模拟这种情况。比如在模型文件里找到电阻的tc1和tc2参数手动改成不同的值然后跑温度扫描观察曲线变化。这个操作可以帮助你理解电阻温度系数不匹配对温漂的影响程度。4.3 运放失调电压的蒙特卡洛分析带隙基准的精度很大程度上取决于运放的失调电压。在Cadence里做蒙特卡洛分析你需要先确认工艺库提供了统计模型然后在ADE里设置Monte Carlo仿真选择mismatch和process两个维度。具体设置步骤在ADE里选择Simulation→Monte Carlo设置仿真次数通常至少200次才能得到有统计意义的结果选择分析类型为DC设置温度扫描范围在Outputs里添加Vref作为输出信号运行仿真后在Results里查看Vref的均值和标准差如果标准差超过你预期的1/3说明你的运放失调抑制不够需要考虑增加输入对管的面积、采用斩波稳定技术或者在版图上做共质心布局。注意蒙特卡洛仿真非常耗时建议先用小次数比如50次快速验证设置是否正确确认无误后再跑完整次数。5. 电源抑制比与启动电路的仿真验证5.1 PSRR仿真AC分析的正确设置PSRR是带隙基准的另一个关键指标它衡量的是电源电压变化对输出电压的影响。在Cadence里仿真PSRR你需要做AC分析在电源端加一个AC小信号源然后观察输出端的响应。具体操作在电源电压源上添加AC magnitude通常设为1V在ADE里选择AC分析频率范围设为1Hz到100MHz在Outputs里添加Vref然后选择dB20函数运行仿真后曲线就是PSRR随频率的变化这里有一个容易犯的错误AC分析必须在正确的DC工作点上进行。如果你直接跑AC仿真仿真器会先算一个DC工作点但如果你的启动电路没有正确关断DC工作点可能是错的PSRR曲线也就没有意义。所以我的习惯是先跑一遍DC仿真确认工作点正确再跑AC仿真。低频PSRR通常在-60dB到-80dB之间如果你看到低频PSRR只有-20dB那说明你的带隙基准核心电路和电源之间的隔离不够可能是电流镜的沟道长度调制效应太强或者运放的电源抑制能力不足。5.2 启动电路不仿真就等于埋雷带隙基准有两个简并工作点一个是正常工作点一个是所有管子都截止的零状态点。启动电路的作用就是在上电时把电路从零状态推到正常工作点。很多人在仿真的时候忽略了启动电路结果流片回来发现芯片上电后输出一直是0V。在Cadence里验证启动电路你需要做瞬态仿真设置瞬态仿真时间为1ms步长设为1us在电源电压源上添加一个阶跃信号从0V上升到额定电压上升时间设为10us观察Vref的瞬态响应确认它在多长时间内建立到最终值同时观察启动电路中各节点的电压确认启动管在电路正常启动后完全关断如果Vref在仿真时间内没有建立起来或者建立后又在某个时刻掉下去了说明启动电路有问题。常见的问题是启动管关断不彻底导致它一直在给核心电路注入电流影响了正常工作点。5.3 瞬态仿真不收敛的排查思路“Cadence瞬态仿真不收敛”是论坛上出现频率最高的问题之一。带隙基准的瞬态仿真不收敛通常有以下几个原因启动电路的初始条件设置不当如果你在仿真里设置了.ic初始条件但设置的值和电路实际工作点差距太大仿真器会在第一个时间步就卡住。解决办法是去掉.ic设置让仿真器自己算初始工作点。节点电容过大如果你在某个高阻抗节点上加了很大的电容比如为了模拟寄生电容仿真器的时间步会变得非常小导致仿真时间过长甚至不收敛。可以试着减小这个电容值或者使用.options里的cmin参数。模型文件中的不连续点有些工艺库的模型在特定温度或电压下存在不连续点仿真器在这些点附近会反复迭代。可以试着在模型文件里添加.options语句比如reltol1e-4来放宽收敛条件。我个人的经验是遇到不收敛先不要急着改电路先检查仿真设置。把仿真时间缩短到100us步长设为1us看看能不能跑通。如果能跑通再逐步增加仿真时间。这个过程虽然笨但能帮你快速定位问题是在电路本身还是在仿真设置上。6. 从仿真到流片那些仿真覆盖不到的角落6.1 版图寄生对带隙基准的影响仿真跑通不代表流片成功因为仿真里没有包含版图寄生。带隙基准对寄生特别敏感尤其是运放输入对管的寄生电容和电阻走线的寄生电阻。在Cadence里做后仿真Post-layout Simulation你需要先完成版图设计然后提取寄生参数PEX生成带寄生的网表再用这个网表跑仿真。这个过程比前仿真复杂得多但它是流片前必须做的。我的建议是在版图阶段就注意以下几点运放输入对管采用共质心布局减小失配电阻采用叉指结构减小梯度效应关键走线尽量短且宽减小寄生电阻在带隙核心电路周围加保护环减小衬底噪声6.2 封装应力与温度分布的考量仿真里我们假设整个芯片温度是均匀的但实际上芯片上存在温度梯度。带隙基准的PNP管如果放在功率器件附近它的结温会比环境温度高导致Vbe偏低输出电压产生偏差。在Cadence里你可以通过设置不同器件的温度参数来模拟这种情况。比如在模型文件里给PNP管单独设置一个温度偏移量然后跑温度扫描观察输出电压的变化。这个操作可以帮助你评估温度梯度对带隙基准精度的影响程度。6.3 测试与仿真不一致时的排查顺序如果你流片回来发现测试结果和仿真对不上不要慌按照以下顺序排查先确认测试条件是否和仿真一致电源电压、负载电流、温度是否相同检查封装是否引入了额外寄生特别是键合线的电阻和电感确认测试仪器的精度万用表的输入阻抗是否足够高是否引入了负载效应检查芯片的启动时间有些带隙基准需要较长时间才能稳定如果测试时上电后立即测量可能读到的是未稳定的值最后才怀疑电路设计本身如果以上都排除了再回去检查仿真设置和模型文件我个人的经验是测试和仿真不一致的情况十有八九是测试条件或封装寄生的问题真正电路设计错误的概率反而比较小。所以排查的时候要从外围往核心查不要一上来就改电路。7. 一些让我少走弯路的实操习惯说了这么多最后分享几个我在Cadence里做带隙基准仿真时养成的习惯都是踩过坑之后总结出来的。第一个习惯是每次仿真前先跑一个“冒烟测试”。具体做法是把仿真时间设得很短比如10us温度设为27°C只跑一个单点DC。如果这个最简单的仿真都跑不通那后面的温度扫描和蒙特卡洛肯定也跑不通。这个习惯帮我节省了大量时间因为很多问题在冒烟测试阶段就能暴露出来。第二个习惯是给每个仿真配置单独建一个ADE state。Cadence的ADE允许你保存不同的仿真状态state比如“DC_27C”、“Temp_Sweep”、“MonteCarlo”、“PSRR”。这样做的好处是当你需要切换仿真类型的时候不需要重新设置所有参数直接加载对应的state就行。而且当你发现某个仿真结果异常时可以快速回到之前的state对比参数设置有什么不同。第三个习惯是在原理图上加注释。Cadence的原理图编辑器支持添加text note我会在关键节点旁边写上这个节点的预期电压范围比如“Vref≈1.2V”、“Vbe≈0.7V”。这样做的好处是当你跑完仿真看结果的时候可以快速判断节点电压是否在预期范围内。如果某个节点电压偏离预期你就能立刻定位到问题区域。第四个习惯是定期备份仿真结果。Cadence的仿真结果默认保存在simulation文件夹里如果你重新跑仿真之前的结果可能会被覆盖。我会把重要的仿真结果导出为CSV文件然后用Python或者Excel画图分析。这样做的好处是你可以把不同版本的仿真结果放在一起对比观察电路参数调整对性能的影响趋势。带隙基准这个电路说难也难说简单也简单。难的是把它做到高精度、低温漂、高PSRR简单的是它的基本原理就那么几条。在Cadence里做仿真工具本身只是一个手段真正重要的是你对电路工作原理的理解以及你对仿真结果的判断能力。仿真跑出来的曲线再漂亮如果你不知道它为什么漂亮那也只是碰运气。反过来如果你能解释每一条曲线背后的物理意义那你就真正掌握了这个电路。