ARTICLE DETAIL

资讯详情

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

Calibre切GDS指定区域:Tapeout前GDS Review实战

Calibre切GDS指定区域:Tapeout前GDS Review实战 芯片做到后端收尾阶段最让人睡不踏实的就是 Tapeout 前那一轮 GDS Review。整颗芯片的 GDS 动辄几十 GB 甚至上百 GB用 Cadence Virtuoso 或者 KLayout 直接打开轻则卡成幻灯片重则直接崩掉更别说拿去做局部比对和跨团队传阅了。这时候最实用的一个动作就是在 Calibre 里把 GDS 中指定区域的版图单独切出来——可能是某一个 IP block、某一段电源域、foundry 反馈有问题的那一小块或者只是 sealring 附近需要确认的一圈。切出来之后文件体积能小到原来的几十分之一打开快、传输方便、审查时也不会被无关区域干扰。这篇就围绕 Tapeout 前 GDS Review 这个场景把 Calibre 里切 GDS 指定区域的几条主力路线、坐标怎么定、脚本怎么写、切完怎么验证、坑在哪一次讲透。无论你是刚接触版图验证的初学者还是干了几年的后端工程师都能直接抄作业。1. Tapeout 前为什么要做 GDS Review切区域到底解决什么问题很多人一上来就问命令怎么敲结果切了一半发现坐标写错、切出来是空的白白浪费半天。真正高效的顺序是先搞清楚这个动作在流程里处于什么位置需求是什么再选工具和参数。所以我先把背景和场景说清楚后面实操才不会跑偏。1.1 一颗完整芯片的 GDS 到底有多大直接打开有多痛先说个直观感受。一颗中等规模的 SoC顶层 GDS 包含标准单元、SRAM、模拟 IP、IO、sealring、dummy fill、各种 PAD解压后几十 GB 很常见大一点的能到几百 GB。这种文件用图形界面工具打开加载要走完整的数据库解析内存占用轻松吃掉几十 GB普通工作站直接跪。即便勉强打开缩放、图层开关、搜索 cell 都变得极慢一次 review 下来效率极低。而 Tapeout 前的 GDS Review 往往不是从头看到尾而是带着明确目标去看局部某个模块的连线是否符合预期、某个 macro 的 pin 位置有没有偏、dummy 有没有压到器件、report 里报错的那几个坐标附近长什么样。既然只看局部就没必要把整颗芯片扛在肩上。把指定区域切成一个独立的小 GDS是后端工程师最常用的减负手段。这里要强调切区域不是随手的操作它直接影响到你 review 的准确性。坐标系、细胞层次、图层都要在切之前想清楚否则切出来的东西可能看起来对、实际错位这种错误在 Tapeout 阶段代价极高。1.2 GDS Review 具体在审什么决定了你要切哪一块不同团队 review 的侧重点不一样这直接决定了切割窗口怎么定。常见的几类模块级交付检查模拟团队把某个 PLL 或 ADC 的 GDS 交给数字集成团队前双方会约定一个交界区域各自切出自己那部分做对接确认看 pin、电源、地、保护环有没有对上。Foundry 反馈定位DRC/LVS 报告里给出违规坐标后端需要切出那一小块放大看确认是设计问题还是 runset 误报然后再决定改版图还是改规则。full chip 集成确认顶层集成后检查某个 IP 周边有没有 overlap、有没有被别的模块盖住、sealring 附近的连接是否完整。跨工具/跨站点传阅GDS 太大不方便传切出关键区域再发出去对方用任何工具都能快速打开。你会发现这些场景都有一个共同点关注的是空间上的一个矩形范围而不是整颗芯片。这正是切 GDS能精准命中的需求。理解了这个你就明白为什么切割窗口的坐标精度如此重要——它直接决定了你看到的和对方拿到的是不是同一个东西。1.3 切指定区域这个动作在流程里的几个典型触发点把触发点列出来你就知道这个技能的使用频率有多高第一DRC 报错调试。大芯片跑 full chip DRC 要很久报错几百上千条。逐条调不可能常规做法是切出报错密集区先做局部 DRC 快速迭代确认改法后再跑整片。第二局部 LVS 排查。LVS 报某个 net 短路或开路往往集中在某个小区域切出来做局部 LVS 能大幅缩短迭代时间。第三Tapeout 数据打包前。交付 foundry 前内部要做一轮数据体检把关键区域切出来在多个工具里交叉验证确认 GDS 没有损坏、层次没有丢失。第四IP 硬化与复用。一个 IP 从项目 A 复用到项目 B需要把 IP 区域切成独立 GDS 做接口确认。这几个触发点里前两个是日常高频后两个是 Tapeout 前后必做。所以这套操作属于后端工程师的基本功早掌握早省心。2. Calibre 切版图的两条主力路线calibredrv 脚本 vs SVRF 规则搞清楚了需求接下来是选路线。Calibre 体系里能切 GDS的方式不止一种但真正好用、能在生产环境稳定跑的主要是两条一条走calibredrv的设计数据库操作命令另一条走 Calibre DRC 的 SVRF 规则。两条路的定位和适用场景完全不同选错会走很多弯路。2.1 路线一calibredrv 的 layout cut推荐切原始设计首选calibredrv是 Calibre 自带的设计数据库编辑器DESIGNrev它提供了一套 TCL 命令来操作版图数据库。切原始设计图形最直接的就是layout cut命令——给它一个矩形 box它把这个范围内所有图元复制出来写成一个新的 GDS。这条路线的最大优点保留原始设计信息。图元、图层、datatype、cell 层次、label 都能原样带出来切出来的东西就是缩小版的原始版图可以直接拿去做 review、做局部验证、发给别人打开。它不改变设计本身只是按空间裁剪正符合 Tapeout 前数据检查的需求。另外一个好处是它可以脚本化、批量化。一次配好 box 和文件几百个区域批量切也不在话下特别适合把整片按 block 分区输出。2.2 路线二Calibre DRC 的 LAYOUT WINDOW限定检查区域SVRF 里的LAYOUT WINDOW语句本意不是切 GDS而是限定 DRC 的检查范围。它的作用是告诉 Calibre这次只检查我指定的这个矩形窗口窗口外的图形直接忽略。配合局部运行能让 full chip DRC 从几个小时压缩到几分钟。但这条路线也能间接完成切区域的目标——当你把窗口限定后再把窗口内需要的图层用 SVRF 语句复制到输出文件就能得到只包含该区域的 GDS。不过要提醒SVRF 输出的是你显式复制的那几层默认不会把整块原始版图原样搬过去。所以它更适合我只要某几层的局部数据不适合我要一份完整的局部版图副本。2.3 两条路线怎么选一张表说清楚对比维度calibredrv 的 layout cutSVRF 的 LAYOUT WINDOW核心用途切出原始设计的局部副本限定 DRC/LVS 检查范围输出内容原始图元、层次、label 全保留需要显式复制图层默认只出结果层适合场景GDS Review、局部数据传阅、IP 切分大芯片局部 DRC 加速、定点检查是否改变设计否纯裁剪否但只处理显式指定的层脚本化难度低TCL 几行搞定中需要写完整 svrf 规则推荐度切原始版图首选限域检查首选一句话总结要一份能看的局部版图走 calibredrv要给 DRC 划定检查范围走 LAYOUT WINDOW。多数 Tapeout 前的 GDS Review 场景第一条路线用得更多。下面两章分别展开。3. 手把手实操用 calibredrv 切出指定区域版图这一章是核心我把整个流程拆成确认坐标→写脚本→跑起来→验证结果四步每一步都写出为什么这么做以及新手最容易栽的地方。3.1 动手前必须确认的三件事坐标系、单位、top cell切之前有三件事不确认后面全白干。我用亲身经历告诉大家这三步省不得。第一数据库单位database unit。GDS 头文件里有一个 dbu 定义通常是0.001 µm也就是 1nm或者0.005 µm。这个值决定了版图里坐标数字的量级。比如某条线的 x 坐标显示是 100.5 µm在 1nm 精度下对应的数据库整数就是 100500。如果你拿 µm 的数值去填工具要求的整数坐标切出来必然偏移甚至为空。第二坐标原点和你的窗口坐标怎么取。切窗口要填左右下上的四个坐标llx, lly, urx, ury。这些值从哪来最靠谱的做法是用工具把目标 block 的 bbox 读出来或者从 DRC 报错坐标、从数字后端的 floorplan 数据库里直接取。千万不要目测更不要拿顶层坐标去猜模块坐标。第三top cell 名字以及目标 cell 的层次路径。如果只想切某个子 cell 对应的区域得先确认它在层次里的完整路径和它自己的 bbox。GDS 里同名 cell 不能重复定义但引用路径可以有很多条搞错路径会切错对象。确认这三件事最直接的方式就是用 calibredrv 打开文件查一下。命令很简单calibredrv -a layout create L -file /path/to/full_chip.gds \ -a puts [layout bbox L] \ -a layout hierarchy L \ -a exitlayout bbox会打印整个文件的包围盒layout hierarchy能列出层次结构。对于目标 cell可以写layout bbox L -cell cellname看看它的范围。把这些数字记下来就是后面 cut 的输入。提示如果手头有 floorplan 的 DEF 或 Cadence 里的坐标也可以直接拿来用但一定要确认和 GDS 的 dbu、原点定义一致很多偏移问题都出在这里。3.2 最小可用 TCL 脚本几行切出一个区域坐标确认好之后脚本其实非常短。下面是一个最小可用的例子假设数据库单位为 1nm要切出 (100500, 200500) 到 (300500, 400500) 这个矩形# cut_gds.tcl # 加载整颗芯片的 GDS layout create chip -file /path/to/full_chip.gds # 切出指定区域写到新文件 layout cut chip \ -box {100500 200500 300500 400500} \ -output /path/to/cut_region.gds # 关闭并退出 layout close chip exit保存成cut_gds.tcl用批处理方式跑calibredrv -a cut_gds.tcl几秒钟到几分钟取决于区域大小和机器性能就能得到cut_region.gds。这个文件就是你要的局部版图。要注意-box的坐标顺序是左下 x、左下 y、右上 x、右上 y也就是{llx lly urx ury}。很多人第一次会写成{x1 x2 y1 y2}结果切出来是个奇怪的长条这就是顺序没记准。3.3 逐行拆解命令参数别囫囵吞枣layout cut这条命令的参数不少我只讲最关键的几个理解了它们你就能按需调整。-box {llx lly urx ury}切割矩形单位为数据库单位。这是必填项也是最容易出错的。坐标的顺序和含义要牢记。-output file输出 GDS 路径。不指定会怎样工具可能只在内存里保留结果不落盘。所以这个参数建议每次都写。-cell cellname可选指定以某个 cell 为准来输出。如果只想让切出来的文件以某个子 cell 为顶层可以加上它。不加的话输出的顶层通常是原顶层只是内容被裁了。是否保留层次layout cut默认会尽量保留层次结构不 flatten。这点对 GDS Review 很重要——你在 Virtuoso 或 KLayout 里打开时还能按层次开关看不同模块。如果工具版本或选项导致 flatten图元数量会暴增文件可能反而变大review 时也失去了层次信息。切完一定要检查一下层次是否还在。-layer之类限制图层部分版本支持只切指定层这在只要看某几层时非常有用。但语法和选项名会随版本变化写之前用help layout cut查一下当前环境的准确写法。提醒Calibre 版本更新会让部分选项名和默认行为发生变化脚本在生产环境首次使用前务必在测试文件上验证一遍不要直接跑正式数据。3.4 切完怎么验证三步确认法切出来不等于切对了。我按下面的顺序做验证能挡掉绝大多数问题。第一步看 bbox。用 calibredrv 打开切出来的文件读它的包围盒应该和你的 box 一致或被目标 cell 的 bbox 限制在 box 内。calibredrv -a layout create c -file cut_region.gds \ -a puts [layout bbox c] \ -a exit第二步看文件大小和图元数量。如果切出来的文件比预期小得离谱比如几十 KB大概率是窗口坐标错了或者图层丢了。正常情况下切出来的文件大小应该和区域内容量正相关。第三步用第二个工具交叉打开。我很推荐用 KLayout 交叉验证一遍。KLayout 轻量、加载快打开切出的 GDS 后对比几个关键位置的图形、label、层次确认和原始版图一致。跨工具验证能发现工具本身带来的格式差异。完成这三步你手上才是一份可以放心拿去 review 的局部版图。4. LAYOUT WINDOW 方案把 DRC 检查锁定在指定区域上一章解决的是切出能看的局部版图这一章解决另一半需求——让 Calibre 只在指定区域干活。Tapeout 前做局部验证时这招能省下大量机时。4.1 大芯片为什么要限域算一笔时间账假设 full chip DRC 一次要跑 6 小时报错几百条你改一处再跑一次又是 6 小时。一个晚上顶多迭代两次进度被拖得极慢。但如果把报错密集的那一小块切出来做局部 DRC区域面积可能只有全片的百分之一运行时间能从 6 小时降到几分钟。你一个晚上能迭代几十次问题很快就收敛了。这就是LAYOUT WINDOW的价值它不影响设计只是给检查划了个圈。圈外的图形被忽略圈内的照常检查。等局部验证通过再跑一次整片做最终确认即可。4.2 SVRF 里 LAYOUT WINDOW 怎么写一个最小的局部 DRC 规则框架大概长这样// local_check.svrf LAYOUT PATH /path/to/full_chip.gds LAYOUT PRIMARY TOP LAYOUT SYSTEM GDSII // 限定检查窗口坐标单位为数据库单位 LAYOUT WINDOW 100500 200500 300500 400500 // 一个最简单的示例检查宽度小于 0.1um 的某层 LAYER M1 10 0 width_m1 { WIDTH M1 0.1 } // 输出结果 DRC RESULTS DATABASE /path/to/local_results.db ASCII跑法calibre -drc -hier local_check.svrfLAYOUT WINDOW的四个数字同样是llx lly urx ury单位是数据库单位。这是最容易踩的坑——SVRF 里的坐标值它按数据库单位来解读你要是拿 µm 的浮点数填进去结果就乱套了。注意有些规则里会看到LAYOUT WINDOW和PRECISION搭配使用还有LAYOUT MAG放大倍率这类语句会影响坐标解读改规则时别只盯着 WINDOW 一行要看全局设置。4.3 用 SVRF 输出局部图层 GDS 的做法如果你确实想通过 SVRF 得到一份局部 GDS思路是限定窗口然后把需要保留的图层显式复制并输出到 GDS 文件。核心要点有三第一窗口要先定它决定了后面所有操作的可见范围。第二把需要的所有图层都用类似MASK或图层复制语句逐个列出来漏一层就少一层所以列完要对着原始 techfile 核对一遍。第三输出格式和精度要和原始 GDS 对齐避免精度丢失导致图形变形。需要强调的是这条路线的输出是你显式指定的内容不像layout cut那样原样拷贝整块设计。所以在 Tapeout 数据传阅这类要求完整、保真的场景里还是首推layout cut。SVRF 拿来限域检查、导出特定层才是最对味的用法。5. 切 GDS 常见坑与排查速查表前面讲的是怎么做对这一章讲怎么做错之后怎么救。我把这些年踩过和见过的典型问题整理出来配排查步骤能帮你快速定位。5.1 切出来是空的或者图形被截断空的成因通常有三类坐标顺序写错把{llx lly urx ury}写成别的顺序、坐标单位搞错µm 填进 nm 的坑、目标区域根本没内容比如顶层 cell 名写错实际加载到的是一个空壳顶层。排查顺序先看layout bbox确认文件正常加载且顶层的范围再确认你的 box 是否落在 bbox 内最后确认单位。绝大多数空文件都是单位或坐标顺序问题。图形被截断则通常是 box 边界没对齐到原始设计的 grid。版图里图元是按制造网格摆放的你切的边界如果落在图元中间就会切出半个图形。常规做法是把 box 的边界稍微外扩一点留出几百 nm 到 1µm 的余量确保边界上的图形完整。具体扩多少取决于区域内最靠外的图形尺寸。5.2 层次丢失与 cell 引用问题这是最隐蔽的坑之一。有些工具选项默认把切出来的内容 flatten打平结果所有层次信息消失图元数量暴涨文件可能比原来还大review 时也没法按模块开关了。规避方法切换时注意保留层次相关的选项切完用layout hierarchy检查一下层次结构是否还在。如果确实需要 flatten 后再切有些场景需要那也要明确知道这个后果。另一个相关问题是cell 引用缺失。如果切出来的局部引用了某个子 cell但那个子 cell 的定义没被带出来打开时会出现 cell not found 报错。正规的工具在 cut 时会自动把被引用到的 cell 定义一并带出但你最好在验证时确认一下有没有此类警告。5.3 精度与单位不一致导致图形变形GDS 的数据库单位是文件头里写死的。如果你切的时候工具用了不同的精度去解读或输出图形坐标会被整体缩放看起来就像整个版图被放大或缩小了。这种问题在跨工具、跨版本操作时特别容易出现。规避方法切之前记录原始 GDS 的 dbu切之后核对输出文件的 dbu确保一致。可以对比同一个图元在两个文件里的坐标值如果比值不是 1就是精度问题。5.4 常见问题速查表现象可能原因快速排查切出文件为空坐标顺序错、单位错、顶层名错读 bbox核对坐标含义和单位图形被截断box 边界落在图元中间外扩 box 几百 nm 后重切文件异常大内容被 flatten检查层次保留选项打开报 cell not found子 cell 定义未带出确认 cut 是否带出引用定义图形整体缩放输入输出精度不一致对比 dbu 与图元坐标label/text 丢失切窗口未覆盖 label 锚点检查 label 位置是否在 box 内层次路径变了以上层 cell 为准输出明确-cell参数和输出顶层这张表我建议收藏出问题时从上往下对一遍能省很多时间。6. 切完之后的 GDS Review 怎么审几个实操心得切出来只是开始真正花时间的是审。这里分享几个我在实际项目里总结的习惯能显著提高 review 的效率和准确度。6.1 先定 review checklist别漫无目的地看拿到一块局部 layout不要一上来就乱缩放。我会先列一个检查清单这一块的功能边界在哪、电源和地的连接是否完整、有没有跨模块的信号线被切断、label 是否齐全、有没有明显的 spacing 或 width 异常。带着清单看比无目标地盯着看快得多也不容易漏。对于 Tapeout 场景清单里一定要加上数据完整性项——层的数量、层次深度、label 数量和原始设计或参考数据对比确认没有在切割过程中丢东西。6.2 用符号层次视图快速定位问题在 KLayout 或 Virtuoso 里打开切出的 GDS 时我会先切到层次视图关闭无关层只留金属和器件。这样图形密度骤降肉眼就能扫出布局问题。然后再逐层打开确认层间关系。先看骨架再看细节这个顺序能让 review 效率翻倍。另外善用标注label/search功能。如果切出的区域里有 net name 或者 pin name直接用搜索定位到关心的 net比手动找快得多。6.3 版本与批量化让脚本替你做重复劳动最后说个提升效率的点。如果你一次要切很多区域比如把整片按 block 切分千万别一个个手写命令。把区域信息block 名、坐标整理成一个表写一个 TCL 循环批量切输出文件按 block 名命名。这样半小时能做的事情手工可能要一整天。同时Calibre 版本更新比较频繁某些选项的默认行为会调整。批量化脚本在新版本环境跑之前先用小文件验证一次确认输出和预期一致再批量执行。这个习惯我吃过亏——有次升级环境后默认参数变了批量切出来全带了多余的东西好在测试文件小及时发现。6.4 交付前的最后一道确认数据要发给别人之前我通常会再做一次自检:用另一个工具打开、读 bbox、核对图层数量、确认文件能干净地打开没有报错。特别是要发给 foundry 或者外部团队的时候多这一步能给双方省很多沟通成本。另外如果切出的区域涉及机密或敏感设计内容要按公司流程确认分发权限不要随手就把整块 IP 版图发出去。这个属于流程规范但确实容易被忽略。我在实际使用中最大的体会是切 GDS 这件事命令本身不难难的是切之前把坐标、单位、层次想清楚。十条坑里九条都出在这三个地方。把前面 3.1 节那三件事养成习惯去确认后面的操作几乎不会翻车。另外一个小技巧如果你手上同时有 KLayout完全可以拿它来做交叉验证它打开快、脚本也简单做比对特别顺手和 Calibre 搭配着用一套流程下来又稳又快。
返回列表