ARTICLE DETAIL

资讯详情

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

Calibre提参实战:hcell/xcell配置与DSPF输出优化指南

Calibre提参实战:hcell/xcell配置与DSPF输出优化指南 1. 从一次LVS报错说起为什么Calibre提参值得单独拿出来聊如果你做过模拟版图或者混合信号芯片的物理验证大概率经历过这样的场景LVS跑过了DRC也干净了但后仿真的结果和原理图仿真对不上或者PEX提取出来的网表里出现了莫名其妙的短接、悬空节点、器件参数丢失。排查半天最后发现是提参环节出了问题——要么是hcell/xcell没配对要么是DSPF文件里的寄生耦合被忽略要么是某些器件的识别规则没覆盖到。Calibre作为业界用得最广的物理验证工具链它的提参流程通常指Calibre xRC或者Calibre PEX看起来只是跑一个rule file的事但真正用起来坑远比想象中多。我见过不少工程师LVS玩得很溜一到提参就开始凭感觉调参数出了问题就反复重跑效率极低。这篇文章就是想把Calibre提参里那些文档不会明说、但实际项目中一定会遇到的技巧和问题梳理一遍适合已经能跑通基本流程、但想进一步提升提参质量和效率的版图工程师、CAD工程师和电路设计者。关键词里提到的Calibre、提参、hcell、xcell、DSPF基本覆盖了提参流程的核心要素。我会围绕这几个点展开重点讲清楚hcell和xcell到底怎么配、DSPF输出里哪些选项真正影响后仿精度、常见报错的排查链路是什么、以及一些我踩过坑之后总结出来的实操习惯。2. hcell与xcell提参流程里最容易被低估的两个配置2.1 hcell和xcell的本质区别以及为什么很多人会搞混先说一个基本事实Calibre提参的输入是版图网表从GDS抽取出来的和原理图网表从电路图导出的工具需要把这两者对应起来。hcell和xcell就是做这个对应关系的但它们的角色完全不同。hcellhierarchy cell的作用是告诉Calibre哪些cell在提参时应该被当作黑盒或者保留层次来处理。换句话说hcell列表里的cellCalibre不会去展开它内部的器件而是把它当作一个整体只提取它的端口寄生。这在混合信号设计里非常常见——比如你有一个大的数字模块你不想让提参工具去提取它内部每一根net的寄生因为那会生成一个巨大的网表后仿根本跑不动。这时候你就把这个数字模块放进hcell列表Calibre会在提参时把它当成一个黑盒只保留端口连接。xcellexclude cell的作用则是告诉Calibre哪些cell在提参时应该被完全排除掉不提取任何寄生。这通常用于那些你确定不需要提寄生的单元比如一些dummy cell、decap cell、或者某些已经验证过不需要后仿的模拟模块。很多人搞混这两个是因为它们都涉及不提取内部寄生这个概念。但区别很明确hcell是保留但简化xcell是直接排除。hcell处理后的cell在网表里还在只是内部被简化了xcell处理后的cell在网表里可能直接消失了。我个人的经验是hcell用于那些需要保留端口连接但不需要内部寄生的模块xcell用于那些连端口连接都不需要的单元。举个例子如果你有一个PLL模块你希望后仿时它作为一个整体参与仿真但不需要它内部的寄生那就用hcell。如果你有一排decap cell它们只是用来做电源滤波的后仿时完全不需要它们那就用xcell。2.2 hcell配置的实操细节从cell名匹配到层次路径配置hcell的时候最常见的坑是cell名匹配不上。Calibre在匹配hcell时默认是按cell名来匹配的但实际项目中版图里的cell名和原理图里的cell名经常不一致。比如原理图里叫PLL_TOP版图里可能叫pll_top_layout大小写和命名习惯都可能不同。这时候你有两个选择一是用Calibre的-hcell选项指定一个hcell文件文件里可以写明确的映射关系二是在rule file里用HCELL语句来定义。我一般推荐用独立的hcell文件因为这样修改起来方便不需要动rule file。hcell文件的格式很简单每行一个cell名或者用layout_cell schematic_cell的格式来指定映射。比如PLL_TOP PLL_TOP pll_top_layout PLL_TOP第一行是同名匹配第二行是不同名匹配。注意这里的cell名是大小写敏感的Calibre默认区分大小写。如果你不确定版图里的实际cell名可以用calibre -lvs -hier先跑一遍层次化的LVS看看工具识别出来的cell名是什么。还有一个细节hcell的匹配是分层次的。如果你在hcell文件里写了PLL_TOP那么所有层次下的PLL_TOP都会被匹配到。但如果你只想匹配顶层下的那个PLL_TOP就需要写完整的层次路径比如TOP/PLL_TOP。这个在大型设计里很重要因为不同层次下可能有同名的cell。2.3 xcell的使用场景与常见误用xcell的配置比hcell简单但误用的情况更多。我见过最常见的误用是把一些其实需要提寄生的cell放进了xcell列表导致后仿结果偏乐观。比如有些工程师觉得某个模拟模块应该没什么寄生就把它放进xcell。但实际上这个模块内部的net可能很长寄生电阻电容对性能影响很大。后仿时这些寄生被忽略了仿真结果自然和实测对不上。我的建议是xcell只用于那些你确定不需要提寄生的单元。什么是确定比如dummy cell没有电气功能、decap cell只做电源滤波且你已经在电源网络上单独提了寄生、fill cell纯填充。除此之外任何有信号连接的cell都应该用hcell而不是xcell。另外xcell列表里的cellCalibre在提参时会直接跳过不提取任何寄生也不保留端口连接。这意味着如果这个cell的输出net连接到了其他模块那个net在提参网表里可能会变成悬空。所以用xcell之前一定要确认这个cell的端口net不会影响其他模块的提参结果。2.4 一个真实的hcell/xcell配置案例我之前做过一个混合信号项目里面有一个大的数字控制模块和一个模拟前端。数字模块大概有几十万门模拟前端有几百个器件。如果全芯片提参网表会大到后仿根本跑不动。我的配置是这样的hcell列表数字控制模块DIG_CTRL、PLL模块PLL_TOP、ADC模块ADC_TOPxcell列表所有decap cellDECAP_、所有fill cellFILL_、所有dummy cellDUMMY_*这样配置之后提参网表的大小从原来的几个GB降到了几百MB后仿时间从几天降到了几个小时。而且因为数字模块和PLL、ADC都保留了端口连接后仿时它们仍然作为整体参与仿真只是内部寄生被简化了。这里有一个关键点hcell列表里的模块Calibre仍然会提取它们的端口寄生。也就是说模块的输入输出端口上的net寄生是保留的。这对于后仿精度很重要因为端口上的寄生往往对信号完整性影响最大。3. DSPF输出选项哪些参数真正影响后仿精度3.1 DSPF文件的基本结构和你需要关注的字段DSPFDetailed Standard Parasitic Format是Calibre提参后输出的寄生网表格式也是后仿工具如Spectre、HSPICE最常读取的格式。DSPF文件里包含了net的寄生电阻、电容、耦合电容等信息。一个典型的DSPF文件开头会有一些头信息然后是按net组织的寄生描述。你需要关注的字段主要有*|NET定义一个net*|P定义一个端口*|I定义一个实例器件R电阻C电容CC耦合电容比如*|NET net1 0.001pF *|P (in1 0 0) R1 in1 net1_mid 10 C1 net1_mid 0 0.0005pF CC1 net1_mid net2_mid 0.0002pF这段描述的意思是net1有一个端口in1从in1到net1_mid有一个10欧姆的电阻net1_mid到地有一个0.0005pF的电容net1_mid和net2_mid之间有一个0.0002pF的耦合电容。后仿精度主要受这几个因素影响电阻的提取精度、电容的提取精度、耦合电容是否包含、以及net的简化程度。3.2 耦合电容提不提差别有多大耦合电容CC是DSPF里最容易被忽略的部分也是影响后仿精度最大的因素之一。很多工程师为了减小网表体积会在提参时选择不提取耦合电容或者只提取超过某个阈值的耦合电容。我的经验是耦合电容一定要提而且阈值不要设得太高。原因很简单在先进工艺下线间耦合电容已经占到了总电容的很大比例有时候甚至超过了对地电容。如果你不提耦合电容后仿时串扰、延迟、信号完整性都会严重偏离实际。Calibre提参时控制耦合电容的选项通常是PEX_EXTRACT_COUPLING或者类似的开关。具体名称取决于你用的rule file版本。一般来说这个选项有三个值0不提耦合电容、1提所有耦合电容、2只提超过阈值的耦合电容。我一般用1也就是提所有耦合电容。如果网表太大我会用2但阈值设得很低比如0.0001pF。这样既能控制网表体积又不会漏掉重要的耦合。还有一个细节耦合电容的提取是分层次的。如果你用了hcellhcell内部的耦合电容不会被提取但hcell端口之间的耦合电容会被提取。这个在配置hcell时要注意确保端口之间的耦合不会被漏掉。3.3 电阻提取的精度控制什么时候需要提什么时候可以忽略电阻提取是另一个影响后仿精度的关键因素。在先进工艺下线电阻已经不可忽略尤其是电源线和长信号线。但提电阻会显著增加网表体积和仿真时间。Calibre提参时控制电阻提取的选项通常是PEX_EXTRACT_RES或者类似的开关。一般来说这个选项有三个值0不提电阻、1提所有电阻、2只提超过阈值的电阻。我的建议是对于信号线如果线长超过一定阈值比如10微米提电阻否则可以不提。对于电源线一定要提电阻因为电源线上的IR drop对性能影响很大。对于时钟线一定要提电阻因为时钟线的延迟和偏斜对时序影响很大。具体阈值取决于你的工艺和设计。在28nm及以下工艺我一般会把信号线的电阻提取阈值设得很低比如1欧姆。在65nm及以上工艺可以适当放宽。还有一个技巧Calibre支持按net类型来分别控制电阻提取。比如你可以设置信号线提电阻、电源线提电阻、但地线不提电阻。这个在rule file里可以通过PEX_EXTRACT_RES_NET之类的选项来配置。3.4 DSPF输出格式的选择SPF、DSPF、SPEF的区别Calibre支持多种寄生网表输出格式常见的有SPF、DSPF、SPEF。它们的主要区别是格式全称特点适用场景SPFStandard Parasitic Format较早的格式支持基本的R/C/CC老版本仿真工具DSPFDetailed SPF支持更详细的寄生描述包括层次信息大多数后仿工具SPEFStandard Parasitic Exchange Format支持更丰富的寄生信息包括温度、工艺角先进工艺、多工艺角仿真我一般用DSPF因为它的兼容性最好大多数后仿工具都支持。如果你需要多工艺角仿真或者需要更详细的寄生信息可以用SPEF。SPF现在用得比较少了除非你的仿真工具只支持SPF。输出格式的选择在Calibre里通常是通过PEX_OUTPUT_FORMAT或者类似的选项来控制的。具体名称取决于rule file版本。4. 提参常见报错与排查链路4.1 Cell not found类报错从cell名匹配到层次路径的完整排查Cell not found是提参时最常见的报错之一。它的本质是Calibre在匹配版图网表和原理图网表时找不到对应的cell。排查这个报错我一般按以下链路走第一步确认版图网表和原理图网表是否都正确生成。有时候报错不是因为匹配问题而是因为其中一个网表根本没生成成功。检查LVS的log文件确认版图网表和原理图网表都正常输出。第二步确认cell名是否一致。用calibre -lvs -hier跑一遍层次化LVS看看工具识别出来的cell名是什么。然后对比版图网表和原理图网表里的cell名看是否有大小写、命名习惯的差异。第三步确认层次路径是否正确。如果cell名一致但报错仍然存在可能是层次路径的问题。比如版图里的cell在TOP/A/B下原理图里的cell在TOP/A/C下Calibre就匹配不上。这时候需要在hcell文件里写完整的层次路径。第四步确认hcell/xcell列表是否配置正确。有时候报错是因为hcell列表里写了某个cell但这个cell在版图里不存在或者名字写错了。检查hcell文件里的每一行确认cell名和层次路径都正确。第五步确认rule file里的匹配规则。有些rule file里会定义cell名的匹配规则比如是否区分大小写、是否忽略某些前缀后缀。检查rule file里的相关设置确认和你的实际cell名一致。这个排查链路我用了很多次基本上能覆盖90%以上的Cell not found报错。4.2 Net short类报错提参网表里的短接问题定位Net short是另一个常见报错通常出现在提参网表生成之后后仿工具读取网表时发现某些net被短接了。这个报错的根源往往在提参阶段而不是后仿阶段。排查这个报错我一般这样做第一步确认短接的net是哪些。后仿工具的报错信息里通常会指出哪些net被短接了。记下这些net的名字。第二步在DSPF文件里搜索这些net。看看它们在DSPF文件里是怎么描述的。如果两个net之间有电阻为0或者电容为无穷大的描述那就是短接点。第三步回溯到版图。在版图里找到这些net看看它们之间是否有实际的连接。有时候短接是因为版图里确实有连接但原理图里没有导致LVS报错但提参时仍然按版图提取。第四步检查hcell/xcell配置。如果短接的net在hcell或xcell模块内部可能是hcell/xcell配置导致的。比如hcell模块的端口在提参时被简化了导致两个原本不连接的net被短接。第五步检查rule file里的短接检查规则。有些rule file里会定义短接检查的阈值比如电阻小于某个值就认为是短接。检查这个阈值是否合理。我遇到过一次典型的Net short报错最后发现是因为hcell模块的端口在提参时被简化了导致模块内部的两个net在提参网表里被短接。解决办法是在hcell文件里把这两个net对应的端口都列出来确保它们不会被简化掉。4.3 Device not recognized类报错器件识别规则的覆盖问题Device not recognized报错通常出现在提参工具无法识别某些器件的时候。这个报错的根源往往是rule file里的器件识别规则没有覆盖到所有器件类型。排查这个报错我一般这样做第一步确认报错涉及的器件类型。报错信息里通常会指出哪些器件没有被识别。记下这些器件的类型和名称。第二步检查rule file里的器件识别规则。看看rule file里是否定义了这些器件的识别规则。如果没有需要添加。第三步确认器件的版图层次。有时候器件没有被识别是因为它在一个没有被展开的层次里。比如器件在一个hcell模块内部但hcell配置导致这个模块没有被展开器件自然不会被识别。第四步检查器件的参数。有些器件识别规则会检查器件的参数比如W/L值、M值等。如果参数不满足规则器件就不会被识别。检查报错器件的参数确认是否满足规则。第五步更新rule file。如果确认是rule file的问题需要联系CAD工程师或者foundry更新rule file。在更新之前可以临时在rule file里添加手动识别规则确保提参能继续。这个报错在先进工艺下比较常见因为先进工艺的器件类型更多rule file的覆盖难度更大。我的经验是每次换工艺或者换rule file版本都要先跑一遍全芯片提参看看有没有Device not recognized报错。如果有尽早解决不要等到后仿阶段才发现。4.4 提参网表过大导致后仿跑不动从hcell配置到输出选项的优化提参网表过大是另一个常见问题尤其是在大型混合信号设计里。网表过大会导致后仿时间过长甚至跑不动。优化网表体积我一般从以下几个方面入手第一合理配置hcell。把不需要提内部寄生的模块放进hcell列表可以显著减小网表体积。我之前的项目里把数字模块放进hcell后网表体积减小了80%以上。第二合理配置xcell。把不需要提寄生的单元放进xcell列表可以进一步减小网表体积。但要注意不要误用确保这些单元确实不需要提寄生。第三调整耦合电容提取阈值。如果网表仍然太大可以适当提高耦合电容的提取阈值只提取超过阈值的耦合电容。但阈值不要设得太高否则会影响后仿精度。第四调整电阻提取阈值。类似地可以适当提高电阻的提取阈值只提取超过阈值的电阻。但电源线和时钟线的电阻一定要提。第五使用层次化提参。Calibre支持层次化提参也就是只提顶层和关键模块的寄生其他模块用简化模型代替。这个在大型设计里非常有用可以显著减小网表体积。第六选择合适的输出格式。DSPF和SPEF的体积通常比SPF小因为它们的描述更紧凑。如果后仿工具支持尽量用DSPF或SPEF。我一般会先跑一遍全芯片提参看看网表体积有多大。如果太大再逐步调整hcell/xcell配置和输出选项直到网表体积在可接受范围内。5. 提参质量的自检清单与实操习惯5.1 提参前必须确认的几件事提参之前我一般会确认以下几件事避免跑了一半才发现问题LVS是否干净通过。提参的前提是LVS通过如果LVS有报错提参结果肯定不可靠。hcell/xcell列表是否最新。设计迭代后cell名和层次结构可能变化hcell/xcell列表需要同步更新。rule file版本是否正确。不同工艺、不同版本的rule file提参选项和器件识别规则可能不同。确认用的是正确的rule file。输出目录是否有足够空间。提参网表可能很大确认输出目录有足够空间避免跑了一半因为空间不足而失败。仿真工具是否支持输出格式。确认后仿工具支持你选择的输出格式避免提参完成后发现工具读不了。这几件事看起来简单但实际项目中经常因为忽略其中某一项而导致提参失败或者结果不可靠。5.2 提参后的快速验证方法提参完成后我一般会做几个快速验证确认提参结果基本可靠第一检查DSPF文件的大小和net数量。如果net数量明显少于预期可能是hcell/xcell配置过度导致很多net被简化掉了。如果net数量明显多于预期可能是hcell/xcell配置不足导致很多不需要提寄生的net被提了。第二检查关键net的寄生。挑几个关键net比如时钟线、电源线、关键信号线在DSPF文件里看看它们的寄生电阻电容是否合理。如果寄生值为0或者异常大可能是提参选项配置有问题。第三跑一个简单的后仿。用提参网表跑一个简单的后仿比如DC仿真或者瞬态仿真看看结果是否合理。如果后仿结果和原理图仿真差异很大可能是提参有问题。第四对比不同提参选项的结果。如果时间允许可以用不同的提参选项各跑一遍对比结果。比如提耦合电容和不提耦合电容的结果对比提电阻和不提电阻的结果对比。这样可以帮助你理解提参选项对后仿精度的影响。这几个验证方法我每次提参后都会做基本上能在后仿之前发现大部分问题。5.3 我踩过的几个坑和对应的解决方案坑一hcell列表里写了顶层cell名导致整个设计被当成黑盒。有一次我在hcell文件里写了顶层cell名结果Calibre把整个设计当成一个黑盒只提取了顶层端口寄生内部所有net的寄生都被忽略了。后仿结果和原理图仿真几乎一样完全没有寄生效应。解决办法是hcell列表里只写需要简化的子模块不要写顶层cell名。坑二xcell列表里写了有信号连接的cell导致后仿结果偏乐观。有一次我把一个模拟模块放进了xcell列表结果这个模块内部的net寄生被完全忽略后仿时这个模块的性能比实际好很多。解决办法是xcell只用于确定不需要提寄生的单元有信号连接的cell一律用hcell。坑三耦合电容提取阈值设得太高导致串扰被忽略。有一次为了减小网表体积我把耦合电容提取阈值设得很高结果后仿时串扰完全没体现出来。解决办法是耦合电容提取阈值不要设得太高或者干脆提所有耦合电容。坑四rule file版本不对导致器件识别错误。有一次我用了旧版本的rule file结果某些新器件没有被识别提参网表里这些器件变成了悬空。解决办法是每次换工艺或者换设计都要确认rule file版本是否正确。坑五输出目录空间不足提参跑了一半失败。有一次提参网表太大输出目录空间不足提参跑了一半就失败了。解决办法是提参前确认输出目录有足够空间或者把输出目录设在一个空间充足的位置。这几个坑我踩过之后现在每次提参前都会检查一遍基本上不会再犯同样的错误。5.4 关于Calibre版本和rule file版本的一些经验Calibre的版本和rule file的版本对提参结果影响很大。我一般会注意以下几点Calibre版本要和rule file版本匹配。不同版本的Calibre可能对rule file的语法支持不同用不匹配的版本可能导致提参失败或者结果不可靠。rule file版本要和工艺版本匹配。不同工艺版本的rule file器件识别规则和提参选项可能不同。确认用的是对应工艺版本的rule file。升级Calibre版本前要先测试。升级Calibre版本后提参结果可能会有变化。升级前先用一个小设计测试一下确认提参结果没有异常。保留旧版本的rule file。如果新版本的rule file有问题可以回退到旧版本。保留旧版本的rule file是一个好习惯。这些经验看起来琐碎但在实际项目中非常重要。我见过不少因为版本不匹配导致的提参问题排查起来非常耗时。6. 从提参到后仿一些串联起来的实操建议提参不是孤立的环节它上接LVS下接后仿。把提参和后仿串联起来看有几个实操建议第一提参选项要和后仿需求匹配。如果你只需要跑一个简单的功能验证提参选项可以简化一些如果你需要跑高精度的后仿提参选项就要更严格。不要为了省时间而牺牲后仿精度也不要为了追求精度而让后仿跑不动。第二提参网表要和后仿工具兼容。不同后仿工具对DSPF格式的支持可能不同。提参前确认后仿工具支持你选择的输出格式避免提参完成后发现工具读不了。第三提参结果要和原理图仿真对比。后仿之前先用提参网表跑一个和原理图仿真相同的测试对比结果。如果差异很大说明提参可能有问题。这个对比可以帮助你快速定位提参问题。第四提参网表要保留版本记录。每次提参的输出网表都要保留版本记录包括提参选项、hcell/xcell列表、rule file版本等信息。这样如果后仿出现问题可以回溯到具体的提参版本。第五提参流程要自动化。如果项目里需要频繁提参建议把提参流程自动化包括hcell/xcell列表生成、提参选项配置、输出格式转换等。这样可以减少人为错误提高效率。我自己在项目里一般会写一个提参脚本把常用的提参选项和hcell/xcell列表固化进去每次提参只需要改几个参数就行。这样既保证了提参的一致性又提高了效率。最后再分享一个小技巧如果你不确定某个提参选项的影响可以先用一个小设计比如一个反相器链跑一遍提参对比不同选项的结果。这样可以在不浪费时间的情况下快速理解提参选项的作用。这个习惯我用了很多年帮助我避免了很多提参配置上的错误。
返回列表