Product Documentation
LEF/DEF 5.8 Language Reference
Product Version 5.8, September 2022

2


LEF Syntax - Layer (Cut)

This chapter contains information about the following topics:

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 | OXIDE5 | ...
  | OXIDE32}
;] ...
[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 ) ...) ; ]
[PROPERTY LEF58_TYPE 
  “TYPE [TSV [LAYER bottomLayer topLayer]| PASSIVATION 
     | MIMCAP | HIGHR | SPECIALCUT LAYER bottomLayer topLayer]
     ;” ;]
[PROPERTY LEF58_ADJACENTFOURCUTS 
  "ADJACENTFOURCUTS cutSpacing CUTCLASS {className [TO ALL] | ALL} 
     {ABOVE | BELOW}
     PARALLEL parLength WITHIN parWithin [MERGEDCUTS]
     [HORIZONTAL|VERTICAL]
     [EXCEPTDIFFMETAL [NOEXTRACUT]]
     [MINCORNER | MININNERCORNER | MAXINNERCORNER]
     [EXCEPTMAXPRL maxPrl]
     [EXCEPTMINLENGTH minLength]
     [WITHINCUT within]
     [EXCEPTOTHERWIDTHWITHCUT width]
     [METALWIDTH maxWidth]
     ; " ;] 
[PROPERTY LEF58_ANTENNADIFFGATEPWL 
  "ANTENNADIFFGATEPWL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 | OXIDE5 | ...
   | OXIDE32} 
   ((gateArea1 effectiveGateArea1) (gateArea2 effectiveGateArea2) ... )
   ;" ;]
[PROPERTY LEF58_ANTENNADIFFONLYAREARATIO
  “ANTENNADIFFONLYAREARATIO {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 
     | OXIDE5 | ... | OXIDE32}  value
   ;..." ;]
[PROPERTY LEF58_ANTENNADIFFPROTECTORAREARATIO
  “ANTENNADIFFPROTECTORAREARATIO {OXIDE1 | OXIDE2 | OXIDE3 
     | OXIDE4 | OXIDE5 | ...| OXIDE32}  value
   ;..." ;]
[PROPERTY LEF58_ANTENNAGATEPWL 
  "ANTENNAGATEPWL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 | OXIDE5 | ...
   | OXIDE32} 
   ((gateArea1 effectiveGateArea1) (gateArea2 effectiveGateArea2) ... )
   ;" ;]
[PROPERTY LEF58_ANTENNAGATEPLUSDIFF
  "ANTENNAGATEPLUSDIFF {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 | OXIDE5 | ...
   | OXIDE32} 
   {plusDiffFactor | 
   PWL ((diffArea1 plusDiffProtect1) (diffArea1 plusDiffProtect2) ...)}    ;" ;]
[PROPERTY LEF58_ARRAYSPACING 
  "ARRAYSPACING [CUTCLASS className] [PARALLELOVERLAP] 
     [LONGARRAY] [WIDTH viaWidth] 
     [WITHIN within ARRAYWIDTH arrayWidth] CUTSPACING cutSpacing 
     {ARRAYCUTS arrayCuts SPACING arraySpacing} ... 
     ;..." ;]
[PROPERTY LEF58_BACKSIDE 
  “BACKSIDE ;” ;] 
[PROPERTY LEF58_CUTCLASS
  "CUTCLASS className WIDTH viaWidth [LENGTH viaLength] [CUTS numCut]
      [ORIENT {HORIZONTAL | VERTICAL}]
      ; " ;]
[PROPERTY LEF58_CUTONCENTERLINE
  "CUTONCENTERLINE width CUTCLASS className [ABOVE | BELOW]
     [EXTRACUT cutWithin WIDTH exactWidth]
     ; " ;]
[PROPERTY LEF58_DIRECTIONALSPACING
  "DIRECTIONALSPACING cutSpacing {HORIZONTAL | VERTICAL}
     PRL prl
     CUTCLASS className1 TO className2
     [PARALLEL parLength WITHIN parWithin
         [EXCLUDECUTEDGE]
         [CUTS numCuts]
         [VIAGROUP groupName]]
     ; " ;]
[PROPERTY LEF58_ENCLOSURE 
  "ENCLOSURE [CUTCLASS className][ABOVE | BELOW]
     [MINCORNER]
     {EOL eolWidth [HORIZONTAL | VERTICAL]
         [MINLENGTH minLength]
         [EOLONLY] [SHORTEDGEONEOL] eolOverhang otherOverhang 
         [SIDESPACING spacing EXTENSION backwardExt forwardExt
         |ENDSPACING spacing EXTENSION extension
         ]
    |{overhang1 overhang2
       |[OFFCENTERLINE] END overhang1 SIDE overhang2
       |HORIZONTAL overhang1 VERTICAL overhang2}
       [JOGLENGTHONLY length [INCLUDELSHAPE] ]
       [HOLLOW {HORIZONTAL|VERTICAL} length] 
       [ WIDTH minWidth 
           [INCLUDEABUTTED]
           [EXCEPTEXTRACUT cutWithin 
                [PRL | NOSHAREDEDGE | EXACTPRL prl]]
       | LENGTH minLength 
       | EXTRACUT [EXTRAONLY [PRL prl]]   
       | REDUNDANTCUT cutWithin
       | PARALLEL parLength [parLength2] WITHIN parWithin [parWithin2]
           [BELOWENCLOSURE belowEnclosure
                [ALLSIDES enclosure1 enclosure2]
           |ABOVEENCLOSURE aboveEnclosure]
       | CONCAVECORNERS numCorner
       | OTHERWITHINWIDTH width WITHIN within
       [ OTHERSIDE otherEnclosure]]
     }
     ;..." ;]
[PROPERTY LEF58_ENCLOSUREEDGE 
  "ENCLOSUREEDGE [CUTCLASS className][ABOVE | BELOW] overhang 
      {OPPOSITE 
           {[EXCEPTEOL eolWidth] [NOCONCAVECORNER within]
                [CUTTOBELOWSPACING spacing
                    [ABOVEMETAL extension]]
           | WRONGDIRECTION 
           }
      |[INCLUDECORNER]
        {WIDTH [BOTHWIRE] minWidth [maxWidth]
       |SPANLENGTH minSpanLength [maxSpanLength]}
           PARALLEL parLength
           {WITHIN parWithin | WITHIN minWithin maxWithin} 
           [EXCEPTEXTRACUT [cutWithin]] 
           [EXCEPTTWOEDGES [exceptWithin]]
      |CONVEXCORNERS convexLength adjacentLength
           PARALLEL parWithin LENGTH length
      }
  ;..." ;]
[PROPERTY LEF58_ENCLOSURETABLE
  "ENCLOSURETABLE [CUTCLASS className] [MASK maskNum]
      [OTHERMASK otherMaskNum]
          [USEMAXWIDTH | USEMINWIDTH | WITHINFIRSTWIDTH]
      [DEFAULT {[ABOVE| BELOW] 
          overhang1 overhang2 overhang3 overhang4}...]
      {WIDTH width {[ABOVE| BELOW] 
          overhang1 overhang2 overhang3 overhang4 [MINSUM]
          [MUSTUSE]
          [MAXLENGTH length | LENGTH length]
          [LAYER trimLayer OVERLAP {1|2} 
                [TRIMLENGTHOUTERMETAL trimLength]
          | OTHERWITHINWIDTH width [LAYER layerName]
                WITHIN within 
                [OTHERSIDE otherEnclosure]]
          | LINEENDGAPONLY
          | ROWBOUNDARY within OTHERSIDE otherEnclosure]
          [EXACTZERO]
          [INCLUDEABUTTED]}...
      | OTHERWIDTH otherWidth [PARALLEL parLength WITHIN parWithin]
          {{ABOVE| BELOW}
          overhang1 overhang2 overhang3 overhang4 [MINSUM]}...}...
      ; " ;]
[PROPERTY LEF58_ENCLOSURETOJOINT 
  "ENCLOSURETOJOINT [CUTCLASS className] [ABOVE | BELOW] 
      toOneJointOverhang [toBothJointOverhang] 
      [EOLMINLENGTH minLength]
      JOINTWIDTH jointWidth JOINTLENGTH spanLength 
      ; " ;]
[PROPERTY LEF58_ENCLOSUREWIDTH 
  "ENCLOSUREWIDTH {VIAOVERLAPONLY | USEMINWIDTH}
      ;..." ;]
[PROPERTY LEF58_EOLENCLOSURE
  "EOLENCLOSURE eolWidth [MINEOLWIDTH minEolWidth]
      [HORIZONTAL | VERTICAL]
      [EQUALRECTWIDTH] [CUTCLASS className] [ABOVE | BELOW]
      {{LONGEDGEONLY | SHORTEDGEONLY} overhang 
      |overhang
            [exactOverhang
            |PARALLELEDGE parSpace EXTENSION backwardExt forwardExt
                  [MINLENGTH minLength]
            |MINLENGTH minLength
            |ALLSIDES
            ]
      }
      ; " ;]
[PROPERTY LEF58_EOLSPACING
  "EOLSPACING cutSpacing1 cutSpacing2
      [CUTCLASS className1 [{TO className2 cutSpacing1 cutSpacing2}...]]
      ENDWIDTH eolWidth PRL prl
      ENCLOSURE smallerOverhang equalOverhang
      EXTENSION sideExt backwardExt SPANLENGTH spanLength
      ; " ;]
[PROPERTY LEF58_FORBIDDENSPACING
  "FORBIDDENSPACING CUTCLASS className minSpacing maxSpacing 
      [SAMEMASK]
      [SHORTEDGEONLY | LONGEDGEONLY | HORIZONTAL | VERTICAL]
      [PRL {prl TO prlClassName}...]
      ; " ;]
[PROPERTY LEF58_KEEPOUTZONE
  "KEEPOUTZONE CUTCLASS className1 [TO className2]
      [SAMEMASK][SAMEMETAL | DIFFMETAL]
      [EXCEPTEXACTALIGNED [SIDE | END] spacing]
      {EXTENSION sideExtension forwardExtension | 
      ENDEXTENSION endSideExtension endForwardExtension 
      SIDEEXTENSION sideSideExtension sideForwardExtension |
      HORIZONTALEXTENSION horzSideExtension horzForwardExtension
      VERTICALEXTENSION vertSideExtension vertForwardExtension}
      SPIRALEXTENSION extension [CORNERONLY]
      ;" ;]
[PROPERTY LEF58_MANUFACTURINGGRID 
  "MANUFACTURINGGRID value 
  ; " ;]
[PROPERTY LEF58_MAXSPACING
  "MAXSPACING spacing [CUTCLASS className]
  ;" ;]
[PROPERTY LEF58_MINENCLOSURE
  "MINENCLOSURE CUTCLASS className [ABOVE | BELOW]
      overhang1 overhang2
      ; " ;]
[PROPERTY LEF58_NOCUTCLASS
  "NOCUTCLASS className [EXCEPTMULTICUTS]
  ;" ;]
[PROPERTY LEF58_NOMETALSPACING
  "NOMETALSPACING spacing BOTHSPACING bothSpacing [PRL prl]
      [SAMEMASK] [CUTCLASS className] 
      NEIGHBORMETAL metalPrl metalWithin
        noMetalPrl {noMetalWithin | noMetalLowWithin noMetalHighWithin}
      [SAMESIDE]
      [ABOVE | BELOW] [EXCEPTLINEENDSPACING lineEndSpacing]
       ;" ;]
[PROPERTY LEF58_ONEDARRAY 
  "ONEDARRAY CUTCLASS className CUTSPACING cutSpacing 
      ARRAYCUTS arrayCuts SPACING spacing 
      LAYER secondLayerName SPACING interLayerSpacing 
      ENCLOSURE overhang1 overhang2 
      ; " ;]
[PROPERTY LEF58_ORTHOGONALSPACING 
  "ORTHOGONALSPACING cutSpacing 
      [CUTCLASS className [TO ALL]] {ABOVE | BELOW}
      PARALLEL parLength WITHIN parWithin WIDTH width
      [METALPRL metalPrl METALWITHIN metalWithin]
      [HORIZONTAL | VERTICAL]
      ; " ;]
[PROPERTY LEF58_OPPOSITEOVERLAPCUTSPACING 
  "OPPOSITEOVERLAPCUTSPACING spacing PRL prl 
      LAYER secondLayerName
      ; " ;]
[PROPERTY LEF58_PRLTWOSIDESPACING 
  "PRLTWOSIDESSPACING prlSpacing nonPrlSpacing 
      CUTCLASS className1 TO className2
      PRL prl1 prl2 prl3 prl4 
      ; " ;]
[PROPERTY LEF58_REGION
  "REGION regionLayerName BASEDLAYER cutLayerName
  ; " ;]
[PROPERTY LEF58_SAMEMETALALIGNEDCUTS
  "SAMEMETALALIGNEDCUTS numCuts 
      CUTCLASS {className | ALL}
      | {CUTCLASSLIST {classNameList}...}...}
      [ABOVE | BELOW] WIDTH width SPACING spacing
      [METALMASK metalMaskNum]
      [PARALLEL parLength WITHIN parWithin
      | METALWITHIN metalWithin [WITHCUT]
      | CUTWITHIN cutWithin
      |NOVIAOVERLAPMETAL within]
      [CENTERTOCENTER | EDGETOEDGE]
      ; " ;]
[PROPERTY LEF58_SPACING 
  "SPACING cutSpacing 
     [SAMEMASK 
     |MAXXY
     |[CENTERTOCENTER]
       [SAMENET | SAMEMETAL | SAMEVIA]
       [LAYER secondLayerName
            [STACK
            | ORTHOGONALSPACING orthogonalSpacing]
            | CUTCLASS className 
                [SHORTEDGEONLY [PRL prl]
                |CONCAVECORNER 
                     [WIDTH width ENCLOSURE enclosure 
                         EDGELENGTH edgeLength
                     | PARALLEL parLength WITHIN parWithin 
                         ENCLOSURE enclosure
                     | EDGELENGTH edgeLength 
                         ENCLOSURE edgeEnclosure adjEnclosure]
                |EXTENSION extension 
                |NONEOLCONVEXCORNER eolWidth
                     [MINLENGTH minLength]
                |ABOVEWIDTH width [ENCLOSURE enclosure] 
                |MASKOVERLAP 
                |WRONGDIRECTION [EXCEPTRECTANGLE]
                |DIFFCONCAVECORNER ]]] 
       | ADJACENTCUTS {2 | 3 | 4}
            [EXACTALIGNED exactAlignedCut]
            [TWOCUTS twoCuts [TWOCUTSSPACING twoCutsSpacing]
                [SAMECUT] 
            | EACHCUTS numCuts [EXCEPTEVENNUMCUT]]  
            WITHIN {cutWithin | cutWithin1 cutWithin2}
            [EXCEPTSAMEPGNET]
            [EXCEPTALLWITHIN exceptAllWithin]
            [ENCLOSURE [ABOVE|BELOW] enclosure
                [METALMASK metalMaskNum]
                [METALWIDTH maxWidth]
                [EXCEPTLINEENDGAP]]
            [CUTCLASS className [TO ALL]]
            [NOPRL [HORIZONTAL|VERTICAL] | SIDEPARALLELOVERLAP] 
            [SAMEMASK]
       | PARALLELOVERLAP [EXCEPTSAMENET | EXCEPTSAMEMETAL 
            |EXCEPTSAMEMETALOVERLAP | EXCEPTSAMEVIA] 
       | PARALLELWITHIN within [EXCEPTSAMENET]
            [CUTCLASS className
                 [LONGEDGEONLY
                 | ENCLOSURE enclosure {ABOVE | BELOW}
                     PARALLEL parLength WITHIN parWithin]]
       | SAMEMETALSHAREDEDGE parwithin [ABOVE][CUTCLASS className]
            [EXCEPTTWOEDGES] [EXCEPTSAMEVIA numCut]
       | AREA cutArea]
   ;..." ;]
[PROPERTY LEF58_SPACINGTABLE
  "SPACINGTABLE CENTERSPACING
     LAYER secondLayerName
     [OVERLAPMETALSPACING metalLayerName WIDTH width
         {className1 TO className2 spacing}...]
     CUTCLASS {{className1 | ALL} }...
         {{className2 | ALL} {cutSpacing}...}... 
  ; " ;]
[PROPERTY LEF58_SPACINGTABLE 
  “SPACINGTABLE  
     [ORTHOGONAL 
        {WITHIN cutWithin SPACING orthoSpacing} ... ;
     |[DEFAULT defaultCutSpacing]
        [SAMEMASK]
        [SAMENET | SAMEMETAL | SAMEVIA]
        [LAYER secondLayerName
              [NOSTACK] 
              [NONZEROENCLOSURE
              | PRLFORALIGNEDCUT 
                {{className1 | ALL} TO {className2 | ALL} }...
              | EXCEPTENCLOSURE exceptEnclosure]]
        [CENTERTOCENTER
              {{className1 | ALL}| TO {className2 | ALL}}...]
        [CENTERANDEDGE [NOPRL] 
              {{className1 | ALL}| TO {className2 | ALL}}...]
        [PRLSPACING spacing PRL prl]
        [PRL {prl|USEDEFAULT} [ HORIZONTAL| VERTICAL][MAXXY]
              [{{className1 | ALL} TO {className2 | ALL} ccPrl
                      [ HORIZONTAL| VERTICAL] }...] ]
        [PRLTWOSIDES
             {prl1 prl2 prl3 prl4 [WITHIN within]
                    className1 TO className2 spacing}...]
        [ENDEXTENSION extension [{TO className classExtension}...]
              [SIDEEXTENSION {TO className classExtension}...] ]
        [EXACTALIGNEDSPACING [HORIZONTAL | VERTICAL] 
              {{className | ALL} exactAlignedSpacing}...]
        [NONOPPOSITEENCLOSURESPACING 
              {className nonOppositeEnclosureSpacing}...]
        [OPPOSITEENCLOSURERESIZESPACING 
              {className resize1 resize2                  oppositeEnclosureResizeSpacing}...
              [EDGEALIGNED [HORIZONTAL|VERTICAL]]]
        CUTCLASS { {className1 | ALL} [SIDE | END]}...
          {{className2 | ALL} [SIDE | END] {-|cutSpacing1} 
            {-|cutSpacing2}...}...;
     ]
      ; " ;]
[PROPERTY LEF58_VIACLUSTER
  "VIACLUSTER CUTCLASS className
      CUTS perpendicularNumCut
      [DIAGONAL diagonalNumCut]
          [NOPRLSPACING diagonalSpacing bendSpacing WITHIN within
          EXTENSION sideExtension edgeExtension]]
      WITHIN minWithin maxWithin
      ; " ;]
[PROPERTY LEF58_VIAGROUP
  "VIAGROUP groupName CUTS numCut CUTCLASS {{className}... | All}
      [SAMEMASK]
      {{[PRLTWOSIDES prl1 prl2 prl3 prl4] SPACING minSpacing maxSpacing
        | PRL prl PRLSPACING prlSpacing [HORIZONTAL|VERTICAL]}
            [ALLOWBEND [NOHORIZONTAL|NOVERTICAL]]
      | ALIGNEDSPACING {HORIZONTAL | VERTICAL} 
            minSpacing maxSpacing }
      ; " ;]
[PROPERTY LEF58_VIAGROUPOVERRIDESPACING
  "VIAGROUPOVERRIDESPACING
      ; " ;]
[PROPERTY LEF58_VIAGROUPSPACING
  "VIAGROUPSPACING spacing 
      [SAMEMASK | DIFFMASK]
      [{HORIZONTAL| VERTICAL} [PRL prl] [TWOSIDES]]
      VIAGROUP groupName CUTS numCut 
      [LAYER cutLayerName] CUTCLASS {className | All}
      [TOVIAGROUP]
      [MERGEDCUTS | NOMERGEDCUTS]
      [PARALLEL parLength WITHIN parWithin 
          OTHERCUTCLASS otherClassName]
      ; " ;]
[PROPERTY LEF58_VOLTAGESPACING 
  "VOLTAGESPACING {voltage spacing}...
       ;..." ;]
END layerName

Defines cut layers in the design. Each cut layer is defined by assigning it a name and design rules. You must define cut layers separately, with their own layer statements.

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

ACCURRENTDENSITY

Specifies how much AC current a cut of a certain area can handle at a certain frequency. For an example using the ACCURRENTDENSITY syntax, see Example 5-1.

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

Specifies the peak limit of the layer.

AVERAGE

Specifies the average limit of the layer.

RMS

Specifies the root mean square limit of the layer.

value

Specifies a maximum current limit for the layer in milliamps per square micron (mA/μm2).
Type: Float

FREQUENCY

Specifies frequency values, in megahertz. You can specify more than one frequency. If you specify multiple frequency values, the values must be specified in ascending order.

If you specify only one frequency value, there is no frequency dependency, and the table entries are assumed to apply to all frequencies.
Type: Float  

CUTAREA

Specifies cut area values, in square microns (μm2). You can specify more than one cut area. If you specify multiple cut area values, the values must be specified in ascending order.

If you specify only one cut area value, there is no cut area dependency, and the table entries are assumed to apply to all cut areas.
Type: Float

TABLEENTRIES

Defines the maximum current for each frequency and cut area pair specified in the FREQUENCY and CUTAREA statements, in mA/μm2.

The pairings define each cut area for the first frequency in the FREQUENCY statement, then the cut areas for the second frequency, and so on. The final value for a given cut area and frequency is computed from a linear interpolation of the table values.
Type: Float

ANTENNAAREADIFFREDUCEPWL ( ( diffArea1 diffAreaFactor1 ) ( diffArea2 diffAreaFactor2 ) ...)

Indicates that the cut_area is multiplied by a diffAreaFactor computed from a piece-wise linear interpolation, based on the diffusion area attached to the cut.

The diffArea values are floats, specified in microns squared. The diffArea values should start with 0 and monotonically increase in value to the maximum size diffArea possible. The diffAreaFactor values are floats with no units. The diffAreaFactor values are normally between 0.0 and 1.0. If no statement rule is defined, the diffMetalReduceFactor value in the PAR(mi) equation defaults to 1.0.

For more information on the PAR(mi) equation and process antenna models, see Appendix C, “Calculating and Fixing Process Antenna Violations.”

ANTENNAAREAFACTOR value [DIFFUSEONLY]

Specifies the multiply factor for the antenna metal area calculation. DIFFUSEONLY specifies that the current antenna factor should only be used when the corresponding layer is connected to the diffusion.
Default: 1.0 Type: Float

For more information on process antenna calculation, see Appendix C, “Calculating and Fixing Process Antenna Violations.”

Note: If you specify a value that is greater than 1.0, the computed areas will be larger, and violations will occur more frequently.

ANTENNAAREAMINUSDIFF minusDiffFactor

Indicates that the antenna ratio cut_area should subtract the diffusion area connected to it. This means that the ratio is calculated as:

ratio = ( cutFactor x cut_area - minusDiffFactor x diff_area)/gate_area

If the resulting value is less than 0, it should be truncated to 0. For example, if a via2 shape has a final ratio that is less than 0 because it connects to a diffusion shape, then the cumulative check for metal3 (or via3) above the via2 shape adds a cumulative value of 0 from the via2 layer. (See Example 1 in Cut Layer Process Antenna Models, in Appendix C, “Calculating and Fixing Process Antenna Violations.”Type: Float
Default: 0.0

ANTENNAAREARATIO value

Specifies the maximum legal antenna ratio, using the area of the metal wire that is not connected to the diffusion diode. For more information on process antenna calculation, see Appendix C, “Calculating and Fixing Process Antenna Violations.”Type: Float

ANTENNACUMAREARATIO value

Specifies the cumulative antenna ratio, using the area of the metal wire that is not connected to the diffusion diode. For more information on process antenna calculation, see Appendix C, “Calculating and Fixing Process Antenna Violations.” Type: Float

ANTENNACUMDIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)}

Specifies the cumulative antenna ratio, using the area of the metal wire that is connected to the diffusion diode. You can supply an explicit ratio value or specify piece-wise linear format (PWL), in which case the cumulative ratio is calculated using linear interpolation of the diffusion area and ratio input values. The diffusion input values must be specified in ascending order.
Type: Float

For more information on process antenna calculation, see Appendix C, “Calculating and Fixing Process Antenna Violations.”

ANTENNACUMROUTINGPLUSCUT

Indicates that cumulative ratio rules (that is, ANTENNACUMAREARATIO, and ANTENNACUMDIFFAREARATIO) accumulate with the previous routing layer instead of the previous cut layer. Use this to combine metal and cut area ratios into one rule.

For more information on process antenna models, see Appendix C, “Calculating and Fixing Process Antenna Violations.”

ANTENNADIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 )...)}

Specifies the antenna ratio, using the area of the metal wire connected to the diffusion diode. You can supply an explicit ratio value or specify piece-wise linear format (PWL), in which case the ratio is calculated using linear interpolation of the diffusion area and ratio input values. The diffusion input values must be specified in ascending order.
Type: Float

For more information on process antenna calculation, see Appendix C, “Calculating and Fixing Process Antenna Violations.”

ANTENNAGATEPLUSDIFF plusDiffFactor

Indicates the antenna ratio gate area includes the diffusion area multiplied by plusDiffFactor. This means that the ratio is calculated as:

ratio = cut_area / (gate_area + plusDiffFactor x diff_area)

The ratio rules without “DIFF” (the ANTENNAAREARATIO, ANTENNACUMAREARATIO, ANTENNASIDEAREARATIO, and ANTENNACUMSIDEAREARATIO statements), are unnecessary for this layer if ANTENNAGATEPLUSDIFF is defined because a zero diffusion area is already accounted for by the ANTENNADIFF*RATIO statements.
Type: Float
Default: 0.0

For more information on process antenna models, see Appendix C, “Calculating and Fixing Process Antenna Violations.”

ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 | OXIDE5 | ... | OXIDE32}

Specifies the oxide model for the layer. If you specify an ANTENNAMODEL statement, that value affects all ANTENNA* statements for the layer that follow it until you specify another ANTENNAMODEL statement.
Default: OXIDE1, for a new LAYER statement

Because LEF is sometimes used incrementally, if an ANTENNA statement occurs twice for the same oxide model, the last value specified is used. For any given ANTENNA keyword, only one value or PWL table is stored for each oxide metal on a given layer.

For an example using the ANTENNAMODEL syntax, see Example 5-2.

ARRAYSPACING

Specifies array spacing rules to use on the cut layer. An array spacing rule is intended for large vias of size 3x3 or larger.

The ARRAYSPACING syntax is defined as follows:

[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

Indicates that a large via array with a size greater than or equal to arrayCuts x arrayCuts in both dimensions must use N x N cut arrays (where N = arrayCuts) separated from other cut arrays by a distance of greater than or equal to arraySpacing.

For example, if arrayCuts = 3, then 2x3 and 2x4 arrays do not need to follow the array spacing rule. However, 3x3 and 3x4 arrays must follow the rule (3x4 is legal, if the LONGARRAY keyword is specified), while 4x4 or 4x5 arrays are violations, unless an arrayCuts = 4 rule is specified. (See Array Spacing Rule Example 1).

If you specify multiple {ARRAYCUTS ...} statements, the arrayCuts values must be specified in increasing order. (See Array Spacing Rule Example 3.)

Specifying more than one ARRAYCUTS statement creates multiple choices for via array generation.

For example, you can define an arrayCuts = 4 rule with arraySpacing = 1.0, and an arrayCuts = 5 rule with arraySpacing = 1.5. Either rule is legal, and the application should choose which rule to use (presumably based on which rule produces the most via cuts in the given via area).

LONGARRAY

Indicates that the via can use N x M cut arrays, where N = arrayCuts, and M can be any value, including one that is larger than N . (See Array Spacing Rule Example 2.)

WIDTH viaWidth

Indicates that the array spacing rules only apply if the via metal width is greater than or equal to viaWidth. (See Array Spacing Rule Example 1.)

Example 2-1 Array Spacing Rules

DCCURRENTDENSITY

Specifies how much DC current a via cut of a certain area can handle in units of milliamps per square micron (mA/μm2). For an example using the DCCURRENTDENSITY syntax, see Example 5-3.

The DCCURRENTDENSITY syntax is defined as follows:

AVERAGE { value | CUTAREA cutArea_1 cutArea_2 ... ;
TABLEENTRIES value_1 value_2 ... } ;

AVERAGE

Specifies the average limit for the layer.

value

Specifies a current limit for the layer in mA/μm2.
Type: Float

CUTAREA

Specifies cut area values, in square microns. You can specify more than one cut area value. If you specify multiple cut area values, the values must be specified in ascending order.
Type: Float

TABLEENTRIES

Specifies the maximum current density for each specified cut area, in mA/μm2. The final value for a specific cut area is computed from a linear interpolation of the table values.
Type: Float

ENCLOSURE

Specifies an enclosure rule for the cut layer.

The ENCLOSURE syntax is described as follows:

[ENCLOSURE 
 [ABOVE | BELOW] overhang1 overhang2 
 [ WIDTH minWidth [EXCEPTEXTRACUT cutWithin] 
 | LENGTH minLength] 
;] 

ENCLOSURE [ABOVE | BELOW] overhang1 overhang2

Indicates that any rectangle from this cut layer requires the routing layers to overhang by overhang1 on two opposite sides, and by overhang2 on the other two opposite sides. (See Figure 2-3.)
Type: Float, specified in microns

If you specify BELOW, the overhang is required on the routing layers below this cut layer. If you specify ABOVE, the overhang is required on the routing layers above this cut layer. If you specify neither, the rule applies to both adjacent routing layers.

WIDTH minWidth

Indicates that the enclosure rule only applies when the width of the routing layer is greater than or equal to minWidth. If you do not specify a minimum width, the enclosure rule applies to all widths (as if minWidth equaled 0).
Type: Float, specified in microns

If you specify multiple enclosure rules with the same width (or with no width), then there are several legal enclosure rules for this width, and the application only needs to meet one of the rules. If you specify multiple enclosure rules with different minWidth values, the largest minWidth rule that is still less than or equal to the wire width applies.

For example, if you specify enclosure rules for 0.0 μm, 1.0 μm, and 2.0 μm widths, then a 0.5 μm wire must meet a 0.0 rule, a 1.5 μm wire must meet a 1.0 rule, and a 2.0 μm wire must meet a 2.0 rule. (See Example 2-2.)

EXCEPTEXTRACUT cutWithin

Indicates that if there is another via cut having same metal shapes on both metal layers less than or equal to cutWithin distance away, this ENCLOSURE with WIDTH rule is ignored and the ENCLOSURE rules for minimum width wires (that is, no WIDTH keyword) are applied to the via cuts instead. (See Example 2-3.)
Type: Float, specified in microns

LENGTH minLength

Indicates that the enclosure rule only applies if the total length of the longest opposite-side overhangs is greater than or equal to minLength. The total length of the overhang is measured at the via cut center (see illustration F in Figure 2-5).
Type: Float, specified in microns

Figure 2-3 Enclosure Rule

Example 2-2 Enclosure Rules

Example 2-3 Enclosure Rule With Width and ExceptExtraCut

The following definition describes a cut layer that requires an enclosure of either .05 μm on opposite sides and 0.0 μm on the other two sides, or 0.04 μm on opposites sides and 0.01 μm on the other two sides. It also requires an enclosure of 0.03 μm in all directions if the wire width is greater than or equal to 0.03 μm, unless there is an extra cut (redundant cut) within 0.2 μ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

Figure 2-4 Illustrations of Enclosure Rule With Width and ExceptExtraCut

Example 2-4 Enclosure Rule With Length and Width

The following definition describes a cut layer that requires an enclosure of .05 μm on opposite sides and 0.0 μm on the other two sides, as long as the total length enclosure on any two opposite sides is greater than or equal to 0.7 μm. Otherwise, it requires 0.05 μm on all sides if the total enclosure length is less than or equal to 0.7 μm. It also requires 0.10 μm on all sides if the metal layer has a width that is greater than or equal to 1.0 μm. (Figure 2-5 illustrates examples of violations and acceptable vias for the three ENCLOSURE rules.)

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

Figure 2-5 Illustrations of Enclosure Rule With Length and Width

LAYER LayerName

Specifies the name for the layer. This name is used in later references to the layer.

MASK maskNum

Specifies how many masks for double- or triple-patterning will be used for this layer. The maskNum variable must be an integer greater than or equal to 2. Most applications support values of 2 or 3 only.

PREFERENCLOSURE [ABOVE | BELOW] overhang1 overhang2 [WIDTH minWidth]

Specifies preferred enclosure rules that can improve manufacturing yield, instead of enclosure rules that absolutely must be met (see the ENCLOSURE keyword). Applications should use the PREFERENCLOSURE rule when it has little or no impact on density and routability.

PROPERTY propName propVal

Specifies a numerical or string value for a layer property defined in the PROPERTYDEFINITIONS statement. The propName you specify must match the propName listed in the PROPERTYDEFINITIONS statement.

RESISTANCE resistancePerCut

Specifies the resistance per cut on this layer. LEF vias without their own specific resistance value, or DEF vias from a VIARULE without a resistance per cut value, can use this resistance value.

Via resistance is computed using resistancePerCut and Kirchoff’s law for typical parallel resistance calculation. For example, if R =10 ohms per cut, and the via has one cut, then R =10 ohms. If the via has two cuts, then R = (1/2) * 10 = 5 ohms.

SPACING

Specifies the minimum spacing allowed between via cuts on the same net or different nets. For via cuts on the same net, this value can be overridden by a spacing with the  SAMENET keyword. (See Example 2-5.)

The SPACING syntax is defined as follows:

[SPACING cutSpacing 
  [CENTERTOCENTER] 
  [SAMENET]  
  [ LAYER secondLayerName [STACK] 
  | ADJACENTCUTS {2 | 3 | 4} WITHIN cutWithin 
[EXCEPTSAMEPGNET] | PARALLELOVERLAP | AREA cutArea] ;] ...

cutSpacing

Specifies the default minimum spacing between via cuts, in microns.
Type: Float

CENTERTOCENTER

Computes the cutSpacing or cutWithin distances from cut-center to cut-center, instead of from cut-edge to cut-edge (the default behavior). (See Spacing Rule Example 4.)

SAMENET

Indicates that the cutSpacing value only applies to same-net cuts. The SAMENET cutSpacing value should be smaller than the normal SPACING cutSpacing value that applies to different-net cuts.

LAYER secondLayerName

Applies the spacing rule between objects on the cut layer and objects on 2ndLayerName. The second layer must be a cut or routing layer already defined in the LEF file, or the next routing layer declared in the LEF file. This allows “one layer look ahead,” which is needed in some technologies. (See Spacing Rule Example 1.)

STACK

Indicates that same-net cuts on two different layers can be stacked if they are aligned. If the cuts are not the same size, the smaller cut must be completely covered by the larger cut, to be considered legal. If both cuts are the same size,  the centers of the cuts must be aligned, to be legal; otherwise, the cuts must have cutSpacing between them. If cutSpacing is 0.0, the same-net cut vias can be placed anywhere legally, including slightly overlap case. (See Spacing Rule Example 7.)

Most applications only allow spacing checks and STACK checking if secondLayerName is the cut layer below the current cut layer.

ADJACENTCUTS {2 |3 | 4} WITHIN cutWithin

Applies the spacing rule only when the cut has two, three, or four via cuts that are less than cutWithin distance, in microns, from each other. You can specify only one ADJACENTCUTS statement per cut layer. For more information, see "Adjacent Via Cuts." Type: Float (distance)

EXCEPTSAMEPGNET

Indicates that the ADJACENTCUTS rule does not apply between cuts, if they are on the same net, and are on a power or ground net. (See Spacing Rule Example 5.)

PARALLELOVERLAP

Indicates that cuts on different metal shapes that have a parallel edge overlap greater than 0 require cutSpacing distance between them.

Only one PARALLELOVERLAP spacing value is allowed per cut layer. The rule does not apply to cuts that share the same metal shapes above or below that cover the overlap area between the cuts. (See Spacing Rule Example 8.)

AREA cutArea

Indicates that any cut with an area greater than or equal to cutArea requires edge-to-edge spacing greater than or equal to cutSpacing to all other cuts. (See Spacing Rule Example 6.)

A SPACING statement should already exist that applies to all cuts. Only cuts that have area greater than or equal to cutArea require extra spacing; therefore, cutSpacing for this keyword must be greater than the default spacing.

If you include CENTERTOCENTER, the cutSpacing values are computed from cut-center to cut-center, instead of from cut-edge to cut-edge.
Type: Float, specified in microns squared

Example 2-5 Spacing Rule Examples

SPACINGTABLE

Specifies spacing tables to use on the cut layer.

The SPACINGTABLE syntax is defined as follows:

SPACINGTABLE ORTHOGONAL {WITHIN cutWithin SPACING orthoSpacing}... ;]

WITHIN cutWithin SPACING orthoSpacing

Indicates that if two cuts have parallel overlap that is greater than 0, and they are less than cutWithin distance from each other, any other cuts in an orthogonal direction must have greater than or equal to orthoSpacing. (See Example 2-5, and Figure 2-9.)
Type: Float, specified in microns (for both values)

Example 2-6 Spacing Table Orthogonal Rule

The following example shows how a spacing table orthogonal rule is defined:

SPACING 0.10                   #min spacing for all cuts
SPACINGTABLE ORTHOGONAL 
    WITHIN 0.15 SPACING 0.11 
    WITHIN 0.13 SPACING 0.13 
    WITHIN 0.11 SPACING 0.15 ;

Figure 2-9 Spacing Table Orthogonal Overlap Regions

TYPE CUT

Specifies that the layer is for contact-cuts. The layer is later referenced in vias, and in rules for generating vias.

WIDTH minWidth

Specifies the minimum width of a cut. In most technologies, this is also the only legal size of a cut.
Type: Float, specified in microns

Defining Cut Layer Properties to Create 32/28 nm and Smaller Nodes Rules

You can include cut layer properties in your LEF file to create 32/28 nm and smaller nodes rules that currently are not supported by existing LEF syntax. The properties are specified inside the LAYER CUT statements where they can be seen with other rules.

Before you can reference them, properties must be defined at the beginning of the LEF file in the PROPERTYDEFINITIONS statement, immediately before the first LAYER statement.

All properties use the following syntax within the LEF PROPERTYDEFINITIONS statement:

PROPERTYDEFINITIONS
LAYER propName STRING ["stringValue"] ;
END PROPERTYDEFINITIONS

The property definitions for the cut layer properties are as follows:

PROPERTYDEFINITIONS
   LAYER LEF58_TYPE STRING ;
   LAYER LEF58_ADJACENTFOURCUTS STRING ;
   LAYER LEF58_ANTENNADIFFGATEPWL STRING ;
   LAYER LEF58_ANTENNADIFFONLYAREARATIO STRING ;
   LAYER LEF58_ANTENNADIFFPROTECTORAREARATIO STRING ; 
   LAYER LEF58_ANTENNAGATEPWL
   LAYER LEF58_ANTENNAGATEPLUSDIFF
   LAYER LEF58_ARRAYSPACING STRING ;
   LAYER LEF58_BACKSIDE STRING ;
   LAYER LEF58_CUTCLASS STRING ;
   LAYER LEF58_CUTONCENTERLINE STRING ;
   LAYER LEF58_DIRECTIONALSPACING STRING ;
   LAYER LEF58_ENCLOSURE STRING ;
   LAYER LEF58_ENCLOSUREEDGE STRING ;
   LAYER LEF58_ENCLOSURETABLE STRING ;
   LAYER LEF58_ENCLOSURETOJOINT STRING ;
   LAYER LEF58_ENCLOSUREWIDTH STRING ;
   LAYER LEF58_EOLENCLOSURE STRING ;
   LAYER LEF58_EOLSPACING STRING ;
   LAYER LEF58_FORBIDDENSPACING STRING ;
   LAYER LEF58_KEEPOUTZONE STRING ;
   LAYER LEF58_MANUFACTURINGGRID STRING ;
   LAYER LEF58_MAXSPACING STRING ;
   LAYER LEF58_MINENCLOSURE STRING ;
   LAYER LEF58_NOCUTCLASS STRING ;
   LAYER LEF58_NOMETALSPACING STRING ;
   LAYER LEF58_ONEDARRAY STRING ;
   LAYER LEF58_REGION STRING ;
   LAYER LEF58_SAMEMETALALIGNEDCUTS STRING ;
   LAYER LEF58_SPACING STRING ;
   LAYER LEF58_SPACINGTABLE STRING ;
   LAYER LEF58_VIACLUSTER STRING ;
   LAYER LEF58_VIAGROUP STRING ;
   LAYER LEF58_VIAGROUPOVERRIDESPACING STRING ;
   LAYER LEF58_VIAGROUPSPACING STRING ;
   LAYER LEF58_VOLTAGESPACING STRING ;
END PROPERTYDEFINITIONS

Type Rule

A type rule can be used to further classify a cut layer.

You can create a type rule by using the following property definition:

TYPE CUT;
PROPERTY LEF58_TYPE
  "TYPE [TSV [LAYER bottomLayer topLayer]| PASSIVATION 
      | MIMCAP | HIGHR | SPECIALCUT LAYER bottomLayer topLayer]
      ;" ;

Where:

HIGHR

Specifies that the layer is a special cut layer that is used to connect to a high resistance cut layer with type HIGHR.

LAYER bottomLayer topLayer

Specifies a special TSV cut layer with cut vias that cross multiple layers from bottomLayer to topLayer. bottomLayer and topLayer must be routing layers, including the BACKSIDE routing layer.

Type: String

MIMCAP

Indicates a mimcap layer, which is a cut layer that is not suitable for routing.
For example, the following rule indicates that layer VA is a mimcap cut layer:

LAYER VA
   TYPE CUT ;
   PROPERTY LEF58_TYPE "TYPE MIMCAP ;" ;
END VA

PASSIVATION

Indicates that the cut layer is a passivation cut layer.

SPECIALCUT LAYER bottomLayer topLayer

Specifies a special cut layer that is used to define connectivity. LAYER indicates the bottom and top layers to which this special cut layer is used to connect. bottomLayer could be a masterslice or routing layer while topLayer should be a routing layer.

Type: String

TSV

Indicates that the cut layer is a through-silicon via (TSV) cut layer.

You can specify an OVERLAP layer name as the second layer to TSV cut layer SPACING rules, to indicate that the TSV (through-silicon-vias) cut must be some minimum spacing from any diffusion, poly, or well shapes. The syntax is as follows:

[SPACING spacing LAYER secondLayerName ;]

The secondLayerName can be a previously defined OVERLAP layer name, rather than a routing or cut layer name. However, if LAYER is specified in TYPE in a TSV layer, secondLayerName could be any routing or cut layer name between the given bottom and top layers.

Note that in many cases standard cells are designed with a small amount of diffusion, poly, or well shapes sticking outside the cell boundary (the LEF SIZE statement), so that must be considered.

For example, if 5 μm spacing is needed from the TSV-cut to any poly, diffusion, or well shape, and the standard cells allow up to 0.1 μm of diffusion, poly, or well shapes outside the cell boundary, then the rule should be specified as:

SPACING 5.1 LAYER OVERLAP ;

Adjacent Four Cuts Rule

An adjacent four cuts rule can be used to describe a cut spacing rule for two sets of two cuts with PRL greater than zero when few other conditions are met.

You can create an adjacent four cuts rule by using the following property definition:

PROPERTY LEF58_ADJACENTFOURCUTS 
  "ADJACENTFOURCUTS cutSpacing CUTCLASS {className [TO ALL] | ALL}
     {ABOVE | BELOW}
     PARALLEL parLength WITHIN parWithin [MERGEDCUTS]
     [HORIZONTAL|VERTICAL]
     [EXCEPTDIFFMETAL [NOEXTRACUT]]
     [MINCORNER | MININNERCORNER | MAXINNERCORNER]
     [EXCEPTMAXPRL maxPrl]
     [EXCEPTMINLENGTH minLength]
     [WITHINCUT within]
     [EXCEPTOTHERWIDTHWITHCUT width]
     [METALWIDTH maxWidth]
     ;" ; 

Where:

ADJACENTFOURCUTS cutSpacing CUTCLASS {className [TO ALL] | ALL}
{ABOVE | BELOW}
PARALLEL
parLength WITHIN parWithin

Specifies that if there are two sets of two cuts of cut class className with spacing less than cutSpacing and PRL greater than 0 of cuts within each sets, and each of the cuts has a neighbor cut of the other set within parWithin having parallel run length greater than parLength, it is a violation to have a wire that does not overlap or contain the cuts on the above or below metal layer in ABOVE or BELOW in a maximum bounding box formed by the facing cut edges.

If TO ALL is specified, the rule is triggered if at least one cut belongs to the given cut class, className; the other cuts could belong to any cut class.

If ALL is specified in CUTCLASS, any cut combination of four cuts could trigger the rule.

Type: Float, specified in microns

EXCEPTDIFFMETAL

Specifies that the adjacent four cut rule is exempted if both sets of the two cuts have different metal on the given above or below metal layer. In other words, the rule applies only if at least one set of the two cuts has the same metal on the given above or below metal layer.

EXCEPTMAXPRL maxPrl

Specifies that the rule does not apply if the middle metal neighbor has a parallel run length overlap of less than maxPrl with the window.
Type: Float, specified in microns

EXCEPTMINLENGTH minLength

Specifies that the rule does not apply if the middle metal neighbor has a length greater than or equal to minLength.
Type: Float, specified in microns

EXCEPTOTHERWIDTHWITHCUT width

Specifies that the rule does not apply if there is a wire on the other layer (the below/above layer when ABOVE/BELOW is defined) with width greater than or equal to width and a cut on the specified layer in a search window formed by the maximum bounding box of the inner cut corners.
Type: Float, specified in microns

HORIZONTAL|VERTICAL

Specifies that cutSpacing and parLength should be only along the given direction while parWithin should be only along the orthogonal direction when HORIZONTAL|VERTICAL is defined. For example, if HORIZONTAL is specified, cutSpacing and parLength should be only along the horizontal direction while parWithin should be only along the vertical direction.

MAXINNERCORNER

Specifies a different way to form the metal searching window by using the maximum bounding box of the inner cut corners.

MERGEDCUT

Specifies a different way to interpret the PARALLEL and WITHIN conditions. The two sets of two cuts with spacing less than spacing and a parallel run length (PRL) greater than 0 should be merged inside a set individually. If the merged cuts have PRL greater than parLength and within parWithin, the rule is triggered.

METALWIDTH maxWidth

Specifies that the rule applies only for the metal neighbor with width less than or equal to maxWidth.

Type: Float, specified in microns

MINCORNER

Specifies a different way to form the metal searching window. If neighboring cuts, ones that are not in the same set, have PRL greater than 0, the cut center is used to form the window. Otherwise, the inner corner is used. The window is still the maximum bounding box of all of the cut locations.

MININNERCORNER

Specifies a different way to form the metal searching window by using the minimum bounding box of the inner cut corners.

NOEXTRACUT

Specifies that the except different metal, EXCEPTDIFFMETAL, cannot be applied if there is an extra cut of any cut class inside any set of the two sets of two cuts, which triggers the rule.

WITHINCUT within

Specifies that the rule applies even if the middle metal neighbor does not overlap with the metal search window, but the wire contains an above or below cut within within of the window.
Type: Float, specified in microns

Adjacent Four Cuts Rule Examples

Figure 2-10 Illustration of Adjacent Four Cuts Rule

Figure 2-11 Illustration of Adjacent Four Cuts Rule with EXCEPTDIFFMETAL

Figure 2-12 Illustration of Adjacent Four Cuts Rule with MERGEDCUTS

Figure 2-13 Illustration of Adjacent Four Cuts Rule with MINCORNER

Figure 2-14 Illustration of Adjacent Four Cuts Rule with MININNERCORNER

Figure 2-15 Illustration of Adjacent Four Cuts Rule with MAXINNERCORNER

Figure 2-16 Illustration of Adjacent Four Cuts Rule with EXCEPTMAXPRL

Figure 2-17 Illustration of Adjacent Four Cuts Rule with EXCEPTMINLENGTH

Figure 2-18 Illustration of Adjacent Four Cuts Rule with WITHINCUT

Figure 2-19 Illustration of Adjacent Four Cuts Rule with EXCEPTOTHERWIDTHWITHCUT

Figure 2-20 Illustration of Adjacent Four Cuts Rule with METALWIDTH

Figure 2-21 Illustration of Adjacent Four Cuts Rule with NOEXTRACUT

Antenna Diff Gate PWL Rule

The antenna diff gate PWL rule is used to specify that the antenna gate connected to the diffusion diode can be used to define a piece-wise linear (PWL) table on the given antenna model that is indexed by the real gate area, and returns an “effective gate area” interpolated from the table.

You can create an antenna diff gate PWL rule by using the following property definition:

PROPERTY LEF58_ANTENNADIFFGATEPWL
"ANTENNADIFFGATEPWL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 | OXIDE5 | ...
   | OXIDE32}
   ((gateArea1 effectiveGateArea1) (gateArea2 effectiveGateArea2) ... )    ;" ;

Where:

ANTENNADIFFGATEPWL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 |
OXIDE5 | ... | OXIDE32}
((gateArea1 effectiveGateArea1) (gateArea2 effectiveGateArea2)... )

Specifies that the antenna gate connected to the diffusion diode can be used to define a piece-wise linear (PWL) table on the given antenna model that is indexed by the real gate area, and returns an “effective gate area” interpolated from the table.
Type: Float, specified in microns

effectiveGateArea indicates the effective gate area interpolated from the PWL table. If this table it not defined, the real gate area is used.

gateArea indicates the real gate area.

Note that if ANTENNADIFFGATEPWL is defined, the ANTENNAGATEPWL rule is applied only to the antenna gate that is not connected to the diffusion diode. If ANTENNADIFFGATEPWL is not defined, the ANTENNAGATEPWL rule is applied to all the antenna gates.

Antenna Diff Only Area Ratio Rule

The antenna diff only area rule is used to specify a diffusion-area-based antenna ratio.

You can create an antenna diff only area rule by using the following property definition:

PROPERTY LEF58_ANTENNADIFFONLYAREARATIO
  “ANTENNADIFFONLYAREARATIO {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 
     | OXIDE5 | ... | OXIDE32}  value
   ;..." ;

Where:

ANTENNADIFFONLYAREARATIO {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4
| OXIDE5 | ... | OXIDE32}
value

Specifies a diffusion-area-based antenna ratio, using the area of the metal wire connected to a diffusion device, which is defined in ANTENNADIFFAREA on a macro pin. This ratio is associated with the given OXIDE model.

Type: Float, specified in microns

The metal connected to a pin with a protector diffusion device would only be checked against this given ratio. This includes the case when the metal also connects to gates or non-protector diffusions. Other ANTENNA* rules would be ignored.

The partial area ratio (PAR) is calculated for diffusion and gate area separately as:

PAR(Ni,j, Dk) = Drawn area (Ni,j) / Total area of diffusion area below Ni,j

PAR(Ni,j, Gk) = Drawn area (Ni,j) / Total area of gate area below Ni,j

The following two rule checks are preformed individually:

  • The PAR for node Ni,j with respect to diffusion Dk by dividing the drawn area of the node by the area of diffusions that electrically connected to it must be less than or equal to the given value in ANTENNADIFFONLYAREARATIO.
  • The PAR for node Ni,j with respect to gate Gk by dividing the drawn area of the node by the area of gates that electrically connected to it must be less than or equal to the given value in ANTENNAAREARATIO.

Antenna Diff Protector Area Ratio Rule

The antenna diff protector area rule is used to specify a protector diffusion-area-based antenna ratio.

You can create an antenna diff protector area rule by using the following property definition:

PROPERTY LEF58_ANTENNADIFFPROTECTORAREARATIO
  “ANTENNADIFFPROTECTORAREARATIO {OXIDE1 | OXIDE2 | OXIDE3
     | OXIDE4 | OXIDE5 | ... | OXIDE32}  value
   ;..." ;

Where:

ANTENNADIFFPROTECTORAREARATIO {OXIDE1 | OXIDE2 | OXIDE3
| OXIDE4 | OXIDE5 | ... | OXIDE32}
value

Specifies a protector diffusion-area-based antenna ratio, using the area of the metal wire connected to a protector diffusion device, which is defined in ANTENNADIFFAREA with PROTECTOR on a macro pin. This ratio is associated with the given OXIDE model.

Type: Float, specified in microns

The partial area ratio (PAR) is calculated for protector diffusion as:

PAR(Ni,j, Dk) = Drawn area (Ni,j) / Total area of protector diffusion area below Ni,j

The PAR for node Ni,j with respect to protector diffusion Dk by dividing the drawn area of the node by the area of protector diffusions that electrically connected to it must be less than or equal to the given value in ANTENNADIFFPROTECTORAREARATIO. Other ANTENNA* rules are ignored even if the node Ni,j is also connected to gates or non-protector diffusions.

Antenna Gate PWL Rule

The antenna gate PWL rule can be used to define a PWL (piece-wise linear) table on the given antenna model that is indexed by the real gate area, and returns an “effective gate area” interpolated from the table.

You can create an antenna gate PWL rule by using the following property definition:

PROPERTY LEF58_ANTENNAGATEPWL
"ANTENNAGATEPWL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 | OXIDE5 | ...
   | OXIDE32}
   ((gateArea1 effectiveGateArea1) (gateArea2 effectiveGateArea2) ... )    ;" ;

Where:

effectiveGateArea

Indicates the effective gate area interpolated from the PWL table. If this table it not defined, the real gate area is used.
Type: Float, specified in microns

gateArea

Indicates the real gate area.
Type: Float, specified in microns

Antenna Gate Plus Diffusion Rule

The antenna gate plus diffusion rule can be used to represent the protection provided by the diffusion area that is added to the gate area value in the PAR (partial antenna ratio) equation on the given antenna model, as given below, which can be considered as the “additional effective gate-area”.

PAR = {(cutFactor * cut) * diffReducePWL(diff) - (minusDiffFactor * diff)} / {gatePWL(gate) + plusDiffProtect(diff)}

You can create an antenna gate plus diffusion rule by using the following property definition:

PROPERTY LEF58_ANTENNAGATEPLUSDIFF
"ANTENNAGATEPLUSDIFF {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 |OXIDE5 | ...
   | OXIDE32}
   {plusDiffFactor | 
   PWL ((diffArea1 plusDiffProtect1) (diffArea1 plusDiffProtect2) ...)}    ;" ; 

Where:

All the other keywords are the same as the existing LEF cut layer ANTENNAGATEPLUSDIFF syntax.

gatePWL(gate)

Indicates the gate area as defined in the PWL table.

plusDiffProtect(diff)

Indicates the diffusion area that is added to the gate area value in the PAR (partial antenna ratio) equation.

If plusDiffFactor is specified, then:

plusDiffProtect =  plusDiffFactor * diffArea

If the PWL table is defined, then:

plusDiffProtect = interpolated PWL value indexed by diffArea.

If PAR is greater than cutGateRatio (from ANTENNAAREARATIO), and no diffusion is connected then there will be a violation.

If PAR is greater than cutGateDiffRatio (from ANTENNADIFFAREARATIO), then there will be a violation. This is checked even if the diff_area = 0 (no diffusion is connected).

Antenna Gate Plus Diffusion Rule Examples

The following example shows a rule for layer via1:

cut_area <= 100 * (funcGate(gate_area) + funcDiff(diff_area))

funcGate = 1 for gate_area < 1, and equals 2 for gate_area >= 1

funcDiff = 10 for diff_area < 2, and equals 50 for diff_area >= 2.

Then,

100 >= cut_area / (funcGate(gate) + funcDiff(diff))

This fits the PAR formula above using gatePWL(gate) and plusDiffProtect(diff) values.

Then the LEF file will have the following:

#Max-ratio = 100 for all diff-area values because the diff-protect value is #accounted for inside the PAR equation. Note, there is no need for ANTENNAAREARATIO #which is only checked for cut with no diff connected, while ANTENNADIFFAREARATIO
#is checked for diff and no diff connected.
ANTENNAMODEL OXIDE1 ;
ANTENNADIFFAREARATIO  ( 0 100 ) ( 10000.0 100 ) ;
#This models funcGate(gate_area) above: 0 to 0.99 is 1, above 1.0 is 2
PROPERTY LEF58_ANTENNAGATEPWL OXIDE1
    "ANTENNAGATEPWL ( ( 0  1 ) ( 0.99 1 ) ( 1.0 2 ) ( 10000.0 2 ) ) ;" ;
#This models funcDiff(diff_area) above: 0 to 1.99 is 10, above 1.0 is 50
PROPERTY LEF58_ ANTENNAGATEPLUSDIFF
    "ANTENNAGATEPLUSDIFF OXIDE1
       (( 0  10 ) ( 1.99 10 ) ( 2.0 50 ) ( 10000.0 50 )) ;" ;

Array Spacing Rule

You can use array spacing rules to require extra space between cut arrays, and between each cut array inside one large via. This rule only applies to large vias with many cuts; it does not apply to cuts for smaller vias.

When a cut layer has multiple cut classes defined, at the most one ARRAYSPACING property statement can be specified per cut class.

You can create an array spacing rule by using the following property definition:

PROPERTY LEF58_ARRAYSPACING 
“ARRAYSPACING [CUTCLASS className] [PARALLELOVERLAP]
      [LONGARRAY] [WIDTH viaWidth] 
      [WITHIN within ARRAYWIDTH arrayWidth] CUTSPACING cutSpacing
      {ARRAYCUTS arrayCuts SPACING arraySpacing} ...
      ;...” ;

All other keywords are the same as the existing LEF cut layer ARRAYSPACING syntax.

Where:

CUTCLASS className

Defines the array spacing rule for a specific cut class (className). If CUTCLASS is defined in cut layer, then CUTCLASS must be specified in the ARRAYSPACING statement. Specify individual rules with the CUTCLASS keyword for each cut class, if needed.

PARALLELOVERLAP

Indicates that the array spacing rule applies only when there is a parallel edge overlap greater than 0.

WITHIN within ARRAYWIDTH arrayWidth

Indicates a specific way to check cut spacing of a via array. With WITHIN, only one ARRAYCUTS statement should be defined, and cutSpacing and arraySpacing should have the same value. Any same-net or different-net cuts within within would be considered as a via array. Then, a rectilinear bounding box of all of the cuts of the via array is formed. Any cuts completely inside a portion that has width less than or equal to arrayWidth is removed. The remaining cuts must have spacing of cutSpacing (or arraySpacing).
Type: Float, specified in microns

Array Spacing Rule Examples

Backside Rule

A backside rule can be used to specify that cut layer is used on the underside of the die.

You can create a backside rule by using the following property definition:

PROPERTY LEF58_BACKSIDE 
“BACKSIDE ;” ; 

Where:

BACKSIDE

Indicates that the cut layer is a backside cut layer. Only a regular cut layer or a passivation cut layer can be a backside layer; a TSV cut layer cannot be a backside layer.

Cut Class Rule

Cut class rules can be used to define the cut classes to which different types of vias can belong.

You can create a cut class rule by using the following property definition:

PROPERTY LEF58_CUTCLASS 
"CUTCLASS className WIDTH viaWidth [LENGTH viaLength] [CUTS numCut]
      [ORIENT {HORIZONTAL | VERTICAL}]
      ; " ;

Where:

CUTCLASS className

Specifies the name of the cut class. This name is used in later references to the cut class.

CUTS numCut

Defines the equivalent number of cuts of the cut class for calculation of resistance value. Resistance value for this cut class vias would be ( Resistance of the cut layer )/ numCut . Default: 1
Type: Integer

Figure 2-23 illustrates three via sizes. Via Vx1 contains one cut, via Vx2 contains 2 cuts, and via Vx4 contains four cuts. Using the above equation, Figure 2-23 shows how many cuts of each cut type are required to meet the listed minimum cut rule.

The resistance value is determined using the following equation:

cut layer resistance / numCut

Figure 2-23 Illustration of Via Sizes

LENGTH viaLength

Specifies the cut length for this cut class. Any vias with cut lengths of viaLength belong to this class. LENGTH is only used for rectangular rather than square cuts, and viaLength must be greater than viaWidth.
Type: Float, specified in microns

ORIENT {HORIZONTAL | VERTICAL}

Specifies that the given horizontal or vertical direction is the only legal orientation of a cut via in this cut class. This keyword should be specified only for a rectangular cut class.

WIDTH viaWidth

Specifies the cut width for this cut class. Any vias with cut widths of viaWidth belong to this class.
Type: Float, specified in microns

Cut Class Rule Examples

Cut On Center Line Rule

You can create a cut on center line rule to specify that the center of a via cut must be placed on the center lines of the wires on both metal layers if the wire width is less than the specified width.

You can create a cut on center line rule by using the following property definition:

PROPERTY LEF58_CUTONCENTERLINE 
  "CUTONCENTERLINE width CUTCLASS className [ABOVE | BELOW]
     [EXTRACUT cutWithin WIDTH exactWidth]
     ;..." ;

Where:

ABOVE | BELOW

Specifies that the cut on center line rule will be triggered based on the above or below metal wire width alone, if ABOVE or BELOW is specified.  

CUTCLASS className

Defines the cut on line center rule for a specific cut class, className. This CUTONLINECENTER keyword can only be defined on a cut layer with cut class definition.

CUTONCENTERLINE width

Specifies that the center of a via cut must be placed on the centerlines of the wires on both metal layers if the wire width is less than width.
Type: Float, specified in microns

EXTRACUT cutWithin WIDTH exactWidth

Specifies that for perfectly aligned via cuts within cutWithin in a wire with width equal to exactWidth, having the center of the bounding box of the cuts on the center lines of the wire can also meet the rule.
Type: Float, specified in microns

Cut On Center Line Rule Examples

Directional Spacing Rule

You can create a directional spacing rule by using the following property definition:

PROPERTY LEF58_DIRECTIONALSPACING 
"DIRECTIONALSPACING cutSpacing {HORIZONTAL | VERTICAL}
    PRL prl
    CUTCLASS className1 TO className2
    [PARALLEL parLength WITHIN parWithin 
        [EXCLUDECUTEDGE]
        [CUTS numCuts]
        [VIAGROUP groupName]]
    ; " ;

Where:

CUTS numCuts

Specifies that the directional cut spacing rule applies only if the number of neighboring cuts of the cut class className2 in a search window is greater than or equal to numCuts.
Type: Integer

DIRECTIONALSPACING cutSpacing {HORIZONTAL | VERTICAL}
PRL
prl
CUTCLASS className1 TO className2

Specifies a horizontal or vertical spacing of cutSpacing between two cuts, one belonging to className1 and the other belonging to className2, and the cuts have a parallel run length greater than prl vertically when HORIZONTAL is specified and horizontally when VERTICAL is specified.
Type: Float, specified in microns

EXCLUDECUTEDGE

Specifies that there are two separate neighboring cut search windows for the cuts of the cut class className2 formed by parLength and parWithin by excluding the cut edge of a via of the cut class className1. This means that the windows are formed from the cut corners. Each of the windows would be checked for a neighboring cut individually, and the rule will be triggered if any one of the windows fulfill the neighboring cut condition.
Type: Float, specified in microns

PARALLEL parLength WITHIN parWithin

Specifies that the directional cut spacing rule applies only if a cut edge in the orthogonal direction of the spacing of a via of cut class className1 has a neighbor cut of cut class className2 within parWithin having parallel run length greater than parLength on the same side.

Type: Float, specified in microns

VIAGROUP groupName

Specifies that the directional cut spacing rule applies only if the neighbor via of cut class className2 belongs to a via group groupName.

Type: Float, specified in microns

Directional Spacing Rule Examples

Enclosure Rule

An enclosure rule can be used to prohibit via cuts from sharing the same wire edge.

You can create an enclosure rule by using the following property definition:

PROPERTY LEF58_ENCLOSURE 
"ENCLOSURE [CUTCLASS className][ABOVE | BELOW]
[MINCORNER]
   {EOL eolWidth [HORIZONTAL | VERTICAL]
          [MINLENGTH minLength] [EOLONLY] 
          [SHORTEDGEONEOL] eolOverhang otherOverhang
          [SIDESPACING spacing EXTENSION backwardExt forwardExt
          |ENDSPACING spacing EXTENSION extension
          ]
   |{overhang1 overhang2
     |[OFFCENTERLINE] END overhang1 SIDE overhang2
     | HORIZONTAL overhang1 VERTICAL overhang2}
     [JOGLENGTHONLY length [INCLUDELSHAPE] ]
     [HOLLOW {HORIZONTAL|VERTICAL} length]
     [WIDTH minWidth 
        [INCLUDEABUTTED]
        [EXCEPTEXTRACUT cutWithin [PRL | NOSHAREDEDGE | EXACTPRL prl]]
     |LENGTH minLength 
     |EXTRACUT [EXTRAONLY [PRL prl]] 
     |REDUNDANTCUT cutWithin
     |PARALLEL parLength [parLength2] WITHIN parWithin [parWithin2] 
          [BELOWENCLOSURE belowEnclosure
               [ALLSIDES enclosure1 enclosure2]
          |ABOVEENCLOSURE aboveEnclosure] 
     |CONCAVECORNERS numCorner
     |OTHERWITHINWIDTH width WITHIN within
     [OTHERSIDE otherEnclosure]]
     }
     ;..." ;

Where:

All other keywords are the same as the existing LEF cut layer ENCLOSURE syntax.

ABOVEENCLOSURE aboveEnclosure

Specifies that the enclosure rule applies only if the enclosure on the above metal layer is less than aboveEnclosure on the entire wire width or the edge containing the cut on either side perpendicular to the side having neighbors, or the wire direction containing the cut on the below metal layer. This means that BELOW must be defined along with it.
Type: Float, specified in microns

ALLSIDES enclosure1 enclosure2

Specifies that the rule is exempted if the below metal enclosure is greater than or equal to the minimum of the specified values, enclosure1 and enclosure2, on all four sides including corners and greater than or equal to the maximum of enclosure1 and enclosure2 on any two opposite sides of the cut.

This exemption works independently from belowEnclosure. In other words, if the conditions on ALLSIDES are met or enclosure is greater than or equal to belowEnclosure on two opposite sides in the direction perpendicular to the cut side having neighbor, the rule is exempted.
Type: Float, specified in microns

BELOWENCLOSURE belowEnclosure

Specifies that the enclosure rule only applies if the enclosure on the below metal layer is less than belowEnclosure on the entire wire width or the edge containing the cut on either side perpendicular to the side having neighbors, or the wire direction containing the cut on the above metal layer. This means that the ABOVE keyword must be defined along with it.
Type: Float, specified in microns

CONCAVECORNERS numCorner

Specifies a search window by extending overhang1 on four sides of the cut, overhang1 must be equal to overhang2. If the search window finds the number of concave corners of the metal enclosing the cut to be greater than the numCorner, then it is a violation. If the metal corner collides with a corner of the search window, then it does not count. If the metal corner aligns with a side edge of the search window, then it will count.
Type: Integer

CUTCLASS className

Defines the enclosure rule for a specific cut class (className). If CUTCLASS is defined in cut layer, then CUTCLASS must be specified in ENCLOSURE.

Specify individual rules with the CUTCLASS keyword for each cut class, if needed.

END overhang1 SIDE overhang2

Specifies that for rectangular cut vias, overhang1 applies to the end edges, and overhang2 applies to the side edges. You must use this syntax only with cut class having rectangular cut vias.

ENDSPACING spacing EXTENSION extension

Specifies the enclosure rule only applies if there is no different-net neighbors on the EOL edge with spacing away and extension of extension.
Type: Float, specified in microns

EOL eolWidth [MINLENGTH minLength] [EOLONLY]
eolOverhang otherOverhang

Specifies the enclosure values for a cut near an end-of-line edge with length less than eolWidth. The first overhang, eolOverhang, must be applied to the EOL edge and it's opposite side while the second overhang, otherOverhang, must be applied to the other two sides. If EOLONLY is also specified, it should be specified for all ENCLOSURE EOL statements, and for an EOL edge, only one of the ENCLOSURE EOL statements should be observed while other ENCLOSURE statements without EOL keyword are ignored. Otherwise, fulfilling one of the ENCLOSURE with or without EOL keyword is allowed.
Type: Float, specified in microns

MINLENGTH specifies that an edge is EOL only if the end-of-line length is greater than or equal to minLength along both the sides. In the other words, if the end-of-line length is less than minLength along any one side, the rule does not apply.
Type: Float, specified in microns

EXCEPTEXTRACUT cutWithin [PRL | NOSHAREDEDGE | EXACTPRL prl]

Indicates that if there is another via cut having same metal shapes on both metal layers less than or equal to cutWithin distance away, then the ENCLOSURE with WIDTH rule is ignored, and the ENCLOSURE rules for minimum width wires (that is, no WIDTH keyword) are applied to the via cuts instead. If the NOSHAREDEDGE keyword is specified, the via cuts cannot share the same failing wire edge. (See Figure 2-31)

If the PRL keyword is used, the exemption will only be applied if there are neighbor cuts with common parallel run length greater than 0 on the opposite edges for all of the failing edges of a cut.

If the EXACTPRL keyword is used, the exemption will be applied only if the cuts have parallel run length exactly equal to prl.

If you have more than one ENCLOSURE statement for a given WIDTH, only one of the ENCLOSURE statements for that WIDTH needs to be met.
Type: Float, specified in microns (for all values)

EXTRACUT

Indicates that the enclosure rule only applies when there are two or more cuts having same metal shapes on both metal layers. If you have multiple ENCLOSURE statements (some with EXTRACUT) defined, only one of the rules need to be met.

EXTRAONLY

Specifies that vias with two or more cuts having the same metal shapes on both metal layers must follow this given enclosure statement, but not other ENCLOSURE without WIDTH statements. The ENCLOSURE WIDTH keyword will still be used on the corresponding wire width.

HOLLOW {HORIZONTAL|VERTICAL} length

Specifies that part of a via does not require any metal/enclosure. Take the center point of a cut and extend length horizontally or vertically, based on whether HORIZONTAL or VERTICAL is specified, and that portion does not require any metal/enclosure. See Figure 2-45Type: Float, specified in microns

HORIZONTAL | VERTICAL

Specifies that the rule applies only if the EOL edge is in the given direction.

HORIZONTAL overhang1 VERTICAL overhang2

Specifies that overhang1 must be applied on the left/right opposite sides horizontally, and overhang2 must be applied to bottom/top opposite sides vertically.
Type: Float, specified in microns

INCLUDEABUTTED

Specifies that if a cut is abutted to the wide wire with width greater than or equal to minWidth, the corresponding overhang values will still be applied on the cut.

JOGLENGTHONLY length [INCLUDELSHAPE]

Specifies that the enclosure rule applies only if a cut overlaps with a wrong way jog with minimum wrong way width and maximum edge length less than length sandwiched by two right way wires with projected PRL less than 0 in the wrong way direction in a ‘Z’ shape. If INCLUDELSHAPE is specified, the enclosure rule also applies if a cut overlaps with a wrong way jog with minimum wrong way width and length less than length connected to a right way wire in an ‘L’ shape.
Type: Float, specified in microns

MINCORNER

Specifies that the enclosure in the corners only requires to cover the minimum enclosure value instead of MAXXY style of the two enclosure values.

OFFCENTERLINE

Specifies that the enclosure rule applies only for a via cut not colliding with the center line of the metal wires with width exactly equal to width. This keyword must be used along with CUTCLASS for rectangular cut vias and WIDTH for certain width.

OTHERSIDE otherEnclosure

Specifies the enclosure on the opposite side of a cut edge, which faces the wire fulfilling the OTHERWITHINWIDTH condition, to be otherEnclosure.
Type: Float, specified in microns

OTHERWITHINWIDTH width WITHIN within

Specifies that the enclosure rule applies only if there is a neighboring wire within within of the cut and completely covering a cut edge in the non-preferred routing layer direction having a width greater than width on the other layer on which the enclosure applies and that has the RECTONLY construct. This means that ABOVE or BELOW must be specified. In addition, this enclosure rule is not applied on wide wires, which should be subjected to ENCLOSUREWIDTH statements as usual.
Type: Float, specified in microns

PARALLEL parLength [parLength2] WITHIN parWithin [parWithin2]

Specifies that the enclosure values must be fulfilled, but not other ENCLOSURE statements if a cut has a neighbor wire within (less than) parWithin having common parallel run length to the cut greater than or equal to parLength on one and only one side. The neighbor wire should have an edge in the preferred routing direction facing the cut to trigger the rule. In other words, that wire edge should not have a parallel run length greater than or equal to 0 with the orthogonal cut edge. If parLength is a negative value, the two edges will be checked in WITHIN style. In addition, the enclosure on a wide wire in ENCLOSURE WIDTH is usually larger, but this enclosure with a neighbor could be even larger. Hence, this enclosure rule should always be checked.

If a second set of length and within variables, parLength2 and parWithin2, is specified, then they must be defined together. Here parLength2 must be smaller than parLength and parWithin2 must be larger than parWithin. Then, it will also be a violation if there is a neighbor that is greater than or equal to parWithin and less than parWithin2 having a common parallel run length to the cut less than parLength and greater than or equal to  parLength2 on any one (or both) side(s). In other words, it is only legal if there are neighbors on both the sides based on parWithin and parLength, or there is no neighbor on either side based on parWithin2 and parLength2.
Type: Float, specified in microns

PRL prl

Specifies that the enclosure rule must be applied for vias with two or more cuts if the cuts have parallel run length exactly equal to prl.
Type: Float, specified in microns

REDUNDANTCUT cutWithin

Specifies the enclosure on redundant cuts, which share the same metal shapes on both metal layers to a cut within cutWithin distance that fulfills a ENCLOSURE statement without REDUNDANTCUT keyword. This includes ENCLOSURE statement with EXTRACUT keyword. For example, when one of the cuts fulfills the ENCLOSURE statement using the EXTRACUT keyword, and is outside of a wide object, that triggers a separate ENCLOSURE statement with the WIDTH keyword, the neighbor cut within cutWithin distance away can merely fulfill the ENCLOSURE statement using the REDUNDANTCUT keyword, and it does not necessarily need to fulfill the ENCLOSURE statement with the WIDTH keyword.

If a separate ENCLOSURE statement with the WIDTH keyword is used, the cut in a wide object with width greater than or equal to minWidth should fulfill the corresponding overhang values in order for the redundant cuts to follow the overhang values in the ENCLOSURE statement with the REDUNDANTCUT keyword. You can specify only one ENCLOSURE statement with the  REDUNDANTCUT keyword.
Type: Float, specified in microns

SIDESPACING spacing EXTENSION backwardExt forwardExt

Specifies the enclosure rule only applies if there is no different-net neighbors on the side (non-EOL) edges with spacing away and extensions from the EOL edge by backwardExt going backward and forwardExt going forward.
Type: Float, specified in microns

SHORTEDGEONEOL

Specifies that the eolOverhang value must be applied to the end/short edges of a rectangular cut via while the otherOverhang value must be applied to the other opposite sides. This keyword must be used along with CUTCLASS for rectangular cut vias.

Enclosure Rule Examples

Enclosure Edge Rule

You can create a specific cut-edge enclosure rule that does not fit the normal enclosure rule semantics by using the following property definition:

PROPERTY LEF58_ENCLOSUREEDGE 
"ENCLOSUREEDGE [CUTCLASS className] [ABOVE | BELOW] overhang 
     {OPPOSITE 
          {[EXCEPTEOL eolWidth] [NOCONCAVECORNER within]
               [CUTTOBELOWSPACING spacing
                  [ABOVEMETAL extension]]
          | WRONGDIRECTION 
          }
     |[INCLUDECORNER]
      {WIDTH [BOTHWIRE] minWidth [maxWidth]
      | SPANLENGTH minSpanLength [maxSpanLength]}
           PARALLEL parLength
           {WITHIN parWithin | WITHIN minWithin maxWithin} 
           [EXCEPTEXTRACUT [cutWithin]]
           [EXCEPTTWOEDGES [exceptWithin]]
     |CONVEXCORNERS convexLength adjacentLength
           PARALLEL parWithin LENGTH length 
     }
  ;]..." ;

Where:

All other keywords are the same as the existing LEF cut layer ENCLOSUREEDGE syntax.

ABOVE | BELOW

If you specify ABOVE, the overhang is required on the routing layers above this cut layer. If you specify BELOW, the overhang is required on the routing layers below this cut layer. If you specify neither, the rule applies to both adjacent routing layers.

ABOVEMETAL extension

Specifies that the cut to below metal different-net spacing of a cut edge fulfilling the overhang requirement is measured from the projected above metal edge with extension along the cut edge direction. See Figure 2-49.
Type:  Float, specified in microns

BOTHWIRE

Specifies that the rule only applies if the width of the neighbor wire is greater than or equal to minWidth.

CONVEXCORNERS convexLength adjacentLength
PARALLEL parWithin LENGTH length

Specifies the overhang on an edge with length less than or equal to convexLength between two convex corners to be overhang, if the following conditions are met:

The edge has adjacent edge with length less than or equal to adjacentLength and is also between two convex corners.  The cut has neighbor wires with parallel run length greater than 0 and within (less than) parWithin on both of that edge and  another adjacent edge with length greater than or equal to length.
Type: Float, specified in microns

CUTCLASS className

Defines the enclosure edge rule for a specific cut class (className). If CUTCLASS is defined in cut layer, then CUTCLASS must be specified in the ENCLOSUREEDGE statement.

Specify individual rules with the CUTCLASS keyword for each cut class, if needed.

CUTTOBELOWSPACING spacing

Defines the spacing of a cut edge fulfilling the overhang requirement to a different-net wire on the below metal layer.  Type: Float, specified in microns

ENCLOSUREEDGE overhang WIDTH minWidth PARALLEL parLength WITHIN parWithin

Indicates that any edge from this cut layer that is enclosed by metal that is greater than or equal to minWidth wide, and the enclosing metal edge is parallel to another metal edge greater than parLength in length and less than parWithin distance away, requires overhang enclosure.
Type: Float, specified in microns (for all values)

EXCEPTEXTRACUT [cutWithin]

Indicates that if there is another via cut in the same metal intersection in both the above and below layers, this rule is not checked. If you specify cutWithin, the other via cut should be less than and equal to cutWithin distance away in order to ignore this rule.

EXCEPTTWOEDGES [exceptWithin]

Specifies that if the enclosing metal edges have parallel metal edges greater than parLength that are less than exceptWithin, if specified, or parWithin away on opposite sides that covers the same PRL between the cut, then the rule does not apply.

INCLUDECORNER

Defines the enclosure requirement applied to the corners of the cut in Euclidean measurement. This corner check is essential when the cut is slightly outside the projection of the neighbor wire.

NOCONCAVECORNER within

Specifies that there should be no concave corner on the above metal layer that is a within distance away after the extending overhang on the orthogonal edges of the edges that fulfill the overhang requirement.
Type: Float, specified in microns

OPPOSITE [EXCEPTEOL eolWidth]

Specifies that if overhang of a via cut is less than or equal to overhang on the above metal layer (ABOVE must be specified when OPPOSITE is used), the entire opposite edge must also have overhang less than or equal to overhang.

The EXCEPTEOL keyword indicates that EOL edges with width less than to eolWidth are exempted from the rules.

Type: Float, specified in microns

SPANLENGTH minSpanLength [maxSpanLength]

Specifies that the enclosure edge rule is triggered by the span length of the wire containing the cut via in the direction perpendicular to the parallel run length is greater than or equal to minSpanLength, instead of the width of the wire.  An optional maxSpanLength has a similar definition as maxWidth in WIDTH.
Type: Float, specified in microns

WIDTH minWidth [maxWidth]

Specifies an optional maxWidth, such that if the width of the wire containing the cut via is greater than or equal to minWidth and less than maxWidth, then all the corresponding enclosure edge rules that meet the parallel and within conditions will be applied to the cut.

If any one of the ENCLOSUREEDGE statements use maxWidth, then all the ENCLOSUREEDGE statements must have maxWidth. If SPANLENGTH is specified then all of them must have maxSpanLength, and all of the enclosure edge rules that meet the width condition in WIDTH statement or span length condition in SPANLENGTH construct (parallel run length is greater than or equal to minSpanLength and less than maxSpanLength) and the parallel and within conditions will be applied to the cut.
Type: Float, specified in microns

WITHIN minWithin maxWithin

Specifies that the rule only applies if parallel neighbor metal edge is greater than or equal to minWithin and less than maxWithin distance away.
Type: Float, specified in microns

WRONGDIRECTION

Specifies that overhang in the non-preferred direction on the above metal layer (you must specify the ABOVE keyword when  when OPPOSITE is defined) of a via cut must be exactly equal to the overhang.

Enclosure Edge Rule Examples

Enclosure Table Rule

You can create an enclosure table rule to specify the enclosure requirement based on the wire width in a table format by using the following property definition:

PROPERTY LEF58_ENCLOSURETABLE 
"ENCLOSURETABLE [CUTCLASS className] [MASK maskNum]
[OTHERMASK otherMaskNum]
         [USEMAXWIDTH | USEMINWIDTH | WITHINFIRSTWIDTH]
     [DEFAULT {[ABOVE | BELOW] 
        overhang1 overhang2 overhang3 overhang4}...]
     {WIDTH width {[ABOVE | BELOW] 
        overhang1 overhang2 overhang3 overhang4 [MINSUM]
        [MUSTUSE]
        [MAXLENGTH length | LENGTH length]
        [LAYER trimLayer OVERLAP {1|2}
              [TRIMLENGTHOUTERMETAL trimLength]
        | OTHERWITHINWIDTH width [LAYER layerName]
              WITHIN within 
              [OTHERSIDE otherEnclosure]]
        | LINEENDGAPONLY
        | ROWBOUNDARY within OTHERSIDE otherEnclosure]
        [EXACTZERO]
        [INCLUDEABUTTED]}...
     | OTHERWIDTH otherWidth [PARALLEL parLength WITHIN parWithin]
           {{ABOVE| BELOW}
        overhang1 overhang2 overhang3 overhang4 [MINSUM]}...}...
     ; " ;

Where:

All the other keywords are the same as the existing LEF cut layer ENCLOSURETABLE syntax.

CUTCLASS className

Defines enclosure rules for a specific cut class className. If CUTCLASS is defined in cut layer, then CUTCLASS must be specified in the ENCLOSURETABLE statement.

DEFAULT {[ABOVE| BELOW] overhang1 overhang2 overhang3
overhang4
}...

Specifies overhang1 and overhang2 to be overhangs of a cut on two opposite sides and overhang3 and overhang4 on the other two opposite sides in a wire of any width. For a rectangular cut, the first two overhang values, overhang1 and overhang2, would be applied to the end or short cut edges while the last two overhang values, overhang3 and overhang4, would be applied to the side or long cut edges.

If you specify BELOW, the overhang is required on the routing layers below this cut layer. If you specify ABOVE, the overhang is required on the routing layers above this cut layer. If you specify neither, the rule applies to both adjacent routing layers.
Type: Float, specified in microns

EXACTZERO

Specifies that if any of the given overhang values – overhang1, overhang2, overhang3, or overhang4 – is equal to 0, the enclosures must be exactly equal to 0 on the given sides and remain as greater than or equal to the given value on the other non-zero overhangs.

For example:

PROPERTY LEF58_ENCLOSURETABLE "
ENCLOSURETABLE
WIDTH 0.0 0.0 0.0 0.030 0.030 EXACTZERO
0.015 0.015 0.015 0.015 ; " ;

means that enclosures must be exactly equal to 0 on two opposite sides and greater than or equal to 0.030 on the other two opposite sides or greater than equal to 0.015 on all four sides to be legal.

INCLUDEABUTTED

Specifies that if a cut is abutted to a wide wire with width greater than width, the overhang values corresponding to the wide wire should still be applied on the cut.

LAYER trimLayer OVERLAP {1|2}

Specifies a special enclosure requirement on rectangular pins depending on which pin end overlaps with or touches shapes in trimLayer, which must be a layer with TYPE TRIMMETAL. If 1 is given in OVERLAP, the corresponding enclosure rule could be applied to the pin end that overlaps with the shapes in trimLayer. If 2 is given in OVERLAP, the corresponding enclosure rule could be applied to both ends of a pin only if both the ends overlap with the shapes in trimLayer.

LENGTH length

Specifies that the overhang requirements apply only if the span length of the wire containing the cut is greater than or equal to length.

Type: Float, specified in microns

LINEENDGAPONLY

Specifies that the rule applies only if a wire containing a cut on which the enclosure rule is applied fulfills the LINEENDGAP condition on the above or below metal layer.

MASK maskNum

Specifies the mask on which the metal of this enclosure table rule will be applied. With ABOVE/BELOW, the mask is referred on the above/below metal layers. Without ABOVE or BELOW, the mask is referred on both above and below metal layers. The maskNum must be a positive integer, and most applications only support values of 1, 2, or 3. If MASK is used on one mask, separate tables should be defined for other masks.

Type: Integer

MAXLENGTH length

Specifies the overhang requirements only applies if the span length of the wire containing the cut is less than or equal to the length.

Type: Float, specified in microns

MINSUM

Indicates that it is legal for sum of overhang values on two opposite sides greater than or equal to the sum of the specified overhangs, and the smaller overhang value is greater than or equal to the smaller specified overhangs. This keyword should only be defined for asymmetrical overhang values.

MUSTUSE

Specifies that if the subsequent condition is met, this overhang requirement must be applied. This means that if the conditions in other statements with the same WIDTH value are also met, they are to be ignored and only the statement with MUSTUSE must be checked. For any width value, only one statement can have the MUSTUSE construct. In addition, some optional constructs must be specified along with MUSTUSE.

Type: Float, specified in microns

OTHERMASK otherMaskNum

Specifies the mask on which the metal on the other layer in OTHERWIDTH will be applied. otherMaskNum must be a positive integer, and most applications only support the values of 1, 2, or 3.

Type: Integer

OTHERSIDE otherEnclosure

Defines the enclosure on the opposite side of a cut edge, which faces the wire fulfilling the OTHERWITHINWIDTH condition, as otherEnclosure.

Type: Float, specified in microns

{OTHERWIDTH otherWidth {{ABOVE| BELOW}
overhang1 overhang2 overhang3 overhang4 [MINSUM]}...}...

Specifies that the overhang requirements on the above/below metal layer corresponding to the specified ABOVE/BELOW keyword will depend on the width of the other (below/above) metal layer. The meaning of overhang and MINSUM is the same as in WIDTH. See Figure 2-59.

Type: Float, specified in microns

OTHERWITHINWIDTH width [LAYER layerName] WITHIN within

Specifies that the enclosure rule applies only if there is a neighboring wire within within of the cut and completely covering a cut edge in the non-preferred routing layer direction having width greater than width on the other layer having the RECTONLY construct on which the enclosure applies. This means that ABOVE or BELOW must be specified. If LAYER is specified, layerName must be a previously defined metal layer and the neighboring wire search is preformed on the given layer. layerName should not be the intermediate below metal layer, which could be specified by ABOVE OTHERWITHINWIDTH without using LAYER.

Type: Float, specified in microns

For example:

PROPERTY LEF58_ENCLOSURETABLE " 
ENCLOSURETABLE CUTCLASS VA
WIDTH 0.00000 BELOW 0.090 0.090 0.000 0.000
WIDTH 0.00000 BELOW 0.120 0.120 0.000 0.000
MUSTUSE LENGTH 0.5
WIDTH 0.00000 BELOW 0.060 0.060 0.000 0.000
OTHERWITHINWIDTH 0.039 WITHIN 0.008
... ; " ;

means that if the length on a below routing metal containing a VA cut is greater than or equal to 0.5, "0.120 0.120 0.000 0.000" must be applied even if the OTHERWITHINWIDTH condition is also fulfilled. If the length is less than 0.5 and the OTHERWITHINWIDTH condition is met, "0.060 0.060 0.000 0.000" is applied. If the length is less than 0.5 and the OTHERWITHINWIDTH condition is not met, "0.090 0.090 0.000 0.000" is applied.

PARALLEL parLength WITHIN parWithin

Specifies that the enclosure rule applies only if there is a metal neighbor at least on one side of the cut within (less than) parWithin having common parallel run length greater than or equal to parLength on the layer on which the enclosure is applied. If parLength is a negative value, the two edges will be checked in WITHIN style. The metal containing the cut is not considered a neighbor.

Type: Float, specified in microns

ROWBOUNDARY within OTHERSIDE otherEnclosure

Specifies that the enclosure rule applies only on the cut that is within within of any standard cell row boundary. The opposite side of the cut edge facing the boundary must have enclosure greater than or equal to otherEnclosure. See Figure 2-70.

Type: Float, specified in microns

TRIMLENGTHOUTERMETAL trimLength

Specifies that the enclosure with a shape on the layer trimLayer overlapping with or touching a wire end applies only if the trimLayer shape has a length greater than or equal to trimLength, and only the outermost wires overlapping or touching the trimLayer shape are subjected to this rule.

Type: Float, specified in microns

USEMAXWIDTH

Specifies that the maximum wire width with which a cut overlaps is used to look up the proper width rows for the overhang requirements. It is similar to the width interpretation in ENCLOSURE.

USEMINWIDTH

Specifies that the minimum wire width with which a cut overlaps is used to look up the proper width rows for the overhang requirements.

{WIDTH width {[ABOVE| BELOW]
overhang1 overhang2 overhang3 overhang4}...}...  

Specifies the overhang requirements for a cut in a wire having a certain width. The width values must be the same or in increasing order (from top to bottom) in the table. If any of the overhang values on a routing layer are asymmetrical, that is,  overhang1 is not equal to overhang2 or overhang3 is not equal to overhang4, then the minimum wire width that the cut touches or overlaps with is determined. The last row with  wire width greater than width and any one of the corresponding specified overhangs or overhangs defined in DEFAULT must be fulfilled.

In addition, the minimum overhang value on all the four sides, including corners, is applied. The other overhang values per cut edges, without corner consideration, are applied. If all of the overhang values are symmetrical, the maximum wire width that the cut overlaps with and the traditional rectangle enclosure by using one overhang value on the two opposite sides and another overhang value on the other two opposite sides must be used.

The definition of overhangs ABOVE and BELOW have the same meaning as those in DEFAULT.

For a rectangular cut, the first two overhang values, overhang1 and overhang2, would be applied to the end or short cut edges while the last two overhang values, overhang3 and overhang4, would be applied to the side or long cut edges.

Type: Float, specified in microns

WITHINFIRSTWIDTH

Specifies that the minimum wire width that a cut overlaps with should be used to look up the enclosure requirement except for the case in which one of the overlap wire width is applicable to the width on the first row. In that case, if a cut overlaps with the wire widths applicable to multiple rows, the minimum wire width other than the widths for the first row would be used. In other words, the enclosure on the first row would be used only if a cut overlaps solely with the wire widths applicable to the first row width.

Enclosure Table Rule Examples

Enclosure Width Rule

You can create a specific cut-width enclosure rule that does not fit the normal enclosure rule semantics by using the following property definition:

PROPERTY LEF58_ENCLOSUREWIDTH 
"ENCLOSUREWIDTH {VIAOVERLAPONLY | USEMINWIDTH} 
     ; " ;

Where:

ENCLOSUREWIDTH VIAOVERLAPONLY

Indicates a method to check the enclosure width requirements. If a metal shape of a cut via protrudes on a certain side of the wide wire, the enclosure is not checked on that side (or the enclosure should be checked on the sides overlapped with the wide wire). In addition, the enclosure based on the width of the protrusion must also be checked against the cut.

When ENCLOSUREWIDTH VIAOVERLAPONLY is defined in a cut layer, for a given width, if only one ENCLOSURE statement with WIDTH construct having the same overhang values is found, the special edge based enclosure checking is applied. Otherwise, the traditional enclosure method is applied.

Cuts within a wide wire not only need to fulfill the corresponding ENCLOSURE WIDTH statements, but also need to fulfill one of the ENCLOSURE statements without WIDTH.

USEMINWIDTH

Specifies that the minimum width of the wires that overlap with a cut should be used to look up for the corresponding width-based enclosure requirements. This affects only ENCLOSURE statements and has no impact on ENCLOSURETABLE. When INCLUDEABUTTED is specified on an ENCLOSURE statement, it has precedence over USEMINWIDTH. This means that a cut overlapping or touching a wire with width greater than or equal to minWidth needs to follow only the specified enclosure requirements.

Enclosure Width Rule Examples

Figure 2-71 Illustration of Enclosure Width Rules

Enclosure Joint Rule

You can create enclosure joint rule to specify the overhang between a non-redundant cut to two consecutive joints in either above or both above and below routing layer.

You can create a enclosure joint rule by using the following property definition:

PROPERTY LEF58_ENCLOSURETOJOINT 
"ENCLOSURETOJOINT [CUTCLASS className] [ABOVE | BELOW]
       toOneJointOverhang [toBothJointOverhang]
       [EOLMINLENGTH minLength]
       JOINTWIDTH jointWidth JOINTLENGTH spanLength
       ; " ;

Where:

ABOVE | BELOW

Specifies that the rule only applies if the via cut is in two consecutive joints on the above or below routing layer.  

CUTCLASS className

Defines the enclosure to joint rule for a specific cut class className. If CUTCLASS is defined in cut layer, then CUTCLASS must be specified in ENCLOSURETOJOINT statement.

For each cut class, one individual rule with the CUTCLASS keyword should be specified, if needed.

ENCLOSURETOJOINT toOneJointOverhang toBothJointOverhang
JOINTWIDTH jointWidth JOINTLENGTH spanLength

Specifies the overhang between a non-redundant cut to two consecutive joints in either above or both above and below routing layer, with span greater than spanLength and not a EOL edge with length equal to the wire width, which is less than jointWidth, to be either toOneJointOverhang to one of the joints or toBothJointOverhang to both of the joints.  

For redundant cuts sharing the same metal on the above and below routing layer, one of the cuts fulfilling the rule will be sufficient.
Type: Float, specified in microns

EOLMINLENGTH minLength

Indicates that the joint must not be a EOL edge with length greater than or equal to the specified minLength along both sides and the length of the EOL edge is no longer necessarily equal to the wire width.
Type: Float, specified in microns

Enclosure Joint Rule Examples

Figure 2-72 Illustration of Enclosure Joint Rule

EOL Enclosure Rule

You can create EOL enclosure rule to specify the enclosure requirement on a EOL edge with width less than the specified EOL width.

You can create a EOL enclosure rule by using the following property definition:

PROPERTY LEF58_EOLENCLOSURE
"EOLENCLOSURE eolWidth [MINEOLWIDTH minEolWidth]
    [HORIZONTAL | VERTICAL]
    [EQUALRECTWIDTH] [CUTCLASS className] [ABOVE | BELOW]
    {{LONGEDGEONLY | SHORTEDGEONLY} overhang 
    | overhang 
        [exactOverhang
        | PARALLELEDGE parSpace EXTENSION backwardExt forwardExt
              [MINLENGTH minLength]
        | MINLENGTH minLength
        | ALLSIDES
        ]
    }
    ; " ;

Where:

All other keywords are the same as the existing LEF cut layer EOLENCLOSURE syntax.

ABOVE | BELOW

Specifies that the EOL enclosure rule only applies on the above or below routing layer.

ALLSIDES

Specifies that the specified enclosure, overhang, will be applied on all four sides of the cut.

CUTCLASS className

Defines the EOL enclosure rule for a specific cut class className. If CUTCLASS is defined in cut layer, then CUTCLASS must be specified in the EOLENCLOSURE statement.

For each cut class, one individual rule with CUTCLASS keyword must be specified, if required.

EOLENCLOSURE eolWidth

Specifies the enclosure requirement on a EOL edge with width less than eolWidth. No overhang requirement is specified for a cut on a non-EOL edge in this statement, which is a supplement ENCLOSURE requirement on a EOL edge.  The ENCLOSURE requirement on a non-EOL edge is still governed by other ENLCOSURE statements.
Type: Float, specified in microns

EQUALRECTWIDTH

Specifies that the EOL enclosure rule only applies to EOL edges with length equal to the wire width.

HORIZONTAL | VERTICAL

Specifies that the rule applies only if the EOL edge is in the given direction.

LONGEDGEONLY | SHORTEDGEONLY overhang

Specifies the ENCLOSURE EOL requirement of overhang is only applied to the side/long edges in LONGEDGEONLY or end/short edges in SHORTEDGEONLY of the rectangular cut, which means that a rectangular class name must be defined in CUTCLASS.

MINEOLWIDTH minEolWidth

Specifies that the rule only applies when minEolWidth is less than or equal to EOL width or length, which should be less than eolWidth and the EOL edge must touch a wire with width greater than or equal to minEolWidth.
Type: Float, specified in microns

MINLENGTH minLength

Indicates that the EOL enclosure only applies if EOL edge have length greater than or equal to the minLength along both sides. In other words, if the EOL length is less than the minLength along any one side, the edge is not a EOL edge to trigger the rule.
Type: Float, specified in microns

overhang [exactOverhang]

Specifies that the enclosure EOL requirement is either exactly equal to exactOverhang or greater than or equal to  overhang.
Type: Float, specified in microns

PARALLELEDGE parSpace EXTENSION backwardExt forwardExt
[MINLENGTH minLength]

Indicates that the EOLenclosure rule only applies if there is a parallel edge on one side that is less than the parSpace subtracting the width of the EOL edge away and by extending backwardExt going backward and forwardExt going forward in the direction orthogonal to the EOL edge.

The MINLENGTH keyword indicates that if the EOL length is less than minLength along the side, then any parallel edge on that side is ignored, and the rule may not apply.
Type: Float, specified in microns

EOL Enclosure Rule Examples

Figure 2-73 Illustration of EOL Enclosure Rule

Figure 2-74 Illustration of EOL Enclosure Rule with EQUALRECTWIDTH

Figure 2-75 Illustration of EOL Enclosure Rule with PARALLELEDGE and EXTENSION

Figure 2-76 Illustration of EOL Enclosure Rule with MINEOLWIDTH

EOL Spacing Rule

You can create EOL spacing rule to specify the cut spacing on certain edges of a cut on a EOL edge above routing layer with width less than the specified EOL width.

You can create a EOL spacing rule by using the following property definition:

PROPERTY LEF58_EOLSPACING
"EOLSPACING cutSpacing1 cutSpacing2
    [CUTCLASS className1 [{TO className2 cutSpacing1 cutSpacing2}...]] 
    ENDWIDTH eolWidth PRL prl
    ENCLOSURE smallerOverhang equalOverhang
    EXTENSION sideExt backwardExt SPANLENGTH spanLength
    ; " ;

Where:

[CUTCLASS className1 [{TO className2 cutSpacing1 cutSpacing2}...]]

Defines the EOL cut spacing rule for a specific cut class className to any other cuts, including those belonging to a different cut class. If TO is defined, the corresponding cut spacings will be applied between className1 and className2. If CUTCLASS is defined in cut layer, then CUTCLASS must be specified in the EOLSPACING statement.

For each cut class, at the most, one individual rule with CUTCLASS keyword should be specified, if required.

ENCLOSURE smallerOverhang equalOverhang

Specifies that the EOL cut spacing rule only applies if overhang of the cut on one of the edges is less than smallerOverhang and the overhang on one of the orthogonal edges exactly equal to equalOverhang on above routing layer.
Type: Float, specified in microns

EOLSPACING cutSpacing1 cutSpacing2 ENDWIDTH eolWidth PRL prl

Specifies the cut spacing on certain edges of a cut on a EOL edge on above routing layer with width less than eolWidth, if additional conditions (described later) are met. If the cut has a common parallel run length less than prl to a neighbor cut, cutSpacing1 is applied. Otherwise, cutSpacing2 is applied in a maximum projection style (when the cuts have common parallel run length greater than or equal to prl). If prl is negative, it means that a neighbor cut within abs(prl) distance, including exactly equal to abs(prl), beyond the edge of a cut will need to be cutSpacing2 distance from it.
Type: Float, specified in microns

EXTENSION sideExt backwardExt SPANLENGTH spanLength

Specifies that the EOL cut spacing rule only applies if certain neighbor wire condition is met. If the wire containing the cut has a span length greater than or equal to spanLength (having a EOL edge is not a necessary condition), and a neighbor wire with edge parallel to backwardExt direction must overlap with a search window by extending sideExt along the edge with smallerOverhang and backwardExt along the orthogonal edge that the cut has overhang exactly equal to equalOverhang. Otherwise (the wire containing the cut has a span length less than spanLength), a similar search window on the opposite side must not overlap with any neighbor wires with edge parallel to backwardExt direction as an additional condition. Then, the cut spacing requirement is applied to the opposite edges of the edge having enclosure less than smallerOverhang and the orthogonal edge that the cut has overhang exactly equal to equalOverhang with a neighbor.
Type: Float, specified in microns

EOL Spacing Rule Examples

Figure 2-77 Illustration of EOLSPACING Rule

Forbidden Spacing Rule

You can create a forbidden spacing rule to specify forbidden spacing between two cuts.

You can create a forbidden spacing rule by using the following property definition:

PROPERTY LEF58_FORBIDDENSPACING
"FORBIDDENSPACING CUTCLASS className minSpacing maxSpacing 
    [SAMEMASK]
    [SHORTEDGEONLY | LONGEDGEONLY | HORIZONTAL | VERTICAL]
    [PRL {prl TO prlClassName}...]
    ; " ;

Where:

FORBIDDENSPACING CUTCLASS className minSpacing maxSpacing

Specifies that spacing between two cuts on a given layer belonging to the same className cut class cannot be in the range minSpacing <= spacing <= maxSpacing.
Type: Float, specified in microns

HORIZONTAL | VERTICAL

Specifies that forbidden spacing applies on only the given direction on the cut edge.

LONGEDGEONLY

Specifies that the forbidden spacing rule only applies to the side/long edge of cuts with a common parallel run length greater than 0. This means that the className must be a rectangular cut class.

SAMEMASK

Specifies that the forbidden spacing rule only applies to same-mask cuts.

SHORTEDGEONLY

Specifies that the forbidden spacing rule only applies to the end/short edge of className cuts with a common parallel run length greater than 0. This means that className must be a rectangular cut class.

PRL {prl TO prlClassName}...

Specifies that forbidden spacing is between a className cut to prlClassName cut with common parallel run length greater than prl. If prl is negative, it is interpreted in the WITHIN style. For example, if SHORTEDGEONLY is also defined, it is similar to extending the end or short edge by abs(prl). If some of the cut classes are not defined in prlClassName, this means that there is no constraint between className to those undefined cut classes. See Figure 2-79.
Type: Float, specified in microns

Forbidden Spacing Rule Examples

Keep-out Zone Rule

The keep-out zone rule can be used to demarcate a cut spacing zone in which cuts of other classes cannot overlap.

You can create a keep-out zone rule by using the following property definition:

PROPERTY LEF58_KEEPOUTZONE
"KEEPOUTZONE CUTCLASS className1 [TO className2]
     [SAMEMASK] [SAMEMETAL | DIFFMETAL]
     [EXCEPTEXACTALIGNED [SIDE | END] spacing]
     {EXTENSION sideExtension forwardExtension | 
     ENDEXTENSION endSideExtension endForwardExtension 
     SIDEEXTENSION sideSideExtension sideForwardExtension |
     HORIZONTALEXTENSION horzSideExtension horzForwardExtension
     VERTICALEXTENSION vertSideExtension vertForwardExtension}
     SPIRALEXTENSION extension [CORNERONLY]
     ;" ; 

Where:

CORNERONLY

Specifies that the SPIRALEXTENSION keep-out zone applies only on the corners that are outside the zones of EXTENSION, ENDEXTENSION and SIDEEXTENSION, or HORIZONTALEXTENSION and VERTICALEXTENSION.

DIFFMETAL

Specifies that the keep-out zone rule applies only for different-metal cuts.

EXCEPTEXACTALIGNED [SIDE | END] spacing

Specifies that if cuts are exactly aligned, they just need to be spacing apart. These cuts are not subjected to the keepout zone checking. For rectangular cuts, SIDE and END would mean that side/long edges and end/short edges are exactly aligned correspondingly. If neither of them is specified for rectangular cuts, exactly aligned cuts on any edge would only be spacing apart.

HORIZONTALEXTENSION horzSideExtension horzForwardExtension
VERTICALEXTENSION vertSideExtension vertForwardExtension

Specifies the extensions of the keep-out zone on the neighbor cuts based on the horizontal or vertical cut edge. This is particularly useful in case of a square cut.

Type: Float, specified in microns

KEEPOUTZONE CUTCLASS className1 [TO className2]
{EXTENSION
sideExtension forwardExtension |
ENDEXTENSION
endSideExtension endForwardExtension
SIDEEXTENSION
sideSideExtension sideForwardExtension}
SPIRALEXTENSION
extension

Specifies a keep-out zone for cut class className1 to cut class className2, if specified, or any cut classes.
ENDEXTENSION and SIDEEXTENSION must be used only on rectangular cuts.
EXTENSION forms a keep-out zone by extending forwardExtension on both sides on any cut edges and sideExtension in the orthogonal direction toward outside the cut.
SPIRALEXTENSION forms another keep-out zone by extending  extension on all cut edges in Euclidean measurement. It is a violation if a className2 cut, if specified, or any cut is inside any of the two keep-out zones. Similarly, ENDEXTENSION and SIDEEXTENSION specify the extensions on the end or short edges and the side or long cut edges of className1, respectively.
Type: Float, specified in microns

Note that this keep-out zone rule is an alternative cut spacing definition of CUTCLASS SPACINGTABLE. If any defined cut class does not appear in CUTCLASS SPACINGTABLE, then one or more KEEPOUTZONE statements must be specified for that cut class to define its cut spacing to the other cut classes. For example, suppose there are three cut classes: VA, VB, and VC. If VA is not defined in CUTCLASS SPACINGTABLE, then VA must be defined as className1 in a KEEPOUTZONE statement. There can either be one KEEPOUTZONE statement without a TO cut class (so that it is applied to both VB and VC) or there can be two separate KEEPOUTZONE statements, one with TO VB and another with TO VC.

SAMEMASK

Specifies the keep-out zone rule applies only to same-mask cuts.

SAMEMETAL

Specifies that the keep-out zone rule applies only for same-metal cuts.

Keep-out Zone Rule Examples

KEEPOUTZONE CUTCLASS VB TO VA 
ENDEXTENSION
endSideExtension endForwardExtension
SIDEEXTENSION sideSideExtension sideForwardExtension
SPIRIALEXTENSION extension

Figure 2-80 Illustration of the Keep-out Zone Rule

KEEPOUTZONE CUTCLASS VB TO VA 
ENDEXTENSION
endSideExtension endForwardExtension
SIDEEXTENSION sideSideExtension sideForwardExtension
SPIRIALEXTENSION extension CORNERONLY

Figure 2-81 Illustration of the Keep-out Zone Rule with CORNERONLY

KEEPOUTZONE CUTCLASS VA TO VA 
HORIZONTALEXTENSION horzSideExtension horzForwardExtension
VERTICALEXTENSION vertSideExtension vertForwardExtension
SPIRIALEXTENSION extension

Figure 2-82 Illustration of the Keep-out Zone Rule with HORIZONTALEXTENSION and VERTICALEXTENSION

Manufacturing Grid Rule

You can create a manufacturing grid rule to specify the manufacturing grid on a given layer to override the library manufacturing grid value.

You can create a manufacturing grid rule by using the following property definition:

PROPERTY LEF58_MANUFACTURINGGRID 
"MANUFACTURINGGRID value
; " ;

Where:

MANUFACTURINGGRID value

Specifies the manufacturing grid on the given layer that overrides the library manufacturing grid value.
Type: Float, specified in microns

Maximum Spacing Rule

You can create a maximum spacing rule to specify the maximum spacing between any two cuts.

You can create a maximum spacing rule by using the following property definition:

PROPERTY LEF58_MAXSPACING
"MAXSPACING spacing [CUTCLASS className]
;" ;

Where:

CUTCLASS className

Specifies that the maximum spacing between cuts of the given className to any cuts. If CUTCLASS is defined in cut layer, then CUTCLASS must be specified in the MAXSPACING statement.

You can specify individual rules with the CUTCLASS keyword for each cut class, if needed.

MAXSPACING spacing

Specifies the maximum spacing between any two cuts.
Type: Float, specified in microns

Minimum Enclosure Rule

You can create a minimum enclosure rule to specify the minimum enclosure requirements for cuts on the given cut class. These requirements are typically applied on cell objects.

You can create a maximum spacing rule by using the following property definition:

PROPERTY LEF58_MINENCLOSURE
"MINENCLOSURE CUTCLASS className [ABOVE | BELOW]
   overhang1 overhang2
   ; " ;

Where:

MINENCLOSURE CUTCLASS className [ABOVE | BELOW]
overhang1 overhang2

Specifies that the cuts on the given cut class of className should have minimum enclosures of overhang1 on two opposite sides and overhang2 on the other two opposite sides on the above and below metal routing layers. If ABOVE or BELOW is specified, the enclosure applies only on the given above or below metal routing layer. These enclosure requirements are not used for routing. They specify the minimum enclosures typically used on some cell objects.
Type: Float, specified in microns

No Cut Class Rule

You can create a no cut class rule to specify that a given cut class cannot be used on a layer.

You can create a no cut class rule by using the following property definition:

PROPERTY LEF58_NOCUTCLASS
"NOCUTCLASS className [EXCEPTMULTICUTS]
; " ;

Where:

EXCEPTMULTICUTS

Specifies that only multi-cut via of the given cut class with at least one same metal on a layer could still be used on the cut layer.

NOCUTCLASS className

Specifies that the given cut class cannot be used on this layer. A typical usage is to define the same set of cut classes on a base layer and the REGION layer corresponding to that base layer and then to specify one of these cut classes as NOCUTCLASS in the base layer and another cut class as NOCUTCLASS on the REGION layer.
Type: String

No Metal Spacing Rule

You can create a no metal spacing rule by using the following property definition:

PROPERTY LEF58_NOMETALSPACING
"NOMETALSPACING spacing BOTHSPACING bothSpacing [PRL prl]
      [SAMEMASK] [CUTCLASS className] 
      NEIGHBORMETAL metalPrl metalWithin 
        noMetalPrl {noMetalWithin | noMetalLowWithin noMetalHighWithin}
      [SAMESIDE]
      [ABOVE | BELOW] [EXCEPTLINEENDSPACING lineEndSpacing]
      ;" ;

Where:

ABOVE | BELOW

Specifies that the metal search windows should be formed only on the given above or below metal layer.

CUTCLASS className

Specifies that the cut spacing rule applies only to the cuts of the given cut class. If CUTCLASS is defined in a cut layer but CUTCLASS is not specified in the NOMETALSPACING statement, the rule would be applied on all of the cuts belonging to any cut class.

You can specify individual rules with the CUTCLASS keyword for each cut class, if required.

EXCEPTLINEENDSPACING lineEndSpacing

Specifies that the rule does not apply if the metal neighbors just outside the metal search window formed by noMetalPrl and noMetalWithin have a spacing exactly equal to lineEndSpacing.

This syntax works on the metal search window formed by metalPrl and metalWithin as well when SAMESIDE is also specified. This means that the rule would be applied if the metal neighbors just outside the metal search window formed by metalPrl and metalWithin have a spacing exactly equal to lineEndSpacing. In other words, when the wire gap is exactly equal to lineEndSpacing, it is as if the gap were filled with metal.

Type: Float, specified in microns

NOMETALSPACING spacing BOTHSPACING bothSpacing [PRL prl]
NEIGHBORMETAL
metalPrl metalWithin
noMetalPrl
{noMetalWithin | noMetalLowWithin noMetalHighWithin}
[SAMESIDE]

Specifies that the spacing of a cut edge that fulfills specific metal neighbor conditions, described later, to any cut should be greater than or equal to spacing. The spacing between two edges of two cuts that fulfill those specific metal neighbor conditions is greater than or equal to bothSpacing measured in the orthogonal direction of the cut edges. If PRL is defined, the cuts must have PRL greater than prl to trigger the rule. Form metal search windows on two opposite cut edges, or on the same edge if SAMESIDE is defined, in the preferred direction on the above or below metal layers by metalPrl and metalWithin as one window and either noMetalPrl and noMetalWithin or noMetalLowWithin noMetalHighWithin as another window. For negative values of metalPrl and noMetalPrl, the first metal search window must overlap a metal neighbor and the second metal search window should not overlap with a metal neighbor. For positive values of metalPrl and noMetalPrl, the first metal search window must have a metal neighbor with PRL greater than metalPrl with the cut edge and the second metal search window must have no metal neighbor with PRL greater than noMetalPrl with the cut edge. The cut edge without a metal neighbor is subjected to this rule.

Type: Float, specified in microns

SAMEMASK

Specifies that the cut spacing rule applies only to same-mask cuts.

Figure 2-83 Illustration of No Metal Spacing Rule with NEIGHBORMETAL

Figure 2-84 Illustration of No Metal Spacing Rule with SAMESIDE in NEIGHBORMETAL

Figure 2-85 Illustration of No Metal Spacing Rule with BOTHSPACING

Spacing with Same Metal Rule

You can use spacing with same metal rules to:

You can create a spacing with same metal rule by using the following property definition:

PROPERTY LEF58_SPACING 
"SPACING cutSpacing 
    [SAMEMASK 
    |MAXXY 
    |[CENTERTOCENTER]
       [SAMENET | SAMEMETAL | SAMEVIA] 
       [ LAYER secondLayerName
           [STACK
           | ORTHOGONALSPACING orthogonalSpacing]
           | CUTCLASS className 
                 [SHORTEDGEONLY [PRL prl] 
                 | CONCAVECORNER 
                      [WIDTH width ENCLOSURE enclosure 
                          EDGELENGTH edgeLength
                      | PARALLEL parLength WITHIN parWithin 
                          ENCLOSURE enclosure
                      | EDGELENGTH edgeLength 
                          ENCLOSURE edgeEnclosure adjEnclosure]
                 | EXTENSION extension 
                 | NONEOLCONVEXCORNER eolWidth
                      [MINLENGTH minLength]
                 | ABOVEWIDTH width [ENCLOSURE enclosure]
                 | MASKOVERLAP 
                 | WRONGDIRECTION [EXCEPTRECTANGLE]
                 |DIFFCONCAVECORNER]]]
       | ADJACENTCUTS {2 | 3 | 4} 
              [EXACTALIGNED exactAlignedCut] 
              [TWOCUTS twoCuts [TWOCUTSSPACING twoCutsSpacing] 
                  [SAMECUT]
              | EACHCUTS numCuts [EXCEPTEVENNUMCUT]] 
              WITHIN {cutWithin | cutWithin1 cutWithin2}
              [EXCEPTSAMEPGNET]
              [EXCEPTALLWITHIN exceptAllWithin]
              [ENCLOSURE [ABOVE|BELOW] enclosure
                  [METALMASK metalMaskNum]
                  [METALWIDTH maxWidth]
                  [EXCEPTLINEENDGAP]]
              [CUTCLASS className [TO ALL]] 
              [NOPRL [HORIZONTAL|VERTICAL] | SIDEPARALLELOVERLAP] 
              [SAMEMASK]
       | PARALLELOVERLAP [EXCEPTSAMENET | EXCEPTSAMEMETAL 
              |EXCEPTSAMEMETALOVERLAP | EXCEPTSAMEVIA]
       | PARALLELWITHIN within [EXCEPTSAMENET] 
              [CUTCLASS className
                 [LONGEDGEONLY
                 | ENCLOSURE enclosure {ABOVE | BELOW}
                      PARALLEL parLength WITHIN parWithin]]
       | SAMEMETALSHAREDEDGE parwithin [ABOVE][CUTCLASS className]
              [EXCEPTTWOEDGES][EXCEPTSAMEVIA numCut]
       | AREA cutArea] ;..." ;

Where:

All other keywords are the same as the existing LEF cut layer SPACING syntax.

ABOVEWIDTH width [ENCLOSURE enclosure]

Specifies the cut to metal spacing applies only on the above metal layer wire with width greater than or equal to the width. This means that the second layer must be a metal layer. In addition, the spacing applies only to different-net objects.

When you define the ENCLOSURE keyword, the spacing applies only if the enclosure on layer secondLayerName of the cut is less than the specified enclosure, including the enclosure at the corners.
Type: Float, specified in microns

ADJACENTCUTSSAMEMASK

Specifies that the adjacent cut rule only applies to same mask cuts. The presence of different mask cuts is irrelevant for this adjacent cut rule checking.

ADJACENTCUTS… WITHIN {cutWithin | cutWithin1 cutWithin2}

Specifies that the adjacent cut rule only counts neighbor cut greater than or equal to cutWithin1 and less than cutWithin2 when two within values are specified. See Figure 2-105.

ADJACENTCUTS {2 | 3 | 4} [EXACTALIGNED exactAlignedCut] WITHIN cutWithin [SIDEPARALLELOVERLAP]

The EXACTALIGNED keyword specifies that the adjacent cut spacing rule applies when the cut has at least exactAlignedCut via cuts that are perfectly aligned horizontally and/or vertically and are less than cutWithin distance from each other. Otherwise, the adjacent cut spacing rule applies when the number of adjacent cuts is equal to or greater than the specified number of cuts after the ADJACENTCUTS keyword, which must be smaller than exactAlignedCut, and at least one adjacent cut is not exactly aligned.

The SIDEPARALLELOVERLAP keyword indicates that the adjacent cut spacing rule applies only when there is a parallel edge overlap greater than 0 side by side between two rectangular cut vias.

Note: Do not use the SIDEPARALLELOVERLAP for square cut classes.

CUTCLASS className [TO ALL]

Defines the adjacent cut spacing rule for a specific cut class (className). If CUTCLASS is defined on a cut layer but this CUTCLASS keyword is not defined, the adjacent cut rule is applied to any cut belonging to any cut class.

You can specify individual rules with the CUTCLASS keyword for each cut class, if needed.

The TO ALL keyword specifies that the adjacent cut rule applies between cuts of className to cuts of any cut classes.

When both TO ALL and TWOCUTS are specified, the two cuts having multiple neighbor cuts to violate TWOCUTS must still belong to className to be a violation.

CUTCLASS className [LONGEDGEONLY]

Specifies that the parallel within cut spacing only applies to cuts belonging to the same className. If className is a rectangular cut class, then you can specify the LONGEDGEONLY keyword to limit the cut spacing between two long/side edges having a neighbor wire on the above metal between the cuts.

CUTCLASS className [SHORTEDGEONLY [PRL prl] | CONCAVECORNER]

Defines the inter-layer cut spacing of className to a metal in secondLayerName, which must be a routing layer. If className is a rectangular cut class, the SHORTEDGEONLY statement will limit the spacing from an end/short edge of the cut to a metal when there is common parallel run length greater than 0 or greater than prl if PRL is defined between them. This cut to metal spacing is ignored for same-net.

The CONCAVECORNER keyword specifies the spacing of the cut to the concave corner of a wire that contains the cut.

DIFFCONCAVECORNER

Specifies a cut to a different-metal concave corner, where the spacing is measured in Euclidean style. Cuts must face the concave corner to be violations. See Figure 2-95.

EACHCUTS numCuts [EXCEPTEVENNUMCUT]

Specifies that the adjacent cut rule applies only if the following conditions are met. A cut has greater than or equal to the specified number of cuts, defined with the ADAJCENTCUTS keyword, of neighbors within cutWithin. A special group of cuts is formed between the triggering cuts and its neighbors, such that each of the cuts in the group has greater than or equal to numCuts cuts of the group within cutWithin. Then, count the number of neighboring cuts in that group. If the count is greater than or equal to the specified number of cuts defined with the ADAJCENTCUTS keyword, it is a violation. If EXCEPTEVENNUMCUT is defined, and if the count is even, it is not a violation. In other words, it is only a violation if the count is odd with EXCEPTEVENNUMCUT. If there are two or more cuts having greater than numCuts neighbors, EXCEPTEVENNUMCUT cannot be applied. numCuts should be less than or equal to the specified number of cuts defined with the ADAJCENTCUTS keyword. In addition, when EACHCUTS is defined, cutSpacing and cutWithin should have same value and cutSpacing is not used.

Type: Integer

EDGELENGTH edgeLength ENCLOSURE edgeEnclosure adjEnclosure

Specifies that an edge of a concave corner of a wire containing a cut has length less than edgeLength, the other end of that edge is a convex corner and the cut has parallel run length greater than or equal to 0 to that edge, the spacing between that edge and the facing cut edge must be greater than or equal to  cutSpacing. In addition, if that spacing/enclosure is less than edgeEnclosure (and greater than or equal to cutSpacing, which must be less than edgeEnclosure), the enclosure of the adjacent two opposite sides must be greater than or equal to adjEnclosure. Otherwise, it is a violation.
Type: Float, specified in microns

ENCLOSURE [ABOVE | BELOW] enclosure

Specifies that the adjacent cut rule applies only if the checking cut has enclosure less than enclosure on any one side in the preferred routing direction on the above and below metal layers. If ABOVE or BELOW is specified, the enclosure requirement would be applied only on the specified above or below metal layer. See Figure 2-107 for an example.

Type: Float, specified in microns

ENCLOSURE enclosure {ABOVE | BELOW}
PARALLEL parLength WITHIN parWithin

Specifies that the cut spacing only applies if the enclosure on either above or below metal layer (depending on whether ABOVE or BELOW is defined) is less than enclosure on a side having a neighbor wire within less than parWithin and common parallel run length to the cut greater than or equal to parLength on one and only one side. The cut spacing is only applied to the side without a neighbor wire and on the facing edge of the neighbor cut. If parLength is a negative value, the two edges would be checked in a WITHIN style. In addition, the rule is applied between a cut of className to cuts of any cut classes. See Figure 2-121.
Type: Float, specified in microns

EXCEPTALLWITHIN exceptAllWithin

Specifies the exception that if a cut has all neighbors within cutWithin or range of cutWithin1 and cutWithin2, which are also within exceptAllWithin, it is allowed. exceptAllWithin should be less than or equal to cutSpacing. See Figure 2-99.
Type: Float, specified in microns

EXCEPTLINEENDGAP

Specifies that the adjacent cut rule does not apply if a wire containing a cut on which the enclosure condition is applied fulfills the LINEENDGAP condition on the above or below metal layer.

EXCEPTRECTANGLE

Specifies that the cut to metal rule does not apply on a rectangular metal shapes.

EXCEPTSAMENET

Indicates that the parallel overlap rule does not apply to same-net cuts.

EXCEPTSAMEMETAL

Indicates that the parallel overlap rule does not apply to cuts that share the same metal shapes above or below metal layers of the cuts.

EXCEPTSAMEMETALOVERLAP

Indicates that the parallel overlap rule does not apply to cuts that share the same metal shapes above or below metal layers that cover the projected overlap area between the cuts. This is the default.

EXCEPTSAMENET

Indicates that the parallel within rule does not apply to same-net cuts.

EXCEPTSAMEVIA

Indicates that the parallel overlap rule does not apply to cuts that share the same metal shapes both above and below the metal layers that cover the overlap area between the cuts.

EXTENSION extension

Specifies that the extension should be extended on the cut edges that do not fulfill the overhang defined in ENCLOSUREEDGE OPPOSITE before cutSpacing is applied between the extended edges to the metal in secondLayerName.
Type: Float, specified in microns

MASKOVERLAP

Specifies the cut to metal, containing the cut, spacing on the overlap area of two different masks. This means that the second layer must be a metal layer.

MAXXY

Indicates that the cutSpacing value is used as the largest x or y distance for spacing between objects. This keyword can be applied only when EUCLIDEAN is specified in CLEARANCEMEASURE.

METALMASK metalMaskNum

Specifies that the adjacent cut rule applies only if the wire containing the cut on which the enclosure condition is applied belongs to metalMaskNum.

Type: Integer

METALWIDTH maxWidth

Specifies that the adjacent cut rule applies only if a wire containing a cut on which the enclosure condition is applied has a width less than or equal to maxWidth. See Figure 2-108.

Type: Float, specified in microns

NONEOLCONVEXCORNER eolWidth [MINLENGTH minLength]

Specifies the spacing of a cut to a convex corner that does not touch a EOL edge with width less than eolWidth of a metal shape containing the cut in form of a triangle formed by the smaller edge length or cutSpacing. In other words, the triangle is a keep-out region that the cut could not overlap.

The MINLENGTH keyword indicates that the EOL edge must have length greater than or equal to the minLength along both sides. In other words, if the EOL length is less than minLength along any one side, then the edge is not a EOL edge.
Type: Float, specified in microns

NOPRL [HORIZONTAL|VERTICAL]

The NOPRL keyword specifies that the adjacent cut rule applies only among cuts with no common parallel run length. If HORIZONTAL or VERTICAL is specified, the cuts with horizontal or vertical common parallel run length, respectively, would not be counted as adjacent cut neighbors. The EXACTALIGNED keyword cannot be specified along with NOPRL.

ORTHOGONALSPACING orthogonalSpacing

Specifies the different-net spacing between objects on the cut layer and objects on the secondLayerName, which must be a routing layer. The rule does not apply to same-net objects.

The spacing check is done by using the following method:

The difference between cutSpacing and orthogonalSpacing is calculated, and half of that difference is shrunk on two sides of the cut and grown on the other two sides. Then, a Euclidean spacing of the average of cutSpacing and orthogonalSpacing is applied to the newly formed rectangle geometry. The shrink and grow operations are done on the alternated sides to form another checking region. A violation occurs if neighbor wires on the secondLayerName are found in both the regions.
Type: Float, specified in microns

You cannot use ORTHOGONALSPACING along with CENTERTOCENTER, SAMENET, SAMEMETAL, or SAMEVIA.

PARALLELOVERLAP

Indicates that the cuts that have a parallel edge overlap greater than 0 require cutSpacing distance between them. Only one PARALLELOVERLAP spacing value is allowed per cut layer.

Note: You should not use PARALLELOVERLAP along with SAMENET, SAMEMETAL, or SAMEVIA.

PARALLEL parLength WITHIN parWithin ENCLOSURE enclosure

Specifies that the cut to concave corner spacing only applies for a wire with default wire width containing the cut and all the conditions as described below hold true. The cut has zero enclosure on two opposite sides, and the enclosure is less than enclosure on one of the other two opposite sides on the specified secondLayerName. There are neighbor wires on both metal layers of the cut on opposite sides. The spacing to the below metal must be exactly equal to parWithin - 0.001 (due to WITHIN nature, the given value is offset by 0.001) and the above metal neighbor is within parWithin of the cut edge with zero enclosure having parallel run length greater than parLength. If parLength is a negative value, the cut edges would be extended by abs(parLength) along both the sides to search for the neighbors. See Figure 2-98.
There is a corner case on the zero enclosure requirement. If the cut edge having a neighbor not on layer secondLayerName touches or collides with the concave corner, the rule will be applicable.
Type: Float, specified in microns

PARALLELWITHIN within

Specifies that if the edge of a neighbor cut is within within distance beyond the edge of another cut, cutSpacing is required between them. If a cut layer has more than one cut class, the parallel within rule could be applied among all cut classes, including via cuts belonging to different cut classes

Note: You should not use PARALLELWITHIN along with SAMENET, SAMEMETAL, or SAMEVIA. In addition, you can either specify PARALLELOVERLAP or PARALLELWITHIN.

SAMECUT

Specifies that the adjacent cut rule only applies between two cuts, each having the same cut neighbors, besides potential neighbor of each other. See Figure 2-107.

SAMEMASK

Indicates that the minimum spacing rule only applies between objects on the same mask.

SAMEMETAL

Indicates that the cutSpacing value only applies to cuts that are overlapped with the same metal shape. The SAMEMETAL cutSpacing value should be smaller than the normal SPACING cutSpacing value that applies to different-net cuts.

See Figure 2-87 for an example of the difference between SAMEMETAL and SAMENET.

SAMEMETALSHAREDEDGE parWithin [ABOVE][EXCEPTTWOEDGES][EXCEPTSAMEVIA numCut]

Specifies the spacing greater than and equal to cutSpacing between two via cuts that have a common parallel run length greater than 0, have common above and /or below metal shapes covering the entire length of common projection between them and have neighbor wire(s) within parWithin distance from them on the same edge.

ABOVE specifies that the rule only applies if the via cut must have a common metal routing layer. This means that having a common below metal routing layer of the cuts is irrelevant.

EXCEPTTWOEDGES specifies that if the cuts have two neighbor wires within parWithin distance on the opposite sides, the spacing rule is ignored.

EXCEPTSAMEVIA numCut specifies that if there are greater than and equal to numCut of cuts having common same metal on both the above and below layers, the spacing rule is ignored.
Type: Integer

SAMEVIA

Indicates that the cutSpacing value only applies to cuts that share the same metal shapes above and below that cover the overlap area between the cuts. The SAMEVIA cutSpacing value should be smaller than the normal SPACING cutSpacing value that applies to different-metal cuts.

TWOCUTS twoCuts

Specifies the cut spacing between two cuts, each having a specified number of neighbor cuts, defined using twoCuts, that are within (or less than) a cutWithin distance away, that is the cutSpacing. The value of twoCuts must be smaller than the specified number of cuts defined with the ADJACENTCUTS keyword. See Figure 2-104 for an example.
Type: Integer

TWOCUTSSPACING twoCutsSpacing

Specifies that the adjacent cut rule applies only if all of the cuts fulfilling the TWOCUTS condition have a spacing less than twoCutsSpacing. See Figure 2-105 for an example.

WIDTH width ENCLOSURE enclosure EDGELENGTH edgeLength

Specifies that the cut to concave corner spacing applies if the width of an edge forming the concave corner is less than or equal to the width, the length of the adjacent edge is greater than or equal to the edgeLength, and forms a search window for cuts by extending cutSpacing on the concave corner along both sides of the edge with width less than or equal to the width. Any cut edge parallel to the metal edge with width less than or equal to the width inside that search window must have enclosure greater than or equal to enclosure. Otherwise, it will be a violation.
Type: Float, specified in microns

WRONGDIRECTION

Specifies the spacing for a cut to a non-preferred direction metal, when the cut is contained in a preferred direction same-metal wire. This indicates that the second layer must be a metal layer.

Spacing Rule Examples

If the via3 layer has the following spacing rules:

SPACING 1.5 ;              #via3 to via3 spacing
SPACING 1.5 LAYER via2 ;   #via3 to via2 spacing

Then both a) and b) are violations.

Figure 2-92 Illustration of CUTCLASS with ABOVEWIDTH and ENCLOSURE

Figure 2-93 Illustration of CUTCLASS with WRONGDIRECTION

Figure 2-94 Illustration of CUTCLASS with MASKOVERLAP

Figure 2-95 Illustration of CUTCLASS with DIFFCONCAVECORNER

Figure 2-96 Illustration of CONCAVECORNER with WIDTH

Figure 2-97 Illustration of CONCAVECORNER with WITHIN in PARALLEL

Figure 2-98 Illustration of CONCAVECORNER with WITHIN in PARALLEL

Figure 2-99 Illustration of ADJACENTCUTS with EXCEPTALLWITHIN

Figure 2-100 Illustration of PARALLELWITHIN Rules

Figure 2-101 Illustration of PARALLELWITHIN with LONGEDGEONLY

Figure 2-123 Illustration of the ADJACENTCUTS Rule with EACHCUTS

Figure 2-124 Illustration of the ADJACENTCUTS Rule with EXCEPTEVENNUMCUT

Figure 2-125 Illustration of the ADJACENTCUTS Rule with EXCEPTLINEENDGAP

Spacing Table Rule

The spacing table rule can be used to define cut spacing between different cut classes.

You can create a spacing table rule by using the following property definition:

[PROPERTY LEF58_SPACINGTABLE 
  “SPACINGTABLE 
     [ORTHOGONAL 
        {WITHIN cutWithin SPACING orthoSpacing} ... ;
     |[DEFAULT defaultCutSpacing]
        [SAMEMASK]
        [SAMENET | SAMEMETAL | SAMEVIA]
        [LAYER secondLayerName
            [NOSTACK] 
            [NONZEROENCLOSURE
            | PRLFORALIGNEDCUT 
              {{className1 | ALL} TO {className2 | ALL} }...
            | EXCEPTENCLOSURE exceptEnclosure]] 
        [CENTERTOCENTER
            {{className1 | ALL}| TO {className2 | ALL}}...]
        [CENTERANDEDGE [NOPRL]
            {{className1 | ALL}| TO {className2 | ALL}}...]
        [PRLSPACING spacing PRL prl]
        [PRL {prl|USEDEFAULT} [ HORIZONTAL| VERTICAL] [MAXXY]
            [{{className1 | ALL} TO {className2 | ALL} ccPrl
                   [ HORIZONTAL| VERTICAL] }...] ]
        [PRLTWOSIDES
             {prl1 prl2 prl3 prl4 [WITHIN within]
                    className1 TO className2 spacing}...]
        [ENDEXTENSION extension [{TO className classExtension}...]
        [SIDEEXTENSION {TO className classExtension}...] ]
        [EXACTALIGNEDSPACING [HORIZONTAL | VERTICAL]
            {{className | ALL} exactAlignedSpacing}...]
        [NONOPPOSITEENCLOSURESPACING 
            {className nonOppositeEnclosureSpacing}...]
        [OPPOSITEENCLOSURERESIZESPACING 
            {className resize1 resize2                  oppositeEnclosureResizeSpacing}...
            [EDGEALIGNED [HORIZONTAL|VERTICAL]]]
         CUTCLASS { {className1 | ALL} [SIDE | END]}...
            {{className2 | ALL} [SIDE | END] {- | cutSpacing1}
            {- | cutSpacing2}...}...;
     ]
      ; " ;]

Where:

All other keywords are the same as the existing LEF cut layer SPACINGTABLE syntax.

CENTERTOCENTER
{{
className1 | ALL} TO {className2 | ALL}}...

Computes the cutSpacing1 and cutSpacing2 distance from cut-center to cut-center, instead of cut-edge to cut-edge (the default behavior), for the given list of class name pairs. The className1 is one of the cut classes in the first row of the table and className2 is one of the cut classes in the first column of the table. The ALL keyword applies to all the vias on a cut layer that has only one cut class without an explicit CUTCLASS definition. The keyword should be specified only if one of the layers does not have a cut class.

CENTERANDEDGE [NOPRL]
{{
className1 | ALL} TO {className2 | ALL}}...

Indicates that center-to-center measurement applies to the larger of the cutSpacing1 and cutSpacing2, which must be different values, while edge-to-edge measurement applies to the smaller of the two cut spacings.

The NOPRL keyword indicates that both center to center and edge to edge spacing must be met, where the required center to center spacing is the maximum of cutSpacing1 and cutSpacing2, and the required edge to edge spacing is the minimum of cutSpacing1 and cutSpacing2.

The CENTERTOCENTER and CENTERANDEDGE keywords can be defined simultaneously, but must be on different cut classes.

{{className1 | ALL} TO {className2 | ALL} ccPrl
[HORIZONTAL | VERTICAL]}...

Specifies a specific ccPrl value between the given cut classes. If HORIZONTAL or VERTICAL is specified, the common parallel run length is measured horizontally or vertically, respectively. Any cut class combinations that is not specified would still follow prl defined in PRL.
Type:  Float, specified in microns

CUTCLASS { {className1 | ALL} [SIDE | END|]}

Specifies a list of cut classes, which may not necessarily be a complete list of all cut classes in the cut layer. In this case, the cut spacing requirements are not needed for any missing cut classes. The ALL keyword applies to all vias on a cut layer which has only one cut class without an explicit CUTCLASS definition.

If an intercut layer is specified (using the LAYER keyword), the cut classes in className1 are defined for the layer for which the spacing table is defined. When intercut layer spacing is needed between a cut layer with multiple cut classes and a cut layer without a cut class, this cut class spacing table should be specified, and the "SPACING ... LAYER ... ;" statement cannot be used.

If the cut class has a rectangular cut shape, the SIDE and END keywords can be used to specify cut spacing on a certain edge - side/long or end/short (see Figure 2-123). The diagram indicates the regions that the other cut via should be fully contained on certain edges to be applied.

{{className2 | ALL} [SIDE | END] {- | cutSpacing1} {- | cutSpacing2}

Indicates that cutSpacing1 and cutSpacing2 is applied between className2 and className1 in the first row of the table.

There are two sets of cut spacing values for each table entry. The first cutSpacing1 value applies if there is no parallel edge overlap between the via cuts. The second cutSpacing2 value applies if there is a parallel edge overlap greater than 0. If CENTERTOCENTER keyword is used for two cut classes, then cutSpacing1 and cutSpacing2 should be identical. If - is specified, the defaultCutSpacing value (specified with the DEFAULT keyword) is used.

If interlayer cut spacing is specified with the LAYER keyword, the cut class in className2 is defined for the secondLayerName (specified with the LAYER keyword). If LAYER is not specified, then the table must be a NxN symmetrical table with spacing values in any (i, j) and (j, i) locations in the table being the same.

The ALL, SIDE, and END keywords are the same as described earlier.
Type: Float, specified in microns

DEFAULT defaultCutSpacing

Indicates the default cut spacing between cut classes.
Type: Float, specified in microns

If a table entry contains -, the defaultCutSpacing value applies. In this case the DEFAULT keyword must be specified.

An undefined cut class will have the spacing of DEFAULT defaultCutSpacing, and the spacing values in any (i, j) and (j, i) location in the table are the same.

EDGEALIGNED [HORIZONTAL|VERTICAL]

Specifies that the opposite enclosure resize spacing is also applied if the edges of the expanded windows are aligned either horizontally or vertically or only in the specified direction (HORIZONTAL or VERTICAL). See Figure 2-126.

ENDEXTENSION extension [{TO className classExtension}...]

Defines extension values applied to the end/short edge of all rectangular cuts, before cutSpacing1 and cutSpacing2, are measured to the cuts with extensions. If the TO keyword is specified, then classExtension is applied to the end/short edge of all rectangular cuts to measure the cut spacing to cuts in className. Otherwise, extension is applied to the end/short edge of all rectangular cuts to measure the cut spacing to cuts for any non-specified cut classes.
Type: Float, specified in microns

EXACTALIGNEDSPACING [HORIZONTAL | VERTICAL]
{{className
| ALL} exactAlignedSpacing}

Specifies the spacing between two className cuts that are perfectly aligned, either horizontally or vertically, must be greater than or equal to exactAlignedSpacing. If HORIZONTAL or VERTICAL is also specified, the spacing applies only to the corresponding direction. In addition, at most two such statements can be defined, one with HORIZONTAL and another with VERTICAL.

ALL means that the exactly aligned cuts of any cut class must have spacing greater than or equal to exactAlignedSpacing. The length of the aligned cut edges must be identical to be considered as exactly aligned.

Type: Float, specified in microns

The definition of EXACTALIGNEDSPACING remains edge-to-edge even when CENTERTOCENTER keyword is specified.

EXCEPTENCLOSURE exceptEnclosure

Specifies that the inter-layer cut spacing between any cuts in the current layer to any cuts in layer secondLayerName applies only for the cuts in the current layer with enclosure on the above metal layer on all four sides greater than exceptEnclosure and parallel run length greater than 0 with the cuts in layer secondLayerName. In other words, if the above metal layer of the cuts in the current layer is less than or equal to exceptEnclosure on any cut edges, the inter-layer cut spacing is not applied. In addition, cutSpacing1 should be zero while cutSpacing2 is the required cut spacing between cuts for the two specified cut classes.

Type: Float, specified in microns

LAYER secondLayerName

Defines the inter-cut-layer spacing between a className1 via in the first row of the table on the layer that this spacing table is being defined to another className2 via in the first column on secondLayerName cut layer. This cut spacing is ignored for same-net. This second layer must be a previously defined cut layer immediately below the layer that this spacing table is being defined, that is, “one layer look ahead” is not supported.

If an inter-cut-layer spacing table is defined for same-net cuts using the SAMENET keyword, the cuts on two different layers can always be stacked if they are exactly aligned (that is, the centers of the cuts are aligned) for same sized cuts. For different sized cuts, it is legal if the smaller cut is completely covered by the bigger cut. Otherwise, the cuts must have cutSpacing between them.

When secondLayerName is not defined in a same-layer cut spacing table, then the cut classes in the columns must have the same order as the rows.

NONOPPOSITEENCLOSURESPACING {className nonOppositeEnclosureSpacing}...

Specifies that the center-to-center spacing between a cut of className that does not fulfill the overhang defined in ENCLOSUREEDGE OPPOSITE to any cut of className is nonOppositeEnclosureSpacing independent of parallel run length.
Type: Float, specified in microns

NONZEROENCLOSURE

Specifies that the inter-layer cut spacing between cuts in the current layer to cuts in the specified secondLayerName only applies for cut edges with enclosure on the above metal layer of the cuts in the current layer greater than 0 and has parallel run length greater than 0 with the cuts in secondLayerName layer. In other words, the cutSpacing1 should be 0, while cutSpacing2 is the required cut spacing between cuts for the specified two cut classes.

NOSTACK

Specifies that stacked vias between any cuts in the current layer to any cuts in layer secondLayerName are not allowed. This construct must be specified with either SAMENET or SAMEMETAL.

OPPOSITEENCLOSURERESIZESPACING {className resize1 resize2 oppositeEnclosureResizeSpacing }…

Specifies that the center-to-center spacing between two cuts of className that fulfill the overhang defined in ENCLOSUREEDGE OPPOSITE is oppositeEnclosureResizeSpacing independent of  parallel run length if the corners of two windows barely touch by expanding the two opposite cut edges fulfilling the overhang defined in ENCLOSUREEDGE OPPOSITE by resize1 and the other two opposite cut edges by resize2. See Figure 2-125.
Type: Float, specified in microns

PRL {prl|USEDEFAULT} [ HORIZONTAL| VERTICAL] [MAXXY]

Defines the condition when to apply cutSpacing1 and cutSpacing2 between cuts. When cuts have a common parallel run length greater than prl, cutSpacing2 is used between the cuts. Otherwise, cutSpacing1 is used. If prl is negative, it indicates that a neighbor cut within abs(prl) distance beyond the edge of a cut will need to be cutSpacing2 distance away from it. This is a global definition that applies to cuts in all cut classes.

USEDEFAULT must be specified only along with a specific ccPrl value between the given cut classes in {className1 | ALL} TO {className2 | ALL} ccPrl. It means that the default PRL condition would be applied on non-specified cut class combinations.

Type: Float, specified in microns

HORIZONTAL specifies that cutSpacing2 is used only when the common parallel run length measured horizontally is greater than prl. Similarly, VERTICAL specifies that cutSpacing2 is used only when the common parallel run length measured vertically is greater than prl. Otherwise, cutSpacing1 is used.

The MAXXY keyword specifies that the spacing is measured as the maximum projection style when common parallel run length is larger than the given prl, particularly for a negative prl value. Otherwise, the spacing is measured from edge-to-edge.

PRLFORALIGNEDCUT {{className1 | ALL} TO {className2 | ALL} } ...

Specifies the second cutSpacing2 value only applies to cut edges of className2 on secondLayerName that fulfill the overhang defined in ENCLOSUREEDGE OPPOSITE to the cut of className1 when parallel edge overlap is greater than 0 or prl, if specified. In other words, even when parallel edge overlap condition is satisfied, the cutSpacing1 value could be used instead if the cut edges do not entirely align to the above metal. The spacing is measured from the projection on the metal edge, and negative prl, if specified, is treated as an extension of the metal edge.

PRLSPACING spacing PRL prl

Specifies that two cuts with any cut classes less than or equal to prl in both directions must have spacing greater than or equal to spacing. Typically, prl is a negative value. The table entry values would be applied on cases with PRL greater than prl.

Type: Float, specified in microns

PRLTWOSIDES {prl1 prl2 prl3 prl4 [WITHIN within] className1 TO className2 spacing}...

Specifies that the center-to-center spacing between cuts of className1 and className2 that are greater than or equal to prl1 and less than or equal to prl2 on one side and greater than or equal to prl3 and less than or equal to prl4 on the other side to be spacing. If WITHIN is specified, the cuts must be within within, and spacing is measured as corner to corner.If the cuts do not fulfill these PRL and WITHIN conditions, it would follow the specified cut class spacing as usual.

Type: Float, specified in microns

SAMEMASK

Specifies that the cut spacing applies between cuts on the same mask. When a cut layer has more than one mask, you can specify up to two cut class SPACINGTABLE rules, one with SAMENET or SAMEMETAL, and one with neither of them for the same cut layer spacing for same-mask cuts (with SAMEMASK on all of those tables). Then you can specify (without the SAMEMASK keyword) up to another two tables for different-mask cuts.

SAMENET

Indicates that cutSpacing1 and cutSpacing2 values only apply to same-net cuts. The SAMENET cut spacing values should be smaller than the normal SPACINGTABLE cutSpacing values that apply to different-net cuts.

SAMEMETAL

Indicates that cutSpacing1 and cutSpacing2 values only apply to cuts that are overlapped with the same metal shape. The SAMEMETAL cut spacing values should be smaller than the normal SPACINGTABLE cutSpacing values that apply to different-metal cuts.

SAMEVIA

Indicates that cutSpacing1 and cutSpacing2 values only apply to cuts that are overlapped with the same metal shape on both the above and below metal. The SAMEVIA cut spacing values should be smaller than the normal SPACINGTABLE cutSpacing values that apply to different-metal cuts.

SIDEEXTENSION {TO className classExtension}

Defines extension value, classExtension, applied to the side/long edge of all rectangular cuts before cutSpacing1 and cutSpacing2 are measured to the cuts in className with extensions. When side extension is applied between certain cut classes, the end extension is not applied. Hence, you cannot apply the same className after the TO statement.
Type: Float, specified in microns

You cannot mix with any other cut layer spacing statements, except for ADJACENTCUTS, PARALLELWITHIN, and SAMEMETALSHAREDEDGE.

Multiple spacing among different cut classes is possible. For cut layer shapes in PIN or OBS statement that belong to a macro of class CORE, the cut size of the via should match one of the sizes of the cut classes so that the tools can determine the proper spacing for the cut. If not, specific spacing should be defined for the cut in the macro definition using the SPACING keyword that is part of the layer geometry specification in MACRO. If the SPACING keyword is not specified, minimum spacing in the cut layer is used. If the cut size of the abstracted cuts does not match one of the cut class sizes, a single spacing value is applied to all four sides of the cut. This may cause DRC violations.

As with any OBS shapes, a cut layer OBS shape is always considered to belong to a net that is different from any pin, even if it is overlapping with a pin geometry on the adjacent metal layer. In this case, different-net cut-to-cut spacing is used to compute the cut-to-cut distance between the OBS and any cut that is connected to the corresponding pin.

It is recommended not to define a large cut layer OBS shape abstracting cut shapes, even in a macro for a non-standard cell. If defined, minimum cut spacing is applied to prevent blocking via access of nearby pins. This may, however, cause DRC violations. The cut layer blockage shapes (defined using the BLOCKAGES keyword) will use minimum cut spacing around them, similar to OBS.

Spacing Table Rule Examples

All the intercut layer spacings are excluded for same metal cuts.

The rules translate into the following SPACINGTABLE property definition:

PROPERTY LEF58_SPACINGTABLE LAYER V1 CENTERTOCENTER VA TO VA
CUTCLASS    VA           VB SIDE
VA          0.10  0.10   0.20  0.20
VB SIDE     0.20  0.20   0.30  0.30

Spacing Table with Center Spacing Rule

You can create a center spacing rule to specify the intercut layer spacing among cuts in center-to-center style.

You can use the following property definition:

PROPERTY LEF58_SPACINGTABLE
  "SPACINGTABLE CENTERSPACING
       LAYER secondLayerName
       [OVERLAPMETALSPACING metalLayerName WIDTH width
           {className1 TO className2 spacing}...]
       CUTCLASS {{className1 | ALL} }...
           {{className2 | ALL} {cutSpacing}...}... 
  ; " ;

Where:

LAYER secondLayerName

The secondLayerName variable defines the intercut layer spacing between a className1 via in the first row of the table on the layer that this spacing table is being defined to another className2 via in the first column on the secondLayerName cut layer. This cut spacing is ignored for same-net. This second layer must be a previously defined cut layer immediately below the layer that this spacing table is being defined, that is., "one layer look ahead" is not supported.

CUTCLASS {{className1 | ALL}}...

Specifies a list of cut classes, which may not necessarily be a complete list of all cut classes in the cut layer. Cut spacing requirements are not needed for any missing cut classes.

The ALL keyword applies to all vias on a cut layer which has only one cut class without an explicit CUTCLASS definition.  

{{className2 | ALL} {cutSpacing}...}...

The className2 variable indicates that the center-to-center cutSpacing is applied between itself on secondLayerName to the first row className1.  

The ALL keyword has the same meaning as defined previously.

Type: Float, specified in microns

[OVERLAPMETALSPACING metalLayerName WIDTH width
{className1 TO className2 spacing}...]

Specifies that when a className1 cut overlaps with a wire with width greater than or equal to width on metalLayerName, center-to-center spacing would be applied between that cut and a className2 cut. metalLayerName must be a metal layer.

Type: Float, specified in microns

For each cut layer, there can be at the most one such inter-layer CUTCLASS CENTERSPACING SPACINGTABLE. If such a spacing table is specified, then any other inter-layer spacing table cannot be defined.

Center Spacing Rule Examples

        LAYER V1
            CUTCLASS     VA        VB     
            VA           0.10      0.15
            VB           0.15      0.20 ; " ;

One of the via is on the current layer with the spacing table definition while the other via is on layer V1.

One Array Rule

You can create a one array rule to define a 1xN array via by using the following property definition:

PROPERTY LEF58_ONEDARRAY
  "ONEDARRAY CUTCLASS className CUTSPACING cutSpacing
        ARRAYCUTS arrayCuts SPACING spacing 
        LAYER secondLayerName SPACING interLayerSpacing
        ENCLOSURE overhang1 overhang2
        ; " ;

Where:

ARRAYCUTS arrayCuts

Specifies the N, which is greater than or equal to arrayCuts in the 1xN array via.
Type: Integer

ENCLOSURE overhang1 overhang2

Specifies that the via cuts in this 1XN array must have overhang1 on two opposite sides and overhang2 on the other two opposite sides on the above metal layer.
Type: Float, specified in microns

LAYER secondLayerName SPACING interLayerSpacing

Specifies the edge-to-edge cut spacing to be interLayerSpacing between this 1xN array via to any other different-net via cuts of any cut classes in layer secondLayerName.
Note: Forward look-up reference is allowed for LAYER secondLayerName.
Type: Float, specified in microns

ONEDARRAY CUTCLASS className CUTSPACING cutSpacing

Defines a 1xN array via of className, which cuts, with edge-to-edge spacing of cutSpacing, must be perfectly aligned in the preferred direction of the routing layer below this cut layer.
Type: Float, specified in microns

SPACING spacing

Specifies the edge-to-edge cut spacing of this 1xN array via to any other via cuts of any cut classes or another 1xN array via to be spacing when the cuts have common parallel run length are greater than 0. The 1xN array via will be merged together as one rectangular shape before the spacing check is applied. that will override other cut spacing rules (for common parallel run length greater than 0).
Type: Float, specified in microns

Opposite Overlap Cut Spacing Rule

You can create an opposite overlap cut spacing rule to specify the inter-layer cut spacing between a cut on the given layer to two cuts on another layer.

You can use the following property definition:

PROPERTY LEF58_OPPOSITEOVERLAPCUTSPACING 
"OPPOSITEOVERLAPCUTSPACING spacing PRL prl 
       LAYER secondLayerName
      ; " ;

Where:

OPPOSITEOVERLAPCUTSPACING spacing PRL prl LAYER secondLayerName

Specifies the inter-layer cut spacing between a cut of any cut class on the given layer to two cuts of any cut class on secondLayerName to be spacing when both the cuts on secondLayerName have a parallel run length greater than or equal to prl to the cut on the given layer and both are on opposite sides of that cut. It is a violation only if both of the inter-layer neighboring cuts are at less than spacing. secondLayerName could be an adjacent cut layer with forward look-up reference (above cut layer). This rule does not apply when all three cuts are on the same net.
Type: Float, specified in microns

Opposite Overlap Cut Spacing Example

Orthogonal Spacing Rule

You can create an orthogonal spacing rule to define additional spacing constraints for two exactly aligned cuts.

You can use the following property definition:

PROPERTY LEF58_ORTHOGONALSPACING 
  "ORTHOGONALSPACING cutSpacing 
      [CUTCLASS className [TO ALL]] {ABOVE | BELOW}
      PARALLEL parLength WITHIN parWithin WIDTH width 
      [METALPRL metalPrl METALWITHIN metalWithin]
      [HORIZONTAL | VERTICAL]
      ; " ;

Where:

HORIZONTAL | VERTICAL

Specifies that cutSpacing applies only in the given direction.

METALPRL metalPrl METALWITHIN metalWithin

Specifies that the search window for metal neighbor wire is formed by metalPrl and metalWithin on the cut having a neighbor cut. If the wire containing the neighboring cut touches or overlaps with the metal search window, it is a violation.
Type: Float, specified in microns

ORTHOGONALSPACING cutSpacing
[CUTCLASS
className] {ABOVE | BELOW}
PARALLEL
parLength WITHIN parWithin WIDTH width

The orthogonal spacing rule specifies that if there are two exactly aligned cuts of cut class className, if specified, or of any cut classes with spacing less than cutSpacing, and there is another cut of cut class className, if specified, or of any cut classes within parWithin having parallel run length greater than parLength in the orthogonal direction, it is a violation to have a wire with width less than or equal to width on the above or below metal layer in ABOVE or BELOW overlapping with, or even touching, a search window formed by extended parLength on both sides on the cut edge having a neighbor to the neighbor cut edge. Metal containing the cuts is excluded.
If zero is specified as cutSpacing, this rule will be applicable for two cuts instead of three. There is no need to have an exactly aligned cut. Just a neighboring cut fulfilling parWithin and parLength conditions would trigger the rule. See Figure 2-140.
Type: Float, specified in microns

TO ALL

Specifies that the rule is triggered if at least one cut belongs to the given cut class, className; the other cuts could belong to any cut class.

Figure 2-152 Illustration of Orthogonal Spacing Rule

Figure 2-153 Illustration of Orthogonal Spacing Rule with Zero Cut Spacing

Figure 2-154 Illustrations of the Orthogonal Spacing Rule with METALPRL and METALWITHIN

PRL Two Sides Spacing Rule

You can create a PRL two sides spacing rule to define additional spacing constraints for cut spacing.

You can use the following property definition:

PROPERTY LEF58_PRLTWOSIDESSPACING 
  "PRLTWOSIDESSPACING prlSpacing nonPrlSpacing 
      CUTCLASS className1 TO className2
      PRL prl1 prl2 prl3 prl4 
      ; " ;

The PRL two sides spacing rule specifies that the center-to-center spacing between a cut of className1 and another cut of className2 that are greater than or equal to prl1 and less than or equal to prl2 on one side, and greater than or equal to prl3 and less than or equal to prl4 on the other side to be prlSpacing. Otherwise, the center-to-center spacing of nonPrlSpacing should be applied on them. This spacing is checked in addition to the spacing defined in CUTCLASS SPACINGTABLE. This means that it is a violation if cut spacing fails in PRLTWOSIDESSPACING or in the spacing table.

Figure 2-155 Illustration of the PRL Two Sides Spacing Rule

Region Rule

You can create a region rule to define area-based rules on a cut layer.

You can use the following property definition:

PROPERTY LEF58_REGION
  “REGION regionLayerName BASEDLAYER cutLayerName
  ; ” ;

Where:

REGION regionLayerName BASEDLAYER cutLayerName

Specifies a set of region- or area-based rules on a cut layer cutLayerName. regionLayerName is a masterslice layer with type REGION. Users can create a blockage on that masterslice layer on a design to indicate the areas of the region. In addition, MACRO may also have OBS on that masterslice layer to indicate that the areas of its instance should be subjected to these region-based rules. All the rules specified on this cut layer with REGION are applied to the corresponding areas of regionLayerName on cutLayerName. The areas outside cutLayerName honor the set of rules on the given cut layer without type REGION. If a rule check crosses the boundaries of a region, it is subjected to the rules for both inside and outside the region, with the tighter rule values of the two sets dominating.

The set of rules defined in the layer with type REGION should be very small as compared to the layer without type REGION. The rules defined in this layer with type REGION should be a replacement of the corresponding rule (having the same set of the constructs of a LEF statement or a complete replacement on a table, like SPACINGTABLE) on the layer without type REGION. All the other rules defined on the layer without type REGION are also applicable on the layer with type REGION.

Region Rule Example

The following example means that a cut overlapping region R1 should have spacing of 0.7 and a cut spacing check outside region R1 should have spacing of 0.5. Adjacent cut and any other rules on layer V1 (without REGION) would also be applied on region R1:

LAYER R1
 TYPE MASTERSLICE ;
 PROPERTY LEF58_TYPE “TYPE REGION ; ” ;
END R1
...
LAYER V1
 TYPE CUT ;
 ...
 SPACING 0.5 ;
 SPACING 0.8 ADJACENTCUTS 2 WITHIN 0.8 ;
 ...
END V1
LAYER V1R1
 TYPE CUT ;
 PROPERTY LEF58_REGION “REGION R1 BASEDLAYER V1 ; ” ;
 ...
 SPACING 0.7 ;
 ...
END V1R1

Figure 2-156 Illustration of the Region Rule

Same-Metal Aligned Cuts Rule

You can create a same-metal aligned cuts rule to define the number of center-aligned cuts that share the same metal on a cut layer.

You can use the following property definition:

PROPERTY LEF58_SAMEMETALALIGNEDCUTS
  "SAMEMETALALIGNEDCUTS numCuts 
      CUTCLASS {className | ALL}
      | {CUTCLASSLIST {classNameList}...}...}
      [ABOVE | BELOW] WIDTH width SPACING spacing
      [METALMASK metalMaskNum]
      [PARALLEL parLength WITHIN parWithin
      | METALWITHIN metalWithin [WITHCUT]
      | CUTWITHIN cutWithin
      | NOVIAOVERLAPMETAL within]
      [CENTERTOCENTER | EDGETOEDGE]
      ; " ;

Where:

ABOVE | BELOW

Specifies that the rule applies only if the cuts share the same metal on the given above or below metal layer.

CENTERTOCENTER | EDGETOEDGE

Specifies that cut spacing is measured as center-to-center or edge-to-edge if CENTERTOCENTER or EDGETOEDGE is specified. This would overwrite any built-in cut spacing style.

CUTCLASS {className | ALL}

Specifies that the rule applies only if the cuts belong to the given cut class of className or any cut class if ALL is specified.

{CUTCLASSLIST {classNameList}...}...

Specifies that the rule applies only if there is at least one cut belonging to a cut class in each set of the given cut class list in classNameList and all of the cuts must belong to a cut class in all of the given cut classes.

For example,

PROPERTY LEF58_ SAMEMETALALIGNEDCUTS “
     SAMEMETALALIGNEDCUTS 3 CUTCLASSLIST VA VB 
     CUTCLASSLIST VA VC ....” ;

means that the rule applies only with a cut of VA or VB, another cut of VA or VC and at least two more cuts of VA, VB, and VC. For example, four VA cuts, one VA cut and three VB cuts, or two VB cuts and two VC cuts could trigger the rule.

CUTWITHIN cutWithin

Specifies that the rule applies only if the current layer has a neighboring cut on the adjacent cut layer that has a parallel run length (PRL) greater than 0 with a window formed by the merging of the violating cuts and is within cutWithin from the wire containing the aligned cuts. The neighboring wire containing the neighboring cut does not need to cover all of the aligned cuts. In addition, spacing is measured in the edge-to-edge style.

Type: Float, specified in microns

METALMASK metalMaskNum

Specifies that the rule applies only if the metal containing the aligned cuts belongs to the mask metalMaskNum.

METALWITHIN metalWithin [WITHCUT]

Specifies that the rule applies only if the layer with all the shared same-metal cuts has neighboring wires within metalWithin, and their combined PRL touches or covers more than numCuts of cuts. The PRL of the neighboring wires on the opposite sides of the aligned cuts could be combined if their projection touches or overlaps. In addition, the width of this neighboring wire must also be less than or equal to width, and spacing is measured in the edge-to-edge style.

WITHCUT means that the rule applies only if a neighboring wire contains a cut on the adjacent cut layer and that cut needs to touch or overlap with a window formed by the merging of the violating cut.

Type: Float, specified in microns

NOVIAOVERLAPMETAL within

Specifies that the rule applies only if there is a metal on the other layer overlapping with the metal covering the aligned cuts by extending within on the other metal wire connected to one of the end cuts of the aligned cuts and there is no via cut in the overlap metal. In addition, spacing is measured in the edge-to-edge style.

Type: Float, specified in microns

PARALLEL parLength WITHIN parWithin

Specifies that the rule applies only if the layer with shared same-metal cuts has a neighboring wire within parWithin and having a parallel run length greater than parLength to the cuts. If parLength is negative, it is equivalent to extending the bounding box of the aligned cuts by abs(parLength) and any neighboring wire overlapping with this extended bounding box would trigger the rule.

In addition, the width of this neighboring wire must also be less than or equal to width and spacing is measured in the edge-to-edge style.

Type: Float, specified in microns

SAMEMETALALIGNEDCUTS numCuts WIDTH width SPACING spacing

Specifies the number of center-aligned cuts to be less than or equal to numCuts if the cuts share the same metal on the above or below metal layer with width less than or equal to width and center-to-center spacing less than spacing.

Type: Float, specified in microns

Same-Metal Aligned Cuts Rule Examples

Via Cluster Rule

You can create a via cluster rule to define a list of critiques to form a via cluster for via cuts belonging to a cut class, and the spacing requirements on them.

You can use the following property definition:

PROPERTY LEF58_VIACLUSTER 
"VIACLUSTER CUTCLASS className 
      CUTS perpendicularNumCut
      [DIAGONAL diagonalNumCut] 
          [NOPRLSPACING diagonalSpacing bendSpacing WITHIN within
          EXTENSION sideExtension edgeExtension]]
      WITHIN minWithin maxWithin 
      ; " ;

Where:

CUTS perpendicularNumCut [DIAGONAL diagonalNumCut]

Specifies that the maximum consecutive number of via cuts of a cluster perfectly aligned in a direction perpendicular to the cut edges that fulfill the overhang defined in ENCLOSUREEDGE OPPOSITE to be perpendicularNumCut or diagonally aligned without bend/notch to be diagonalNumCut, if defined. In other words, there is no limit to the consecutive number of via cuts perfectly aligned in a direction parallel to the cut edges that fulfill the overhang defined using ENCLOSUREEDGE OPPOSITE or diagonally if DIAGONAL keyword is not defined.
Type: Integer

NOPRLSPACING diagonalSpacing bendSpacing WITHIN within
EXTENSION sideExtension edgeExtension

Specifies the cluster criteria when diagonalNumCut is set to 0, which implies that there is no limit to the number of cuts that can be inserted diagonally and bend/notch is allowed. If the cuts are inserted diagonally without bend/notch, at the most two neighbor cuts can be found within within having spacing greater than or equal to diagonalSpacing in center-to-center measurements (on both within and diagonalSpacing).  Otherwise (with bend/notch), at the most two non-perfectly aligned neighbor cuts can be found within within having spacing greater than or equal to the   bendSpacing in center-to-center measurements (on both within and bendSpacing).

In addition to forming a via cluster, one neighbor cut inserted diagonally without any bend/notch or two neighbor cuts having a bend/notch must be found touching a search window formed by extending sideExtension along both sides on the cut edges, that fulfill the overhang defined in ENCLOSUREEDGE OPPOSITE rule, and with the edgeExtension perpendicular to those edges.
Type: Float, specified in microns

VIACLUSTER CUTCLASS className

Defines a list of critiques to form a via cluster for via cuts belonging to cut class className, and the spacing requirements on them.

WITHIN minWithin maxWithin

Specifies that the via cuts must be larger than or equal to minWithin from each other in square corner (maximum x and y) style.  For diagonal cluster, the via cuts must be minWithin apart in both x and y direction in corner to corner style. To form a via cluster, the via cuts must be within maxWithin in square corner style.

In other words, the cut to cut spacing among via cuts in the same cluster will be minWithin while a via cut of a cluster to a via cut of another cluster or not belonging to a cluster will be subject to the regular cut spacing rules.
Type: Float, specified in microns

Figure 2-162 Illustration of the Via Cluster Rule with WITHIN

Figure 2-163 Illustration of the Via Cluster Rule with NOPRLSPACING

Via Group Rule

You can create a via group rule by using the following property definition:

PROPERTY LEF58_VIAGROUP 
  "VIAGROUP groupName CUTS numCut CUTCLASS {{className}... | ALL}
      [SAMEMASK]
      {{[PRLTWOSIDES prl1 prl2 prl3 prl4] SPACING minSpacing maxSpacing
        | PRL prl PRLSPACING prlSpacing [HORIZONTAL|VERTICAL]}
            [ALLOWBEND [NOHORIZONTAL|NOVERTICAL]]
      | ALIGNEDSPACING {HORIZONTAL | VERTICAL} 
            minSpacing maxSpacing }
      ; " ;]

Where:

ALIGNEDSPACING {HORIZONTAL | VERTICAL}
minSpacing maxSpacing

Specifies that the cuts that are greater than minSpacing and less than maxSpacing in the given direction of HORIZONTAL or VERTICAL with PRL greater than 0 in the orthogonal direction will form a via group.

ALLOWBEND [NOHORIZONTAL|NOVERTICAL]

Specifies that cuts could be formed in a bend/notch pattern. This construct is only supported when numCut is 3.

NOHORIZONTAL/NOVERTICAL means that a horizontal/vertical bend with two cuts having PRL greater than 0 horizontally/vertically would be a violation by itself. Then, a vertical/horizontal bend could be a legal via group.

SAMEMASK

Specifies that the via group is only formed among same-mask cuts.

PRL prl PRLSPACING prlSpacing [HORIZONTAL|VERTICAL]

Specifies that cuts having PRL greater than prl and spacing less than prlSpacing will form a via group. If HORIZONTAL or VERTICAL is specified, prlSpacing would be measured in the given direction and prl would be measured in the orthogonal direction.

Type: Float, specified in microns

VIAGROUP groupName CUTS numCut CUTCLASS {{className}... | ALL}
[PRLTWOSIDES
prl1 prl2 prl3 prl4]
SPACING minSpacing maxSpacing

Specifies the maximum number of cuts within a via group of cuts belonging to any of the given cut classes in className or any cut classes in ALL to be numCut. Tools can support only up to four defined cut classes. The via group has the name of groupName. Any two neighboring cuts of a via group must have PRL greater than prl1 and less than prl2 on one side and PRL greater than prl3 and less than prl4 on the other side if PRLTWOSIDES is defined and the cuts must have spacing greater than minSpacing and less than maxSpacing. In addition, all the cuts must be diagonal without any bend or notch.

Type: Float, specified in microns

Via Group Rule Examples

Via Group Override Spacing Rule

You can create a via group override spacing rule by using the following property definition:

PROPERTY LEF58_VIAGROUPOVERRIDESPACING 
  "VIAGROUPOVERRIDESPACING
      ; " ;]

Where:

VIAGROUPOVERRIDESPACING

Specifies that all of the same-layer cut spacing rules, including adjacent cut rules, are not checked for the cuts that could form a via group based on the VIAGROUP construct.

Via Group Spacing Rule

You can create a via group spacing rule by using the following property definition:

PROPERTY LEF58_VIAGROUPSPACING 
  "VIAGROUPSPACING spacing 
      [SAMEMASK | DIFFMASK] 
      [{HORIZONTAL| VERTICAL} [PRL prl] [TWOSIDES]]
      VIAGROUP groupName CUTS numCut 
      [LAYER cutLayerName] CUTCLASS {className | All}
      [TOVIAGROUP]
      [MERGEDCUTS | NOMERGEDCUTS]
      [PARALLEL parLength WITHIN parWithin 
          OTHERCUTCLASS otherClassName]
      ; " ;]

Where:

DIFFMASK

Specifies that the spacing applies only to different-mask cuts.

HORIZONTAL| VERTICAL [PRL prl]

Specifies that the spacing applies only on the given direction, either horizontally or vertically, with cuts having a parallel run length (PRL) greater than 0 or greater than prl if PRL is explicitly specified.

LAYER cutLayerName

Specifies an inter-layer cut spacing between a via group on the current layer to a cut of className on an adjacent cut layer of cutLayerName.
Note: Forward look-up reference is allowed for LAYER cutLayerName.

Type: String

MERGEDCUTS | NOMERGEDCUTS

MERGEDCUTS specifies that a bounding box is formed by the cuts on a group before cut spacing is applied on the bounding box. NOMERGEDCUTS should be applied only along with TOVIAGROUP to disable the built-in cut merging behavior.

See Table 2-1 for the impact of using MERGEDCUTS, NOMERGEDCUTS, and TOVIAGROUP in various combinations.

PARALLEL parLength WITHIN parWithin
OTHERCUTCLASS
otherClassName

Specifies the spacing rule applies only if any cuts belonging to via group groupName is a neighbor cut of a top or bottom edge of a cut with cut class otherClassName within parWithin having a parallel run length greater than parLength.
Type: Float, specified in microns

SAMEMASK

Specifies that the spacing applies only on same-mask cuts.

TOVIAGROUP

Specifies that the spacing applies only between cuts belonging to two different groupName via groups. In addition, cuts must be merged before spacing is applied.

TWOSIDES

Specifies that the spacing applies only if there are two neighboring cuts within spacing on the opposite sides in the given direction.

VIAGROUPSPACING spacing VIAGROUP groupName CUTS numCut
CUTCLASS {
className | ALL}

Specifies the spacing of cuts belonging to the via group groupName with number of cuts numCut to cuts belonging to the cut class className or any cut classes in ALL to be spacing.

Type: Float, specified in microns

Table 2-1 Impact of Using MERGEDCUTS, NOMERGEDCUTS, and TOVIAGROUP

MERGEDCUTS NOMERGEDCUTS Without either of them
With TOVIAGROUP

Irrelevant because cut merging is default in TOVIAGROUP

No cut merging

Cut merging

Without TOVIAGROUP

Cut merging

Irrelevant because cuts are not merged by default

No cut merging

Via Group Spacing Rule Examples

Voltage Spacing Rule

Voltage spacing rules can be used to define spacing among vias objects on the same cut layer in different voltages.

You can create a voltage spacing rule by using the following property definition:

PROPERTY LEF58_VOLTAGESPACING 
"VOLTAGESPACING {voltage spacing} ...
     ; " ; 

Where:

VOLTAGESPACING {voltage spacing} ...

Defines the spacing among the vias in the same cut layer for different voltages. Both the voltage and spacing values should be increasing monotonically. The spacing value is required for any net with a worst-case voltage between its neighbors, including a negative minimum voltage that is greater than or equal to the voltage specified in the voltage-spacing definition table. For example, if you have 1.5v and 2.0v rules, the spacing between a net with a maximum voltage of 1.3v and a minimum voltage of 0.0v and a net with a maximum voltage of 1.4v and a minimum voltage of -0.5v should follow the 1.5v spacing rule because the worst-case voltage is max (1.3v - (-0.5v) = 1.8v, 1.4v - 0.0v = 1.4v) = 1.8v.

End of Chapter


Return to top
 ⠀
X