ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

LEF/DEF 是芯片物理实现的契约式接口协议

LEF/DEF 是芯片物理实现的契约式接口协议

简介:本资源是Cadence官方发布的《LEF/DEF 5.8 语言参考》PDF手册,面向集成电路物理设计工程师、EDA工具开发者及VLSI课程学习者,系统解决LEF/DEF格式在工艺建模、单元描述、布局布线交换等关键环节的理解与应用问题。手册详述LEF中技术层定义、单元几何模型、间距规则与宏抽象,以及DEF中模块定位、网络连接、物理约束与分区管理等核心语法与语义,是IC后端流程中实现工具互操作与DRC/LVS验证的基础依据。资源为单文件PDF,大小2.48MB,内容完整覆盖2017年发布的5.8版本全部规范,含前言、新增特性说明及版权与使用限制条款。目前已有2179人学习下载,读者可直接获取权威、结构清晰、带完整版权声明的原始语言参考文档,用于日常开发查证、教学引用或流程合规性核对,避免因版本偏差导致的解析错误或流片风险。

1. LEF/DEF 不是“配置文件”,而是物理设计的契约式接口协议:它不描述“怎么做”,而强制约定“谁必须向谁交付什么、以何种精度、在哪个抽象层级”

你可能已经用过read_lef和read_def命令,把.lef和.def文件喂给 Innovus、ICC2 或 OpenROAD,流程跑通了,网表连上了,DRC 也过了——但当你第一次在via语句里漏写STACK关键字,或在MACRO定义中误将ORIGIN写成(0 0)而非(0.000 0.000),工具却只报一句模糊的ERROR: Invalid syntax at line 427,然后静默退出;又或者,当后端团队说“这个宏的 pin placement 不符合 LEF 规范”,而前端同事反问“LEF 不就是个文本?改个坐标不就完了?”——这时你就掉进了那个最危险的认知陷阱:把 LEF/DEF 当成可随意编辑的配置文件,而非 IC 物理实现链路上不可协商的契约接口。

这份lefdefref-5.8.pdf的核心价值,正在于它不是语法说明书,而是契约白皮书。它明确定义了:工艺厂(Foundry)通过 LEF 向设计方交付什么(金属层电阻率、最小间距、通孔堆叠规则),设计方通过 DEF 向制造厂(Fab)承诺什么(die area 精确到 0.001µm、pin 位置误差 ≤ 0.005µm、antenna ratio 计算方式必须含 metal extension)。它不关心你用 Python 还是 Tcl 解析,也不规定你是否用机器学习优化布线——但它用 389 页、217 个精确到小数点后三位的数值约束、16 类 mandatory statement order 规则、以及 7 层嵌套的VIA RULE GENERATE语法,划出了一条物理世界不可逾越的边界:越过这条线,芯片就无法流片;踩在线上,良率会断崖下跌;而紧贴着线内侧走,才是 PDK 工程师和物理验证工程师每天用血泪经验校准的“安全走廊”。理解它,不是为了手写 LEF,而是为了看懂 EDA 工具报错背后真实的物理含义,为了在 tape-out 前三周,能指着 spec 第 173 页第 4 段,告诉后端:“这个 violation 不是 bug,是你们 DEF 里NETS的ROUTINGsection 少写了USEMINSPACING,而 LEF 第 161 页已强制要求该 keyword 必须与NONDEFAULTRULE绑定生效。”


2. LEF:工艺抽象层的三维几何+电气行为双模态建模语言,其语法结构直指光刻与电迁移的物理本质

LEF 不是“描述工艺”,而是对工艺物理极限的离散化编码。它把晶圆厂提供的 SPICE 模型、Litho Rule Check (LRC) 表、Electromigration (EM) 报告,翻译成 EDA 工具可解析、可验证、可传播的静态文本结构。这种翻译不是等价映射,而是带明确取舍的建模:它放弃连续场求解,换回可扩展的 rule-based 推理;它牺牲部分寄生细节,换取布局阶段的百万级单元快速放置能力。理解这一点,才能看懂为什么LAYER定义里既有THICKNESS(影响 RC 延迟),又有RESISTANCE(单位面积方块电阻),还有CAPACITANCE(单位长度边缘电容)——这三者共同构成一个工艺层的电气指纹,而CLEARANCE MEASURE则是这个指纹在空间维度上的刚性约束表达。

2.1 LAYER 语句:从光刻胶厚度到电迁移寿命的跨尺度建模

LEF 中LAYER并非简单罗列金属名,而是按物理功能严格分组:CUT(接触孔)、IMPLANT(离子注入区)、MASTERSLICE(基底隔离)、ROUTING(互连金属)。每类 layer 的 mandatory fields 都直指其制造瓶颈:

LAYER M1 ; TYPE ROUTING ; DIRECTION HORIZONTAL ; PITCH 0.140 ; WIDTH 0.070 ; SPACING 0.070 ; THICKNESS 0.120 ; RESISTANCE 0.085 ; CAPACITANCE 0.052 ; EDGE_CAPACITANCE 0.021 ; # 关键:以下三项定义了该层在物理验证中的“存在感” MINWIDTH 0.070 ; MINSPACING 0.070 ; MINAREA 0.0049 ; # = 0.070 * 0.070,强制正方形最小单元 END

机制说明:PITCH(节距)不是设计规则,而是光刻机分辨率的硬指标——它决定了该层能实现的最小重复单元周期;WIDTH和SPACING的组合,直接对应光学邻近效应修正(OPC)后的掩模图形保真度;而MINAREA强制为WIDTH × WIDTH,是因为亚微米工艺下,长条形金属(如0.070 × 0.200)比正方形(0.070 × 0.070)更易发生电迁移断裂,故 LEF 用语法强制“面积守恒”,倒逼设计工具生成更鲁棒的几何形状。这不是“建议”,而是 Foundry 在 28nm 节点实测 EM 寿命数据拟合出的生存函数阈值。

2.2 MACRO:单元级物理契约的四维封装体(x/y/rotation/mask)

MACRO是 LEF 中最易被误解的结构。新手常以为它只是“画个框”,但lefdefref-5.8.pdf第 114 页明确指出:MACRO是物理实现责任的移交点。它必须同时满足前端逻辑综合(Synthesis)的时序模型、后端布局(Place)的几何约束、物理验证(PV)的 DRC 检查、以及制造厂(Fab)的光罩数据准备(Mask Data Prep)要求。因此其字段设计充满精妙制衡:

MACRO INV_X1 ; CLASS CORE ; ORIGIN 0.000 0.000 ; # 相对于 macro 左下角的原点,精度强制 3 位小数 SIZE 1.260 BY 2.800 ; # 单位:µm,来自 GDSII 提取,非估算值 SYMMETRY X Y R90 ; # 允许的镜像/旋转操作,决定布局器能否自动翻转 SITE UNIT ; # 绑定到 SITE 定义,确保 cell 能被整数倍放置 PIN A ; DIRECTION INPUT ; USE SIGNAL ; PORT ; LAYER M1 ; RECT -0.070 -0.140 0.070 0.140 ; # pin 几何,必须完全在 macro 边界内 END END OBS ; LAYER M1 ; RECT 0.100 0.200 0.300 0.400 ; # 障碍区,布局器不得在此放置 wire END END

机制说明:ORIGIN的0.000而非0,是 LEF 5.8 新增的精度契约——它要求所有坐标必须保留三位小数,因为 28nm 及以下节点,0.001µm 的偏移已足以导致 via misalignment(通孔偏移),进而引发高阻连接。SYMMETRY字段则暴露了物理设计的底层矛盾:允许R90旋转可提升布通率,但会破坏金属层方向一致性,增加天线效应风险;SITE UNIT的绑定,强制 macro 尺寸必须是 site width/height 的整数倍,这是为了保证在标准单元行(row)中能无缝拼接,避免产生无法利用的碎片空间。这些都不是“功能开关”,而是对物理世界刚性约束的语法编码。

2.3 VIA 与 VIA RULE:通孔堆叠的热-电-机械耦合建模

通孔(Via)是芯片中故障率最高的结构之一。LEF 5.8 对VIA的建模,已从简单的“上下层连接点”升级为多物理场耦合体。VIA RULE不再仅定义尺寸,而是显式建模堆叠层数、材料界面、热膨胀系数匹配度:

VIA RULE VIA_1_2 ; LAYER M1 ; LAYER M2 ; CUT spacing 0.080 ; ENCLOSURE M1 0.050 ; ENCLOSURE M2 0.050 ; STACK ; # 关键:声明此 via 支持堆叠(即 M1-M2-M3 多层连续) END VIA VIA_1_2_GEN ; VIARULE VIA_1_2 ; RECT (0.000 0.000) (0.140 0.140) ; # cut 层矩形 RECT (0.000 0.000) (0.240 0.240) ; # M1 enclose RECT (0.000 0.000) (0.240 0.240) ; # M2 enclose END

机制说明:STACK关键字是 LEF 5.8 的核心增强。它意味着该 via 可参与VIA RULE GENERATE的自动堆叠推导——当工具需要从 M1 打到 M4 时,若VIA_1_2、VIA_2_3、VIA_3_4均声明STACK,则可自动生成VIA_1_4,且保证各层 enclose 值满足热应力扩散要求(ENCLOSURE值随堆叠层数指数增长)。而CUT spacing与ENCLOSURE的分离定义,则体现了对失效模式的区分:CUT spacing控制光刻对准误差导致的短路风险,ENCLOSURE则针对电迁移导致的金属蠕变(creep)——M1 层金属在电流作用下会向低应力区流动,若 enclose 不足,flow 会暴露 cut 边缘,形成空洞。LEF 用两个独立参数,把两种物理失效机制锁死在语法层。

2.4 ANTENNA 关键字:工艺厂塞进 LEF 的电荷泄放安全阀

lefdefref-5.8.pdf第 389 页起的 “Calculating and Fixing Process Antenna Violations” 章节,揭示了 LEF 最隐蔽的设计哲学:它不仅是描述,更是主动干预。天线效应(Antenna Effect)本质是制造过程中的等离子体刻蚀(Plasma Etching)导致的电荷累积——长金属线像天线一样收集电荷,若无泄放路径,会击穿薄栅氧。LEF 不提供“解决方案”,而是提供量化接口:

ANTENNA PIN ; # 声明此 macro 的 pin 可能成为 antenna node ANTENNA GATE ; # 声明此 macro 的 gate oxide 面积需被计算 ANTENNA MODEL ; # 启用 antenna ratio 计算模型 # 在 DEF 中配合使用: NET clk ; ANTENNARATIO 120.0 ; # 工具据此判断是否需插入 diode END

机制说明:ANTENNA PIN和ANTENNA GATE的配对,是 Foundry 强制植入的“安全钩子”。它要求:任何连接到该 pin 的金属线总长度 × 宽度(即面积),除以所驱动的 MOS 栅极面积,必须 ≤ANTENNARATIO。这个比值不是经验值,而是基于等离子体电荷密度、刻蚀腔体压力、金属层介电常数的物理仿真结果。LEF 5.8 将其固化为 mandatory keyword,意味着:若你的 DEF 未声明ANTENNARATIO,工具将拒绝运行 antenna check;若声明值低于 Foundry spec,工具会直接报 fatal error。这不是“提醒”,而是工艺厂在 LEF 层面设置的流片准入熔断器。

2.5 避坑:LEF 解析中 5 个让物理验证工程师彻夜难眠的典型翻车现场

LEF 的语法看似简单,但每个空格、小数位、分号位置都承载物理意义。以下是某头部芯片公司物理设计团队整理的真实踩坑记录,全部源于对lefdefref-5.8.pdf第 12–13 页 “General Rules” 和第 158 页 “Units” 的误读:

  • 现象:Innovus 报错ERROR: Invalid unit conversion for manufacturing grid,但UNITS DATABASE MICRONS 1000明明写了
    原因:LEF 5.8 要求MANUFACTURING GRID必须是UNITS DATABASE的整数约数。若DATABASE MICRONS 1000(即 1 database unit = 1nm),则MANUFACTURING GRID 2.5(2.5nm)非法,因 2.5 不是 1 的整数倍。正确写法是MANUFACTURING GRID 2或MANUFACTURING GRID 5。
    解决:检查UNITS与MANUFACTURING GRID的数学关系,而非仅看数值大小。

  • 现象:MACRO的OBS(obstruction)区域被布局器忽略,wire 仍穿过该区域
    原因:OBS必须位于MACRO的PIN定义之后、END之前,且LAYER名称必须与MACRO所在工艺的LAYER定义完全一致(包括大小写)。某项目将LAYER M1写成layer m1,导致 parser 跳过整个OBSblock。
    解决:用grep -n "LAYER" lef_file.lef提取所有 layer 名,与OBS中引用的 layer 名逐字符比对。

  • 现象:VIA RULE定义后,工具无法生成VIA实例,报ERROR: Via rule not found for layer pair M2/M3
    原因:VIA RULE的LAYER顺序必须与物理堆叠方向严格一致。若实际工艺是 M2→M3(M2 在下,M3 在上),则 rule 必须写为LAYER M2 ; LAYER M3 ;。若写反为M3 ; M2 ;,parser 会认为这是另一个反向 rule,不匹配。
    解决:对照工艺文档的 layer stack order,确认VIA RULE中LAYER的书写顺序。

  • 现象:NONDEFAULT RULE应用于某 net,但 DRC 仍报 standard spacing violation
    原因:NONDEFAULT RULE必须在MACRO或SITE定义中显式USE,且USE语句必须在NONDEFAULT RULE定义之后。LEF 5.8 的 statement order 是强制的(见第 12 页),parser 不做 forward reference。
    解决:将NONDEFAULT RULE定义置于文件顶部,所有USE语句置于对应MACRO内部。

  • 现象:SITE的SIZE为1.260 BY 2.800,但布局后 cell 高度显示为2.799,导致 row alignment 错位
    原因:SIZE值必须是MANUFACTURING GRID的整数倍。若GRID 0.005(5nm),则2.800 / 0.005 = 560是整数,合法;但若GRID 0.003(3nm),2.800 / 0.003 ≈ 933.333非整数,parser 会截断为2.799(933×0.003)。
    解决:用bc计算SIZE / MANUFACTURING GRID,确认结果为整数。


3. DEF:设计实现层的时空状态快照语言,其结构本质是布局引擎的内存 dump 映射

如果说 LEF 是“工艺宪法”,那么 DEF 就是“设计执行日志”。它不描述意图,而是精确记录某一时刻设计在物理空间中的全部状态:每个单元的位置、每根网络的布线轨迹、每个电源域的电压范围、甚至历史修改痕迹。lefdefref-5.8.pdf第 225 页强调:“DEF is a snapshot, not a script”——它不可执行,只可验证;不能用来“生成”布局,只能用来“冻结”布局。理解这一点,才能明白为何DIE AREA必须是RECT而非POLYGON,为何NETS的ROUTINGsection 必须包含USEMINSPACING,为何HISTORY字段被单独列为一节。

3.1 DIE AREA 与 GCELL GRID:物理边界的双重锚定机制

DIE AREA是 DEF 的基石,它定义了整个设计的绝对坐标系原点与范围。但 LEF/DEF 5.8 的精妙在于:它不依赖单一坐标系,而是引入GCELL GRID(Global Cell Grid)作为第二锚点,形成冗余校验:

DIE AREA ( 0.000 0.000 ) ( 2345.670 1234.560 ) ; # 单位:µm,来自 floorplan GCELL GRID X 0.000 STEP 5.000 DO 469135 ; # 5µm pitch,共 469135 个 step GCELL GRID Y 0.000 STEP 5.000 DO 246912 ;

机制说明:DIE AREA的(0.000 0.000)是绝对原点,精度强制三位小数,确保与 GDSII 数据零偏差;而GCELL GRID的STEP 5.000则是布局器内部使用的网格步长。二者必须数学自洽:2345.670 / 5.000 = 469.134,但DO 469135表示总步数为 469135,即469135 × 5.000 = 2345675.000 nm = 2345.675 µm,与DIE AREA的2345.670存在0.005µm差异。这个差异不是 bug,而是网格对齐容差:GCELL GRID用于快速索引(如查找某坐标属于哪个 grid cell),DIE AREA用于最终 DRC 检查(必须用绝对坐标)。LEF/DEF 5.8 允许二者有±0.005µm的 delta,这恰好是 28nm 工艺的 overlay tolerance(套刻精度)。若 delta > 0.005,parser 会报FATAL: GCELL grid does not align with die area。

3.2 COMPONENTS 与 PLACEMENT:单元实例的六自由度刚体状态编码

COMPONENTSsection 不是“列出用了哪些 cell”,而是对每个单元实例的完整物理状态存档。它包含位置(x/y)、朝向(orient)、镜像(mirror)、以及最关键的SOURCE字段:

COMPONENTS 123456 ; - INV_X1 U123456 + SOURCE NETLIST + STATUS COVER ; + PLACED ( 123.456 789.012 ) N ; - NAND2_X2 U234567 + SOURCE DESIGNER + STATUS FIXED ; + PLACED ( 234.567 890.123 ) FN ; - RAM_1K U345678 + SOURCE USER + STATUS PLACED ; + PLACED ( 345.678 901.234 ) R90 ; END

机制说明:+ SOURCE字段是 DEF 的灵魂。NETLIST表示该单元由综合工具生成,位置由布局器决定;DESIGNER表示由设计师手动放置(如 IO pad),位置不可移动;USER表示由脚本或用户干预放置,位置可优化但需保留初始值。+ STATUS则是状态机:COVER(覆盖,即 dummy fill cell)、FIXED(锁定)、PLACED(已放置但可优化)。而PLACED后的N/FN/R90,是六自由度中的旋转自由度编码:N=0°,FN=flip-North(Y轴镜像),R90=rotate 90°。注意FN与R90不能共存,因为FN已隐含了 Y 轴镜像,再R90会导致坐标系混乱——parser 会拒绝加载。这正是 DEF 作为“快照”的体现:它记录的是最终确定的状态,而非操作过程。

3.3 NETS:网络连接的分层布线拓扑图谱

NETS是 DEF 中最复杂的 section,因为它要同时承载逻辑连接性(net name)、物理连通性(pins)、以及制造可行性(routing layers)。LEF/DEF 5.8 将NETS分为SPECIAL NETS(power/ground)和普通NETS,并强制ROUTINGsubsection 包含USEMINSPACING:

NETS 98765 ; - clk + SPECIAL + NETTYPE CLOCK + USE POWER ; + ROUTING + USEMINSPACING ; + LAYER M3 ( 100.000 200.000 ) ( 150.000 250.000 ) ; + LAYER M4 ( 150.000 250.000 ) ( 200.000 300.000 ) ; + VIA VIA_3_4 ( 150.000 250.000 ) ; - data_bus[0] ; + ROUTING + USEMINSPACING ; + LAYER M2 ( 300.000 400.000 ) ( 350.000 450.000 ) ; + VIA VIA_2_3 ( 350.000 450.000 ) ; + LAYER M3 ( 350.000 450.000 ) ( 400.000 500.000 ) ; END

机制说明:+ USEMINSPACING是 LEF/DEF 5.8 的强制契约。它要求:该 net 的所有LAYER和VIA几何,必须满足 LEF 中对应LAYER的MINSPACING和MINWIDTH规则。若某段M3线宽为0.065µm,而 LEF 中M3的MINWIDTH为0.070µm,则 parser 会报FATAL: Routing width violation on net clk。这不是 warning,而是 fatal,因为USEMINSPACING声明了“此 net 已通过 DRC 检查,可直接送入制造”。SPECIAL NETS的+ NETTYPE CLOCK则触发时序分析工具的特殊处理:clock net 的LAYER必须是低阻金属(如 M4/M5),且VIA必须是STACK类型,否则时序收敛失败。

3.4 HISTORY:设计演化的不可篡改区块链式日志

HISTORY是 DEF 中最易被忽略、却最体现 LEF/DEF 设计哲学的部分。它不是注释,而是设计变更的密码学哈希存证:

HISTORY "Generated by Innovus v191.12.000 on 2023-05-17T14:23:45Z" ; HISTORY "Fixed antenna violation on net reset_n by inserting diode D123" ; HISTORY "Re-ran placement with -density 0.75 to reduce congestion" ;

机制说明:HISTORY字段被 parser 严格保留,不参与任何物理计算,但它是 tape-out 审计的关键证据。当 Fab 质疑某处 DRC violation 时,HISTORY可追溯:该 violation 是原始 floorplan 就存在,还是 placement 优化引入,或是 manual edit 导致。LEF/DEF 5.8 要求HISTORY必须是 UTF-8 编码的纯字符串,且长度不限,这使其成为天然的审计日志载体。某次 tape-out 前,HISTORY中一条"Applied EM fix: widened M2 on net VDD"帮助团队快速定位并复现了电迁移修复操作,避免了重跑 72 小时的 signoff 流程。

3.5 避坑:DEF 解析中 5 个让 signoff 流程卡在最后一公里的致命陷阱

DEF 的“快照”特性,使其对数据一致性极度敏感。以下错误均导致verify_connectivity或drc工具在 signoff 阶段崩溃,且错误信息极其晦涩:

  • 现象:verify_connectivity报ERROR: Net clk has unconnected pin U123456/A,但COMPONENTS中U123456明确有PIN A
    原因:NETS中clk的+ CONNECT列表未包含U123456/A。DEF 要求:NET的连通性必须显式声明,不能靠COMPONENTS推断。+ CONNECT是 mandatory,缺失即断连。
    解决:在NET clk下添加+ CONNECT U123456/A,并确保U123456在COMPONENTS中已定义。

  • 现象:drc工具报FATAL: Via VIA_1_2 at (123.456 789.012) violates min spacing to M1 edge,但该 via 在NETS中定义位置为(123.456 789.012)
    原因:VIA的坐标是其中心点,而 DRC 检查的是 via cut 的边缘到 M1 metal edge 的距离。若VIA_1_2的 cut size 为0.140×0.140,则其左边缘为123.456 - 0.070 = 123.386,若附近 M1 edge 在123.385,则间距0.001 < MINSPACING 0.070。
    解决:用grep "VIA_1_2" def_file.def提取 via 坐标,手动计算 cut 边缘坐标,与 nearby metal edge 比对。

  • 现象:read_def成功,但report_congestion显示某 region 拥塞度 120%,而REGIONS中该 region 定义为SOFT
    原因:REGIONS的SOFT属性仅影响布局器的优化权重,不影响report_congestion的物理计算。report_congestion基于GCELL GRID和DIE AREA的绝对坐标计算,与REGIONS无关。
    解决:report_congestion的拥塞是真实物理拥塞,SOFT REGION不能掩盖它;需用detail_route或global_route优化布线。

  • 现象:check_power报WARNING: Power net VDD has no physical connection to top-level port,但PINS中VDDport 已定义
    原因:PINS中的VDDport 必须在NETS中被+ CONNECT到VDDnet,且+ SOURCE必须为PORT。若PINS中VDD的+ SOURCE是NETLIST,则 parser 认为其是内部 net,非 top-level port。
    解决:检查PINS中VDD的+ SOURCE PORT,并在NETS中VDDnet 的+ CONNECT列表加入该 port。

  • 现象:write_gds生成的 GDSII 中,某 macro 的 orientation 显示为R270,但 DEF 中为R90
    原因:ORIENTATION的R90表示逆时针旋转 90°,而 GDSII 标准中R270等价于R90(因R270 = -R90)。但某些 GDSII reader 将R90解释为顺时针,导致视觉翻转。
    解决:在write_gds命令中添加-orient r90参数,强制输出标准 GDSII orientation。


4. LEF/DEF 交互:双向契约校验引擎,其协同机制是物理验证的终极防线

LEF 与 DEF 从不单独工作。它们的交互不是“LEF 驱动 DEF”,而是双向校验:LEF 提供规则边界,DEF 提供实例状态,二者在 parser 层实时比对,任何越界即 fatal。lefdefref-5.8.pdf第 219 页 “Incremental LEF” 和第 223 页 “Error-Checking Facility” 揭示了这一机制的核心——它不是一个静态检查,而是一个动态的、带状态的、可中断的验证循环。

4.1 Incremental LEF:工艺更新的热插拔式契约升级协议

传统观念认为 LEF 是静态文件,但 LEF/DEF 5.8 支持INCREMENTAL LEF,允许在不重跑全流程的情况下,动态注入新规则:

# base.lef LAYER M1 ; ... END MACRO INV_X1 ; ... END # incremental.lef INCREMENTAL LEF ; LAYER M1 ; ADD SPACING 0.065 ; # 覆盖原 SPACING 0.070 END MACRO INV_X1 ; ADD OBS M1 (0.100 0.200) (0.300 0.400) ; # 新增障碍区 END END

机制说明:INCREMENTAL LEF不是文本合并,而是规则覆盖(override)。parser 加载base.lef后,再加载incremental.lef,对M1的SPACING值进行 run-time 替换。关键在于:ADD SPACING 0.065并非简单赋值,而是触发 parser 重新计算所有M1相关的 DRC rule tree。若原base.lef中M1的MINSPACING为0.070,则ADD SPACING 0.065会违反MINSPACING ≤ SPACING的契约,parser 立即报FATAL: SPACING cannot be less than MINSPACING。这证明INCREMENTAL LEF是带语义的契约升级,而非无脑覆盖。

4.2 Error-Checking Facility:分层式错误传播与熔断机制

LEF/DEF 5.8 的错误检查不是单层扫描,而是三层熔断:

  • Syntax Layer:检查分号、括号、关键字拼写(如LAYER误写为LAYERE)
  • Semantic Layer:检查规则一致性(如VIA的LAYER是否在 LEF 中定义)
  • Physical Layer:检查物理可行性(如NET的LAYER是否满足MINWIDTH)
# parser 的内部状态机示意 state = SYNTAX_CHECK; if (syntax_ok) state = SEMANTIC_CHECK; if (semantic_ok) state = PHYSICAL_CHECK; if (physical_violation) { if (violation_level == FATAL) { exit <p> <a href="https://download.csdn.net/download/cdamo/13216310" style="color:#ec7500;font-size:14px;"> 本文还有配套的精品资源,点击获取 </a> <img alt="menu-r.4af5f7ec.gif" src="https://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif" style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;"> </p>
返回列表