首页 / 资讯中心 / 文章详情

tapless std-cell的bulk处理与LVS验证:TAP cell设计、插入策略全解析

tapless std-cell的bulk处理与LVS验证:TAP cell设计、插入策略全解析 ★ FEATURED ARTICLE
1. 从一颗悬空的阱说起tapless std-cell的bulk到底难在哪如果你做过一段时间的后端物理设计或者定制版图大概率遇到过这样一种情况综合出来的网表跑完PRDRC也清了时序也收敛了结果一跑LVS满屏的软连接报错或者干脆告诉你某个std-cell的bulk端floating。这时候你去翻标准单元库发现库里给的单元压根就没有画TAP阱和衬底怎么接出去全靠你自己在顶层想办法。这就是tapless std-cell带来的经典问题。所谓tapless字面意思就是没有tap。在传统的标准单元库里很多单元本身内部就带了衬底/阱的接触tap或者库会提供专门的TAP cell也叫well tap、substrate contact让你在row里规律性地插进去把阱和衬底电位引到电源和地上。而tapless库则把这些接触全部拿掉单元只保留有源区和栅阱和衬底的电位连接完全交给设计者通过TAP cell或者别的手段去解决。这么做的好处很直接单元面积更小、密度更高、寄生更少对先进工艺下寸土寸金的面积来说非常香。但代价就是LVS验证的时候工具不知道你那些std-cell的bulk到底接没接、接得对不对。这篇文章我想把从TAP cell设计、插入策略一直到最终LVS验证通过的整条链路讲清楚。核心关键词就几个TAP cell、LVS、tapless、std-cell、bulk。适合正在做先进工艺后端、被LVS软连接折磨过的朋友也适合刚接触定制版图、想搞明白阱电位到底怎么接的新人。我会尽量把每一步背后的为什么讲透而不是只丢一堆操作命令。先说结论tapless std-cell的bulk处理本质上是三件事的配合——TAP cell本身的版图设计要正确、TAP cell的插入密度和位置要满足工艺的latch-up规则、LVS的识别和连接要能把这些隐式的bulk连接认出来。任何一环掉链子最后都会以LVS报错的形式暴露出来。2. 先搞懂原理为什么tapless单元会让LVS看不懂2.1 阱、衬底与bulk端口的物理本质要理解tapless带来的麻烦得先回到CMOS的物理结构。一个NMOS做在P型衬底或者P阱里它的body也就是bulk必须接到最低电位通常是VSS一个PMOS做在N阱里它的bulk必须接到最高电位通常是VDD。这个连接不是可选项是物理上必须存在的——否则阱和衬底之间形成的寄生二极管、寄生的双极晶体管会让电路彻底失效轻则漏电重则latch-up烧片。在版图层面这个连接是通过tap实现的在N阱里做一块高浓度的N注入接到VDD在P衬底/P阱里做一块高浓度的P注入接到VSS。这些tap点就像给阱和衬底接地线把电位牢牢钉住。问题来了在原理图schematic里一个标准单元的MOS管它的bulk端是显式连到VDD或VSS的。但在版图layout里如果这个单元是tapless的它内部根本没有那个N或P的tap也就是说版图上这个单元的bulk在物理上并没有直接连到电源网络。LVS工具做的是版图提取出的网表和原理图网表的比对当它提取版图时发现某个MOS的bulk端悬空而原理图里这个bulk是接VSS的于是报出软连接soft connect或者直接报开路。注意soft connect这个词在Calibre LVS里非常常见它指的是版图提取时两个本该连接的节点之间只存在软的、非物理直连的关系工具无法确认它们是否真的连通。tapless场景下std-cell的bulk和电源网络之间就经常是这种软连接状态。2.2 tapless库的设计取舍为什么会有库厂商愿意做tapless核心动机是面积和密度。一个带tap的标准单元tap本身要占面积而且tap和有源区之间还要满足最小间距规则这会显著撑大单元。在7nm、5nm甚至更先进的节点标准单元高度被压到很极限每一丝面积都要抠。tapless库把tap拿掉单元可以做得更紧凑row height也能进一步压缩。但库厂商也不是白拿掉就完事他们通常会在文档里明确告诉你使用本库时必须保证每个阱和衬底在规定的距离内有一个tap否则latch-up风险自负。这个规定的距离就是所谓的最大tap间距maximum tap spacing是工艺PDK里给的硬性规则通常和阱的方块电阻、注入浓度有关。所以tapless不是不用接bulk而是把接bulk的责任从库转移到了设计者身上。你必须在floorplan和place阶段就把TAP cell规划好让每个std-cell的阱和衬底都能在允许距离内找到自己的tap。2.3 LVS在tapless场景下的识别逻辑LVS工具处理bulk连接靠的是从版图里提取出的器件和节点关系。对于带tap的单元版图里N阱通过N tap连到VDD金属工具提取时能直接看到这条物理连接于是把PMOS的bulk认到VDD上。对于tapless单元版图里没有这条连接工具提取出的PMOS bulk就是一个孤立节点。这时候工具会尝试用软连接的方式去推断如果这个孤立节点在物理上被同一个阱包围而阱里别的地方有tap连到VDD那么工具可能通过阱的连通性把这个bulk也认到VDD上。但这个推断是否成功取决于几个因素阱是否连续、tap是否在同一个阱网络里、LVS的soft connect选项是否打开、以及提取规则对阱的处理方式。这就是为什么同样一个设计有时候LVS能过有时候过不了——差别可能就在于TAP cell插得够不够密、阱有没有被切断、或者LVS的选项配置不一样。3. TAP cell设计从版图到电气连接的关键细节3.1 TAP cell的版图结构长什么样一个典型的TAP cell版图上其实很简单它就是在N阱里放一块N注入并连到VDD在P衬底里放一块P注入并连到VSS。但简单不等于随便画里面有几个关键点。首先是注入的浓度和深度。TAP的N和P注入通常和std-cell里源漏的注入是同一层浓度很高目的是形成低阻的欧姆接触把阱电位牢牢钉住。如果TAP的注入浓度不够或者接触电阻太大阱电位就会在瞬态时发生漂移latch-up风险上升。其次是TAP和有源区的间距。工艺规则里会规定tap到最近的有源区也就是std-cell的源漏的最大距离这个距离直接决定了TAP cell的插入密度。间距越小tap越密面积开销越大间距越大tap越稀latch-up风险越高。设计者要在这个trade-off里找平衡。第三是TAP cell的电源连接方式。TAP cell的N要接VDDP要接VSS这两个连接通常通过单元内部的金属或者通过顶层的电源轨power rail实现。如果TAP cell本身不带金属只靠阱和衬底的注入那它必须和相邻std-cell共享电源轨才能把电位引出去。这一点在库文档里会写清楚设计者要按库的意图来用。3.2 TAP cell的电气参数与latch-up规则latch-up是CMOS电路里最经典的失效模式之一N阱里的PMOS、P衬底里的NMOS加上阱和衬底之间的寄生电阻构成了一个寄生的PNPN结构可控硅。当某个瞬态电流在寄生电阻上产生足够大的压降时这个PNPN结构就会被触发导通形成从VDD到VSS的低阻通路电流急剧增大芯片可能直接烧毁。TAP的作用就是减小这个寄生电阻。TAP越靠近有源区寄生电阻越小latch-up越难触发。工艺PDK里通常会给一个最大tap到有源区距离的规则比如某个节点下要求这个距离不超过若干微米。设计者要保证每个std-cell的有源区都在某个tap的覆盖范围内。这里有个实操中的坑很多PDK给的规则是按阱来算的也就是说同一个阱里只要有一个tap整个阱的电位就被钉住了。但实际上阱是有电阻的离tap越远的点电位漂移越大。所以严格来说应该按每个std-cell到最近tap的距离来控制而不是按每个阱有一个tap来控制。我在实际项目里见过因为TAP插得太稀仿真时latch-up测试过不了最后不得不加密TAP、牺牲面积重做的案例。3.3 自研TAP cell时的注意事项有时候项目里没有现成的TAP cell或者库给的TAP cell不符合需求比如高度不匹配、电源轨对不上就需要自己画一个。自研TAP cell有几个要点。第一高度必须和std-cell的row height一致否则插进去会破坏row的规整性导致后续布线出问题。第二电源轨的位置和宽度要和std-cell对齐这样TAP cell才能和相邻单元共享电源网络。第三注入层要和std-cell的注入层一致否则阱的连通性会出问题。第四如果TAP cell要参与LVS它的原理图符号里必须正确标注bulk连接否则LVS比对时会出岔子。我个人的经验是自研TAP cell最好直接基于库里的某个std-cell改把有源区去掉、只留tap注入和电源轨这样能最大程度保证和库的兼容性。从零开始画一个TAP cell很容易在某个细节上和库对不上后面debug的时间远超省下的那点功夫。4. TAP cell插入策略密度、位置与自动化流程4.1 插入密度的计算方法TAP cell插多密不是拍脑袋决定的而是从工艺规则反推出来的。假设PDK规定任意有源区到最近tap的距离不超过D那么TAP cell的最大间距就是2D因为两个tap之间最远的点距离是间距的一半。实际插入时还要留余量通常取1.5D到1.8D作为实际间距。举个例子如果D是10微米那么两个TAP cell之间的最大距离是20微米实际插入时间距取15到18微米比较稳妥。如果std-cell的row高度是1微米那么大约每15到18个row就要插一排TAP cell。这个计算看起来简单但实际项目里std-cell的宽度、row的排布、macro的位置都会影响需要结合floorplan具体分析。还有一个容易被忽略的点TAP cell不仅要覆盖std-cell区域还要覆盖macro周围的区域。macro比如SRAM、IP核内部通常有自己的阱和衬底连接但macro和std-cell之间的边界区域如果没有tap也可能出问题。所以TAP cell的插入策略要覆盖整个芯片的阱和衬底不能只盯着std-cell row。4.2 手动插入与自动插入的取舍小规模设计或者对面积不敏感的设计可以手动插TAP cell在floorplan阶段就把位置定好。手动插的好处是可控你知道每个TAP在哪、覆盖范围是多少坏处是费时而且容易漏。大规模设计基本都靠自动插入。主流PR工具比如Innovus、ICC2都支持自动插TAP cell你给它间距规则、TAP cell的名字、插入的row范围它就能自动铺满。自动插入的坑在于工具默认的插入策略可能和你的LVS预期不一致。比如工具可能只在std-cell row里插TAP忽略了macro边界或者工具插的TAP cell没有正确连到电源网络导致LVS时bulk还是悬空。我的做法是自动插入之后一定要做一次可视化检查把TAP cell高亮出来看看覆盖是否均匀、有没有大片空白区域、macro周围有没有覆盖。然后再跑一次LVS确认bulk连接没问题。这一步花的时间不多但能省掉后面大量的debug。4.3 插入后的电源网络连接检查TAP cell插进去只是第一步它还得真正连到电源网络才算数。TAP cell的N要接VDDP要接VSS这个连接通常通过电源轨实现。如果电源轨是连续的金属条TAP cell直接搭上去就行如果电源轨是网状的power meshTAP cell可能要通过via连到上层金属。这里有个常见的LVS报错来源TAP cell的电源轨和std-cell的电源轨没有对齐或者via没打上导致TAP cell的注入区实际上是悬空的。这种情况下LVS提取时TAP cell的bulk连接是断的std-cell的bulk自然也认不到电源上。检查方法很简单在版图工具里把TAP cell的注入层和电源金属层同时打开看看注入区上面有没有金属覆盖、有没有via连接。如果没有就要调整电源网络或者TAP cell的插入方式。5. LVS验证实战从软连接到clean的全流程5.1 LVS前的准备工作跑LVS之前有几件事必须先确认。第一网表要正确。原理图网表里每个std-cell的bulk端必须显式连到VDD或VSS不能悬空。有些库的原理图符号会把bulk隐藏起来靠全局连接global net来连这种情况下要确认global net的设置是否正确。第二LVS规则文件要配置对。Calibre LVS的规则文件里通常有关于soft connect的选项比如LVS SOFT CONNECT或者LVS RECOGNIZE SOFT CONNECTIONS。tapless场景下这个选项通常要打开让工具能通过阱的连通性推断bulk连接。但打开之后也可能引入误判所以要结合具体规则文件来调。第三版图要干净。DRC先过一遍确保没有短路、开路、间距违规。LVS和DRC是两回事但版图上的物理问题经常会在LVS里以奇怪的形式暴露出来。5.2 读懂LVS报告里的bulk相关报错LVS跑完报告里最常见的bulk相关报错有这么几类。第一类是soft connect警告。工具告诉你某个节点和另一个节点之间存在软连接可能是通过阱或者衬底推断出来的。这种警告不一定是错误但要看清楚是哪些节点、推断是否合理。如果推断出来的连接和原理图一致那就可以接受如果不一致就要查版图。第二类是floating报错。工具告诉你某个MOS的bulk端悬空没有连接到任何电源。这通常意味着TAP cell没插够、或者TAP cell没连到电源网络。解决方法是加密TAP或者检查电源连接。第三类是unmatched报错。工具告诉你版图里提取出的器件数量和原理图对不上或者某个器件的端口连接对不上。bulk连接错误有时会以这种形式出现因为bulk悬空会导致器件识别出问题。读报告的时候我习惯先看错误总数再看错误类型分布最后逐个定位。bulk相关的错误往往集中在某几个区域找到规律之后批量解决比一个个改快得多。5.3 用Calibre的调试工具定位bulk问题Calibre提供了一套调试工具比如RVEResults Viewing Environment可以把LVS报错和版图关联起来。点一个错误版图会自动跳到对应位置高亮相关节点。定位bulk问题时我通常会把版图的阱层、注入层、电源金属层都打开然后看报错位置附近的TAP覆盖情况。如果报错说某个std-cell的bulk悬空我就看这个std-cell到最近TAP cell的距离如果超过规则就说明TAP插稀了。如果距离没问题但bulk还是悬空那就看TAP cell的电源连接可能是via没打或者金属没连上。还有一种情况是阱被切断了。比如某个区域被macro或者电源条隔开阱不连续导致工具无法通过阱的连通性推断bulk连接。这种情况下要么在切断处补TAP要么调整floorplan让阱保持连续。5.4 常见问题速查表报错类型可能原因排查方法解决手段soft connect警告阱连通性推断检查阱是否连续、TAP是否在同一个阱网络补TAP或调整LVS选项floating bulkTAP未插或未连电源检查TAP到std-cell距离、TAP电源连接加密TAP、修电源连接unmatched devicebulk悬空导致器件识别错误定位报错器件、检查其bulk连接修复bulk连接后重跑阱网络断开macro或电源条切断阱检查阱层连续性补TAP或调整floorplan6. 实操心得与避坑指南6.1 我踩过的几个典型坑第一个坑是TAP cell的电源轨没对齐。有一次项目里用了自研的TAP cell高度和std-cell一致但电源轨的宽度差了0.01微米结果TAP cell插进去之后和相邻std-cell的电源轨没完全重叠via打不上LVS报了一堆floating。后来把TAP cell的电源轨改成和std-cell完全一致才解决。这个教训是自研TAP cell一定要和库里的std-cell做严格的尺寸对齐差一点都不行。第二个坑是TAP插得太稀。有个项目为了省面积把TAP间距放到了规则允许的最大值DRC过了LVS也过了但后来做latch-up测试的时候没过。原因是规则给的最大间距是理论值实际工艺波动下边缘的std-cell bulk电位漂移超标。后来把TAP间距缩到规则的80%问题解决。所以我的建议是TAP间距不要贴着规则上限走留20%以上的余量。第三个坑是LVS的soft connect选项没开。有一次换了一个新的LVS规则文件跑出来一堆bulk悬空查了半天版图没问题最后发现是新规则文件里soft connect选项默认关闭了。打开之后LVS直接clean。这个教训是换规则文件或者换工艺节点时一定要先确认LVS的关键选项配置。6.2 TAP插入的自动化脚本思路大规模设计靠手动插TAP不现实我通常会写一个脚本来自动化这个过程。思路是先读取floorplan信息确定std-cell row的范围和macro的位置然后按设定的间距在row里插入TAP cell最后检查每个TAP cell的电源连接确保连到电源网络。脚本的核心逻辑不复杂但有几个细节要注意。一是TAP cell的插入不能破坏row的规整性要保证插入后std-cell还能正常摆放。二是TAP cell的插入要考虑macro边界macro周围要加密。三是插入后要做一次覆盖检查确保没有大片区域没有TAP。如果你用的是主流PR工具工具本身通常有内置的TAP插入命令比如Innovus的addWellTap。这个命令支持指定间距、TAP cell名字、插入范围等参数。用内置命令的好处是工具会自动处理row的规整性和电源连接比手写脚本省事。但内置命令的默认策略不一定符合你的需求比如它可能不覆盖macro边界所以用完之后还是要做可视化检查。6.3 与foundry沟通的几个要点tapless库的规则很多时候是foundry定的遇到不确定的地方直接和foundry沟通比自己在网上查资料靠谱。沟通的时候要问清楚几个问题最大tap间距是按阱算还是按std-cell算macro边界的tap要求是什么LVS的soft connect选项推荐怎么配这些问题在PDK文档里可能写得比较模糊直接问能省很多时间。另外foundry通常会提供TAP cell的参考设计或者插入脚本如果能拿到直接用他们的方案最稳妥。自己从头搞一套很容易在某个细节上和foundry的预期不一致后面tapeout的时候被卡。6.4 验证通过后的复查清单LVS clean不代表万事大吉tapless设计的bulk处理还需要做几项复查。第一确认TAP cell的覆盖是均匀的没有因为自动插入的随机性导致某些区域偏稀。第二确认macro周围的TAP覆盖满足要求。第三确认电源网络的连接是完整的TAP cell的注入区都连到了电源。第四如果项目有latch-up测试要求确认TAP间距满足测试标准而不只是满足DRC。这几项复查做完tapless std-cell的bulk处理才算真正闭环。我见过太多项目LVS过了但latch-up没过最后不得不返工的案例。LVS只是最低门槛真正的可靠性要靠TAP策略来保证。7. 写在最后一点个人体会tapless std-cell的bulk处理说到底是一个责任转移的问题。库厂商把tap拿掉把责任交给了设计者设计者就必须在TAP cell设计、插入策略、LVS验证三个环节都做到位。这三个环节里任何一个偷懒最后都会以LVS报错或者可靠性问题的形式还回来。我个人在实际操作中的体会是TAP cell的插入宁可密一点不要贴着规则上限走LVS的soft connect选项要搞清楚不要盲目开或关自研TAP cell一定要和库严格对齐差一点都不行。这几点看起来是小事但每一个都对应着我踩过的坑。最后再分享一个小技巧如果你不确定TAP插得够不够可以在版图里做一个距离图把每个std-cell到最近TAP的距离用颜色标出来一眼就能看出哪里偏稀。这个图用脚本生成不难但对TAP策略的优化非常有帮助。tapless设计里可视化检查比盲目跑LVS高效得多。
阅读完成 · 觉得有帮助?
咨询建站