ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

模拟IC后仿真必读:Calibre view验证PEX提取结果的完整指南

模拟IC后仿真必读:Calibre view验证PEX提取结果的完整指南 前阵子群里有位兄弟发了张截图求助同一个两级运放前仿增益75dB跑完PEX后仿直接垮到52dB低频还平白多出一个零点。大家七嘴八舌有人说是功率地没接对有人怀疑衬底耦合崩了也有人直接劝他重跑一遍Calibre PEX。后来他确认自己连Calibre view都没仔细核对过拿到提取视图就往ADE里扔跑出来一个波形就开始分析。这个场景在模拟IC后仿真里太常见了PEX跑了、视图有了、spectre也出了数但没有人能说清楚提取结果到底对不对。这篇文章不绕弯子直接讲怎么在Virtuoso环境下用Calibre view验证PEX提取结果全程按SMIC13工艺的真实操作来说从配置、生成、核对到排查都会覆盖。适合正在做模拟后仿真、或者刚接触PEX的工程师和研究生看完至少能自己判断“这次提取能不能信”。1. 后仿结果对不上前仿寄生提取为什么是模拟IC的必修课1.1 你看到的前仿结果里其实少了一整块电路先说一个很多人刚接触后仿真时容易忽略的事实前仿真的网表里互连线被默认成理想导体——电阻为零线与线之间没有电容耦合。这在原理图阶段没问题因为那时候你只关心器件本身的行为。但到了版图阶段每一条金属走线都有实实在在的方块电阻每两条相邻走线之间都有耦合电容每一条长走线对地也有寄生电容。换句话说前仿是在一条“真空”马路上测试汽车性能后仿才是把车放到早晚高峰的真实路况里。对模拟电路来说寄生不是“微小扰动”而是参与电路工作的元件。比如一个高阻抗偏置点走线上多挂0.5fF电容就可能让极点位置移动几十MHz一条反馈网络里多了几十欧姆的串联电阻环路增益和相位裕度都会变。SMIC13虽然是130nm节点但已经足够让这些寄生效应显著影响电路行为尤其是低功耗、高精度、高速接口这类设计。1.2 后仿真与PEX在SMIC13流程里的真实位置整个后仿真流程在版图通过物理验证之后开始前提条件是DRC和LVS都clean。LVS保证的是“版图画出来的电路和原理图一致”但它不关心版图的走线会额外引入多少寄生。PEX就是在这个基础上用Calibre把版图中的互连线几何信息转换成寄生R、C、CC生成一个带寄生元件的SPICE网表或Calibre view。SMIC13这类130nm工艺寄生提取的主流方法是Calibre的RC提取不需要做全波电磁仿真。通常流程是这样DRC检查通过。Calibre LVS通过确认器件和连接正确。Calibre PEX提取寄生参数生成网表和Calibre view。在Virtuoso环境下用Calibre view跑后仿真。对比前仿和后仿结果定位是哪个节点的寄生影响最大。前面两步很多人都熟真正出问题的恰恰是第3步和第4步之间——PEX跑完了Calibre view到底生成得对不对、提取的寄生参数量级是否合理没有一套系统的验证方法后仿结果自然不可信。1.3 什么电路节点最容易被寄生影响实话说寄生对每个节点都有影响但影响程度天差地别。根据我自己的经验这三类节点必须重点盯高阻节点偏置电流镜的栅极、运放输入对管的栅极这些节点上本身电流很小等效输出阻抗动辄MΩ级只要耦合或对地寄生电容有几个fF就会形成低频极点直接吃掉相位裕度。大摆幅输出节点输出驱动器充放电电流大寄生电容会直接增加负载导致压摆率下降、延迟变大。后仿延时的变化量基本就是寄生电容和输出驱动管gm之间的博弈。反馈网络节点反馈电阻周围如果有寄生R和C会改变反馈系数进而影响闭环带宽和稳定性。所以验证PEX结果的时候不要平均用力优先检查这些敏感节点。2. Calibre view的本质不是画出来的原理图是反标出来的网表视图2.1 Calibre PEX一次跑完会产生哪些产物很多初学者以为Calibre PEX跑完只是生成了一个带寄生元件的网表其实产物比这多。一次完整的PEX运行通常在输出目录里会看到几类东西PEX网表一般是SPICE格式或DSPF格式包含原始器件和寄生R、C、CC。这个网表可以直接给spectre或HSPICE读取但格式转换有时候很麻烦。RVE结果Calibre Results Viewer里面会展示每个net的寄生Ctot、Ccouple、Rtot等汇总值可以按贡献排序这是后续验证提取结果的重要入口。Calibre view数据Calibre自动生成的一套反标数据包含原始器件的符号和寄生器件的位置关系可以加载成Virtuoso里的一个cellview。中间文件比如.pex目录下的海量文件运行日志、提取报告等。PEX日志尤其重要里面藏了很多排查线索。我见过不少人只盯着那个SPICE网表文件然后手动改格式喂给spectre费时费力还容易出错。其实ADC环境里更顺手的用法是直接加载Calibre view让Virtuoso自己处理网表映射。2.2 Calibre view在Virtuoso中的生成逻辑与加载方式Calibre view不是像画原理图那样“画”出来的它的本质是反标。Calibre PEX完成后Calibre会把提取网表映射回Virtuoso的数据库原本的器件仍然用schematic里对应的symbol表示每个器件的参数W、L、m等原样带过来新增的寄生电阻、寄生电容、耦合电容则作为新的symbol挂在对应节点之间。你打开这个view看到的是一个“长了寄生物的schematic”。在SMIC13 PDK环境里PEX跑通后有三种方式加载Calibre view在Calibre Interactive的Outputs页面直接勾选生成Calibre view跑完后自动加载到Virtuoso。在CIW窗口选择菜单导入已经生成的Calibre view数据。在ADE的config view里把需要后仿的cell的view name改成calibre或者把calibre加进view list里排在schematic之前。实际操作中很多人习惯用第三种方式新建一个config view顶层或目标block选择calibre其它数字模块或外围cell继续用schematic。这样spectre在仿真时就会把这个block替换为带寄生的网表视图前仿和后仿在同一个testbench里切换对比非常方便。2.3 为什么LVS干净不等于PEX一定能成功这是我踩过很多次才记住的教训LVS clean只代表版图拓扑和原理图一致PEX要处理的信息比LVS多得多。下面几个场景LVS照样能过但PEX会出问题。cellmap缺失或映射错误PEX需要知道版图里的器件应该对应到哪个schematic symbol和model name。如果SMIC13 PDK自带的cellmap文件没配好提取出来的网表里某些管子可能变成一堆堆乱七八糟的寄生电阻或者干脆missing掉。hcell没有写层次化设计中没有把需要保留的子模块列为hcellCalibre默认把所有层次拍平少数模块里的器件和net名称会变化反标回原理图时对应关系错乱。pin文本层不一致版图里的pin text和PEX使用的层对应不上PEX就会认为顶层没有某个pin导致提取后缺少输入输出端口。这也是为什么很多人在PEX前会先用virtuoso的自动打pin功能把pin统一整理一遍。电源地net没有声明LVS不care你VDD是叫VDD还是叫POWER但PEX如果不知道哪些是电源地net会把电源网络上本应合并的寄生串成一大堆后仿真时IR drop被严重放大。所以LVS过了只能说明“连接没画错”PEX能不能工作还需要单独检查这些配置。3. SMIC13案例从PEX选项到Calibre view的完整配置3.1 环境准备rule deck、hcell、基础LVS检查SMIC13的PDK装好之后Calibre的rule deck一般在PDK的Calibre目录下后缀是.rc或者.lvs。PEX的规则文件通常和LVS是同一套deck只是运行模式不同。我的建议是先打开PDK的说明文档确认当前用的rule deck对应哪个金属层数和哪个工艺corner。SMIC13有1P6M、1P7M等不同选项拿错deck跑PEX金属电容差值可以到50%以上后仿真完全失去参考价值。然后是hcell文件。模拟设计里我通常会把有源器件比较多、希望通过层次保留的子模块列进去比如带隙基准里的核心运放、比较器里的preamp。hcell列表可以用文本文件写每行一个cell名也可以在Calibre Interactive界面里手动选择。列好之后先跑一次Calibre LVS确认LVS clean再进PEX。这一步不是浪费时间LVS过程会顺便检查hcell、cellmap这些基础配置有没有问题PEX阶段的报错会少很多。3.2 提取模式选择R、C、CC还是RCCCPEX提取模式是影响后仿真实度和运行时间的核心选项。SMIC13 PDK支持多种模式但很多新手在菜单里直接选默认值就跑跑完才发现该有的耦合电容没有、想看的IR drop也没有。提取模式提取内容适用场景C only只提取对地电容忽略互连电阻和耦合电容粗略估计负载电容、数字前期的时序估算C CC提取对地电容和线间耦合电容不提取电阻分析串扰、评估信号完整性速度快R C提取互连电阻和对地电容不提取耦合电容自加热、IR drop分析R C CC提取全部寄生R、C、耦合电容模拟电路后仿真的完整模式SMIC13常规选择模拟IC后仿真我基本只用RCCC。尤其是反馈环路、差分对输入、基准电压反馈这些对匹配和相位敏感的电路耦合电容缺失会让串扰问题和极点位置完全失真。如果担心运行时间太长可以在后续用reduction功能降规模但不要一开始就砍掉耦合电容。3.3 必须盯住的几个PEX选项除了模式下面几个选项是我每次跑SMIC13 PEX都会确认的单位设置scale / database unitSMIC13的GDS database unit通常是0.005μm或0.001μm具体要看版图导出时的设定。PEX规则文件里一般写了单位因子但如果你的GDS是从别的环境导出的单位不对提取的电容值会差几个数量级。跑完PEX后第一件事就是看寄生报告里的电容单位是fF还是pF数值量级是否合理。Power/Ground net声明在PEX选项里把VDD、VSS、AVDD、AVSS等电源地net显式声明出来。这样Calibre会把这些net作为全局电源地处理同一电源域内的寄生电阻会正确归并IR drop才是真实的。不声明的后果我在2.3里提过——每个instance的VDD上都串一个独立电阻后仿结果差到没法看。Reduction选项Calibre支持寄生网络化简比如合并串并联电阻、合并小电容。对超大规模设计来说是救命选项但对模拟电路要谨慎。过度的reduction会把高阻节点上几个fF的小电容吃掉而这些电容恰恰是决定极点位置的关键。如果设计规模不大我一般关掉reduction或只做轻度降低。3.4 生成Calibre view的操作路径在Virtuoso版图编辑器里打开Calibre Interactive按以下路径配置Rules加载SMIC13的PEX rule deck格式通常选Calibre PEX。InputsLayout选择当前cell的版图Netlist选择提取后的输出格式一般选SPICE。Outputs在输出选项里指定网表文件名勾选生成Calibre view的选项。不同版本菜单名不太一样可能是Generate Calibre View也可能在View相关tab里但逻辑一致。PEX Options选择Extract Parasitics提取模式选RCCC填好hcell和cellmap路径。点Run PEX等运行结束RVE会自动打开Calibre view数据也会生成。如果PEX完成后没有自动加载view可以在CIW窗口用菜单手动导入或者直接在当前库下拉菜单里刷新一般会出现一个叫calibre的view。生成Calibre view还有一个等价的方式直接用命令行调Calibre跑PEX把basic提取流程写在脚本里适合批量处理多个模块。calibre -gui -pex \ -design top.gds \ -rule smic13mm_1p6m_cal013_mix33.rc \ -hcell hcell.list \ -cellmap cellmap图形界面和命令行我都用过日常调试用图形界面方便批量回归用命令行更省事。实际工作流看团队习惯核心还是前面那些选项对不对。4. 拿到视图之后怎么确认提取结果可信4.1 用网表规模与RVE寄生汇总做快速体检生成Calibre view之后不要急着跑仿真先做一次“体检”。打开PEX生成的SPICE网表看一眼文件里的instance数量原始schematic里比如有50个MOS管PEX网表里应该除了这50个管子还有几百个到上千个寄生R和C这取决于版图面积和走线复杂度。如果文件里只有一个干干净净的管子列表、几乎没有寄生器件那肯定有问题——不是没提取到就是选项选错了。然后打开RVE用它的寄生汇总功能看关键net的寄生参数。RVE界面里可以按Ctot、Ccouple、Rtot排序双击某一行还能在版图上定位对应的走线。这一步的目的是建立“量级直觉”比如一个100μm长、0.2μm宽的M1走线对地电容通常在10fF量级串联电阻在几百Ω量级。看到某条net的Ctot有几十pF但版图上只是很短一截走线那就要怀疑单位或提取范围是不是搞错了。另外把顶层pin也核对一遍。Calibre view里的pin数量和名字应该和schematic完全一致。SMIC13里常见的问题是M1 pin上的text层名不一致导致PEX提取后某一个pin消失或变成浮空后仿真时输入信号根本激励不进去。4.2 反标视图的图形化核对与最小电路验证打开Calibre view图形化检查是最直观的一步。先确认原本那些模拟管子的W、L参数没有被错误放大或缩小再看新增的寄生R和C挂在哪些位置。重点检查差分对的输入net、运放输出net、偏置电流镜栅极这些敏感位置寄生电容数量级是否合理。这个环节我一直建议第一次接触PEX的人先用一个最小case练手CMOS反相器后仿真。用SMIC13画一个标准反相器N管W/L取1μm/0.13μmP管取2μm/0.13μm做好pin后跑PEX生成Calibre view再跟前仿对比。假设前仿负载只有自身栅电容反相器上升/下降延时可能在30ps量级。版图里输出走线如果比较长输出节点对地寄生电容加个20fF驱动管的等效输出电阻在kΩ量级那么额外增加的延时大约在20ps量级。这个手算值和后仿结果对比偏差在合理范围就说明PEX提取是可信的。这个方法虽然简单但能把整条流程里的每个环节都验证一遍值得做。4.3 把前仿与后仿结果逐段对比确定差异来源Calibre view看起来没问题之后再用真正的仿真对比前仿和后仿的差异来源。我的习惯是分成三步DC对比跑工作点看节点的静态电压偏了多少。如果某节点电压明显偏低可能是该net上串了意外的电阻形成分压。电源net上IR drop过大的话检查PEX里Power/Ground声明是否漏了。AC对比看主极点和次极点移动了多少。主极点被拉低的常见原因是高阻节点上多出的对地寄生电容低频出现额外零点的常见原因是反馈路径上的寄生R和C形成超前-滞后网络。瞬态对比看延迟、过冲、建立时间变化。输出节点寄生电容增大边沿变缓是正常的如果变化幅度和4.2里手算的预期差太多回头看RVE报告。这三步做完基本能定位寄生影响的主要来源。很多时候你发现后仿性能变差不是PEX错了而是版图布局本身把敏感节点画得太长、太靠边。这种时候不用怀疑提取工具要回头优化版图。5. 后仿真跑不通时的排查链路从报错到收敛5.1 missing instance 与 property 丢失的根源生成Calibre view后跑spectre第一类报错是missing instance或者某个器件参数显示为0。这通常是三个原因按概率排序cellmap没配对PEX不知道版图里这个器件的model对应schematic里的哪个符号。打开Calibre的log搜cellmap相关的warning对照PDK自带的cellmap文件看看有没有漏配置。hcell没写全子模块如果既不在hcell列表里、又没在顶层以识别器件形式出现该模块里的器件会被拍平甚至丢失。把该模块加进hcell文件重新跑一遍PEX通常能解决。schematic里的器件名称和PDK symbol不一致比如你仿真库里的device实例名和PEX生成的model名差一个后缀Calibre view反标的时候匹配不上。这种情况需要检查PDK版本和库文件版本是否一致SMIC13不同PDK版本之间偶尔会有这种小坑。5.2 衬底网络、电源地网络的处理后仿结果中出现一堆莫名其妙的floating node警告或者低频增益异常十有八九是衬底网络和电源地网络没处理好。PEX会提取衬底接触和N阱、P阱结构的寄生网络如果你的版图里没有把衬底环和guard ring连到一个明确的全局net上提取出来的就是一堆浮空bulk节点。SMIC13的典型做法是在版图里把PSUB ring统一接到VSSNW ring按需要接对应的电源域然后在PEX里把VSS声明成全局地。这样提取后所有管子的bulk都归到VSSspectre才不会有浮空node。另外模拟电路里如果有独立的模拟地AVSS和数字地DVSSPEX里要区分清楚不要随手都叫VSS。电源地网络还有一个陷阱如果你没有在PEX里明确把VDD声明成电源netCalibre会把每条VDD走线之间的电阻都串出来导致片内不同位置的VDD电位差被夸大后仿增益明显偏低。这不是工艺问题是提取配置问题。5.3 提取量级不对与瞬态不收敛的检查清单最后一种情况是PEX跑完了Calibre view也有但后仿瞬态要么不收敛、要么结果荒谬。我建议按下面这个清单逐项排查寄生量级对不对拿一条已知长度的走线手算对地电容和RVE报告对比。单位差1000倍基本就是database unit或scale设置错。浮空节点和孤立岛spectre给出floating node警告时先解决上一节说的衬底和电源地问题。瞬态不收敛后仿网表里多了大量寄生R和C等效电路时间常数跨度很大spectre默认的收敛策略容易崩。实际处理时给spectre加gmin比如1e-14、cmin比如1e-18把maxstep设到信号周期的1/100左右通常能稳下来。SMIC13后仿我常用的瞬态选项组合是reltol1e-3再给所有电源和输入信号设置合理的初始条件避免一开始就在奇异点附近迭代。波形一片噪声如果后仿结果出现了连续振荡除了电路本身的问题还要检查是不是寄生R和C形成了大回路的反馈。这种时候可以单独给某个寄生电容加探针逐个定位是哪条net触发了振荡。其实做过几次完整后仿验证你会发现大部分问题不会是“PEX工具坏了”而是配置、单位、net声明这些环节出了偏差。后仿真这件事最怕的不是结果差而是结果差却不查原因。拿到一个对不上的波形先怀疑提取配置再做手算估算最后才去动电路设计这个顺序能省掉大半的无效调试时间。这也是为什么我一直建议团队里的新人在流程跑通初期强制用CMOS反相器这种最小case把整套验证方法走一遍养成了习惯后面碰到大型模块才镇得住场。
返回列表