Product Documentation
Design Data Translators Reference
Product Version IC23.1, November 2023

C


Mapping LEF to the Technology File

LEF Data Map

A Library Exchange Format (LEF) file contains library information for a class of designs. Library data includes layer, via, placement site type, and macro cell definitions. Ensemble uses LEF as the library implementation language to build the technology and macrocell library for a family of designs. The File – Import - LEF and File – Export – LEF commands provide a mechanism for moving library data between the two systems. You can create an OpenAccess library from one or more LEF files.

This chapter maps the LEF file constructs and statements with the translated constructs and statements in the technology file in Virtuoso Studio design environment on OpenAccess.

The LEF file is divided into the following sections. You can specify statements in any order; however, data must be defined before it is used. The LEF statements in each of these sections are mapped to their equivalent technology file statements.

File – Import – LEF and File – Export – LEF do not support the PINPROPERTIES, MIN FEATURE, CROSS TALK, DIELECTRIC, IRDROP, or BEGINEXT statements. Many of these constructs are no longer part of LEF syntax. LEF 5.4 onwards MIN FEATURE, CROSS TALK, DIELECTRIC, IRDROP statements are no longer exist.

For details on each LEF statement, see LEF/DEF 5.6 Language Reference.

The organization of the technology file is different from the way the LEF file is organized. The technology file is organized into the following sections:

For more information on the technology file, see the Technology File and Display Resource File User Guide.

Version of LEF

The VERSION statement indicates the LEF version that was used to create a LEF file. File – Import LEF ignores the VERSION statement. File – Export LEF writes the VERSION statement as the first line of the LEF file.

VERSION number ;

Units

The UNITS statement block describes the units of measurement used in the LEF file and the precision for each measure in database units. The values show how to interpret the numbers in the LEF file. Following is the UNITS block syntax in LEF.

     [UNITS
     [ TIME NANOSECONDS convertFactor ; ]
     [ CAPACITANCE PICOFARADS convertFactor ; ]
     [ RESISTANCE OHMS convertFactor ; ]
     [ POWER MILLIWATTS convertFactor ; ]
     [ CURRENT MILLIAMPS convertFactor ; ]
     [ VOLTAGE VOLTS convertFactor ; ]
     [ DATABASE MICRONS convertFactor ; ]
     [ FREQUENCY MEGAHERTZ convertFactor ; ]
END UNITS ]

The LEF statements in the UNITS section of LEF are mapped to the techParams subsection of the controls section in the technology file.

The syntax of the techParams subsection in the technology file is as follows:

controls(
   techParams(
      ;(parameter value)
      )
   )

Comparison of the UNIT statements in LEF
LEF UNIT Statements Technology File DFII on OpenAccess

TIME NANOSECONDS convertFactor

LEFDEF_TIME_UNIT value

FREQUENCY MEGAHERTZ convertFactor

LEFDEF_FREQUENCY_UNIT value

RESISTANCE OHMS convertFactor

LEFDEF_RESISTANCE_UNIT value

POWER MILLIWATTS convertFactor

LEFDEF_POWER_UNIT value

VOLTAGE VOLTS convertFactor

LEFDEF_VOLTAGE_UNIT value

CURRENT MILLIAMPS convertFactor

LEFDEF_CURRENT_UNIT value

CAPACITANCE PICOFARADS convertFactor

LEFDEF_CAPACITANCE_UNIT value

Examples

Example of LEF UNIT Statements Example of Technology File DFII on OpenAccess
UNITS
  TIME NANOSECONDS 100 ;
  CAPACITANCE PICOFARADS 10 ;
  RESISTANCE OHMS 10000 ;
  POWER MILLIWATTS 10000 ;
  CURRENT MILLIAMPS 10000 ;
  VOLTAGE VOLTS 1000 ;
  FREQUENCY MEGAHERTZ 10 ;
  DATABASE MICRONS 2000 ;

END UNITS

;********************************
; CONTROLS
;********************************
controls(
 techParams(
 ;( parameter           value             )
 ;( ----------          -----             )
  ( LEFDEF_BUSBIT_CHARS    "<>"            )
  ( LEFDEF_ANTENNA_INPUT_GATE_AREA    1.0 )
  ( LEFDEF_USEMINSPACING_OBS    nil     )
  ( LEFDEF_OVERLAP_LAYER_NAME    "OVERLAP"       )
  ( LEFDEF_FREQUENCY_UNIT    10              )
  ( LEFDEF_VOLTAGE_UNIT    1000            )
  ( LEFDEF_CURRENT_UNIT    10000           )
  ( LEFDEF_POWER_UNIT    10000           )
  ( LEFDEF_RESISTANCE_UNIT    10000           )
  ( LEFDEF_CAPACITANCE_UNIT    10              )
  ( LEFDEF_TIME_UNIT    100             )
  ( LEFDEF_DIVIDER_CHARS    ":"             )

) ;techParams

Property Definitions

The PROPERTYDEFINITIONS section of the LEF file lists the properties you can provide to libraries, pins, macros, and vias. Although the PROPERTYDEFINITION statements are not stored in OpenAccess, they are used to validate the PROPERTY attributes on objects when the LEF file is being parsed. Every property used in the LEF file must first be declared in this section of the LEF file. If a property that is not declared in the PROPERTYDEFINITIONS section is encountered, an error message is generated and the property is skipped.

Examples

Example of LEF Property Definition Statements Example of Technology File DFII on OpenAccess
PROPERTYDEFINITIONS
LIBRARY NAME STRING "Cadence96" ;
LIBRARY intNum INTEGER 20 ;
LIBRARY realNum REAL 21.22 ;
PIN TYPE STRING ;
PIN intProp INTEGER ;
PIN realProp REAL ;
MACRO stringProp STRING ;
MACRO integerProp INTEGER ;
MACRO WEIGHT REAL RANGE 1.0 100.0 ;
VIA stringProperty STRING ;
VIA realProperty REAL ;
VIA COUNT INTEGER RANGE 1 100 ;
LAYER lsp STRING ;
LAYER lip INTEGER ;
LAYER lrp REAL ;
VIARULE vrsp STRING ;
VIARULE vrip INTEGER ;
VIARULE vrrp REAL ;
NONDEFAULTRULE ndrsp STRING ;
NONDEFAULTRULE ndrip INTEGER ;
NONDEFAULTRULE ndrrp REAL ;
END PROPERTYDEFINITIONS
techLayerProperties(
;( PropName Layer1 [ Layer2 ] PropValue)
;( -------- ----------------- ---------)
( lip POLYS 1 )
( lrp POLYS 2.300000 )
( lsp   POLYS "top" )

If the property definitions were not present for lip, lrp, and lsp in the LEF file, then these would have been ignored and the generated ASCII Technology File would not have these property names.

Layers

There are four types of layers in a LEF file: routing layer, cut layer, masterslice, and overlap layer. The layer statements in a LEF file define layer names and associate place and route design rules with each routing layer.

The OpenAccess database defines layers in the technology file. For details on defining layers in the technology file see the Technology File and Display Resource File User Guide.

The following topics explain the syntax and the statements or constructs in each LEF layer and maps these statements to their technology file equivalents.

Routing Layer

Following is the syntax of the routing layer in LEF 5.6.

LAYER layerName 
TYPE ROUTING ;
DIRECTION {HORIZONTAL | VERTICAL | DIAG45 | DIAG135} ;
PITCH {distance | xDistance yDistance} ;
[DIAGPITCH {distance | diag45Distance diag135Distance} ;]
WIDTH defaultWidth ;
[OFFSET {distance | xDistance yDistance} ;]
[DIAGWIDTH diagWidth ;]
[DIAGSPACING diagSpacing ;]
[DIAGMINEDGELENGTH diagLength ;]
[AREA minArea ;]
[MINSIZE minWidth minLength [minWidth2 minLength2] ... ;]
[ [SPACING minSpacing
    [ RANGE minWidth maxWidth 
       [ USELENGTHTHRESHOLD 
       | INFLUENCE value [RANGE stubMinWidth stubMaxWidth]
       | RANGE minWidth maxWidth] 
    | LENGTHTHRESHOLD maxLength [RANGE minWidth maxWidth]
    ] 
  ;] ...
| [SPACINGTABLE 
    PARALLELRUNLENGTH {length} ...
        {WIDTH width {spacing} ...} ... ;
    [SPACINGTABLE 
      INFLUENCE {WIDTH width WITHIN distance SPACING spacing} ... ;
  ] ]
]
[WIREEXTENSION value ; ]
[MINIMUMCUT numCuts WIDTH width
   [FROMABOVE | FROMBELOW]
   [LENGTH length WITHIN distance] ;] ...
[MAXWIDTH width ;]
[MINWIDTH width ;]
[MINSTEP minStepLength
   [INSIDECORNER | OUTSIDECORNER | STEP]
   [LENGTHSUM maxLength] ;]
[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 ;]
[SLOTWIREWIDTH minWidth ;] 
[SLOTWIRELENGTH minLength ;]
[SLOTWIDTH minWidth ;]
[SLOTLENGTH minLength ;]
[MAXADJACENTSLOTSPACING spacing ;]
[MAXCOAXIALSLOTSPACING spacing ;]
[MAXEDGESLOTSPACING spacing ;]
[SPLITWIREWIDTH minWidth ;]
[MINIMUMDENSITY minDensity ;] 
[MAXIMUMDENSITY maxDensity ;] 
[DENSITYCHECKWINDOW windowLength windowWidth ;] 
[DENSITYCHECKSTEP stepValue ;] 
[FILLACTIVESPACING spacing ;] 
[ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4} ;] ...
[ANTENNAAREARATIO value ;] ...
[ANTENNADIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNACUMAREARATIO value ;] ...
[ANTENNACUMDIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNAAREAFACTOR value [DIFFUSEONLY] ;] ...
[ANTENNASIDEAREARATIO value ;] ...
[ANTENNADIFFSIDEAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNACUMSIDEAREARATIO value ;] ...
[ANTENNACUMDIFFSIDEAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...) } ;] ...
[ANTENNASIDEAREAFACTOR value [DIFFUSEONLY] ;] ...
[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 ...
   } ;]
END layerName

Following are the technology file equivalents for each line of code in the routing layer in the LEF file.

The routing PITCH of a routing layer in the LEF file is mapped to the routingGrids subsection of the constraintGroups section in the technology file. The following table shows the syntax and example of the LEF and technology files.

LEF File Technology File

PITCH distance;

( horizontalPitch layerName Pitch)
(verticalPitch layerName Pitch)
(leftDiagPitch layerName Pitch)
(rightDiagPitch layerName Pitch)

LAYER metal1
TYPE ROUTING;
....
PITCH 1.8;
DIAGPITCH 1.34 1.38 ;
...
END metal1
....

constraintGroups(
....
routingGrids(
....
( horizontalPitch "M2" 1.8 )
        ( verticalPitch    "M2"    1.8 )
        ( leftDiagPitch    "M2"    1.34 )
        ( rightDiagPitch    "M2"    1.38 )
     )
     ....
)

where M2 is the layer name followed by the pitch values.

PITCH in LEF is translated as horizontalPitch and verticalPitch each having equal values in the technology file. Similarly, DIAGPITCH in LEF is mapped to leftDiagPitch and rightDiagPitch.

The routing OFFSET for a routing layer in the LEF file is mapped as routingGrids in the constraintGroups section of the technology file.

LEF Technology File

OFFSET distance;

(horizontalOffset layerName Offset)
(verticalOffset layerName Offset)

LAYER RX
TYPE ROUTING;
....
OFFSET 0.9;
...
END RX
....

constraintGroups(
....
routingGrids(
....
( horizontalOffset "RX" 0.9 )
        ( verticalOffset "RX" 0.9  )
     )
     ....
)

where RX is the layer name and 0.9 the maxWidth value.

MAXWIDTH is mapped as maxWidth in the spacings subsection of the constraintGroups section in the technology file.

LEF Technology File

MAXWIDTH width

(maxWidth layerName width)

LAYER RX
TYPE ROUTING;
....
MAXWIDTH 10.11111;
....
END RX
....

constraintGroups(
....
spacings(
....
( maxWidth "RX" 10.111 )
)
....
)

where RX is the layer name and 10.111 is the maxWidth value.

The MAXWIDTH rule applies only for routing layers and is a float in units of um. If MAXWIDTH is specified in any other layer, following warning message is displayed:

*WARNING* MAXWIDTH can be defined only in the routing layer: Ignoring the rule for layer layerName.

PROTRUSIONWIDTH in the LEF file is mapped as protrusionWidth in the spacings subsection of the constraintGroups section in the technology file.

LEF Technology File

PROTRUSIONWIDTH width1 LENGTH length WIDTH width2;

(protrusionWidth layer
(length width1 width2))

LAYER M1
TYPE ROUTING;
....
PROTRUSIONWIDTH 0.28 LENGTH 0.60 WIDTH 1.20 ;
....
END M1
....

constraintGroups(
....
spacings(
....
( protrusionWidth "M1" (0.6 1.2 0.28 ) )
)
....
)

where M1 is the layer name followed by the length, width, and protrusion width.

In LEF, width1, width2, and length are floats in units of um. The PROTRUSIONWIDTH rule applies only to the routing layer. A protrusion width must be greater than or equal to width1 if the protrusion connects to a wire having width greater than width2 and length greater than length.

MINSTEP is mapped as minStep in the spacings subsection of the constraintGroups section in the technology file. The MINSTEP rule in the LEF file specifies the minimum step size (or shortest edge length). In this rule, distance is a float in units of um and it specifies the minimum step size. The MINSTEP rule applies only to the routing layers.

LEF Technology File

MINSTEP minStepLength [OUTSIDECORNER] [LENGTHSUM maxLength] ;

(minStep layerName lengthDefinition)

LAYER PC
TYPE ROUTING;
....
MINSTEP 0.1 OUTSIDECORNER LENGTHSUM 0.4 ;
    MINSTEP 0.1 INSIDECORNER LENGTHSUM 0.4 ; 
    MINSTEP 0.1 STEP LENGTHSUM 0.4;    
    MINSTEP 0.2 STEP LENGTHSUM 0.8; 
....
END PC
....

constraintGroups(
     ....
     spacings(
     ....
          ( minOutsideCornerEdgeLength "PC"    (0.4 0.1) )
     ( minInsideCornerEdgeLength "PC" (0.4 0.1) )
     ( minStepEdgeLength "PC" (0.8 0.2) )
)
....
)

where PC is the layer name.

WIDTH in the LEF file is mapped as minWidth in the spacings section, which is a subsection of the constraintGroups section in the technology file.

LEF Technology File

WIDTH defWidth;

(minWidth layerName value)

LAYER RX
TYPE ROUTING;
....
WIDTH 1;
...
END RX
....

constraintGroups(
....
spacings(
....
( minWidth "RX" 1 )
)
....
)

where RX is the layer name and 1 is the minWidth value.

The AREA rule in the LEF file is mapped as minArea in the spacingRules subsection of the physicalRules section in the technology file.

LEF Technology File

AREA minArea;

(minArea layerName minAreaValue)

LAYER M1
TYPE ROUTING;
....
AREA 1.0 ;
...
END M1
...

constraintGroups(
....
spacings(
....
( minArea "M1" 1 )
);spacings
....
)

where M1 is the layer name followed by the minimum area value.

The MINWIDTH statement is mapped as minWidth in the spacings section, which is a subsection of the constraintGroups section in the technology file.

Notice that the precision of the minimum width is curtailed in the technology file as compared to the LEF file.

LEF Technology File

MINWIDTH minWidth

(minWidth layerName minWidthValue)

LAYER RX
TYPE ROUTING ;
....
MINWIDTH 0.71111 ;
....
END RX
constraintGroups(
....
spacings(
....
( minWidth "RX" 0.711 )
);spacings
....
)

The MINIMUMCUT statement is mapped as minimumCuts in the spacingTables section, which is a subsection of the constraintGroups section in the technology file.

The minimumCut rules are stored only on the cut layers in the technology file. Rules for the cut layer are temporarily stored on the current metal layer, since the cut layer would not have been created already. These rules are later moved to the cut layers.

LEF Technology File

MINIMUMCUT numCuts WIDTH width

(minNumCut width minNumCuts)

LAYER M1
TYPE ROUTING;
....
MINIMUMCUT 4 WIDTH 1.1 ;
MINIMUMCUT 6 WIDTH 3.3 ; ...
END M1
...

constraintGroups(
....
spacings(
....
( protrusionWidth "M1" (0.6 1.2 0.28) )
( minSpacing "M1" 0.28 )
( minDiagonalSpacing "M1" 0.45 )
) ;spacings
spacingTables(
;( constraint layer1 [layer2]
; (( index1Definitions [index2Defintions]) [defaultValue] )
;  ( table) )
;( --------------------------------------)
( minNumCut "CA"
(( "width" nil nil ) )
(
1.1 4
3.3 6
)
)
) ;spacingTables

where M1 is the layer name.

MINENCLOSEDAREA in the LEF file maps to the minHoleArea in the spacingTables subsection of the constraintGroups section in the technology file.

In the MINENCLOSEDAREA construct, area specifies the minimum area size limit for metal that encloses an empty area. It is a float in units of um^2. The width statement is optional and is a float in units of um.

This rule is connected to the slotting process. If the width is specified, then the width applies to the hole-edge starting from the outer-edge of the material surrounding the hole. There can be multiple minHoleArea rules per layer to take into account different width values.

LEF Technology File

MINENCLOSEDAREA area;

(minEnclosedArea layerName list(width area) )

LAYER M1
TYPE ROUTING;
....
MINENCLOSEDAREA 0.5 WIDTH 1.25 ;
   MINENCLOSEDAREA 0.4 WIDTH 1.15 ;
   MINENCLOSEDAREA 0.3 WIDTH 1.05 ;
...
END M1
...

constraintGroups(
....
spacingTables(
    ( minHoleArea    "RX"
        ( ( "width"    nil    nil ) )
        (
            1.05    0.3
            1.15    0.4
            1.25    0.5
        )
)
...
);spacingTables

The SPACINGTABLE rule applies only to the routing layer. In this rule,

PARALLELRUNLENGTH

Specifies that if the maximum width of the wire is greater than width and parallel run length greater than the length, then wire spacing must be greater than or equal to spacing.

INFLUENCE

Specifies that if a wire width is greater than width, and the distance to two other wires is less than distance, then the other wires must be separated by distance greater than or equal to spacing.

where, length, width, and spacing are floats in units of um.

  1. SPACINGTABLE PARALLELRUNLENGTH maps as minSpacing in the spacingTables subsection of the constraintGroups section in the technology file.
    LEF Technology File
    LAYER M2
    TYPE ROUTING;
    ....
    SPACINGTABLE # LEF5.5
    PARALLELRUNLENGTH 0.00 0.50 3.00 5.00
    WIDTH 0.00 0.15 0.15 0.15 0.15
    WIDTH 0.25 0.15 0.20 0.20 0.20
    WIDTH 1.50 0.15 0.50 0.50 0.50
    WIDTH 3.00 0.15 0.50 1.00 1.00
    WIDTH 5.00 0.15 0.50 1.00 2.00
    ;
    ....
    constraintGroups(
    ....
    spacingTables(
    ....
    (minSpacing "M2"
    (("width" nil nil "length" nil nil))
    (
    (0 0 ) 0.15
    (0 0.5 ) 0.15
    (0 3 ) 0.15
    (0 5 ) 0.15
    (0.2505 0 ) 0.15
    (0.2505 0.5 ) 0.2
    (0.2505 3 ) 0.2
    (0.2505 5 ) 0.2
    (1.5005 0 ) 0.15
    (1.5005 0.5 ) 0.5
    (1.5005 3 ) 0.5
    (1.5005 5 ) 0.5
    (3.0005 0 ) 0.15
    (3.0005 0.5 ) 0.5
    (3.0005 3 ) 1
    (3.0005 5 ) 1
    (5.0005 0 ) 0.15
    (5.0005 0.5 ) 0.5
    (5.0005 3 ) 1
    (5.0005 5 ) 2
    )
    )
  2. SPACINGTABLE PARALLELRUNLENGTH maps to minInfluenceSpacing in the spacingTables subsection of the constraintGroups section in the technology file.

LEF Technology File
LAYER M2
TYPE ROUTING;
....
SPACINGTABLE INFLUENCE
WIDTH 1.50 WITHIN 0.50 SPACING 0.55
WIDTH 3.00 WITHIN 1.00 SPACING 1.05
WIDTH 5.00 WITHIN 2.00 SPACING 2.05
;
....
constraintGroups(
....
spacingTables(
....
(minInfluenceSpacing "M2"
(( "width" nil nil "distance" nil nil ))
(
(1.5 0.5 ) 0.55
(1.5 1 ) 0.55
(1.5 2 ) 0.55
(3 0.5 ) 0.55
(3 1 ) 1.05
(3 2 ) 1.05
(5 0.5 ) 0.55
(5 1 ) 1.05
(5 2 ) 2.05
)
)
) ;spacingTables
 ....

The metal slotting and splitting values SLOTWIREWIDTH, SLOTWIRELENGTH, SLOTWIDTH, SLOTLENGTH, MAXADJACENTSLOTSPACING, MAXCOAXIALSLOTSPACING, MAXEDGESLOTSPACING, and SPLITWIREWIDTH are not stored in the technology file.

The MINIMUMDENSITY and MAXIMUMDENSITY metal filling values map minDensity and maxDensity rules in the spacingTables subsection of the constraintGroups section in the technology file.

LEF Technology File

MINIMUMDENSITY minDensity;

MAXIMUMDENSITY maxDensity;

(minDensity layerName (step minDensity))

(maxDensity layerName (step minDensity))

LAYER RX
TYPE ROUTING;
....
MINIMUMDENSITY 1.3 ;
MAXIMUMDENSITY 4.3 ;
...
END RX
....

constraintGroups(
     ....
     spacingTables(
     ;( constraint      layer1       [layer2]
; (( index1Definitions [index2Defintions]) [defaultValue] ) ; ( table) ) ;( ------------------------------------) ( minDensity "RX" (( "step"     nil      nil) ) ( 0.25 1.3 ) ) ( maxDensity "RX" (( "step"     nil      nil) )
(
0.25 4.3
)
)
) ;spacingTables
....
)

where RX is the layer name

DENSITYCHECKWINDOW is not stored. This value in the technology file is always twice the stepSize.

DENSITYCHECKSTEP is not stored. The value of stepSize is used for setting the minimum and maximum density.

The FILLACTIVESPACING statement maps to the minFillToShapeSpacing statement in the spacings subsection of the constraintGroups section in the technology file.

LEF Technology File

FILLACTIVESPACING spacing

(minFillToShapeSpacing layerName value)

LAYER RX
TYPE ROUTING ;
....
FILLACTIVESPACING 0.98 ;
....
END RX
constraintGroups(
....
spacings(
( minFillToShapeSpacing "RX" 0.98 )
) ;spacings
....
)
A single SPACING construct is mapped to an oaIntRule. If there are SPACING RANGE statements following the generic SPACING statements, the database maps all SPACING constructs to an oaInt1DTableRule. If there are SPACING LENGTHTHRESHOLD statements, the database maps all SPACING constructs to an oaInt2DTableRule. The maxWidth value and optional second RANGE or USELENGTHTHRESHOLD keywords are not stored in OpenAccess.

The routing direction of the routing layers is mapped to the routingDirections subsection of the layerRules section in the technology file.

LEF Technology File

DIRECTION {HORIZONTAL | VERTICAL};

layerRules(
routingDirections(
(LayerName PreferredDirection)
);
);

LAYER RX
TYPE ROUTING;
....
DIRECTION VERTICAL ;
....

layerRules(
...
routingDirections(
;( layer direction )
;( ----- --------- )
( RX "vertical" )
( PC "horizontal" )
...
)
  ) ;routingDirections
...
);layerRules

The electrical rules of the routing layer in the LEF file are mapped to the techLayerProperties subsection of the layerDefinitions section in the technology file.

The possible electrical rules are areaCapacitance (for CAPACITANCE), edgeCapacitance (for EDGECAPACITANCE), sheetResistance (for RESISTANCE), height (for HEIGHT), thickness (for THICKNESS), shrinkage (for SHRINKAGE), or capMultiplier (for CAPMULTIPLIER).

LEF Technology File

propertyName propValue

layerRules(     techLayerProperties(    
(propName layerName propValue)    

);    

);

LAYER RX
TYPE ROUTING;
....
RESISTANCE RPERSQ 0.103;
CAPACITANCE CPERSQDIST 0.000156 ;
THICKNESS 1 ;
SHRINKAGE 0.1 ;
CAPMULTIPLIER 1 ;
EDGECAPACITANCE 0.0000000000006 ;
....

layerDefinitions(
...
techLayerProperties(
;( PropName Layer1 [Layer2] PropValue )
;( -------- ------ ------- --------- )
( areaCapacitance RX 1.560000e-04 )
( capMultiplier RX 1 )
( edgeCapacitance RX 6.000000e-13)
( height RX 4.0 )
( sheetResistance RX 0.103000 )
( shrinkage RX 0.1 )
( thickness RX 1.0 )
...
);techLayerProperties
...
);layerRules

The antenna rules in the routing layers are mapped to the antennaModels in the constraintGroups section in the technology file.

Transistors with different oxide thickness or doping have different process antenna ratios. Therefore, an optional keyword ANTENNAMODEL has been added to the cut and routing layers. ANTENNAMODEL has four parameters: OXIDE1, OXIDE2, OXIDE3, or OXIDE4. The default parameter for ANTENNAMODEL is OXIDE1.

ANTENNAAREAFACTOR and ANTENNASIDEAREAFACTOR are not stored in OpenAccess.

Currently, only OXIDE1 and OXIDE2 are supported. OXIDE3 and OXIDE4 are ignored.

The examples from the LEF file and its corresponding technology file for ANTENAMODELS is as follows:

LEF Example
LAYER RX
  TYPE ROUTING;
  ....
    ANTENNAMODEL OXIDE1 ;     # LEF5.5
ANTENNAAREARATIO 1 ;
ANTENNADIFFAREARATIO PWL ( ( 1 1 ) ( 2 2 ) ) ;
ANTENNACUMAREARATIO 3000 ;
ANTENNACUMDIFFAREARATIO PWL ( ( 1 4 ) ( 2 5 ) ) ;
ANTENNASIDEAREARATIO 7 ;
ANTENNADIFFSIDEAREARATIO PWL ( ( 1 8 ) ( 2 9 ) ) ;
ANTENNACUMSIDEAREARATIO 10 ;
ANTENNACUMDIFFSIDEAREARATIO PWL ( ( 1 11 ) ( 2 12 ) ) ;

ANTENNAMODEL OXIDE2 ; # LEF5.5
ANTENNAAREARATIO 1 ;
ANTENNADIFFAREARATIO PWL ( ( 1 1 ) ( 2 2 ) ) ;
ANTENNACUMAREARATIO 3000 ;
ANTENNACUMDIFFAREARATIO PWL ( ( 1 4 ) ( 2 5 ) ) ;
ANTENNASIDEAREARATIO 7 ;
ANTENNADIFFSIDEAREARATIO PWL ( ( 1 8 ) ( 2 9 ) ) ;
ANTENNACUMSIDEAREARATIO 10 ;
ANTENNACUMDIFFSIDEAREARATIO PWL ( ( 1 11 ) ( 2 12 ) ) ;

ANTENNAMODEL OXIDE3 ; # LEF5.5
ANTENNAAREARATIO 1 ;
ANTENNADIFFAREARATIO PWL ( ( 1 1 ) ( 2 2 ) ) ;
ANTENNACUMAREARATIO 3000 ;
ANTENNACUMDIFFAREARATIO PWL ( ( 1 4 ) ( 2 5 ) ) ;
#ANTENNAAREAFACTOR 6 DIFFUSEONLY ;
ANTENNASIDEAREARATIO 7 ;
ANTENNADIFFSIDEAREARATIO PWL ( ( 1 8 ) ( 2 9 ) ) ;
ANTENNACUMSIDEAREARATIO 10 ;
ANTENNACUMDIFFSIDEAREARATIO PWL ( ( 1 11 ) ( 2 12 ) ) ;
#ANTENNASIDEAREAFACTOR 2 DIFFUSEONLY ;
    ANTENNAMODEL OXIDE4 ;           # LEF5.5
ANTENNAAREARATIO 1 ;
ANTENNADIFFAREARATIO PWL ( ( 1 1 ) ( 2 2 ) ) ;
ANTENNACUMAREARATIO 3000 ;
ANTENNACUMDIFFAREARATIO PWL ( ( 1 4 ) ( 2 5 ) ) ;
#ANTENNAAREAFACTOR 6 DIFFUSEONLY ;
ANTENNASIDEAREARATIO 7 ;
ANTENNADIFFSIDEAREARATIO PWL ( ( 1 8 ) ( 2 9 ) ) ;
ANTENNACUMSIDEAREARATIO 10 ;
ANTENNACUMDIFFSIDEAREARATIO PWL ( ( 1 11 ) ( 2 12 ) ) ;
#ANTENNASIDEAREAFACTOR 2 DIFFUSEONLY ;
  ...
Technology File Example
constraintGroups(
....
antennaModels(
;( model )
;( ----- )
( "default"
antenna(
( areaRatio "RX" 1 )
( diffAreaRatio "RX"
(
( 1 1 )
( 2 2 )
)
)
) ;antenna
   antenna(
( areaRatio "CUT12" 14 )
( diffAreaRatio "CUT12"
(
( 2 15 )
( 3 16 )
)
)
) ;antenna
   antenna(
( areaRatio "PC" 1 )
( diffAreaRatio "PC" 1 )
) ;antenna
   ...
) ;default
  ( "second"
antenna(
...
   cumulativeMetalAntenna(
      ( areaRatio               3000 )
      ( diffAreaRatio           21 )
   ) ;cumulativeMetalAntenna
   cumulativeViaAntenna(
      ( areaRatio               1700 )
      ( diffAreaRatio           3000 )
      ) ;cumulativeViaAntenna
   ) ;default
...

The AC and DC current density is mapped to the currentDensityTables subsection of the layerRules section in the technology file.

LEF Technology File
LAYER layerName
...
[ACCURRENTDENSITY PEAK
{ 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 ...
...
; ]
...
END layerName

layerRules( currentDensityTables( ;( rule     layer1 ; (( index1Definitions    [index2Definitions]) [defaultValue] )
; (table))

where,

Keyword Values

rule

ACCURRENTDENSITY PEAK, ACCURRENTDENSITY AVERAGE, ACCURRENTDENSITY RMS, and DCCURRENTDENSITY AVERAGE.

layer

Layer name

index1Definition

AC Current Density for Cut and Routing Layers

FREQUENCY
(f1 f2... fm) nil

DC Current Density for Routing Layer

FREQUENCY
(f1 f2... fm) nil
WIDTH (w1 w2... wm) nil

DC Current Density for Cut Layer

FREQUENCY
(f1 f2... fm) nil
CUTAREA (a1 a2... am) nil

index2Definition
(optional)

AC Current Density for Routing Layer

WIDTH (w1 w2... wm) nil

AC Current Density for Cut Layer

CUTAREA (a1 a2... am) nil

DC Current Density

nil

defaultValue

Value of the table depends on index1Definition and index2Definition.

LEF Example
LAYER RX
  TYPE ROUTING;
  ....
    ACCURRENTDENSITY PEAK 
    FREQUENCY 1E6 100E6 400E6 ;
    WIDTH     0.4 0.8 10.0 50.0 100.0 ;
    TABLEENTRIES
    #      w1     w2     w3     w4    w5
        #f1
        2.0E-6 1.9E-6 1.8E-6 1.7E-6 1.5E-6
    #f2
1.4E-6 1.3E-6 1.2E-6 1.1E-6 1.0E-6
#f3
0.9E-6 0.8E-6 0.7E-6 0.6E-6 0.4E-6 ;
ACCURRENTDENSITY AVERAGE
FREQUENCY 1E6 100E6 400E6 ;
WIDTH 0.4 0.8 10.0 50.0 100.0 ;
TABLEENTRIES
# 5 widths above but values are for 6 widths
# w1 w2 w3 w4 w5 w6
#f1
0.6E-6 0.5E-6 0.4E-6 0.3E-6 0.2E-6 0.1E-6
#f2
0.6E-6 0.5E-6 0.4E-6 0.3E-6 0.2E-6 0.1E-6
#f3
0.6E-6 0.5E-6 0.4E-6 0.3E-6 0.2E-6 0.1E-6 ;
ACCURRENTDENSITY RMS
FREQUENCY 100E6 400E6 800E6 ;
WIDTH 0.4 0.8 10.0 50.0 100.0 ;
TABLEENTRIES
# w1 w2 w3 w4 w5
#f1
2.0E-6 1.9E-6 1.8E-6 1.7E-6 1.5E-6
#f2
1.4E-6 1.3E-6 1.2E-6 1.1E-6 1.0E-6
#f3
0.9E-6 0.8E-6 0.7E-6 0.6E-6 0.4E-6 ;
END RX
Technology File Example
layerRules(
   currentDensityTables(
   ;( rule                    layer1 
   ;  (( index1Definitions    [index2Definitions]) [defaultValue] )(table))
   ;( ----------------------------------------------------------------------)
    ( "peakACCurrentDensity"    "RX"
        (("frequency" nil nil "width" nil nil))
        (
            (1000000.0 0.4)    2e-06
            (1000000.0 0.8)    1.9e-06
            (1000000.0 10.0)    1.8e-06
            (1000000.0 50.0)    1.7e-06
            (1000000.0 100.0)    1.5e-06
            (1e+08 0.4)    1.4e-06
            (1e+08 0.8)    1.3e-06
            (1e+08 10.0)    1.2e-06
            (1e+08 50.0)    1.1e-06
            (1e+08 100.0)    1e-06
            (4e+08 0.4)    9e-07
            (4e+08 0.8)    8e-07
            ...
        )
    )
    ( "avgACCurrentDensity"    "RX"
        (("frequency" nil nil "width" nil nil))
        (
            (1000000.0 0.4)    6e-07
            (1000000.0 0.8)    5e-07
            (1000000.0 10.0)    4e-07
            (1000000.0 50.0)    3e-07
            (1000000.0 100.0)    2e-07
            (1e+08 0.4)    1e-07
            (1e+08 0.8)    6e-07
            (1e+08 10.0)    5e-07
            (1e+08 50.0)    4e-07
            (1e+08 100.0)    3e-07
            (4e+08 0.4)    2e-07
            (4e+08 0.8)    1e-07
            ...
        )
    )
    ( "rmsACCurrentDensity"    "RX"
       (("frequency" nil nil "width" nil nil))
           ((1e+08 0.4)    2e-06
            (1e+08 0.8)    1.9e-06
            (1e+08 10.0)    1.8e-06
            (1e+08 50.0)    1.7e-06
            (1e+08 100.0)    1.5e-06
            (4e+08 0.4)    1.4e-06
            (4e+08 0.8)    1.3e-06
            (4e+08 10.0)    1.2e-06
            (4e+08 50.0)    1.1e-06
            (4e+08 100.0)    1e-06
            (8e+08 0.4)    9e-07
...
)
)

Cut Layer

Following is the syntax of the cut layer in LEF 5.6.

TYPE CUT ;
    [SPACING minSpacing 
         [ LAYER 2ndLayerName
         | ADJACENTCUTS {3 | 4} WITHIN distance]
         | CENTERTOCENTER]
    ;] ...
    [PROPERTY propName propVal ;] ...
    [ACCURRENTDENSITY {PEAK | AVERAGE | RMS}
      { value 
      | FREQUENCY freq_1 freq_2 ... ;
          [CUTAREA cutArea_1 cutArea_2 ... ;]
          TABLEENTRIES
           v_freq_1_cutArea_1 v_freq_1_cutArea_2 ...
           v_freq_2_cutArea_1 v_freq_2_cutArea_2 ...
           ...
      } ;]
    [DCCURRENTDENSITY AVERAGE
      { value 
      | CUTAREA cutArea_1 cutArea_2 ... ;
          TABLEENTRIES value_1 value_2 ...
      } ;]
    [ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4} ;] ...
    [ANTENNAAREARATIO value ;] ...
    [ANTENNADIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...)} ;] ...
    [ANTENNACUMAREARATIO value ;] ...
    [ANTENNACUMDIFFAREARATIO {value | PWL ( ( d1 r1 ) ( d2 r2 ) ...)} ;] ...
    [ANTENNAAREAFACTOR value ;] ... 

Following are the technology file equivalents for each line of code of the cut layer in the LEF file.

The SPACING minSpacing statement is mapped as minSpacing in the spacings section, which is a subsection of the constraintGroups section in the technology file.

LEF Technology File
LAYER CUT01
TYPE CUT;
....
SPACING 0.24 CENTERTOCENTER ;
SPACING 0.20 ;
SPACING 0.24 CENTERTOCENTER ;
SPACING 0.22 ADJACENTCUTS 5 WITHIN 0.25 ;
...
END CUT01

constraintGroups(
....
spacings(
( minCenterToCenterSpacing "CUT01" 0.24 )
( minSpacing "CUT01" 0.2 )
( viaSpacing "CUT01" (3 0.25 0.22) )
( minWidth "RX" 0.711 )
...
);spacings
...
)

A new optional statement with ADJACENTCUTS and WITHIN has been added to the existing SPACING syntax in the cut layer. In the above syntax,

If the ADJACENTCUTS numCuts WITHIN construct is specified, minSpacing applies only when the number of cuts are three or four specified within the distance spacing.

Mapping of other rules is same for cut and routing layers. For details, see Routing Layer.

Masterslice Layer

Masterslice layers are typically polysilicon layers and are only needed if the cell MACROs have pins on the polysilicon layer. In LEF, the overlap layer is used to store geometries that represent the prboundary. The overlap layer should normally be named OVERLAP.

LEF Technology File

LAYER MastersliceLayerName

TYPE {MASTERSLICE | OVERLAP} ;

[PROPERTY propName propVal ;] ...

END MastersliceLayerName }

techLayerProperties(

;( PropName Layer1[ Layer2]  PropValue ) )

LAYER POLYS
    TYPE MASTERSLICE ;
    PROPERTY lsp "top" lip 1 lrp 2.3 ;
END POLYS
techLayerProperties(
 ;( PropName  Layer1[ Layer2]  PropValue )
;( -------- ------ -------- --------- )
( lip POLYS 1 )
( lrp POLYS 2.300000 )
( lsp POLYS "top" )
  ....
);techLayerProperties

Implant Layer

Some new technologies require high-threshold and low-threshold cells to be combined together. This has been made possible by creating the implant layer.

Width is mapped as minWidth in the spacings section, which is a subsection of the constraintGroups section of the technology file. Similarly, spacing is mapped to the minSpacing statement in the spacings section.

LEF Technology File

LAYER layerName TYPE IMPLANT ;
[WIDTH minWidth ;]
[SPACING minSpacing [LAYER layerName2] ;] ...
[PROPERTY propName propVal ;] ...
END layerName

spacings(( minWidth layerName minWidthValue ))

LAYER implant1    
     TYPE IMPLANT ;
     WIDTH 0.50 ;
     SPACING 0.50 ;    
END implant1
LAYER implant2    
TYPE IMPLANT ;
WIDTH 0.50 ;
SPACING 0.50 ;
END implant2
layerRules(
...
functions(
;( layer function [maskNumber])
;( ----- -------- -----------)
...
( implant1 "nplus" 13 )
( implant2 "nplus" 14 )
) ;functions
...
);layerRules
constraintGroups(    ....
spacings(
( minWidth "implant1" 0.5 )
( minSpacing "implant1" 0.5 )
( minWidth "implant2" 0.5 )
( minSpacing "implant2" 0.5 )
) ;spacings
...

BEGINEXT Statement

The LEF extension is not stored in OpenAccess. The LEF syntax is:

[BEGINEXT "tag"
extension
ENDEXT]

BUSBITCHARS Statement

The OpenAccess tools use delimiterPair to identify bus bit characters for name mapping.

BUSBITCHARS is mapped in the technology file in the techParams section, which is a subsection of the controls section.

LEF Technology File

BUSBITCHARS "delimiterPair" ;

(LEFDEF_BUSBIT_CHARS "value")

BUSBITCHARS "<>" ; 
controls(
techParams(
;( parameter value )
;( --------- ----- )
( LEFDEF_BUSBIT_CHARS "<>" )
...
);techParams
...
);controls

CLEARANCEMEASURE Statement

Specifies the clearance distance used for spacing rule checks.

CLEARANCEMEASURE {MAXXY | EUCLIDEAN};

In the above syntax, MAXXY uses the larger X and Y distances for spacing rule checks. Similarly, EUCLIDEAN uses Euclidean distance for spacing rule check. The default value is EUCLIDEAN.

MACRO Section

The MACRO section in the LEF file contains definitions for the macrocell models in the library. Macros are not mapped in the technology file.

DIVIDERCHAR Statement

The LEF divider character is used to set the divider character in the oaLefNS namespace.

DIVIDERCHAR is mapped in the technology file in the techParams section, which is a subsection of the controls section.

LEF Technology File

DIVIDERCHARS "character" ;

(LEFDEF_DIVIDER_CHARS "value")

DIVIDERCHAR "<>" ; 
controls(
techParams(
;( parameter value )
;( --------- ----- )
( LEFDEF_DIVIDER_CHARS ":" )
...
);techParams
...
);controls

MANUFACTURINGGRID Statement

Manufacturing grid is used to control the distance between the two snap grids.

The snap grid controls pointer movement in the interactive drawing and editing modes. When the snap grid is defined, the pointer snaps to the closest grid point as you move it within the work area.

Distance between the two snap grids must be a multiple of the manufacturing grid. The value specified for the manufacturing grid should be positive. The numeric range is float.

MANUFACTURINGGRID is mapped in the technology file in the controls section.

LEF Technology File
[ MANUFACTURINGGRID value ; ] 
mfgGridResolution (grid_value)
MANUFACTURINGGRID 0.0005 ;
controls(
...
mfgGridResolution(
( 0.000500 )
) ;mfgGridResolution
) ;controls

Maximum Stacked Via

Some processes have an overall limit on the number of single-cut stacked vias that are allowed on top of each other. The MAXVIASTACK keyword has been added to limit the number of stacked vias. Currently, four stacked vias are permitted on top of each other.

The syntax of the MAXVIASTACK statement in LEF 5.6 is as follows.

[MAXVIASTACK value [ RANGE bottomLayer topLayer];]

where,

Syntax Description

value

An integer that limits the number of single stacked vias that are allowed on top of each other.

bottomLayer topLayer

Routing layer names

MAXVIASTACK is mapped in the technology file in the viaStackingLimits section, which is a subsection of the constraintGroups section.

LEF Technology File

MAXVIASTACK value [ RANGE bottomLayer topLayer];

viaStackingLimits ((value [bottomLayer topLayer]))

# Only one MAXVIASTACK is allowed in a lef file
MAXVIASTACK 3 RANGE M1 MT ;             
constraintGroups(
....
  viaStackingLimits(
( 3 "M1" "MT" )
) ;viaStackingLimits
...
);constraintGroups

If the specified layer names are not routing layer names, the RANGE keyword is ignored. The MAXVIASTACK should follow the layer definitions in the LEF file.

NAMESCASESENSITIVE Statement

The LEF NAMESCASESENSITIVE statement is ignored since OpenAccess is always case-sensitive. When you write LEF, always include NAMECASESENSITIVE ON. The LEF syntax is as follows:

NAMESCASESENSITIVE {ON | OFF} ;

SITE Section

The SITE section defines the types and properties of placement sites available in the library for. Each SITE section in a LEF file maps to a cell in the OpenAccess library.

SITE statements are mapped in the technology file in the scalarSiteDefs section.

LEF Technology File

{ SITE siteName
CLASS { PAD | CORE }
SYMMETRY { X | Y | R90 }... ;
SIZE width BY height ;
END siteName }...

siteDefs(
; a list of all site definitions.
( site1 ... )
...
)

SITE CORE1
        CLASS CORE ;
        SYMMETRY X ;
        SIZE 67.2 BY 6 ;
END CORE1
SITE CORE
        CLASS CORE ;
        SIZE 3.6 BY 28.8 ;
        SYMMETRY  Y  ;
END CORE
SITE MRCORE
        CLASS CORE ;
        SIZE 3.6 BY 28.8 ;
        SYMMETRY  Y  ;
END MRCORE
scalarSiteDefs(
;( siteDefName type width height symInX symInY symInR90)
;( ---------- ---- ----- ------ ------ ------ ------)
( CORE1 core 67.2 6.0 t nil nil)
( CORE core 3.6 28.8 nil t nil)
( MRCORE core 3.6 28.8 nil t nil)
( IOWIRED pad 57.6 432.0 nil nil nil)
( IOTEST pad 57.6 432.0 nil nil nil)
( IODI1 pad 57.6 432.0 nil nil nil)
...
) ;scalarSiteDefs

SPACING Section

The SPACING section in the LEF file provides for the same net spacing rules and stacked vias.

LEF Technology File

[SPACING
[SAMENET layerName layerName minSpace [STACK] ;] ...
END SPACING]

spacings(
( minSameNetSpacing layerName value)
stackable layerName t/nil)
)

SPACING
    SAMENET CUT01 CA 0.1 STACK ;
END SPACING
constraintGroups(
  spacings(
    ( minSameNetSpacing  "CA"  "V1"      1.5 )
    ( stackable          "CA"  "V1       t )
    ( minSameNetSpacing  "M1"   0.28 )
    ( minSameNetSpacing  "V1"  "V2"      1.5 )
    ( stackable           "V1"  "V2"         t )
...
);spacings
 ...
);constraintGroups

USEMINSPACING Statement

Defines how minimum spacing is calculated for an obstruction (blockage) or pin geometries. It is mapped as the USEMINSPACINGOBS or USEMINSPACINGPIN property on the database object in the OpenAccess library.

USEMINSPACING {OBS | PIN} {ON | OFF};...

In the above syntax, OBS|PIN specifies whether the minimum spacing is applied to pin geometries or obstructions. The option ON|OFF specifies the calculation method for minimum spacing. If you specify ON, the spacing is the minimum layer spacing. By default, the value is assumed to be "OFF", in which case the property is not created.

VIA Statement

VIA is mapped in the technology file in the customViaDefs section, which is a subsection of the viaDef section.

LEF Technology File

VIA viaName
[DEFAULT]
[TOPOFSTACKONLY]
[FOREIGN foreignCellName [pt [orient]];]
[RESISTANCE value ;]
{LAYER layerName ;
{RECT pt pt ;} ...} ...
[PROPERTY propName propVal ;] ...
END viaName

viaDefs(customViaDefs(( viaDefName libName cellName viewName layer1 layer2 resistancePerCut)

VIA RX_PC DEFAULT
# VIA RESISTANCE should be discouraged. Will become obsolete.    
# Instead RESISTANCE in LAYER will be taken.
   RESISTANCE 2.012 ;
LAYER RX ;
RECT -0.7 -0.7 0.7 0.7 ;
LAYER CUT12 ;
RECT -0.25 -0.25 0.25 0.25 ;
LAYER PC ;
RECT -0.6 -0.6 0.6 0.6 ;
PROPERTY stringProperty "DEFAULT" realProperty 32.33 COUNT 34 ;
END RX_PC
VIA PC_M1 DEFAULT
RESISTANCE 1 ;
LAYER PC ;
RECT -0.6 -0.6 0.6 0.6 ;
LAYER CA ;
RECT -0.25 -0.25 0.25 0.25 ;
LAYER M1 ;
RECT -0.6 -0.6 0.6 0.6 ;
END PC_M1
viaDefs(
customViaDefs(
;( viaDefName libName cellName viewName layer1 layer2 resistancePerCut)
;( ---------- ------- -------- -------- ------ ------ ----------------)
( RX_PC techLibfinal RX_PC via RX PC 2.012)
( PC_M1 techLibfinal PC_M1 via PC M1 1.0)
( M1_M2 techLibfinal M1_M2 via M1 M2 1.5)
( M2_M3 techLibfinal M2_M3 via M2 M3 1.5)
( M3_MT techLibfinal M3_MT via M3 MT 1.5)
( M2_M3_PWR techLibfinal M2_M3_PWR via M2 M3 1.2)
( VIACENTER12 techLibfinal VIACENTER12 via M1 M2 0.48)
( nd1VIARX0 techLibfinal nd1VIARX0 via RX PC 0.2)
( nd1VIA01 techLibfinal nd1VIA01 via PC M1 0.2)
( nd1VIA12 techLibfinal nd1VIA12 via M1 M2 0.2)
( nd1VIA23 techLibfinal nd1VIA23 via M2 M3 0.0)
( nd1VIA34 techLibfinal nd1VIA34 via M3 MT 0.0)
);customViaDefs
) ;viaDefs

VIARULE Statement

The VIARULE section in the LEF file specifies vias to be used at the intersection of special wires of the same net. A via rule can refer to vias that are defined elsewhere in the LEF file or generate its own vias.

VIARULE is mapped in the technology file in the viaSpecs section.

LEF Technology File

VIARULE viaRuleName
LAYER layerName ;
DIRECTION {HORIZONTAL | VERTICAL} ;
[WIDTH minWidth TO maxWidth ;]
LAYER layerName ;
DIRECTION {HORIZONTAL | VERTICAL} ;
[WIDTH minWidth TO maxWidth ;]
{VIA viaName ;} ...
[PROPERTY propName propVal ;] ...
END viaRuleName

viaSpecs((layer1 layer2 (viaDefName ...)
[( (layer1MinWidth layer1MaxWidth layer2MinWidth layer2MaxWidth (viaDefName ...)) )])

VIARULE VIALIST12
   LAYER M1 ;
       DIRECTION VERTICAL ;
       WIDTH 5.0 TO 10.0 ;
   LAYER M2 ;
       DIRECTION HORIZONTAL ;
       WIDTH 5.5 TO 10.5 ;
VIA VIACENTER12 ;
   PROPERTY vrsp "new" vrip 1 vrrp 4.5 ;
END VIALIST12
viaSpecs(
( M1 M2 nil
(
(1.0 5.0 1.5 5.5 ("VIAGEN12"))
(1.0 5.0 5.5 10.5005 ("VIAGEN12"))
(1.0 5.0 10.5005 15.5005 ("VIAGEN12"))
(5.0 10.0005 1.5 5.5 ("VIAGEN12"))
(5.0 10.0005 5.5 10.5005 ("VIACENTER12" "VIAGEN12"))
(5.0 10.0005 10.5005 15.5005 ("VIAGEN12"))
(10.0005 15.0005 1.5 5.5 ("VIAGEN12"))
(10.0005 15.0005 5.5 10.5005 ("VIAGEN12"))
(10.0005 15.0005 10.5005 15.5005 ("VIAGEN12"))
)
)
( M2 M3 nil
(
(0.2 100.0005 0.2 100.0005 ("VIAGEN23"))
)
)
) ;viaSpecs

VIARULE GENERATE

In LEF, a via rule using generated vias has the following syntax:

The LEF VIARULE GENERATE objects are stored in OpenAccess by using an oaViaSpec. This is similar to the normal LEF VIARULE, however, the VIARULE GENERATE uses a single oaStdViaDef object (stored in oaViaDefArray(0)) instead of the oaCustomViaDef objects.

The generating vias section is mapped to the standardViaDefs subsection viaDefs section of the technology file.

LEF Technology File

VIARULE viaRuleName GENERATE LAYER routingLayerName ; { DIRECTION {HORIZONTAL | VERTICAL} ; [OVERHANG overhang ;] [METALOVERHANG metalOverhang ;] | ENCLOSURE overhang1 overhang2 ;} [WIDTH minWidth TO maxWidth ;] LAYER routingLayerName ; { DIRECTION {HORIZONTAL | VERTICAL} ; [OVERHANG overhang ;] [METALOVERHANG metalOverhang ;] | ENCLOSURE overhang1 overhang2 ;} [WIDTH minWidth TO maxWidth ;] LAYER cutLayerName ; RECT pt pt ; SPACING xSpacing BY ySpacing ; [RESISTANCE resistancePerCut ;]

standardViaDefs(
( viaDefName layer1 layer2    (cutLayer cutWidth cutHeight
[resistancePerCut] )
(cutRows cutCol (cutSpace))
(layer1Enc) (layer2Enc)     (layer1Offset)       (layer2Offset)       (origOffset)
[implant1 (implant1Enc)     [implant2 (implant2Enc)]])

# LEF 5.6 adds DEFAULT to VIA GENERATE
VIARULE VIAGEN12 GENERATE
LAYER M1 ;
ENCLOSURE 0.03 0.01 ;
#2 sides need >= 0.03, 2 other sides >= 0.01
WIDTH 1.0 TO 15.0 ;
LAYER M2 ;
ENCLOSURE 0.05 0.01 ;
#2 sides need >= 0.05, 2 other sides >= 0.01
WIDTH 1.5 TO 15.5 ;
LAYER V1 ;
RECT -0.1 -0.1 0.1 0.1 ;
#cut is .20 by .20
SPACING 0.40 BY 0.40 ;
#center-to-center spacing
RESISTANCE 20 ; #ohms per cut
END VIAGEN12
VIARULE VIAGEN23 GENERATE
    LAYER M2 ;
           ENCLOSURE 0.10 0.01 ;  # LEF5.5
WIDTH 0.2 TO 100.0 ;
LAYER M3 ;
ENCLOSURE 0.10 0.01 ; # LEF5.5
WIDTH 0.2 TO 100.0 ;
LAYER V2 ;
RECT -0.8 -0.8 0.8 0.8 ;
SPACING 5.6 BY 6.0 ;
RESISTANCE 0.2 ; # Timing
END VIAGEN23
viaDefs(
  standardViaDefs(
  ( VIAGEN12       M1   M2  ("V1" 0.2 0.2      20.0)   
    (1 1 (0.2 0.2))   (0.03 0.01)    (0.05      0.01)    (0.0 0.0)    (0.0 0.0)    (0.0 0.0)
  )
  ( VIAGEN23  M2  M3  ("V2" 1.6 1.6 0.2)
    (1 1 (4.0 4.4))  (0.1 0.01)    (0.1 0.01)        (0.0 0.0)    (0.0 0.0)    (0.0 0.0)
)
) ;standardViaDefs


Return to top
 ⠀
X