ARTICLE DETAIL

资讯详情

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

Cadence版图绘制全攻略:匹配结构、验证与高效技巧

Cadence版图绘制全攻略:匹配结构、验证与高效技巧 做模拟IC版图这么多年Cadence Virtuoso几乎是我每天离不开的工具。从最初在工艺库里对着光罩层发呆到后来能熟练处理各种匹配结构和DRC跑批中间踩过的坑确实不少。很多刚入行的工程师问我版图绘制到底有没有章法可循我的回答是有而且门槛就藏在那些看似不起眼的小操作里。这篇东西我想把Cadence Layout版图绘制的核心技巧、匹配结构的处理思路、验证环节的坑以及一些我在实际项目里总结的操作细节一次性讲透适合刚接触版图的同学也适合已经画过几个项目但想优化效率和质量的同行。很多教程喜欢从菜单一个个讲我不太推荐那么学。工具是死的思路是活的。我更习惯按项目推进的流程来梳理环境怎么准备、基础操作怎么练、匹配结构怎么画、验证怎么过、经验怎么攒。这五块走下来你会对Cadence版图绘制有一个从散点到体系的认识。1. 环境准备从安装到工艺库导入先把地基打牢1.1 版本选择和License那点事Cadence的版图工具主要是Virtuoso Layout Editor一般和Schematic Editor、ADE套件一起集成在IC系列环境里。目前还在量产项目里用得比较多的6.1.7、6.1.8以及后来基于IC 23.1的版本本质上操作逻辑差别不太大。很多人一上来就纠结装哪个版本其实更该关注的是工艺厂PDK支持哪个版本。Foundry给的PDK都有最低版本要求和推荐版本先用PDK的推荐版本来定工具版本比你自己追新版本更稳妥。我见过有人在老PDK上硬跑新版工具结果Callbacks报错、参数提取异常折腾几天最后又换回去。License这块现在很多公司用的是浮动License启动前一定要确认环境变量LM_LICENSE_FILE或者CDS_LIC_FILE指向了正确的License Server。排查故障时第一件事不是重装软件而是先看这个变量命令行里敲一下env检查省掉大量无效操作。1.2 工艺库导入PDK路径和初始化拿到PDK后一般会有一个安装脚本或者详细的安装说明。我习惯把PDK放到一个独立目录比如/pdk/并在.cshrc或.bashrc里设置PDK相关的环境变量比如CDS_LOAD_ENV、ASSURA_HOME、CALIBRE_HOME这些视你用的验证工具而定。还有一个容易被忽略的细节启动Virtuoso之前记得检查你的启动目录下有没有.cdsinit和.cdsenv文件。.cdsinit负责加载菜单、快捷键、skill脚本.cdsenv记录一些偏好设置比如显示精度、格子大小。很多时候快捷键失效、菜单缺项就是因为.cdsinit没有被正确加载。导入工艺库之后你会在Library Manager里看到PDK库、基本库比如analogLib、basic以及自己的设计库。这里建议把工作库和PDK库分开放主库只用作引用避免误操作改动PDK文件。1.3 ODBC数据源的配置逻辑顺便说一说热词里那个ODBC数据源。Cadence的ODBC配置一般用于数据库连接场景比如要把版图或仿真数据和外部管理系统对接。配置位置在操作系统层面的ODBC数据源管理器里先建一个DSN指定数据库驱动和连接信息然后在Cadence相关配置文件里填入对应的DSN名称。我实际接触到的多数项目版图环节用ODBC的时候并不多更多是设计管理系统或者IP管理平台对接时用到。如果你的环境里没有这个需求完全不用管它。如果确实需要配置注意了务必先确认数据库驱动的位数要和Cadence进程位数一致32位工具配32位驱动64位配64位这个不匹配是最常见的连不上原因没有之一。2. 核心操作体系看懂图层玩转快捷键2.1 图层体系与GDS层映射版图绘制的第一步是建立图层思维。Virtuoso显示界面上那些花花绿绿的区域不是随便上色的每一层都对应制造过程中的一次光刻或刻蚀。比如有源区层、多晶硅层、金属层、通孔层、注入层、阱层等。打开图层选择栏LSW你会看到每一层有名称、目的码Purpose、层次编号。比如金属1层绘制图层和引脚标签层是不同的目的码前者表示实体图形后者是打PIN用的文本层。这个关系一定要搞清楚否则画出来的M1走线在LVS时识别不到网络名或者PIN打不上后续验证一塌糊涂。层映射到GDS层号的逻辑一般PDK文档里有一张表。比如有源区是GDS第几层、多晶硅第几层。当你最终导出GDS给Foundry或者第三方做DRC/LVS时层号对不上会直接导致整个验证结果不可信。这种低级错误我见过不少尤其是从别的工具转数据过来的时候。2.2 基本图形绘制Rect、Path、Polygon怎么选Virtuoso里画图主要就三个命令矩形、路径、多边形。很多新手上来就全部用矩形硬拼这是不对的。实际经验是矩形Rect适合画有源区、阱区、金属方块、PAD这些边界规整的图形。路径Path适合画金属走线。它有固定的线宽还能切换拐角模式比如45度角、90度角。画走线时直接设置好线宽和层次比画一个细长矩形再复制高效得多。多边形Polygon适合画不规则的形状比如有些器件的有源区特殊形状或者天线保护的辅助图形。另一个常用命令是创建Instancei把器件或者子单元调用到当前版图。模拟版图里器件是PDK提供的参数化单元PCell通过摁F3或者Q键打开属性可以改参数比如晶体管的沟道宽度W、长度L、指数Finger数量。这里的关键是在版图里改PCell参数之前一定要先确认和原理图端一致不然画完了LVS总对不上逐项排查费时又费眼。2.3 手不离键盘常用快捷键清单熟练使用Cadence版图核心就一句话左手键盘右手鼠标眼睛看界面。我整理一套日常用最多的快捷键新手照着练就能很快提速r / p / P快速创建矩形、路径、多边形。i创建Instance。c / m / s复制、移动、拉伸每天用得最多的一组。Delete删除u撤销Shiftu重做。f全图适配显示看整体。k拉标尺测量距离CtrlD清除所有标尺。e放大两倍Shifte缩小两倍看细节很顺手。Esc取消当前命令。CtrlC中断正在跑的命令或脚本。这里要提醒一句不同版本、不同.cdsinit配置下快捷键可能会有差异。如果你按某个键没反应看一下菜单项后面标注的快捷键是什么那才是你当前环境里的真实绑定。用别人的skill脚本前也最好先看一眼有没有改bindkey。2.4 选中同一网络的几种方法热词里有“cadence怎么选中同一个网络”这个在布线检查和短接排查时非常重要。在Virtuoso版图里选中同一网络的常用方法有几种点击一段图形后按ShiftS有时可以直接选中该网络在版图上的所有可见图形。这个操作逻辑是“从当前选中的图形出发邻居搜索整个连通网络”。更保险的方法是使用菜单Edit - Search或Find在搜索面板里选择网络Net条件然后框选区域进行搜索。搜索出来的结果会高亮显示然后你可以统一操作比如删除、改属性、添加PIN。选中整个网络高亮之后配合Display里的Highlight功能可以给网络标记一个醒目的颜色做检查的时候非常有用。我自己的习惯是先确认所在图层是金属层而非引脚层再用ShiftS选中网络。如果发现选中的范围小了一大截多半是因为有断点走到了错误层次或间距太远没连上。这个时候恰恰证明网络中确实有断头值得仔细检查。3. 匹配结构的硬功夫电流镜、差分对与对称布局3.1 电流镜匹配的核心原则热词里“电流镜匹配”被我多个项目反复验证过是新人最爱出问题的地方。电流镜匹配的本质是让两个或多个晶体管的工作状态尽量一致从而保证复制电流的准确度。版图层面能影响的主要是阈值电压差、跨导差、漏源压降不一致等。匹配的第一条原则相同方向的均匀性。所有匹配管必须保持一致的取向不能一个横向一个纵向。这是硅片制造中晶体取向、应力分布各向异性决定的。第二条原则共质心布局。把需要匹配的管子拆成多个指finger围绕一个中心点对称分布让工艺偏差在空间上互相抵消。两条管子做你中有我、我中有你的交叉梳状结构interdigitized是电流镜最经典的画法。第三条原则我可能在很多教科书里都没有特意强调注意源漏共用。匹配管之间如果源漏电位相同尽量共用一个有源区减少边界效应和寄生效应的差异。举个例子14电流镜小管子最好放在大管子的中间位置或者把总宽度拆成均匀的单元1份给小管、4份给大管交叉摆放。3.2 差分对与关键器件的对称差分输入对是运放的核心它的失调电压很大程度取决于版图的对称性。除了共质心和取向一致之外还有几个细节第一匹配管周围的环境要尽量一致。两端必须加dummy管保证最外侧的管子看到的环境和内部管子一致因为刻蚀速度和局部应力在边界处会有明显变化。第二栅极连接的金属走线也要做到严格对称。很多失调问题不是管子本身不匹配而是栅极多晶硅往上打的孔位置不一致导致栅极电阻分布不对称。第三连到漏端的输出走线尽量避免跨过匹配区域或者在匹配区域上方层叠耦合过来的信号会破坏平衡。还有一点是温度梯度。功率管或者靠近发热源的匹配管最好让它们的热敏感方向垂直于热源方向或者严格沿等温线摆放。这是我做电源类项目时最深的体会很多车规芯片的温漂问题版图上的对称摆放能缓解一大半。3.3 电源线和地线怎么布不打架版图绘制里电源地的规划直接决定性能上限。我见过太多人把精力全放在匹配管上结果电源走线随意拉最后IR drop把电路精度全部毁掉。策略分几步走先确定最大电流路径把电源主干道布在高层金属因为高层金属更厚方块电阻更小。从上往下分配电流电源网格就像树状结构粗的主干负责长距离传输细分支接到具体器件。关键信号线和敏感模拟线尽量架空走或者被地线包围防止串扰。用Path画电源线时注意金属层的最大电流密度。比如某层金属1mA/um的规则你要流100mA理论上至少需要100um宽度再考虑余量实际取120-150um。不要在这里抠面积该宽的必须宽。还有就是电源线不能有尖锐的直角拐弯因为电流在尖角处拥挤会产生热点虽然IC工艺上不一定立刻Fail但电迁移寿命会下降。3.4 Dummy填充与天线效应的处理思路量产可靠性面前dummy和天线效应是躲不过去的一关。金属密度规则要求整个芯片的某层金属覆盖率达到一个范围比如30%-70%。密度太低或太高都可能在化学机械研磨时出问题。所以你在布局间隙要自动或手动插入dummy金属块、dummy多晶硅。Cadence里可以很方便地通过脚本或者PDK自带的dummy填充工具来做。新手要注意dummy块不能干扰信号走线要严格遵守PDK规定的间距否则DRC会有大量的面积违约。天线效应更隐蔽。当刻蚀过程中大面积金属像“天线”一样收集等离子体电荷然后轰击到栅氧化层很可能直接导致栅氧化层损坏或者让阈值电压漂移。解决的办法很直接不让大块金属直接覆盖在栅极多晶硅上而没有“放电路径”。常用的办法包括跳层换线jump metal用上一层层间孔把长走线断开成几段或者加天线保护二极管把电荷泄放掉。在Cadence里跑验证时天线效应一般会出现在DRC报告里看到“antenna ratio exceeded”的报错首先反向检查连接栅极的金属长度和面积再决定是跳层还是加保护。4. DRC与LVS验证把一堆Error变成能交差的版图4.1 DRC规则文件与批量处理逻辑DRC是版图进度的“质检关”。在Cadence里最常见的做法是调用Calibre或者Assura来跑。每个PDK都会提供对应的rule deck根据你用的工具匹配好版本。选中整个版图区域运行DRC命令然后把结果导回到版图界面里标红高亮。第一次跑DRC新手心态很容易崩几百上千个Error雪花一样堆在版图上。我的建议是按层次归类不要逐个看。看DRC结果列表时先排序看看是哪类Error最多是spacing问题、enclosure问题还是gate方向问题。很多时候二三十个Error是同一个根因导致的比如某段有源区整体画窄了只要把这条有源区一起加宽所有红点同时消失。修改的时候优先处理大件先修有源区边界和阱边界相关的因为这些影响器件定义再修金属间距、通孔包覆最后修密度类。修完num一次你会发现Error数往往断崖式下降。4.2 常见告警文书的实际含义热词里有一个很长的告警信息看起来像是提取或仿真阶段报的“the distance between the layout pins for port 2 is electrically large above”。这个我在做版图后仿真时遇到过类似的情况本质是某个端口port对应的引脚与之相关的电路节点在几何距离上较远导致提取的寄生R或C偏大电气上不能再视为理想短接节点。遇到这种告警不要急着忽略先定位是哪个端口。多半是顶层端口连接过长、过窄比如高速信号走了很长的细金属造成电学上的“大尺寸”效应。处理方式缩短引线、加宽走线、换低阻金属层或者在关键节点加text label重新提取寄生。尤其在射频或者高速ADC/DAC项目中这种远端引脚的寄生电感、寄生电阻会影响谐振频率或建立时间必须优化后再做后仿。4.3 LVS对比报错的排查套路LVS是版图与原理图的“对账”。它通过的标志是比对结果一致尤其是器件数量、尺寸、连接关系。常见的LVS报错主要是这几种器件不匹配版图里晶体管数量和原理图对不上。最常见原因是匹配管拆分后指数和数量没对应上LVS不认识你的拆分方式。网络短路或开路。原理图里应该连接的两个节点在版图上没有同步引入往往是金属层断点或者via缺失。参数不一致。原理图里W/L是2um/0.5um版图里PCell改成了2.5um/0.5um那肯定对不上。排查方法不能盲改。先看LVS报告里的“Error Display”高亮把报错的器件和节点同时和原理图对照然后再动手。我自己常用的一个技巧是把所有金属层和via层按照不同透明度显示把错误的位置放大一层一层往下剥很快就会看到是第几层断的。修完再跑直到结果clear。4.4 瞬态仿真不收敛和版图的关系“Cadence瞬态仿真不收敛”这个问题在仿真阶段和版图提取后阶段都有可能出现。前仿不收敛一般是模型参数、仿真步长、电路本身拓扑问题后仿不收敛则可能是提取的寄生参数引入了极端的RC值比如某条线提取出超过100pF的寄生电容造成了收敛困难。我的经验是先检查网表和模型再看是不是版图提取的寄生参数异常偏大。可以先把提取的寄生项分级降低比如只提取RC中的C或者设置提取精度为normal再仿一次看能否收敛。如果normal下收敛、high模式下不收敛那就更可以确定是某些节点的极端寄生引起的需要回去优化版图该处的走线而不是死磕仿真器设置。5. 进阶技巧与实战心得5.1 自定义快捷键和Skill脚本如果一个版图工程师的画图速度提不起来大概率是快捷键不熟或者没有针对性定制。Virtuoso支持通过修改.cdsinit绑定你常用的命令到喜欢的键位。比如我想把“吸附到网格中心”这个操作绑定成Ctrl1每次ctrl加数字一秒到位。又比如把批量打label这个操作做成一个skill脚本一键完成选中器件的端口命名。写skill脚本有一点门槛但收益可观。我最开始只是复制别人的脚本改参数后来慢慢能自己写了。一个简单的四行skill脚本可以省掉上百次手动操作。如果你懒得学skill也可以用Cadence的“宏录制”把一段重复操作录下来分配到一个热键效率也能提升一大截。5.2 层次化设计顶层和底层的协作中大型芯片的版图一定是层次化的。顶层负责PAD、电源环、IO框架和模块摆放底层就是一个个子模块的版图。用层次化设计的好处是子模块单独做DRC和LVS顶层只关注组装和整体连接出错范围被切得很小。在Cadence里顶层调用子模块用Instancei命令。一个常见问题是子模块的引脚标签pin和顶层连接没对齐导致顶层LVS报开路。我的建议是子模块的所有引脚命名规范要和原理图一致引脚位置尽量放在模块边缘并且标在已布的金属层上方便顶层直接对接。另外在顶层检查时经常用到Display - Highlight - Net往上往下查很快就能定位到是哪一级断的。5.3 我踩过的坑和给新人的建议最后说说个人经验。第一不要跳过栅格设置。很多新手画图时图省事栅格设得很小甚至关闭结果两个图形之间的间距实际上只差0.001umDRC看着是过了制造上却出问题。我一般把细栅格调整到工艺最小精度的1/2或1/4画东西时顺手吸附到栅格上干净利落。第二图层颜色显示别乱调。我自己早期为了让金属层更“好看”把所有层都改成鲜艳的颜色后来投片前做review才发现有些层对比度过高差点掩盖了一个同层交叉的问题。图层颜色要照顾可辨识度不要为了美观牺牲层次信息。第三重要模块保存前必须做一次版图快照。我这里说的不是简单的保存而是在完成一个大改动之前用一个能回退的方式比如复制成一个独立的cellview或者打一个label标记。万一改完发现走线不如以前顺畅可以快速回滚不至于手忙脚乱地重来。第四画完每个模块建议做一次“视觉自检”。把所有金属层的透明度调高只看有源区和多晶硅很多匹配和不匹配的问题就能一眼看明白这个习惯比单纯依赖DRC和LVS更早发现潜在问题。Cadence Layout版图绘制这门功夫说到底就是精度、耐心和方法论的乘积。工具的快捷键可以练DRC和LVS的对错可以跑分但那些藏在细节里的匹配结构处理和验证排查思路是Newbie和熟手之间真正的分水岭。希望这篇内容能帮你在画图这件事上少走几步弯路把更多精力留给电路本身。
返回列表