ARTICLE DETAIL

资讯详情

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

LEF/DEF 5.8手册:数字后端物理设计的语法与避坑指南

LEF/DEF 5.8手册:数字后端物理设计的语法与避坑指南 简介LEF/DEF 5.8语言参考手册是Cadence发布的EDA标准格式权威指南面向数字IC后端设计、版图与物理验证工程师解决芯片设计流程中工艺信息与设计数据在工具间高效传递的核心问题。无论是物理综合、布局规划还是流片前验证都离不开这两类格式的精确表达。资源为单份PDF文档约2.48MB内含LEF与DEF两种格式的完整语法定义LEF侧重工艺技术层、单元模型、间距规则与宏模型抽象DEF则覆盖模块布局、网络连接、约束设置与物理分区等设计实现细节。手册由Cadence于2017年5月发布Product Version 5.8同时展示了相较旧版的新增特性、设计规则检查与电气规则检查的约束写法适合先进工艺节点下的项目参考。已有2168人浏览学习既可作为IC设计初学者系统了解LEF/DEF格式的入门教材也能作为后端工程师日常查阅的电子版工具书。1. lefdefref-5.8.pdf 在物理设计流程里的真实位置第一次拿到 lefdefref-5.8.pdf大多数人会被这份 PDF 的厚度吓住几百页 BNF 语法像字典不像教程。但它在数字后端流程里的地位很具体LEF 和 DEF 是工具之间交换物理库和物理设计信息的文本格式5.8 是 PDK 和 EDA 工具里最常见的版本标号之一。这本手册定义了两套“普通话”没有它综合、布局布线、物理验证工具之间就容易鸡同鸭讲。如果你在做数字后端、PDK 交付或 EDA 工具对接遇到 LEF/DEF 读不进去时最先想查的应该是它。它帮你读懂MACRO、LAYER、NET这些对象怎么定义也帮你定位网表和布线的语法错误。新手可以拿它当语法字典老手能在报错行号里快速反查 BNF 规则。这篇笔记就按“是什么、怎么用、坑在哪”的顺序把这本手册吃透。2. LEF 和 DEF 各自描述什么从 5.8 目录读出的两类信息打开 lefdefref-5.8.pdf目录里一半篇幅给 LEF一半给 DEF。先分清楚这两类对象后面所有问题都好办。LEF 描述“有什么可以用”DEF 描述“这个设计具体长什么样”。很多解析报错根源就是工程师把这两层信息混在一起读。2.1 LEF工艺库的“字典”定义了可用的砖块与规则LEF 是 Library Exchange Format描述工具“可用的砖块”。它不包含任何具体设计数据只包含工艺库的抽象描述。一份 LEF 文件通常由 PDK 厂商或单元库团队生成数字后端工具读取后才知道芯片上有哪些金属层、哪些 vias、哪些标准单元以及它们的间距规则、面积规则、天线规则。常见做法是把 LEF 拆成两份Technology LEF 和 Macro LEF。前者描述工艺本身后者描述标准单元和宏单元。两份文件用同一套语法只是对象层级不同。5.8 手册里对两者都有完整 BNF 定义。下表是最常查的几个对象对象类型主要参数作用VERSION文件头5.8声明格式版本UNITS单位DATABASE MICRONS数据库最小精度LAYER层THICKNESS、WIDTH、SPACING定义金属/有源层SPACING间距SAME/NET/ADJACENT 类型规则检查MACRO单元CLASS、ORIGIN、SIZE标准单元/宏单元PIN引脚DIRECTION、USE、SHAPE信号/电源引脚几何OBS障碍物矩形坐标阻止布线的区域这些对象在 5.8 手册里都叫 statement。每个 statement 有严格的开始和结束标记例如MACRO AND2 ... END AND2。读 LEF 报错时看到unexpected token通常就是 BNF 不允许某个关键字出现在当前 statement 内。这种时候不是靠猜补符号而是翻到手册对应 statement 的定义按顺序比对。需要注意LEF 里不存逻辑功能。标准单元的逻辑功能在 liberty 文件里LEF 只关心物理外形、引脚位置和布线障碍。延迟信息大部分在 liberty 里布线后的实际延时则由 SPEF 文件在时序分析阶段反标。这一点新手容易混淆以为 LEF 里能看到 net 延迟实际上看不到。2.2 DEF设计实例的“施工图”记录单元放在哪、线怎么走DEF 是 Design Exchange Format描述一个具体设计实例的物理状态die 大小、单元行、实例摆放、网络连接、布线路径、电源环。LEF 是字典DEF 是文章。一个 DEF 文件可能对应一个 block、一个 chip 或一个 IP布局布线工具可以写出 DEF也能读回 DEF 继续做 ECO 和物理验证。DEF 的常见对象从文件头一路排到文件尾顺序基本固定。实际看文件时先扫下面的表格就能快速定位问题对象作用DIEAREAdie 的四个角坐标ROW单元行位置与方向COMPONENT实例化哪个 cellNET信号网络、连接引脚、布线路径SPECIALNET电源/地网络TRACK布线网格位置VIA通孔实例PIN设计端口不是单元 pinREGION / GROUP布局约束/分组DEF 是实例化数据。COMPONENT u1 AND2表示把 LEF 里名为 AND2 的 macro 放一个实例叫 u1。NET clk下面的CONNECT会引用 u1 的某个 pin比如u1 A。工具读 DEF 时会沿着这些引用回 LEF 里去查 macro 定义。如果 LEF 里找不到AND2或者找不到A这个 pin立刻报错。DEF 不存储时序数据。看到 DEF 里只有坐标、层名、线宽这些物理量这是正常的。布线后的 RC 延迟通常由 SPEF 文件提供STA 工具会把 SPEF 和 DEF 对照起来做反标。所以做时序分析时LEF/DEF/SPEF 三者往往同时出现但各自职责完全不同。DEF 里最值得注意的 section 是NETS。每个 net 从- ROUTED后面的路径定义开始到;结束。路径上的每个点必须落在合法网格上。工具读回 DEF 时如果发现点不在TRACKS定义的网格上会做一次自动修正修正的结果可能和原始布线不一致这也是很多 ECO 翻车的起点。2.3 5.8 版为什么“够用”现在工业界大量 PDK 的 LEF 文件头部写的就是VERSION 5.8。5.8 是个用了很多年的稳定版本EDA 工具兼容性也最成熟。意思是该定义的 layer、macro、net、roting 规则都定义得很完整又没有像后续版本那样膨胀出一堆新关键字。初次接触 LEF/DEF从 5.8 入手最合适。但“够用”不等于“可以乱写”。VERSION 5.8是一句声明文件内部必须真的遵守 5.8 的语法。有些库文件头写 5.8内部却混入了 6.0 才有的关键字工具读的时候可能只报 warning也可能直接报 error。排查方法很简单看到不认识的 statement先到 5.8 手册的 BNF 里确认不存在就说明版本标错了或者需要换更新版手册。我的经验是把 5.8 手册当成基准不要当说明书背。报错行号才是索引手册是答案。遇到一个不确定的关键字先查 BNF再决定是保留还是删除不要凭印象改文件。这个习惯能省掉很多后续的“为什么库里所有 cell 都歪了”。3. 按 5.8 手册把 LEF/DEF 读进工具最小步骤与验证清单理论清楚后下一步是让工具能把它读进去。PDF 是手册不是可执行程序所以这一章讲的是拿到 LEF/DEF 文件后按什么顺序检查才能让工具一次读通。3.1 先确认版本和单位否则后面全是玄学任何 LEF/DEF 文件第一步不是看内容而是看文件头。LEF 的前几行固定是VERSION和UNITSDEF 也一样。这里不一致后面所有坐标换算都是错的。标准检查路径是这样打开 LEF 文件前 10 行内找到VERSION 5.8 ;和UNITS DATABASE MICRONS 1000 ;。打开 DEF 文件找到VERSION 5.8 ;和UNITS DISTANCE MICRONS 1000 ;。确认两个文件里MICRONS后面的数值一致。1000 表示数据库中 1 micron 对应 1000 个整数单位也就是最小精度 1 nm。如果不一致立刻停下手里的工具操作先做换算。DATABASE MICRONS和DISTANCE MICRONS在 5.8 手册里语义不同。前者定义 LEF 内部数据库单位后者定义 DEF 输出坐标单位。二者数值一致时LEF 里的 pin 坐标和 DEF 里的 placement 坐标可以直接叠加不一致时轻则 die 尺寸不对重则天线检查、电压降分析全错。提示拿到别人给的 LEF/DEF不要只看后缀名先 grep 头部VERSION和MICRONS。版本号和单位对不上后面所有抱怨工具“玄学报错”都从这里开始。3.2 用行号反查 BNF把报错当成索引工具读 LEF/DEF 报错时通常会给文件路径和行号。很多人直接跑去看那一行然后凭经验补个分号或删个括号。这能蒙对一部分但遇到真正的语法问题必须回到 5.8 手册的 BNF 定义。操作步骤记录工具报错里的行号用sed -n 120p PDK.lef查看具体那一行。在 5.8 手册目录里找报错关键字所在的 statement。例如报错里出现PIN就去查MACRO / PIN这一节。对照 BNF 检查该行是否符合顺序关键字、参数、分号是否缺了END。如果关键字在手册里完全不存在多半是文件版本标错或者工具自己改了语法。下面是几个常见报错和排查方向报错关键词常见原因排查位置unexpected token多余符号或关键字顺序不对对应 statement 的 BNFundeclared layerDEF 引用了 LEF 未定义的层两侧层列表交叉比对invalid pin directionPIN 方向写错或缺少MACRO/PIN sectionmissing end statementmacro/net 未闭合检查 END 关键字从报错反查手册看起来慢实际上是最快路径。因为 LEF/DEF 的解析器很死板它不管文件中英文注释多好只认 BNF 顺序。你按 BNF 改一次就能过。3.3 DEF 与 LEF 联调的最小检查清单单一文件能读通不代表两个文件能配合。DEF 引用 LEF 里的很多定义引用一旦断裂工具就会在某个隐藏处翻车。我每次换库或换设计时都会按下面的清单跑一遍文件头版本和UNITS一致。DEF 里每个COMPONENT引用的 cell 名都能在 LEF 里找到对应MACRO。DEF 里每个ROUTED路径出现的层名都能在 LEF 里找到LAYER。COMPONENT的 cell 名大小写与 LEF 中完全一致包括引号。NET中CONNECT的 pin 名在对应 macro 的PIN列表里真实存在。ROUTED坐标值都是整数并且落在TRACKS或MANUFACTURINGGRID的整数倍上。第 4 条最容易被忽略。LEF 里写MACRO AND2DEF 里写COMPONENT u1 and2很多解析器会报cell not found但不会提示大小写。直接告诉你找不到。第 6 条则决定了 ECO 时布线器会不会暗中重布你不想动的线。这两条检查加起来能挡住很大一部分“工具不听话”的问题。4. 照着 5.8 写 LEF/DEF 最容易踩的 5 个坑现象、原因、解决这一章是血泪经验汇总。LEF/DEF 语法本身不复杂但单位、大小写、坐标网格这些细节每个都能让人排查一整天。下面 5 个坑是我在项目对接中被反复折磨过的按出现频率排。4.1 单位不一致导致 die 尺寸差 10 倍或 2000 倍现象DEF 读进布局工具后DIEAREA 比预期大 2000 倍cell 分布完全错位DRC 报出一堆离谱间距。原因LEF 头部DATABASE MICRONS 1000表示内部坐标以纳米为单位DEF 头部如果写DISTANCE MICRONS 2000则 DEF 里每个坐标单位对应 0.5 nm。工具自动换算时如果没乘对系数所有坐标数值在视觉上被放大或缩小。5.8 手册中UNITS的两种写法分开定义目的就是提醒你要注意这个乘数。解决写 LEF/DEF 时统一用MICRONS 1000。读入前先输出两个文件头用脚本比较数值。如果必须用不同精度先按DATABASE MICRONS / DISTANCE MICRONS的比例关系换算好所有坐标再写 DEF。不要指望工具帮你做。4.2 层名大小写和引号导致“隐形的另一层”现象LEF 里明明定义了M1DEF 里写m1工具不报layer undefined而是额外多出一层DRC 跑出来全是陌生层名。原因5.8 语法中标识符大小写敏感。M1和m1是两个完全不同的字符串。有些 DEF 导出工具还会给层名加引号比如M1引号本身也是标识符的一部分比较时不会自动忽略。解决从 LEF 层列表里复制层名不要手敲。跨工具传递时关闭“自动转大写”选项。检查时用grep -n M1和grep -n M1分别确认是否存在两种写法统一成一种。4.3 FOREIGN 原点偏移导致 macro 落地不在预期坐标现象同一个 macro在 DEF 里的坐标是(100, 200)但版图上看到的 cell 原点在(0, 0)整个单元内容漂移。原因Macro LEF 里FOREIGN字段定义了一个相对原点坐标。5.8 手册中FOREIGN是 macro 名称加原点坐标布局工具放置 macro 时会把FOREIGN的坐标叠加到 DEF 的 placement 坐标上。如果FOREIGN不为零视觉上你会看到 cell 几何整体偏移。解决查看 macro LEF 中FOREIGN的定义。最稳妥的做法是在单元库交付时把FOREIGN全部归零让 macro 的ORIGIN和版图原点一致。如果库文件已经带FOREIGN就要在 DEF 的COMPONENT坐标里做补偿或者写脚本统一修正。4.4 ANTENNA 面积单位不一致天线检查像“玄学”现象天线效应检查报出的面积数量级离谱要么全部乘 1000要么差 1e6规则明明是按 PDK 文档抄的。原因LEF 中ANTENNAGATEAREA的单位通常是平方微米有些工具内部换算成平方纳米换算系数随UNITS DATABASE MICRONS变化。5.8 手册对ANTENNA数量有定义但不同工具导出时可能额外施加了 scale factor。解决确认 PDK 提供的 LEF 文件里ANTENNAGATEAREA后面的数字和检查环境里设定的面积 scale 一致。把同一组天线规则用两份不同来源的 LEF 做交叉对比看面积阈值是否在同一数量级。数量级对不上时先怀疑单位不要怀疑面积值。4.5 ROUTED 坐标不在 TRACK 网格上ECO 布线时“全自动重绕”现象DEF 读回后没报错但跑 ECO 时本来只想改一根线结果周边网络全被重布时序和 IR 结果全部变化。原因DEF 中ROUTED路径的点没有落在TRACKS定义的网格上。工具启动布线器时发现网格对不上自动做了纠正把原始线全部按新网格重走了一遍。解决在 DEF 头部检查TRACKS定义确认和金属层 pitch 一致。对ROUTED路径里的每个坐标做取模确认是TRACKS间距的整数倍。若不是写脚本四舍五入到合法网格但在舍入前先查MANUFACTURINGGRID保证舍入后的坐标不违反可制造规则。这样既能保留原始布线意图又不会让 ECO 变成全芯片重绕。5. 把 5.8 的 BNF 变成可重复的检查grep/awk 与手工核对不需要一上来就写复杂 parser。5.8 手册的 BNF 是文本规则用 grep、awk、sed 组合就能完成大量有效检查。这些命令不挑平台Linux 和 macOS 都自带适合在签入前快速自检。5.1 用 grep 数对象数量先确认“数量级”最基础的自检是统计 LEF/DEF 里关键对象的数量。比如数一份 LEF 有多少 macrogrep -c ^MACRO PDK.lef^MACRO匹配行首的MACRO-c输出计数。加^是为了避免匹配到MACRO_CLASS这类子语句。输出 0 时先怀疑文件编码、行尾 CRLF 或大小写问题不要急着怀疑库。类似地统计 DEF 里的组件数和网络数grep -c ^COMPONENT chip.def grep -c ^NET chip.def注意 DEF 中- NET才是 nets section 里的条目^NET不匹配。实际统计用grep -c ^NETS数 section 头再用grep -c ^- NET数条目。这里语法差别要按具体文件格式调整5.8 手册里也对NETS的缩进风格有示例。5.2 提取层列表与 DEF 引用交叉核对层名匹配问题靠肉眼找不现实。先从 LEF 提取所有层名grep ^LAYER PDK.lef | sed s/LAYER *// | awk {print $1} | sort -u lef_layers.txt再从 DEF 的ROUTED路径里提取实际用到的层名。不同工具写 DEF 的风格不同常见的是NEW M3或LAYER M3。先看两条路径再定命令通常会写成grep NEW M chip.def | awk {print $2} | sort -u def_layers.txt然后对比两个文件comm -23 def_layers.txt lef_layers.txt输出的行就是“DEF 里出现了但 LEF 没有定义”的层名。这个清单能让所有layer not defined报错在跑工具之前就暴露出来。5.3 用 sed 提取一个 macro 的完整定义核对必填项当某个 macro 解析失败需要看它的完整结构。用 sed 提取从MACRO到END的区间sed -n /^MACRO AND2/,/^END AND2/p PDK.lef这段命令的意思是从匹配到MACRO AND2的行开始打印直到匹配到END AND2的行停止。输出后检查CLASS、ORIGIN、SIZE是否存在以及至少有一个PIN或明确是空 macro。如果抓到的内容里没有END AND2说明文件截断或结束名写错。注意 sed 地址范围遇到同名嵌套时会截断比如 macro 里定义了同名的 obs cell概率极低。实际项目中macro 不会嵌套同名 macro所以这个命令是安全的。5.4 手工 BNF 状态机可选、必填、重复5.8 手册的 BNF 看起来吓人但核心符号只有几个。把它们当状态机看读 LEF/DEF 会比想象中容易BNF 标记含义常见例子statementName新 statement 开始MACRO、NETsubStatement子语句CLASS、ORIGIN...可重复 0 到多次PIN、OBS?可省略FOREIGN 可选;statement 结束所有 statement手工核对时按顺序检查必填项。比如MACRO必须有CLASS、ORIGIN、SIZE然后是一个或多个PIN。CLASS在ORIGIN之前ORIGIN在SIZE之前这个顺序在 BNF 里写死了缺一个或顺序颠倒都会报错。把这个状态机记在脑子里以后看任何 LEF/DEF 版本都能通用不只是 5.8。6. 用 lefdefref-5.8.pdf 做坐标与单位的“体检”我的两个验证习惯做后端这些年我最怕的不是时序收敛不了而是 DEF 坐标看起来对实际在纳米和微米单位之间差了一个小数点。有一次做电源网络检查ROUTED坐标里出现了 0.001 精度的小数而 LEF 的MANUFACTURINGGRID是 0.002工具按自己的网格取整后P/G 网格和相邻 metal 的间距悄悄变了IR drop 仿真结果整体偏移。最后翻回 lefdefref-5.8.pdf 里MANUFACTURINGGRID的定义才发现是舍入问题。这件事让我养成了两个习惯。第一个习惯拿到任何 LEF/DEF先做一次“UNITS 体检”用grep -n VERSION\|MICRONS把版本和单位输出到终端确认两个文件头对齐。第二个习惯工具报错时永远先在 5.8 手册里查 BNF 再改文件不靠记忆补符号。这两个习惯救过我很多次也让我在评审别人导出的 DEF 时能快速定位问题。希望帮到你。本文还有配套的精品资源点击获取
返回列表