LEF/DEF与EDA布局布线数据模型:芯片流片关键语法解析

发布时间:2026/10/31 12:16:34
LEF/DEF与EDA布局布线数据模型:芯片流片关键语法解析 简介《LEF/DEF 5.8 Language Reference》面向集成电路物理设计、布局布线及EDA工具开发人员是一份由Cadence发布的LEF/DEF 5.8语言参考手册可用于理解工艺技术、单元库与设计实现信息如何在工具间交换。手册系统梳理LEF的层定义、单元模型、间距规则、填充与隔离区域、宏模型以及DEF的模块布局、网络连接、约束设置、物理分区与物理属性等内容并涉及5.8版在约束管理和先进工艺节点支持方面的说明适合在物理综合、布局规划、设计规则检查、跨工具数据交换与流片前验证时查阅。包内共1个PDF文件压缩包约2.48MB内容按语言元素组织便于按主题定位语法与语义。已有2177人学习适合IC设计工程师、EDA工具开发者及相关专业学生作为案头参考资料。1. LEF/DEF一份纯文本为什么能决定芯片能不能流片把一颗芯片的物理实现过程拆开看真正在 EDA 工具链之间流转的往往不是某个私有数据库而是两份纯文本LEF 和 DEF。5.8 版的语言参考厚得离谱却几乎没有一句废话——它规定的核心问题是「工具能看见什么」而不是「文件该怎么写」。反直觉的地方在于布局布线工具根本不理解电路它只理解 LEF 描述的「这层金属能走多宽、间距多少」和 DEF 描述的「某个单元已经被固定在哪个坐标上」。搞懂这两套语法等于拿到了工具内部数据模型的说明书。2. LEF 的三层抽象工艺、站点、宏单元是怎么被拆开的LEF 描述的是「这个世界允许你造什么」。它不关心具体设计只描述制造能力和可用的积木。麻烦在于「允许造什么」这件事同时包含三个尺度差别极大的东西纳米级的金属层规则、微米级的单元外框、以及介于两者之间的放置网格。LEF 用三组完全不同的语句把它们分开这个拆分方式决定了后续所有工具的行为。2.1 为什么 LEF 一定要把工艺和单元模型分开同一份工艺文件会被同一个工艺节点下的几十个库共享而每个库的版本节奏完全独立。如果混在一个文件里改一个单元的引脚形状就要重新发布整份工艺描述版本校验会失控。所以实践中的 LEF 通常切成两半technology LEF 只含LAYER、VIA、VIARULE、NONDEFAULTRULE、UNITS、MANUFACTURINGGRIDmacro LEF 只含SITE和MACRO。这种切分带来一个隐含约束如果一个文件同时包含两部分LAYER必须出现在MACRO之前因为MACRO里的PORT要按名字引用层。这和后面要讲的 DEF 语句顺序是同一类问题——不是风格建议是解析器的状态机要求。5.8 在这一块加了两个值得注意的能力。一个是LIBRARY语句允许单个文件里封装多个库每个库带自己的UNITS、SITE和MACRO多库合并交付时不用再拼文件。另一个是ALIAS给长字符串起别名本质是把「重复写一长串层名或规则名」的体力活压缩成一次定义。还有增量 LEF 的概念只重新加载变更部分代价是工具必须维护一份跨次读入的一致性状态。2.2 LAYER 语句ROUTING、CUT、MASTERSLICE 的语义差别TYPE是LAYER里最关键的一个词它决定了这层在工具眼里是什么角色。ROUTING是可布线金属层必须给出DIRECTION、PITCH、WIDTH、SPACING。布线器按PITCH在这层生成等距的 track 阵列DIRECTION决定首选走向相邻层一般正交目的是让通孔落在两层 track 的交叉点上。如果PITCH小于WIDTH SPACING工具要么直接报错要么强行压缩 track 数量结果就是「规则明明满足却布不通」——这类问题查起来极其麻烦因为 DRC 是干净的。CUT是通孔层只有WIDTH、SPACING、ENCLOSURE这类参数它不参与路径搜索只被VIA和VIARULE引用。MASTERSLICE是不可布线的栅极层用来描述单元内部的多晶硅形状工具拿它算寄生但不会往上走线。IMPLANT更边缘只在参数提取和部分规则检查里出现。VERSION 5.8 ; BUSBITCHARS [] ; DIVIDERCHAR / ; UNITS DATABASE MICRONS 1000 ; END UNITS MANUFACTURINGGRID 0.001 ; LAYER M1 TYPE ROUTING ; DIRECTION HORIZONTAL ; PITCH 0.14 ; # 布线器据此生成 track必须 WIDTH SPACING WIDTH 0.07 ; # 默认线宽 SPACING 0.07 ; # 默认同层间距 AREA 0.014 ; # 最小面积防止短线在 CMP 后断开 THICKNESS 0.14 ; HEIGHT 0.35 ; # 用于寄生提取的层高 RESISTANCE RPERSQ 0.12 ; # 方块电阻单位 ohm/sq CAPACITANCE CPERSQDIST 1.2e-4 ; END M1AREA这一项容易被当成可选实际上它是制造侧的硬要求一条又短又细的金属在化学机械抛光后可能被磨断所以规则要求最小面积。RESISTANCE RPERSQ和CAPACITANCE CPERSQDIST是时序提取的输入量纲写错比如把RPERSQ写成整层电阻不会报错只会让后续的 RC 估算整体偏移属于典型的默默产生错误结果。UNITS和MANUFACTURINGGRID是两份文件能不能对齐的前提。LEF 里所有坐标都是整数单位是「数据库单位」DATABASE MICRONS 1000表示 1 微米等于 1000 个 DBU。MANUFACTURINGGRID 0.001表示所有几何必须落在这个格点上。用整数不用浮点是因为千万级坐标下浮点累加会产生漂移最后表现为「坐标莫名其妙不在 track 上」这种无法解释的问题。注意MANUFACTURINGGRID与DATABASE MICRONS不整除时工具取整方向不同会导致同一份数据在两个工具里差 1 个 DBU。2.3 MACRO 与 PIN/PORT端口形状如何决定布线接入点MACRO是 LEF 里信息密度最高的段落。它只描述外框、引脚、阻挡不描述内部晶体管——这是刻意的信息隐藏库供应商不愿暴露版图细节同时工具也扛不住百万实例的完整版图。布线器拿到的抽象就三样SIZE决定占位PORT决定能从哪里接入OBS决定哪些区域不能碰。SITE unit CLASS CORE ; SIZE 0.28 BY 1.4 ; END unit MACRO NAND2X1 CLASS CORE ; ORIGIN 0 0 ; SIZE 1.12 BY 1.4 ; SYMMETRY X Y ; SITE unit ; PIN A DIRECTION INPUT ; USE SIGNAL ; ANTENNAGATEAREA 0.0420 ; # 栅氧面积天线比的分母 PORT LAYER M1 ; RECT 0.14 0.28 0.28 0.42 ; END END A OBS LAYER M1 ; RECT 0 0 1.12 0.14 ; END END NAND2X1SITE是放置网格的定义SIZE给出一个站点的宽高。MACRO的SIZE必须是SITE宽度的整数倍否则布局时行内会出现重叠或缝隙。SYMMETRY X Y声明这个单元可以沿 X 或 Y 轴镜像翻转布局器翻转它能省面积但翻转后PORT坐标要跟着镜像如果SYMMETRY漏声明而工具又强行翻转pin 位置就会算错布线阶段表现为「端口悬空」。PORT里可以出现多个LAYER段描述同一个引脚在不同工艺层上的形状也可以是POLYGON或PATH不限于矩形。形状越碎布线器计算 pin access point 越费劲。实践中常见的翻车是DRC 全过但详细布线报 pin access 失败——原因往往是PORT太窄或者被OBS包围得太紧工具找不到合法的接入点。OBS只写「不能走线」不写内部金属的用途。漏写一段OBS布线器就会把信号线走在单元内部的电源轨上问题要到 DRC 阶段才暴露出来那时候已经很难定位到是 LEF 的问题。3. DEF 的设计态语义从 DIEAREA 到 SPECIALNETS 怎么还原一个设计DEF 描述的是「这个设计现在是什么样」。和 LEF 不同它描述的是某一时刻的快照所以带状态、带坐标、带连接关系。它最反直觉的一点是语句顺序是硬约束写错顺序不是风格问题是直接读不进去。3.1 语句顺序为什么是硬约束DEF 的解析器几乎都是单遍、无回溯的流式解析。这意味着读到NETS的时候它必须已经知道所有实例名和引脚名否则没法解析( u_core A )这种引用。所以顺序被固定成一张依赖表语句依赖的前置语句原因UNITS无后续所有坐标的换算基准DIEAREAUNITS坐标需要单位解释ROWUNITS、SITE来自 LEF行宽必须对齐站点COMPONENTSROW可省略但通常在前实例位置依赖行定义PINSCOMPONENTS可省略引脚引用网络名SPECIALNETSPINS电源引脚要先声明NETSCOMPONENTS、PINS引用实例与引脚这套顺序带来的直接后果是手工拼接两个 DEF或者用脚本按字母序重排段落几乎必然失败。合并 DEF 的正确做法是按参考文档的顺序表重建而不是简单拼接。3.2 COMPONENTS 的放置状态位PLACED、FIXED、COVER、UNPLACEDCOMPONENTS段每个实例后面跟一个状态词这个状态词的本质不是「位置」而是「权限」——声明谁有权改这个坐标。状态语义谁可以移动典型用途PLACED已放置位置可优化布局、优化工具普通标准单元FIXED位置固定不可移动无人布线可绕宏单元、IP、预布局模块COVER物理单元占面积不参与逻辑可被覆盖填充、去耦、天线二极管UNPLACED只有实例没有坐标布局工具布局前的初始网表为什么用状态位而不是配置文件因为一份 DEF 会被布局、时钟树、布线、时序、DRC 五六个工具依次读入每个工具都想「我最懂这个坐标该在哪」。用状态位划权比给每个工具配一套忽略列表更不容易丢。COVER的存在尤其说明问题物理单元占面积但没有逻辑功能工具必须知道「它可以被别的单元压过去」否则面积永远收不回来。DEF 5.8 还引入了COMPONENTMASKSHIFT允许对单个实例按层指定掩模偏移。这是多重曝光工艺下的现实需求同一个单元放在不同位置可能需要用不同的掩模组合光靠单元级定义表达不了。3.3 NETS 与 SPECIALNETS信号网和电源网为什么必须分开这两段在语法上就有明显差异。SPECIALNETS支持 USE POWER/GROUND、 SHAPE STRIPE/RING/FOLLOWPIN、 WIDTH走的是宽线或条带通常由电源规划阶段生成之后基本固定。NETS走信号用 ROUTED或 FIXED加层与坐标描述。分开的理由有四条。第一算法不同电源网是网格规划问题信号网是详细布线问题工具内部的数据结构都不一样。第二时序工具不需要电源网混在一起只会增加无关数据。第三增量流程里改电源规划只需重读SPECIALNETS不用动信号网。第四语法能力不同SPECIALNETS有SHAPE和PATTERNNETS没有对应表达。VERSION 5.8 ; DIVIDERCHAR / ; BUSBITCHARS [] ; DESIGN top_core ; UNITS DISTANCE MICRONS 1000 ; DIEAREA ( 0 0 ) ( 240000 180000 ) ; ROW ROW_1 unit 0 0 N DO 857 BY 1 STEP 280 0 ; COMPONENTS 2 ; - u_core NAND2X1 PLACED ( 14000 1400 ) N ; - u_keep NAND2X1 FIXED ( 28000 1400 ) N ; END COMPONENTS PINS 1 ; - clk NET clk DIRECTION INPUT USE CLOCK PORT LAYER M2 ( -70 -70 ) ( 70 70 ) PLACED ( 0 7000 ) N ; END PINS NETS 1 ; - clk ( u_core A ) ( PIN clk ) ; END NETS END DESIGN这段里每个数字都是整数 DBU。ROW的DO 857 BY 1 STEP 280 0表示 857 个站点、步长 280 DBU必须和SITE的 0.28 微米对上。PINS里的 LAYER M2 ( -70 -70 ) ( 70 70 )是相对坐标描述引脚的矩形范围。这些括号里的负数坐标常常让新手困惑——它们是相对于PLACED那个点的偏移不是绝对坐标。注意PINS里USE POWER/GROUND的引脚必须能在SPECIALNETS中找到对应连接否则会出现「电源引脚未连接」。3.4 UNITS 与坐标换算1000 还是 2000 会连锁出什么UNITS DISTANCE MICRONS 1000定义 DEF 的数据库单位。LEF 里也有自己的DATABASE MICRONS两份不一致时工具通常以 DEF 为准把 LEF 的尺寸乘上换算系数。问题在于换算结果往往不是整数取整之后WIDTH少 1 个 DBU、SPACING多 1 个 DBU整套几何规则整体偏移。这种偏移不会报错只会在 DRC 阶段表现为「一堆 1 DBU 级别的间距违例几何看起来完全正确」。查起来非常费时间因为目视检查根本看不出差别。所以读入之后立刻打印DIEAREA和第一个ROW的STEP和预期值对一遍是最省事的验证手段。4. 几何规则怎么被工具执行SPACING、VIA 与天线效应的机制LEF 里大部分语句是描述性的但有一小部分是可执行的——工具会按这些规则实时计算几何。这部分才是 LEF 真正「活」的地方也是工艺文件写得好不好、直接决定布通率的地方。4.1 SPACINGTABLE为什么宽金属的间距不是一个常数如果间距真是常数写个SPACING 0.2就够了。实际上宽金属的间距取决于两件事线的宽度以及两条线平行重叠的长度。原因是制造侧的两个效应——化学机械抛光的蝶形起伏和光刻的邻近效应——都随金属面积和耦合面积增长宽而长的平行走线必须拉开更大距离。LEF 用二维查表表达这件事LAYER M4 TYPE ROUTING ; DIRECTION VERTICAL ; WIDTH 0.20 ; SPACING 0.20 ; SPACINGTABLE PARALLELRUNLENGTH 0.00 0.40 1.20 WIDTH 0.00 0.20 0.20 0.20 WIDTH 0.40 0.20 0.30 0.40 WIDTH 1.20 0.20 0.40 0.80 ; END M4PARALLELRUNLENGTH给出平行长度的分桶边界三个值把长度分成三段每一行WIDTH给一个宽度桶后面跟三个SPACING对应三段长度。布线器查表的方式是取两条线中较宽的那条定行取平行重叠长度定列查出间距后再取两者的较大值。第一行WIDTH 0.00是基准行表示「窄线在任意长度下都用基准间距」。写这张表最容易犯的错是SPACING的个数和PARALLELRUNLENGTH的个数不一致。多数解析器会报语法错但也有实现会默默按行截断结果就是某些宽度桶的间距根本没生效——表现出来的现象是「宽线间距规则在某个宽度区间突然失效」非常隐蔽。4.2 VIA 与 VIARULE通孔是查出来的还是算出来的通孔有两种来源。固定VIA是版图上画好的带完整的层、矩形和电阻库供应商认证过可靠性有保证。VIARULE GENERATE则是给工具的参数化配方给定切割尺寸、上下层、切割间距、行列数工具自己生成阵列通孔。VIARULE V1_DEFAULT DEFAULT LAYER M1 ; ENCLOSURE 0.04 0.02 ; # 下层包围横向/纵向 LAYER V1 ; RECT -0.05 -0.05 0.05 0.05 ; SPACING 0.10 BY 0.10 ; LAYER M2 ; ENCLOSURE 0.02 0.04 ; END V1_DEFAULT VIARULE V1_GEN GENERATE LAYER M1 ; ENCLOSURE 0.05 0.01 ; LAYER M2 ; ENCLOSURE 0.01 0.05 ; LAYER V1 ; CUTSIZE 0.10 0.10 ; LAYERS M1 M2 ; CUTSPACING 0.10 0.10 ; ROWCOL 1 1 ; END V1_GEN两种都要的原因很实际固定通孔覆盖标准线宽可靠且可重复但一条 2 微米宽的电源线需要阵列通孔固定通孔覆盖不了所有宽度组合只能靠GENERATE现算。DEFAULT关键字标记默认规则布线器在没指定规则时用它。ENCLOSURE是上下层金属对通孔的包围量写小了会在通孔处出现包围不足的违例写大了会挤占布线资源反而降低布通率。4.3 天线效应面积比是怎么被计算的等离子刻蚀过程中长金属像天线一样收集电荷电荷沿通孔往下传导最终堆到栅极上。栅氧极薄电压一高就击穿这个现象叫工艺天线效应。判断标准很直接就是一个比值累积金属面积除以栅氧面积。两侧的分工是这样的。LEF 提供分母和修正因子MACRO的PIN里用ANTENNAGATEAREA给出栅面积ANTENNADIFFAREA给扩散区面积LAYER里用ANTENNAMODEL区分不同氧化本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询