您可以在一个 LEF 文件中定义所有元件库信息,但这样会产生一个复杂且难以管理的大文件。相反,您可以将信息分为两个文件,一个是 "technology "LEF 文件,另一个是 "cell library "LEF 文件。
一、a technology lef
A technology lef文件包含设计的所有 LEF 技术信息,如布局和布线设计规则以及层的流程信息。技术 LEF 文件可包含以下任何 LEF 语句:
[VERSION statement]
[BUSBITCHARS statement]
[DIVIDERCHAR statement]
[UNITS statement]
[MANUFACTURINGGRID statement]
[USEMINSPACING statement]
[CLEARANCEMEASURE statement ;]
[PROPERTYDEFINITIONS statement]
[FIXEDMASK ;]
[LAYER (Nonrouting) statement
| LAYER (Routing) statement] ...
[MAXVIASTACK statement]
[VIA statement] ...
[VIARULE statement] ...
[VIARULE GENERATE statement] ...
[NONDEFAULTRULE statement] ...
[SITE statement] ...
[BEGINEXT statement] ...
[END LIBRARY]
读入 LEF 文件时,总是先读入技术 LEF 文件
Units
定义 LEF 中的度量单位。这些值告诉您如何解释 LEF 文件中的数字。除数据库单位和电容外,所有单位类型都使用convertFactor固定单位。更多信息,请参阅"转换因子"。目前,UNITS 语句中出现的其他convertFactor值将被忽略。
UNITS 语句是可选语句,使用时必须在 LAYER 语句之前。
[UNITS
[TIME NANOSECONDS convertFactor ;] 将一个 LEF 时间单位解释为 1 纳秒
[CAPACITANCE PICOFARADS convertFactor ;] 将一个 LEF 电容单位解释为 1 picofarad(皮法)
[RESISTANCE OHMS convertFactor ;] 将一个 LEF 电阻单位解释为 1 欧姆
[POWER MILLIWATTS convertFactor ;] 将一个 LEF 功率单位解释为 1 毫瓦
[CURRENT MILLIAMPS convertFactor ;] 将一个 LEF 电流单位解释为 1 毫安
[VOLTAGE VOLTS convertFactor ;] 将一个 LEF 电压单位解释为 1 伏特
[DATABASE MICRONS LEFconvertFactor ;] 将一个 LEF 距离单位转换为数据库单位时解释为乘法,如果省略 DATABASE MICRONS 语句,数据库中的LEFconvertFactor默认值为 100。在这种情况下,1 微米等于 100 个数据库单位
[FREQUENCY MEGAHERTZ convertFactor ;] 将一个 LEF 频率单位解释为 1 兆赫兹
END UNITS]
Database Units Information
Database precision is relative to Standard International (SI) units. LEF values are converted to integer values in the library database as follows.
SI unit | Database precision |
1 nanosecond | = 1,000 DBUs |
1 picofarad | = 1,000,000 DBUs |
1 ohm | = 10,000 DBUs |
1 milliwatt | = 10,000 DBUs |
1 milliamp | = 10,000 DBUs |
1 volt | = 1,000 DBUs |
Convert Factors
Bus Bit Characters
- [BUSBITCHARS "delimiterPair" ;] (总线位字符对 )
指定 LEF 名称映射到其他数据库或从其他数据库映射到 LEF 名称时用于指定总线位的一对字符。这些字符必须用双引号括起来。例如
busbitchars "[]" ;
如果总线位字符之一作为常规字符出现在 LEF 名称中,则必须在该字符前使用反斜线 (),以防止 LEF 阅读器将该字符解释为总线位分隔符。
如果没有在 LEF 文件中指定 BUSBITCHARS 语句,默认值为"[]"
Clearance Measure
[CLEARANCEMEASURE1 {MAXXY | EUCLIDEAN} ;]
定义间隙间距要求,该要求将应用于 SPACING 和 SPACINGTABLE 语句中的所有对象间距。如果没有指定 CLEARANCEMEASURE 语句,则默认使用欧几里得距离。
MAXXY
使用最大的 x 或 y 距离作为对象间距。
EUCLIDEAN 欧几里得距离
使用欧几里得距离来计算对象间的间距。即x2+y2 的平方根。
Divider Character
[DIVIDERCHAR "character" ;]
当 LEF 名称映射到其他数据库或从其他数据库映射到 LEF 名称时,指定用于表示层次结构的字符。该字符必须用双引号括起来。例如
dividerchar "/" ;
如果分隔符作为常规字符出现在 LEF 名称中,则必须在该字符前使用反斜线 (),以防止 LEF 阅读器将该字符解释为层次分隔符。
如果没有在 LEF 文件中指定 DIVIDERCHAR 语句,默认值为"/"。
Extensions
[BEGINEXT "tag"
extension
ENDEXT]
在 LEF 文件中添加自定义语法,不使用该语法的工具可以忽略这些语法。如果您使用的是 5.1 或更高版本的 LEF/DEF,您还可以使用扩展名来添加您的版本尚未支持的新语法。
FIXEDMASK
不允许屏蔽转移。所有 LEF 宏引脚的掩码分配必须保持固定,不能转移到不同的掩码。如果存在 FIXEDMASK,LEF 宏引脚形状都应具有 MASK 赋值。该语句应包含在 LAYER 语句之前。
1. Layer (Cut)
LAYER layerName
TYPE CUT ;
[MASK maskNum ;]
[SPACING cutSpacing
[CENTERTOCENTER]
[SAMENET]
[ LAYER secondLayerName [STACK]
| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin [EXCEPTSAMEPGNET]
| PARALLELOVERLAP
| AREA cutArea
]
;] ...
[SPACINGTABLE ORTHOGONAL
{WITHIN cutWithin SPACING orthoSpacing} ... ;]
[ARRAYSPACING [LONGARRAY] [WIDTH viaWidth] CUTSPACING cutSpacing
{ARRAYCUTS arrayCuts SPACING arraySpacing} ... ;]
[WIDTH minWidth ;]
[ENCLOSURE [ABOVE | BELOW] overhang1 overhang2
[ WIDTH minWidth [EXCEPTEXTRACUT cutWithin]
| LENGTH minLength]
;] ...
[PREFERENCLOSURE [ABOVE | BELOW] overhang1 overhang2 [WIDTH minWidth] ;] ...
[RESISTANCE resistancePerCut ;]
[PROPERTY propName propVal ;] ...
[ACCURRENTDENSITY {PEAK | AVERAGE | RMS}
{ value
| FREQUENCY freq_1 freq_2 ... ;
[CUTAREA cutArea_1 cutArea_2 ... ;]
TABLEENTRIES
v_freq_1_cutArea_1 v_freq_1_cutArea_2 ...
v_freq_2_cutArea_1 v_freq_2_cutArea_2 ...
...
} ;]
[DCCURRENTDENSITY AVERAGE
{ value
| CUTAREA cutArea_1 cutArea_2 ... ;
TABLEENTRIES value_1 value_2 ...
} ;]
[ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4} ;] ...
[ANTENNAAREARATIO value ;] ...
[ANTENNADIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...)} ;] ...
[ANTENNACUMAREARATIO value ;] ...
[ANTENNACUMDIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...)} ;] ...
[ANTENNAAREAFACTOR value [DIFFUSEONLY] ;] ...
[ANTENNACUMROUTINGPLUSCUT ;]
[ANTENNAGATEPLUSDIFF plusDiffFactor ;]
[ANTENNAAREAMINUSDIFF minusDiffFactor ;]
[ANTENNAAREADIFFREDUCEPWL
( ( diffArea1 diffAreaFactor1 ) ( diffArea2 diffAreaFactor2 ) ...) ; ]
Defines cut layers in the design.
You must define layers in process order from bottom to top. For example:
poly masterslice
cut01 cut
metal1 routing
cut12 cut
metal2 routing
cut23 cut
metal3 routing
1.1 ACCURRENTDENSITY
The ACCURRENTDENSITY syntax is defined as follows:
{PEAK | AVERAGE | RMS}
{ value
| FREQUENCY freq_1 freq_2 ... ;
[CUTAREA cutArea_1 cutArea_2 ... ; ]
TABLEENTRIES
v_freq_1_cutArea_1 v_freq_1_cutArea_2 ... v_freq_2_cutArea_1 v_freq_2_cutArea_2 ...
...
} ;
-
PEAK: 指定layer的峰值极限。
-
AVERAGE: 指定layer的平均限值。
-
RMS: 指定layer的均方根限值。
-
value : 指定layer的最大电流限值,单位为毫安/平方微米(mA/μm2); 类型: Float
-
FREQUENCY : 以兆赫megahertz为单位指定频率值。您可以指定多个频率。如果指定多个频率值,必须按升序排列。 如果只指定一个频率值,则不存在频率相关性,表项被假定为适用于所有频率。 *类型:*Float
-
CUTAREA: 指定切割区域值,单位为平方微米(μm2)。您可以指定多个切割区域。如果指定多个切割区域值,必须按升序排列。 如果只指定一个切割区域值,则不存在切割区域相关性,表项被假定为适用于所有切割区域。 类型: Float
-
TABLEENTRIES: 定义 FREQUENCY 和 CUTAREA 语句中指定的每个频率和切割区域配对的最大电流,单位为 mA/μm2。 这些配对定义了 FREQUENCY 语句中第一个频率的每个切割区域,然后是第二个频率的切割区域,以此类推。给定切割区域和频率的最终值由表格值的线性插值计算得出。 类型 : Float
1.2 ANTENNAAREADIFFREDUCEPWL
ANTENNAAREADIFFREDUCEPWL ( ( diffArea1 diffAreaFactor1 ) ( diffArea2 diffAreaFactor2 ) ...)
表示根据切口的扩散面积,将切口面积乘以通过片断线性插值计算得出的diffAreaFactor。
diffArea值为float,单位为微米平方。diffArea值应该从 0 开始,然后单调递增,直到可能的最大扩散面积。
diffAreaFactor值是没有单位的float。diffAreaFactor值通常介于 0.0 和 1.0 之间。如果没有定义语句规则,PAR(mi) 公式中的diffMetalReduceFactor值默认为 1.0。
有关 PAR(mi) 公式和工艺天线模型的更多信息,请参阅附录 C "计算和修正工艺天线违规"。
1.3 ANTENNAAREAFACTOR
ANTENNAAREAFACTOR value [DIFFUSEONLY]
指定用于计算天线金属面积的乘法系数。DIFFUSEONLY 表示只有在相应层与扩散层相连时才使用当前的天线系数。*默认值:*1.0; 类型: 浮点
有关工艺天线计算的更多信息,请参阅附录 C "计算和修正工艺天线违规"。
注意:如果指定的值大于 1.0,计算出的区域将更大,违规现象将更频繁发生。
1.4 ANTENNAAREAMINUSDIFF
ANTENNAAREAMINUSDIFF minusDiffFactor
表示天线比率 cut_area 应减去与其相连的扩散面积。这意味着比率的计算公式为
比率 =(cutFactorx cut_area -minusDiffFactorx diff_area)/gate_area
例如,如果via2形状因连接到扩散形状而导致最终比率小于 0,那么 via2 形状上方的金属 3(或via3)的累积检查将从via2层添加累积值 0。(请参见附录 C "计算和修正工艺天线违规 "中的切割层工艺 天线 模型中的例 1)。
类型: 浮点
默认值:0.0
1.5 ANTENNAAREARATIO
ANTENNAAREARATIO value
使用未连接到扩散二极管的金属线面积指定最大合法天线比。有关工艺天线计算的更多信息,请参阅附录 C "计算和修正工艺天线违规"。类型: Integer
1.6 ANTENNACUMAREARATIO
ANTENNACUMAREARATIO value
使用未连接到扩散二极管的金属线面积指定累积天线比。有关工艺天线计算的更多信息,请参阅附录 C "计算和修复工艺天线违规"。类型: Integer
1.7 ANTENNACUMDIFFAREARATIO
ANTENNACUMDIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)}
使用连接到扩散二极管的金属线面积指定累积天线比率。您可以提供一个明确的比率值,也可以指定片断线性格式(PWL),在这种情况下,将使用扩散面积和比率输入值的线性插值计算累积比率。扩散输入值必须按升序指定。*类型: Integer
有关工艺天线计算的更多信息,请参阅附录 C "计算和修复工艺天线违规"。
1.8 ANTENNACUMROUTINGPLUSCUT
表示累积比率规则(即 ANTENNACUMAREARATIO 和 ANTENNACUMDIFFAREARATIO)与前一个布线层而不是前一个切割层一起累积。使用此方法可将金属和切割面积比率合并为一条规则。
有关工艺天线模型的更多信息,请参阅附录 C "计算和修正工艺天线违规"。
1.9 ANTENNADIFFAREARATIO
ANTENNADIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)}
使用连接到扩散二极管的金属线的面积指定天线比率。您可以提供明确的比率值,也可以指定片断线性格式(PWL),在这种情况下,比率是通过扩散面积和比率输入值的线性插值计算得出的。扩散输入值必须按升序指定。
类型: Integer
有关工艺天线计算的更多信息,请参阅附录 C "计算和修正工艺天线违规"。
1.10 ANTENNAGATEPLUSDIFF
ANTENNAGATEPLUSDIFF plusDiffFactor
表示天线比门面积包括扩散面积乘以plusDiffFactor。这意味着比率的计算公式为
ratio = cut_area / (gate_area +plusDiffFactorx diff_area)
如果定义了 ANTENNAGATEPLUSDIFF,则无需使用不带 "DIFF "的比率规则(ANTENNAAREARATIO、ANTENNACUMAREARATIO、ANTENNASIDEAREARATIO 和 ANTENNACUMSIDEAREARATIO 语句),因为 ANTENNADIFF*RATIO 语句已经考虑了零扩散面积。
类型: 浮点
默认值: 0.0
有关工艺天线模型的更多信息,请参阅附录 C "计算和修正工艺天线违规"。
1.11 ANTENNAMODEL
ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4}
指定层的氧化物模型。如果指定了 ANTENNAMODEL 语句,则该值将影响该层后面的所有 ANTENNA* 语句,直到指定了另一条 ANTENNAMODEL 语句为止。
默认值: OXIDE1,用于新的 LAYER 语句
由于 LEF 有时会递增使用,如果 ANTENNA 语句在同一氧化物模型中出现两次,则使用最后指定的值。对于任何给定的 ANTENNA 关键字,给定层上的每种金属氧化物只存储一个值或 PWL 表。
有关使用 ANTENNAMODEL 语法的示例,请参见例 1-10。
LAYER metal1
ANTENNAMODEL OXIDE1 ; #OXIDE1 not required, but good practice
ANTENNACUMAREARATIO 5000 ; #OXIDE1 values
ANTENNACUMDIFFAREARATIO 8000 ;
ANTENNAMODEL OXIDE2 ; #OXIDE2 model starts here
ANTENNACUMAREARATIO 500 ; #OXIDE2 values
ANTENNACUMDIFFAREARATIO 800 ;
ANTENNAMODEL OXIDE3 ;
ANTENNACUMAREARATIO 300 ;
ANTENNACUMDIFFAREARATIO 600 ;
...
END metal1
1.12 ARRAYSPACING
指定在the cut layer上使用的阵列间距规则。阵列间距规则适用于 3x3 或更大尺寸的大型通孔。
ARRAYSPACING 语法定义如下:
[ARRAYSPACING [LONGARRAY]
[WIDTH viaWidth] CUTSPACING cutSpacing
{ARRAYCUTS arrayCuts
SPACING arraySpacing} ... ;
]
CUTSPACING cutSpacing | Specifies the edge-of-cut to edge-of-cut spacing inside one cut array. 指定一个切割阵列内, 切割边缘 到 切割边缘的间距。 |
ARRAYCUTS arrayCuts SPACING arraySpacing | 表示在两个维度上尺寸大于或等于 (arrayCuts X arrayCuts) 的 a large via array 必须使用 N x N 个cut arrays(其中N=arrayCuts),与other cut array之间的间距大于或等于arraySpacing。 例如,如果arrayCuts= 3,则 2x3 和 2x4 阵列无需遵守阵列间距规则。但是,3x3 和 3x4 阵列必须遵守该规则(如果指定了 LONGARRAY 关键字,3x4 是合法的),而 4x4 或 4x5 阵列则违反了该规则,除非指定了arrayCuts= 4 规则。(See Array Spacing Rule Example 1). 如果指定多个 {ARRAYCUTS ...}语句,则必须按递增顺序指定arrayCuts值。(See Array Spacing Rule Example 3.) 指定多个 ARRAYCUTS 语句会为via array生成提供多种选择。 例如,可以定义arraySpacing= 1.0 的arrayCuts= 4 规则和arraySpacing= 1.5 的arrayCuts= 5 规则。无论哪种规则都是合法的,应用程序应选择使用哪种规则(大概是根据哪种规则在给定的通孔区域内产生的通孔数最多)。 |
LONGARRAY | 表示via可以使用NxM个cut arrays,其中N=arrayCuts*,M可以是任何值,包括大于*N 的值 (See Array Spacing Rule Example 2.) |
WIDTH viaWidth | 表示the array spacing rules仅适用于the via metal width大于或等于viaWidth 的情况。(See Array Spacing Rule Example 1.) |
Example 1-2 Array Spacing Rules
假设存在以下数组间距规则:
arrayspacing width 2.0 cutspacing 0.2 arraycuts 3 spacing 1.0 ;
任何金属宽度大于或等于 2.0 μm 的通孔都应在 3x3 切割阵列内使用 0.2 μm 的切割间距,切割阵列与其他切割阵列之间的间距应大于或等于 1.0 μm。这样就形成了图 1-1 所示的通孔。
除非指定 LONGARRAY 关键字,否则间隔 0.2 μm 的 3x4 或 3x5 切割阵列是违规的。这是因为 3x4 或 3x5 切割阵列内的 3x3 子阵列与其他切割阵列的间距不符合 1.0 μm。此外,任何更大的阵列,如 4x4 或 4x5 切分阵列,都会违反规定,因为 4x4 或 4x5 切分阵列内的 3x3 子阵列需要与其他切分阵列保持 1.0 μm 的间距。
使用切割阵列的大通孔。
arrayCuts=3:因此使用 3x3 切割阵列,切割间距 =0.2 μ。 在切割阵列内。viaWidth>=2.0 um;因此应在此通道中使用切割阵列。
阵列间距=1.0 微米 因此切割阵列之间需要 1.0 um 因此切割阵列之间需要 1.0 微米。
Array Spacing Rule Example 2
下面的数组间距规则与示例 1 相同,只是出现了 LONGARRAY 关键字,而没有指定 WIDTH 关键字,因此创建了如图 1-2 所示的 via:
arrayspacing longarray cutspacing 0.2 arraycuts 3 spacing 1.0 ;
2x2、2x3 或 2xM 切点的数组忽略此规则。
3x3 或 3xM 阵列与其他切割阵列的间距必须为 1.0 μm,切割间距为 0.2 μm。
4x4 或 4xM 阵列是违规的,因为该阵列与 4xM 阵列内的 3xM 子阵列之间没有 1.0 μm 的间距。
Array Spacing Rule Example 3
假设存在以下多个阵列间距规则:
ARRAYSPACING LONGARRAY CUTSPACING 0.2
ARRAYCUTS 3 SPACING 1.0
ARRAYCUTS 4 SPACING 1.5
ARRAYCUTS 5 SPACING 2.0 ;
应用程序可以选择:
间距为 1.0 μm 的 3xM 切分阵列;
间距为 1.5 μm 的 4xM 切分阵列;
或间距为 2.0 μm 的 5xM 切分阵列;
每个切分阵列内部的切分间距为 0.2。
无 WIDTH 值表示任何在两个维度上有三个以上通孔切割的通孔(即 3x3 和 3x4,但不包括 2x4)都必须遵循这些规则。
1.13 DCCURRENTDENSITY
以每平方微米毫安(mA/μm2)为单位,指定一定面积的通孔可承受的直流电流。有关使用 DCCURRENTDENSITY 语法的示例,请参见例 1-11。
DCCURRENTDENSITY 语法定义如下:
AVERAGE
{ value
| CUTAREA cutArea_1 cutArea_2 ... ;
TABLEENTRIES value_1 value_2 ...
} ;
-
AVERAGE:指定层的平均限制。
-
value :指定层的电流限值,单位为 mA/μm2。 类型: Float
-
CUTAREA :指定切割面积值,单位为平方微米。您可以指定多个切割区域值。如果指定多个切割区域值,必须以升序指定。 类型: Float
-
TABLEENTRIES :指定每个指定切割区域的最大电流密度,单位为mA/μm2。特定切割区域的最终值由表格值的线性插值计算得出。 类型: Float
1.14 ENCLOSURE
the cut layer的封闭规则。
ENCLOSURE 语法描述如下:
[ENCLOSURE
[ABOVE | BELOW] overhang1 overhang2
[ WIDTH minWidth [EXCEPTEXTRACUT cutWithin]
| LENGTH minLength]
;]
ENCLOSURE [ABOVE | BELOW] overhang1 overhang2
-
表示此切割层的任何矩形都需要在两条相对的边上以overhang1的长度悬空,在另外两条相对的边上以overhang2的长度悬空。(参见图1-3。)
-
类型: Float,单位为微米
-
如果指定 "下"(BELOW),则此切割层下面的the routing layers需要悬伸。如果指定 "上",则此切割层上方的the routing layers层需要悬伸。如果两者都不指定,则该规则适用于相邻的两个布线层。
WIDTH minWidth
-
表示只有当布线层的宽度大于或等于minWidth 时,才适用封闭规则。如果未指定最小宽度,则封闭规则适用于所有宽度(如同minWidth等于 0)。
-
类型: Float,以微米为单位
-
如果指定多个具有相同宽度(或无宽度)的 enclosure rules,则该宽度有多个合法的 enclosure rules,应用程序只需满足其中一个规则即可。如果您指定了多个具有不同minWidth值的 enclosure rules,则应用最大的minWidth规则,且该规则仍然小于或等于线宽。
例如,如果指定 0.0 μm、1.0 μm 和 2.0 μm 宽度的 enclosure rules,那么 0.5 μm 的导线必须符合 0.0 规则,1.5 μm 的导线必须符合 1.0 规则,2.0 μm 的导线必须符合 2.0 规则。(见例 1-3)。
EXCEPTEXTRACUT cutWithin
表示如果在小于或等于cutWithin*距离的两个金属层上存在具有相同金属形状的另一个通孔切口,则忽略该带 WIDTH 的 enclosure rules,而将最小宽度导线的 enclosure rules(即不使用 WIDTH 关键字)应用于通孔切口。(见例 1-4)。 *类型: Float,以微米为单位
LENGTH minLength
表示 enclosure rules仅在最长对边悬边的总长度(the total length of the longest opposite-side overhangs)大于或等于minLength 时适用。the total overhang length在通孔切割中心测量(见图 1-5 中的插图 F) 。 类型: Float,以微米为单位
Example 1-3 Enclosure Rules
下面的定义描述了一个切割层,它下面的m1和上面的m2有不同的封闭规则
LAYER via12
TYPE CUT ;
WIDTH 0.20 ; #cuts .20 x .20 squares
ENCLOSURE BELOW .03 .01 ; #m1: 0.03 on two opposite sides, 0.01 on other
ENCLOSURE ABOVE .05 .01 ; #m2: 0.05 on two opposite sides, 0.01 on other
RESISTANCE 10.0 ; #10.0 ohms per cut
...
END via12
下面的定义描述了如果金属宽度较宽,则需要额外封闭的切割层
LAYER via23
TYPE CUT ;
WIDTH 0.20 ; #cuts .20 x .20 squares
SPACING 0.15 #via23 edge-to-edge spacing is 0.15
ENCLOSURE .05 .01 ; #m2, m3: 0.05 on two opposite sides, 0.01 on
#other sides
ENCLOSURE .02 .02 WIDTH 1.0 ; #m2 needs 0.02 on all sides if m2 width >=1.0
#m3 needs 0.02 on all sides if m3 width >=1.0
ENCLOSURE .05 .05 WIDTH 2.0 ; #m2 needs 0.05 on all sides if m2 width >=2.0
#m3 needs 0.05 on all sides if m3 width >=2.0
...
END via23
如果金属 3和金属 4的宽度大于或等于 1.0 μm,以下定义描述的切割层要求金属3 的所有边上悬 0.07 μm,金属 4 的所有边上悬 0.09 μm
LAYER via34
TYPE CUT ;
WIDTH 0.25 ; #cuts .25 x .25 squares
ENCLOSURE .05 .01 ; #minimum width enclosure rule
ENCLOSURE BELOW .07 .07 WIDTH 1.0 ; #m3 needs .07 on all sides if m3 width >=1.0
ENCLOSURE ABOVE .09 .09 WIDTH 1.0 ; #m4 needs .09 on all sides if m4 width >=1.0
...
END via34
Example 1-4 Enclosure Rule With Width and ExceptExtraCut
下面的定义描述了一个切割层,它要求对边的封闭尺寸为 0.05 μm,其余两边的封闭尺寸为 0.0 μm,或者对边的封闭尺寸为 0.04 μm,其余两边的封闭尺寸为 0.01 μm。如果导线宽度大于或等于 0.03 μm,除非在 0.2 μm 范围内有额外的切割(多余切割),否则还要求在所有方向上都有 0.03 μm 的包围
LAYER via34
TYPE CUT ;
WIDTH 0.10 #cuts .10 x .10 squares
SPACING 0.10 ; #minimum edge-to-edge spacing is 0.10
ENCLOSURE 0.0 0.05 ; #overhang 0.0 0.05
ENCLOSURE 0.01 0.04 ; #or, overhang 0.01 0.04
#if width >= 0.3, need 0.03 0.03, unless extra cut across wire within 0.2μm
ENCLOSURE 0.03 0.03 WIDTH 0.3 EXCEPTEXTRACUT 0.2 ;
...
END via34
??? 例如图c,不需要另外两条边符合0.03、0.03的要求???
Example 1-5 Enclosure Rule With Length and Width
下面的定义描述了一个切割层,只要任意两个相对面的总长度大于或等于 0.7 μm,则要求相对面的封闭长度为 0.05 μm,另外两个面的封闭长度为 0.0 μm。否则,如果enclosure总长度小于或等于 0.7 μm,则要求所有边上都有 0.05 μm。如果金属层的宽度大于或等于 1.0 μm,还要求所有边长为 0.10 μm。(图 1-5举例说明了三种 ENCLOSURE 规则中的违规和可接受通孔)。
LAYER via34
TYPE CUT ;
WIDTH 0.20 #cuts .20 x .20 squares
SPACING 0.20 ; #via34 edge-to-edge spacing is 0.20
ENCLOSURE 0.05 0.0 LENGTH 0.7 ; #overhang 0.05 0.0 if total overhang >= 0.7
ENCLOSURE 0.05 0.05 ; #or, overhang 0.05 on all sides
ENCLOSURE 0.10 0.10 WIDTH 1.0 ; #if width >= 1.0, always need 0.10
...
END via34
1.15 LAYER LayerName
指定图层的名称。该名称在以后引用图层时使用
1.16 MASK maskNum
指定该层将使用多少个双层或三层图案掩码。maskNum变量必须是大于或等于 2 的整数,大多数应用程序只支持 2 或 3 的值。
1.17 PREFERENCLOSURE [ABOVE | BELOW] overhang1 overhang2 [WIDTH minWidth]
指定可提高制造良率的首选enclosure rules,而不是绝对必须满足的enclosure rules(请参阅 ENCLOSURE 关键字)。当 PREFERENCLOSURE 规则对密度和可布线性影响很小或没有影响时,应用中应使用该规则。
1.18 PROPERTY propName propVal
为 PROPERTYDEFINITIONS 语句中定义的图层属性指定数值或字符串值。指定的propName必须与 PROPERTYDEFINITIONS 语句中列出的propName一致。
1.19 RESISTANCE resistancePerCut
指定该层的每cut电阻值。没有自己的特定电阻值的LEF vias或没有每cut电阻值的 VIARULE 的 DEF vias可以使用此电阻值。 via电阻的计算使用resistancePerCut和基尔霍夫定律,用于典型的并联电阻计算。例如,如果 R =10 欧姆/cut,而via只有一个cut,则 R =10 ohms。如果via有两个cuts,则 R = (1/2) * 10 = 5 ohms。
1.20 SPACING
指定同一网络或不同网络的 via cuts之间允许的最小间距。对于同一网络上的 via cuts,该值可被 SAMENET 关键字的间距覆盖。(见例 1-6)。
[SPACING cutSpacing
[CENTERTOCENTER]
[SAMENET]
[ LAYER secondLayerName [STACK]
| ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin
[EXCEPTSAMEPGNET]
| PARALLELOVERLAP
| AREA cutArea]
;] ...
cutSpacing | 指定默认的最小via cuts间距,单位为微米。 类型:Float |
CENTERTOCENTER | 计算cut-center到cut-center的 cutSpacing 或 cutWithin 距离,而不是cut-edge到cut-edge的距离(默认值)。(请参见间距规则示例 4) |
SAMENET | 表示cutSpacing value仅适用于same-net cuts。SAMENET cutSpacing value应小于适用于different-net cuts的正常 SPACING cutSpacing value。 |
LAYER secondLayerName | 在the cut layer上的对象和第 2 层名称(2ndLayerName)上的对象之间应用spacing rule。第二层必须是 LEF 文件中已定义的a cut or routing layer,或者是 LEF 文件中声明的下一个routing layer。这样可以实现 "one layer look ahead",这在某些技术中是需要的。(请参见间距规则示例 1)。 |
STACK | 表示two different layers上的 same-net cuts如果对齐,可以堆叠(stacked)在一起。如果cuts的尺寸不一样,较小的cuts必须完全被较大的cuts覆盖才算合法。如果两个cuts尺寸相同,则cuts中心必须对齐才合法;否则,cuts之间必须有 cutSpacing。如果 cutSpacing 为 0.0,same-net cut vias可合法放置在任何位置,包括略微重叠的情况。(见间距规则例 7)。 大多数应用程序只允许在 secondLayerName 是当前 cut layer下面的 cut layer时进行 spacing checks and STACK checking。 |
ADJACENTCUTS {2 |3 | 4} WITHIN cutWithin | 仅当cut有两个、三个或四个via cuts,且相互之间的距离小于 cutWithin(以微米为单位)时,才应用the spacing rule。每个cut layer只能指定一条 ADJACENTCUTS 语句。更多信息,请参阅 "Adjacent Via Cuts"; Type: Float (distance) |
EXCEPTSAMEPGNET | 表示cuts之间不适用 ADJACENTCUTS 规则,如果它们在same net上,并且 on a power or ground net.。(参见间距规则示例 5)。 |
PARALLELOVERLAP | 表示在平行边缘重叠大于 0 的不同金属形状上的 cuts,需要在它们之间留出 cutSpacing 间距。 每个 cut layer只允许一个 PARALLELOVERLAP 间距值。该规则不适用于上方或下方有相同金属形状的cuts,这些金属形状覆盖了切割之间的重叠区域。(请参见间距规则示例 8)。 |
AREA cutArea | 表示任何面积大于或等于 cutArea 的cut都要求所有其他cuts的边到边间距大于或等于 cutSpacing。(见间距规则例 6)。 SPACING 语句应该已经存在,并适用于所有cuts。只有面积大于或等于 cutArea 的cuts才需要额外的间距,因此该关键字的 cutSpacing 必须大于默认间距。 如果包含 CENTERTOCENTER(中心点),则计算 cutSpacing 值时将从cut-center到cut-center,而不是从cut-edge到cut-edge。 Type: Float, specified in microns squared |
Example 1-6 Spacing Rule Examples
Spacing Rule Example 1
以下spacing rule定义了a cut与紧靠cut上方的routing之间所需的the cut spacing。该间距仅适用于the routing shape的 "outside edges",不适用于已经与cut shape重叠的a routing shape。
LAYER cut12
SPACING 0.10 ; #normal min cut-to-cut spacing
SPACING 0.15 LAYER metal2 ; #spacing from cut to routing edge above
...
END cut12
LAYER metal2
...
END metal2
Spacing Rule Example 2
下面的spacing rule规定,任何via如果有三个以上的相邻cuts,都需要额外的空间,如果一个via有超过 2x2 的cuts,就会出现这种情况(见图 1-6)。一个cut与其他三个cuts的距离在 0.25 μm 以内,需要大于或等于 0.22 μm 的间距。
LAYER CUT12
SPACING 0.20 ; #default cut spacing
SPACING 0.22 ADJACENTCUTS 3 WITHIN 0.25 ;
...
END CUT12
Adjacent Via Cuts 如果一个cut在任何方向(包括 45 度角)上都与另一个cut距离相近,则视为相邻切口。图 1-6 展示了典型间距值(即对角线间距大于 ADJACENTCUTS 距离值)下 2x2、2x3 和 3x3 通孔的相邻通孔切割。对于三个相邻cuts,ADJACENTCUTS 规则允许 1 x n vias和 2x2 vias的cut spacing较小,但要求 2x3、2x4 和 3xn 通孔的cut spacing较大。对于四个相邻cuts,该规则允许在 2xn 通孔上保持较小的cut spacing,但要求在 3xn 通孔上保持较大的切口间距。
如果 ADJACENTCUTS 间距值大于 VIARULE 间距值,则 ADJACENTCUTS 规则会覆盖 VIARULE GENERATE 语句中用于大型通孔的切割间距。
以下spacing rule规定,任何具有 3x3 或更多切口的通孔(即具有四个或更多相邻切口的切口,见图 1-6)都需要额外的空间。一个切口与其他四个切口的距离在 0.25 μm 以内,则需要大于或等于 0.22 μm 的间距。
SPACING 0.20 ; #default cut spacing
SPACING 0.22 ADJACENTCUTS 4 WITHIN 0.25
;...
以下间距规则表明,如果三个或更多切口的中心到中心间距小于 0.30 μm,则要求中心到中心间距大于或等于 0.30 μm。这相当于说,一个切口只能有另外两个中心到中心间距小于 0.30 μm 的切口。
SPACING 1.0 ;
Figure 1-7 Except Same PG Net Rule
a) 如果cuts是在电源net或地线net上,则允许。如果cuts在信号网上,则违规。
b) 如果cuts在同一电源net或地线net上,则允许。如果cuts在信号网上,则违规。
c) 如果cuts在同一电源net或地线net上,则允许。如果cuts在信号网上或不同网上,则违规。
以下间距规则表明,正常切割需要 0.10 μm 的边对边间距,面积大于或等于 0.02 μm² 的切割需要 0.12 μm 的边对边间距:
SPACING 1.0 ;
图 1-8 说明了以下间距规则:
a) Okay。切口平行!重叠 > 0;因此适用 1.5 PARALLELOVERLAP 规则。
b) Okay。切割的平行 重叠 = 0;因此 平行重叠规则 不适用,只需 1.0 间距。
c) Okay。切口没有平行重叠,因此 PARALLELOVERLAP 规则不适用,只需要 1.0 的间距。
d) Okay。切口重叠,但上下共用同一金属;因此 PARALLELOVERLAP 规则不适用,只需 1.0 间距。
e)违规。切口必须有上方或下方的共用金属,以覆盖切口之间的投影区域。
1.21 SPACINGTABLE间距表
指定要在切割层上使用的间距表。 SPACINGTABLE 语法定义如下:
SPACINGTABLE ORTHOGONAL
{WITHIN cutWithin SPACING orthoSpacing }...
;]
WITHIN cutWithin SPACING orthoSpacing
表示如果两个切口的平行重叠大于 0,且它们之间的距离小于 cutWithin,则正交方向上的任何其他切口必须大于或等于 orthoSpacing。(参见例 1-6 和图 1-9):Float,单位为微米(两个值均为微米)
Example 1-7 Spacing Table Orthogonal Rule
下面的示例展示了如何定义间距表正交规则:
图 1-9 间距表正交重叠区域
a) 如果两个cuts< cutWithin apart 并重叠,则正交重叠区域内不允许有其他切割。
b) 从 cutWithin 重叠区域计算正交重叠区域,并按 orthoSpacing 正交扩展切割。
c) A 和 B 的重叠为零; 因此不存在正交重叠区。
d) 该规则同时适用于 X 和 Y 方向。在这种情况下,A 和 C 在水平方向上重叠,B 就违反了规则。
1.22 TYPE CUT
指定该层用于contact-cuts。该层随后会在通孔和生成通孔的规则中被引用。
1.23 WIDTH minWidth
指定切割的最小宽度。在大多数技术中,这也是切割的唯一合法尺寸。 类型:Float,以微米为单位
2. Layer (Implant)
LAYER layerName
TYPE IMPLANT ;
[MASK maskNum ;]
[WIDTH minWidth ;]
[SPACING minSpacing [LAYER layerName2] ;] ...
[PROPERTY propName propVal ;] ...
END layerName
定义设计中的implant layers。每个层都有一个名称以及简单的间距和宽度规则。这些间距和宽度规则只影响合法cell的放置。这些规则与库方法、详细布局和filler cell support相互作用。您必须使用自己的 layer statements单独定义implant layers。
LAYER layerName | 指定layer的名称。该名称将在以后引用layer时使用。 |
LAYER layerName2 | 指定another implant layer的名称,该implant layer需要大于或等于 minspacing的额外间距。 |
MASK maskNum | 指定此layer将使用多少个双层或三层图案掩码。maskNum 变量必须是大于或等于 2 的整数,大多数应用程序只支持 2 或 3 的值。 |
PROPERTY propName propVal | 为 PROPERTYDEFINITIONS 语句中定义的layer 属性指定数值或字符串值。指定的 propName 必须与 PROPERTYDEFINITIONS 语句中列出的 propName 一致。 |
SPACING minSpacing | 指定layer的最小间距。该值会影响the legal cell placement。 类型:Float,单位为微米 |
TYPE IMPLANT | 标识该层为 an implant layer. |
WIDTH minWidth | 指定此layer的最小宽度。类型:Float,单位为微米 |
Example 1-8 Implant Layer
通常情况下,在一个implant layer上定义high-drive cells,在另一个implant layer上定义 low-drive cells。下面的示例在implant1上定义了high-drive cells,在implant2上定义了 low-drive cells。两个implant layers都覆盖整个单元。创建the placer and filler cell时,会尝试使相邻行的单元重叠合法化,以确保满足最小宽度和间距值。
LAYER implant1 #high-drive implant layer
TYPE IMPLANT ;
WIDTH 0.50 ; #implant rectangles must be >=0.50 microns wide
SPACING 0.50 ; #implant rectangles must be >=0.50 microns apart
END implant1
LAYER implant2 #low-drive implant layer
TYPE IMPLANT ;
WIDTH 0.50 ; #implant rectangles must be >=0.50 microns wide
SPACING 0.50 ; #implant rectangles must be >=0.50 microns apart
END implant2
假设the high-drive cells and low-drive cells 完全被各自的implant layers覆盖。由于没有指定implant 1 和mplant 2 之间的间距,因此可能会出现图 1-10 所示的布局。
请注意,您可以通过放入适当implant 类型的filler cells来纠正 A、C、D 和 E。但是,B 不能通过a filler cell来纠正--要么放置器必须避免它,要么您必须允许the filler cell或后处理命令移动单元格或修改the implant layer来纠正错误。
3. Layer (Masterslice or Overlap)
LAYER layerName
TYPE {MASTERSLICE | OVERLAP} ;
[MASK maskNum ;]
[PROPERTY propName propVal ;] ...
[PROPERTY LEF58_TYPE
"TYPE [NWELL | PWELL | ABOVEDIEEDGE | BELOWDIEEDGE | DIFFUSION | TRIMPOLY | TRIMMETAL | REGION]
];" ;
[PROPERTY LEF58_TRIMMEDMETAL
"TRIMMEDMETAL metalLayer [MASK maskNum]
]; " ;
END layerName
定义设计中的masterslice (非布线)层或overlap 层。Masterslice 层通常是多晶硅层,只有当单元 MACRO 在多晶硅层上有引脚时才需要masterslice 层。
The overlap layer通常应命名为 OVERLAP。它可用于 MACRO 定义,以形成直线形单元(rectilinear-shaped cells)和blocks (即 "L "形blocks )。
每个layer 都可以通过指定名称和设计规则来定义。您必须使用自己的图层语句layer statements单独定义masterslice or overlap layers。
必须按照从下到上的流程顺序定义layers 。例如
poly masterslice
cut01 cut
metal1 routing
cut12 cut
metal2 routing
cut23 cut
metal3 routing
LAYER layerName | 指定图层的名称。该名称将在以后引用图层时使用。 |
TYPE | Layer is fixed in the base array。如果masterslice 层中出现引脚,则必须定义通孔,以便routers 连接这些引脚和第一个路由层。masterslice 层上不允许有导线。 Routing tools路只能使用一个masterslice 层。如果定义了masterslice 层,则必须在masterslice 层和相邻路由层之间定义一个cut layer。 用于检查 rectilinear blocks重叠的图层。the macro obstruction statements中的障碍物描述指的就是重叠层。 |
MASK maskNum | 指定此图层将使用多少个双层或三层图案掩码。maskNum 变量必须是大于或等于 2 的整数,大多数应用程序只支持 2 或 3 的值。 |
PROPERTY propName propVal | 为 PROPERTYDEFINITIONS 语句中定义的图层属性指定数值或字符串值。指定的 propName 必须与 PROPERTYDEFINITIONS 语句中列出的 propName 一致。 |
Type Rule
类型规则可用于对masterslice层进行进一步分类。
您可以使用以下属性定义创建类型规则:
TYPE MASTERSLICE;
PROPERTY LEF58_TYPE
"TYPE [NWELL | PWELL | ABOVEDIEEDGE | BELOWDIEEDGE | DIFFUSION | TRIMPOLY
| TRIMMETAL | REGION]
;" ;
ABOVEDIEEDGE | BELOWDIEEDGE | 指定masterslice 层是一个特殊层,用于在该层上定义 OBS 的a hard macro,使 the die boundary of the above or below die不重叠。 |
DIFFUSION | 定义扩散层。 |
NWELL | 表示该图层为a nwell layer. |
PWELL | 表示该层为a pwell layer. |
REGION | 定义一个特殊的masterslice 层,用于定义区域的范围,在该范围内将应用在metal, cut, and/or trim metal layers中使用 REGION 属性定义的一组规则。 |
TRIMMETAL | 定义a trim metal layer。该层类型仅用于使用self-aligned double patterning(SADP)技术制造的metal layers。The TRIMMETAL layer具有 SADP 掩膜的形状,用于 "trim"、"cut"或 "block"在 SADP 处理的第一个掩膜步骤中创建的self-aligned metal lines。这些形状可以在macros/cells中预先定义,也可以在布线过程中添加到导线的线端。cut layers and metal layers中还有其他规则来定义 TRIMMETAL 层上这些图形的约束条件。 TRIMMETAL 层可以具有以下属性,以指示 TRIMMETAL 图形可以修剪(trim)哪个金属层或金属层的哪个掩模。金属层的 MASK 结构值应大于等于 2,以表示它是 SADP(或 DPT)层。TRIMMETAL 层也可以使用 MASK 结构来表示该层上的掩膜数量。 "TRIMMEDMETAL metalLayer [MASK maskNum] ; " ; |
TRIMPOLY | 为自对齐双图案self-aligned double patterning技术(SADP)定义a trim poly layer。Only cells would have shapes on that layer. |
下面的示例表明,macro A 定义了(0,0)至(100,100)的区域,与该macro 的位置有关,因此 the boundary of the above die不会重叠:
LAYER TOPDIE
TYPE MASTERSLICE
PROPERTY LEF58_TYPE "TYPE ABOVEDIEEDGE ;" ;
END TOPDIE
MACRO A
...
OBS
LAYER TOPDIE
RECT 0.000 0.000 100.000 100.000 ;
END
...
END A
Trimmed Metal Rule
Trimmed metal rules可用于指定 TRIMMETAL layer 上的图形试图trim的金属层。
您可以使用以下属性定义创建 a trimmed metal rule:
PROPERTY LEF58_TRIMMEDMETAL
"TRIMMEDMETAL metalLayer [MASK maskNum]; " ;
TRIMMEDMETAL metalLayer [MASK maskNum]
指定 TRIMMETAL 层上的形状要trim的金属层 metalLayer。如果给出 maskNum,则只trim metalLayer 上的 maskNum。 类型:Integer
下面是a double patterned layer TM1用于trim M1 的两个masks 的示例。由于 TM1 和 M1 都是 double-patterned,而 TRIMMEDMETAL 属性没有指定a mask,这意味着 TM1 的 MASK 1 会修剪trims M1 的 MASK 1,而 TM1 的 MASK 2 会trims M1 的 MASK 2。
LAYER TM1
TYPE MASTERSLICE ;
MASK 2 ;
PROPERTY LEF58_TYPE "TYPE TRIMMETAL ; " ;
PROPERTY LEF58_TRIMMEDMETAL "TRIMMEDMETAL M1 ; " ;
...
END TM1
...
LAYER M1
TYPE ROUTING ;
MASK 2 ;
...
END M1
下面的示例是 a single patterned TRIMMETAL TM2 layer,它trims only one mask of the double-patterned M2 layer。这由 TM2 的 TRIMMEDMETAL 属性中的 MASK 1 部分表示:
LAYER TM2
TYPE MASTERSLICE ;
PROPERTY LEF58_TYPE "TYPE TRIMMETAL ; " ;
PROPERTY LEF58_TRIMMEDMETAL "TRIMMEDMETAL M2 MASK 1 ; " ;
...
END TM2
LAYER M2
TYPE ROUTING ;
MASK 2 ;
...
END M2
4. Layer (Routing)
LAYER layerName
TYPE ROUTING ;
[MASK maskNum ;]
DIRECTION {HORIZONTAL | VERTICAL | DIAG45 | DIAG135} ;
PITCH {distance | xDistance yDistance} ;
[DIAGPITCH {distance | diag45Distance diag135Distance} ;]
WIDTH defaultWidth ;
[OFFSET {distance | xDistance yDistance} ;]
[DIAGWIDTH diagWidth ;]
[DIAGSPACING diagSpacing ;]
[DIAGMINEDGELENGTH diagLength ;]
[AREA minArea ;]
[MINSIZE minWidth minLength [minWidth2 minLength2] ... ;]
[[SPACING minSpacing
[ RANGE minWidth maxWidth
[ USELENGTHTHRESHOLD
| INFLUENCE value [RANGE stubMinWidth stubMaxWidth]
| RANGE minWidth maxWidth]
| LENGTHTHRESHOLD maxLength [RANGE minWidth maxWidth]
| ENDOFLINE eolWidth WITHIN eolWithin
[PARALLELEDGE parSpace WITHIN parWithin [TWOEDGES]]
| SAMENET [PGONLY]
| NOTCHLENGTH minNotchLength
| ENDOFNOTCHWIDTH endOfNotchWidth NOTCHSPACING minNotchSpacing
NOTCHLENGTH minNotchLength
]
;] ...
[SPACINGTABLE
[PARALLELRUNLENGTH {length} ...
{WIDTH width {spacing} ...} ... ;
[SPACINGTABLE
INFLUENCE {WIDTH width WITHIN distance SPACING spacing} ... ;]
|TWOWIDTHS {WIDTH width [PRL runLength] {spacing} ...} ... ;
]
;" ;]
[WIREEXTENSION value ; ]
[MINIMUMCUT numCuts WIDTH width [WITHIN cutDistance]
[FROMABOVE | FROMBELOW]
[LENGTH length WITHIN distance] ;] ...
[MAXWIDTH width ;]
[MINWIDTH width ;]
[MINSTEP minStepLength
[ [INSIDECORNER | OUTSIDECORNER | STEP] [LENGTHSUM maxLength]
| [MAXEDGES maxEdges] ;]
[MINENCLOSEDAREA area [WIDTH width] ;] ...
[PROTRUSIONWIDTH width1 LENGTH length WIDTH width2 ;]
[RESISTANCE RPERSQ value ;]
[CAPACITANCE CPERSQDIST value ;]
[HEIGHT distance ;]
[THICKNESS distance ;]
[SHRINKAGE distance ;]
[CAPMULTIPLIER value ;]
[EDGECAPACITANCE value ;]
[MINIMUMDENSITY minDensity ;]
[MAXIMUMDENSITY maxDensity ;]
[DENSITYCHECKWINDOW windowLength windowWidth ;]
[DENSITYCHECKSTEP stepValue ;]
[FILLACTIVESPACING spacing ;]
[ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4} ;] ...
[ANTENNAAREARATIO value ;] ...
[ANTENNADIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNACUMAREARATIO value ;] ...
[ANTENNACUMDIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNAAREAFACTOR value [DIFFUSEONLY] ;] ...
[ANTENNASIDEAREARATIO value ;] ...
[ANTENNADIFFSIDEAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNACUMSIDEAREARATIO value ;] ...
[ANTENNACUMDIFFSIDEAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNASIDEAREAFACTOR value [DIFFUSEONLY] ;] ...
[ANTENNACUMROUTINGPLUSCUT ;]
[ANTENNAGATEPLUSDIFF plusDiffFactor ;]
[ANTENNAAREAMINUSDIFF minusDiffFactor ;]
[ANTENNAAREADIFFREDUCEPWL ( ( diffArea1 diffMetalFactor1 )
( diffArea2 diffMetalFactor2 ) ...) ;]
[PROPERTY propName propVal ;] ...
[ACCURRENTDENSITY {PEAK | AVERAGE | RMS}
{ value
| FREQUENCY freq_1 freq_2 ... ;
[WIDTH width_1 width_2 ... ;]
TABLEENTRIES
v_freq_1_width_1 v_freq_1_width_2 ...
v_freq_2_width_1 v_freq_2_width_2 ...
...
} ;]
[DCCURRENTDENSITY AVERAGE
{ value
| WIDTH width_1 width_2 ... ;
TABLEENTRIES value_1 value_2 ...
} ;]
[PROPERTY LEF58_SPANLENGTHTABLE
"SPANLENGTHTABLE {spanLength}... [WRONGDIRECTION]
[ORTHOGONAL length] [EXCEPTOTHERSPAN otherSpanlength]
; " ;]
[PROPERTY LEF58_TYPE
"TYPE {POLYROUTING}] ;" ;
[PROPERTY LEF58_WIDTHTABLE
"WIDTHTABLE {width}...[WRONGDIRECTION] [ORTHOGONAL]
];" ;]
[PROPERTY LEF58_WIDTH
"WIDTH minWidth [WRONGDIRECTION]
;" ;]
END layerName
定义设计中的 routing layers。为每个层指定名称和设计规则后就定义了该层。必须使用各自的层语句单独定义 routing layers。
必须按照从下到上的流程顺序定义层。例如
poly masterslice
cut01 cut
metal1 routing
cut12 cut
metal2 routing
cut23 cut
metal3 routing
4.1 ACCURRENTDENSITY
以毫安/微米(mA/μm)为单位,指定该层上一定宽度的导线在一定频率下可承受的交流电流。
注:电流密度的真正含义是以毫安/平方微米(mA/μm²)为单位;然而,金属层的厚度是隐含在内的,因此本表中的单位是毫安/微米,其中只有导线宽度会发生变化。
ACCURRENTDENSITY 语法定义如下:
{PEAK | AVERAGE | RMS}
{ value
| FREQUENCY freq_1 freq_2 ... ;
[WIDTH width_1 width_2 ... ; ]
TABLEENTRIES
v_freq_1_width_1 v_freq_1_width_2 ...
v_freq_2_width_1 v_freq_2_width_2 ...
...
} ;
PEAK | 指定层的峰值电流限制。 |
AVERAGE | 指定层的平均电流限值。 |
RMS | 指定层的均方根电流限值。 |
value | 指定层的最大电流,单位为 mA/μm。 类型:Float |
FREQUENCY | 指定频率值,单位为兆赫。可以指定多个频率。如果指定多个频率值,必须按升序排列。 如果只指定一个频率值,则不存在频率相关性,表项(the table entries)被假定为适用于所有频率。 类型:Float |
WIDTH | 以微米为单位指定线宽值。您可以指定多个线宽。如果指定多个宽度值,必须按升序排列。 如果只指定一个宽度值,则不存在宽度依赖关系,表项(the table entries)被假定为适用于所有宽度。 类型:Float |
TABLEENTRIES | 定义 FREQUENCY(频率)和 WIDTH(宽度)语句中指定的每对频率和宽度的最大电流,单位为 mA/μm。 这些配对定义了 FREQUENCY 语句中第一个频率的每个宽度,然后是第二个频率的宽度,依此类推。 给定线宽和频率的最终值是通过对表中数值进行线性插值计算得出的。 这些宽度未根据任何加工收缩进行调整,因此应与 "drawn width "一致。 类型:Float |
Example 1-9 AC Current Density Statements
大多数 LEF 文件不包括峰值或平均值限制。对于数字信号路由来说,峰值限值并不是一个实际问题。平均值限值仅适用于直流(DC)限值,不适用于交流(AC)电流。
大多数技术的有效值(RMS)限值与频率无关,但 LEF 语法要求提供频率值,因此在实际应用中,频率值是一个单一的 1 值,如下例所示。在这种情况下,RMS 限值不会随频率变化。
以下示例定义了交流电流密度表( AC current density tables):
频率为 300Mhz 时,0.7 μm 的RMS 电流密度为 9.0 + (7.5 - 9.0) x (0.8 - 0.7) / (0.8 - 0.4) = 8.625 mA/μm。因此,0.7 μm 宽的导线可传输 8.625 x 0.7 = 6.035 mA 的RMS 电流。
频率为 600Mhz 时,0.7 μm 的RMS 电流密度为 7.5 + (6.8 - 7.5) x (0.8 - 0.7) / (0.8 - 0.4) = 7.325 mA/μm。因此,0.7 μm 宽的导线可传输 7.325 x 0.7 = 5.1275 mA 的RMS 电流。
LAYER met1
...
ACCURRENTDENSITY PEAK #peak AC current limit for met1
FREQUENCY 100 400 ; #2 freq values in MHz
WIDTH
0.4 0.8 1.6 5.0 10.0 ; #5 width values in microns
TABLEENTRIES
9.0 7.5 6.5 5.4 4.7 #mA/um for 5 widths and freq_1 (when the frequency #is 100 Mhz)
7.5 6.8 6.0 4.8 4.0 ; #mA/um for 5 widths and freq_2 (when the frequency #is 400 Mhz)
END met1 ;
100 Mhz 时 0.7 μm 处的峰值电流密度为 9.0 + (7.5 - 9.0) x (0.8 - 0.7) / (0.8 - 0.4) = 8.625 mA/μm,400 Mhax 时 0.7 μm 处的峰值电流密度为 7.5 + (6.8 - 7.5) x (0.8 - 0.7) / (0.8 - 0.4) = 7.325 mA/mm。然后在 300Mhz 频率之间进行内插,得到 8.625 + (7.325 - 8.625) x (400 - 300) / (400 - 100) = 8.192 mA/μm。
0.4 μm 处的RMS 电流密度为 7.5 mA/μm。因此,0.4 μm 宽的导线可承载 7.5 x .4 = 3.0 μm 的RMS 电流。
LAYER cut12
...
ACCURRENTDENSITY PEAK #peak AC current limit for one cut
FREQUENCY 10 200 ; #2 freq values in MHz
CUTAREA 0.16 0.32 ; #2 cut areas in um squared
TABLEENTRIES
0.5 0.4 #mA/um squared for 2 cut areas at freq_1 (10 Mhz)
0.4 0.35 ; #mA/um squared for 2 cut areas at freq_2 (200 Mhz)
ACCURRENTDENSITY AVERAGE #average AC current limit for via cut12
10.0 ; #mA/um squared for any cut area at any frequency
ACCURRENTDENSITY RMS #RMS AC current limit for via cut12
FREQUENCY 1 ; #1 freq (required by syntax; not really used)
CUTAREA 0.16 1.6 ; #2 cut areas in um squared
TABLEENTRIES
10.0 9.0 ; #mA/um squared for 2 cut areas at any frequency
....
END cut12 ;
4.2 ANTENNAAREADIFFREDUCEPWL ( ( diffArea1 diffMetalFactor1 )
( diffArea2 diffMetalFactor2 ) ...)
表示金属面积乘以 diffMetalReduceFactor,该因子是根据金属上的 diff_area 以片断线性插值计算得出的。(请参见附录 C "计算和修正工艺天线违规 "中的例 4)。这意味着比率的计算公式为: 比率 = (metalFactor x metal_area x diffMetalReduceFactor) / gate_area diffArea 值为浮点数,单位为微米平方。扩散面积值应该从 0 开始,单调递增到允许的最大扩散面积。diffMetalFactor 值是没有单位的浮点数值。diffMetalFactor 值通常介于 0.0 和 1.0 之间。如果没有定义规则,PAR(mi) 公式中的 diffMetalReduceFactor 值默认为 1.0。 有关 PAR(mi) 公式和制程天线模型的更多信息,请参阅附录 C "计算和修正制程天线违规"。
4.3 ANTENNAAREAFACTOR value [DIFFUSEONLY]
指定天线金属面积计算的乘法系数。DIFFUSEONLY 指定只有在相应层连接到扩散层时才使用当前天线系数。
默认值:1.0
类型:Float
有关工艺天线计算的更多信息,请参阅附录 C "计算和修正工艺天线违规"。
注意: 如果指定的值大于 1.0,计算的面积会更大,违规发生的频率也会更高。
4.4 ANTENNAAREAMINUSDIFF minusDiffFactor
表示天线比率金属面积应减去与其相连的扩散面积。这意味着比值的计算公式为:
ratio = (metalFactor x metal_area - minusDiffFactor x diff_area) /gate_area
如果得出的值小于 0,则应将其截断为 0。 例如,如果 metal2 形状因连接到扩散形状而导致最终比值小于 0,则对连接到 metal2 形状的 metal3(或 via2)进行累积检查时,将 metal2 层的累积值加为 0。(请参阅附录 C "计算和修正工艺天线违规 "中的例 1)
类型:Float
默认值:0.0
有关制程天线模型的更多信息,请参阅附录 C "计算和修正制程天线违规 "中的计算 PAR。
4.5 ANTENNAAREARATIO value
使用未连接到扩散二极管的金属线面积指定最大合法天线比。有关工艺天线计算的更多信息,请参阅附录 C "计算和修正工艺天线违规"。 类型:Integer
4.6 ANTENNACUMAREARATIO value
使用未连接到扩散二极管的导线面积指定累积天线比。有关工艺天线计算的更多信息,请参阅附录 C "计算和修正工艺天线违规":Integer
4.7 ANTENNACUMDIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)}
使用与扩散二极管连接的金属线面积指定累积天线比。您可以提供明确的比率值,也可以指定piece-wise linear format (PWL),在这种情况下,将使用扩散面积和比率输入值的线性插值计算累积比率值。扩散输入值必须按升序指定。
类型:Integer
有关工艺天线计算的更多信息,请参阅附录 C "计算和修正工艺天线违规"。
4.8 ANTENNACUMDIFFSIDEAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)}
使用与扩散二极管相连的金属线侧壁面积指定累积天线比。您可以提供明确的比率值或指定piece-wise linear format (PWL),在这种情况下,将使用扩散面积和比率输入值的线性插值计算累积比率值。扩散输入值必须按升序指定。
类型:Integer
有关工艺天线计算的更多信息,请参阅附录 C "计算和修正工艺天线违规"。
4.9 ANTENNACUMROUTINGPLUSCUT
表示the cumulative ratio rules累积比率规则(ANTENNACUMAREARATIO 和 ANTENNACUMDIFFAREARATIO)累积前一个cut layer 而不是前一个 metal layer。使用此规则可将metal and cut area ratios合并为一个累积比率规则。
注意: 此规则不影响 ANTENNACUMSIDEAREARATIO 和 ANTENNACUMDIFFSIDEAREA 模型。
有关工艺天线模型的更多信息,请参阅附录 C "计算和修正工艺天线违规 "中的计算 CAR。
4.10 ANTENNACUMSIDEAREARATIO value
使用未连接扩散二极管的金属线侧壁面积指定累积天线比。有关工艺天线计算的更多信息,请参阅附录 C "计算和修正工艺天线违规"。
4.11 ANTENNADIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)}
使用与扩散二极管连接的金属线面积指定天线比率。您可以提供明确的比率值,也可以指定片断线性格式 piece-wise linear format (PWL),在这种情况下,比率值是通过扩散面积和比率输入值的线性插值计算得出的。扩散输入值必须按升序指定。
类型:Integer
有关工艺天线计算的更多信息,请参阅附录 C "计算和修正工艺天线违规"。
4.12 ANTENNADIFFSIDEAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)}
使用与扩散二极管相连的金属线侧壁面积指定天线比率。您可以提供明确的比率值或指定片断线性格式 (PWL),在这种情况下,比率值是通过扩散面积和比率输入值的线性插值计算得出的。扩散输入值必须按升序指定。
类型:Integer
有关工艺天线计算的更多信息,请参阅附录 C "计算和修正工艺天线违规"。
4.13 ANTENNAGATEPLUSDIFF plusDiffFactor
表示天线比率栅极面积包括扩散面积乘以 plusDiffFactor。这意味着比率的计算公式为
ratio = (metalFactor x metal_area) / (gate_area + plusDiffFactor x diff_area) 不带 "DIFF "的比率规则(ANTENNAAREARATIO、ANTENNACUMAREARATIO、ANTENNASIDEAREARATIO、和 ANTENNACUMSIDEAREARATIO 语句),如果指定了 ANTENNAGATEPLUSDIFF 规则,则无需使用,因为 ANTENNADIFF*RATIO 语句已经考虑了零扩散面积。(请参阅附录 C "计算和修正过程天线违规 "中路由层过程天线模型示例中的例 3)
类型:Float
默认值:0.0
有关流程天线模型的更多信息,请参阅附录 C "计算和修正流程天线违规 "中的计算 PAR。
4.14 ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4}
指定该层的氧化物模型。如果指定 ANTENNAMODEL 语句,则该值将影响其后该层的所有 ANTENNA* 语句,直到指定另一条 ANTENNAMODEL 语句为止。
默认值:OXIDE1,用于新的 LAYER 语句
因为 LEF 有时是递增使用的,所以如果 ANTENNA 语句对同一氧化物模型出现两次,则使用最后指定的值。对于任何给定的 ANTENNA 关键字,给定层上的每种氧化金属只存储一个值或 PWL 表。
Example 1-10 Antenna Model Statement
LAYER metal1
ANTENNAMODEL OXIDE1 ; #OXIDE1 not required, but good practice
ANTENNACUMAREARATIO 5000 ; #OXIDE1 values
ANTENNACUMDIFFAREARATIO 8000 ;
ANTENNAMODEL OXIDE2 ; #OXIDE2 model starts here
ANTENNACUMAREARATIO 500 ; #OXIDE2 values
ANTENNACUMDIFFAREARATIO 800 ;
ANTENNAMODEL OXIDE3 ;
ANTENNACUMAREARATIO 300 ;
ANTENNACUMDIFFAREARATIO 600 ;
...
END metal1
4.15 ANTENNASIDEAREAFACTOR value [DIFFUSEONLY]
指定用于计算天线金属侧壁面积的乘法系数。DIFFUSEONLY 指定当前天线系数仅在相应层与扩散层相连时使用。
默认值:1.0
类型:Float
有关工艺天线计算的更多信息,请参阅附录 C "计算和修正工艺天线违规"。
4.16 ANTENNASIDEAREARATIO value
使用未连接到扩散二极管的金属线侧壁面积指定天线比。
有关工艺天线计算的更多信息,请参阅附录 C "计算和修正工艺天线违规":
类型: Integer
4.17 AREA minArea
指定layer上多边形所需的最小金属面积。如果没有 MINSIZE 规则,所有多边形的面积必须大于或等于 minArea。如果存在 MINSIZE 规则,所有多边形必须满足 MINSIZE 或 AREA 规则。有关使用这些规则的示例,请参见例 1-15。
类型: Float,以微米平方为单位
4.18 CAPACITANCE CPERSQDIST value
指定每个平方单元的电容,单位为每平方毫米皮法。用于模拟wire-to-ground电容。
4.19 CAPMULTIPLIER value
指定互连电容的乘数,以考虑附近导线引起的电容增加。
默认:1
类型:Integer
4.20 DCCURRENTDENSITY
指定该层给定宽度的导线可承受的直流DC电流,单位为毫安/微米(mA/μm)。
真正意义上的电流密度单位是每平方毫米毫安(mA/μm2);但是,金属层的厚度是隐含在内的,因此本表中的单位是每微米毫安,只有导线宽度会发生变化。
DCCURRENTDENSITY 语法定义如下:
AVERAGE
{ value
| WIDTH width_1 width_2 ... ;
TABLEENTRIES value_1 value_2 ...
} ;
AVERAGE | 指定层的平均电流限值。 |
value | 指定层的电流限值,单位 mA/μm。 |
WIDTH | 以微米为单位指定线宽值。您可以指定多个线宽。如果指定多个宽度值,必须按升序排列。 类型:浮Float |
TABLEENTRIES | 指定每个指定宽度的电流密度值,单位为 mA/μm。 给定线宽的最终值由表格值的线性插值计算得出。这些宽度未根据任何加工收缩进行调整,因此应与 "drawn width "一致。 类型:Float |
Example 1-11 DC Current Density Statements
以下示例定义了直流电流密度表:
LAYER met1
...
DCCURRENTDENSITY AVERAGE #avg. DC current limit for met1
50.0 ; #mA/um for any width
(or)
DCCURRENTDENSITY AVERAGE #avg. DC current limit for met1
WIDTH
0.4 0.8 1.6 5.0 20.0 ; #5 width values in microns
TABLEENTRIES
7.5 6.8 6.0 4.8 4.0 ; #mA/um for 5 widths
...
END met1 ;
0.4 μm 的平均电流密度为 7.5 mA/μm。因此,0.4 μm 宽的导线平均可承载 7.5 x 0.4 = 3.0 mA 的直流电流。
LAYER cut12
...
DCCURRENTDENSITY AVERAGE #avg. DC current limit for via cut12
10.0 ; #mA/um squared for any cut area
(or)
DCCURRENTDENSITY AVERAGE #avg. DC current limit for via cut12
CUTAREA 0.16 0.32 ; #2 cut areas in μm2
TABLEENTRIES
10.0 9.0 ; #mA/um squared for 2 cut areas
...
END cut12 ;
4.21 DENSITYCHECKSTEP stepValue
指定金属密度检查的步距,单位为距离。 类型:浮动
4.22 DENSITYCHECKWINDOW windowLength windowWidth
以距离单位指定校验窗口的尺寸。 类型:Float
4.23 DIAGMINEDGELENGTH diagLength
指定对角线边的最小长度。任何 45 度斜边的长度必须大于或等于 diagLength。 类型:Float,单位为微米
4.24 DIAGPITCH {distance | diag45Distance diag135Distance}
指定层的 45 度路由间距(45-degree routing pitch)。路由器使用间距(Pitch )获得最佳路由密度。
默认值:无
类型:Float,单位为微米
distance | 指定一个间距值(one pitch value),用于 45 度角和 135 度角方向。 |
diag45Distance diag135Distance | 指定 45 度角间距(45 度角路线之间的the center-to-center space)和 135 度角间距。 |
4.25 DIAGSPACING diagSpacing
指定 45 度角形状允许的最小间距(the minimum spacing)。
默认值:无
类型:浮动,以微米为单位
4.26 DIAGWIDTH diagWidth
指定 45 度角形状允许的最小宽度。
默认值:无
类型:浮动,以微米为单位
4.27 DIRECTION {HORIZONTAL | VERTICAL | DIAG45 | DIAG135}
指定首选路由方向。自动布线工具会尝试在层上按首选方向布线。典型的情况是在 metal1 和 metal3 层水平布线,在 metal2 层垂直布线。
HORIZONTAL | 最好与 x 轴平行布线。 |
VERTICAL | 最好与 Y 轴平行布线。 |
DIAG45 | 最好沿 45 度角布线。 |
DIAG135 | 最好沿 135 度角布线。 |
注:角度是从正 x 轴逆时针测量的。
4.28 EDGECAPACITANCE value
指定外围电容的浮点数值(单位:皮法拉/微米)。布局布线工具在两种情况下使用该值:
- 在布线前估算capacitance
- 计算布线后的segment capacitance
在第二种计算方法中,只有当您将层厚度或层高度设置为 0 时,工具才会使用该值。 在这种情况下,外围电容将在以下公式中使用:
segment capacitance= (layer capacitance per square x segment width x segment length)+ (外围电容peripheral capacitance x 2(segment width + segment length))
4.29 FILLACTIVESPACING spacing
指定金属填充和活动几何图形之间的间距。Specifies the spacing between metal fills and active geometries.
类型:Float
4.30 HEIGHT distance
Specifies the distance from the top of the ground plane to the bottom of the interconnect.
指定从接地平面顶部到互联器底部的距离。
类型:Float
4.31 LAYER layerName
指定layer的名称。该名称将在以后引用layer时使用。
4.32 MASK maskNum
指定此layer将使用多少个双层或三层图案掩码。maskNum 变量必须是大于或等于 2 的整数,大多数应用程序只支持 2 或 3 的值。
4.33 MAXIMUMDENSITY maxDensity
指定该层允许的最大金属密度(百分比)。minDensity 和 maxDensity 值代表金属密度范围,设计的所有区域都必须在此范围内。金属密度必须大于或等于 minDensity,小于或等于 maxDensity。 类型:Float
数值:介于 0.0 和 100.0 之间
Example 1-12 Minimum and Maximum Density
下面的示例指定了一个金属密度范围,其中最小金属密度必须大于或等于 20%,最大金属密度必须小于或等于 70%。
MINIMUMDENSITY 20.0 ;
MAXIMUMDENSITY 70.0 ;
4.34 MAXWIDTH width
指定层上允许的最大线宽(以微米为单位)。最大线宽定义为最大封闭矩形的宽度和高度的较小值。例如,MAXWIDTH 10.0 规定层上每条导线的宽度必须小于或等于 10.0 微米。
类型: Float
4.35 MINENCLOSEDAREA area [WIDTH width]
指定被金属包围的空白区域(即金属形成的a donut hole)的最小区域尺寸限制。
area | 指定孔的最小面积尺寸,单位为微米平方。 类型:浮动 |
width | 仅当导线孔的宽度大于width(以微米为单位)时,才应用最小面积尺寸限制。如果任何环绕donut hole的导线大于该值,则适用该规则。 类型:Float |
Example 1-13 Min Enclosed Area Statement
下面的 MINENCLOSEDAREA 示例规定孔的面积必须大于或等于 0.40 μm²。
LAYER m1
...
MINENCLOSEDAREA 0.40 ;
下面的 MINENCLOSEDAREA 示例规定,孔的面积必须大于或等于 0.30 μm²。但是,如果包围孔的任何导线的宽度大于 0.15 μm,则孔的面积必须大于或等于 0.40 μm²。如果包围孔的任何导线大于 0.50 μm,则孔的面积必须大于或等于 0.80 μm²。
LAYER m1
...
MINENCLOSEDAREA 0.30 ;
MINENCLOSEDAREA 0.40 WIDTH 0.15 ;
MINENCLOSEDAREA 0.80 WIDTH 0.50 ;
4.36 MINIMUMCUT
当via位于宽度大于width的宽导线或引脚上时,指定a via的cuts次数。MINIMUMCUT 规则适用于接触该特定金属层的所有通孔via。每层可指定多条 MINIMUMCUT 规则。
MINIMUMCUT 语法定义如下:
[MINIMUMCUT numCuts WIDTH width
[WITHIN cutDistance]
[FROMABOVE | FROMBELOW]
[LENGTH length WITHIN distance]
;] ...
numCuts | 当导线或引脚的宽度大于width时,指定通孔必须具有的cuts数量。 类型:Integer |
WIDTH width | 指定导线或引脚的宽度,单位为微米。 类型:Float |
WITHIN cutDistance | 表示numCuts via cuts 相互必须小于切口间距(cutDistance),这样才能算在一起,以符合the minimum cut rule。(见图 1-12)。 |
FROMABOVE | FROMBELOW | 表示该规则是否只适用于来自该层以上或以下的连接。 默认值:规则适用于来自上层和下层的连接。 |
LENGTH length WITHIN distance | 表示如果宽导线的宽度大于width ,长度大于length,且细导线上的通孔小于与宽导线的distance ,则该规则适用于直接连接到宽导线的细导线。(见图 1-11)。length 值必须大于或等于width 值。 如果存在 LENGTH 和 WITHIN,则该规则只检查连接到宽导线的细导线,而不检查宽导线本身。任何宽导线最小切割规则都需要单独的 MINIMUMCUT x WIDTH y ; 语句,且不包含 LENGTH 和 WITHIN。 类型:Float,以微米为单位 |
Example 1-14 Minimum Cut Rules
以下 MINIMUMCUT 定义显示了指定 MINIMUMCUT 规则的不同方法。
以下语法规定,从 metal3 或 metal5 连接大于 0.5 μm 的 metal4 导线时,需要进行两次通孔切割。
LAYER metal4
MINIMUMCUT 2 WIDTH 0.5 ;
以下语法规定,从 metal3 连接大于 0.7 μm 的 metal4 导线时,需要切割四个通孔。
LAYER metal4
MINIMUMCUT 4 WIDTH 0.7 FROMBELOW ;
以下语法规定,从 metal5 连接大于 1.0 μm 的 metal4 导线时,需要进行四次通孔切割。
LAYER metal4
MINIMUMCUT 4 WIDTH 1.0 FROMABOVE ;
以下语法规定,对于宽度大于 1.1 μm、长度大于 20.0 μm 的金属 4 线,需要进行两次通孔切割,且the via cut is less than 5.0 μm from the wide wire。图 1-11 举例说明了这一点。
LAYER metal4
MINIMUMCUT 2 WIDTH 1.1 LENGTH 20.0 WITHIN 5.0 ;
Figure 1-11 Minimum Cut Rule
以下语法规定,宽度大于 1.0 μm 的 metal4 导线需要两个通孔切口。通孔切口之间的距离必须小于 0.3 μm,以符合最小切口规则。图 1-12 举例说明了这一点。
MINIMUMCUT 2 WIDTH 1.0 WITHIN 0.3 ;
a) 违规。导线宽度大于 1.0 微米,因此需要切割 2 次。但是,这 2 个切口相距大于等于 0.3 微米,因此不能一起计算。
b) 好的。线宽大于 1.0 微米,因此需要切割 2 次。这 2 个切口之间的距离小于 0.3 微米,因此一起计算,符合规则。
4.37 MINIMUMDENSITY minDensity
指定该层允许的最小金属密度(百分比)。minDensity 和 maxDensity 值代表金属密度范围,设计的所有区域都必须在此范围内。金属密度必须大于或等于 minDensity,小于或等于 maxDensity。有关此语句的示例,请参见例 1-12。
类型:Float
Value:介于 0.0 和 100.0 之间
4.38 MINSIZE minWidth minLength [minWidth2 minLength2]
指定矩形的最小宽度和长度,该矩形必须能够适合该图层上的每个多边形(见图 1-13)。如果没有指定 "AREA "规则,则所有多边形都必须符合 MINSIZE 规则。如果指定了 "AREA "规则,则所有多边形必须符合 MINSIZE 或 "AREA "规则。
可以通过指定 minWidth2 和 minLength2 值列表来指定多个矩形。如果指定了多个矩形,只要其中任何一个矩形能适合多边形,就符合 MINSIZE 规则。
类型:Float,单位为微米,适用于所有值
Example 1-15 Minimum Size and Area Rules
假设最小尺寸和面积规则如下:
LAYER metal1
TYPE ROUTING ;
AREA 0.07 ; #0.20 um x 0.35 um = 0.07 um^2
MINSIZE 0.14 0.30 ; #0.14 um x 0.30 um = 0.042 um^2
....
图 1-13 说明了当 LAYER 语句中包含一条或两条规则时,这些规则的行为方式:
Figure 1-13 Minimum Size and Area Rules
下面的语句定义了 MINSIZE 规则,该规则规定每个多边形的最小面积必须是 0.07 μm2,或 0.14 x 0.30 μm 的矩形必须能够适合多边形,或 0.16 x 0.26 μm 的矩形必须能够适合多边形:
LAYER metal1
TYPE ROUTING ;
AREA 0.07 ; #0.20 x 0.35 um = 0.07 um^2
MINSIZE 0.14 0.30 0.16 0.26 ; #0.14 x 0.30 um = 0.042 um^2
#0.16 x 0.26 um = 0.0416 um^2
...
END metal1
4.39 MINSTEP
指定形状的最小步长或最短边长(the minimum step size, or shortest edge length)。MINSTEP 规则可确保在为形状创建掩膜时执行光学图案校正 (Optical Pattern Correction, OPC)。
注:A single layer只能有一种 MINSTEP 规则。它应包括 INSIDECORNER、OUTSIDECORNER 或 STEP 语句(可选 LENGTHSUM 值),或一个 LENGTHSUM 语句,或一个 MAXEDGES 语句。
MINSTEP 规则的示意图,请参见图 1-14。MINSTEP 的语法如下:
[MINSTEP minStepLength
[ [INSIDECORNER | OUTSIDECORNER | STEP]
[LENGTHSUM maxLength]
| [MAXEDGES maxEdges] ;]
minStepLength | 指定形状的最小步长或最短边长。The edge of a shape必须大于或等于此值,否则会出现违规。 类型:Float,单位为微米 |
INSIDECORNER | 表示内角的两条或两条以上连续边的长度小于 minStepLength 时发生违规。 如果同时定义了 LENGTHSUM,则只有当所有连续边(小于 minStepLength)的总长度大于 maxLength 时,才会发生违规。 图 1-14 中的形状 b 是一个内角。之所以认为是内角,是因为 >= minStepLength 的两条边(用粗线表示)与 <minStepLength 的连续短边(用虚线表示)相邻,形成了一个内角(或凹形)。 默认值:OUTSIDECORNER(外侧角) |
OUTSIDECORNER | 表示如果外角的两条或两条以上连续边的长度小于 minStepLength,则发生违规。 如果同时定义了 LENGTHSUM,则只有当所有连续边(小于 minStepLength)的总长度大于 maxLength 时,才会发生违规。 图 1-14 中的形状 a 显示了一个外角。之所以认为它是一个外角,是因为与小于 minStepLength(用虚线表示)的连续短边相邻的两条边 >= minStepLength(用粗线表示)形成了一个外角(或凸形)。 注:如果未指定 INSIDECORNER、OUTSIDECORNER 或 STEP,这是默认规则。 |
STEP | 表示如果一个步骤的一条或多条连续边的长度小于 minStepLength,则发生违规。 如果同时定义了 LENGTHSUM,则只有当所有连续边(小于 minStepLength)的总长度大于 maxLength 时,才会发生违规。 图 1-14 中的图形 f 显示了一个阶梯。之所以认为它是一个阶梯,是因为 >= minStepLength 的两条边(用粗线表示)与 <minStepLength 的连续短边(用虚线表示)相邻,形成了一个阶梯,而不是一个角。 默认:OUTSIDECORNER |
LENGTHSUM maxLength | 指定 OPC 在不导致新的 DRC 违规的情况下可以修正的连续短边(小于 minStepLength 的边)的最大总长度。 如果边的总长度大于 maxLength,则会发生违规。如果总长度小于或等于 maxLength,则不会发生违规。 |
MAXEDGES maxEdges | 指定最多允许 maxEdges 长度小于 minStepLength 的连续边,但连续超过 maxEdges 即为违规。通常情况下,大多数工具只允许 maxEdges 值为 0、1 或 2。maxEdges 值为 0 意味着任何边的长度都不能小于 minStepLength。 类型:整数 注意:maxEdges 值为 1 时,将检查 OUTSIDECORNER 和 INSIDECORNER 所涵盖的情况。但是,MAXEDGES 和 STEP 之间没有关系。 |
Example 1-16 Minimum Step Rules
下表显示了使用图 1-14 中的图形指定 MINSTEP 规则的结果。对于这些规则,假设 minStepLength 等于 0.05 μm,且每条虚线边的长度为 0.04 μm。
MINSTEP Rule | Result |
MINSTEP 0.05 ; | OUTSIDECORNER 是默认行为。因此,形状 a 和 d 属于违规,因为它们的连续边缘小于 0.05 μm。图形 b、c、e 和 f 没有进行外角检查。 |
MINSTEP 0.04 ; | OUTSIDECORNER 是默认行为。因此,形状 a 和 d 经过检查是合法的,因为它们的连续边缘大于或等于 0.04 μm。 |
MINSTEP 0.05 LENGTHSUM 0.08 ; | 形状 a 是合法的,因为它的连续边小于 0.05 μm,而边的总长度小于或等于 0.08 μm。形状 d 是违规的,因为尽管它的连续边小于 0.05 μm,但边的总长度大于 0.08 μm。 |
MINSTEP 0.05 LENGTHSUM 0.16 ; | 形状 a 和 d 是合法的,因为它们连续边缘的总长度小于或等于 0.16 μm。 |
MINSTEP 0.05 INSIDECORNER ; | 图形 b 和 e 属于违规,因为它们的连续边缘小于 0.05 μm。图形 a、c、d 和 f 不是内角检查。 |
形状 b 是合法的,因为它的连续边小于 0.05 μm,而边的总长度小于或等于 0.15 μm。形状 e 是违规的,因为尽管它的连续边小于 0.05 μm,但边的总长度大于 0.15 μm。 | |
MINSTEP 0.05 STEP ; | 图形 c 和 f 属于违规,因为它们的连续边缘小于 0.05 μm。图形 a、b、d 和 e 不是步骤检查。 |
MINSTEP 0.05 STEP LENGTHSUM 0.08 ; | 形状 c 是合法的,因为它的连续边小于 0.05 μm,而边的总长度小于或等于 0.08 μm。形状 f 是违规的,因为尽管它的连续边小于 0.05 μm,但边的总长度大于 0.08 μm。 |
MINSTEP 0.04 STEP ; | 形状 c 和 f 是合法的,因为它们的连续边缘大于或等于 0.04 μm。 |
图 1-15 显示了以下 MINSTEP MAXEDGES 规则的结果:
4.40 MINWIDTH width
指定路由层上合法对象的最小宽度。例如,MINWIDTH 0.15 规定每个对象的宽度必须大于或等于 0.15 μm。该值用于验证目的,不会影响路由宽度。WIDTH 语句定义了图层的默认路由宽度。
默认值:The value of the WIDTH statement
类型:Float,单位为微米
4.41 OFFSET {distance | xDistance yDistance}
指定the routing grid from the design origin for the layer的偏移量。该值用于将routing tracks与 standard cell boundaries对齐,从而帮助routers 在网格上获得良好的单元引脚形状。为获得最佳布线效果,大多数标准单元的 MACRO SIZE 边界与应与布线网格对齐的单元引脚中心之间有 1/2 间距偏移。通常情况下,最好不要设置 OFFSET 值,这样软件可以通过分析库来确定最佳偏移值,但在某些情况下有必要强制设置特定的偏移值。
一般来说,所有水平层的偏移量最好相同,所有垂直层的偏移量最好相同,这样不同层上的路由网格可以相互对齐。较高的层可以有更大的间距,但为了达到最佳效果,它们仍应每隔几条轨道与较低层的路由网格对齐,以提高堆叠通孔stacked-vias的效率。
默认值: 允许软件自行决定首选和非首选布线轨道的偏移值。
类型: Float,单位为微米
distance | 指定用于首选方向路由轨迹的偏移值。 |
xDistance yDistance | 指定垂直布线轨道的 x 偏移量和水平布线轨道的 y 偏移量。 |
4.42 PITCH {distance | xDistance yDistance}
指定layer所需的路由间距。间距用于生成 the routing grid(DEF TRACKS)。
更多信息,请参阅 "路由间距"。
类型:Float,单位为微米
distance | 指定一个同时用于 x 和 y 间距的间距值。 |
xDistance yDistance | 指定 x pitch (每个垂直路由轨之间的间距)和 y pitch (每个水平路由轨之间的间距)。 |
4.43 PROPERTY propName propVal
为 PROPERTYDEFINITIONS 语句中定义的 a layer property 指定数值或字符串值。指定的 propName 必须与 PROPERTYDEFINITIONS 语句中列出的 propName 一致。
4.44 PROTRUSIONWIDTH width1 LENGTH length WIDTH width2
指定如果突出线(a protrusion)的宽度短于length,则其宽度必须大于或等于width1 ,并且该突出线与宽度大于或等于width2 的导线相连(见图 1-16)。长度由宽度小于width1 的所有突起导线中的最短路径决定,并以导线的最短外缘测量。
类型:Float,以微米为单位
Example 1-17 Protrusion
下面的示例规定,如果突起的长度小于 0.60 μm,且其连接的导线宽度大于或等于 1.20 μm,则突起的宽度必须大于或等于 0.28 μm。
LAYER m1
...
PROTRUSIONWIDTH 0.28 LENGTH 0.60 WIDTH 1.20 ;
...
如果 PROTRUSIONWIDTH 中 LENGTH 的给定值为零,则突出线的长度无关紧要。在这种情况下,应始终检查突出导线的宽度,而与导线的长度无关。下面的示例说明了这一规则:
PROTRUSIONWIDTH 0.05 LENGTH 0 WIDTH 0.11 ; " ;
4.45 RESISTANCE RPERSQ value
指定正方形导线的电阻,单位为欧姆/平方。导线的电阻可定义为:
RPERSQU x 线长/线宽
4.46 SHRINKAGE distance
指定因蚀刻过程导致互连线路收缩而产生的值。实际线宽通过减去该常数值来确定。
类型:Float
4.47 SPACING?????
指定层上布线使用的间距规则。可以为一个层指定多个间距规则。请参阅 "使用间距规则"。 描述间距规则的语法定义如下:
[SPACING minSpacing
[ RANGE minWidth maxWidth
[ USELENGTHTHRESHOLD
| INFLUENCE influenceLength
[RANGE stubMinWidth stubMaxWidth]
| RANGE minWidth maxWidth]
| LENGTHTHRESHOLD maxLength
[RANGE minWidth maxWidth]
| ENDOFLINE eolWidth WITHIN eolWithin
[PARALLELEDGE parSpace WITHIN parWithin
[TWOEDGES]]
| SAMENET [PGONLY]
| NOTCHLENGTH minNotchLength
| ENDOFNOTCHWIDTH endOfNotchWidth
NOTCHSPACING minNotchSpacing
NOTCHLENGTH minNotchLength
]
;] ...
SPACING minSpacing | 指定different nets上两个几何图形之间允许的默认最小间距(以微米为单位)。 类型:Float |
RANGE minWidth maxWidth | 表示 the minimum spacing rule适用于宽度在指定范围内(即宽度大于或等于 minWidth 且小于或等于 maxWidth)的the layer上的对象。如果未指定范围,则该规则适用于所有对象。 类型:Float 注意:如果指定多个 RANGE 规则,则范围值不应重叠。 |
USELENGTHTHRESHOLD | 表示如果其他对象满足之前的 LENGTHTHRESHOLD 值,则应使用阈值间距规则(the threshold spacing rule)。 |
INFLUENCE influenceLength [RANGE stubMinWidth stubMaxWidth] | Indicates that any length of the stub wire that is less than or equal to influenceLength from the wide wire inherits the wide wire spacing 表示任何小于或等于宽导线influenceLength的the stub wire导线长度都继承宽导线间距。 类型:Float The influence rule适用于图层上宽度在指定范围内(即宽度大于或等于 stubMinWidth 且小于或等于 stubMaxWidth)的stub wires。如果未指定范围,则规则适用于所有stub wires。 类型:Float 注意:指定 INFLUENCE 关键字表示语句只检查the influence rule,而不检查正常间距。您还必须为正常间距检查指定单独的 SPACING 语句。 |
RANGE minWidth maxWidth | 指定可选的第二个宽度范围。如果两个对象的宽度都在定义的范围内(每个对象在不同的范围内),则适用spacing rule。要使一个对象的宽度位于一个范围内,它必须大于或等于 minWidth,小于或等于 maxWidth。 类型:Float 注意:如果指定多个 RANGE 规则,则范围值不应重叠。 |
LENGTHTHRESHOLD maxLength [RANGE minWidth maxWidth] | 指定 this spacing value的最大平行长度或与相邻金属物件的投影长度。 当未为该宽度范围指定LENGTHTHRESHOLD 时,minSpacing 值应小于或等于 "默认 "minSpacing 值。有关示例,请参阅 "使用间距规则"。 阈值间距规则适用于宽度在指定范围内的对象(即宽度大于或等于 minWidth 且小于或等于 maxWidth)。如果未指定范围,则规则适用于所有对象。 类型:Float 注意:如果指定多个 RANGE 规则,则范围值不应重叠。 |
ENDOFLINE eolWidth WITHIN eolWithin | 表示短于 eolWidth 的 an edge,即end-of-line(EOL)edge ,其间距应大于或等于 EOL 以外任何 eolWithin 距离(即小于 eolWithin)范围内的 eolSpace(见图 1-17)。 通常情况下,eolSpace 略大于图层上允许的最小间距。eolWithin 值必须小于允许的最小间距。 |
PARALLELEDGE parSpace WITHIN parWithin [TWOEDGES] | 表示 EOL 规则仅适用于距离 EOL 小于 parSpace 的平行边,以及距离 EOL 小于 parWithin 且超出 EOL 的 eolWithin 的平行边(见图 1-18)。 如果指定了 TWOEDGES,则只有当有两条平行边满足 PARALLELEDGE parSpace、eolWithin 和 parWithin 参数时,才会应用 EOL 规则(见图 1-19)。 |
SAMENET [PGONLY] | 表示最小间距值仅适用于同网金属。如果还指定了 PGONLY,则 minSpacing 值仅适用于电源网或接地网的同网金属。 此规则通常用于宽导线间距较宽的技术;但即使同网导线间距较宽,它仍允许最小间距。(见例 1-19)。 |
NOTCHLENGTH minNotchLength | 表示凹槽长度小于 minNotchLength 的任何凹槽,其凹槽间距必须大于或等于 minSpacing。(请参见图 1-26 中的插图 a)。 您为 minSpacing 指定的值应仅略大于正常的最小间距规则(通常在最小间距的 1x 到 1.5x 之间)。 类型:Float,单位为微米 如果指定的凹槽长度值为零,则凹槽长度无关紧要。换句话说,应始终检查凹槽的间距,而不考虑其长度。 注意: 每个图层只能指定一条 NOTCHLENGTH 规则。 |
ENDOFNOTCHWIDTH endOfNotchWidth NOTCHSPACING minNotchSpacing NOTCHLENGTH minNotchLength | 如果凹槽的宽度小于 endOfNotchWidth,凹槽间距小于或等于 minNotchSpacing,凹槽长度大于或等于 minNotchLength,则表示 U 形凹槽底端的凹槽金属需要大于或等于 minSpacing 的间距。缺口的范围需要间距。 为凹槽间距和 minSpacing 指定的值应仅略大于正常的最小间距规则(通常介于最小间距的 1x 和 1.5x 之间)。为 endOfNotchWidth 指定的值应略大于最小宽度规则(通常在 1x 到 1.5x 最小宽度之间)。 类型:浮点,单位为微米(适用于所有值) 注意: 每个图层只能指定一条ENDOFNOTCHWIDTH 规则。 |
Figure 1-19
Using Spacing Rules
间距规则适用于引脚到导线、障碍物到导线、通孔到导线以及导线到导线间距。这些要求规定了不同网络上两个几何体之间允许的默认最小间距。
使用 RANGE 参数定义时,间距值适用于宽度在指定范围内的所有对象。也就是说,该规则适用于宽度大于或等于指定最小宽度且小于或等于指定最大宽度的对象。
注意:如果指定多个 RANGE 参数,RANGE 值不应重叠。
在下面的示例中,两个相邻对象之间的默认最小间距为 0.3 μm。但是,对于宽度在 0.5 至 1.0 μm 之间的对象,间距为 0.4 μm。对于宽度在 1.01 至 2.0 μm 之间的物体,间距为 0.5 μm。
SPACING 0.3 ;
SPACING 0.4 RANGE 0.5 1.0 ;
SPACING 0.5 RANGE 1.01 2.0 ; #The RANGE begins at 1.01 and not 1.0 because
#RANGE values should not overlap.
阈值间距是导线宽度和邻近物体长度的函数。它通常用于通孔比导线宽的情况,即使存在通孔,也能使导线与导线之间的间距更小。
在下面的示例中,如果另一个物体的长度小于或等于 1.0 μm,则需要 0.24 μm 的稍小间距(见图 1-20)。
SPACING 0.28 ;
SPACING 0.24 LENGTHTHRESHOLD 1.0 ;
USELENGTHRESHOLD 参数指定,如果其他对象满足之前的 LENGTHRESHOLD 值,则应用阈值间距规则。
在下面的示例中,线宽在 1.5 至 9.99 μm 之间时,需要 0.32 μm 的较大间距。但是,如果另一个对象的长度小于或等于 1.0 μm,则采用较小的 0.28 μm 间距(见图 1-21)。
SPACING 0.28 ; #Default minimum spacing is >=0.28 um.
SPACING 0.28 LENGTHTHRESHOLD 1.0 ; #For short parallel lengths of <= 1.0 um,
#0.28 spacing is allowed.
SPACING 0.32 RANGE 1.5 9.99 USELENGTHTHRESHOLD ;
#Wide wires with 1.5 <= width <=9.99 need
#0.32 spacing unless the parallel run
#length is <= 1.0 from the previous rule.
影响间距规则用于支持与宽导线相连的网络继承宽导线间距。例如,连接到大型物体(如预布电线)上的短线需要更大的间距。连接到宽导线的金属片将继承用户定义的与宽导线距离的间距规则。
在图 1-22 中,当至少有一条金属线的宽度 >= Y 时,两条金属线之间的最小间距为 N。在此范围之外,则适用正常的间距规则 (Z)。
在下面的示例中,0.5 μm 的间距适用于从大物体伸出的存根的前 1.0 μm。此规则仅适用于存根导线;宽导线间距必须包含前一条规则。需要使用 SPACING 0.5 RANGE 2.01 2000.0 语句来获得宽导线本身的额外间距。
SPACING 0.5 RANGE 2.01 2000.0 ;
SPACING 0.28 ; #Minimum spacing is >= 0.28 um.
SPACING 0.5 RANGE 2.01 2000.0 ; #wide-wire >= 2.01 um wide requires 0.5um spacing
SPACING 0.5 RANGE 2.01 2000.0 INFLUENCE 1.000 ;
#Stub wires <= 1.0 um from wide wires >= 2.01
#require 0.5 um spacing.
有些流程只需要对某些宽度的存根导线使用 INFLUENCE 规则。在下面的示例中,只有宽度在 0.5 至 1.0 μm 之间的存根导线才需要 0.5 μm 的间距。
SPACING 0.28 ; #Minimum spacing is >= 0.28 um.
SPACING 0.5 RANGE 2.01 2000.0 ; #wide-wire >= 2.01 um wide requires 0.5um spacing
SPACING 0.5 RANGE 2.01 2000.0 INFLUENCE 1.00 RANGE 0.5 1.0 ;
#Stub wires with 0.5 <= width <= 1.0, and <= 1.0 um from
#wide wide wires >= 2.01 require 0.5 um spacing.
Example 1-18 EOL Spacing Rules
如果在 LEF 文件中包含以下路由层规则:
SPACING 1.0 ; #minimum spacing is 1.0 μm
SPACING 1.2 ENDOFLINE 1.3 WITHIN 0.6 ;
任何宽度小于 1.3 μm 的 EOL 都要求在 EOL 以外大于或等于 1.2 μm 的范围内,两侧各 0.6 μm 的范围内保持间距。图 1-23 包括合法间距和违反此规则的示例。
如果在 LEF 文件中包含以下路由层规则:
SPACING 1.0 ; #minimum spacing is 1.0 μm
SPACING 1.2 ENDOFLINE 1.3 WITHIN 0.6 PARALLELEDGE 1.1 WITHIN 0.5 ;
任何宽度小于 1.3 μm、平行边缘小于 1.1 μm、距离 EOL 在 0.5 μm 以内的线条,其间距必须大于或等于 EOL 以外 1.2 μm、EOL 两侧 0.6 μm 以内的间距。图 1-24 包括了合法间距和违反此规则的示例。
Figure 1-24
下面的路由层规则为两条平行边创建了 EOL 间距规则:
SPACING 1.0 ; #minimum spacing is 1.0 μm
SPACING 1.2 ENDOFLINE 1.3 WITHIN 0.6 PARALLELEDGE 1.1 WITHIN 0.5 TWOEDGES ;
Example 1-19 Same Net Spacing Rule
如图 1-25 所示,如果在 LEF 文件中包含以下路由层规则,同网电源或接地网可以使用 1.0 μm 的间距,即使它们的宽度在 2 μm 至 5 μm 之间:
LAYER M1
TYPE ROUTING ;
SPACING 1.0 ; #min spacing is 1.0
SPACING 1.5 RANGE 2.0 5.0 ; #need 1.5 spacing for 2 to 5 μm wide wires
SPACING 1.0 SAMENET PGONLY ;
Example 1-20 Notch Length Spacing Rule
下图说明了以下路由层规则:
SPACING 0.10 ;
SPACING 0.12 NOTCHLENGTH 0.15 ;
Figure 1-26 Notch Length Rule Definitions
Example 1-21 End Of Notch Width Spacing Rule
如果在 LEF 文件中包含以下布线层规则,则 U 形凹槽底端的凹槽金属的间距必须大于或等于 0.14 μm,如果凹槽金属的宽度小于 0.15 μm,凹槽间距小于或等于 0.16 μm,凹槽长度大于或等于 0.08 μm。有关这些规则的不同布局示例,请参见图 1-27。
SPACING 0.10 ; #default spacing
SPACING 0.14 ENDOFNOTCHWIDTH 0.15 NOTCHSPACING 0.16 NOTCHLENGTH 0.08 ;
Figure 1-27 End Of Notch Width Rule Definitions
4.48 SPACINGTABLE
指定图层布线所使用的间距表。一个层只能指定一个平行运行长度和一个影响间距表。有关使用间隔表的信息和示例,请参阅 "使用间隔表"。 描述间隔表的语法定义如下:
[SPACINGTABLE
PARALLELRUNLENGTH {length} ...
{WIDTH width {spacing} ...}... ;
[SPACINGTABLE
INFLUENCE {WIDTH width WITHIN distance
SPACING spacing} ... ;]
| TWOWIDTHS {WIDTH width [PRL runLength]
{spacing} ...} ... ;
;]
PARALLELRUNLENGTH {length} ... {WIDTH width {spacing} ...} | 指定两个对象之间的最大平行运行长度(微米)。如果两个对象的最大宽度大于宽度,且平行运行长度大于长度,则对象之间的间距必须大于或等于间距。即使不满足 PRL 值,第一个间距值也是给定宽度下的最小间距。 必须按递增顺序指定长度、宽度和间距值。 类型:浮点,单位为微米(适用于所有值) |
TWOWIDTHS {WIDTH width [PRL runLength] {spacing} ...} | 创建一个表格,其中两个对象之间的间距取决于两个对象的宽度(而不仅仅是最宽的宽度)。也可以选择取决于两个对象之间的平行运行长度 (PRL)。更多信息,请参阅 "双宽间距表"。 第一个宽度值应为 0,而不伴随运行长度定义。 SPACINGTABLE TWOWIDTHS 语句中的 PRL 值可以是负值,其解释方式与 SPACINGTABLE PARLLELRUNLENGTH 规则相同。 类型:浮点,单位为微米(适用于所有值) |
INFLUENCE {WIDTH width WITHIN distance SPACING spacing ...} | 创建一个表格,执行附近垂直导线之间的宽导线间距规则。如果一个对象的宽度大于宽度,且距离两条垂直导线的距离小于宽度,则垂直导线之间的间距必须大于或等于间距。 必须按递增顺序指定宽度值。 类型:浮动,单位为微米(适用于所有值) 注意: 只有先指定 PARALLELRUNLENGTH 表,才能指定 INFLUENCE 表。 |
Specifying SPACING Statements with SPACINGTABLE
可以用 SPACINGTABLE 语句指定某些 SPACING 语句。例如,可以用 SPACINGTABLE 指定以下 SPACING 语句:
SPACING x SAMENET ___ ;
SPACING x ENDOFLINE ___ ;
SPACING x NOTCHLENGTH ___ ;
SPACING x ENDOFNOTCHWIDTH ___ ;
这些 SPACING 检查与 SPACINGTABLE 检查是正交的,但对于同网对象,SAMENET 间距将优先于 SPACINGTABLE。
但是,不能使用 SPACINGTABLE 指定某些 SPACING 语句(如下所示),因为这些语句会产生语义错误。
SPACING x ;
SPACING x RANGE ___ ;
SPACING x LENGTHTHRESHOLD ___ ;
Using Spacing Tables
有些流程有复杂的宽度和长度阈值规则。与其使用不同的 LENGTHRESHOLD 和 RANGE 语句创建多个 SPACING 规则,不如在间距表中定义信息。
例如,如图 1-28 所示,典型的 90 纳米 DRC 手册可能包含以下规则:
0.15 μm spacing | |
Either width>0.25 μm and parallel length>0.50 μm | 0.20 μm spacing |
Either width>1.50 μm and parallel length>0.50 μm | 0.50 μm spacing |
Either width>3.00 μm and parallel length>3.00 μm | 1.00 μm spacing |
Either width>5.00 μm and parallel length>5.00 μm | 2.00 μm spacing |
这些规则转化为以下 SPACINGTABLE PARALLELRUNLENGTH 语句:
LAYER metal1
...
SPACINGTABLE
PARALLELRUNLENGTH 0.00 0.50 3.00 5.00 #lengths must be increasing
WIDTH 0.00 0.15 0.15 0.15 0.15 #max width>0.00
WIDTH 0.25 0.15 0.20 0.20 0.20 #max width>0.25
WIDTH 1.50 0.15 0.50 0.50 0.50 #max width>1.50
WIDTH 3.00 0.15 0.50 1.00 1.00 #max width>3.00
WIDTH 5.00 0.15 0.50 1.00 2.00 ; #max width>5.00
...
END metal1
使用 SPACINGTABLE PARALLELRUNLENGTH 语句,可以按以下方式描述规则:
1. 找出两个对象的最大宽度。
2. 找出最大宽度大于表格行宽值的最低表格行。即使最大宽度小于或等于表格行宽,也会使用第一行。
3. 查找平行运行长度大于表格 PRL 值的最右侧表格列。即使对象的平行运行长度小于或等于表格 PRL 值,也会使用第一个列间距值。
根据定义,宽度是对象的较小尺寸(即每个对象的宽度必须小于或等于其长度)。
Influence Spacing Tables
即使导线很窄,流程中也经常需要第二个间距表来执行附近垂直导线之间的宽导线间距规则。图 1-29 展示了这种情况。使用下面的 SPACINGTABLE INFLUENCE 语法描述该表:
SPACINGTABLE INFLUENCE
{WIDTH width WITHIN distance SPACING spacing} ... ;
如果一根导线的宽度大于宽度,而它与其他两根导线之间的距离小于距离,则其他导线之间的间距必须大于或等于间距。通常,距离和间距的值是相同的。请注意,距离光环会水平延伸,但不会延伸到边角。
根据定义,宽度是对象的较小尺寸(即宽度小于或等于大导线的长度)。
宽导线规则通常与 SPACINGTABLE PARALLELRUNLENGTH 值中较大的宽度和间距值相匹配。前面描述的规则转化为以下 SPACINGTABLE INFLUENCE 语句:
LAYER metal1
...
SPACINGTABLE INFLUENCE
WIDTH 1.50 WITHIN 0.50 SPACING 0.50 #w>1.50, dist<0.50, needs sp>=0.50
WIDTH 3.00 WITHIN 1.00 SPACING 1.00 #widths must be increasing
WIDTH 5.00 WITHIN 2.00 SPACING 2.00 ;
...
END metal1
Two-Width Spacing Tables
您可以创建一个执行间距规则的表格,该表格取决于两个对象的宽度,而不仅仅是最宽的宽度,还可以选择取决于两个对象之间的平行长度。您可以使用此表替换现有的 SPACING ...RANGE...RANGE(间距...RANGE)规则,使其更易于阅读,并将平行运行长度的影响包含在一个通用表中。使用以下 SPACINGTABLE TWOWIDTHS 语法来描述此表:
SPACINGTABLE
TWOWIDTHS {WIDTH width [PRL runLength] {spacing} ... } ... ;
要找到所需的间距,需要使用一个二维表,该表的行标题和列标题隐含了相同的宽度(以及可选的平行运行长度)。每个宽度行中的间距值必须与宽度行数完全相同。表格中从上到下的宽度和运行长度值必须相同或递增。表格中从左到右、从上到下的间距值必须相同或递增。
给定宽度为 1、2 和 runLength 为平行重叠的两个对象,请使用以下方法找出间距:
1.查找最后一行中 width1 大于表格行宽且 runLength 大于表格行运行长度的行。如果不存在表格行运行长度,则不检查该行的 runLength 值(只检查 width1 是否大于表格行宽)。
2. 查找最右侧的一列,其中 width2 均大于表格列宽,且 runLength 均大于表格列运行长度。如果不存在表格列运行长度,则不检查该列的 runLength 值(只检查 width2 是否大于表格列宽)。
3. 匹配行和列的交集即为所需间距。
例如,假设 DRC 手册中描述了以下规则:
0.15 μm spacing | |
Either width>0.25 μm and parallel length>0.0 μm | 0.20 μm spacing |
Both width>0.25 μm and parallel length>0.0 μm | 0.25 μm spacing |
Either width>1.50 μm and parallel length>1.50 μm | 0.50 μm spacing |
Both width>1.50 μm and parallel length>1.50 μm | 0.60 μm spacing |
Either width>3.00 μm and parallel length>3.00 μm | 1.00 μm spacing |
Both width>3.00 μm and parallel length>3.00 μm | 1.20 μm spacing |
这些规则转化为下面的空间表格:
SPACINGTABLE TWOWIDTHS
# width= 0.00 0.25 1.50 3.0
# prl= none 0.00 1.50 3.0
# ----------------------
WIDTH 0.00 0.15 0.20 0.50 1.00
WIDTH 0.25 PRL 0.0 0.20 0.25 0.50 1.00
WIDTH 1.50 PRL 1.50 0.50 0.50 0.60 1.00
WIDTH 3.00 PRL 3.00 1.00 1.00 1.00 1.20 ;
请注意,必须同时超过宽度和平行运行长度(如果指定),才能索引到行和列。因此,在本示例中:
4.49 THICKNESS distance
指定互连的厚度。
类型:Float
4.50 TYPE ROUTING
标识该层为可路由层。
4.51 WIDTH defaultWidth
指定层上所有常规布线使用的默认路由宽度。
类型:Float
4.52 WIREEXTENSION value
指定导线在通孔处延伸的距离。必须指定一个大于布线宽度一半的值。
默认值:导线延伸距离为布线宽度的一半
类型:Float
注意:WIREEXTENSION 语句只能扩展导线,不能扩展通孔。对于 65nm 及以下制程,不再推荐使用 WIREEXTENSION,因为如果导线和通孔的宽度不同,可能会违反一些提前规则。
下图显示了 WIREEXTENSION 在导线和通孔宽度相同和不同时的情况:
Figure 1-30 Illustration of WIREEXTENSION
类型规则可用于进一步对路由层进行分类。
您可以使用以下属性定义创建类型规则:
TYPE ROUTING;
PROPERTY LEF58_TYPE
"TYPE {POLYROUTING};" ;
表示应将多晶硅层视为布线层。多晶硅层可为金属布线层有限的设计提供额外的布线资源。
4.53 Span Length Table Rule
跨度长度表规则可用于指定路由层上所有允许的合法跨度长度。
您可以使用以下属性定义创建跨度长度表规则:
PROPERTY LEF58_SPANLENGTHTABLE
"SPANLENGTHTABLE {spanLength} ... [WRONGDIRECTION]
[ORTHOGONAL length] [EXCEPTOTHERSPAN otherSpanlength]
; " ;
ORTHOGONAL length | 指定矩形对象的两个内角之间的长度必须大于或等于length。类型:Float,单位为微米 |
EXCEPTOTHERSPAN otherSpanlength | 表示只有当垂直方向上的跨度长度大于指定的 otherSpanlength 时,跨度长度规则才适用。必须在使用 RECTONLY 的图层中定义此构造。否则,在多边形中,正交方向上的跨距可能会模糊不清。 类型:Float,单位为微米 |
SPANLENGTHTABLE {spanLength)}... | 指定路由层上所有允许的合法跨距长度。所有给定的跨距长度都是精确值,只有最后一个跨距长度大于等于该值。一个对象在两个方向上所有可能的跨距长度都应根据给定的跨距长度值进行检查。最多可以定义两个 SPANLENGTHTABLE 间距表,一个有 WRONGDIRECTION,另一个没有。 类型:Float,以微米为单位 |
WRONGDIRECTION | 请注意,使用 WRONGDIRECTION 会改变 DEF NETS 部分中任何错误路由宽度的解释。如果指定了 WRONGDIRECTION,那么 DEF NETS 部分中的任何错误路由都将使用该层的 WRONGDIRECTION 宽度,除非网或路由有一个宽度大于 WRONGDIRECTION 宽度的 NONDEFAULTRULE。但是,隐含的默认路由扩展仍然是首选方向宽度的一半。 一些较老的工具可能无法理解这种行为。通常情况下,它们仍会正确读/写和舍入 DEF 路由,但不会理解错误路由的宽度会稍大一些。如果这些工具检查错误路由宽度,那么 DRC 规则可能会标记错误的违规行为。宽度错误的 RC 提取也会标记错误,不过错误路由通常较短,宽度差异较小,因此 RC 错误通常可以忽略不计。 |
Span Length Table Rule Examples
下面的示例说明了 SPANLENGTHTABLE {spanLength}... ORTHOGONAL 长度和 SPANLENGTHTABLE {spanLength}... WRONGDIRECTION(首选方向为水平):
Figure 1-31 Illustration of SPANLENGTHTABLE
4.54 Width Table Rules
您可以使用宽度表规则来定义路由层上所有允许的合法宽度。
您可以使用以下属性定义来定义宽度表规则:
PROPERTY LEF58_WIDTHTABLE
"WIDTHTABLE {width}... [WRONGDIRECTION] [ORTHOGONAL]
;" ;
ORTHOGONAL | 如果指定了 WIDTHTABLE WRONGDIRECTION,则指定矩形对象两个内角之间的正确或错误方向宽度中的一个宽度必须大于或等于相应方向 WIDTHTABLE 中的第一个宽度值。否则,在垂直或水平方向上,角之间的宽度必须大于或等于 WIDTHTABLE(两个方向)中的第一个宽度值。 类型:浮点,单位为微米 |
WIDTHTABLE {width}... | 定义路由层上所有允许的合法宽度。除了最后一个宽度等于或大于该值外,所有给定宽度都是精确宽度值。 应使用 WIDTH 语法定义层上的默认路由宽度,该宽度应与 WIDTHTABLE 语句中的某个值相匹配。如果 WIDTHTABLE 的最后一个值也表示精确宽度,则可以使用带有最后一个值的 MAXWIDTH 语句来表示。 一个多边形将被分割成多个矩形,只有矩形的较短尺寸会根据允许的法定宽度进行检查。 最多可以定义两个 WIDTHTABLE 间距表,一个有 WRONGDIRECTION,另一个没有。 类型:浮点,单位为微米。 |
WRONGDIRECTION | 指定曼哈顿路由层上方向与 DIRECTION 中指定方向垂直的导线的允许合法宽度。 请注意,使用 WRONGDIRECTION 会改变 DEF NETS 部分中任何错误路由宽度的解释。如果指定了 WRONGDIRECTION,那么 DEF NETS 部分中的任何错路路由都将使用该层的 WRONGDIRECTION 宽度,除非网或路由具有宽度大于 WRONGDIRECTION 宽度的 NONDEFAULTRULE。但是,隐含的默认路由扩展仍然是首选方向宽度的一半。 一些较老的工具可能无法理解这种行为。通常情况下,它们仍会正确读/写和舍入 DEF 路由,但不会理解错误路由的宽度会稍大一些。如果这些工具检查错误路由宽度,那么 DRC 规则可能会标记错误的违规行为。宽度错误的 RC 提取也会标记错误,不过错误路由通常较短,宽度差异较小,因此 RC 错误通常可以忽略不计。 |
以下宽度表规则表明,宽度必须为 0.10 μm、0.15 μm、0.20 μm、0.25 μm、0.30 μm,以及大于或等于 0.40 μm。
MAXWIDTH 0.40 ; # To define legal width =, instead of >=, 0.40 μm.
PROPERTY LEF58_WIDTHTABLE
"WIDTHTABLE 0.10 0.15 0.20 0.25 0.30 0.40 ;" ;
Figure 1-32 Illustration of WIDTHTABLE Rule
以下宽度表规则表示水平导线的宽度必须为 0.05 µm、0.1 µm 或大于等于 0.15 µm。
DIRECTION VERTICAL ;
PROPERTY LEF58_WIDTHTABLE
"WIDTHTABLE 0.05 0.1 0.15 WRONGDIRECTION ; " ;
Figure 1-33 Illustration of Width Table Rule with ORTHOGONAL and WRONGDIRECTION
4.55 Width Rules
宽度规则可用于定义默认路由宽度,以用于层上的所有常规布线。
您可以使用以下属性定义来定义宽度规则:
PROPERTY LEF58_WIDTH
"WIDTH minWidth [WRONGDIRECTION]
;" ;
WIDTH 与现有路由层 WIDTH 语法相同。
指定默认路由宽度,用于曼哈顿路由层上所有方向与 DIRECTION 中指定方向垂直的常规布线。
请注意,使用 WRONGDIRECTION 会改变 DEF NETS 部分中任何错误路由宽度的解释。如果指定了 WRONGDIRECTION,那么 DEF NETS 部分中的任何错路路由都将使用该层的 WRONGDIRECTION 宽度,除非网或路由具有宽度大于 WRONGDIRECTION 宽度的 NONDEFAULTRULE。但是,隐含的默认路由扩展仍然是首选方向宽度的一半。
一些较老的工具可能无法理解这种行为。通常情况下,它们仍会正确读/写和舍入 DEF 路由,但不会理解错误路由的宽度会稍大一些。如果这些工具检查错误路由宽度,那么 DRC 规则可能会标记错误的违规行为。宽度错误的 RC 提取也会标记错误,不过错误路由通常较短,宽度差异较小,因此 RC 错误通常可以忽略不计。
以下宽度规则表明,垂直路由的默认路由宽度为 0.1 μm,而水平路由的默认路由宽度为 0.14 μm:
DIRECTION VERITICAL;
WIDTH 0.1;
PROPERTY LEF58_WIDTH
"WIDTH 0.14 WRONGDIRECTION ;" ;
在 DEF 中,NETS 部分的垂直默认路由宽度为 0.10 μm,外延为 0.05 μm;水平路由宽度为 0.14 μm,外延为 0.05 μm。下面的示例显示了带有错向段的路线:
Figure 1-34 Illustration of WIDTH Rule with WRONGDIRECTION
4.56 Routing Pitch
PITCH 语句定义了初始化平面图时生成的详细路由网格。给定路由层的间距定义了该层首选方向上路由轨迹之间的距离。完整的路由网格是为每个路由层生成的轨道的组合。
网格间距不应小于水平和垂直方向上的线间距。网格间距小于线与线之间的间距会导致路由问题,并降低利用率。
网格通常应允许对角通孔。LEF 中通孔定义中包含的所有层的通孔间距决定了是否可以使用对角通孔。路由器能够避免对角通孔之间的违规。如果允许使用对角通孔,布线所需的时间就会减少,布局设计的尺寸也会缩小。
5. Library
定义库属性以创建 32/28 nm 和更小节点规则
您可以在 LEF 文件中包含库属性,以创建现有 LEF 语法不支持的 32/28 nm 和更小节点规则。
这些属性在 PROPERTYDEFINITIONS 语句中指定。
所有属性均在 LEF PROPERTYDEFINITIONS 语句中使用以下语法:
PROPERTYDEFINITIONS
LAYER propName STRING ["stringValue"] ;
END PROPERTYDEFINITIONS
库属性的属性定义如下:
PROPERTYDEFINITIONS
LIBRARY LEF58_OALAYERMAP STRING ;
END PROPERTYDEFINITIONS
您可以创建 OpenAccess 图层映射规则,为 LEF 图层定义等效的 OpenAcces 图层名称。
您可以使用以下 PROPERTYDEFINITIONS 语句定义 OpenAccess 图层映射规则:
PROPERTYDEFINITIONS
LIBRARY LEF58_OALAYERMAP STRING
"OALAYERMAP oaLayer
LAYER layer [MASK maskNum]
;..." ;
END PROPERTYDEFINITIONS
OALAYERMAP oaLayer LAYER layer [MASK maskNum]
指定相当于 LEF 图层的 OpenAccess 图层名称 oaLayer。如果只在具有 MASK 的多图案图层上指定 MASK,则只有 maskNum 图形会被映射到给定的 OpenAcess 图层名称。如果指定了 MASK,则每个可能的掩码都会有多个此类属性。
OpenAccess Layer Map Rule Examples
下面的示例表明 LEF 层 M1 已映射到 OpenAccess 层 Metal1:
PROPERTYDEFINITIONS
LIBRARY LEF58_OALAYERMAP STRING "
OALAYERMAP Metal1 LAYER M1 ; " ;
END PROPERTYDEFINITIONS
下面的示例表明,M1 上的 LEF MASK 1 图形将转到 OpenAccess 图层 Metal1A,而 M1 上的 MASK 2 图形将转到 OpenAccess 图层 Metal1B:
PROPERTYDEFINITIONS
LIBRARY LEF58_OALAYERMAP STRING "
OALAYERMAP Metal1A LAYER M1 MASK 1 ;
OALAYERMAP Metal1B LAYER M1 MASK 2 ; " ;
END PROPERTYDEFINITIONS
6. Macro
MACRO macroName
[CLASS
{ COVER [BUMP]
| RING
| BLOCK [BLACKBOX | SOFT]
| PAD [INPUT | OUTPUT |INOUT | POWER | SPACER | AREAIO]
| CORE [FEEDTHRU | TIEHIGH | TIELOW | SPACER | ANTENNACELL | WELLTAP]
| ENDCAP {PRE | POST | TOPLEFT | TOPRIGHT | BOTTOMLEFT | BOTTOMRIGHT}
}
;]
[FIXEDMASK ;]
[FOREIGN foreignCellName [pt [orient]] ;] ...
[ORIGIN pt ;]
[EEQ macroName ;]
[SIZE width BY height ;]
[SYMMETRY {X | Y | R90} ... ;]
[SITE siteName [sitePattern] ;] ...
[PIN statement] ...
[OBS statement] ...
[DENSITY statement] ...
[PROPERTY propName propVal ;] ...
END macroName