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

5


LEF Syntax - Layer (Routing)

This chapter contains information about the following topics:

Layer (Routing)

LAYER layerName 
TYPE ROUTING ;
[MANUFACTURINGGRID value ;]
[MASK maskNum ;]
DIRECTION {HORIZONTAL | VERTICAL | DIAG45 | DIAG135} ;
PITCH {distance | xDistance yDistance} ;
[DIAGPITCH {distance | diag45Distance diag135Distance} ;]
WIDTH defaultWidth ;
[OFFSET {distance | xDistance yDistance} ;]
[DIAGWIDTH diagWidth ;]
[DIAGSPACING diagSpacing ;]
[DIAGMINEDGELENGTH diagLength ;]
[AREA minArea ;]
[MINSIZE minWidth minLength [minWidth2 minLength2] ... ;]
[[SPACING minSpacing
    [ RANGE minWidth maxWidth 
       [ INFLUENCE value [RANGE stubMinWidth stubMaxWidth]
       | RANGE minWidth maxWidth] 
    | ENDOFLINE eolWidth WITHIN eolWithin 
         [PARALLELEDGE parSpace WITHIN parWithin [TWOEDGES]]
    | SAMENET [PGONLY] 
    | NOTCHLENGTH minNotchLength 
    | ENDOFNOTCHWIDTH endOfNotchWidth NOTCHSPACING minNotchSpacing 
          NOTCHLENGTH minNotchLength 
    ] 
  ;] ...
[SPACINGTABLE 
     [PARALLELRUNLENGTH {length} ...
        {WIDTH width {spacing} ...} ... ;
        [SPACINGTABLE 
          INFLUENCE {WIDTH width WITHIN distance SPACING spacing} ... ;]
     |TWOWIDTHS {WIDTH width [PRL runLength] {spacing} ...} ... ;
     ]
  ;" ;]
[WIREEXTENSION value ; ]
[MINIMUMCUT numCuts WIDTH width [WITHIN cutDistance]
   [FROMABOVE | FROMBELOW]
   [LENGTH length WITHIN distance] ;] ...
[MAXWIDTH width ;]
[MINWIDTH width ;]
[MINSTEP minStepLength
   [ [INSIDECORNER | OUTSIDECORNER | STEP] [LENGTHSUM maxLength] 
   | [MAXEDGES maxEdges] ;]
[MINENCLOSEDAREA area [WIDTH width] ;] ...
[PROTRUSIONWIDTH width1 LENGTH length WIDTH width2 ;]
[RESISTANCE RPERSQ value ;]
[CAPACITANCE CPERSQDIST value ;]
[HEIGHT distance ;]
[THICKNESS distance ;]
[SHRINKAGE distance ;]
[CAPMULTIPLIER value ;]
[EDGECAPACITANCE value ;]
[MINIMUMDENSITY minDensity ;] 
[MAXIMUMDENSITY maxDensity ;] 
[DENSITYCHECKWINDOW windowLength windowWidth ;] 
[DENSITYCHECKSTEP stepValue ;] 
[FILLACTIVESPACING spacing ;] 
[ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 | OXIDE5 | ...
   | OXIDE32}
   ;] ...
[ANTENNAAREARATIO value ;] ...
[ANTENNADIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNACUMAREARATIO value ;] ...
[ANTENNACUMDIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNAAREAFACTOR value [DIFFUSEONLY] ;] ...
[ANTENNASIDEAREARATIO value ;] ...
[ANTENNADIFFSIDEAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNACUMSIDEAREARATIO value ;] ...
[ANTENNACUMDIFFSIDEAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNASIDEAREAFACTOR value [DIFFUSEONLY] ;] ...
[ANTENNACUMROUTINGPLUSCUT ;]
[ANTENNAGATEPLUSDIFF plusDiffFactor ;]
[ANTENNAAREAMINUSDIFF minusDiffFactor ;] 
[ANTENNAAREADIFFREDUCEPWL ( ( diffArea1 diffMetalFactor1 ) 
    ( diffArea2 diffMetalFactor2 ) ...) ;]
[PROPERTY propName propVal ;] ...
[ACCURRENTDENSITY {PEAK | AVERAGE | RMS}
   { value 
   | FREQUENCY freq_1 freq_2 ... ;
       [WIDTH width_1 width_2 ... ;]
       TABLEENTRIES
         v_freq_1_width_1 v_freq_1_width_2 ... 
         v_freq_2_width_1 v_freq_2_width_2 ... 
         ...
   } ;]
[DCCURRENTDENSITY AVERAGE
   { value 
   | WIDTH width_1 width_2 ... ;
       TABLEENTRIES value_1 value_2 ...
   } ;]
[PROPERTY LEF_CDN_ACCURRENTDENSITY
  "ACCURRENTDENSITY {PEAK | AVERAGE | RMS}
     [TEMPPWL temp_1 multi_1 temp_2 multi_2  ...]
     [HOURSPWL hours_1 multi_1 hours_2 multi_2  ...]
     ; " ;]
[PROPERTY LEF_CDN_ANTENNADIFFGATEPWL 
  "ANTENNADIFFGATEPWL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 | OXIDE5 | ...
   | OXIDE32} 
   ((gateArea1 effectiveGateArea1) (gateArea2 effectiveGateArea2) ... )
   ;" ;]
[PROPERTY LEF_CDN_ANTENNADIFFONLYAREARATIO
  “ANTENNADIFFONLYAREARATIO {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 
     | OXIDE5 | ... | OXIDE32}  value
   ;..." ;]
   ;..." ;]
[PROPERTY LEF_CDN_ANTENNADIFFPROTECTORAREARATIO
  “ANTENNADIFFPROTECTORAREARATIO {OXIDE1 | OXIDE2 | OXIDE3 
     | OXIDE4 | OXIDE5 | ...| OXIDE32}  value
   ;..." ;]
[PROPERTY LEF_CDN_ANTENNAGATEPWL 
  "ANTENNAGATEPWL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 | OXIDE5 | ...
   | OXIDE32}
   ((gateArea1 effectiveGateArea1) (gateArea2 effectiveGateArea2)... )
   ;" ;]
[PROPERTY LEF_CDN_ANTENNAGATEPLUSDIFF
  "ANTENNAGATEPLUSDIFF {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4 | OXIDE5 | ...
    | OXIDE32}
    {plusDiffFactor | 
    PWL ((diffArea1 plusDiffProtect1) (diffArea1 plusDiffProtect2)...)}      ;" ;] 
[PROPERTY LEF_CDN_AREA 
  "AREA minArea 
     [MASK maskNum]
     [EXCEPTMINWIDTH minWidth
     | [EXCEPTEDGELENGTH {minEdgeLength maxEdgeLength | edgeLength}]
           [EXCEPTMINSIZE {minWidth minLength}...]
           [EXCEPTSTEP length1 length2] 
     | RECTWIDTH rectWidth 
     | EXCEPTRECTANGLE
     | LAYER trimLayer OVERLAP {1 | 2}
     ]
  ;..." ;]
[PROPERTY LEF_CDN_BACKSIDE 
  “BACKSIDE ;” ;] 
[PROPERTY LEF_CDN_BOUNDARYBLOCKAGE 
  “BOUNDARYBLOCKAGE size 
     ;” ;] 
[PROPERTY LEF_CDN_BOUNDARYEOLBLOCKAGE 
  “BOUNDARYEOLBLOCKAGE size OFFSET offset
     [PARALLEL parLength WITHIN parWithin SPACING spacing]
     ;” ;] 
[PROPERTY LEF_CDN_COREEOLBLOCKAGE 
  “COREEOLBLOCKAGE outwardSize inwardSize
     [SIDEEXTENSION sideExtension]
     ;” ;] 
[PROPERTY LEF_CDN_CORNEREOLKEEPOUT 
  “CORNEREOLKEEPOUT WIDTH eolWidth EOLSPACING eolSpacing 
     { SPACING spacing1 spacing2 WITHIN within1 within2 
     | EXTENSION backwardExt sideExt forwardExt } 
     ;” ;] 
[PROPERTY LEF_CDN_CORNERFILLSPACING
  "CORNERFILLSPACING spacing EDGELENGTH length1 length2
     ADJACENTEOL eolWidth
     ; " ;]
[PROPERTY LEF_CDN_CORNERSPACING
  "CORNERSPACING 
     {CONVEXCORNER [SAMEMASK]
          [CORNERONLY within | CORNERTOCORNER]
          [EXCEPTEOL eolWidth [EXCEPTJOGLENGTH length
              [EDGELENGTH] [INCLUDELSHAPE]]
          | EOLONLY eolWidth]
     |CONCAVECORNER
          [MINLENGTH minLength] [EXCEPTNOTCH [notchLength]] }
     [EXCEPTSAMENET | EXCEPTSAMEMETAL]
     {WIDTH width SPACING spacing
     | WIDTH width SPACING horizontalSpacing verticalSpacing}...
  ; " ;]
[PROPERTY LEF_CDN_ENCLOSURESPACING
  "ENCLOSURESPACING    
     [CUTCLASS cutClass [LONGEDGEONLY] ]
     [FROMABOVE | FROMBELOW]
     {ENCLOSURE enclosure SPACING spacing}... 
  ; ... " ;]
[PROPERTY LEF_CDN_ENCLOSUREWITHEOL
  "ENCLOSUREWITHEOL eolWidth
     [CUTCLASS className] [FROMABOVE | FROMBELOW]
     {ENCLOSURE enclosure EXCEPTLINEENDSPACING spacing
     | {ENCLOSURESPACING spacing enclosure}... }
  ; ... " ;]
[PROPERTY LEF_CDN_EOLEXTENSIONSPACING
  "EOLEXTENSIONSPACING spacing [SAMEMASK]
   [PARALLELONLY] [NONEOL]]
   [OTHERWIDTH otherWidth]
     {ENDOFLINE eolWidth EXTENSION extension
         [ENDTOEND endToEndExtension]} ...
   [MINLENGTH minLength [TWOSIDES]]
     ;" ;]
[PROPERTY LEF_CDN_EOLKEEPOUT
  "EOLKEEPOUT {eolWidth | minEolWidth maxEolWidth} 
    [RIGHTWAYONLY | WRONGWAYONLY]
     EXTENSION backwardExt sideExt forwardExt
     [EXCEPTWITHIN lowSideExt highSideExt] 
     [CLASS className [OTHERENDEOL]]
     [CORNERONLY 
         [EXCEPTFROM { BACKEDGE [EXACTALIGNED exactForwardExt]
            | FRONTEDGE } 
         [MASK maskNum [TWOSIDES] [SAMEMASK]
         | DIFFMASK
         | SAMEMASK]
         [EXCEPTSAMESIDEMETAL backwardExt1 sideExt1 forwardExt1]
         [EXCEPTNOOPPSIDEMETAL backwardExt2 sideExt2 forwardExt2]
         [EXCEPTLINEENDSPACING spacing | EXCEPTLINEENDGAP]
         [EOLWITHINCUT withinCut]
         [EXCEPTEOLSPACING eolSpacing]
         ]] 
     [EXCEPTSAMEMETAL]
     ; " ;]
[PROPERTY LEF_CDN_EOLTRACK
  "EOLTRACK eolWidth PITCH pitch TRACKSDISTANCE distance
     [EXCEPTEOLSPACING eolSpacing [WITHIN within]]
     ; " ;]
[PROPERTY LEF_CDN_EOLVIAKEEPOUT
  "EOLVIAKEEPOUT eolWidth MASK maskNum
     EXTENSION backwardExt sideExt forwardExt
     OTHERWIDTH otherWidth
     OTHERENDEXTENSION otherEndExtension 
     [EXCEPTBACKSIDEALIGNED]
     ; " ;]
[PROPERTY LEF_CDN_FILLTOFILLSPACING 
  “FILLTOFILLSPACING spacing ;” ;] 
[PROPERTY LEF_CDN_FIVEWIRESEOLSPACING 
  “FIVEWIRESEOLSPACING eolSpacing WITHIN eolWithin
       PRL prl
      ENCLOSECUT {BELOW|ABOVE} encloseDist CUTWITHIN cutWithin
       NOMETALEOLEXTENSION eolSideExtension eolForwradExtension
;...”;]
[PROPERTY LEF_CDN_FORBIDDENSPACING
  "FORBIDDENSPACING minSpacing maxSpacing [minSpacing2 maxSpacing2]
     [WIDTH minWidth WITHIN within PRL prl
     | [SAMEMASK] WIDTH maxWidth PRL prl
         [TWOEDGES within | EXACTSPACINGEDGE exactSpacing
             [IGNOREMIDDLE width spacing]
             [SPANLENGTH spanLength [WITHIN within]]
             [EXCEPTWIREWIDTHSPACING {width spacing}...]]
     | EXACTWIDTH exactWidth PRL prl
         OTHERWIDTH otherWidth EXACTSPACINGEDGE exactSpacing
     | [SAMEMASK | MASK maskNum]
         WIDTHRANGE minWidth maxWidth PRL prl
         OTHERWIDTH otherWidth WITHIN within [OTHERSAMEMASK]]
    ; " ;]
[PROPERTY LEF_CDN_GAP
  "GAP EXACTWIDTH exactWidth MAXLENGTH maxLength
     SPACING {{0 | 1 | 2} spacing}...[ENDTOEND endToEndSpacing]
  ; " ;]
[PROPERTY LEF_CDN_JOINTCORNERSPACING
  "JOINTCORNERSPACING spacing [SAMEMASK]
     JOINTWIDTH jointWidth [MINLENGTH minLength]
     JOINTLENGTH spanLength [EDGELENGTH edgeLength]
     ; " ;]
[PROPERTY LEF_CDN_JOINTFORBIDDENSPACING
  "JOINTFORBIDDENSPACING minSpacing maxSpacing
     WIDTH width WRONGDIRWIDTH wrongDirWidth
     OTHERWIDTH otherWidth [PRL prl]
     ; " ;]
[PROPERTY LEF_CDN_LINEENDALIGNEDWITHCUT
  "LINEENDALIGNEDWITHCUT alignedDistance ENCLOSURE enclosure
     [CUTCLASS className]
     {FROMABOVE | FROMBELOW} [CUTONANYWIRES]
     ; " ;]
[PROPERTY LEF_CDN_LINEENDGAP
  "LINEENDGAP gap WIDTH width [MASK maskNum]
  ; " ;]
[PROPERTY LEF_CDN_LITHOMACROHALO
  "LITHOMACROHALO horizontalHalo verticalHalo 
     {WIRESPACING wireSpacing | NOSAMEMETALJOG}
  ; " ;]
[PROPERTY LEF_CDN_MAXDIAGLENGTH
  "MAXDIAGLENGTH diagonalLength manhattanLength
      ; " ;]
[PROPERTY LEF_CDN_MAXLENGTHWITHCUT 
  "MAXLENGTHWITHCUT length WIDTH width
     WITHIN cutDistance {FROMABOVE | FROMBELOW}
     OTHERWIDTH otherWidth EXCEPTOTHERLENGTH otherLength
     [LAYER secondLayerName SECONDWIDTH secondWidth 
        EXCEPTSECONDLENGTH secondLength]
     ; " ;]
[PROPERTY LEF_CDN_MAXOVERLAPLENGTH
  "MAXOVERLAPLENGTH length LAYER secondLayerName
      ; " ;]
[PROPERTY LEF_CDN_MAXWIDTH 
  "MAXWIDTH width [WRONGDIRECTION]
      ; " ;]
[PROPERTY LEF_CDN_MINIMUMCUT 
  "MINIMUMCUT {numCuts | {CUTCLASS className numCuts
     [DIFFCUTCLASS]} ... } 
     WIDTH width [WITHIN cutDistance]
     [FROMABOVE | FROMBELOW] 
     [EXCEPTOTHERWIDTH otherWidth]
     [LENGTH length WITHIN distance 
     |AREA area [WITHIN distance]
     |SAMEMETALOVERLAP 
     | FULLYENCLOSED]
     ; " ;]
[PROPERTY LEF_CDN_MINLENGTHPARALLEL 
  "MINLENGTHPARALLEL minLength MASK maskNum WIDTH width
     {FROMABOVE|FROMBELOW} CUTCLASS className
     EXCEPTEOLSPACING eolSpacing EXCEPTWITHIN within
     ; " ;]
[PROPERTY LEF_CDN_MINSIZE 
  "MINSIZE [RECTONLY] minWidth minLength [minWidth minLength]...
     ;..." ;]
[PROPERTY LEF_CDN_MINSTEP 
  "MINSTEP minStepLength 
     [[INSIDECORNER | OUTSIDECORNER | STEP] [LENGTHSUM maxLength]]
     |[MAXEDGES maxEdges] 
       [EXCEPTRECTANGLE]
       [ MINADJACENTLENGTH minAdjLength 
          [CONVEXCORNER [EXCEPTWITHIN exceptWithin] 
          |CONCAVECORNER
          |THREECONCAVECORNERS [CENTERWIDTH width]
          | minAdjLength2]
      | MINBETWEENLENGTH minBetweenLength
          [EXCEPTSAMECORNERS]
      | NOADJACENTEOL eolWidth]
          [EXCEPTADJACENTLENGTH minAdjLength
          |MINADJACENTLENGTH minAdjLength]
          [CONCAVECORNERS]
      | NOBETWEENEOL eolWidth
      | CONCAVEANDCONVEX]
     ] ; " ;]
[PROPERTY LEF_CDN_OPPOSITEEOLSPACING 
  "OPPOSITEEOLSPACING [SAMEMASK] WIDTH width  
     ENDWIDTH eolWidth [MINLENGTH minLength]
     [JOINTWIDTH jointWidth] JOINTLENGTH spanLength
         {[JOINTTOEDGEEND jointToEdgeEndLength]
         [JOINTEXTENSION jointExtension]
         [JOINTCORNERONLY]
     [SIDELENGTH length [TOSIDE toSideLength]]
     [SIDEEXTENSION sideExtension [TOSIDE toSideExtension] ]
     [SIDEEDGELENGTH sideEdgeLength]
     [PRL prl]
     {[EXCEPTEDGELENGTH edgeLength [PRL maxPRL]]}...
     ENDTOEND endSpacing endSpacing [PRL individualPrl]
     ENDTOJOINT endSpacing jointSpacing [PRL individualPrl]
     JOINTTOEND jointSpacing endSpacing [PRL individualPrl]
     JOINTTOJOINT jointSpacing jointSpacing [PRL individualPrl]
     [SIDETOEND sideSpacing endSpacing [PRL individualPrl]
     SIDETOJOINT sideSpacing jointSpacing] [PRL individualPrl]
     [JOINTTOSIDE jointSpacing sideSpacing] [PRL individualPrl]
     [SIDETOSIDE sideSpacing sideSpacing] [PRL individualPrl]
  ;" ;]
[PROPERTY LEF_CDN_PINCONNECTBLOCKAGE
  "PINCONNECTBLOCKAGE size ENCLOSEDLENGTH enclosedLength
  ; " ;]
[PROPERTY LEF_CDN_PITCH
  "PITCH {distance | xDistance yDistance} [FIRSTLASTPITCH firstLastPitch]
  ; " ;]
[PROPERTY LEF_CDN_PROTRUSIONWIDTH 
  "PROTRUSIONWIDTH width1 
     {LENGTH length WIDTH width2 
     | {WIDTH width2 
        {MINSIZE {minWidth minLength | minLength
           CUTCLASS className {FROMABOVE | FROMBELOW}} 
        | MINLENGTH minLength
           [EXCEPTCUT cutDistance [FROMABOVE | FROMBELOW]]}...}
  ; " ;]
[PROPERTY LEF_CDN_RECTONLY
  "RECTONLY [EXCEPTNONCOREPINS]
      [EXCEPTRIGHTWAYWIDTH maxWidth]
      [PARTIALTRACKS]
      ;" ;]
[PROPERTY LEF_CDN_REGION
  "REGION regionLayerName BASEDLAYER routingLayerName
  ; " ;]
[PROPERTY LEF_CDN_RIGHTWAYONGRIDONLY
  "RIGHTWAYONGRIDONLY [CHECKMASK]
      [EXCEPTWIDTH exceptMinWidth]
      ; " ;]
[PROPERTY LEF_CDN_SPACING
  "SPACING eolSpace EOLPERPENDICULAR eolWidth perWidth ;" ;] 
[PROPERTY LEF_CDN_SPACING
  "SPACING minSpacing AREA maxArea ;" ;] 
[PROPERTY LEF_CDN_SPACING
  "SPACING minSpacing LAYER trimLayer [TRIMMASK trimMaskNum]
       [MASK maskNum] EXCEPTOVERLAP overlapLength
       [TRIMENDSPACING trimEndSpacing [PRL prl]]
   ;" ;]
[PROPERTY LEF_CDN_SPACING
  "SPACING minSpacing SAMEMASK ;" ;] 
[PROPERTY LEF_CDN_SPACING
  "SPACING minSpacing [WRONGDIRECTION [NONEOL eolWidth]
       [PRL prl]]
  ;" ;] 
[PROPERTY LEF_CDN_SPACING
  "SPACING minSpacing NOTCHLENGTH minNotchLength
     [EXCEPTWITHIN lowExcludeSpacing highExcludeSpacing]
     [WITHIN within SPANLENGTH sideOfNotchSpanLength
     |{WIDTH | CONCAVEENDS} sideOfNotchWidth
     |NOTCHWIDTH notchwidth]
  ;" ;]
[PROPERTY LEF_CDN_SPACING
  "SPACING minSpacing NOTCHSPAN span NOTCHSPACING notchSpacing
    EXCEPTNOTCHLENGTH notchLength
  ; " ;
[PROPERTY LEF_CDN_SPACING 
  "SPACING eolSpace
    ENDOFLINE eolWidth 
    {[EXACTWIDTH]
    [WRONGDIRSPACING wrongDirSpace] 
    {[OPPOSITEWIDTH oppositeWidth]
     WITHIN eolWithin [wrongDirWithin] 
     [SAMEMASK] 
     [EXCEPTEXACTWIDTH exactWidth otherWidth]
     [FILLCONCAVECORNER fillTriangle]
     [WITHCUT [CUTCLASS cutClass] [ABOVE] withCutSpace 
       [ENCLOSUREEND enclosureEndWidth
          [WITHIN enclosureEndWithin]]] 
     [ENDPRLSPACING endPrlSpace PRL endPrl]
     [ENDTOEND endToEndSpace [oneCutSpace twoCutSpace]
       [EXTENSION extension [wrongDirExtension]]
       [OTHERENDWIDTH otherEndWidth]]
     [MAXLENGTH maxLength | MINLENGTH minLength [TWOSIDES]]
     [EQUALRECTWIDTH]
     [PARALLELEDGE [SUBTRACTEOLWIDTH] parSpace 
        WITHIN parWithin [PRL prl]
        [MINLENGTH minLength] [TWOEDGES] 
        [SAMEMETAL] [NONEOLCORNERONLY]
        [PARALLELSAMEMASK]]
     [ENCLOSECUT [BELOW | ABOVE] encloseDist 
         CUTSPACING cutToMetalSpace [ALLCUTS]]
    | TOCONCAVECORNER [MINLENGTH minLength]
        [MINADJACENTLENGTH 
           {minAdjLength | minAdjLength1 minAdjLength2}]
    | TONOTCHLENGTH notchLength}
  ;..." ;]
[PROPERTY LEF_CDN_SPACING
  "SPACING {spacing | minSpacing maxSpacing }
     CONVEXCORNERS EXTENSION sideExt orthogonalExt
     [ SAMESIDE extension
     | SINGLE edgeForwardExt cornerForwardExt cornerBackwardExt 
           SPANLENGTH spanLength OPPOSITEWIDTH oppWidth
           OPPOSITEEXTENSION oppSideExt 
               oppForwardExt1 oppForwardExt2 
     | MIDDLEWIRES {0 | 1 | 2} [INCLUDEPARTIALOVERALP] 
           [BACKWARDWIRE sideExt backwardExt]
           [REVERSE
               [EXCEPTWRONGDIRWIRE edgeExt wrongDirEdgeExt]
               [EXCEPTCONVEXCORNER edgeBackwardExt 
                   edgeForwardExt wrongDirEdgeExt]]]
     ; " ;]
[PROPERTY LEF_CDN_SPACINGTABLE
  "SPACINGTABLE
     PARALLELRUNLENGTH [DIAGONAL] [WRONGDIRECTION] 
     [SAMEMASK]
     [EXCEPTEOL eolWidth]
     {length} ...
     {WIDTH width
          [EXCEPTWITHIN lowExcludeSpacing highExcludeSpacing]
            {spacing}...} ... ;
     [SPACINGTABLE 
          INFLUENCE {WIDTH width WITHIN distance SPACING spacing} ... ;]
  ;" ;]
[PROPERTY LEF_CDN_SPACINGTABLE
  "SPACINGTABLE JOGTOJOGSPACING jogToJogSpacing
      JOGWIDTH jogWidth SHORTJOGSPACING shortJogSpacing
       {WIDTH width PARALLEL parLength WITHIN parWithin
           [EXCEPTWITHIN lowExcludeSpacing highExcludeSpacing]
            LONGJOGSPACING longJogSpacing
            [SHORTJOGSPACING widthShortJogSpacing]}
  ];" ;
[PROPERTY LEF_CDN_SPACINGTABLE
  "SPACINGTABLE 
     DIRECTIONALSPANLENGTH [WRONGDIRECTION] 
     [SAMEMASK]
     [EXCEPTJOGLENGTH length [EDGELENGTH] [INCLUDELSHAPE]]
     [EXCEPTEOL eolWidth]
     [EXACTSPANLENGTHSPACING spanLength1 TO spanLength2 
         [PRL prl] {exactSpacing}...]...
     PRL {prl} ...
     {SPANLENGTH spanLength 
         [EXACTSPACING exactSpacing
         | SPACINGTOMINSPAN spacingToMinSpan] 
         [EXACTSELFSPACING exactSelfSpacing]
         [NOEXCEPTEOL|EOLSPACING eolspacing] {spacing}...}... 
  ]; " ;
[PROPERTY LEF_CDN_SPACINGTABLE
  "SPACINGTABLE 
     TWOWIDTHS [WRONGDIRECTION] 
       [SAMEMASK | MASK maskNum] 
       [EXCEPTEOL eolWidth]
       [FILLCONCAVECORNER fillTriangle]
       {WIDTH width [PRL runLength]{spacing} ...} ... 
  ]; " ;
[PROPERTY LEF_CDN_SPANLENGTHENCLOSURESPACING
  "SPANLENGTHENCLOSURESPACING spacing
       SPANLENGTH spanLength MINLENGTH minLength
       {FROMABOVE|FROMBELOW} ENCLOSURE enclosure
       PRL prl 
       ; " ;]
[PROPERTY LEF_CDN_SPANLENGTHTABLE
  "SPANLENGTHTABLE {spanLength}... [MASK maskNum][WRONGDIRECTION]
     [ORTHOGONAL length] 
     [EXCEPTOTHERSPAN otherSpanlength
     | {OTHERSPAN otherSpanLength 
           [MINSPANLENGTH minSpanLength}...]  
     ; " ;]
[PROPERTY LEF_CDN_TWOWIRESFORBIDDENSPACING 
  "TWOWIRESFORBIDDENSPACING [SAMEMASK | MASK maskNum] 
       {minSpacing maxSpacing}...
       [HORIZONTAL|VERTICAL]
       [IGNOREMIDDLE]
       { MINSPANLENGTH minSpanLength [EXACTSPANLENGTH] 
         MAXSPANLENGTH maxSpanLength [EXACTSPANLENGTH]
        |FIRSTSPANLENGTH spanLength1 spanLength2 
            [OTHERSPANLENGTH otherSpanLength1]
         SECONDSPANLENGTH spanLength3 spanLength4}
            [OTHERSPANLENGTH otherSpanLength2]
        |OFFGRIDONLY minWidth1 maxWidth1 [minWidth2 maxWidth2] }
       PRL prl
       ; " ;]
[PROPERTY LEF_CDN_TYPE
  "TYPE {POLYROUTING | MIMCAP | HIGHR
       | TSVMETAL | PADMETAL | STACKEDMIMCAP }
       ;" ;]
[PROPERTY LEF_CDN_VOLTAGESPACING 
  "VOLTAGESPACING [TOCUT [ABOVE | BELOW]]
       {voltage spacing} ...
       ;..." ;]
[PROPERTY LEF_CDN_WIDTHTABLE 
  "WIDTHTABLE {width}...[WRONGDIRECTION] [ORTHOGONAL]
     ;" ;] 
[PROPERTY LEF_CDN_WIDTH 
  "WIDTH minWidth [WRONGDIRECTION]
     ;" ;] 
[PROPERTY LEF_CDN_WRONGDIREOLKEEPOUT
  "WRONGDIREOLKEEPOUT edgeExt wrongDirEdgeExt ENDOFLINE eolWidth
       EDGELENGTH minLength maxLength
       ;" ;] 
END layerName 

Defines routing layers in the design. Each layer is defined by assigning it a name and design rules. You must define routing 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 wire on this layer of a certain width can handle at a certain frequency in units of milliamps per micron (mA/μm).

Note: The true meaning of current density would have units of milliamps per square micron (mA/μm2); however, the thickness of the metal layer is implicitly included, so the units in this table are milliamps per micron, where only the wire width varies.

The ACCURRENTDENSITY syntax is defined as follows:

{PEAK | AVERAGE | RMS} 
{ value 
| FREQUENCY freq_1 freq_2 ... ;
[WIDTH width_1 width_2 ... ; ]
TABLEENTRIES    v_freq_1_width_1 v_freq_1_width_2 ...
v_freq_2_width_1 v_freq_2_width_2 ...
...
} ;

PEAK

Specifies the peak current limit of the layer.

AVERAGE

Specifies the average current limit of the layer.

RMS

Specifies the root mean square current limit of the layer.

value

Specifies a maximum current for the layer in mA/μm.
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

WIDTH

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

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

TABLEENTRIES

Defines the maximum current for each of the frequency and width pairs specified in the FREQUENCY and WIDTH statements, in mA/μm.

The pairings define each width for the first frequency in the FREQUENCY statement, then the widths for the second frequency, and so on.

The final value for a given wire width and frequency is computed from a linear interpolation of the table values. the widths are not adjusted for any process shrinkage, so the should be correct for the “drawn width”.
Type: Float

Example 5-1 AC Current Density Statements

Most LEF files do not include PEAK or AVERAGE limits. The PEAK limits are not a practical problem for digital signal routing. The AVERAGE limits are only needed for DC limits and not AC currents.

Most technologies do not have frequency dependency for RMS limits, but the LEF syntax requires a frequency value, so in practice the frequency value is a single value of 1, as shown in the example below. In this case the RMS limit does not vary with the frequency.

The following examples define AC current density tables:

The RMS current density at 0.7 μm is 9.0 + (7.5 - 9.0) x (0.8 - 0.7) / (0.8 - 0.4) = 8.625  mA/μm at frequency 300Mhz. Therefore, a 0.7 μm wide wire can carry 8.625 x 0.7 = 6.035 mA of RMS current.

The RMS current density at 0.7 μm is 7.5 + (6.8 - 7.5) x (0.8 - 0.7) / (0.8 - 0.4) = 7.325  mA/μm at frequency 600Mhz. Therefore, a 0.7 μm wide wire can carry 7.325 x 0.7 = 5.1275 mA of RMS current.

LAYER met1 
...
ACCURRENTDENSITY PEAK       #peak AC current limit for met1
FREQUENCY 100 400 ;         #2 freq values in MHz
WIDTH 
0.4 0.8 1.6 5.0 10.0 ;      #5 width values in microns
TABLEENTRIES
9.0 7.5 6.5 5.4 4.7          #mA/um for 5 widths and freq_1 (when the frequency                              #is 100 Mhz)
7.5 6.8 6.0 4.8 4.0 ;         #mA/um for 5 widths and freq_2 (when the frequency                              #is 400 Mhz)
END met1 ; 

The  PEAK current density at 0.7 μm for 100 Mhz is 9.0 + (7.5 - 9.0) x (0.8 - 0.7) / (0.8 - 0.4)  =  8.625  mA/μm, and at 0.7 μm for 400 Mhax is 7.5 + (6.8 - 7.5) x (0.8 - 0.7) / (0.8 - 0.4) = 7.325 mA/mm. Then interpolating between the frequencies at 300Mhz gives 8.625 + (7.325 - 8.625) x (400 - 300) / (400 - 100) = 8.192 mA/μm.

The RMS current density at 0.4 μm is 7.5 mA/μm. Therefore, a 0.4 μm wide wire can carry 7.5 x .4 = 3.0 μm of RMS current.

LAYER cut12
...
ACCURRENTDENSITY PEAK      #peak AC current limit for one cut
FREQUENCY 10 200 ;         #2 freq values in MHz
  CUTAREA 0.16 0.32 ;      #2 cut areas in um squared
TABLEENTRIES
0.5 0.4                    #mA/um squared for 2 cut areas at freq_1 (10 Mhz) 
0.4 0.35 ;                 #mA/um squared for 2 cut areas at freq_2 (200 Mhz)
ACCURRENTDENSITY AVERAGE   #average AC current limit for via cut12
10.0 ;                     #mA/um squared for any cut area at any frequency
ACCURRENTDENSITY RMS       #RMS AC current limit for via cut12
FREQUENCY 1 ;              #1 freq (required by syntax; not really used)
  CUTAREA 0.16 1.6 ;       #2 cut areas in um squared
TABLEENTRIES
10.0 9.0 ;                 #mA/um squared for 2 cut areas at any frequency
....
END cut12 ;

ANTENNAAREADIFFREDUCEPWL ( ( diffArea1 diffMetalFactor1 ) ( diffArea2 diffMetalFactor2 ) ...)

Indicates that the metal area is multiplied by a diffMetalReduceFactor that is computed from a piece-wise linear interpolation based on the diff_area attached to the metal. (See Example 4 in Appendix B, “Calculating and Fixing Process Antenna Violations.”) This means that the ratio is calculated as:

ratio = ( metalFactor x metal_area x diffMetalReduceFactor ) / gate_area

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 allowed. The diffMetalFactor values are floats with no units. The diffMetalFactor values are normally between 0.0 and 1.0. If no 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 B, “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 B, “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 metal area should subtract the diffusion area connected to it. This means that the ratio is calculated as:

ratio = ( metalFactor x metal_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 metal2 shape has a final ratio that is less than 0 because it connects to a diffusion shape, then the cumulative check for metal3 (or via2) connected to the metal2 shape adds in a cumulative value of 0 from the metal2 layer. (See Example 1 in Appendix B, “Calculating and Fixing Process Antenna Violations.”)
Type: Float
Default: 0.0

For more information on process antenna models, see Calculating a PAR, in Appendix B, “Calculating and Fixing Process Antenna Violations.”

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 B, “Calculating and Fixing Process Antenna Violations.” Type: Float

ANTENNACUMAREARATIO value

Specifies the cumulative antenna ratio, using the area of the wire that is not connected to the diffusion diode. For more information on process antenna calculation, see Appendix B, “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 and explicit ratio value or specify piece-wise linear format (PWL), in which case the cumulative ratio value 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 B, “Calculating and Fixing Process Antenna Violations.”

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

Specifies the cumulative antenna ratio, using the side wall area of the metal wire that is connected to the diffusion diode. You can supply and explicit ratio value or specify piece-wise linear format (PWL), in which case the cumulative ratio value 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 B, “Calculating and Fixing Process Antenna Violations.”

ANTENNACUMROUTINGPLUSCUT

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

Note: This rule does not affect ANTENNACUMSIDEAREARATIO and ANTENNACUMDIFFSIDEAREA models.

For more information on process antenna models, see Calculating a CAR, in Appendix B, “Calculating and Fixing Process Antenna Violations.”

ANTENNACUMSIDEAREARATIO value

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

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

Specifies the antenna ratio, using the area of the metal wire that is connected to the diffusion diode. You can supply and explicit ratio value or specify piece-wise linear format (PWL), in which case the ratio value 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 B, “Calculating and Fixing Process Antenna Violations.”

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

Specifies the antenna ratio, using the side wall area of the metal wire that is connected to the diffusion diode. You can supply and explicit ratio value or specify piece-wise linear format (PWL), in which case the ratio value 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 B, “Calculating and Fixing Process Antenna Violations.”

ANTENNAGATEPLUSDIFF plusDiffFactor

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

ratio = ( metalFactor x metal_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 the ANTENNAGATEPLUSDIFF rule is specified because a zero diffusion area already is accounted for by the ANTENNADIFF*RATIO statements. (See Example 3 in Routing Layer Process Antenna Model Examples in Appendix B, “Calculating and Fixing Process Antenna Violations.”)
Type: Float
Default: 0.0

For more information on process antenna models, see Calculating a PAR, in Appendix B, “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.

Example 5-2 Antenna Model Statement

The following example defines antenna information for oxide models on layer metal1.

LAYER metal1 
ANTENNAMODEL OXIDE1 ;          #OXIDE1 not required, but good practice
ANTENNACUMAREARATIO 5000 ;     #OXIDE1 values
ANTENNACUMDIFFAREARATIO 8000 ;
ANTENNAMODEL OXIDE2 ;          #OXIDE2 model starts here
ANTENNACUMAREARATIO 500 ;      #OXIDE2 values
ANTENNACUMDIFFAREARATIO 800 ;
ANTENNAMODEL OXIDE3 ;          
ANTENNACUMAREARATIO 300 ;
ANTENNACUMDIFFAREARATIO 600 ;
...
END metal1 

ANTENNASIDEAREAFACTOR value [DIFFUSEONLY]

Specifies the multiply factor for the antenna metal side wall 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 B, “Calculating and Fixing Process Antenna Violations.”

ANTENNASIDEAREARATIO value

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

AREA minArea

Specifies the minimum metal area required for polygons on the layer. All polygons must have an area that is greater than or equal to minArea, if no MINSIZE rule exists. If a MINSIZE rule exists, all polygons must meet either the MINSIZE or the AREA rule. For an example using these rules, see Example 5-7.
Type: Float, specified in microns squared

CAPACITANCE CPERSQDIST value

Specifies the capacitance for each square unit, in picofarads per square micron. This is used to model wire-to-ground capacitance.

CAPMULTIPLIER value

Specifies the multiplier for interconnect capacitance to account for increases in capacitance caused by nearby wires.
Default: 1
Type: Integer

DCCURRENTDENSITY

Specifies how much DC current a wire on this layer of a given width can handle in units of milliamps per micron (mA/μm).

The true meaning of current density would have units of milliamps per square micron (mA/μm2); however, the thickness of the metal layer is implicitly included, so the units in this table are milliamps per micron, where only the wire width varies.

The DCCURRENTDENSITY syntax is defined as follows:

AVERAGE { value | WIDTH width_1 width_2 ... ;
TABLEENTRIES value_1 value_2 ... } ;  

AVERAGE

Specifies the average current limit of the layer.

value

Specifies the current limit for the layer, in mA/μm.

WIDTH

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

TABLEENTRIES

Specifies the value of current density for each specified width, in mA/μm.

The final value for a given wire width is computed from a linear interpolation of the table values. The widths are not adjusted for any process shrinkage, so they should be correct for the “drawn width”.
Type: Float

Example 5-3 DC Current Density Statements

The following examples define DC current density tables:

LAYER met1 
...
DCCURRENTDENSITY AVERAGE    #avg. DC current limit for met1
50.0 ;                      #mA/um for any width

(or)

DCCURRENTDENSITY AVERAGE    #avg. DC current limit for met1
WIDTH
  0.4 0.8 1.6 5.0 20.0 ;      #5 width values in microns
TABLEENTRIES
7.5 6.8 6.0 4.8 4.0 ;       #mA/um for 5 widths
...
END met1 ;

The AVERAGE current density at 0.4 μm is 7.5 mA/μm. Therefore, a 0.4 μm wide wire can carry 7.5 x .4 = 3.0 mA of AVERAGE DC current.

LAYER cut12 
...
DCCURRENTDENSITY AVERAGE    #avg. DC current limit for via cut12
10.0 ;                      #mA/um squared for any cut area

(or)

DCCURRENTDENSITY AVERAGE    #avg. DC current limit for via cut12
  CUTAREA 0.16 0.32 ;        #2 cut areas in μm2
TABLEENTRIES
10.0 9.0 ;                  #mA/um squared for 2 cut areas
...
END cut12 ;

DENSITYCHECKSTEP stepValue

Specifies the stepping distance for metal density checks, in distance units.
Type: Float

DENSITYCHECKWINDOW windowLength windowWidth

Specifies the dimensions of the check window, in distance units.
Type: Float

DIAGMINEDGELENGTH diagLength

Specifies the minimum length for a diagonal edge. Any 45-degree diagonal edge must have a length that is greater than or equal to diagLength.
Type: Float, specified in microns

DIAGPITCH {distance | diag45Distance diag135Distance}

Specifies the 45-degree routing pitch for the layer. Pitch is used by the router to get the best routing density.
Default: None
Type: Float, specified in microns

distance

Specifies one pitch value that is used for both the 45-degree angle and 135-degree angle directions.

diag45Distance diag135Distance

Specifies the 45-degree angle pitch (the center-to-center space between 45-degree angle routes) and the 135-degree angle pitch.

DIAGSPACING diagSpacing

Specifies the minimum spacing allowed for a 45-degree angle shape.
Default: None
Type: Float, specified in microns

DIAGWIDTH diagWidth

Specifies the minimum width allowed for a 45-degree angle shape.
Default: None
Type: Float, specified in microns

DIRECTION {HORIZONTAL | VERTICAL | DIAG45 | DIAG135}

Specifies the preferred routing direction. Automatic routing tools attempt to route in the preferred direction on a layer. A typical case is to route horizontally on layers metal1 and metal3, and vertically on layer metal2.

HORIZONTAL

Routing parallel to the x axis is preferred.

VERTICAL

Routing parallel to the y axis is preferred.

DIAG45

Routing along a 45-degree angle is preferred.

DIAG135

Routing along a 135-degree angle is preferred.

Angles are measured counterclockwise from the positive x axis.

EDGECAPACITANCE value

Specifies a floating-point value of peripheral capacitance, in picofarads per micron. The place-and-route tool uses this value in two situations:

For the second calculation, the tool uses value only if you set layer thickness, or layer height, to 0. In this situation, the peripheral capacitance is used in the following formula:

segment capacitance = ( layer capacitance per square x segment width x segment length ) + ( peripheral capacitance x 2 ( segment width + segment length ))

FILLACTIVESPACING spacing

Specifies the spacing between metal fills and active geometries.
Type: Float

HEIGHT distance

Specifies the distance from the top of the ground plane to the bottom of the interconnect.
Type: Float

LAYER layerName

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

MANUFACTURINGGRID value

Defines the manufacturing grid for this layer. The vertices of every shape on this layer must be on the manufacturing grid or a DRC violation will occur. If not specified, the library MANUFACTURINGGRID value is used. value is a positive float number in units of microns.

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 only support values of 2 or 3.

MAXIMUMDENSITY maxDensity

Specifies the maximum metal density allowed for the layer, as a percentage. The minDensity and maxDensity values represent the metal density range within which all areas of the design must fall. The metal density must be greater than or equal to minDensity and less than or equal to maxDensity.
Type: Float
Value: Between 0.0 and 100.0

Example 5-4 Minimum and Maximum Density

The following example specifies a metal density range in which the minimum metal density must be greater than or equal to 20 percent and the maximum metal density must be less than or equal to 70 percent.

MINIMUMDENSITY 20.0 ;
MAXIMUMDENSITY 70.0 ;

MAXWIDTH width

Specifies the maximum wire width, in microns, allowed on the layer. Maximum wire width is defined as the smaller value of the width and height of the maximum enclosed rectangle. For example, MAXWIDTH 10.0 specifies that the width of every wire on the layer must be less than or equal to 10.0 μm.
Type: Float

MINENCLOSEDAREA area [WIDTH width]

Specifies the minimum area size limit for an empty area that is enclosed by metal (that is, a donut hole formed by the metal).

area

Specifies the minimum area size of the hole, in microns squared.
Type: Float

width

Applies the minimum area size limit only when a hole is created from a wire that has a width that is greater than width, in microns. If any of the wires that surround the donut hole are larger than this value, the rule applies.
Type: Float

Example 5-5 Min Enclosed Area Statement

The following MINENCLOSEDAREA example specifies that a hole area must be greater than or equal to 0.40 μm2.

LAYER m1
...
MINENCLOSEDAREA 0.40 ;

The following MINENCLOSEDAREA example specifies that a hole area must be greater than or equal to 0.30 μm2. However, if any of the wires enclosing the hole have a width that is greater than 0.15 μm, then the hole area must be greater than or equal to 0.40 μm2. If any of the wires enclosing the hole are larger than 0.50 μm, then the hole area must be greater than or equal to 0.80 μm2.

LAYER m1
...
MINENCLOSEDAREA 0.30 ;
MINENCLOSEDAREA 0.40 WIDTH 0.15 ;
MINENCLOSEDAREA 0.80 WIDTH 0.50 ;

MINIMUMCUT

Specifies the number of cuts a via must have when it is on a wide wire or pin whose width is greater than width. The MINIMUMCUT rule applies to all vias touching this particular metal layer. You can specify more than one MINIMUMCUT rule per layer. (See Example 5-6.)

The MINIMUMCUT syntax is defined as follows:

[MINIMUMCUT numCuts WIDTH width 
    [WITHIN cutDistance] 
  [FROMABOVE | FROMBELOW] 
  [LENGTH length WITHIN distance] 
;] ...

numCuts

Specifies the number of cuts a via must have when it is on a wire or pin whose width is greater than width.
Type: Integer

WIDTH width

Specifies the width of the wire or pin, in microns.
Type: Float

WITHIN cutDistance

Indicates that numCuts via cuts must be less than cutDistance from each other in order to be counted together to meet the minimum cut rule. (See Figure 5-2.)

FROMABOVE | FROMBELOW

Indicates whether the rule applies only to connections from above this layer or from below.
Default: The rule applies to connections from above and below.

LENGTH length WITHIN distance

  

Indicates that the rule applies for thin wires directly connected to wide wires, if the wide wire has a width that is greater than width and a length that is greater than length, and the vias on the thin wire are less than distance from the wide wire. (See Figure 5-1). The length value must be greater than or equal to the width value.

If LENGTH and WITHIN are present, this rule only checks the thin wire connected to a wide wire, and does not check the wide wire itself. A separate MINIMUMCUT x WIDTH y ; statement without LENGTH and WITHIN is required for any wide wire minimum cut rule.
Type: Float, specified in microns

Example 5-6 Minimum Cut Rules

The following MINIMUMCUT definitions show different ways to specify a MINIMUMCUT rule.

MINIMUMDENSITY minDensity

Specifies the minimum metal density allowed for the layer, as a percentage. The minDensity and maxDensity values represent the metal density range within which all areas of the design must fall. The metal density must be greater than or equal to minDensity and less than or equal to maxDensity. For an example of this statement, see Example 5-4.
Type: Float
Value: Between 0.0 and 100.0

MINSIZE minWidth minLength [minWidth2 minLength2]

Specifies the minimum width and length of a rectangle that must be able to fit somewhere within each polygon on this layer (see Figure 5-3). All polygons must meet this MINSIZE rule, if no AREA rule is specified. If an AREA rule is specified, all polygons must meet either the MINSIZE or the AREA rule.

You can specify multiple rectangles by specifying a list of minWidth2 and minLength2 values. If more than one rectangle is specified, the MINSIZE rule is satisfied if any of the rectangles can fit within the polygon.
Type: Float, specified in microns, for all values

Example 5-7 Minimum Size and Area Rules

Assume the following minimum size and area rules:

LAYER metal1
TYPE ROUTING ;
AREA 0.07 ;           #0.20 um x 0.35 um = 0.07 um^2
MINSIZE 0.14 0.30 ;   #0.14 um x 0.30 um = 0.042 um^2
....

Figure 5-3 illustrates how these rules behave when one or both of the rules are present in the LAYER statement:

Figure 5-3 Minimum Size and Area Rules

The following statement defines a MINSIZE rule that specifies that every polygon must have a minimum area of 0.07 μm2, or that a rectangle of 0.14 x 0.30 μm must be able to fit within the polygon, or that a rectangle of 0.16 x 0.26 μm must be able to fit within the polygon:

LAYER metal1 
TYPE ROUTING ;
AREA 0.07 ;                     #0.20 x 0.35 um = 0.07 um^2
MINSIZE 0.14 0.30 0.16 0.26 ;  #0.14 x 0.30 um = 0.042 um^2
#0.16 x 0.26 um = 0.0416 um^2
...
END metal1

MINSTEP

Specifies the minimum step size, or shortest edge length, for a shape. The MINSTEP rule ensures that Optical Pattern Correction (OPC) can be performed during mask creation for the shape.

Note: A single layer should only have one type of MINSTEP rule. It should include either INSIDECORNER, OUTSIDECORNER, or STEP statements (with an optional LENGTHSUM value), or one LENGTHSUM statement, or one MAXEDGES statement.

For an illustration of the MINSTEP rules, see Figure 5-4. For an example, see Example 5-8.

The syntax for MINSTEP is as follows:

[MINSTEP minStepLength
[ [INSIDECORNER | OUTSIDECORNER | STEP] [LENGTHSUM maxLength] | [MAXEDGES maxEdges] ;]  

minStepLength

Specifies the minimum step size, or shortest edge length, for a shape. The edge of a shape must be greater than or equal to this value, or a violation occurs.
Type: Float, specified in microns

INSIDECORNER

Indicates that a violation occurs if two or more consecutive edges of an inside corner are less than minStepLength.

If LENGTHSUM is also defined, a violation only occurs if the total length of all consecutive edges (that are less than minStepLength) is greater than maxLength.

Shape b in Figure 5-4 shows an inside corner. It is considered an inside corner because the two edges >= minStepLength (shown with thick lines) that abut the consecutive short edges < minStepLength (shown with dashed lines) form an inside corner (or concave shape).
Default: OUTSIDECORNER

OUTSIDECORNER

Indicates that a violation occurs if two or more consecutive edges of an outside corner are less than minStepLength.

If LENGTHSUM is also defined, a violation only occurs if the total length of all consecutive edges (that are less than minStepLength) is greater than maxLength.

Shape a in Figure 5-4 shows an outside corner. It is considered an outside corner because the two edges >= minStepLength (shown with thick lines) that abut the consecutive short edges < minStepLength (shown with dashed lines) form an outside corner (or convex shape).

This is the default rule, if INSIDECORNER, OUTSIDECORNER, or STEP is not specified.

STEP

Indicates that a violation occurs if one or more consecutive edges of a step are less than minStepLength.

If LENGTHSUM is also defined, a violation only occurs if the total length of all consecutive edges (that are less than minStepLength) is greater than maxLength.

Shape f in Figure 5-4 shows a step. It is considered a step because the two edges >= minStepLength (shown with thick lines) that abut the consecutive short edges < minStepLength (shown with dashed lines) form a step instead of a corner.
Default: OUTSIDECORNER

LENGTHSUM maxLength

Specifies the maximum total length of consecutive short edges (edges that are less than minStepLength) that OPC can correct without causing new DRC violations.

If the total length of the edges is greater than maxLength, a violation occurs. No violation occurs if the total length is less than or equal to maxLength.

MAXEDGES maxEdges

Specifies that up to maxEdges consecutive edges that are less than minStepLength in length are allowed, but more than maxEdges in a row is a violation. Typically, most tools only allow a maxEdges value of 0, 1, or 2. A maxEdges value of 0 means that no edge can be less than minStepLength.
Type: Integer  

The maxEdges value of 1 will check the cases covered by OUTSIDECORNER and INSIDECORNER. However, there is no relationship between MAXEDGES and STEP.

Example 5-8 Minimum Step Rules

MINSTEP Rule Result
MINSTEP 0.05 ; 

OUTSIDECORNER is the default behavior. Therefore, shapes a and d are violations because their consecutive edges are less than 0.05 μm. Shapes b, c, e, and f are not outside corner checks.

MINSTEP 0.04 ; 

OUTSIDECORNER is the default behavior. Therefore, shapes a and d are checked and are legal because their consecutive edges are greater than or equal to 0.04 μm.

MINSTEP 0.05 LENGTHSUM 0.08 ; 

Shape a is legal because its consecutive edges are less than 0.05 μm, and the total length of the edges is less than or equal to 0.08 μm. Shape d is a violation because even though its consecutive edges are less than 0.05 μm, the total length of the edges is greater than 0.08 μm.

MINSTEP 0.05 LENGTHSUM 0.16 ;

Shapes a and d are legal because the total length of their consecutive edges is less than or equal to 0.16 μm.

MINSTEP 0.05 INSIDECORNER  ;

Shapes b and e are violations because their consecutive edges are less than 0.05 μm. Shapes a, c, d, and f are not inside corner checks.

MINSTEP 0.05 INSIDECORNER 
  LENGTHSUM 0.15 ;

Shape b is legal because its consecutive edges are less than 0.05 μm, and the total length of the edges is less than or equal to 0.15 μm. Shape e is a violation because even though its consecutive edges are less than 0.05 μm, the total length of the edges is greater than 0.15 μm.

MINSTEP 0.05 STEP ;

Shapes c and f are violations because their consecutive edges are less than 0.05 μm. Shapes a, b, d, and e are not step checks.

MINSTEP 0.05 STEP LENGTHSUM 0.08 ;

Shape c is legal because its consecutive edges are less than 0.05 μm, and the total length of the edges is less than or equal to 0.08 μm. Shape f is a violation because even though its consecutive edges are less than 0.05 μm, the total length of the edges is greater than 0.08 μm.

MINSTEP 0.04 STEP ;

Shapes c and f are legal because their consecutive edges are greater than or equal to 0.04 μm.

Figure 5-4

MINWIDTH width

Specifies the minimum legal object width on the routing layer. For example, MINWIDTH 0.15 specifies that the width of every object must be greater than or equal to 0.15 μm. This value is used for verification purposes, and does not affect the routing width. The WIDTH statement defines the default routing width on the layer.
Default: The value of the WIDTH statement
Type: Float, specified in microns

OFFSET {distance | xDistance yDistance}

Specifies the offset for the routing grid from the design origin for the layer. This value is used to align routing tracks with standard cell boundaries, which helps routers get good on-grid access to the cell pin shapes. For best routing results, most standard cells have a 1/2 pitch offset between the MACRO SIZE boundary and the center of cell pins that should be aligned with the routing grid. Normally, it is best to not set the OFFSET value, so the software can analyze the library to determine the best offset values to use, but in some cases it is necessary to force a specific offset.

Generally, it is best for all of the horizontal layers to have the same offset and all of the vertical layers to have the same offset, so that routing grids on different layers align with each other. Higher layers can have a larger pitch, but for best results, they should still align with a lower layer routing grid every few tracks to make stacked-vias more efficient.

Default: The software is allowed to determine its own offset values for preferred and non-preferred routing tracks.
Type: Float, specified in microns  

distance

Specifies the offset value that is used for the preferred direction routing tracks.

xDistance yDistance

Specifies the x offset for vertical routing tracks, and the y offset for horizontal routing tracks.

PITCH {distance | xDistance yDistance}

Specifies the required routing pitch for the layer. Pitch is used to generate the routing grid (the DEF TRACKS). For more information, see “Routing Pitch”.
Type: Float, specified in microns

distance

Specifies one pitch value that is used for both the x and y pitch.

xDistance yDistance

Specifies the x pitch (the space between each vertical routing track), and the y pitch (the space between each horizontal routing track).

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.

PROTRUSIONWIDTH width1 LENGTH length WIDTH width2

Specifies that the width of a protrusion must be greater than or equal to width1 if it is shorter than length, and it connects to a wire that has a width greater than or equal to width2 (see Figure 5-6). Length is determined by the shortest possible path among all of the protrusion wires with width smaller width1, and is measured by the shortest outside edges of the wires.
Type: Float, specified in microns

Example 5-9 Protrusion

The following example specifies that a protrusion must have a width that is greater than or equal to 0.28 μm, if the length of the protrusion is less than 0.60 μm and the wire it connects to has a width that is greater than or equal to 1.20 μm.

LAYER m1
...
PROTRUSIONWIDTH 0.28 LENGTH 0.60 WIDTH 1.20 ;
...

Figure 5-6

If the given value of LENGTH in PROTRUSIONWIDTH is zero, then the length of the protrusion wire is irrelevant. In this case, the width of the protrusion wire should always be checked independent of the length of the wire. The following example illustrates this rule:

PROTRUSIONWIDTH 0.05 LENGTH 0 WIDTH 0.11 ; " ;

RESISTANCE RPERSQ value

Specifies the resistance for a square of wire, in ohms per square. The resistance of a wire can be defined as:

RPERSQU x wire length/wire width

SHRINKAGE distance

Specifies the value to account for shrinkage of interconnect wiring due to the etching process. Actual wire widths are determined by subtracting this constant value.
Type: Float

SPACING

Specifies the spacing rules to use for wiring on the layer. You can specify more than one spacing rule for a layer. See “Using Spacing Rules”.

The syntax for describing spacing rules is defined as follows:

[SPACING minSpacing 
  [ RANGE minWidth maxWidth 
[ INFLUENCE influenceLength [RANGE stubMinWidth stubMaxWidth] | RANGE minWidth maxWidth] | ENDOFLINE eolWidth WITHIN eolWithin
[PARALLELEDGE parSpace WITHIN parWithin [TWOEDGES]] | SAMENET [PGONLY] | NOTCHLENGTH minNotchLength | ENDOFNOTCHWIDTH endOfNotchWidth NOTCHSPACING minNotchSpacing NOTCHLENGTH minNotchLength ]
;] ...

SPACING minSpacing

Specifies the default minimum spacing, in microns, allowed between two geometries on different nets.
Type: Float

RANGE minWidth maxWidth

Indicates that the minimum spacing rule applies to objects on the layer with widths in the indicated RANGE (that is, widths that are greater than or equal to minWidth and less than or equal to maxWidth). If you do not specify a range, the rule applies to all objects.
Type: Float

If you specify multiple RANGE rules, the range values should not overlap.

INFLUENCE influenceLength [RANGE stubMinWidth stubMaxWidth]

Indicates that any length of the stub wire that is less than or equal to influenceLength from the wide wire inherits the wide wire spacing.
Type: Float

The influence rule applies to stub wires on the layer with widths in the indicated RANGE (that is, widths that are greater than or equal to stubMinWidth and less than or equal to stubMaxWidth). If you do not specify a range, the rule applies to all stub wires.
Type: Float

Specifying the INFLUENCE keyword denotes that the statement only checks the influence rule, and does not check normal spacing. You must also specify a separate SPACING statement for normal spacing checks.

RANGE minWidth maxWidth

Specifies an optional second width range. The spacing rule applies if the widths of both objects fall in the ranges defined (each object in a different range). For an object’s width to fall in a range, it must be greater than or equal to minWidth and less than or equal to maxWidth.
Type: Float

If you specify multiple RANGE rules, the range values should not overlap.

ENDOFLINE eolWidth WITHIN eolWithin

Indicates that an edge that is shorter than eolWidth, noted as end-of-line (EOL from now on) edge requires spacing greater than or equal to eolSpace beyond the EOL anywhere within (that is, less than) eolWithin distance (see Figure 5-7).

Typically, eolSpace is slightly larger than the minimum allowed spacing on the layer. The eolWithin value must be less than the minimum allowed spacing.

Figure 5-7

PARALLELEDGE parSpace WITHIN parWithin
[TWOEDGES]

Indicates the EOL rule applies only if there is a parallel edge that is less than parSpace away, and is also less than parWithin from the EOL and eolWithin beyond the EOL (see Figure 5-8).

Figure 5-8

If TWOEDGES is specified, the EOL rule applies only if there are two parallel edges that meet the PARALLELEDGE parSpace, eolWithin, and parWithin parameters (see Figure 5-9).

Figure 5-9

SAMENET [PGONLY]

Indicates that the minSpacing value only applies to same-net metal. If PGONLY also is specified, the minSpacing value only applies to same-net metal that is a power or ground net.

This rule typically is used when a technology has wider spacing for wider width wires; however, it still allows minimum spacing for same-net wires, even if they are wide. (See Example 5-11.)

NOTCHLENGTH minNotchLength

Indicates that any notch with a notch length less than minNotchLength must have notch spacing greater than or equal to minSpacing. (See illustration a in Figure 5-14.)

The value you specify for minSpacing should be only slightly larger than the normal minimum spacing rule (typically, between 1x and 1.5x minimum spacing).
Type: Float, specified in microns

If the value of the specified notch length is zero, then the length of the notch is irrevelant. In other words, the spacing of a notch should always be checked independent of its length.

You can specify only one NOTCHLENGTH rule per layer.

ENDOFNOTCHWIDTH endOfNotchWidth NOTCHSPACING minNotchSpacing NOTCHLENGTH minNotchLength

Indicates that the notch metal at the bottom end of a U-shaped notch requires spacing that is greater than or equal to minSpacing, if the notch has a width that is less than endOfNotchWidth, notch spacing that is less than or equal to minNotchSpacing, and notch length that is greater than or equal to minNotchLength. The spacing is required for the extent of the notch.

The values you specify for notchSpacing and minSpacing should be only slightly larger than the normal minimum spacing rule (typically between 1x and 1.5x minimum spacing). The value you specify for endOfNotchWidth should be only slightly larger than the minimum width rule (typically, between 1x and 1.5x minimum width).
Type: Float, specified in microns (for all values)

You can specify only one ENDOFNOTCHWIDTH rule per layer.

Using Spacing Rules

Spacing rules apply to pin-to-wire, obstruction-to-wire, via-to-wire, and wire-to-wire spacing. These requirements specify the default minimum spacing allowed between two geometries on different nets.

When defined with a RANGE argument, a spacing value applies to all objects with widths within a specified range. That is, the rule applies to objects whose widths are greater than or equal to the specified minimum width and less than or equal to the specified maximum width.

If you specify multiple RANGE arguments, the RANGE values should not overlap.

In the following example, the default minimum allowed spacing between two adjacent objects is 0.3 μm. However, for objects between 0.5 and 1.0 μm in width, the spacing is 0.4 μm. For objects between 1.01 and 2.0 μm in width, the spacing is 0.5 μm.

SPACING 0.3 ;
SPACING 0.4 RANGE 0.5  1.0 ;
SPACING 0.5 RANGE 1.01 2.0 ; #The RANGE begins at 1.01 and not 1.0 because 
                             #RANGE values should not overlap.

Influence spacing rules are used to support the inheritance of wide wire spacing by nets connected to the wide wires. For example, a larger spacing is needed for stub wires attached to large objects like pre-routed power wires. A piece of metal connecting to a wider wire will inherit spacing rules for a user-defined distance from the wider wire.

In Figure 5-10, a minimum space of N is required between two metal lines when at least one metal line has a width that is >= Y. This spacing must be maintained for any small piece of metal (<Y) that is connected to the wide metal within X range of the wide metal. Outside of this range, normal spacing rules (Z) apply.

Figure 5-10

In the following example, the 0.5 μm spacing applies for the first 1.0 μm of the stub sticking out from the large object. This rule only applies to the stub wire; the previous rule must be included for the wide wire spacing. The SPACING 0.5 RANGE 2.01 2000.0 statement is required to get extra spacing for the wide-wire itself.

SPACING 0.5 RANGE 2.01 2000.0 ; 
SPACING 0.28 ;              #Minimum spacing is >= 0.28 um.
SPACING 0.5 RANGE 2.01 2000.0 ;    #wide-wire >= 2.01 um wide requires 0.5um spacing
SPACING 0.5 RANGE 2.01 2000.0 INFLUENCE 1.000 ;  
                            #Stub wires <= 1.0 um from wide wires >= 2.01 
                            #require 0.5 um spacing.

Some processes only need the INFLUENCE rule for certain widths of the stub wire. In the following example, the 0.5 μm spacing is required only for stub wires between 0.5 and 1.0 μm in width.

SPACING 0.28 ;         #Minimum spacing is >= 0.28 um.
SPACING 0.5 RANGE 2.01 2000.0 ;    #wide-wire >= 2.01 um wide requires 0.5um spacing
SPACING 0.5 RANGE 2.01 2000.0 INFLUENCE 1.00 RANGE 0.5 1.0 ;
                       #Stub wires with 0.5 <= width <= 1.0, and <= 1.0 um from
                       #wide wide wires >= 2.01 require 0.5 um spacing.

Example 5-10 EOL Spacing Rules

Example 5-11 Same Net Spacing Rule

If you include the following routing layer rules in your LEF file, same-net power or ground nets can use 1.0 μm spacing, even if they are 2 μm to 5 μm wide, as shown in Figure 5-13:

LAYER M1 
TYPE ROUTING ;
SPACING 1.0 ;                 #min spacing is 1.0
SPACING 1.5 RANGE 2.0 5.0 ;   #need 1.5 spacing for 2 to 5 μm wide wires
SPACING 1.0 SAMENET PGONLY ;

Figure 5-13

Example 5-12 Notch Length Spacing Rule

The figure below illustrates the following routing layer rules:

SPACING 0.10 ;
SPACING 0.12 NOTCHLENGTH 0.15 ;

Figure 5-14 Notch Length Rule Definitions

Example 5-13 End Of Notch Width Spacing Rule

If you include the following routing layer rules in your LEF file, the notch metal at the bottom end of a U-shaped notch must have spacing that is greater than or equal to 0.14 μm, if the notch metal has a width that is less than 0.15 μm, notch spacing that is less than or equal to 0.16 μm, and notch length that is greater than or equal to 0.08 μm. See Figure 5-15 for different layout examples for these rules.

SPACING 0.10 ;       #default spacing
SPACING 0.14 ENDOFNOTCHWIDTH 0.15 NOTCHSPACING 0.16 NOTCHLENGTH 0.08 ;

Figure 5-15 End Of Notch Width Rule Definitions

SPACINGTABLE

Specifies the spacing tables to use for wiring on the layer. You can specify only one parallel run length and one influence spacing table for a layer. For information on and examples of using spacing tables, see “Using Spacing Tables”.

The syntax for describing spacing tables is defined as follows:

[SPACINGTABLE  
   PARALLELRUNLENGTH {length} ... 
     {WIDTH width {spacing} ...}... ; 
     [SPACINGTABLE  
       INFLUENCE {WIDTH width WITHIN distance 
         SPACING spacing} ... ;] 
 | TWOWIDTHS {WIDTH width [PRL runLength] 
         {spacing} ...} ... ; 
;] 

PARALLELRUNLENGTH {length} ...
{WIDTH
width {spacing} ...}

  

Specifies the maximum parallel run length between two objects, in microns. If the maximum width of the two objects is greater than width, and the parallel run length is greater than length, then the spacing between the objects must be greater than or equal to spacing. The first spacing value is the minimum spacing for a given width, even if the PRL value is not met.

You must specify length, width, and spacing values in increasing order.
Type: Float, specified in microns (for all values)

TWOWIDTHS {WIDTH width [PRL runLength] {spacing} ...}

Creates a table in which the spacing between two objects depends on the widths of both objects (instead of just the widest width). Optionally, it also can depend on the parallel run length between the two objects (PRL). For more information, see "Two-Width Spacing Tables."

The first width value should be 0 without an accompanied run length definition.

The PRL values in SPACINGTABLE TWOWIDTHS statement can be negative, which should be interpreted in the same way as in SPACINGTABLE PARLLELRUNLENGTH rules.
Type: Float, specified in microns (for all values)

INFLUENCE {WIDTH width WITHIN distance SPACING spacing ...}

Creates a table that enforces wide wire spacing rules between nearby perpendicular wires. If an object has a width that is greater than width, and is located less than distance from two perpendicular wires, then the spacing between the perpendicular wires must be greater than or equal to spacing.

You must specify width values in increasing order.
Type: Float, specified in microns (for all values)

You can only specify an INFLUENCE table if you specify a PARALLELRUNLENGTH table first.

Specifying SPACING Statements with SPACINGTABLE

You can specify some of the SPACING statements with the SPACINGTABLE statements. For example, the following SPACING statements can be specified with SPACINGTABLE:

SPACING x SAMENET ___ ;
SPACING x ENDOFLINE ___ ;
SPACING x NOTCHLENGTH ___ ;
SPACING x ENDOFNOTCHWIDTH ___ ;

These SPACING checks are orthogonal to the SPACINGTABLE checks, except SAMENET spacing will override SPACINGTABLE for same-net objects.

However, you cannot specify some SPACING statements (as given below) with SPACINGTABLE as these would generate semantic errors.

SPACING x ;
SPACING x RANGE ___ ;

Using Spacing Tables

Some processes have complex width and length threshold rules. Instead of creating multiple SPACING rules with different length thresholds and RANGE statements, you can define the information in a spacing table.

For example, for Figure 5-16, a typical 90nm DRC manual might have the following rules described:

Minimum spacing

0.15 μm spacing

Either width>0.25 μm and parallel length>0.50 μm

0.20 μm spacing

Either width>1.50 μm and parallel length>0.50 μm

0.50 μm spacing

Either width>3.00 μm and parallel length>3.00 μm

1.00 μm spacing

Either width>5.00 μm and parallel length>5.00 μm

2.00 μm spacing

Figure 5-16

These rules translate into the following SPACINGTABLE PARALLELRUNLENGTH statement:

LAYER metal1
...
SPACINGTABLE
 PARALLELRUNLENGTH 0.00 0.50 3.00 5.00        #lengths must be increasing
   WIDTH 0.00      0.15 0.15 0.15 0.15        #max width>0.00
   WIDTH 0.25      0.15 0.20 0.20 0.20        #max width>0.25
   WIDTH 1.50      0.15 0.50 0.50 0.50        #max width>1.50
   WIDTH 3.00      0.15 0.50 1.00 1.00        #max width>3.00
   WIDTH 5.00      0.15 0.50 1.00 2.00 ;      #max width>5.00
...
END metal1

Using the SPACINGTABLE PARALLELRUNLENGTH statement, the rules can be described in the following way:

  1. Find the maximum width of the two objects.
  2. Find the lowest table row where the maximum width is greater than the table-row width value. The first row is used even if the maximum width is less than and equal to the table-row width.
  3. Find the right-most table column where the parallel run length is greater than the table PRL value. The first column spacing value is used even if the object’s parallel run length is less than and equal to the table PRL value. The spacing value listed where the row and column intersect is the required spacing for that maximum width and parallel run length.

By definition, the width is the smaller dimension of the object (that is, the width of each object must be less than or equal to its length).

Influence Spacing Tables

Processes often require a second spacing table to enforce the wide wire spacing rules between nearby perpendicular wires, even if the wires are narrow. Figure 5-17 illustrates this situation. Use the following SPACINGTABLE INFLUENCE syntax to describe this table:

SPACINGTABLE INFLUENCE 
{WIDTH width WITHIN distance SPACING spacing} ... ;

If a wire has a width that is greater than width, and the distance between it and two other wires is less than distance, the other wires must be separated by spacing that is greater than or equal to spacing. Typically, the distance and spacing values are the same. Note that the distance halo extends horizontally, but not into the corners.

By definition, the width is the smaller dimension of the object (that is, the width is less than or equal to the length of the large wire).

Figure 5-17

The wide wire rules often match the larger width and spacing values in the SPACINGTABLE PARALLELRUNLENGTH values. The previously described rules translate into the following SPACINGTABLE INFLUENCE statement:

LAYER metal1
...
SPACINGTABLE INFLUENCE
  WIDTH 1.50 WITHIN 0.50 SPACING 0.50 #w>1.50, dist<0.50, needs sp>=0.50
  WIDTH 3.00 WITHIN 1.00 SPACING 1.00 #widths must be increasing
  WIDTH 5.00 WITHIN 2.00 SPACING 2.00 ;
...
END metal1

Two-Width Spacing Tables

You can create a table that enforces spacing rules that depends on the width of both objects instead of just the widest width, and optionally depends on the parallel run length between the two objects. You can use this table to replace existing SPACING ...RANGE...RANGE rules to make it easier to read, and to include parallel run length effects in one common table. Use the following SPACINGTABLE TWOWIDTHS syntax to describe this table:

SPACINGTABLE 
TWOWIDTHS {WIDTH width [PRL runLength] {spacing} ... } ... ;

To find the required spacing, a 2-dimensional table is used that implicitly has the same widths (and optional parallel run lengths) for the row and column headings. There must be exactly as many spacing values in each WIDTH row as there are WIDTH rows. The width and runLength values must be the same or increasing from top to bottom in the table. The spacing values must be the same or increasing from left to right, and from top to bottom in the table.

Given two objects with width1, width2, and a parallel overlap of runLength, you find the spacing using the following method:

  1. Find the last row where both width1 is greater than the table row width, and runLength is greater than the table row run length. If no table row run length exists, the runLength value is not checked for that row (only that width1 is greater than table row width is checked).
  2. Find the right-most column where both width2 is greater than table column width and runLength is greater than table column run length. If no table column run length exists, the runLength value is not checked for that column (only that width2 is greater than table column width is checked).
  3. The intersection of the matching row and column gives the required spacing.

For example, assume a DRC manual has the following rules described:

Minimum spacing

0.15 μm spacing

Either width>0.25 μm and parallel length>0.0 μm

0.20 μm spacing

Both width>0.25 μm and parallel length>0.0 μm

0.25 μm spacing

Either width>1.50 μm and parallel length>1.50 μm

0.50 μm spacing

Both width>1.50 μm and parallel length>1.50 μm

0.60 μm spacing

Either width>3.00 μm and parallel length>3.00 μm

1.00 μm spacing

Both width>3.00 μm and parallel length>3.00 μm

1.20 μm spacing

The rules translate into the following SPACINGTABLE:

SPACINGTABLE  TWOWIDTHS 
#             width=     0.00  0.25  1.50  3.0  
#               prl=     none  0.00  1.50  3.0 
#                        ---------------------- 
WIDTH 0.00               0.15  0.20  0.50  1.00 
WIDTH 0.25 PRL 0.0       0.20  0.25  0.50  1.00 
WIDTH 1.50 PRL 1.50      0.50  0.50  0.60  1.00 
WIDTH 3.00 PRL 3.00      1.00  1.00  1.00  1.20 ;

Note that both width and parallel run length (if specified) must be exceeded to index into the row and column. Therefore, in this example:

If width1 = 0.25, width2 = 0.25, and prl = 0.0, then spacing = 0.15.

If width1 = 0.25, width2 = 0.26, and prl = 0.0, then spacing = 0.15.

If width1 = 0.25, width2 = 0.26, and prl = 0.1, then spacing = 0.20.

If width1 = 0.26, width2 = 0.26, and prl = 0.1, then spacing = 0.25.

THICKNESS distance

Specifies the thickness of the interconnect.
Type: Float

TYPE ROUTING

Identifies the layer as a routable layer.

WIDTH defaultWidth

Specifies the default routing width to use for all regular wiring on the layer.
Type: Float

WIREEXTENSION value

Specifies the distance by which wires are extended at vias. You must specify a value that is more than half of the routing width.
Default: Wires are extended half of the routing width
Type: Float

The WIREEXTENSION statement only extends wires and not vias. For 65nm and below, WIREEXTENSION is no longer recommended because it may generate some advance rule violations if wires and vias have different widths.

The following figure shows WIREEXTENSION with same and different wire and via widths:

Figure 5-18 Illustration of WIREEXTENSION

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

You can include routing 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 ROUTING 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.

In LEF 5.8, the prefix for these properties was LEF58_. However, as these rules are probably never going into native LEF syntax and are interpreted only by Cadence tools (other tools have their own DRC rules syntax independent from LEF), the prefix was changed to be independent of the version and CDN was added to indicate that they are normally used only by Cadence tools. To make the transition easier, any tool that reads and interprets these properties should allow either LEF58_ or LEF_CDN_ as the prefix when reading the properties. Tools that write out LEF should use LEF_CDN_ for LEF 6.0, and LEF58_ for LEF 5.8.

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

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

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

PROPERTYDEFINITIONS
   LAYER LEF_CDN_ANTENNADIFFGATEPWL STRING ;
   LAYER LEF_CDN_ANTENNADIFFONLYAREARATIO STRING ;
   LAYER LEF_CDN_ANTENNADIFFPROTECTORAREARATIO STRING ; 
   LAYER LEF_CDN_ANTENNAGATEPWL STRING ;
   LAYER LEF_CDN_ANTENNAGATEPLUSDIFF STRING ;
   LAYER LEF_CDN_AREA STRING ;
   LAYER LEF_CDN_BACKSIDE STRING ;
   LAYER LEF_CDN_BOUNDARYBLOCKAGE STRING ;
   LAYER LEF_CDN_BOUNDARYEOLBLOCKAGE STRING ;
   LAYER LEF_CDN_COREEOLBLOCKAGE STRING ;
   LAYER LEF_CDN_CORNEREOLKEEPOUT STRING ;
   LAYER LEF_CDN_CORNERFILLSPACING STRING ;
   LAYER LEF_CDN_CORNERSPACING STRING ;
   LAYER LEF_CDN_ENCLOSURESPACING STRING ;
   LAYER LEF_CDN_ENCLOSUREWITHEOL STRING ;
   LAYER LEF_CDN_EOLKEEPOUT STRING ;
   LAYER LEF_CDN_EOLTRACK STRING ; 
   LAYER LEF_CDN_EOLVIAKEEPOUT STRING ;
   LAYER LEF_CDN_EOLEXTENSIONSPACING STRING ;
   LAYER LEF_CDN_FILLTOFILLSPACING STRING ;
   LAYER LEF_CDN_FIVEWIRESEOLSPACING STRING ;
   LAYER LEF_CDN_FORBIDDENSPACING STRING ;
   LAYER LEF_CDN_GAP STRING ;
   LAYER LEF_CDN_JOINTCORNERSPACING STRING;
   LAYER LEF_CDN_LINEENDGAP STRING ;
   LAYER LEF_CDN_LITHOMACROHALO STRING ;
   LAYER LEF_CDN_MAXWIDTH STRING ;
   LAYER LEF_CDN_MINIMUMCUT STRING ;
   LAYER LEF_CDN_MINLENGTHPARALLEL STRING ; 
   LAYER LEF_CDN_MINSIZE STRING ;
   LAYER LEF_CDN_MINSTEP STRING ;
   LAYER LEF_CDN_OPPOSITEEOLSPACING STRING ;
   LAYER LEF_CDN_PINCONNECTBLOCKAGE STRING ;
   LAYER LEF_CDN_PITCH STRING ;
   LAYER LEF_CDN_PROTRUSIONWIDTH STRING;
   LAYER LEF_CDN_RECTONLY STRING;
   LAYER LEF_CDN_REGION STRING ;
   LAYER LEF_CDN_RIGHTWAYONGRIDONLY STRING ;
   LAYER LEF_CDN_SPACINGTABLE STRING ;
   LAYER LEF_CDN_SPANLENGTHENCLOSURESPACING STRING ;
   LAYER LEF_CDN_SPANLENGTHTABLE STRING ;
   LAYER LEF_CDN_SPACING STRING ;
   LAYER LEF_CDN_TWOWIRESFORBIDDENSPACING STRING ;
   LAYER LEF_CDN_TYPE STRING ;
   LAYER LEF_CDN_VOLTAGESPACING STRING ;
   LAYER LEF_CDN_WIDTH STRING ;
   LAYER LEF_CDN_WIDTHTABLE STRING ;
   LAYER LEF_CDN_WRNGDIREOLKEEPOUT STRING ;
END PROPERTYDEFINITIONS

Type Rule

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

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

TYPE ROUTING;
PROPERTY LEF_CDN_TYPE 
  “TYPE {POLYROUTING | MIMCAP | HIGHR 
         | TSVMETAL | PADMETAL | STACKEDMIMCAP }
         ;" ;

Where:

HIGHR

Specifies that the layer is a high resistance routing layer that is not used as a regular routing layer.

MIMCAP

Indicates that the layer is a mimcap layer. A mimcap layer is a metal layer that is not to be used as a routing layer.

PADMETAL

Specifies a pad metal layer that is used to connect the topmost routing layer or the bottom-most BACKSIDE routing layer to outside the die. The pad metal layer can either be on the top or at the BACKSIDE in the layer stack. This layer is not used for regular routing.

POLYROUTING

Indicates that the polysilicon layer should be considered as a routing layer. Polysilicon layers provide extra routing resources for designs with limited metal routing layers.

STACKEDMIMCAP

Specifies a special type of mimcap layer to which a cut shape above a STACKEDMIMCAP shape connects but, instead of stopping, continues to the next regular routing layer. The cut can pass through multiple STACKEDMIMCAP layers before it reaches the next regular routing layer. A MASTERSLICE TRIMMETAL layer shape can be used to cut holes in a STACKEDMIMCAP shape to allow the cut shape to pass through the shape without being connected to it. The STACKEDMIMCAP layer is not used for regular routing.

TSVMETAL

Specifies an intermediate layer on which a special Through Silicon Via (TSV) crossing multiple layers would first stop. A separate via is used to connect the TSVMETAL layer to the destined regular routing layer. This layer is not used for regular routing.

The POLYROUTING and MIMCAP keywords are mutually exclusive; you cannot specify them together.

AC Current Density Rule

The AC density rule can be used to specify how much AC current a wire on a layer of a certain width can handle at a certain frequency in units of milliamps per micron (mA/mm).

You can define a AC current density rule by using the following property definition:

PROPERTY LEF_CDN_ACCURRENTDENSITY
  "ACCURRENTDENSITY {PEAK | AVERAGE | RMS}
     [TEMPPWL temp_1 multi_1 temp_2 multi_2  ...]
     [HOURSPWL hours_1 multi_1 hours_2 multi_2  ...]
     ; " ;

All other keywords are the same as the existing LEF routing layer ACCURRENTDENSITY syntax.

Note that the property statement is a compliment to the original syntax, which must be specified first.

Where:

HOURSPWL hours_1 multi_1 hours_2 multi_2 ...

Specifies a multiplier table based on the hours of operation. When the operation hour is greater than or equal to a certain hour in the table, the corresponding multiplier is used to scale the current by multiplying the multiplier with linear interpolation in the current calculation.
Type: Float

TEMPPWL temp_1 multi_1 temp_2 multi_2 ...

Specifies a multiplier table based on the temperature in Celsius. When the operation temperature is >= certain temperature in the table, the corresponding multiplier is used to scale the current by multiplying the multiplier with linear interpolation in the current calculation.
Type: Float

AC Current Density Rule Examples

The following AC current density rule indicates that the RMS table entry values will be defined for 100C and 10000 hours since the corresponding multipliers are 1.0 for those values. At 80C and 15000 hours, the multiplier is 1.5 x 0.8 = 1.2.  Hence, the wires can carry 1.2x times the RMS table values.

PROPERTY LEF_CDN_ACCURRENTDENSITY
  "ACCURRENTDENSITY RMS 
     TEMPPWL 50 2.2 80 1.5 100 1.0 120 0.75 
     HOURSPWL 5000 1.8 10000 1.0 15000 0.8 ; " ;

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 LEF_CDN_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 LEF_CDN_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 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 LEF_CDN_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 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 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 define antenna gate PWL rule by using the following property definition:

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

Where:

ANTENNAGATEPWL

Defines the PWL table that is indexed by the real gate area, and returns an "effective gate-area" interpolated from the table.

(gateArea1 effectiveGateArea1) (gateArea2 effectiveGateArea2)

The effectiveGateArea is used rather than the real gate area in the PAR equation. If the PWL table is not defined, then the real gate area is used.

Type: Float, specified in units of square microns.

Antenna Gate Plus Diffusion Rule

The antenna gate plus diffusion rule can be used for representing protection provided by the diffusion area that is added to the gate-area value in the PAR equation on the given antenna model, which can be considered as “additional effective gate-area".

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

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

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

Where:

ANTENNAGATEPLUSDIFF

Indicates the antenna gate area plus diffusion area.

plusDiffFactor | PWL ((diffArea1 plusDiffProtect1) (diffArea1 plusDiffProtect2)   ...)

Indicates protection provided by the diffusion area that is added to the gate area value in the PAR equation, which can be considered as “additional effective gate-area". The PAR equation is as follows:

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

If plusDiffFactor value is specified, then:

plusDiffProtect =  plusDiffFactor * diffusion area

If the PWL table is defined, then:

plusDiffProtect = interpolated PWL value indexed by diffusion area.

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

If PAR is greater than metalGateDiffRatio (from ANTENNADIFFAREARATIO), then there will be a violation. This is checked even if the diffusion area is equal to 0 (that is, no diffusion is connected).

The diffArea and plusDiffProtect values are floats in units of square microns.

Antenna Gate Plus Diffusion Rule Examples

The following rule shows antenna gate plus diffusion rule for metal1:

metal_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 >= metal_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 metal 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 LEF_CDN_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 LEF_CDN_ANTENNAGATEPLUSDIFF OXIDE1
"ANTENNAGATEPLUSDIFF
 ( ( 0  10 ) ( 1.99 10 ) ( 2.0 50 ) ( 10000.0 50 ) ) ;" ;

Area Rule

In some cases, it is necessary to allow a smaller minimum area for "simple rectangles" and simple polygon shapes, but require a larger minimum area for complex polygons. This is done with multiple AREA statements.

You can define a minimum area rule that requires a larger area

  1. When all the edges of the polygon are short
    or
  2. If a minimum-sized rectangle cannot fit inside the polygon.

You can also combine the two into one statement, in which case the larger area is required if all the edges are short and a minimum-sized rectangle cannot fit inside the polygon.

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

PROPERTY LEF_CDN_AREA 
 "AREA minArea
[MASK maskNum]
[EXCEPTMINWIDTH minWidth]
| [EXCEPTEDGELENGTH {minEdgeLength maxEdgeLength | edgeLength}]
      [EXCEPTMINSIZE {minWidth minLength}...]
      [EXCEPTSTEP length1 length2]
| RECTWIDTH rectWidth
| EXCEPTRECTANGLE
| LAYER trimLayer OVERLAP {1 | 2}
]
;..." ;

Where:

All the other keywords are the same as the existing LEF routing layer AREA syntax.

EXCEPTMINWIDTH minWidth

Specifies that the rule does not apply if the width of a wire is greater than or equal to the minWidth.
Type: Float, specified in microns

EXCEPTEDGELENGTH minEdgeLength maxEdgeLength | edgeLength

The edgeLength specifies that the minimum area rule applies for a given polygon, except if at least one edge-length is greater than or equal to edgeLength.

If both minEdgeLength and maxEdgeLength are specified instead, the minimum area rule does not apply if the entire edge length is less than minEdgeLength or at least one edge length is greater than or equal to the maxEdgeLength. In other words, the minimum area rule only applies if at least one edge length is greater than or equal to the minEdgeLength and the edge length is less than the maxEdgeLength.

Type: Float, specified in microns

EXCEPTMINSIZE {minWidth minLength}...

Indicates the minArea rule applies for a given polygon except if a minimum-sized rectangle of dimensions minWdith minLength can fit inside the polygon.

Multiple width/length pairs are allowed. The minimum area rule does not apply, if multiple width/length pairs are specified, and if any one of the given min-sized rectangles fit inside a given polygon.
Type: Float, specified in microns (for both values)

EXCEPTRECTANGLE

Specifies that the minimum area rule only applies to non-rectangular objects. It is illegal to define AREA EXCEPTRECTANGLE by itself, and it should be complemented by a separate AREA statement without any exception clauses.

EXCEPTSTEP length1 length2

Specifies that the minimum area rule does not apply for a polygon having an edge with length greater than or equal to  length1 with an adjacent edge with length less than length2.
Type: Float, specified in microns

LAYER trimLayer OVERLAP {1 | 2}

Specifies that the area rule applies only when:

  • One line-end of a wire overlaps or touches with shapes in trimLayer, which must be a layer with TYPE TRIMMETAL, if OVERLAP is specified as 1.
  • Both line-ends of a wire overlap or touch with shapes in trimLayer, if OVERLAP is specified as 2.

MASK maskNum

Specifies which mask the area rule is applied on. The  maskNum must be a positive integer, and most applications only support values of 1, 2, or 3. If any one of the AREA statements uses MASK, all of the AREA statements must use MASK, and each mask must have at least one corresponding AREA statement.
Type:  Integer

RECTWIDTH rectWidth

Specifies the minimum area of a rectangle with width less than or equal to rectWidth to be greater than or equal to minArea. For a given rectangle, find the smallest rectWidth that is greater than or equal to the width of the rectangle. If such an AREA statement can be found, the corresponding area rule should only be checked for the rectangle. If no such statement can be found, the rest of the AREA statements will apply to the rectangle.
Type: Float, specified in microns

Area Rule Examples

Backside Rule

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

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

PROPERTY LEF_CDN_BACKSIDE 
“BACKSIDE ;” ; 

Where:

BACKSIDE

Indicates that the routing layer is a backside routing layer.

The POLYROUTING, MIMCAP (PROPERTY LEF_CDN_TYPE), and BACKSIDE keywords are mutually exclusive; you cannot specify them together.

Boundary Blockage Rule

A boundary blockage rule is used to specify line-end blockages. You can create a boundary blockage rule by using the following property definition:

PROPERTY LEF_CDN_BOUNDARYBLOCKAGE 
  “BOUNDARYBLOCKAGE size 
     ;” ;

Where:

BOUNDARYBLOCKAGE size

Specifies the routing blockages formed from the boundary edges in the preferred routing direction of the layer of a design. The blockage is formed from the boundary edges by going size inward to the core. These blockages prevent any wires overlapping with it.

Type: Float, specified in microns

Figure 5-22 Illustration of the Boundary Blockage Rule

Boundary EOL Blockage Rule

A Boundary EOL blockage rule is used to specify line-end blockages. You can create a boundary EOL blockage rule by using the following property definition:

PROPERTY LEF_CDN_BOUNDARYEOLBLOCKAGE 
  “BOUNDARYEOLBLOCKAGE size OFFSET offset
     [PARALLEL parLength WITHIN parWithin SPACING spacing]
     ;” ;

Where:

BOUNDARYEOLBLOCKAGE size OFFSET offset

Specifies line-end blockages formed near the boundary edges in the orthogonal direction of the preferred routing direction of the layer of a design. The blockage is formed by going inward from the boundary edge to the core by offset and having the size of size going further inward to the core. These blockages prevent the line-end of a wire from ending inside the blockages if it does not cross the edge closer to the boundary.

Type: Float, specified in microns

PARALLEL parLength WITHIN parWithin SPACING spacing

Specifies exemptions when an EOL in the blockage has certain neighboring wires. A search window is formed by extending parLength on EOL on both sides and parWithin in the beyond orthogonal direction. If there is a neighboring wire covering the entire length of the EOL, such as a wire on the same track, the violation is exempted. If there are neighboring wires on both sides, the violation is exempted if the spacing between the two neighboring wires is less than spacing. The neighboring wire(s) should be at least partially outside or touch the edge of the boundary EOL blockage on the side toward the design boundary edge that forms the blockage.

Type: Float, specified in microns

Figure 5-23 Illustration of the Boundary EOL Blockage Rule

Figure 5-24 Illustration of the Boundary EOL Blockage Rule with PARALLEL, WITHIN, and SPACING

Core EOL Blockage Rule

A Core EOL blockage rule is used to specify line-end blockages formed from the core edges. You can create a core EOL blockage rule by using the following property definition:

PROPERTY LEF_CDN_COREEOLBLOCKAGE 
  “COREEOLBLOCKAGE outwardSize inwardSize
     [SIDEEXTENSION sideExtension]
     ;” ; 

Where:

COREEOLBLOCKAGE outwardSize inwardSize
SIDEEXTENSION sideExtension

Defines the line-end blockages formed from the core edges in the orthogonal direction of the preferred routing direction of the layer of a design. The blockage is formed by going outward from the core by outwardSize and inward by inwardSize. If SIDEEXTENSION is defined, the blockage is extended by sizeExtension along the direction of the core edge on both sides. These blockages prevent any line-end of a wire end inside it. If a wire goes through the blockage and just touches the far end edge, it is still a violation. If a wire just touches an edge without extending inside the blockage, it is fine.
Type: Float, specified in microns

Figure 5-25 Illustration of the Core EOL Blockage Rule

Corner EOL Keep-out Rule

A corner EOL keep-out rule specifies a keep-out region for an EOL edge. You can create a corner EOL keep-out rule by using the following property definition:

PROPERTY LEF_CDN_CORNEREOLKEEPOUT 
  “CORNEREOLKEEPOUT WIDTH eolWidth EOLSPACING eolSpacing 
     { SPACING spacing1 spacing2 WITHIN within1 within2 
     | EXTENSION backwardExt sideExt forwardExt } 
     ;” ;

Where:

CORNEREOLKEEPOUT WIDTH eolWidth EOLSPACING eolSpacing
SPACING
spacing1 spacing2 WITHIN within1 within2

Specifies that if the distance between two corner-to-corner end-of-lines (EOLs) in the direction of the EOL edge is greater than or equal to within1 and less than or equal to within2 and the distance between them in the direction perpendicular to the EOL edge is greater than or equal to spacing1 and less than or equal to spacing2, then a neighbor wire is not allowed in the search window formed by their facing corners.

Both of the EOLs must have width less than eolWidth and the spacing to a neighbor wire with PRL greater than 0 to the EOL must be greater than eolSpacing.

spacing1 and spacing2 could be negative, which means that if the two end-of-lines are within abs(spacing1), the rule would be triggered.

Type: Float, specified in microns

CORNEREOLKEEPOUT WIDTH eolWidth EOLSPACING eolSpacing
EXTENSION
backwardExt sideExt forwardExt

Specifies a keep-out region for an EOL edge with width less than eolWidth and spacing greater than eolSpacing with PRL greater than 0 to a neighbor wire. The keep-out region is formed by extending backwardExt going backward, sideExt on the side, and forwardExt going forward from the corners of EOL. Any corners falling within the keep-out region will be a violation.

Type: Float, specified in microns

Corner EOL Keep-out Rule Examples

The following diagrams illustrate the corner EOL keep-out rule:

Figure 5-26 Illustration of the Corner EOL Keep-out Rule with SPACING

Figure 5-27 Illustration of the Corner EOL Keep-out Rule with EXTENSION

Corner Fill Spacing Rule

A corner fill spacing rule can be used to define spacing of missing corners.

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

PROPERTY LEF_CDN_CORNERFILLSPACING
"CORNERFILLSPACING spacing EDGELENGTH length1 length2
   ADJACENTEOL eolWidth ;” ;

Where:

CORNERFILLSPACING spacing EDGELENGTH length1 length2
ADJACENTEOL eolWidth

Specifies the spacing of a missing corner after the corner is filled to be spacing, if the following conditions are met:

The missing concave corner is composed of two edges with length less than length1 and length2 respectively. The edge with length less than length2 has an adjacent EOL edge with width less than eolWidth.
Type: Float, specified in microns

Figure 5-28 Illustration of Corner Fill Spacing Rule

Corner Spacing Rule

You can create corner spacing rule to define spacing between convex/concave corners and any edges, depending on whether a convex or concave corner is defined.

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

PROPERTY LEF_CDN_CORNERSPACING 
"CORNERSPACING 
   {CONVEXCORNER [SAMEMASK]
       [CORNERONLY within | CORNERTOCORNER]
       [EXCEPTEOL eolWidth [EXCEPTJOGLENGTH length
            [EDGELENGTH] [INCLUDELSHAPE]]
       | EOLONLY eolWidth]
   |CONCAVECORNER
       [MINLENGTH minLength] [EXCEPTNOTCH [notchLength]] }
   [EXCEPTSAMENET | EXCEPTSAMEMETAL]
   {WIDTH width SPACING spacing
   | WIDTH width SPACING horizontalSpacing verticalSpacing}...
   ; " ;

Where:

CORNERONLY within

Specifies that the corner spacing rule only applies to a neighbor corner, which is within spacing in the direction parallel to the specified direction in DIRECTION on a Manhattan routing layer and within in the perpendicular direction.

CORNERSPACING {CONVEXCORNER | CONCAVECORNER}
{WIDTH width SPACING
spacing}...

Specifies the spacing, which is measured in MAXXY style, between a convex or concave corner and any edges depending on whether CONVEXCORNER or CONCAVECORNER keyword is defined. For convex corner cases, parallel run length to the neighbor wire must be less than or equal to 0 to trigger the rule. If the width of a wire containing the corner is greater than width, then the corresponding spacing is applied.

Type: Float, specified in microns

CORNERTOCORNER

Specifies that the rule applies only between two facing convex corners and the spacing is measured in Euclidean. In addition, the rule applies only when the PRL of the wires is strictly less than zero.

EOLONLY eolWidth

Specifies that the rule applies only between two line ends with width less than eolWidth.

Type: Float, specified in microns

EXCEPTEOL eolWidth

Specifies that the corner spacing rule does not apply to a corner connected to a EOL edge with width less than the eolWidth.
Type: Float, specified in microns

EXCEPTJOGLENGTH length [EDGELENGTH] [INCLUDELSHAPE]

Specifies that the minimum default (right-way) spacing will be applied between a wrong way jog with minimum wrong way width and length less than length sandwiched by two right way wires with projected PRL less than 0 in wrong way direction in a 'Z' shape and a right way wire.  

If INCLUDELSHAPE is specified, this minimum default spacing will also be applied between a wrong way jog with minimum wrong way width and length les than length connected to a right way wire in a 'L' shape and a right way wire.

If EDGELENGTH is specified, length is measured against the length of the edges in the wrong way direction of a wrong way jog in a ‘Z’ shape instead of the entire span length of the jog. If INCLUDELSHAPE is also specified to include an ‘L’ shape exemption, the longest edge length would be the same as the span length of the jog, and this EDGELENGTH construct would have no impact on it.
Type: Float, specified in microns

EXCEPTNOTCH [notchLength]

Specifies that the rule does not apply to a notch (U shape) that is a neighbor of the concave corner. notchLength specifies that the notch length must be less than the given value to be exempted from the rule. See Figure 5-34.

EXCEPTSAMENET | EXCEPTSAMEMETAL

Specifies that the rule does not apply to same-net or same-metal objects of the corner.

MINLENGTH minLength

Specifies that the corner spacing rule applies only if both edges of the concave corner have length >= minLength.
Type: Float, specified in microns

SAMEMASK

Specifies that the corner spacing rule only applies to objects on the same mask.

WIDTH width SPACING horizontalSpacing verticalSpacing

Specifies that the rule would require horizontalSpacing horizontally and verticalSpacing vertically from the concave corner in MAXXY style to avoid a neighbor wire. If EXCEPTNOTCH without a given notchLength is also defined, the notch length must be less than the minimum of horizontalSpacing and verticalSpacing to be exempted from the rule.
Type: Float, specified in microns

Corner Spacing Rule Examples

Enclosure Spacing Rule

You can use the enclosure spacing rule to specify the spacing on an edge with enclosure less than the specified enclosure.

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

PROPERTY LEF_CDN_ENCLOSURESPACING
"ENCLOSURESPACING  
     [CUTCLASS cutClass [LONGEDGEONLY] ]
     [FROMABOVE | FROMBELOW]
     {ENCLOSURE enclosure SPACING spacing}... 
 ; ... " ;

Where:

CUTCLASS cutClass

Specifies that the spacing applies only to an edge with a cut of the given cutClass. If CUTCLASS is defined in cut layer, then CUTCLASS must be specified in the ENCLOSURESPACING statement.

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

ENCLOSURESPACING {ENCLOSURE enclosure SPACING spacing}

Specifies the spacing on an edge with enclosure less than enclosure to be spacing. You can determine the portion of a cut having enclosure less than enclosure, extending the cut corner by enclosure in Euclidean style to intersect with the metal edge. The extended edge is checked against spacing.
Type: Float, specified in microns

FROMABOVE |  FROMBELOW

Specifies that the spacing applies only to a via cut from above or below the specified layer.

LONGEDGEONLY

Specifies that the spacing applies only to a metal edge containing a side/long edge of a rectangular cut with enclosure less than the  enclosure.

Enclosure Spacing Rule Example

The following rule indicates enclosure spacing:

  PROPERTY LEF_CDN_ENCLOSURESPACING  "
ENCLOSURESPACING CUTCLASS VB LONGEDGEONLY 
ENCLOSURE 0.03 SPACING 0.1 ; " ;

Figure 5-37 Illustration of Enclosure Spacing Rule

Enclosure with EOL Rule

You can use the enclosure with EOL rule to specify the conditions for the enclosure for a cut on the above or below cut layer with respect to an end-of-line edge.

You can define an enclosure with EOL rule by using the following property definition:

PROPERTY LEF_CDN_ENCLOSUREWITHEOL
  "ENCLOSUREWITHEOL eolWidth
     [CUTCLASS className] [FROMABOVE | FROMBELOW]
     {ENCLOSURE enclosure EXCEPTLINEENDSPACING spacing
     | {ENCLOSURESPACING spacing enclosure}... }
  ; ... " ;

Where:

CUTCLASS className

Specifies that the rule applies only to an end-of-line edge with a cut of the given cut class. If CUTCLASS is defined in the cut layer, CUTCLASS must be specified in the ENCLOSUREWITHEOL statement.

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

{ENCLOSURESPACING spacing enclosure}...

Specifies that if the EOL spacing is greater than spacing, the corresponding enclosure would be applied to the cut on the EOL on the above and/or below cut layer depending on whether FROMABOVE or FROMBELOW is specified.

Type: Float, specified in microns

ENCLOSUREWITHEOL eolWidth
ENCLOSURE enclosure EXCEPTLINEENDSPACING spacing

Specifies that a cut on either the above or below cut layer must have enclosure greater than or equal to enclosure to an end-of-line edge with width less than eolWidth unless the end-of-line spacing is exactly equal to spacing.
Type: Float, specified in microns

FROMABOVE |  FROMBELOW

Specifies that the spacing applies only to a via cut from above or below the specified layer.

Enclosure with EOL Rule Examples

Figure 5-38 Illustrations of Enclosure with EOL Rule

Figure 5-39 Illustrations of Enclosure with EOL Rule with ENCLOSURESPACING

EOL Extension Spacing Rule

EOL extension spacing rule can be used to indicate that for a given width of an end-of-line certain extension should be applied to the EOL edge before checking for edge-to-edge spacing to any neighbor wires.

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

PROPERTY LEF_CDN_EOLEXTENSIONSPACING
  "EOLEXTENSIONSPACING spacing [SAMEMASK]
    [PARALLELONLY] [NONEOL]]
    [OTHERWIDTH otherWidth]
    {ENDOFLINE eolWidth EXTENSION extension
       [ENDTOEND endToEndExtension]} ...
    [MINLENGTH minLength [TWOSIDES]]
  ;" ;

Where:

EOLEXTENSIONSPACING spacing {ENDOFLINE eolWidth EXTENSION extension [ENDTOEND endToEndExtension]} ...

Specifies that for a given width of an end-of-line, find the last row where the width is less than eolWidth, the corresponding extension should be applied to the EOL edge before checking for edge-to-edge spacing to any neighbor wires. The eolWidth values should be increased for each subsequent ENDOFLINE statement, and at the most three statements can be specified and supported.
Type: Float, specified in microns

ENDTOEND endToEndExtension specifies that endToEndExtension is applied if the neighbor wire is also an end-of-line, and extension is applied for an end-to-side situation.
Type: Float, specified in microns

MINLENGTH minLength [TWOSIDES]

Indicates that the rule does not apply if the end-of-line length is less than minLength along both sides.
Type: Float, specified in microns

TWOSIDES means that the rule only applies when the end-of-line length is greater than or equal to minLength along both the sides. In other words, the rule does not apply if the end-of-line length is less than minLength along any one side.

OTHERWIDTH otherWidth

Specifies that the rule applies only if the width of the neighbor wire is less than otherWidth. See Figure 5-41.

PARALLELONLY [NONEOL]]

Specifies that the rule only applies if a facing neighbor parallel edge to the EOL edge is found. If NONEOL is specified, the neighbor parallel edge cannot be a EOL. See Figure 5-42.

SAMEMASK

Specifies that the EOL extension spacing only applies to same-mask objects.

Multiple EOLEXTENSIONSPACING statements with SAMEMASK can be defined.

EOL Extension Spacing Rule Examples

EOL Keep-out Rule

EOL keep-out rule can be used to define a keep-out region for an end-of-line edge.

You can create an EOL keep-out rule by using the following property definition:

PROPERTY LEF_CDN_EOLKEEPOUT
"EOLKEEPOUT {eolWidth | minEolWidth maxEolWidth} 
    [RIGHTWAYONLY | WRONGWAYONLY]
    EXTENSION backwardExt sideExt forwardExt
    [EXCEPTWITHIN lowSideExt highSideExt] 
    [CLASS className [OTHERENDEOL]]
    [CORNERONLY 
        [EXCEPTFROM { BACKEDGE [EXACTALIGNED exactForwardExt]
            | FRONTEDGE}
         [MASK maskNum [TWOSIDES] [SAMEMASK]
         | DIFFMASK
         | SAMEMASK]
        [EXCEPTSAMESIDEMETAL backwardExt1 sideExt1 forwardExt1]
        [EXCEPTNOOPPSIDEMETAL backwardExt2 sideExt2 forwardExt2]
        [EXCEPTLINEENDSPACING spacing | EXCEPTLINEENDGAP]
        [EOLWITHINCUT withinCut]
        [EXCEPTEOLSPACING eolSpacing]
        ]] 
    [EXCEPTSAMEMETAL]
    ; " ;

Where:

CLASS className

Assigns a class name to the rule. It is a violation if all the rules belonging to the same class fail. An entire set of failed class rules will be a violation. If any one of the rules have CLASS, then CLASS must be specified for all of the rules. Typically, CLASS is used along with EXCEPTFROM - one being BACKEDGE and another being FRONTEDGE. It is a violation if both of them fail on the same side of the wire.

CORNERONLY

Specifies that it is a violation if there is a corner falling within the keep-out, and a pass-through edge is allowed.

DIFFMASK

Specifies that the rule applies only to different-mask objects.

EOLWITHINCUT withinCut

Specifies that the rule applies only if there is a cut either on the below or above cut layer that is within withinCut from the end of line (EOL).
Type: Float, specified in microns

EXACTALIGNED exactForwardExt

Specifies that exactForwardExt applies only between two perfectly aligned EOL edges with the same width and the original EXTENSION values do not need to be checked. See Figure 5-50.
Type: Float, specified in microns

EXCEPTFROM {BACKEDGE | FRONTEDGE}

Specifies that the rule only applies if the neighbor wire containing the corner is not coming from the front edge of the keep-out window in EXCEPTFROM FRONTEDGE or not coming from the back edge of the search window in EXCEPTFROM BACKEDGE.

EXCEPTEOLSPACING eolSpacing

Specifies that the rule does not apply if there is no neighboring wire less than or equal to eolSpacing and parallel run length (PRL) greater than 0 to the EOL.
Type: Float, specified in microns

EXCEPTLINEENDGAP

Specifies that the rule does not apply if the LINEENDGAP condition on this layer is met. This exemption would be applied on a triggering EOL or as a neighboring wire meeting the LINEENDGAP condition.

EXCEPTLINEENDSPACING spacing

Specifies that the rule does not apply if there is another wire of the neighboring wire with spacing exactly equal to spacing with PRL greater than 0 to the wire edge of the neighbor triggering the rule.
Type: Float, specified in microns

EXCEPTNOOPPSIDEMETAL backwardExt2 sideExt2 forwardExt2

Specifies that the rule does not apply if there is no wire on the opposite side of the neighboring wire in a window formed by extensions of backwardExt2, sideExt2, and forwardExt2 on the end-of-line (EOL) edge.
Type: Float, specified in microns

EXCEPTSAMESIDEMETAL backwardExt1 sideExt1 forwardExt1

Specifies that the rule does not apply if there is another wire on the same side of the neighboring wire in a window formed by extensions of backwardExt1, sideExt1, and forwardExt1 on the end-of-line (EOL) edge.
Type: Float, specified in microns

EXCEPTWITHIN lowSideExt highSideExt

Specifies that the rule is not checked on a neighbor object overlapping with a region greater than or equal to lowSideExt and less than or equal to highSideExt away from the sides of the EOL edge, which covers the entire range of backwardExt and forwardExt.
Type: Float, specified in microns

EOLKEEPOUT eolWidth EXTENSION backwardExt sideExt forwardExt

Defines a keepout region for an end-of-line edge with length less than the eolWidth by extending backwardExt going backward, sideExt on the side, and forwardExt going forward. Any objects falling within the region will be a violation.
Type: Float, specified in microns

EXCEPTSAMEMETAL

Specifies that the keepout region does not apply to same-metal objects.

MASK maskNum

Specifies which mask the triggering wire of this rule belongs to, maskNum must be a positive integer, and most applications only support values of 1, 2, or 3. See Figure 5-51.
Type: Integer

minEolWidth maxEolWidth

Specifies that the rule applies only if the EOL width is greater than or equal to minEolWidth and less than maxEolWidth.
Type: Float, specified in microns

OTHERENDEOL

Specifies that if the object found in the extension window is also an EOL, it is only a violation if that EOL also fails all of the EOLKEEPOUT statements in the same CLASS. OTHERENDEOL must be specified along with EXCEPTFROM BACKEDGE since it would be a symmetrical situation meaning either one of the two EOLs as a trigger edge would find the other EOL, and it makes sense for both EOLs to fail other EOLKEEPOUT statements to be a violation.

RIGHTWAYONLY | WRONGWAYONLY

Specifies that the rule applies only if the EOL edge is in the preferred routing direction in RIGHTWAYONLY or in the non-preferred routing direction in WRONGWAYONLY. Tools can only support WRONGWAYONLY at present.
See Figure 5-59.

SAMEMASK

Specifies that the rule applies only to same-mask objects.

TWOSIDES

Specifies that the rule only applies if it has 2 different-mask wires on both sides.

Figure 5-44 Definition of EOL Keep Out Rule

EOL Keep Out Rule Examples

Figure 5-60 Illustration of EOL Keep Out Rule with RIGHTWAYONLY | WRONGWAYONLY

EOL Track Rule

An EOL track rule can be used to define alignment of EOL with certain tracks.

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

PROPERTY LEF_CDN_EOLTRACK
  "EOLTRACK eolWidth PITCH pitch TRACKSDISTANCE distance
     [EXCEPTEOLSPACING eolSpacing [WITHIN within]]
     ; " ;

Where:

EOLTRACK eolWidth PITCH pitch TRACKSDISTANCE distance

Specifies that any EOL with width/length less than eolWidth must align to certain tracks, which are pitch apart. There are two sets of tracks, which are apart by distance; the bottom EOL of a vertical wire or the left EOL of a horizontal wire aligns to one set of tracks while the top EOL of a vertical wire or the right EOL of a horizontal wire aligns to the other set of tracks. As the locations of the EOL tracks may vary depending on the design, the first track location would be specified by a separate command option as an offset to a reference point, like the core or design boundary.

Type: Float, specified in microns

EXCEPTEOLSPACING eolSpacing WITHIN within

Specifies that EOL with spacing less than or equal to eolSpacing to a neighboring wire with PRL greater than 0 does not need to align to the given tracks. If WITHIN is specified, a window would be formed by extending within along the EOL on both sides and eolSpacing in the orthogonal direction. Any neighboring wire overlaps with the window means that the EOL does not need to align to the given tracks.

Type: Float, specified in microns

EOL Track Rule Examples

Figure 5-61 Illustration of EOL Track Rule

Figure 5-62 Illustration of EOL Track Rule with WITHIN in EXCEPTEOLSPACING

EOL Via Keep-out Rule

An EOL via keep-out rule can be used to define keep-out regions for end-of-line edges.

You can create an EOL via keep-out rule by using the following property definition:

PROPERTY LEF_CDN_EOLVIAKEEPOUT
  "EOLVIAKEEPOUT eolWidth MASK maskNum
     EXTENSION backwardExt sideExt forwardExt
     OTHERWIDTH otherWidth
     OTHERENDEXTENSION otherEndExtension 
     [EXCEPTBACKSIDEALIGNED]
     ; " ;]

Where:

EOLVIAKEEPOUT eolWidth MASK maskNum
EXTENSION backwardExt sideExt forwardExt
OTHERWIDTH otherWidth
OTHERENDEXTENSION otherEndExtension

Defines a keep-out region for an end-of-line edge with length less than eolWidth belonging to mask maskNum by extending backwardExt going backward, sideExt on the side and forwardExt going forward. Any above or below via cut belonging to a wire with width less than or equal to otherWidth and with mask other than maskNum touching or overlapping with the keep-out region would be a violation if there is a same-mask wire fulfilling the OTHERENDEXTENSION condition. OTHERENDEXTENSION means that a same-mask neighbor wire with width less than eolWidth is extended by otherEndExtension at both line ends and the extended wire overlaps with the keep-out region on the same side as the neighboring via. This same-mask neighbor must not have PRL greater than or equal to 0 with the EOL edge.
Type: Float, specified in microns

EXCEPTBACKSIDEALIGNED

Specifies that the rule does not apply if the same-mask neighbor wire without extension is aligned to the EOL coming from the back edge of the keep-out window.

EOL Via Keep-out Rule Examples

Figure 5-63 Illustrations of EOL Via Keep-out Rule

Figure 5-64 Illustration of EOL Via Keep-out Rule with EXCEPTBACKSIDEALIGNED

Fill to Fill Spacing Rule

A fill to fill spacing rule can be used to define spacing between metal fills.

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

PROPERTY LEF_CDN_FILLTOFILLSPACING 
“FILLTOFILLSPACING spacing ;” ; 

Where:

FILLTOFILLSPACING

Specifies the spacing between metal fills.
Type: Float, specified in microns

Five Wires EOL Spacing Rule

The five wires EOL spacing rule is used to define spacing constraints for five consective wires meeting certain conditions.

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

PROPERTY LEF_CDN_FIVEWIRESEOLSPACING 
“FIVEWIRESEOLSPACING eolSpacing WITHIN eolWithin
      PRL prl
     ENCLOSECUT {BELOW|ABOVE} encloseDist CUTWITHIN cutWithin
      NOMETALEOLEXTENSION eolSideExtension eolForwradExtension
;...”; 

Where:

FIVEWIRESEOLSPACING eolSpacing WITHIN eolWithin
PRL prl
ENCLOSECUT {BELOW|ABOVE} encloseDist CUTWITHIN cutWithin
NOMETALEOLEXTENSION eolSideExtension eolForwradExtension

Specifies that if there are five consecutive minimum default width wires that are minimum spacing apart and have a parallel run length greater than prl, it is a violation to have a neighbor wire overlapping with the region formed by the line end of the middle wire by extending eolWithin along the EOL edge and eolSpacing along the orthogonal direction. In addition, the following conditions must also be met to be a violation:

  • There is a cut on below or above cut layer in case BELOW or ABOVE is specified on the middle wire within cutWithin of parallel wires and having enclosure less than encloseDist from the line end.
  • There is no wire completely covering or touching the entire range along the orthogonal direction of the EOL of one of the two regions by extending eolSideExtension along the EOL corners and eolForwradExtension along the orthogonal direction.

Type: Float, specified in microns

Five Wires EOL Spacing Rule Example

Forbidden Spacing Rule

A forbidden spacing rule can be used to define spacing between two wires, such that under certain conditions a violation may occur if there is a different-metal polygon wire between the wires.

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

PROPERTY LEF_CDN_FORBIDDENSPACING
"FORBIDDENSPACING minSpacing maxSpacing [minSpacing2 maxSpacing2]
   [WIDTH minWidth WITHIN within PRL prl
   | [SAMEMASK] WIDTH maxWidth PRL prl
       [TWOEDGES within | EXACTSPACINGEDGE exactSpacing
           [IGNOREMIDDLE width spacing]
           [SPANLENGTH spanLength [WITHIN within]]
           [EXCEPTWIREWIDTHSPACING {width spacing}...]]
   | EXACTWIDTH exactWidth PRL prl
       OTHERWIDTH otherWidth EXACTSPACINGEDGE exactSpacing
   | [SAMEMASK | MASK maskNum]
       WIDTHRANGE minWidth maxWidth PRL prl
       OTHERWIDTH otherWidth WITHIN within [OTHERSAMEMASK]]
  ; " ;

Where:

EXACTSPACINGEDGE exactSpacing

Specifies forbidden spacing only applies if the wire width, less than the maxWidth, has a neighbor with exact spacing of exactSpacing on one side, and the forbidden spacing range will be applied on the opposite side. The forbidden spacing measurement will become the traditional edge-to-edge between wires from right/left or top/bottom of a wire to left/right or bottom/top of another wire. In addition, this rule will apply to right way wires only while the forbidden spacing range is measured in the direction perpendicular to the specified direction in DIRECTION on a Manhattan routing layer.

Type: Float, specified in microns

EXACTWIDTH exactWidth PRL prl OTHERWIDTH otherWidth EXACTSPACINGEDGE exactSpacing

Specifies that the spacing between a wire with width exactly equal to exactWidth and another wire with width greater than or equal to otherWidth must not be greater than or equal to minSpacing and less than or equal to maxSpacing if the first wire has another wire on the other side with the exact spacing of exactSpacing and the three wires have parallel run length greater than prl.

Type: Float, specified in microns

EXCEPTWIREWIDTHSPACING {width spacing}...

Specifies that neighbor wires, with at least one of them not in the forbidden spacing range, having width exactly equal to width with PRL greater than 0 and the spacing less than spacing would be merged as if the gap between the wires were filled. Then, the merged wires may be able to shield another wire, which is within the forbidden spacing range, such that it is not a violation.

Type: Float, specified in microns

FORBIDDENSPACING minSpacing maxSpacing WIDTH maxWidth PRL prl

Specifies that if the spacing between the right/left or top/bottom edge of a wire with width less than the maxWidth to the right/left or top/bottom of another wire is greater than or equal to the  minSpacing and less than or equal to the maxSpacing with parallel run length greater than prl, then it will be a violation if and only if there is a different-metal polygon wire between these two wires.

Type: Float, specified in microns

IGNOREMIDDLE width spacing

Specifies that a wire between the triggering wire and the forbidden spacing range wire would be ignored if that wire's width is not the same as width or its spacing to the triggering wire is not the same as spacing. See Figure 5-75.

Type: Float, specified in microns

MASK maskNum

Specifies that the forbidden spacing rule applies only to the objects belonging to the given mask. In other words, forbidden spacing is checked against the objects in the given mask, and the mask of other neighboring objects is irrelevant. maskNum must be a positive integer, and most applications support only the values 1, 2, or 3.

Type: Integer

minSpacing2 maxSpacing2

Specifies an additional second set of forbidden spacing range. This second set can be defined only if the TWOEDGES or EXACTSPACINGEDGE keyword is also specified.

Type: Float, specified in microns

OTHERSAMEMASK

Specifies that the forbidden spacing rule applies only if the two outer wires have the same mask. The mask of the middle wire is irrelevant. See Figure 5-73.

TWOEDGES within

Indicates that the forbidden spacing rule only applies if the wire width is less than the maxWidth that has neighbors on both the sides within within. The forbidden spacing measurement will become the traditional edge-to-edge between wires from right/left or top/bottom of a wire to left/right or bottom/top of another wire.

Type: Float, specified in microns

SAMEMASK

Specifies that the forbidden spacing rule applies only to objects on the same mask. The objects are the ones that the forbidden spacing is checked against, and the colors of other neighbor objects are irrelevant.

[SAMEMASK]
WIDTHRANGE
minWidth maxWidth PRL prl
OTHERWIDTH otherWidth WITHIN within

Specifies that the spacing between a wire with width greater than minWidth and less than maxWidth, which is sandwiched by two wires within within with width greater than otherWidth, and any of two wires must not be greater than or equal to minSpacing and less than or equal to maxSpacing if the three wires have parallel run length greater than prl.

Type: Float, specified in microns

SAMEMASK specifies that the forbidden spacing rule applies only to objects on the same mask. The objects are the ones that the forbidden spacing is checked against, and the mask of the other neighbor object is irrelevant. See Figure 5-71.

SPANLENGTH spanLength

Specifies that the forbidden spacing range rule only applies if the span length of the neighbor wire is less than the  spanLength.

Type: Float, specified in microns

WIDTH minWidth WITHIN within PRL prl

Specifies that it is a violation if two wires are apart by a distance that is greater than or equal to the minSpacing and less than or equal to the maxSpacing and are within within distance from a wire with width greater than or equal to the minWidth and has parallel run length greater than prl.

Type: Float, specified in microns

WITHIN within

Specifies that the forbidden spacing range rule only applies if the neighbor wire has another neighbor within (less than) a within distance on either side. See Figure 5-70.

Type: Float, specified in microns

Forbidden Spacing Rule Examples

Gap Rule

A gap rule can be used to specify rectangular gaps in a design with certain width and length.

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

PROPERTY LEF_CDN_GAP
"GAP EXACTWIDTH exactWidth MAXLENGTH maxLength
    SPACING {{0 | 1 | 2} spacing}...[ENDTOEND endToEndSpacing]
    ; " ;

Where:

ENDTOEND endToEndSpacing

Specifies that the end-to-end spacing of two gaps with parallel run length greater than 0 in non-preferred direction of the routing layer must be greater than or equal to endToEndSpacing.
Type:  Float, specified in microns

GAP EXACTWIDTH exactWidth MAXLENGTH maxLength

Specifies the empty area without wires must be a rectangle with width exactly equal to exactWidth and length less than or equal to  maxLength. The 'width' is measured along the preferred direction of the routing layer. The gap between two parallel wires with the corresponding required spacing is not formed. The gaps are formed/aligned to line end of wires and are extended half of the required spacing of the wires in the perpendicular direction.
Type:  Float, specified in microns

SPACING {{0 | 1 | 2} spacing}...

Specifies the spacing among those gaps based on whether they are on the same track (0), adjacent track (1), or 2 tracks apart (2), where track is defined along the preferred direction of the routing layer. At the most three spacing values with different track number can be defined.
Type:  Float, specified in microns

Gap Rule Example

Joint Corner Spacing Rule

A joint corner spacing rule can be used to define the spacing between two facing joints of joint corners.

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

PROPERTY LEF_CDN_JOINTCORNERSPACING
"JOINTCORNERSPACING spacing [SAMEMASK]
   JOINTWIDTH jointWidth [MINLENGTH minLength]
   JOINTLENGTH spanLength [EDGELENGTH edgeLength]
; " ;

Where:

All other keywords are the same as the existing LEF routing layer joint corner spacing rule syntax.

EDGELENGTH edgeLength

Specifies that the joint corner spacing only applies if the edge length of both the joints is less than or equal to the specified edgeLength.
Type:  Float, specified in microns

JOINTCORNERSPACING spacing
JOINTWIDTH jointWidth [MINLENGTH minLength]
JOINTLENGTH
spanLength

Specifies the spacing between two facing joints of joint corners with parallel run length less than or equal to zero to be spacing. A joint corner is a convex corner consisting of two consecutive joints with span greater than spanLength and not a EOL edge with length less than the jointWidth and having a length greater than or equal to the minLength along both the sides, if the MINLENGTH keyword is specified.
Type:  Float, specified in microns

SAMEMASK

Specifies that the corner spacing rule only applies to objects on the same mask.

Joint Corner Spacing Rule Example

Figure 5-78 Illustration of Joint Corner Spacing Rule

Joint Forbidden Spacing Rule

A joint forbidden spacing rule can be used to define forbidden spacing between a joint and a neighboring wire.

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

PROPERTY LEF_CDN_JOINTFORBIDDENSPACING
"JOINTFORBIDDENSPACING minSpacing maxSpacing
WIDTH width WRONGDIRWIDTH wrongDirWidth
OTHERWIDTH otherWidth [PRL prl]
; " ;

Where:

JOINTFORBIDDENSPACING minSpacing maxSpacing
WIDTH width WRONGDIRWIDTH wrongDirWidth
OTHERWIDTH otherWidth [PRL prl]

Specifies a forbidden spacing between a joint and a neighboring wire in the orthogonal direction of the preferred routing direction of the layer to be greater than or equal to minSpacing and less than or equal to maxSpacing. A joint is a jog in the L or T shape, which consists of a preferred routing wire with width less than or equal to width and a wrong way non-preferred routing wire with width less than or equal to wrongDirWidth. In addition, the neighboring wire must have a width less than or equal to otherWidth. The rule is applied when the parallel run length (PRL) of the two wires is greater than 0 by default or greater than prl if PRL is defined. The forbidden spacing is applied on both the opposite sides of the joint in the non-preferred routing direction.

Type: Float, specified in microns

Figure 5-79 Illustration of Joint Forbidden Spacing Rule

Line End Aligned With Cut Rule

You can create a line end aligned with cut rule by using the following property definition:

PROPERTY LEF_CDN_LINEENDALIGNEDWITHCUT
  "LINEENDALIGNEDWITHCUT alignedDistance ENCLOSURE enclosure
     [CUTCLASS className]
     {FROMABOVE | FROMBELOW} [CUTONANYWIRES]
     ; " ;

Where:

LINEENDALIGNEDWITHCUT alignedDistance ENCLOSURE enclosure
{FROMABOVE | FROMBELOW}

Specifies that three minimum default width wires with minimum spacing is a violation if the line end of the middle wire is exactly alignedDistance projected distance from the line ends of the two wires on the opposite sides and the middle wire contains a cut with enclosure less than or equal to enclosure on the above or below cut layer if FROMABOVE or FROMBELOW is specified. A positive alignedDistance value means that the neighbor line ends go beyond the middle line end, and a negative alignedDistance value means that the middle line end extends beyond the neighbor line ends. Zero alignedDistance means that all the three line ends are exactly aligned.

Type: Float, specified in microns

CUTCLASS className

Specifies that the cut must belong to the given cut class to trigger the rule. If CUTCLASS is not defined, any cuts belonging to any cut class could trigger the rule.

CUTONANYWIRES

Specifies that the rule is applied if the cut with enclosure less than or equal to enclosure is on any of the three wires.

Figure 5-80 Line End Aligned With Cut Rule Example

Line End Gap Rule

You can create a line end gap rule by using the following property definition:

PROPERTY LEF_CDN_LINEENDGAP
  "LINEENDGAP gap WIDTH width [MASK maskNum]
  ; " ;

Where:

LINEENDGAP gap WIDTH width [MASK maskNum]

Specifies that two perfectly aligned wires having width less than width and having exactly the spacing of gap could be an exemption or a triggering condition on some other rules. If MASK is defined, both of the wires must belong to maskNum. By itself, it is not a rule and is just a line-end spacing condition. Some other rules would have a Boolean EXCEPTLINEENDGAP or LINENEDGAPONLY to refer back to this condition.

Type: Float, specified in microns

Litho Macro Halo Rule

A litho macro halo rule is used to define a routing halo that allows only planar connections to its pins.

You can create a litho macro halo rule by using the following property definition:

PROPERTY LEF_CDN_LITHOMACROHALO
"LITHOMACROHALO horizontalHalo verticalHalo
     {WIRESPACING wireSpacing | NOSAMEMETALJOG}
   ; " ;

Where:

LITHOMACROHALO horizontalHalo verticalHalo WIRESPACING wireSpacing

Specifies halo values for litho purpose on a block macro. A routing halo with horizontalHalo and verticalHalo offset horizontally and vertically from the bounding box of the macro could be formed. Inside this routing halo, only planar connections to macro pins are allowed. Any other wires or above/below via insertion is also disallowed. In addition, the wires connected to the macro pins must have spacing greater than or equal to wireSpacing. A separate command specifies which block macro should create such a routing halo on them.

Type: Float, specified in microns

NOSAMEMETALJOG

Specifies that the halo does not allow same-layer same-metal jogs. In other words, only rectangular wires are allowed. Layer change is still not allowed inside the halo, but rectangular through wires are allowed.

Maximum Diagonal Length Rule

The maximum length rule can be used to specify the maximum length of an edge on a routing layer allowing diagonal routing.

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

PROPERTY LEF_CDN_MAXDIAGLENGTH
  "MAXDIAGLENGTH diagonalLength manhattanLength      ; " ;

Where:

MAXDIAGLENGTH diagonalLength manhattanLength

Specifies that any diagonal edge length must be less than or equal to diagonalLength and any Manhattan edge length must be less than or equal to manhattanLength in an RDL routing layer. This construct can be defined only on a routing layer that allows diagonal routing.
Type: Float, specified in microns

Maximum Length with Cut Rule

A maximum length with cut rule can be used to specify the maximum length of a wire that has a single cut without a neighboring cut within the specified cut distance.

You can create a maximum length with cut rule by using the following property definition:

PROPERTY LEF_CDN_MAXLENGTHWITHCUT 
"MAXLENGTHWITHCUT length WIDTH width
    WITHIN cutDistance {FROMABOVE | FROMBELOW}
    OTHERWIDTH otherWidth EXCEPTOTHERLENGTH otherLength
    [LAYER secondLayerName SECONDWIDTH secondWidth 
        EXCEPTSECONDLENGTH secondLength]
; " ;

Where:

MAXLENGTHWITHCUT length WIDTH width
WITHIN cutDistance {FROMABOVE | FROMBELOW}
OTHERWIDTH
otherWidth EXCEPTOTHERLENGTH otherLength

Specifies that if a wire with width less than width and length greater than length has a cut from the cut layer above or below if FROMABOVE or FROMBELOW is defined, and that cut is connected to another metal layer wire with width less than otherWidth, there must be another such cut within cutDistance. In other words, if a wire has a single cut without a neighboring cut within cutDistance, the maximum length of the wire must be less than or equal to length. If the other metal layer wire has length greater than otherLength, this rule is exempted.Type: Float, specified in microns

LAYER secondLayerName SECONDWIDTH secondWidth EXCEPTSECONDLENGTH secondLength

Specifies a routing layer to be secondLayerName, which is a layer below or above the bottom or top metal layer of the cut when FROMBELOW or FROMABOVE is specified. If the other layer wire is connected to a wire with width less than secondWidth and length greater than secondLength on that secondLayerName, this rule is exempted. The rule is also exempted if the other layer wire is not connected to a wire in secondLayerName.Type: Float, specified in microns

Figure 5-81 Maximum Length With Cut Rule Example

Maximum Overlap Length Rule

You can create a maximum overlap length rule between two consecutive routing layers, with one of them being a RDL layer, by using the following property definition:

PROPERTY LEF_CDN_MAXOVERLAPLENGTH
  "MAXOVERLAPLENGTH length LAYER secondLayerName
      ; " ;

Where:

MAXOVERLAPLENGTH length LAYER secondLayerName

Specifies that the overlap between a shape on this layer, which must be an RDL routing layer, and a shape on secondLayerName, which must be an adjacent below metal layer, must have a length less than or equal to length.
Type: Float, specified in microns

Figure 5-82 Illustration of Maximum Overlap Length Rule

Maximum Width Rule

A maximum width rule can be used to specify the maximum wire width on a given layer.

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

PROPERTY LEF_CDN_MAXWIDTH 
"MAXWIDTH width [WRONGDIRECTION]
   ; " ;

Where:

All other keywords are the same as the existing LEF routing layer MAXWIDTH syntax.

WRONGDIRECTION

Specifies the maximum wire width with direction perpendicular to the specified direction in DIRECTION on a Manhattan routing layer.

Minimum Cut Rule

Minimum cut rules exist for thin wires connected to a wide wire or pin.

You can define a minimum cut rule by using the following property definition:

PROPERTY LEF_CDN_MINIMUMCUT 
"MINIMUMCUT {numCuts | {CUTCLASS className numCuts 
    [DIFFCUTCLASS]}... } 
    WIDTH width [WITHIN cutDistance] 
    [FROMABOVE | FROMBELOW] 
    [EXCEPTOTHERWIDTH otherWidth]
    [LENGTH length WITHIN distance 
    |AREA area [WITHIN distance]
    |SAMEMETALOVERLAP
    | FULLYENCLOSED]
    ; " ;

All other keywords are the same as the existing LEF routing layer MINIMUMCUT syntax.

Where:

AREA area [WITHIN distance]

Applies the minimum cut rule when the wide object has a width that is greater than width, and an area that is greater than area.

The area of a polygon is determined by a process in which the polygon is shrunk by an amount equal to width/2, then grown by an amount equal to width/2. The resulting polygon at the connection location is used for area comparison. If the connection is made at a thin wire (width less than and equal to width) that connects to the wide object, the biggest remaining neighbor should be checked individually with their own areas. If it is followed by a WITHIN distance syntax, the within distance is measured from the edges of the remaining neighbors.

If width is less than width of the default routing wire is used along with the AREA keyword, the minimum cut requirement on the routing vias can vary depending on the area of the routing wire on the layer. This should be used cautiously. A small area can result in longer routing run times, and more DRC violations.

WITHIN indicates that the rule applies for thin wires directly connected to a wide object, if the cuts on the thin wire are less than distance from the wide object.

If AREA and WITHIN are defined, this rule only checks the thin wire connected to a wide wire; it does not check the wide wire itself. A separate MINIMUMCUT numCuts WIDTH width statement without AREA and WITHIN is required for any wide wire minimum cut rule.
Type: Float, specified in microns

Note: You can specify either AREA WITHIN or LENGTH WITHIN in a routing layer.

If WITHIN cutDistance is absent, only cuts belonging to the same via are considered as multiple cuts.

CUTCLASS className numCuts

Defines the minimum cut rule for a specific cut class className in the cut layers either above or below the current routing layer to be numCuts. Multiple CUTCLASS keywords can be defined to specify different numCuts for each of them. If CUTCLASS is defined in cut layer, then CUTCLASS must be specified in the MINIMUMCUT statement.

DIFFCUTCLASS

Specifies that if a wide wire has one cut belonging to className, then it must have at least numCuts – 1 cuts not belonging to className.

EXCEPTOTHERWIDTH otherWidth

Specifies that the minimum cut rule is exempted if the width on the other metal of all of the cuts is greater than or equal to otherWidth.

Type: Float, specified in microns

FULLYENCLOSED

Specifies that all the cuts must be completely inside a wide wire with width greater than minWidth to be counted against the minimum cut requirement of numCuts.

SAMEMETALOVERLAP

Specifies that if the common metal on both the top and bottom layers containing the cut overlaps with the wide wire having a width greater than minWidth, then the rule still applies even if the cut itself does not overlap with the wide wire. See Figure 5-84.

Minimum Cut Rule Examples

Minimum Length Parallel Rule

You can define a minimum length parallel rule by using the following property definition:

PROPERTY LEF_CDN_MINLENGTHPARALLEL 
  "MINLENGTHPARALLEL minLength MASK maskNum WIDTH width
     {FROMABOVE|FROMBELOW} CUTCLASS className
     EXCEPTEOLSPACING eolSpacing EXCEPTWITHIN within
     ; " ;

Where:

MINLENGTHPARALLEL minLength MASK maskNum WIDTH width
{FROMABOVE|FROMBELOW} CUTCLASS className
EXCEPTEOLSPACING eolSpacing EXCEPTWITHIN within

Specifies that a wire with mask of maskNum and width less than width containing a cut with className either from above or below the cut layer in FROMABOVE or FROMBELOW, respectively, must have a length greater than or equal to minLength. If the wire is completely covered by neighboring wires within within on both sides, this minimum length rule is exempted. If within is large enough to include multiple wires on one side, the combined projection to the triggering wire should be considered. If the neighboring wire has spacing to another wire less than or equal to eolSpacing with PRL greater than 0, the gap would be virtually filled for the neighbor coverage purpose.

Type: Float, specified in microns

Minimum Length Parallel Rule Examples

Figure 5-88 Illustrations of Minimum Length Parallel Rule

Figure 5-89 Illustrations of Minimum Length Parallel Rule

Minimum Size Rule

Minimum size rules allow you to specify the minimum width and length of a rectangle that must be able to fit somewhere within each polygon on a layer.

You can define a minimum size rule by using the following property definition:

PROPERTY LEF_CDN_MINSIZE 
"MINSIZE [RECTONLY] minWidth minLength [minWidth minLength]...
    ] ;..." ;

Where:

All the other keywords are the same as the existing LEF routing layer MINSIZE syntax.

RECTONLY

Specifies that the minimum size rule applies only to rectangular wires.

Minimum Step Rule

Minimum step rules allow you to require a minimum adjacent edge length following edges that are less than the specified minimum step length. You can define at the most two MINSTEP statements.

You can define a minimum step rule by using the following property definition:

PROPERTY LEF_CDN_MINSTEP 
"MINSTEP minStepLength 
   [[INSIDECORNER | OUTSIDECORNER | STEP] [LENGTHSUM maxLength]]
   |[MAXEDGES maxEdges 
     [EXCEPTRECTANGLE]
     [ MINADJACENTLENGTH minAdjLength 
         [CONVEXCORNER [EXCEPTWITHIN exceptWithin]
         |CONCAVECORNER
         |THREECONCAVECORNERS [CENTERWIDTH width]
         |minAdjLength2]
     | MINBETWEENLENGTH minBetweenLength
         [EXCEPTSAMECORNERS]
     | NOADJACENTEOL eolWidth ]
         [EXCEPTADJACENTLENGTH minAdjLength
         |MINADJACENTLENGTH minAdjLength]
         [CONCAVECORNERS]
     | NOBETWEENEOL eolWidth
     | CONCAVEANDCONVEX]
    ] ; " ;

Where:

All the other keywords are the same as the existing LEF routing layer MINSTEP syntax.

CONCAVEANDCONVEX

Specifies that the rule applies only if all of the involved edges are between a concave corner and a convex corner.

CONCAVECORNER

Specifies if a concave corner is between two convex corners, and if one of the length of the edges to form the concave corner is less than minAdjLength, then the other length must be greater than or equal to the minStepLength.

This has similar definition as CONVEXCORNER where the corner conditions are reversed.

CONCAVECORNERS

Specifies that the adjacent EOL minimum step rules only apply if both of the neighbor edges of the EOL have concave corners at the other end.

EXCEPTADJACENTLENGTH minAdjLength

Indicates that the adjacent EOL minimum step rule does not apply if the other neighbor edge of the minstep edge has length greater than or equal to minAdjLength.
Type: Float, specified in microns

EXCEPTRECTANGLE

Specifies that the rule does not apply on any rectangular shapes.

EXCEPTSAMECORNERS

Indicates that a minBetweenLength length is not required for an edge that has the same type of 90-degree corner at each end (that is, both corners are convex, or both are concave). See Figure 5-91 for an illustration of EXCEPTSAMECORNERS in a MINSTEP rule.

EXCEPTWITHIN exceptWithin

Specifies that if there is a neighbor object, same-net or different-net, is within exceptWithin measured in Euclidean distance from the convex corner or the two adjacent edges, the minstep rule does not apply.
Type: Float, specified in microns

MINADJACENTLENGTH minAdjLength [CONVEXCORNER | minAdjLength2]

Indicates that the edges adjacent to min-step edges that are less than minStepLength must be greater than or equal to minAdjLength in length in order to be allowed; otherwise, it is considered a violation.If 0 is specified in minAdjLength, which only works along with CONCAVECORNER or CONVEXCORNER, it has a special meaning that the adjacent edge length condition is ignored and both the edges of the rule must be greater than or equal to minStepLength. In addition, the concave or convex corner does not need to be sandwiched between two convex or concave corners.
If minAdjLength2 is specified, then one adjacent edge must be greater than or equal to minAdjLength and the other adjacent edge must be greater than or equal to minAdjLength2. See Minimum Step Rule Examples.
Type: Float, specified in microns

The CONVEXCORNER keyword indicates that if a convex corner is between two concave corners, and if one of the length of the edges to form the convex corner is less than minAdjLength, then the other length must be greater than or equal to minStepLength.

MINADJACENTLENGTH minAdjLength

Specifies that the adjacent EOL minimum step rule applies only if the other neighbor edge forming a concave corner with the minimum step edge has length greater than minAdjLength. See Figure 5-95.
Type: Float, specified in microns

MINBETWEENLENGTH minBetweenLength

Indicates that one of the edges between min-step edges that are less than minStepLength must be greater than or equal to minBetweenLength in length in order to be allowed; otherwise, it is considered a violation.
Type: Float, specified in microns

NOADJACENTEOL eolWidth

Indicates that the adjacent edges to min-step edges less than minStepLength must not be EOL edge with length less than eolWidth in order to be allowed; otherwise, it is considered a violation. In addition, MAXEDGES 1 should be defined along with NOADJACENTEOL.
Type: Float, specified in microns

NOBETWEENEOL eolWidth

Indicates that the edge between two minstep edges less than  minStepLength must not be a EOL edge with length less than eolWidth. In addition, MAXEDGES 1 should be defined along with NOBETWEENEOL.
Type: Float, specified in microns

THREECONCAVECORNERS [CENTERWIDTH width]

Specifies that if a polygon has consecutive edges having three concave corners with two convex corners between them in a stair case, it is a violation if one of the edge touching the middle concave corner has length less than minStepLength and the other edge has length less than minAdjLength. If CENTERWIDTH is specified, it is only a violation if the width of both of the edges of the middle concave corner is less than or equal to width. See Figure 5-100.
Type: Float, specified in microns

Minimum Step Rule Examples

Opposite EOL Spacing Rule

An opposite EOL spacing rule can be used to define spacing on a wire with two neighbor wires on the opposite edges.

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

PROPERTY LEF_CDN_OPPOSITEEOLSPACING 
“OPPOSITEEOLSPACING [SAMEMASK] WIDTH width ;” ;
     ENDWIDTH eolWidth [MINLENGTH minLength]
     [JOINTWIDTH jointWidth] JOINTLENGTH spanLength
         [JOINTTOEDGEEND jointToEdgeEndLength]
         [JOINTEXTENSION jointExtension]
         [JOINTCORNERONLY]
     [SIDELENGTH length[TOSIDE toSideLength]]
     [SIDEEXTENSION sideExtension [TOSIDE toSideExtension]]
     [SIDEEDGELENGTH sideEdgeLength]
     [PRL prl]
     {[EXCEPTEDGELENGTH edgeLength [PRL maxPRL]]}...
     ENDTOEND endSpacing endSpacing [PRL individualPrl]
     ENDTOJOINT endSpacing jointSpacing [PRL individualPrl]
     JOINTTOEND jointSpacing endSpacing [PRL individualPrl]
     JOINTTOJOINT jointSpacing jointSpacing [PRL individualPrl]
     [SIDETOEND sideSpacing endSpacing [PRL individualPrl]
     SIDETOJOINT sideSpacing jointSpacing] [PRL individualPrl]
     [JOINTTOSIDE jointSpacing sideSpacing] [PRL individualPrl]
     [SIDETOSIDE sideSpacing sideSpacing] [PRL individualPrl]
       ;" ;

Where:

OPPOSITEEOLSPACING

Defines the spacing requirements on a wire with two neighbor wires on opposite edges that have a projected parallel run length greater than 0. The neighbor wires are classified either as a EOL or a T or L joint.

SAMEMASK

Specifies that the rule applies only if all three objects to trigger the rule belong to the same mask.

WIDTH width

Specifies that the rule applies only if the width of the middle wire is less than width.
Type: Float, specified in microns

ENDWIDTH eolWidth [MINLENGTH minLength]

Specifies that the rule applies only if the neighbor end-of-line has width less than eolWidth.

MINLENGTH indicates that the edge is only an end when the end-of-line length is greater than or equal to minLength along both the sides. In other words, if end-of-line length is less than minLength along any one side, it is not an end, but may be a joint.
Type: Float, specified in microns

JOINTEXTENSION jointExtension

Specifies the extension on both sides of a joint to be jointExtension. The extension should be treated as if it is a part of the joint.
Type: Float, specified in microns

[JOINTWIDTH jointWidth] JOINTLENGTH spanLength
[JOINTTOEDGEEND jointToEdgeEndLength]

Specifies that the neighbor wire end edge is a joint if its width is less than jointWidth, if specified, or less than eolWidth, its span is greater than spanLength, and it is not a EOL edge.

If JOINTTOEDGEEND is specified, then at least one of the distances from the end points of the joint to the ends of the edge, that contain the joint, must be less than or equal to  jointToEdgeEndLength. A T or L configuration (see Figure 5-101) is a typical joint. However, joints are not restricted to such configurations only. A joint can be any edge that fulfills the above definition.
Type: Float, specified in microns

JOINTLENGTH spanLength

Specifies that the neighbor wire end edge is a joint if it has width less than eolWidth and span greater than spanLength, and it is not an EOL, that is, it is either a T or L joint pattern.
Type: Float, specified in microns

{EXCEPTEDGELENGTH edgeLength [PRL maxPRL]}...

Specifies that the rule does not apply if both the end or joint neighbor edges have a length greater than and equal to edgeLength and projected parallel run length is less than and equal to maxPRL, if PRL is also specified. At the most, two such statements can be specified and supported.
Type: Float, specified in microns

ENDTOEND endSpacing endSpacing

ENDTOJOINT endSpacing jointSpacing

JOINTTOEND jointSpacing endSpacing

JOINTTOJOINT jointSpacing jointSpacing

Specifies the spacing between the neighbor edges to the middle wire. There are four groups of two spacings. The keywords define the category of the neighbors, either as an end or a joint.  For example, in the case of ENDTOJOINT, the first spacing, endSpacing, specifies the minimum spacing between the end neighbor edge to the middle wire, and the second spacing, jointSpacing, specifies the minimum spacing between the joint neighbor edge to the middle wire. To satisfy the rule, for both end/joint neighbors, either both the neighbor spacings must be greater than and equal to the minimum of the specified spacings, or at least one neighbor spacing must be greater than and equal to the maximum of the specified spacings in ENDTOEND or JOINTTOJOINT. For end and joint neighbors, both ENDTOJOINT and JOINTOTEND statements must be fulfilled individually. To fulfill one statement either joint spacing greater than or equal to jointSpacing, or end spacing greater than or equal to endSpacing, must be true.
Type: Float, specified in microns (for all values)

JOINTCORNERONLY

Specifies that the joint must form a joint corner, which is a convex corner consisting of two consecutive joints.  

JOINTTOSIDE jointSpacing sideSpacing

Specifies a spacing requirement similar to SIDETOJOINT, but having joint spacing to be the first spacing.
Type: Float, specified in microns

PRL prl

Specifies that the rule only applies if the projected parallel run length of a wire and the two neighbor wires is greater than prl.  If prl is negative, it is similar to extending the end, joint, or side edges by abs(prl) in a WITHIN style.
Type: Float, specified in microns

PRL individualPrl

Specifies that the parallel run length on the given END, JOINT, and SIDE combination must be greater than the specified individualPrl value to trigger the rule. If it is not specified on certain combinations, those combinations would be checked against the global prl.
Type: Float, specified in microns

SIDEEDGELENGTH sideEdgeLength

Specifies that a side fulfilling other conditions must also be an edge with length greater than the sideEdgeLength.
Type: Float, specified in microns

SIDEEXTENSION sideExtension [TOSIDE toSideExtension]

Specifies the extension of a side of EOL edge to be toSideExtension only in the direction going beyond the EOL edge in case of SIDETOSIDE, and this extension definition is only applied to one of the SIDE only while the other SIDE would equivalent to having zero extension. The extension should be treated as if it is part of the side. The sideExtension is still used for SIDE to END or JOINT cases.
Type: Float, specified in microns

SIDELENGTH length [TOSIDE toSideLength]

Specifies the length on the sides of a EOL edge to be toSideLength in case of SIDETOSIDE, and this length definition is only applied to one of the SIDE only while the other SIDE will be equivalent to having zero length. The length is still used for SIDE to END or JOINT cases.
Type: Float, specified in microns

SIDETOEND sideSpacing endSpacing
SIDETOJOINT sideSpacing jointSpacing

Specifies the spacing between a side of a EOL edge defined in SIDELENGTH, which must be specified along with these constructs, to a wire which has a neighbor end or joint on the opposite side with a certain spacing. The spacings have similar definitions of jointSpacing and endSpacing.
Type: Float, specified in microns

SIDETOSIDE sideSpacing sideSpacing

Specifies a spacing requirement between two sides of a EOL edge with a middle wire. In addition, any defined PRL value is ignored when considering SIDETOSIDE spacing.
Type: Float, specified in microns

Opposite EOL Spacing Examples

Pin Connect Blockage Rule

You can create a pin connect blockage rule to define a blockage area when a wire is connected to pins on a redistribution (RDL) layer.

You can create a pin connect blockage rule by using the following property definition:

PROPERTY LEF_CDN_PINCONNECTBLOCKAGE
"PINCONNECTBLOCKAGE size ENCLOSEDLENGTH enclosedLength
; " ;

Where:

PINCONNECTBLOCKAGE size ENCLOSEDLENGTH enclosedLength

Specifies a blockage area when a wire is connected to any pin on the RDL layer. The blockage is formed by expanding along the given size value on the connected corners. Other corners or through wires, such as 45-degree wires, cannot overlap with the blockage. However, another corner connection formed between another wire connected to the pin is allowed. Any enclosed empty area (that is, a dough-nut hole formed by the metal) would have a length along the pin edge that is greater than or equal to enclosedLength if it overlaps with the blockage area.
Type: Float, specified in microns

Pin Connect Blockage Rule Example

Pitch Rule

You can create a pitch rule to define non-uniform pitch or track on layers, whose preferred direction must the same as the direction of the standard cell rows.

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

PROPERTY LEF_CDN_PITCH
"PITCH {distance | xDistance yDistance } [FIRSTLASTPITCH firstLastPitch]
; " ;

All other keywords are the same as the existing LEF routing layer PITCH syntax.

Where:

FIRSTLASTPITCH firstLastPitch

Specifies a non-uniform pitch/track on this layer, whose preferred direction must be in the same direction as that of the standard cell rows (normally horizontal). The routing tracks are repeated for every standard-cell row (see example below).  The firstLastPitch defines the distance of the first and last tracks from the standard-cell row boundary and pitch value on this layer defines the distance of the intermediate tracks.  In other words, subtracting the cell row height by 2 * firstLastPitch should be divisible by pitch value on this layer. The pitch value of the property should be identical with the pitch value in the native/regular PITCH statement. If not, the pitch value of the property will be honored.
Type: Floats, specified in microns

Pitch Rule Examples

Protrusion Width Rule

You can use the protrusion width rule for a protrusion wire, connected to a wire, that has width greater than or equal to the specified width, or whose length is greater than or equal to the specified length.

You can define a protrusion width rule by using the following property definition:

PROPERTY LEF_CDN_PROTRUSIONWIDTH
"PROTRUSIONWIDTH width1 
     {LENGTH length WIDTH width2
     |{WIDTH width2
         {MINSIZE {minWidth minLength | minLength
             CUTCLASS className {FROMABOVE | FROMBELOW}} 
         | MINLENGTH minLength
             [EXCEPTCUT cutDistance[FROMABOVE | FROMBELOW]]}...}
     ; " ;

Where:

All other keywords are same as the existing LEF routing layer PROTRUSIONWIDTH syntax.

EXCEPTCUT cutDistance [FROMABOVE | FROMBELOW]

Specifies that if there is a cut of any cut classes in above, below, or either cut layer and if FROMABOVE, FROMBELOW or none is specified less than or equal to the cutDistance from wire with width greater than or equal to the width2, then the rule does not apply.
Type: Float, specified in microns

MINSIZE minWidth minLength

Specifies that it is a violation if the area of protruded wire with width greater than or equal to width1 outside of the wide wire of width greater than or equal to width2 does not enclose a size of minWidth minLength. The rule does not apply if there is no such area. See Figure 5-112.
Type: Float, specified in microns

MINSIZE minLength CUTCLASS className {FROMABOVE | FROMBELOW}

Specifies that it is a violation if the area outside the wide wire of width greater than or equal to width2 does not enclose a size of width1 minLength, and the protruded area contains one and only one cut with cut class of className, either on the above or below cut layer determined by ABOVE/BELOW. It is not a violation if multiple cuts share common metal on both the above and below layers, irrespective of whether they are in the protruded or wide wire. See Figure 5-113.

Type: Float, specified in microns

{WIDTH width2 MINLENGTH minLength}...

Specifies that when a protrusion wire is connected to a wire with width greater than or equal to width2, then it must have length greater than or equal to the minLength and width greater than or equal to width1.
Type: Float, specified in microns

Protrusion Width Rule Examples

Figure 5-114 Illustration of Protrusion Width Rule with WIDTH and MINSIZE

Rectangle Only Rule

Rectangle only rules can be used to indicate that a layer allows rectangular objects only.

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

PROPERTY LEF_CDN_RECTONLY
"RECTONLY [EXCEPTNONCOREPINS]
     [EXCEPTRIGHTWAYWIDTH maxWidth]
     [PARTIALTRACKS]
     ; " ;

Where:

EXCEPTNONCOREPINS

Specifies that the rectangular object check requirement is exempted for a connection to the pins that are not in a standard cell (with CLASS CORE). In other words, the connection of a default-width wire to a wide I/O pad or block pin is allowed. However, I/O pins are not exempted, and they are still subjected to the rectangular object check.

EXCEPTRIGHTWAYWIDTH maxWidth

Specifies that a rectilinear shape is exempted from the rectangular object check requirement if all of the right way width, which is in the non-preferred direction on the layer, is less than or equal to maxWidth.

Type: Float, specified in microns

PARTIALTRACKS

Specifies that the RECTONLY behavior is required only on certain tracks on the layer. A separate command would define which subset of the tracks would allow only rectangular shapes. If that command is not run properly, no tracks would have the rectangular-shape-only tag and RECTONLY would not be checked on the layer. Any object that overlaps or touches a track with RECTONLY must be a rectangle.

RECTONLY

Specifies that the layer can only allow rectangular objects.  In other words, rectilinear shapes with jogs or concave corners are illegal.

Type: Float, specified in microns

Rectangle Only Rule Example

Figure 5-116 Illustration of Rectangle Only Rule

Region Rule

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

You can use the following property definition:

PROPERTY LEF_CDN_REGION
  “REGION regionLayerName BASEDLAYER routingLayerName
  ; ” ;

Where:

REGION regionLayerName BASEDLAYER routingLayerName

Specifies a set of region- or area-based rules on a routing layer routingLayerName. 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 routing layer with REGION are applied to the corresponding areas of regionLayerName on routingLayerName. The areas outside routingLayerName honor the set of rules on the given routing 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 rectangular object overlapping region R1 should have spacing of 0.7 and a rectangular object outside region R1 should have spacing of 0.5. Non-rectangular object in region R1 would still follow 0.8 and any other rules on layer M1 (without REGION) would also be applied on region R1:

LAYER R1
 TYPE MASTERSLICE ;
 PROPERTY LEF_CDN_TYPE “TYPE REGION ; ” ;
END R1
...
LAYER M1
 TYPE ROUTING ;
 ...
 AREA 0.5 ;
 PROPERTY LEF_CDN_AREA “AREA 0.8 EXCEPTRECTANGLE ; “ ;
 ...
END M1
LAYER M1R1
 TYPE ROUTING ;
 PROPERTY LEF_CDN_REGION “REGION R1 BASEDLAYER M1 ; ” ;
 ...
 AREA 0.7 ;
 ...
END M1R1

Figure 5-117 Illustration of Region Rule

Right Way on Grid Only Rule

The right way on grid only rule can be used to specify that the wires on the preferred routing direction of the layer must be on grid/track.

You can create a right way on grid only rule by using the following property definition:

PROPERTY LEF_CDN_RIGHTWAYONGRIDONLY
"RIGHTWAYONGRIDONLY [CHECKMASK]
    [EXCEPTWIDTH exceptMinWidth]
    ; " ;

Where:

CHECKMASK

Specifies that the mask/color of the wires on the preferred routing direction should be checked against the track color. For default-width wires, the wire and track color should be the same. If wide wires could block fewer tracks based on spacing by taking the reverse track color, the wire color should be the reverse of the track color.

EXCEPTWIDTH exceptMinWidth

Specifies that the on-grid wire checking does not apply if the width of the wire is greater than exceptMinWidth.
Type: Float, specified in microns

RIGHTWAYONGRIDONLY

Specifies that the wires on the preferred routing direction must be put on a grid/track.

Span Length Enclosure Spacing Rule

A span length enclosure spacing rule can be used to specify spacing on an edge with a certain span length and edge length having a cut with a certain extension on that edge to any wires with given PRL.

You can create a span length enclosure spacing rule by using the following property definition:

PROPERTY LEF_CDN_SPANLENGTHENCLOSURESPACING 
"SPANLENGTHENCLOSURESPACING spacing 
     SPANLENGTH spanLength MINLENGTH minLength
     {FROMABOVE|FROMBELOW} ENCLOSURE enclosure
     PRL prl 
     ; " ; 

Where:

SPANLENGTHENCLOSURESPACING spacing
SPANLENGTH spanLength MINLENGTH minLength
{FROMABOVE|FROMBELOW} ENCLOSURE enclosure
PRL prl

Specifies the spacing of an edge with span length greater than or equal to spanLength to any parallel edge of a wire with a common parallel run length greater than prl, which must be zero or a positive value if:

  • Both edges have length greater than minLength, where the edge length is the entire edge, which may be longer than the portion having span length greater than or equal to spanLength.

And

  • The edge with span length greater than or equal to spanLength has a cut in the range of the common parallel run length with the neighbor edge from above or below this layer, depending on whether FROMABOVE or FROMBELOW is specified, with enclosure less than enclosure from that edge.

Type: Float, specified in microns

Span Length Enclosure Spacing Rule Example

Span Length Table Rule

A span length table rule can be used to specify all the allowable legal span lengths on the routing layer.

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

PROPERTY LEF_CDN_SPANLENGTHTABLE 
"SPANLENGTHTABLE {spanLength} ...  [MASK maskNum][WRONGDIRECTION]
     [ORTHOGONAL length] 
     [EXCEPTOTHERSPAN otherSpanlength
     | {OTHERSPAN otherSpanLength 
           [MINSPANLENGTH minSpanLength}...] 
  ; " ; 

Where:

MASK maskNum

Specifies that the span length rule applies only on the given mask of the current layer. maskNum must be a positive integer, and most applications support only the values 1, 2, or 3.

ORTHOGONAL length

Specifies that the length between two inside facing corners of a rectilinear object must be greater than or equal to the length.

Type:  Float, specified in microns

{OTHERSPAN otherSpanLength MINSPANLENGTH minSpanLength}...

Specifies that if the span length on the orthogonal direction of the span length being checked is less than or equal to otherSpanlength, the span length being checked needs to be only greater than or equal to the minSpanLength. In addition, if the span length is smaller than minSpanLength but is exactly equal to one of the values in spanLength, it is also legal. If multiple OTHERSPAN and SPANLENGTH are specified, the first otherSpanLength that the current span length is less than or equal to would be applied. This construct must be defined on a layer with RECTONLY. In a polygon shape, the span length in the orthogonal direction could be ambiguous.

Type: Float, specified in microns

EXCEPTOTHERSPAN otherSpanlength

Indicates that the span length rule only applies if the span length on the perpendicular direction is greater than the specified otherSpanlength. This construct must be defined on a layer with RECTONLY. Otherwise, the span length in the orthogonal direction could be ambiguous in a polygon shape.
Type:  Float, specified in microns

SPANLENGTHTABLE {spanLength)}...

Specifies all of the allowable legal span lengths on the routing layer. All of the given span lengths are exact values, except for the last one, which is greater than equal to the value. All of the possible span lengths of an object in both directions should be checked against the given span length values.

If MASK is not specified, at most two SPANLENGTHTABLE spacing tables can be defined for a layer - one with WRONGDIRECTION and the other without.

If MASK is specified, each mask for the layer can have separate SPANLENGTHTABLE spacing tables with and without WRONGDIRECTION.
Type: Float, specified in microns

WRONGDIRECTION

Specifies all of the allowable legal span lengths in the direction parallel to the specified direction in DIRECTION on a Manhattan routing layer.  

Note that using WRONGDIRECTION changes the interpretation of any wrong-way routing widths in the DEF NETS section. If WRONGDIRECTION is specified, then any wrong-way routing in the DEF NETS section will use the WRONGDIRECTION width for that layer unless the net or route has a NONDEFAULTRULE with a WIDTH greater than the WRONGDIRECTION width. But, the implicit default route-extension is still half of the preferred direction width.

Some older tools may not understand this behavior. Normally, they will still read/write and round-trip the DEF routing properly, but will not understand that the width is slightly larger for wrong-way routes. If these tools check wrong-way width, then the DRC rules may flag false violations. RC extraction with the wrong width will also flag errors, although wrong-way routes are generally short and the width difference is small, so the RC error is normally negligible.

Span Length Table Rule Examples

EOL Spacing Rule

An EOL spacing rule ensures that Optical Proximity Correction (OPC) can be performed without interference between the OPC shapes added at the EOLs.

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

PROPERTY LEF_CDN_SPACING 
  "SPACING eolSpace
     ENDOFLINE eolWidth
     [{EXACTWIDTH]
     [WRONGDIRSPACING wrongDirSpace] 
     {[OPPOSITEWIDTH oppositeWidth]
      WITHIN eolWithin [wrongDirWithin]
      [SAMEMASK] 
      [EXCEPTEXACTWIDTH exactWidth otherWidth]
      [FILLCONCAVECORNER fillTriangle]
      [WITHCUT [CUTCLASS cutClass] [ABOVE] withCutSpace 
         [ENCLOSUREEND enclosureEndWidth 
            [WITHIN enclosureEndWithin]]] 
      [ENDPRLSPACING endPrlSpace PRL endPrl]
      [ENDTOEND endToEndSpace [oneCutSpace twoCutSpace]
        [EXTENSION extension [wrongDirExtension]]
        [OTHERENDWIDTH otherEndWidth]] 
      [MAXLENGTH maxLength | MINLENGTH minLength [TWOSIDES]] 
      [EQUALRECTWIDTH]
      [PARALLELEDGE [SUBTRACTEOLWIDTH] parSpace 
          WITHIN parWithin [PRL prl]
          [MINLENGTH minLength] [TWOEDGES]
          [SAMEMETAL][NONEOLCORNERONLY]
          [PARALLELSAMEMASK]]
      [ENCLOSECUT [BELOW | ABOVE] encloseDist
         CUTSPACING cutToMetalSpace [ALLCUTS]]
     | TOCONCAVECORNER [MINLENGTH minLength]
         [MINADJACENTLENGTH 
            {minAdjLength | minAdjLength1 minAdjLength2}]
     | TONOTCHLENGTH notchLength
}
  ;..." ;

Where:

The keywords SPACING (including ENDOFLINE and WITHIN), PARALLELEDGE, and TWOEDGES are the same as the existing LEF syntax.

ENCLOSECUT [BELOW | ABOVE] encloseDist CUTSPACING cutToMetalSpace [ALLCUTS]

Indicates that the rule only applies if there is a cut below or above this metal that is less than encloseDist from the end-of-line edge and the cut-edge to metal-edge space beyond the EOL edge less than cutToMetalSpace. If there is more than one cut connecting the same metal shapes above and below, only one cut needs to meet this rule, unless ALLCUTS is also specified which checks the rule against all of the cuts. (See Figure 5-129, and Figure 5-131.).

If you specify BELOW, the encloseDist and cutToMetalSpace is checked for the cut layer below this routing layer. If you specify ABOVE, they are checked for the cut layer above this routing layer. If you specify neither, the rule applies to both adjacent cut layers.
Type: Float, specified in microns (for both values)

ENCLOSUREEND enclosureEndWidth [WITHIN enclosureEndWithin]

Specifies that the EOL spacing rule applies to a EOL edge touching a via cut with length equal to the wire width that is less than enclosureEndWidth.

The WITHIN keyword specifies the within search distance for a EOL edge touching a via cut to be enclosureEndWithin instead of eolWithin.
Type: Float, specified in microns

ENDPRLSPACING endPrlSpace PRL endPrl

Specifies that endPrlSpace is applied between the end-of-line (EOL) edge to any neighbor wire with PRL greater than 0 but less than or equal to endPrl. Otherwise, eolSpace is applied to the end-to-line situation.

Type: Float, specified in microns

ENDTOEND endToEndSpace [oneCutSpace twoCutSpace]

Specifies the two EOL spacings.  For end-to-end situation when there is a parallel run length greater than 0 between the two EOL edges with eolWithin extension on the checking EOL edge, endToEndSpace is applied.  Otherwise, eolSpace is applied to end-to-line situation.  

An end-to-end situation with one of the EOL edge touching a via cut (and the other does not touching a via cut) must have spacing greater than or equal to oneCutSpace. If both EOL edges touching a via cut, the spacing must be greater than or equal to twoCutSpace. These additional spacing values must be specified along with WITHCUT.
Type: Float, specified in microns

EQUALRECTWIDTH

Indicates that if the length of the EOL edge is larger than the wire width, the rule does not apply. If there are multiple EOL statements with the EQUALRECTWIDTH keyword for a given layer,  they must all have the EQUALRECTWIDTH keyword.

EXACTWIDTH

Specifies that this end-of-line spacing rule only applies if the edge width/length is exactly equal to eolWidth.  This construct would typically make sense only if WIDTHTABLE or SPANLENGTHTABLE is also defined on the layer, and the end-of-line spacing rule will only be triggered for one of the discrete widths.

EXTENSION extension [wrongDirExtension]

Specifies the extension on two EOL edges facing each other as extension. The wrongDirExtension variable specifies the extension on two EOL edges parallel to the specified direction in DIRECTION on a Manhattan routing layer. The end to end spacing is applied as if the extensions are part of the EOL edges. When only the extensions have projected parallel run length, but the EOL edges do not, the end to end spacing still applies.
Type: Float, specified in microns

EXCEPTEXACTWIDTH exactWidth otherWidth

Specifies that the end-of-line spacing rule does not apply if the EOL edge has width/length exactly equal to exactWidth and the width/length of the other neighbor edge is less than or equal to the otherWidth. See Figure 5-137.
Type: Float, specified in microns

FILLCONCAVECORNER fillTriangle

Specifies that the EOL to any neighbor concave corners should be filled by a triangle with value of fillTriangle along the edges to form the corner before spacing is checked. See Figure 5-136.
Type: Float, specified in microns

MAXLENGTH maxLength

Indicates that if the EOL is more than maxLength along both sides, the rule does not apply. (See Figure 5-130.)
Type: Float, specified in microns

MINADJACENTLENGTH {minAdjLength |  minAdjLength1 minAdjLength2}

Specifies that the EOL to concave corner spacing rule applies only if both of the edge lengths forming the concave corner are greater than minAdjLength, or one of the edge length is greater than minAdjLength1 and the other edge length is greater than minAdjLength2. See Figure 5-134.
Type: Float, specified in microns

MINLENGTH minLength

Indicates that if the EOL length is less than minLength along both sides, the rule does not apply.
Type: Float, specified in microns

MINLENGTH minLength [TWOEDGES]

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. If TWOEDGES is specified, the EOL rule applies only if there are two parallel edges on each side of the EOL edge that meet the PARALLELEDGE.
Type: Float, specified in microns

NONEOLCORNERONLY

Specifies that the parallel edge neighbor wire must contain a corner that does not belong to another EOL edge.

OPPOSITEWIDTH oppositeWidth

Indicates that the rule applies only if a wire beyond the end of the line edge has a perpendicular span to the EOL edge less than oppositeWidth.
Type: Float for all parameters, specified in microns

OTHERENDWIDTH otherEndWidth

Indicates that the rule only applies if the width of the other wire is less than the otherEndWidth.

PARALLELEDGE [SUBTRACTEOLWIDTH] parSpace WITHIN parWithin

Indicates that the EOL rule applies only if there is a parallel-edge less than parSpace away that is also less than parWithin from the end of the wire.

PARALLELSAMEMASK

Specifies that the end-of-line spacing rule only applies if there is a side neighbor having the same-mask of the wire with the EOL edge found in the side search window. Having a different-mask side neighbor in the search is irrelevant.

PRL prl

Indicates that the end-of-line (EOL) spacing rule applies only if the side neighbor and the neighbor beyond the EOL edge have parallel run length greater than the specified prl after extending by the WITHIN values. When there are two nearby EOL edges on opposite or orthagonal sides, their search window for the side neighbor could be merged when each of the individual EOL edges has a neighbor beyond the EOL within eolSpace, and the PRL is determined by the merged window.
Type: Float, specified in microns

SAMEMASK

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

The SAMEMASK keyword can only be specified with MINLENGTH, OPPOSITEWIDTH, and ENDTOEND, or PARALLELEGDE keywords.

SAMEMETAL

Specifies that the EOL spacing rule applies only if the neighbors on the side(s) of and beyond the EOL edge are connected as same-metal.  In addition, if a side neighbor wire covering the entire length of parWithin, only if it is non-zero, then it will be exempted as a valid neighbor.

SUBTRACTEOLWIDTH

Indicates that the parSpace value should be subtracted by the width of the EOL edge to define the distance required to search for a parallel neighbor edge.

TOCONCAVECORNER

Specifies that the spacing between a EOL edge with width less than eolWidth and a concave corner of neighbor wires must be greater than or equal to spacing.
Type: Float, specified in microns

TONOTCHLENGTH notchLength

Specifies the end-of-line spacing to a notch with length less than notchLength. See Figure 5-138.
Type: Float, specified in microns

TWOSIDES

Indicates that the rule applies only when the EOL length is greater than and equal to minLength along both sides. In other words, if the EOL length is less than minLength along any one side, the rule does not apply.

WITHCUT [CUTCLASS cutClass] [ABOVE] withCutSpace

Specifies the EOL spacing, withCutSpace, only applies if a EOL edge touches a via cut in either below or above cut layer.  Type: Float, specified in microns

The CUTLCASS keyword defines the EOL spacing rule for certain cutClass only. If CUTCLASS is defined in the routing layer, then CUTCLASS must be specified in the SPACING statement.

The ABOVE keyword defines the EOL spacing rule only applies if a EOL edge touches a via cut in above cut layer.

WITHIN eolWithin [wrongDirWithin]

The wrongDirWithin variable specifies the within distance if a EOL edge is parallel to the specified direction in DIRECTION on a Manhattan routing layer, while eolWithin is the within distance of a EOL edge perpendicular to that direction.
Type: Float, specified in microns

WRONGDIRSPACING wrongDirSpace

Specifies an optional end-of-line spacing for a EOL edge parallel to the specified direction in DIRECTION on a Manhattan routing layer to be wrongDirSpace.
Type:  Float, specified in microns

EOL Spacing Rule Examples

The following example illustrates EOL spacing with exact width:

PROPERTY LEF_CDN_WIDTHTABLE
"WIDTHTABLE 0.05 0.10 … ; " ;
SPACING 0.09 ENDOFLINE 0.051 WITHIN 0.02 ;
PROPERTY LEF_CDN_SPACING  "
SPACING 0.07 ENDOFLINE 0.10 EXACTWIDTH WITHIN 0.04 ; " ;

Figure 5-122 Example of Spacing Rule with EXACTWIDTH

Figure 5-123 EOL Spacing Rule Illustrations

Figure 5-124 EOL Spacing Rule Illustrations

Figure 5-125 EOL Spacing Rule Illustrations

Figure 5-125 illustrates the following EOL spacing rule:

PROPERTY LEF_CDN_SPACING 
   "SPACING 0.10 ENDOFLINE 0.15 WITHIN 0.05 ENDTOEND 0.12 
      MINLENGTH 0.11 TWOSIDES ;" ;

Figure 5-126 EOL Spacing Rule Illustrations

Figure 5-127 EOL Spacing Rule Illustrations with ENDPRLSPACING

Figure 5-128 EOL Spacing Rule Illustrations

Figure 5-129 EOL Spacing Rule Illustrations

Figure 5-130 EOL Spacing Rule Illustrations

Figure 5-131 Examples of EOL Spacing Rule with MaxLength and MinLength

Figure 5-132 Example of More Complex EOL Spacing Rule

Figure 5-133 Example of EOL Spacing Rule with EQUALRECTWIDTH

Convex Corners Spacing Rule

A convex corners spacing rule can be used to define spacing between two convex corners of two parallel wires

You can create convex corners spacing rule by using the following property definition:

PROPERTY LEF_CDN_SPACING
"SPACING {spacing | minSpacing maxSpacing }
     CONVEXCORNERS EXTENSION sideExt orthogonalExt
     [ SAMESIDE extension
     | SINGLE edgeForwardExt cornerForwardExt cornerBackwardExt 
           SPANLENGTH spanLength OPPOSITEWIDTH oppWidth
           OPPOSITEEXTENSION oppSideExt 
               oppForwardExt1 oppForwardExt2 
     | MIDDLEWIRES {0 | 1 | 2} [INCLUDEPARTIALOVERALP] 
           [BACKWARDWIRE sideExt backwardExt]
           [REVERSE
               [EXCEPTWRONGDIRWIRE edgeExt wrongDirEdgeExt]
               [EXCEPTCONVEXCORNER edgeBackwardExt 
                   edgeForwardExt wrongDirEdgeExt]]]
    ; " ;

Where:

BACKWARDWIRE sideExt backwardExt

Specifies that a window is formed from the opposite corners of the two facing convex corners of the rule by extending sideExt along the edge and going backward backwardExt in the orthogonal direction. The rule applies only if there is a neighboring wire overlapping with at least one of the windows. In other words, if there is no wire overlap with either of the windows, the rule is exempted.

Type: Float, specified in microns

EXCEPTCONVEXCORNER edgeBackwardExt edgeForwardExt wrongDirEdgeExt

Specifies that if a convex corner of a default minimum-width wire overlaps with the window formed by extending edgeBackwardExt backward and edgeForwardExt forward in the preferred routing direction and wrongDirEdgeExt in the non-preferred routing direction from a facing neighbor convex corner, it would not be a violation. However, the facing neighbor convex corner must not touch an edge with the default minimum-width end-of-line, with two convex corners.

Type: Float, specified in microns

EXCEPTWRONGDIRWIRE edgeExt wrongDirEdgeExt

Specifies that a wrong-direction wire with a width equal to the minimum width/span length in the preferred routing direction would form a window by extending edgeExt in the preferred routing direction and wrongDirEdgeExt in the non-preferred routing direction based on the wrong direction wire. Any convex corners of a default minimum-width wire overlapping with the window would not be a violation.

Type: Float, specified in microns

INCLUDEPARTIALOVERALP

Specifies that if the neighboring wires merely touch or overlap with the window formed by the two facing convex corners, it is a violation.

MIDDLEWIRES {0 | 1 | 2}

Specifies the number of wires that should be present between the two corners to trigger the rule. By default, two minimum-width neighboring wires with minimum spacing fully across the window formed by the corners must be present to trigger the rule. 0 means that the two corners are projected minimum spacing apart without any middle wires. In addition, the two facing convex corners must belong to wires with default minimum width. The metal search windows would also be extended from the opposite convex corners of the two facing convex corners by sideExt inwardly.

REVERSE

Specifies that the rule has reverse meaning in MIDDLEWIRES. Passing in MIDDLEWIRES would mean violation in REVERSE and vice versa. The rule is still checked on a convex corner belonging to a default minimum-width wire. Violations can only happen on that corner, or the edge containing the corner. For example, if a convex corner cannot find a facing convex corner in the given spacing, it would be a violation. For MIDDELEWIRES 1, if there is no minimum-width neighboring wire with minimum spacing fully across the window formed by the corners, it is a violation. If any one of the search windows formed on the convex corners by the given values in EXTENSION overlaps with a neighbor, it is a violation.

In addition, if multiple statements are defined with REVERSE, it is only a violation if all of the statements with REVERSE fail. If there are multiple statements with some having REVERSE and some without, only the statements with REVERSE would be considered together. The statements without REVERSE would be checked separately. In addition, the statements with REVERSE would not be checked in routing and the DRC checker. They are used by another command, which would use the violation markers for some other special purposes.

SPACING {spacing | minSpacing maxSpacing }
CONVEXCORNERS EXTENSION s
ideExt orthogonalExt

Specifies that the spacing between two convex corners of two parallel wires in the opposite sides facing each other must be greater than or equal to spacing in the direction of the parallel wires if the window formed by the corners has exactly two minimum-width neighboring wires fully across the window. Also, all of the wires, including the ones containing the corners, are exactly minimum spacing apart. If two spacing values are given, the spacing between the two convex corners must be less than or equal to minSpacing or greater than or equal to maxSpacing. If minSpacing is negative, the two convex corners must go past each other by greater than or equal to abs(minSpacing).

In addition, both the search windows by extending sideways away from the two middle neighboring wires by sideExt and forward along the parallel wires by orthogonalExt from the corners do not contain any neighboring wires.

Type: Float, specified in microns

SAMESIDE extension

Specifies that the parallel wires are on the same side instead of facing each other, and the window formed by the corners should be extended by extension along the wire direction. In addition, if there is a neighbor wire touching the edge of the search windows from the convex corners that faces the two middle parallel wires, it is considered a valid neighbor. If a neighbor wire touches any of the other edges of the search windows, the wire is not counted as neighbor.
Type: Float, specified in microns

SINGLE edgeForwardExt cornerForwardExt cornerBackwardExt
SPANLENGTH spanLength OPPOSITEWIDTH oppWidth
OPPOSITEEXTENSION oppSideExt oppForwardExt1 oppForwardExt2

Specifies a forbidden zone of a single convex corner to any wires to be a spacing distance beyond a virtual edge from the corner and extending minimum spacing in the direction parallel to the edge that contains the corner, if all of the conditions described below are met.

The wire containing the corner must have width exactly equal to minimum width and span length greater than or equal to spanLength. There is no wire beyond the edge containing the corner by edgeForwardExt. A search window by extending side way away from the corner by sideExt and backward by orthogonalExt does not contain any neighbor wires. There is a neighbor wire with width less than or equal to the oppWidth fully abutted to a search window formed from the opposite corner by extending minimum spacing on the side and cornerForwardExt and cornerBackwardExt in forward and backward direction. A search window by extending sideways from the opposite side of that neighbor wire by oppSideExt and projected forward from the corner from oppForwardExt1 to oppForwardExt2 must overlap or touch a wire.
Type: Float, specified in microns

Figure 5-140 Illustration of Spacing Rule with CONVEXCORNERS

Figure 5-141 Illustration of Spacing Rule with CONVEXCORNERS

Figure 5-142 Illustration of Spacing Rule with CONVEXCORNERS

Figure 5-143 Illustrations of Spacing Rule with MIDDLEWIRES in CONVEXCORNERS

Figure 5-144 Illustration of Spacing Rule with BACKWARDWIRE in CONVEXCORNERS

Figure 5-145 Illustrations of Spacing Rule with REVERSE in CONVEXCORNERS

Figure 5-146 Illustration of Spacing Rule with EXCEPTWRONGDIRWIRE in CONVEXCORNERS

Figure 5-147 Illustration of Spacing Rule with EXCEPTCONVEXCORNER in CONVEXCORNERS

Perpendicular EOL Spacing Rule

Perpendicular EOL spacing rules can be specified to allow a different spacing rule for perpendicular edges versus opposite edges.

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

PROPERTY LEF_CDN_SPACING 
"SPACING eolSpace EOLPERPENDICULAR eolWidth perWidth ;" ;

Where:

SPACING eolSpace EOLPERPENDICULAR eolWidth perWidth

Indicates that an EOL edge with a width that is less than eolWidth requires spacing greater than or equal to eolSpace beyond the EOL, to a perpendicular edge with a width that is less than perWidth. Typically, eolSpace is slightly larger than the minimum allowed spacing on this layer.
Type: Float, specified in microns (for all values)

Perpendicular EOL Spacing Rule Examples

Figure 5-148 Illustration of Perpendicular EOL Spacing Parameters

Figure 5-149 Example of Perpendicular EOL Spacing Rule

Spacing Area Rule

Area spacing rules can be specified between objects having area less than the maximum area to any other objects in the layer.

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

PROPERTY LEF_CDN_SPACING 
"SPACING minSpacing AREA maxArea ;" ;

Where:

AREA maxArea

Specifies the minimum spacing rule only applies between an object with area less than maxArea to any other objects in the layer.
Type: Float, specified in microns squared

Spacing Area Rule Examples

The following spacing rule indicates that the minimum spacing of an object with area less than 0.03 μm²  is 0.15 μm, while the minimum spacing of another object in the layer is 0.10  μm:

SPACING 0.10 ;
PROPERTY LEF_CDN_SPACING
"SPACING 0.15 AREA 0.03 ;" ;

Figure 5-150 Illustration of Spacing Area Rule

Spacing Layer Rule

Spacing layer rules can be specified for shapes in a TRIMMETAL layer.

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

PROPERTY LEF_CDN_SPACING 
"SPACING minSpacing LAYER trimLayer [TRIMMASK trimMaskNum]
[MASK maskNum] EXCEPTOVERLAP overlapLength 
[TRIMENDSPACING trimEndSpacing [PRL prl]]
;" ;

Where:

PRL prl

Specifies that the trim end edge-to-metal spacing applies when PRL between them is greater than prl. If prl is negative, it is measured in the WITHIN style. The trimEndSpacing would be measured in the MAXXY style in the orthogonal direction.

Type: Float, specified in microns

SPACING minSpacing LAYER trimLayer EXCEPTOVERLAP overlapLength

Specifies that the spacing to shapes in trimLayer, which must be a layer with TYPE TRIMMETAL, should be greater than or equal to minSpacing. However, there is an exemption. When a shape in the current layer overlaps with a trimLayer shape by a length that is greater than or equal to overlapLength as measured in the preferred routing direction in the current layer, the spacing check against that trimLayer shape is skipped. If overlapLength is a positive value, which is larger than the trim width, the metal needs to go beyond the 'overlapLength value – trim width value' for the rule to be exempted. If overlapLength is a negative value and if the two shapes are within the abs(overlapLength) value, the spacing rule is not applied. This is particularly meaningful when the trim metal shape and the metal shape are in a corner-to-corner case.
Type: Float, specified in microns

MASK maskNum

Specifies that spacing to shapes in trimLayer, applies only on the given mask of the current layer. maskNum must be a positive integer, and most applications only support values of 1, 2 or 3.

TRIMENDSPACING trimEndSpacing

Specifies that the metal spacing to the end edge, which is parallel to the preferred routing direction of the metal routing layer, of shapes in trimLayer should be greater than or equal to trimEndSpacing.
Type: Float, specified in microns

TRIMMASK trimMaskNum

Specifies that the spacing for shapes in trimLayer applies only on the given mask of the trimLayer layer. trimMaskNum must be a positive integer, and most applications only support values of 1, 2, or 3.

Spacing Layer Examples

Same Mask Spacing Rule

Same mask spacing rule exists for double patterning technology, when two masks with different spacing requirements among them are applied on one routing layer. This adds a same mask spacing.

You can create same mask spacing rule by using the following property definition:

PROPERTY LEF_CDN_SPACING 
"SPACING minSpacing SAMEMASK ;" ;

Where:

SAMEMASK

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

Same Mask Spacing Rule Examples

Wrong Direction Spacing Rule

Wrong direction spacing rule exists for minimum spacing, which is larger than the right direction spacing, between the long or side edges of two wires with direction perpendicular to the specified direction in DIRECTION on a Manhattan routing layer.

You can create wrong direction spacing rule by using the following property definition:

PROPERTY LEF_CDN_SPACING 
"SPACING minSpacing [WRONGDIRECTION [NONEOL eolWidth]
       [PRL prl]]
       ;" ;

Where:

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

NONEOL eolWidth

Specifies the minimum spacing between two edges having parallel run length greater than 0 with direction perpendicular to the specified direction in DIRECTION on a Manhattan routing layer. Those edges are not end-of-line edges with length less than the eolWidth.
Type: Float, specified in microns

PRL prl

Specifies that the wrong direction spacing is only applied if the two edges have common parallel run length greater than prl in the non-preferred routing direction. If prl is a negative value, the two edges will be checked in WITHIN style.
Type: Float, specified in microns

WRONGDIRECTION

Specifies the minimum spacing, which is larger than the right direction spacing, between two edges having parallel run length greater than 0 with direction perpendicular to the specified direction in DIRECTION on a Manhattan routing layer.

Examples

Notch Length Spacing Rule

Notch length spacing rule exists for any notch with a notch length less than the minimum notch length with notch spacing of less than or equal to the mininmum spacing.

You can create notch length spacing rule by using the following property definition:

PROPERTY LEF_CDN_SPACING 
"SPACING minSpacing NOTCHLENGTH minNotchLength
[EXCEPTWITHIN lowExcludeSpacing highExcludeSpacing]
    [WITHIN within SPANLENGTH sideOfNotchSpanLength
    | {WIDTH | CONCAVEENDS} sideOfNotchWidth
    | NOTCHWIDTH notchWidth]
     ;" ;

Where:

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

CONCAVEENDS sideOfNotchWidth

Specifies the minimum notch length spacing only applies if the width of both sides of the notch must be less than or equal to sideOfNotchWidth. In addition, one of the side edges with length less than minNotchLength must be between two concave corners at the ends, and the length of the opposite edge must be greater than or equal to minNotchLength.
Type: Float, specified in microns

EXCEPTWITHIN lowExcludeSpacing highExcludeSpacing

Specifies that it is legal to have notch spacing greater than or equal to lowExcludeSpacing but less than highExcludeSpacing.
Type: Float, specified in microns

NOTCHWIDTH notchWidth

Specifies that the notch length rule applies only if the width of the notch is less than or equal to notchWidth.
Type: Float, specified in microns

WIDTH sideOfNotchWidth

Specifies that the minimum notch length spacing only applies if the width of at least one side of the notch is greater than or equal to the specified sideOfNotchWidth.

WITHIN within SPANLENGTH sideOfNotchSpanLength

Specifies that if one of the side edges of the notch is within within distance and any portion of that edge has span length  less than the sideOfNotchSpanLength and that portion has length greater than or equal to minNotchLength (this has a reverse definition of less than the minNotchLength without WITHIN), the notch spacing must be greater than or equal to the minSpacing. Otherwise, it would be a violation.
Type:  Float, specified in microns

Notch Length Spacing Rule Examples

Notch Span Spacing Rule

Notch span spacing rule exists for any notch with span less than the specified span on both sides.

You can create notch span spacing rule by using the following property definition:

PROPERTY LEF_CDN_SPACING 
"SPACING minSpacing NOTCHSPAN span NOTCHSPACING notchSpacing
EXCEPTNOTCHLENGTH notchLength
; " ;

Where:

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

SPACING minSpacing NOTCHSPAN span NOTCHSPACING notchSpacing
EXCEPTNOTCHLENGTH notchLength

Specifies that any notch with span less than span on both sides and notch spacing less than notchSpacing, the portion of the notch length edge having common parallel run length greater than 0 on the opposite side must have a spacing greater than or equal to minSpacing to any neighbor wire with common parallel run length greater than 0. In addition, multiple consecutive U notches fulfilling the span and notch spacing conditions will be a violation, irrespective of how far the neighbor wires are. The rule does not apply if the minimum notch length is exactly equal to notchLength and the outer edges of the notches have neighbor wires that are greater than or equal to  minSpacing away.
Type: Float, specified in microns

Examples

Jog to Jog Spacing Table Rule

Jog to Jog spacing table rules can be used to define jog or protrusion spacing requirements.

You can define a jog to jog spacing table rule by using the following property definition:

PROPERTY LEF_CDN_SPACINGTABLE
  "SPACINGTABLE JOGTOJOGSPACING jogToJogSpacing
     JOGWIDTH jogWidth SHORTJOGSPACING shortJogSpacing
       {WIDTH width PARALLEL parLength WITHIN parWithin
           [EXCEPTWITHIN lowExcludeSpacing highExcludeSpacing]
            LONGJOGSPACING longJogSpacing
            [SHORTJOGSPACING widthShortJogSpacing]} ... 
  ; " ;

Where:

EXCEPTWITHIN lowExcludeSpacing highExcludeSpacing

Specifies that any wire that is greater than or equal to  lowExcludeSpacing and less than highExcludeSpacing away from the wide wire should be ignored as if it does not exist.
Type: Float, specified in microns

SPACINGTABLE JOGTOJOGSPACING jogToJogSpacing
JOGWIDTH jogWidth SHORTJOGSPACING shortJogSpacing
{WIDTH width PARALLEL parLength WITHIN parWithin
LONGJOGSPACING longJogSpacing }

Specifies jog or protrusion spacing requirements as described below:

Find the last row that a wire with width greater than width has neighbor wires with a parallel run length greater than parLength that is less than parWithin distance away. If there is a jog or protrusion wire/edge in the wide wire or a neighbor wire, with continuous common projected length less than or equal to jogWidth, spacing to the opposite metal must be greater than or equal to shortJogSpacing. If the continous common projected length is greater than jogWidth, then  spacing to the opposite metal must be greater than or equal to longJogSpacing. If there are two or more jog or protrusion wires with continuous common projected length less than or equal to jogWidth and spacing on the jog or protrusion wires is less than longJogSpacing, (projected) spacing in the wire direction of the wide wire between any two jog or protrusion wires must be greater than or equal to jogToJogSpacing. All of the values in the table must be the same or increasing, and longJogSpacing must be larger than shortJogSpacing.
Type: Float, specified in microns

SHORTJOGSPACING widthShortJogSpacing

Specifies individual widthShortJogSpacing for the given width, which would override and has the same meaning as the global shortJogSpacing.
Type: Float, specified in microns

Jog to Jog Spacing Table Rule Examples

Direction Span Length Spacing Table Rule

You can create a direction span length spacing table rule to create a table in which the spacing between two objects depends on the maximum span length of the two objects and their parallel run length.

You can define a direction span length spacing table using the following property definition:

PROPERTY LEF_CDN_SPACINGTABLE
"SPACINGTABLE 
    DIRECTIONALSPANLENGTH [WRONGDIRECTION] 
    [SAMEMASK]
    [EXCEPTJOGLENGTH length [EDGELENGTH] [INCLUDELSHAPE]]
    [EXCEPTEOL eolWidth]
    [EXACTSPANLENGTHSPACING spanLength1 TO spanLength2 
        [PRL prl] {exactSpacing}...]...
    PRL {prl}...
    {SPANLENGTH spanLength 
        [EXACTSPACING exactSpacing
        | SPACINGTOMINSPAN spacingToMinSpan] 
        [EXACTSELFSPACING exactSelfSpacing]
        [NOEXCEPTEOL|EOLSPACING eolspacing] {spacing}...}... 
; " ;

Where:

DIRECTIONALSPANLENGTH PRL {prl}...
{ SPANLENGTH
spanLength {spacing}...}...

Creates a table in which spacing between two objects depends on the span length of the objects and their parallel run length. There must be exactly as many spacing values in each SPANLENGTH row as there are PRL columns.  All of the values, prl, spanLength and spacing must be monotonically increasing. In other words, the prl values must be increasing from left to right, the spanLength values must be increasing from top to bottom. If prl value is negative, the spacing is measured in a MAXXY style. In other words, no neighbor can be within the search window with dimension of abs(prl) and spacing. The spacing values must be the same or increasing from left to right, but could have any value relationship, from top to bottom in the table. To find the required spacing, locate the last row where the individual span length of the two objects is, greater than the table row span length, and the right-most column where the parallel run length of the two objects is, greater than the table column prl, the maximum of the corresponding spacing values is the required spacing. When parallel run length of the two objects is less than or equal to the first PRL value, then these rules do not apply, but some other rules will. In addition, spacing value can be zero, which can typically be defined in negative PRL, indicating that there is no constraint on that object, and spacing requirement of the other object is not checked. See Figure 5-168.
Type:  Float, specified in microns

EOLSPACING eolspacing

Specifies a spacing value that should be applied when the EXCEPTEOL condition is met.

Type: Float, specified in microns

EXACTSELFSPACING exactSelfSpacing

Specifies that two wires with span length that belong to the same row could have exact spacing of exactSelfSpacing. This should not be used on the first row since it would have the same meaning of EXACTSPACING.

EXACTSPACING exactSpacing

Specifies that if the spacing of a wire with span length greater than specified span length of a row with EXACTSPACING and less than or equal to the specified span length of the next row is exactly exactSpacing, and it (or its) neighbor wire has a span length between the specified span length of the first two rows, then it is not a violation. The exactSpacing should be smaller than all of the spacing values on that row, except when the spacing value is zero for a certain PRL, which means that there is no constraint between wires belonging to that row to any other wires with parallel run length less than or equal to the specified value.
Type: Float, specified in microns

EXACTSPANLENGTHSPACING spanLength1 TO spanLength2
[PRL
prl] {exactSpacing}...

Specifies a list of exact spacing values in {exactSpacing}..., which are also allowed between a wire with exact span length of spanLength1 and another wire with exact span length of spanLength2 with parallel run length greater than prl or zero if PRL is not specified. This is in addition to spacing value of spacing in the table. In addition, this construct should not be used along with either EXACTSPACING or EXACTSELFSPACING in individual rows.
Type: Float, specified in microns

EXCEPTEOL eolWidth

Specifies that the directional span length spacing does not apply to EOL edges with width less than the eolWidth.  Those EOL edges should follow the SPACING ENDOFLINE rules.
Type:  Float, specified in microns

EXCEPTJOGLENGTH length [EDGELENGTH] [INCLUDELSHAPE]

Specifies that the minimum default (right-way) spacing would be applied between a wrong way jog with minimum wrong way width and length less than length sandwiched by two right way wires with projected PRL less than or equal to 0 in the wrong way direction in a 'Z' shape and a right way wire. See Figure 5-166.

If INCLUDELSHAPE is specified without EDGELENGTH, this minimum default spacing will also be applied between a wrong way jog with minimum wrong way width and length less than length connected to a right way wire in a 'L' shape and a right way wire.

If EDGELENGTH is specified, length is measured against the length of the edges in the wrong way direction of a wrong way jog in a ‘Z’ shape instead of the entire span length of the jog. If INCLUDELSHAPE is also specified to include an ‘L’ shape exemption, the longest edge length would be the same as the span length of the jog, and the EDGELENGTH construct would have no impact on it.
Type: Float, specified in microns

NOEXCEPTEOL

Specifies that EXCEPTEOL does not apply to the rows that have NOEXCEPTEOL keyword.

SAMEMASK

Specifies that the directional span length spacing rule only applies to objects on the same mask.

SPACINGTOMINSPAN spacingToMinSpan

Specifies that if the spacing of a wire with span length greater than specified span length of a row with SPACINGTOMINSPAN and less than or equal to specified span length of the next row is greater than or equal to spacingToMinSpan, and it (or it’s) neighbor wire has a span length between the specified span length of the first two rows, then it is not a violation, and spacing requirement of the other object is not checked. When the spacing value is zero for a certain PRL, this indicates that there is no constraint between wires belonging to that row to any other wires with parallel run length less than or equal to the PRL value of the first non-zero spacing value. In other words, spacingToMinSpan will not override the zero spacing value in this case. See Figure 5-169.
Type:  Float, specified in microns

WRONGDIRECTION

Specifies that the spacing is applied to wrong direction edges. In other words, the spacing is applied to the direction parallel to the specified direction in DIRECTION on a Manhattan routing layer. You must define two tables - one with WRONGDIRECTION and the other without WRONGDIRECTION. The spacing of the one without WRONGDIRECTION is applied to the direction perpendicular to the specified direction in DIRECTION.

Direction Span Length Spacing Table Rule Examples

Two-Widths Spacing Table Rule

You can create a two-widths spacing table rule to create a table in which spacing between two objects depends on the widths of both the objects.

You can define a two-widths spacing table rule by using the following property definition:

PROPERTY LEF_CDN_SPACINGTABLE
"SPACINGTABLE 
    TWOWIDTHS [WRONGDIRECTION] 
       [SAMEMASK | MASK maskNum] 
       [EXCEPTEOL eolWidth]
       [FILLCONCAVECORNER fillTriangle]
       {WIDTH width [PRL runLength] {spacing} ...} ... 
    ; " ;

Where:

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

EXCEPTEOL eolWidth

Specifies that the two widths table does not apply to EOL edges with width less than eolWidth. Those EOL edges should follow the SPACING ENDOFLINE rules instead.
Type:  Float, specified in microns

FILLCONCAVECORNER fillTriangle

Specifies that any concave corners should be filled by a triangle with value of fillTriangle along the edges to form the corner before minimum spacing of the table is checked. This fill corner operation does not apply to any other spacing values. See Figure 5-170.
Type: Float, specified in microns

MASK maskNum

Specifies that the spacing rule applies only between two wires with the given mask. In addition, the spacing in the table entry is always applied between two wires of the corresponding width values even if there is another wire with any mask between them. maskNum must be a positive integer, and most applications only support the values 1, 2, or 3.
Type: Integer

SAMEMASK

Specifies that spacing applies only to the objects that belong to the same mask. The same mask objects recognize the first spacing table, but not the second one. The spacing in the second table is incorporated in the first one.
Type: Float, specified in microns

WRONGDIRECTION

Specifies the spacings of an edge with direction perpendicular to the specified direction in DIRECTION on a Manhattan routing layer to any other edges on that layer. This has a similar definition in SPACINGTABLE PARALLELRUNLENGTH spacing table.
Type:  Float, specified in microns

Two-Widths Spacing Table Rule Examples

Figure 5-171 Two-Widths Spacing Table Rule with FILLCONCAVECORNER

Figure 5-172 Two-Widths Spacing Table Rule with MASK

Parallel Span Length Spacing Table Rule

Parallel span length spacing table rules can be used to define supplement spacing constraints based on span length of the objects.

You can define a parallel span length spacing table rule by using the following property definition:

PROPERTY LEF_CDN_SPACINGTABLE
  "SPACINGTABLE
     PARALLELRUNLENGTH [DIAGONAL] [WRONGDIRECTION] 
     [SAMEMASK]
     [EXCEPTEOL eolWidth]
     {length}...
     {WIDTH width
           [EXCEPTWITHIN lowExcludeSpacing highExcludeSpacing]
          {spacing}...}... ;
     [SPACINGTABLE 
            INFLUENCE {WIDTH width WITHIN distance SPACING spacing} ... ;]
  ; " ;

Where:

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

DIAGONAL

Specifies that the defined spacing is applied between a diagonal 45-degree wire to any wire in an RDL routing layer.

EXCEPTEOL eolWidth

Specifies that the parallel run length table does not apply to EOL edges with width less than eolWidth. Those EOL edges should follow the SPACING ENDOFLINE rules instead.
Type:  Float, specified in microns

EXCEPTWITHIN lowExcludeSpacing highExcludeSpacing

Specifies that any wire that is at a distance greater than or equal to the lowExcludeSpacing and less than highExcludeSpacing away from the wide wire should be ignored, as if it does not exist.  The conditions lowExcludeSpacing and highExcludeSpacing only apply to spacing if both of them are less than the specified spacing. In other words, spacing between the two wires must not be greater than 0 to less than lowExcludeSpacing and greater than or equal to highExcludeSpacing to less than spacing.
Type: Float, specified in microns

Note that at the most one such SAMEMASK spacing table and another parallel run length spacing table without the SAMEMASK keyword can be defined together.

The length can be negative that will act as extending the edges by abs(length) in a WITHIN style and enforcing spacing in MAXXY style.

PARALLELSPANLENGTH PRL runLength {SPANLENGTH spanLength {spacing}}

Creates a table in which spacing between two objects depends on the span length of both the objects that have a parallel run length greater than runLength. To find the required spacing, a NxN two-dimensional table is used that implicitly has the same span lengths for row and column headings. There must be exactly as many spacing values in each SPANLENGTH row as the number of SPANLENGTH rows. The spanLength values must increase from top to bottom in the table. The spacing values must be the same, or increase from left to right and from top to bottom across the table. Consider two objects with spanLength1 and spanLength2. You need to find the last row where spanLength1 is greater than the table row spanLength, and the right-most column where spanLength2 is greater than the table column spanLength. The intersection of the matching row and column provides the required spacing.

The parallel run length is measured as a sum of lengths between objects. Turning corners may break up the parallel run length thus resulting in inaccurate calculations. These are supplement spacing constraints, in addition to the regular spacing based on wire width.
Type: Float, specified in microns (for all values)

SAMEMASK

Specifies that the spacings only apply to objects belonging to the same mask.
Type: Float, specified in microns

WRONGDIRECTION

Specifies the spacings of an edge with direction perpendicular to the specified direction in DIRECTION on a Manhattan routing layer to any other edges on that layer.
Type: Float, specified in microns

Note that at the most one such spacing table and another parallel run length spacing table without the WRONGDIRECTION keyword can be defined together. In addition, SPACING with WRONGDIRECTION keyword is also allowed on that layer.

With the existence of PARALLELRUNLENGTH WRONGDIRECTION, there is a built-in condition for  PARALLELRUNLENGTH for both with or without WRONGDIRECTION spacing tables. The edge length of an edge having width greater than width must be greater than the default wrong way minimum width (if not defined, use right way minimum width), in order for the spacing in the second and beyond columns to be applied. If edge length condition is not met, the spacing in the first column will be applied independent of parallel run length. This behavior will also work for a combination of a PARALLELRUNLENGTH WRONGDIRECTION and TWOWIDTHS spacing tables. See Figure 5-176.

Spacing Table Rule Examples

Figure 5-174 Illustration of Spacing Table Rule with WRONGDIRECTION

Figure 5-175 Illustration of Spacing Table Rule with EXCEPTWITHIN

Figure 5-176 Illustration of Spacing Table Rule with EXCEPTWITHIN

Two Wires Forbidden Spacing Rule

Two wires forbidden spacing rules can be used to define a list of forbidden spacing ranges between two wires.

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

PROPERTY LEF_CDN_TWOWIRESFORBIDDENSPACING 
"TWOWIRESFORBIDDENSPACING [SAMEMASK | MASK maskNum] 
   {minSpacing maxSpacing}...
   [HORIZONTAL|VERTICAL]
   [IGNOREMIDDLE]
   { MINSPANLENGTH minSpanLength [EXACTSPANLENGTH] 
     MAXSPANLENGTH maxSpanLength [EXACTSPANLENGTH]
    |FIRSTSPANLENGTH spanLength1 spanLength2 
         [OTHERSPANLENGTH otherSpanLength1]
     SECONDSPANLENGTH spanLength3 spanLength4}
         [OTHERSPANLENGTH otherSpanLength2]
    |OFFGRIDONLY minWidth1 maxWidth1 [minWidth2 maxWidth2] }
   PRL prl
   ; “ ;

Where:

TWOWIRESFORBIDDENSPACING {minSpacing maxSpacing}...
MINSPANLENGTH
minSpanLength [EXACTSPANLENGTH]
MAXSPANLENGTH
maxSpanLength [EXACTSPANLENGTH]
PRL
prl

Specifies that one or more set of forbidden spacing between two wires to be greater than or equal to minSpacing and less than or equal to maxSpacing. One of the wires must have a span length greater than or equal to minSpanLength or exactly equal to the given span length if EXACTSPANLENGTH is defined. The other wire must have a span length less than or equal to maxSpanLength or exactly equal to the given span length if EXACTSPANLENGTH is defined. The two wires must also have a parallel run length greater than prl.

Type: Float, specified in microns

FIRSTSPANLENGTH spanLength1 spanLength2
SECONDSPANLENGTH spanLength3 spanLength4

Specifies that the span length of one wire must be greater than or equal to spanLength1 and less than or equal to spanLength2 and the other wire must be greater than or equal to spanLength3 and less than or equal to spanLength4 to trigger the rule.

Type: Float, specified in microns

HORIZONTAL|VERTICAL

Specifies that the check applies only on the given direction on the spacing.

IGNOREMIDDLE

Specifies that any wires between the two wires that trigger the rule do not have any impact. It is as if the middle wires did not exist.

MASK maskNum

Specifies that the forbidden spacing applies only on the given mask. maskNum must be a positive integer, and most applications support only the values 1, 2, or 3.

Type: Integer

OFFGRIDONLY minWidth1 maxWidth1 [minWidth2 maxWidth2]

Specifies that the rule applies only if at least one of the wires in a certain direction is an off-grid wire with width greater than or equal to minWidth1 and less than or equal to maxWidth1 and the other wire has width greater than or equal to minWidth2 and less than or equal to maxWidth2, if minWidth2 and maxWidth2 are specified. HORIZONTAL|VERTICAL must be defined with this construct, and it should be the non-preferred routing direction of the layer. The off-grid rule would be checked only when the width of both wires is in the specified direction. For example, on a vertical preferred routing layer, HORIZONTAL should be defined along with OFFGRIDONLY. Only vertical wires with a horizontal width would be checked for this off-grid rule.

Type: Float, specified in microns

OTHERSPANLENGTH otherSpanLength

Specifies that the rule applies only if the span length in the orthogonal direction is greater than otherSpanLength. OTHERSPANLENGTH should be defined along with either HORIZONTAL or VERTICAL.

Type: Float, specified in microns

SAMEMASK

Specifies that the forbidden spacing rule applies only to two wires on the same mask. This rule is applied independent of whether there is a neighbor wire with a different mask between them.

Two Wires Forbidden Spacing Examples

Voltage Spacing Rule

Voltage spacing rules can be used to define different-net spacing between objects on the metal layer and objects on the metal/cut layer above or below it according to different voltages.

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

PROPERTY LEF_CDN_VOLTAGESPACING 
"VOLTAGESPACING [TOCUT [ABOVE | BELOW]]
   {voltage spacing} ...
     ;...” ; 

Where:

VOLTAGESPACING {voltage spacing} ...

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

TOCUT [ABOVE | BELOW]

Defines the spacing for wires in different voltages in routing layer to all cut vias in adjacent above and below cut layers. If ABOVE or BELOW is specified, the rule only applies to cuts in the above or below cut layer correspondingly.

Type: Float, voltage in volts and spacing in microns

Voltage Spacing Rule Examples

Width Table Rule

You can use width table rules to define all the allowable legal widths on the routing layer.

You can define a width table rule by using the following property definition:

PROPERTY LEF_CDN_WIDTHTABLE 
"WIDTHTABLE {width}... [WRONGDIRECTION] [ORTHOGONAL]
   ;" ;

Where:

ORTHOGONAL

Specifies that one of the right or wrong direction width between two inside corners of a rectilinear object must be greater than or equal to the first width value in the WIDTHTABLE in the corresponding direction, if WIDTHTABLE WRONGDIRECTION is specified. Otherwise, the width between the corners must be greater than or equal to the first width value in the WIDTHTABLE (for both directions) either vertically or horizontally.
Type: Float, specified in microns

WIDTHTABLE {width}...

Defines all the allowable legal widths on the routing layer. All the given widths are exact width values, except for the last one, which is equal to or greater than the value.

The WIDTH syntax should be used to define the default routing width on the layer, which should match one of the values in the WIDTHTABLE statement. In case that the last value of WIDTHTABLE denotes the exact width also, the MAXWIDTH statement with the last value can be used to represent it.

A polygon will be fractured into rectangles, and only the shorter dimension of the rectangles will be checked against the allowable legal widths.

At the most, two WIDTHTABLE spacing tables can be defined, one with WRONGDIRECTION and the other without it.

Type: Float, specified in microns.

WRONGDIRECTION

Specifies that the allowable legal widths are for wires with direction perpendicular to the specified direction in DIRECTION on a Manhattan routing layer.

Note that using WRONGDIRECTION changes the interpretation of any wrong-way routing widths in the DEF NETS section. If WRONGDIRECTION is specified, then any wrong-way routing in the DEF NETS section will use the WRONGDIRECTION width for that layer unless the net or route has a NONDEFAULTRULE with a WIDTH greater than the WRONGDIRECTION width. But, the implicit default route-extension is still half of the preferred direction width.

Some older tools may not understand this behavior. Normally, they will still read/write and round-trip the DEF routing properly, but will not understand that the width is slightly larger for wrong-way routes. If these tools check wrong-way width, then the DRC rules may flag false violations. RC extraction with the wrong width will also flag errors, although wrong-way routes are generally short and the width difference is small, so the RC error is normally negligible.

Width Rule

Width rules can be used to define the default routing width to use for all regular wiring on the layer.

You can define a width rule by using the following property definition:

PROPERTY LEF_CDN_WIDTH 
"WIDTH minWidth [WRONGDIRECTION]
   ;" ;

Where:

WIDTH is the same as the existing routing layer WIDTH syntax.

WRONGDIRECTION

Specifies the default routing width to use for all regular wiring with direction perpendicular to the specified direction in DIRECTION on a Manhattan routing layer.

Note that using WRONGDIRECTION changes the interpretation of any wrong-way routing widths in the DEF NETS section. If WRONGDIRECTION is specified, then any wrong-way routing in the DEF NETS section will use the WRONGDIRECTION width for that layer unless the net or route has a NONDEFAULTRULE with a WIDTH greater than the WRONGDIRECTION width. But, the implicit default route-extension is still half of the preferred direction width.

Some older tools may not understand this behavior. Normally, they will still read/write and round-trip the DEF routing properly, but will not understand that the width is slightly larger for wrong-way routes. If these tools check wrong-way width, then the DRC rules may flag false violations. RC extraction with the wrong width will also flag errors, although wrong-way routes are generally short and the width difference is small, so the RC error is normally negligible.

Width Rule Examples

Wrong Direction EOL Keep Out Rule

You can define a wrong direction EOL keep out rule by using the following property definition:

PROPERTY LEF_CDN_WRONGDIREOLKEEPOUT
  "WRONGDIREOLKEEPOUT edgeExt wrongDirEdgeExt ENDOFLINE eolWidth
       EDGELENGTH minLength maxLength
       ;" ;

Where:

WRONGDIREOLKEEPOUT edgeExt wrongDirEdgeExt ENDOFLINE eolWidth
EDGELENGTH minLength maxLength

Specifies that a wrong-direction wire with a width equal to the minimum width/span length in the preferred routing direction would form a window by extending edgeExt in the preferred routing direction and wrongDirEdgeExt in the non-preferred routing direction based on the wrong direction wire. The wrong-direction wire must have an edge in the non-preferred direction greater than minLength and less than maxLength. In addition, the wrong-direction wire must be part of a rectilinear shape in the form of Z, like a same-metal jog, or L, like a thick via in the orthogonal direction of a wire. Then, the window could not overlap with any EOL with width/length less than eolWidth.

Type: Float, specified in microns

Wrong Direction EOL Keep Out Rule Example

Figure 5-184 Illustration of WRONGDIRECTIONEOLKEEPOUT Rule

Routing Pitch

The PITCH statements define the detail routing grid generated when you initialize a floorplan. The pitch for a given routing layer defines the distance between routing tracks in the preferred direction for that layer. The complete routing grid is the union of the tracks generated for each routing layer.

The spacing of the grid should be no less than line-to-via spacing in both the horizontal and vertical directions. Grid spacing less than line-to-via spacing can result in routing problems and can decrease the utilization results.

The grid should normally allow for diagonal vias. Via spacing on all layers included in the via definition in LEF determines whether or not diagonal vias can be used. The router is capable of avoiding violations between diagonal vias. If you allow diagonal vias, less time is needed for routing and the layout creates a smaller design.


Return to top
 ⠀
X