资讯动态

LEF与DEF:芯片物理设计中的工艺说明书与设计现场记录

发布时间:2026/10/27 13:30:38 来源:尧图企业网站定制
简介面向集成电路后端与物理设计从业者的 LEF/DEF 5.8 官方语言参考手册聚焦 Cadence Library Exchange Format 与 Design Exchange Format 两套 IC 描述语言的语法要素与用法规范适合已具备一定版图、布局布线基础需要查阅格式细节或搭建 EDA 流程的工程师与研究者。压缩包共 1 个 PDF 文件约 2.48MB单册完整收录手册正文便于本地检索与离线查阅。该资源已有 2177 人学习。内容层面LEF 部分覆盖工艺层定义、单元模型几何与尺寸、层间间距规则、填充与隔离区域以及复杂 IP 的宏抽象视图DEF 部分则围绕模块布局与方向、信号与电源网络连接、DRC/LVS/ERC 约束设置、物理分区与电源地平面等属性展开并说明两套格式在工具间交换设计信息时如何保证一致性。手册还交代了 5.8 版本在约束管理、物理描述精度与先进工艺节点支持上的变化可当作查错对照与流程对接时的案头参考。1. 一句话说清 LEF 和 DEF芯片设计里的两份说明书装修一套房子你会拿到两类图纸。一类是建材和家具的规格书这块板材多厚、这个插座开孔多大、这排柜子占地几乘几——它不关心你家房子怎么布局只描述「能用的东西长什么样」。另一类是施工图沙发摆在哪、水管从哪走、哪面墙不能动。芯片设计里的 LEF 和 DEF 就是这两类图纸。LEF 描述「工艺和单元库的客观规格」——金属层多宽、间距多少、一个反相器占多大地方、引脚在哪DEF 描述「某一版设计的具体现场」——这个反相器摆在哪、线怎么连、哪块区域不能碰。两者都是纯文本都能被不同工具读写是物理设计环节里事实上的交接语言。搞不清它们的边界看工具报错就只能靠猜而这类报错往往一句话带过信息量约等于零。2. LEF 到底定义了什么工艺规则和单元模型的共同语言2.1 为什么需要 LEF让工具在不懂工艺细节时也能干活完整的工艺细节是晶圆厂的核心资产一套原始文件动辄几个 G还带保密条款。布局布线工具不可能每次都去读它也不被允许读。所以就出现了 LEF 这层抽象只把「排布需要的部分」抽出来做成一份轻量、可传播的文本。打个比方你请师傅来装柜子不需要给他整本木材学教材只要一张板材规格表加几个五金件的孔位图就够了。LEF 就是那张规格表它不解释电子迁移为什么发生只告诉你「这条线最窄只能 0.07 微米两条线边到边至少留 0.07 微米」。这个抽象带来一个副作用也是它最大的价值同一份 LEF 可以服务很多个设计。一个工艺节点下所有项目共用一套 LEF工具之间、项目之间、甚至同一批流片的不同版本之间只要 LEF 一致摆放和布线的几何前提就一致。血泪经验很多人以为 LEF 是「某个项目的文件」其实它更像「某个工艺加某个库的公共契约」。项目可以换LEF 通常不动一改动就会波及所有下游环节。2.2 工艺层的信息Routing、Cut、Implant、MastersliceLEF 里最占篇幅的部分是 Layer。按用途分成四种Layer (Routing)布线层也就是金属层。它决定信号线能走多宽、默认往哪个方向走、相邻线要隔多远。Layer (Cut)切割层也就是通孔层。它描述上下两层金属之间怎么打通。Layer (Implant)注入层用于器件注入区一般和标准单元的电气特性相关。Layer (Masterslice or Overlap)主切片层或重叠层常见于一些特殊工艺。每个 routing 层有一组必填属性TYPE 说明这是布线层DIRECTION 说明默认走线方向是水平还是垂直PITCH 是走线轨道的重复间距WIDTH 是默认线宽SPACING 是最小边到边间距。这三个数值有个隐含关系PITCH 至少要大于等于 WIDTH SPACING否则轨道本身就违反了间距规则。这是个很典型的翻车点——工艺文件里 PITCH 写小了工具在布线阶段会不断报 spacing violation但你怎么查 SPACING 都没错问题出在 PITCH 和 WIDTH 的组合上。层的电气属性也会写进去RESISTANCE、CAPACITANCE、THICKNESS、AREA。这些主要用于工具内部做粗略的延时估算不做精确签核。所以别指望拿 LEF 里的电阻值去对齐最终时序报告那是两个精度层级的东西。还有一类容易忽略的语句Nondefault Rule。默认规则管「普通线」非默认规则管「宽线、特殊线、双倍间距线」。比如一条两倍宽度的电源走线它的间距要求不是简单的线性放大而是单独写一张 SPACINGTABLE线宽超过某个阈值间距直接跳到下一档。注意Nondefault Rule 的名字会和 DEF 里的 NONDEFAULTRULE 语句对应两边写不一致工具会忽略或者报错而且提示往往只指向行号不指向文件名。2.3 单元与宏模型SITE、MACRO、PIN、OBS工艺层之上是「东西」。LEF 里描述单元用的是一组嵌套语句。SITE 是行的模板。想象一个停车场地上画好了一排车位每个位子宽 0.4 微米、高 2.4 微米这就是 SITE 的 SIZE。CLASS CORE 表示这是标准单元用的位子其他还有 CLASS PAD 之类的类型。MACRO 是停在车位上的车。它用 ORIGIN 和 SIZE 给出自己的外廓再加上 SITE 说明自己占几个位子。CLASS 属性区分它是什么类型CORE 是标准单元BLOCK 是宏块存储器、IP 核这类PAD 是焊盘SPACER 是填充单元ENDCAP 是边界单元RING 是环状结构。PIN 是车门。它告诉你「从这个位置可以接入信号」用 PORT 加 LAYER 加 RECT 给出可连接的金属形状。引脚方向INPUT / OUTPUT / INOUT也会写上有些还会带上 USE 属性说明是信号还是电源。OBS 是不能碰的地方。有些宏块内部有大片不能布线的区域用 OBS 声明出来工具自动绕开不用人再手动画禁区。打个比方SITE 是车位线MACRO 是车身轮廓PIN 是车门把手OBS 是「此处禁止停车」的黄色网格。四者合起来工具不需要知道车里装了什么发动机也能把它停进正确的位置。这里体现的正是 LEF 的核心思想只描述外形和接口不描述内部结构。一个 32 位乘法器在 LEF 里可能就是一个 20×40 微米的方块加几十个引脚至于里面有几万门、怎么连的工具不关心因为那是网表该回答的问题。2.4 一份 LEF 长什么样关键语句拆开看看一段最小化的 LEF 片段# 一个最小 LEF 骨架版本、单位、层、站点、宏 VERSION 5.8 ; # 数据库单位1 个数据库单位 1/1000 微米 UNITS DATABASE MICRONS 1000 ; END UNITS # 第一层金属水平方向轨道间距 0.14 微米线宽与间距都是 0.07 LAYER M1 TYPE ROUTING ; DIRECTION HORIZONTAL ; PITCH 0.14 ; WIDTH 0.07 ; SPACING 0.07 ; END M1 # 标准单元行的模板宽 0.4 微米高 2.4 微米 SITE core_site CLASS CORE ; SIZE 0.4 BY 2.4 ; END core_site # 一个反相器单元外廓 1.2×2.4占三个站点宽 MACRO INV_X1 CLASS CORE ; ORIGIN 0 0 ; SIZE 1.2 BY 2.4 ; SITE core_site ; PIN A DIRECTION INPUT ; PORT LAYER M1 ; RECT 0.1 0.6 0.3 0.9 ; END END A END INV_X1 END LIBRARY逐段说明。VERSION 5.8 是语言版本号工具会拿它判断按哪套规则解析。写错版本后面的语句可能直接被当成非法报出的错误却指向看似无关的行。UNITS DATABASE MICRONS 1000 最容易翻车。它定义「1 个数据库单位 1/1000 微米」所以文件里所有坐标理论上都是整数。上面示例里写的 WIDTH 0.07 是小数形式按整数单位写就是 70。有些工具接受小数有些只认整数混用会出现「整体尺寸差 1000 倍」的经典事故而且往往要到布局阶段才暴露。LAYER 里的 PITCH 0.14 意味着相邻两条线的中心距离是 0.14而 WIDTH 0.07、SPACING 0.07 正好凑成 0.14说明这是理想情况下的最密排布。三个数任何两个改动第三个都得跟着改否则规则自相矛盾。SITE 的 SIZE 0.4 BY 2.4 是行高的来源。DEF 里的 ROW 语句会引用这个 SITE 名字两边名字对不上布局工具就找不到行报出来的错是「no site defined」但实际原因在 LEF 里名字拼错了。MACRO 的 SIZE 1.2 BY 2.4 说明这个单元宽是站点的三倍。工具摆放时按站点网格对齐不会出现停在半个车位上的情况。ORIGIN 0 0 定义了它自己的坐标原点所有内部几何都相对这个点计算。PIN A 下的 RECT 是矩形坐标格式是左下 x、左下 y、右上 x、右上 y。这个矩形必须落在 MACRO 的边界内超出边界工具会认为引脚不可达布线阶段直接连不上。END LIBRARY 是整份文件的结束标记。语法上允许一个文件里放多个库但实际操作里通常一个文件一个库省得工具搞混。提示LEF 的注释用 # 开头语句之间用分号结束续行不需要特殊符号。少一个分号后面整段都可能解析失败而报错行号有时会指到很远的地方。3. DEF 到底描述了什么一版设计的物理现场记录3.1 为什么需要 DEF设计要在工具之间接力LEF 是静态的一份用很多年。DEF 是动态的一版设计一个文件改一次布局就可能生成一个新 DEF。为什么需要它因为物理设计是一条接力链综合工具吐出网表布局工具把它变成有坐标的摆放布线工具接上连线签核工具再拿去核对。每一棒交接都需要一份「对方能读懂的现场记录」。打个比方LEF 是积木的零件规格表告诉你每块砖多宽多高、凸点在哪DEF 是已经拼到一半的说明书告诉你第 37 步那块红砖已经放在坐标 (12, 8)朝北。前者描述可能性后者描述现状。黑匣子问题就出在这如果 DEF 里少了某个属性下一个工具不会提醒「你少写了东西」而是默默按默认值处理最后结果对不上你回头查每一个工具都说自己没错。这种问题没有后悔药只能靠事前的格式检查。3.2 DEF 的骨干语句DIEAREA、ROW、COMPONENTS、NETSDEF 有一套强制的语句顺序。大致是版本和字符约定 → 设计名 → 单位 → 芯片边界 → 行和轨道 → 元件 → 引脚 → 网络 → 结束。DIEAREA 给出芯片的物理边界格式是左下坐标和右上坐标两个点对。所有元件都必须落在这个矩形里超出去工具会直接拒绝。ROW 定义标准单元行。它引用 LEF 里的 SITE 名字给出起始坐标、朝向、重复次数和步进。一行行画好标准单元才有地方站。TRACKS 定义走线轨道。它告诉布线器「线只能在这些网格线上走」是布线网格化的基础。轨道间距和 LEF 里的 PITCH 不一定要相等DEF 里可以定义得比 LEF 更宽松或更密。COMPONENTS 是元件清单。每个条目形如「实例名 单元名 状态 坐标 朝向」。状态可以是 PLACED已摆放、FIXED固定不可动、UNPLACED未摆放、COVER覆盖。FIXED 和 PLACED 的区别很关键FIXED 的元件工具绝对不会动PLACED 的还能被优化器挪走。NETS 是信号网络。每个网络列出它连接的所有引脚格式是「( 实例名 引脚名 )」。括号顺序有讲究先写实例和引脚后写端口端口要加 PIN 前缀。SPECIALNETS 是特殊网络主要给电源和地。它和 NETS 语法类似但会带上更宽的线宽、更多的过孔定义还可以有 SHIELD 之类的高级属性。PINS 是芯片对外的接口。它和 LEF 里的 PIN 不是一回事LEF 的 PIN 是单元自己的引脚DEF 的 PINS 是整个芯片的输入输出端口是顶层封装要对接的部分。3.3 约束与结构信息BLOCKAGES、REGIONS、GROUPS、GCellGrid除了「东西在哪」DEF 还承载了大量约束。BLOCKAGES 声明禁止区域。它可以是禁止布线、禁止摆放或者两者都禁。做模拟 IP 隔离、电源环保护时会用到写法和图形描述类似。REGIONS 把一组实例圈进某个矩形范围常用于约束某个模块只能摆在芯片的某个角落方便后续的电源规划。GROUPS 是逻辑分组方便工具按组处理比如让某个子模块整体移动。GCellGrid 是全局布线的单元格网格定义了全局布线阶段的基本粒度。调这个值会影响全局布线的运行时间和结果质量。SCANCHAINS 描述扫描链的串联顺序。测试相关的信息也放在 DEF 里这点很多人不知道所以看到扫描链相关的异常会先去查测试文件其实答案在 DEF。SLOTS 和 FILLS 描述填充。填充单元、填充金属都归这里管。STYLES 定义布线风格比如某条网络允许走几层、优先级多高。做高速信号或者敏感模拟线时会靠它约束走线行为。打个比方DEF 不只是一张「已摆放清单」它更像一份施工交底记录东西在哪、哪些地方不能动、哪些线要走特殊通道、测试链怎么串。3.4 一个 DEF 片段怎么读# 最小 DEF 骨架版本与分隔符、设计名、单位、边界、行、轨道、元件、网络 VERSION 5.8 ; DIVIDERCHAR / ; BUSBITCHARS [] ; DESIGN top_demo ; # 距离单位1 个数据库单位 1/1000 微米 UNITS DISTANCE MICRONS 1000 ; # 芯片边界左下 (0,0)右上 (24000,24000)即 24×24 微米 DIEAREA ( 0 0 ) ( 24000 24000 ) ; # 一行标准单元位起点 (0,0)朝北共 60 个站点步进 400 ROW ROW_0 core_site 0 0 N DO 60 BY 1 STEP 400 0 ; # 走线轨道X 方向 120 条步进 200位于 M1 层 TRACKS X 0 DO 120 STEP 200 LAYER M1 ; TRACKS Y 0 DO 120 STEP 200 LAYER M1 ; # 元件清单声明 1 个实际必须写满 1 个 COMPONENTS 1 ; - U1 INV_X1 PLACED ( 4000 4000 ) N ; END COMPONENTS # 信号网络net_a 连接 U1 的 A 引脚和芯片端口 clk NETS 1 ; - net_a ( U1 A ) ( PIN clk ) ; END NETS END DESIGN逐行说明。VERSION 5.8 和 LEF 一样是语言版本。工具靠它决定解析规则。DIVIDERCHAR 和 BUSBITCHARS 定义名字里的层级分隔符和总线括号。这两个字符一旦和网表里的写法不一致网络名就会对不上连出来的结果全是断线而且工具通常不会报「名字不匹配」只会报「网络未连接」。DESIGN top_demo 是设计名。它应该和网表里的顶层模块名一致否则工具可能认不出这是同一个设计后面做对比时会莫名其妙多出一个设计。UNITS DISTANCE MICRONS 1000 是 DEF 的距离单位。和 LEF 的 DATABASE MICRONS 必须一致不然同一个坐标在两份文件里代表不同尺寸。这是最隐蔽的翻车点之一因为两份文件各自都能正常解析合在一起才发现尺寸错位。DIEAREA 的两个坐标对第一个是左下第二个是右上。所有 ROW 和元件都得待在里头。ROW 语句里的 DO 60 BY 1 STEP 400 0 意思是「重复 60 次行方向重复 1 次每次步进 x400、y0」。400 正好等于 SITE 宽度 0.4 微米乘 1000和单位对得上说明这份 DEF 是按 LEF 的站点尺寸算出来的。TRACKS 里的 DO 120 STEP 200 是轨道数量和间距200 对应 0.2 微米比 LEF 里的 PITCH 0.14 大说明这份 DEF 用的是更宽松的布线网格。COMPONENTS 后面那个数字是元件数量必须和实际条目数严格一致。多一个少一个解析器直接报错。这是初学者最常踩的坑手工删了一行忘了改数字。NETS 里的括号顺序有讲究先写实例和引脚本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑