APR LEF规则乌龙引发的通孔打不上问题排查
专栏:iLoveIC July 31, 2026, 4:43 p.m. 23 阅读
经过层层抽丝剥茧,我们发现这是一场由 工艺规则(LEF)、通孔生成规则(VIARULE)和硬编码 VIA 定义 三者参数割裂引发的系统性乌龙事件。

一、问题现象

先进工艺节点物理实现中,出现一系列诡异现象:

  1. VIA5(ME5-ME6)无法生成,布线工具直接报错

  2. 修改ME5的MINIMUMCUT后,VIA5能生成了,但VIA4和VIA5在电源网络上依然有Adjacent Cut Spacing DRC违例

  3. 修改VIARULE后部分报错依然顽固存在

二、核心认知:LEF中控制通孔的四层独立机制

层级作用关键点
VI层定义通孔自身的物理尺寸和间距规则WIDTH 0.36 ; SPACING 0.54 ADJACENTCUTS 3 WITHIN 0.56
VIARULE工具动态生成通孔的规则RECT ... ; SPACING 0.7 BY 0.7
硬编码VIA工具直接调用的固定通孔宏VIA V56_2x2_HV ... RECT ...
金属层MINIMUMCUT宽线上必须打多少个通孔MINIMUMCUT 4 WIDTH 1.15 WITHIN 0.301

关键认知:四层独立生效、累加检查。改任何一层,其他层不会自动适配。硬编码VIA完全不受VIARULE修改影响——这是最大陷阱。

三、第一层问题:MINIMUMCUT的“死规则”

原始规则(5条FROMABOVE)

MINIMUMCUT 2 WIDTH 0.45 WITHIN 0.301 FROMABOVE ;
MINIMUMCUT 4 WIDTH 1.15 WITHIN 0.301 FROMABOVE ;   // 死规则
MINIMUMCUT 2 WIDTH 0.71 FROMABOVE LENGTH 0.71 WITHIN 1.351 ;
MINIMUMCUT 2 WIDTH 2.1 FROMABOVE LENGTH 2.1 WITHIN 2.751 ;
MINIMUMCUT 2 WIDTH 3.1 FROMABOVE LENGTH 10.1 WITHIN 7.001 ;

VIA5物理尺寸

  • 边长0.36,间距0.34,中心距0.70

  • 2x2阵列沿导线方向跨距 = 0.70

死循环计算

  • 规则要求:0.301窗口内放4个VIA5

  • 物理极限:4个VIA最小跨距0.70

  • 0.301 < 0.70 → 永远无法满足

规则是“逻辑与”,不是“逻辑或”

所有MINIMUMCUT累加生效,一条无解则全盘失败。线宽4.5时5条全触发,规则1/2无解 → 整层VIA非法。

修复后(新2条)

MINIMUMCUT 2 WIDTH 1.849 WITHIN 1.651 FROMABOVE ;
MINIMUMCUT 2 WIDTH 3.1 FROMABOVE LENGTH 10.1 WITHIN 4.901 ;

四、第二层问题:VIARULE与硬编码VIA的系统性间距不足

全层通孔“体检报告”

VIA层边长增强间距要求所需中心距当前中心距状态
VI1~VI40.070.090.160.165✅安全
VI5(单孔)0.360.540.90不适用✅安全
VI5(阵列)0.360.540.900.70/0.88❌需改

小孔为何安全?

2x2阵列中心距=0.165,边距=0.095 ≥ 0.09 ✅,跨距0.165 < MINIMUMCUT窗口0.201 ✅

VIARULE修改

genm1m2~genm4m5: SPACING 0.140.16
genm5m6:        SPACING 0.700.90

硬编码VIA修改(必须手动改坐标)

以下硬编码VIA定义完全独立于VIARULE,必须逐一修改:

VIA名称原中心距修改为
V56_2x2_HV0.700.90
V56_2x1_HV_E/W0.880.90
V56_1x2_HV_N/S0.880.90

V56_2x2_HV为例,孔中心从±0.35移到±0.45:

VIA V56_2x2_HV DEFAULT 
    LAYER VI5 ; 
    RECT -0.630000 -0.630000 -0.270000 -0.270000 ;
    RECT 0.270000 -0.630000 0.630000 -0.270000 ;
    RECT -0.630000 0.270000 -0.270000 0.630000 ;
    RECT 0.270000 0.270000 0.630000 0.630000 ;
    ...

五、第三层问题:改LEF不等于刷新数据库

物理VIA实例不会因LEF修改而自动移动。修改后必须删除旧VIA并重打。

特殊案例:ME4线宽0.21,打不下两排

  • 两排所需宽度 = 0.07+0.09+0.07+0.06(ENCLOSURE)=0.29 > 0.21

  • 工具只打了单排1x3,老规则中心距0.14边距0.07 < 0.09 → 报错

  • 改中心距0.16后边距0.09,满足规则,但必须删除旧数据重打

六、最终修改清单

修改对象原值新值
genm1m2~genm4m5 SPACING0.140.16
genm5m6 SPACING0.700.90
V56_2x2_HV中心距0.70中心距0.90
V56_2x1_HV_E/W中心距0.88中心距0.90
V56_1x2_HV_N/S中心距0.88中心距0.90
ME4 FROMABOVE旧5条新2条(同ME5)
ME1~ME3、ME4/ME5 FROMBELOW保持不动小孔安全

七、经验教训

  1. 四层规则独立生效:VI定义、VIARULE、硬编码VIA、MINIMUMCUT互不自动同步

  2. 检查窗口 > 通孔物理跨距:否则成“死规则”

  3. 硬编码VIA是“暗桩”:全文搜索VIA ... DEFAULT逐一核对

  4. 改LEF≠刷新数据库:必须删除旧VIA重新生成

  5. 改动范围要精确:小孔改间距后跨距0.16仍小于0.201,原有4孔规则可保留

核心方法论:回到物理尺寸做数学验证,而非在工具报错中盲目调试。

感谢阅读,更多文章点击这里:【专栏:iLoveIC】
最新20篇 开设专栏