coriolis/lefdef/doc/lefapi/ch6LEFwriter.html

4694 lines
515 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN" "http://www.w3.org/MarkUp/Wilbur/HTML32.dtd">
<html xmlns="http://www.w3.org/MarkUp/Wilbur/HTML32.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>LEF 5.8 C/C++ Programming Interface -- 6</title>
<META NAME="Approver" CONTENT="Technical Publications">
<META NAME="Author" CONTENT="Technical Publications">
<META NAME="CreateDate" CONTENT="2017-04-12">
<META NAME="CreateTime" CONTENT="1491994561">
<META NAME="DataType" CONTENT="Manuals">
<META NAME="Description" CONTENT="Describes the C/C++ programming interface used to read and write Library Exchange Format (LEF) files.">
<META NAME="DocTitle" CONTENT="LEF 5.8 C/C++ Programming Interface">
<META NAME="DocType" CONTENT="Reference">
<META NAME="EdmsRelease" CONTENT="FM-Wiki-1.0_P005">
<META NAME="FileTitle" CONTENT="6">
<META NAME="Keywords" CONTENT="">
<META NAME="FileType" CONTENT="Chapter">
<META NAME="Keyword" CONTENT="lefapi">
<META NAME="Language" CONTENT="English">
<META NAME="ModifiedDate" CONTENT="2017-04-12">
<META NAME="ModifiedTime" CONTENT="1491994561">
<META NAME="NextFile" CONTENT="ch7LEFcompressed.html">
<META NAME="PageCount" CONTENT="146">
<META NAME="Platform" CONTENT="ALL">
<META NAME="PrevFile" CONTENT="ch5LEFwritercallback.html">
<META NAME="Product" CONTENT="Languages">
<META NAME="ProductFamily" CONTENT="Cadence Shared Tools">
<META NAME="ProductVersion" CONTENT="5.8">
<META NAME="Syntax" CONTENT="#define CHECK_RES(res) \ if (res) { \ lefwPrintError(res); \ return(res); \ }int endLibCB (lefwCallbackType_e type, lefiUserData userData) { int res; // Check if the type is correct if (type != lefwEndLibCbkType) { printf(&quot;Type is not lefwEndLibCbkType, terminate writing.\n&quot;); return 1; } res = lefwEnd(); CHECK_RES(res); return 0;},int busBitCharsCB (lefwCallbackType_e type, lefiUserData userData) { int res; // Check if the type is correct if (type != lefwBusBitCharsCbkType) { printf(&quot;Type is not lefwBusBitCharsCbkType, terminate writing.\n&quot;); return 1; } res = lefwBusBitChars(&quot;<>&quot;); CHECK_RES(res); return 0;},int dividerCB (lefwCallbackType_e type, lefiUserData userData) { int res; // Check if the type is correct if (type != lefwDividerCharCbkType) { printf(&quot;Type is not lefwDividerCharCbkType, terminate writing.\n&quot;); return 1; } res = lefwDividerChar(&quot;:&quot;); CHECK_RES(res); res = lefwNewLine(); // add an empty line CHECK_RES(res); return 0;},int extCB (lefwCallbackType_e type, lefiUserData userData) { int res; // Check if the type is correct if (type != lefwExtCbkType) { printf(&quot;Type is not lefwExtCbkType, terminate writing.\n&quot;); return 1; } res = lefwStartBeginext(&quot;SIGNATURE&quot;); CHECK_RES(res); res = lefwBeginextCreator(&quot;CADENCE&quot;); CHECK_RES(res); res = lefwBeginextDate(); CHECK_RES(res); res = lefwEndBeginext(); CHECK_RES(res); return 0;},int layerCB (lefwCallbackType_e type, lefiUserData userData) { int res; double *current; ... res = lefwStartLayerRouting(&quot;M3&quot;); CHECK_RES(res); res = lefwLayerRouting(&quot;HORIZONTAL&quot;, 0.9); CHECK_RES(res); res = lefwLayerRoutingPitch(1.8); CHECK_RES(res); res = lefwLayerRoutingWireExtension(8); CHECK_RES(res); res = lefwLayerRoutingSpacing(0.9, 0, 0); CHECK_RES(res); res = lefwLayerRoutingResistance(&quot;0.0608&quot;); CHECK_RES(res); res = lefwLayerRoutingCapacitance(&quot;0.000184&quot;); CHECK_RES(res); res = lefwLayerACCurrentDensity(&quot;AVERAGE&quot;,0); CHECK_RES(res); current[0] = 1E6; current[1] = 100E6; current[2] = 400E6; res = lefwLayerACFrequency(3, current); CHECK_RES(res); current[0] = 0.6E-6; current[1] = 0.5E-6; current[2] = 0.4E-6; res = lefwLayerACTableEntries(3, current); CHECK_RES(res); res = lefwEndLayerRouting(&quot;M3&quot;); CHECK_RES(res); ... return 0;},int layerCB (lefwCallbackType_e type, lefiUserData userData) { int res; double *current; // Check if the type is correct if (type != lefwLayerCbkType) { printf(&quot;Type is not lefwLayerCbkType, terminate writing.\n&quot;); return 1; } current = (double*)malloc(sizeof(double)*3); res = lefwStartLayer(&quot;CA&quot;, &quot;CUT&quot;); CHECK_RES(res); res = lefwLayerDCCurrentDensity(&quot;AVERAGE&quot;, 0); CHECK_RES(res); current[0] = 2.0; current[1] = 5.0; current[2] = 10.0; res = lefwLayerDCWidth(3, current); CHECK_RES(res); current[0] = 0.6E-6; current[1] = 0.5E-6; current[2] = 0.4E-6; res = lefwLayerDCTableEntries(3, current); CHECK_RES(res); res = lefwEndLayer(&quot;CA&quot;); CHECK_RES(res); free((char*)current); res = lefwStartLayer(&quot;POLYS&quot;, &quot;MASTERSLICE&quot;); CHECK_RES(res); res = lefwStringProperty(&quot;lsp&quot;, &quot;top&quot;); CHECK_RES(res); res = lefwIntProperty(&quot;lip&quot;, 1); CHECK_RES(res); res = lefwRealProperty(&quot;lrp&quot;, 2.3); CHECK_RES(res); res = lefwEndLayer(&quot;POLYS&quot;); CHECK_RES(res); res = lefwStartLayer(&quot;OVERLAP&quot;, &quot;OVERLAP&quot;); CHECK_RES(res); res = lefwEndLayer(&quot;OVERLAP&quot;); CHECK_RES(res); return 0;},int lefwAntennaCumSideAreaRatio(double value),int lefwAntennaDiffAreaRatio(double value),int lefwAntennaDiffAreaRatioPWL(int numPwls,double diffusions,double ratios),int lefwBeginextCreator(const char* creator),int lefwBeginextDate(),int lefwBeginextRevision(int vers1,int vers2) ,int lefwBeginextSyntax(const char* title,const char* string),int lefwBusBitChars(const char* busBitChars),int lefwClearanceMeasure(const char* type),int lefwCurrentLineNumber(),int lefwDensityCheckStep(double stepValue),int lefwDensityCheckWindow(double windowLength,double windowWidth),int lefwDividerChar(const char* dividerChar),int lefwEnd(),int lefwEndBeginext(),int lefwEndLayer(const char* layerName),int lefwEndLayerRouting(const char* layerName),int lefwEndMacro(const char* macroName),int lefwEndMacroObs(),int lefwEndMacroPin(const char* pinName),int lefwEndMacroPinPort(),int lefwEndNonDefaultRule(const char* ruleName),int lefwEndPropDef(,int lefwEndSite(const char* siteName),int lefwEndSpacing(),int lefwEndUnits(),int lefwEndVia(const char* viaName),int lefwEndViaRule(const char* viaRuleName),int lefwEndViaRuleGen(const char* viaRuleName),int lefwFillActiveSpacing(double spacing),int lefwInit(FILE* file),int lefwIntPropDef(const char* objType,const char* propName,double leftRange,double rightRange,int propValue),int lefwIntProperty(const char* propName,int propValue),int lefwLayerACCurrentDensity(const char* type,double value),int lefwLayerACCutarea(int numCutareas,double* cutareas),int lefwLayerACFrequency(int numFrequency,double* frequency),int lefwLayerACTableEntries(int numEntries,double* entries),int lefwLayerACWidth(int numWidths,double* widths),int lefwLayerAntennaAreaDiffReducePwl(int numPwls,double* diffAreas, double* metalDiffFactors),int lefwLayerAntennaAreaFactor(double valueconst char* diffUseOnly),int lefwLayerAntennaAreaMinusDiff(double minusDiffFactor),int lefwLayerAntennaAreaRatio(double value),int lefwLayerAntennaCumAreaRatio(double value),int lefwLayerAntennaCumDiffAreaRatio(double value),int lefwLayerAntennaCumDiffAreaRatioPwl(int numPwls,double diffusions,double ratios),int lefwLayerAntennaCumDiffSideAreaRatio(double value),int lefwLayerAntennaCumDiffSideAreaRatioPwl(int numPwls,double diffusions,double ratios),int lefwLayerAntennaCumRoutingPlusCut(),int lefwLayerAntennaDiffSideAreaRatio(double value),int lefwLayerAntennaDiffSideAreaRatioPwl(int numPwls,double diffusions,double ratios),int lefwLayerAntennaGatePlusDiff(double plusDiffFactor),int lefwLayerAntennaModel(const char* oxide),int lefwLayerAntennaSideAreaFactor(double value),int lefwLayerAntennaSideAreaFactor(double valueconst char* diffUseOnly),int lefwLayerArraySpacing(int longArray, double viaWidth, double cutSpacing,int numArrayCut,int* arrayCuts, double* arraySpacings),int lefwLayerCutSpacing(double spacing),int lefwLayerCutSpacingAdjacent(int viaCuts,double distance,int stack),int lefwLayerCutSpacingArea(double cutArea),int lefwLayerCutSpacingCenterToCenter(),int lefwLayerCutSpacingEnd(),int lefwLayerCutSpacingLayer(const char* name2,int stack),int lefwLayerCutSpacingParallel(),int lefwLayerCutSpacingSameNet(),int lefwLayerCutSpacingTableOrtho(int numSpacing,double* cutWithins,double* orthoSpacings),int lefwLayerDCCurrentDensity(const char* type,double value),int lefwLayerDCCutarea(int numCutareas,double* cutareas),int lefwLayerDCTableEntries(int numEntries,double* entries),int lefwLayerDCWidth(int numWidths,double* widths),int lefwLayerEnclosureLength(const char* location, double overhang1,double overhang2,double minLength),int lefwLayerEnclosureWidth(const char* location,double overhang1,double overhang2,double width,double cutWithin),int lefwLayerRoutineEndSpacingtable(),int lefwLayerRouting(const char* direction, double width),int lefwLayerRoutingArea (double area) ,int lefwLayerRoutingCapMultiplier(double capMultiplier),int lefwLayerRoutingCapacitance(const char* capacitance),int lefwLayerRoutingEdgeCap(double edgeCap),int lefwLayerRoutingHeight(double height),int lefwLayerRoutingMaxwidth(double width),int lefwLayerRoutingMinenclosedarea(int numMinenclosed,double* area,double* width),int lefwLayerRoutingMinimumcut(double numCuts,double minWidth),int lefwLayerRoutingMinimumcutConnections(const char* direction),int lefwLayerRoutingMinimumcutLengthWithin(double length,double distance),int lefwLayerRoutingMinimumcutWithin(double numCuts, double minWidth,double cutDistance),int lefwLayerRoutingMinstep(double distance),int lefwLayerRoutingMinstepMaxEdges(double distance,double maxEdges),int lefwLayerRoutingMinwidth(double width),int lefwLayerRoutingOffset(double offset),int lefwLayerRoutingPitch(double pitch),int lefwLayerRoutingProtrusion(double width1,double length,double width2),int lefwLayerRoutingResistance(const char* resistance),int lefwLayerRoutingShrinkage(double shrinkage),int lefwLayerRoutingSpacing(double Spacing),int lefwLayerRoutingSpacingEOLParallel(double parSpace, double parWithin,int twoEdges),int lefwLayerRoutingSpacingEndOfLine(double eolWidth, double eolWithin),int lefwLayerRoutingSpacingEndOfNotchWidth(double eonWidth,double minNSpacing, double minNLength),int lefwLayerRoutingSpacingLengthThreshold(double lengthValue,double minWidth,double maxWidth),int lefwLayerRoutingSpacingNotchLength(double minNLength),int lefwLayerRoutingSpacingRange(double minWidth,double maxWidth),int lefwLayerRoutingSpacingRangeInfluence (double infValue,double stubMinWidth,double stubMaxWidth),int lefwLayerRoutingSpacingRangeRange(double minWidth,double maxWidth),int lefwLayerRoutingSpacingRangeUseLengthThreshold(),int lefwLayerRoutingSpacingSameNet(int PGOnly),int lefwLayerRoutingSpacingtableTwoWidthsWidth(double width,double runLength,int numSpacing, double* spacing),int lefwLayerRoutingStartSpacingInfluenceWidth(double width,double distance,double spacing),int lefwLayerRoutingStartSpacingtableInfluence(),int lefwLayerRoutingStartSpacingtableParallel(int numlength,double* length),int lefwLayerRoutingStartSpacingtableParallelWidth(double width,int numSpacing,double* spacing),int lefwLayerRoutingStartSpacingtableTwoWidths(),int lefwLayerRoutingThickness(double thickness),int lefwLayerRoutingWireExtension(double wireExtension),int lefwLayerWidth(double minWidth),int lefwMacroClass(const char* value1,const char* value2),int lefwMacroEEQ(const char* macroName),int lefwMacroForeign(const char* cellName,double xl,double yl,int orient),int lefwMacroForeignStr(const char* cellName,double xl,double yl,const char* orient),int lefwMacroObsDesignRuleWidth(const char* layerNamedouble width),int lefwMacroObsLayer(const char* layerName,double spacing),int lefwMacroObsLayerPath(int num_paths,double* xl,double* yl,int numX,int numY,double spaceX,double spaceY),int lefwMacroObsLayerPolygon(int num_polys,double* xl,double* yl,int numX,int numY,double spaceX,)double spaceY),int lefwMacroObsLayerRect(double xl1,double yl1,double xl2,double yl2,int numX,int numY,) double spaceX,double spaceY),int lefwMacroObsLayerWidth(double width),int lefwMacroObsVia(double xl,double yl,const char* viaName,int numX,int numY,double spaceX,)double spaceY),int lefwMacroOrigin(double xl,double yl),int lefwMacroPinAntennaDiffArea(double value,const char* layerName),int lefwMacroPinAntennaGateArea(double value,const char* layerName),int lefwMacroPinAntennaMaxAreaCar(double value,const char* layerName),int lefwMacroPinAntennaMaxCutCar(double value,const char* layerName),int lefwMacroPinAntennaMaxSideAreaCar(double value,const char* layerName),int lefwMacroPinAntennaModel(const char* oxide),int lefwMacroPinAntennaPartialCutArea(double value,const char* layerName),int lefwMacroPinAntennaPartialMetalArea(double value,const char* layerName),int lefwMacroPinAntennaPartialMetalSideArea(double value,const char* layerName) ,int lefwMacroPinDirection(const char* direction),int lefwMacroPinMustjoin(const char* pinName),int lefwMacroPinPortDesignRuleWidth(const char* layerName,double width),int lefwMacroPinPortLayer(const char* layerName,double spacing),int lefwMacroPinPortLayerPath(int num_paths,double* xl,double* yl,int numX,int numY,double spaceX,double spaceY),int lefwMacroPinPortLayerPolygon(int num_polys,double* xl,double* yl,int numX,int numY,double spaceX,double spaceY),int lefwMacroPinPortLayerRect(double xl1,double yl1,double xl2,double yl2,int numX,int numY,double spaceX,double spaceY),int lefwMacroPinPortLayerWidth(double width),int lefwMacroPinPortVia(double xl,double yl,const char* viaName,int numX,int numY,double spaceX,double spaceY),int lefwMacroPinShape(const char* name),int lefwMacroPinTaperRule(const char* ruleName),int lefwMacroPinUse(const char* use),int lefwMacroSite(const char* siteName),int lefwMacroSize(double width,double height),int lefwMacroSymmetry(const char* symmetry),int lefwManufacturingGrid(double grid),int lefwMaxAdjacentSlotSpacing(double maxSpacing),int lefwMaxCoaxialSlotSpacing(double maxSpacing),int lefwMaxEdgeSlotSpacing(double maxSpacing),int lefwMaximumDensity(double maxDensity),int lefwMaxviastack(int value,const char* bottomlayer,const char* topLayer),int lefwMinimumDensity(double minDensity),int lefwNewLine(),int lefwNonDefaultRuleLayer(const char* layerName,double width,double minSpacing,double wireExtension,double resistance,double capacitance,double edgecap),int lefwRealPropDef(const char* objType,const char* propName,double leftRange,double rightRange,int propValue),int lefwRealProperty(const char* propName,double propValue),int lefwSite(const char* siteName,const char* classType,const char* symmetry,double width,double height),int lefwSlotLength(double minSlotLength),int lefwSlotWidth(double minSlotWidth),int lefwSlotWireLength(double minWireLength),int lefwSlotWireWidth(double minWireWidth),int lefwSpacing(const char* layerName1,const char* layerName2,double minSpace,const char* stack),int lefwSplitWireWidth(double minWireWidth),int lefwStartBeginext(const char* tag),int lefwStartLayer(const char* layerName,const char* type),int lefwStartLayerRouting(const char* layerName),int lefwStartMacro(const char* macroName),int lefwStartMacroObs(),int lefwStartMacroPin(const char* pinName),int lefwStartMacroPinPort(const char* classType),int lefwStartNonDefaultRule(const char* ruleName),int lefwStartPropDef(),int lefwStartSpacing(),int lefwStartUnits(),int lefwStartVia(const char* viaName,const char* isDefault),int lefwStartViaRule(const char* viaRuleName),int lefwStartViaRuleGen(const char* viaRuleName),int lefwStringPropDef(const char* objType,const char* propName,double leftRange,double rightRange,int propValue),int lefwStringProperty(const char* propName,const char* propValue),int lefwUnits(double time,double capacitance,double resistance,double power,double current,double voltage,double database),int lefwUnitsFrequency(double frequency),int lefwUseMinSpacing(const char* type,const char* onOff),int lefwVersion(int vers1,int vers2),int lefwViaLayer(const char* layerName),int lefwViaLayerRect(double x1l,double y1l,double x2l,double y2l),int lefwViaResistance(double resistance),int lefwViaRuleGenLayer(const char* layerName,const char* direction,double minWidth,double maxWidth,double overhang,double metalOverhang),int lefwViaRuleGenLayer3(const char* layerName,double xl,double yl,double xh,double yh,double xSpacing,double ySpacing,double resistance),int lefwViaRuleGenLayerEnclosure(const char* layerName,double overhang1,double overhang2,double minWidth,double maxWidth),int lefwViaRuleLayer(const char* layerName,const char* direction, double minWidth,double maxWidth,double overhang,double metalOverhang),int lefwViaRuleVia(const char* viaName),int macroCB (lefwCallbackType_e type, lefiUserData userData) { int res; ... res = lefwStartMacroPin(&quot;Z&quot;); CHECK_RES(res); res = lefwMacroPinDirection(&quot;OUTPUT&quot;); CHECK_RES(res); res = lefwMacroPinUse(&quot;SIGNAL&quot;); CHECK_RES(res); res = lefwMacroPinShape(&quot;ABUTMENT&quot;); CHECK_RES(res); res = lefwMacroPinPower(0.1); CHECK_RES(res); res = lefwStartMacroPinPort(NULL); CHECK_RES(res); res = lefwEndMacroPin(&quot;Z&quot;); CHECK_RES(res); ... return 0;},int macroCB (lefwCallbackType_e type, lefiUserData userData) { int res; double *xpath; double *ypath; ... res = lefwStartMacroObs(); CHECK_RES(res); res = lefwMacroObsLayer(&quot;M1&quot;, 0); CHECK_RES(res); res = lefwMacroObsLayerRect(24.1, 1.5, 43.5, 208.5, 0, 0, 0, 0); CHECK_RES(res); xpath = (double*)malloc(sizeof(double)*2); ypath = (double*)malloc(sizeof(double)*2); xpath[0] = 8.4; ypath[0] = 3; xpath[1] = 8.4; ypath[1] = 124; res = lefwMacroObsLayerPath(2, xpath, ypath, 0, 0, 0, 0); CHECK_RES(res); free((char*)xpath); free((char*)ypath); res = lefwEndMacroObs(); CHECK_RES(res); ... return 0;},int macroCB (lefwCallbackType_e type, lefiUserData userData) { int res; double *xpath; double *ypath; ... res = lefwStartMacroPin(&quot;Z&quot;); CHECK_RES(res); ... res = lefwStartMacroPinPort(NULL); CHECK_RES(res); res = lefwMacroPinPortLayer(&quot;M2&quot;, 5.6); CHECK_RES(res); xpath = (double*)malloc(sizeof(double)*3); ypath = (double*)malloc(sizeof(double)*3); xpath[0] = 30.8; ypath[0] = 9; xpath[1] = 42; ypath[1] = 9; xpath[2] = 30.8; ypath[2] = 9; res = lefwMacroPinPortLayerPath(3, xpath, ypath, 0, 0, 0, 0); CHECK_RES(res); res = lefwEndMacroPinPort(); CHECK_RES(res); ... res = lefwEndMacroPin(&quot;Z&quot;); CHECK_RES(res); free((char*)xpath); free((char*)ypath); ... return 0;},int macroCB (lefwCallbackType_e type, lefiUserData userData) { int res; double *xpath; double *ypath; // Check if the type is correct if (type != lefwMacroCbkType) { printf(&quot;Type is not lefwMacroCbkType, terminate writing.\n&quot;); return 1; } res = lefwStartMacro(&quot;INV&quot;); CHECK_RES(res); res = lefwMacroClass(&quot;CORE&quot;, NULL); CHECK_RES(res); res = lefwMacroForeign(&quot;INVS&quot;, 0, 0, -1); CHECK_RES(res); res = lefwMacroPower(1.0); CHECK_RES(res); res = lefwMacroSize(67.2, 24); CHECK_RES(res); res = lefwMacroSymmetry(&quot;X Y R90&quot;); CHECK_RES(res); res = lefwMacroSite(&quot;CORE1&quot;); CHECK_RES(res); return 0;},int macroCB (lefwCallbackType_e type, lefiUserData userData) { int res; ... res = lefwStringProperty(&quot;TYPE&quot;, &quot;special&quot;); CHECK_RES(res); res = lefwIntProperty(&quot;intProp&quot;, 23); CHECK_RES(res); res = lefwRealProperty(&quot;realProp&quot;, 24.25); CHECK_RES(res); ... return 0;},int nonDefaultCB (lefwCallbackType_e type, lefiUserData userData) { int res; // Check if the type is correct if (type != lefwNonDefaultCbkType) { printf(&quot;Type is not lefwNonDefaultCbkType, terminate writing.\n&quot;); return 1; } res = lefwStartNonDefaultRule(&quot;RULE1&quot;); CHECK_RES(res); res = lefwNonDefaultRuleLayer(&quot;RX&quot;, 10.0, 2.2, 6); CHECK_RES(res); res = lefwNonDefaultRuleLayer(&quot;PC&quot;, 10.0, 2.2, 0); CHECK_RES(res); res = lefwEndNonDefaultRule(&quot;RULE1&quot;); CHECK_RES(res); return 0;},int propDefCB (lefwCallbackType_e type, lefiUserData userData) { int res; // Check if the type is correct if (type != lefwPropDefCbkType) { printf(&quot;Type is not lefwPropDefCbkType, terminate writing.\n&quot;); return 1; } res = lefwStartPropDef(); CHECK_RES(res); res = lefwStringPropDef(&quot;LIBRARY&quot;, &quot;NAME&quot;, 0, 0, &quot;Cadence96&quot;); CHECK_RES(res); res = lefwIntPropDef(&quot;LIBRARY&quot;, &quot;intNum&quot;, 0, 0, 20); CHECK_RES(res); res = lefwRealPropDef(&quot;LIBRARY&quot;, &quot;realNum&quot;, 0, 0, 21.22); CHECK_RES(res); res = lefwEndPropDef(); CHECK_RES(res); return 0;},int setupRoutine() { FILE* f; int res; int userData = 0x01020304; ... // Open the lef file for the writer to write. if ((f = fopen(&quot;lefOutputFileName&quot;,&quot;w&quot;)) == 0) { printf(&quot;Couldn<64>t open output file <20>%s<>\n&quot;, &quot;lefOutputFileName&quot;); return(2); } // Initialize the writer. This routine has to call first. Call this // routine instead of lefwInit() if you are using the writer with // callbacks. res = lefwInitCbk(f); // Set the user callback routines lefwSetAntennaCbk(antennaCB); lefwSetBusBitCharsCbk(busBitCharsCB); lefwSetCaseSensitiveCbk(caseSensCB); lefwSetCorrectionTableCbk(correctTableCB); lefwSetEndLibCbk(endLibCB); ... // Invoke the parser res = lefrWrite(f, &quot;lefInputFileName&quot;, (void*)userData); if (res != 0) { printf(&quot;LEF writer returns an error\n&quot;); return(2); }fclose(f);return 0;},int setupRoutine() { FILE* f; int res;...// Open the lef file for the writer to write. if ((f = fopen(&quot;lefOutputFileName&quot;,&quot;w&quot;)) == 0) { printf(&quot;Couldn<64>t open output file <20>%s<>\n&quot;, &quot;lefOutputFileName&quot;); return(2); } // Initialize the writer. This routine has to call first. Call this // routine instead of lefwInitCbk(f) if you are not using the // callback routines. res = lefwInit(f); ... res = lefwEnd(); ... fclose(f); return 0;},int siteCB (lefwCallbackType_e type, lefiUserData userData) { int res; // Check if the type is correct if (type != lefwSiteCbkType) { printf(&quot;Type is not lefwSiteCbkType, terminate writing.\n&quot;); return 1; } res = lefwSite(&quot;CORE1&quot;, &quot;CORE&quot;, &quot;X&quot;, 67.2, 6); CHECK_RES(res); return 0;},int spacingCB (lefwCallbackType_e type, lefiUserData userData) { int res; // Check if the type is correct if (type != lefwSpacingCbkType) { printf(&quot;Type is not lefwSpacingCbkType, terminate writing.\n&quot;); return 1; } res = lefwStartSpacing(); CHECK_RES(res); res = lefwSpacing(&quot;CUT01&quot;, &quot;CA&quot;, 1.5, NULL); CHECK_RES(res); res = lefwEndSpacing(); CHECK_RES(res); return 0;},int unitsCB (lefwCallbackType_e type, lefiUserData userData) { int res; // Check if the type is correct if (type != lefwUnitsCbkType) { printf(&quot;Type is not lefwUnitsCbkType, terminate writing.\n&quot;); return 1; } res = lefwStartUnits(); CHECK_RES(res); res = lefwUnits(100, 10, 10000, 10000, 10000, 1000, 0); CHECK_RES(res); res = lefwEndUnits(); CHECK_RES(res); return 0;},int versionCB (lefwCallbackType_e type, lefiUserData userData) { int res; // Check if the type is correct if (type != lefwVersionCbkType) { printf(&quot;Type is not lefwVersionCbkType, terminate writing.\n&quot;); return 1; } res = lefwVersion(5, 3); CHECK_RES(res); return 0;},int viaCB (lefwCallbackType_e type, lefiUserData userData) { int res; // Check if the type is correct if (type != lefwViaCbkType) { printf(&quot;Type is not lefwViaCbkType, terminate writing.\n&quot;); return 1; } res = lefwStartVia(&quot;RX_PC&quot;, &quot;DEFAULT&quot;); CHECK_RES(res); res = lefwViaResistance(2); CHECK_RES(res); res = lefwViaForeign(&quot;IN1X&quot;, 0, 0, -1); CHECK_RES(res); res = lefwViaLayer(&quot;RX&quot;); CHECK_RES(res); res = lefwViaLayerRect(-0.7, -0.7, 0.7, 0.7); CHECK_RES(res); res = lefwViaLayer(&quot;CUT12&quot;); CHECK_RES(res); res = lefwViaLayerRect(-0.25, -0.25, 0.25, 0.25); CHECK_RES(res); res = lefwRealProperty(&quot;realProperty&quot;, 32.33); CHECK_RES(res); res = lefwIntProperty(&quot;COUNT&quot;, 34); CHECK_RES(res); res = lefwEndVia(&quot;RX_PC&quot;); CHECK_RES(res); return 0;},int viaRuleCB(lefwCallbackType_e c, lefiUserData ud) { int res; // Check if the type is correct if (type != lefwViaCbkType) { printf(&quot;Type is not lefwViaCbkType, terminate writing.\n&quot;); return 1; } res = lefwStartViaRule(&quot;VIALIST12&quot;); CHECK_RES(res); lefwAddComment(&quot;Break up the old lefwViaRule into 2 routines&quot;); lefwAddComment(&quot;lefwViaRuleLayer and lefwViaRuleVia&quot;); res = lefwViaRuleLayer(&quot;M1&quot;, &quot;VERTICAL&quot;, 9.0, 9.6, 4.5, 0); CHECK_RES(res); res = lefwViaRuleLayer(&quot;M2&quot;, &quot;HORIZONTAL&quot;, 3.0, 3.0, 0, 0); CHECK_RES(res); res = lefwViaRuleVia(&quot;VIACENTER12&quot;); CHECK_RES(res); res = lefwStringProperty(&quot;vrsp&quot;, &quot;new&quot;); CHECK_RES(res); res = lefwIntProperty(&quot;vrip&quot;, 1); CHECK_RES(res); res = lefwRealProperty(&quot;vrrp&quot;, 4.5); CHECK_RES(res); res = lefwEndViaRule(&quot;VIALIST12&quot;); CHECK_RES(res); return 0;},int viaRuleCB(lefwCallbackType_e c, lefiUserData ud) { int res; // Check if the type is correct if (type != lefwViaCbkType) { printf(&quot;Type is not lefwViaCbkType, terminate writing.\n&quot;); return 1; } res = lefwStartViaRuleGen(&quot;VIAGEN12&quot;); CHECK_RES(res); res = lefwViaRuleGenLayer(&quot;M1&quot;, &quot;VERTICAL&quot;, 0.1, 19, 1.4, 0); CHECK_RES(res); res = lefwViaRuleGenLayer(&quot;M2&quot;, &quot;HORIZONTAL&quot;, 0, 0, 1.4, 0); CHECK_RES(res); res = lefwViaRuleGenLayer3(&quot;V1&quot;, -0.8, -0.8, 0.8, 0.8, 5.6, 6.0, 0.2); CHECK_RES(res); res = lefwEndViaRuleGen(&quot;VIAGEN12&quot;); CHECK_RES(res); return 0;},lefwEndMacroDensity(),lefwLayerEnclosure(const char* location,double overhang1,double overhang2,double width),lefwLayerPreferEnclosure(const char* location,double overhang1,double overhang2,double width),lefwLayerResistancePerCut( double resistance),lefwLayerRoutingDiagMinEdgeLength( double diagLength),lefwLayerRoutingDiagPitch( double distance),lefwLayerRoutingDiagPitchXYDistance( double diag45Distance, double diag135Distance),lefwLayerRoutingDiagSpacing( double diagSpacing),lefwLayerRoutingDiagWidth( double diagWidth),lefwLayerRoutingMinsize( int numRect,double* minWidth, double* minLength),lefwLayerRoutingMinstepWithOptions( double distance, const char* rule, double maxLength),lefwLayerRoutingOffsetXYDistance( double xDistance, double yDistance),lefwLayerRoutingPitchXYDistance( double xDistance, double yDistance),lefwMacroDensityLayerRect( double x1, double y1, double x2, double y2, double densityValue),lefwMacroPinGroundSensitivity( const char* pinName),lefwMacroPinNetExpr( const char* name),lefwMacroPinSupplySensitivity( const char* pinName),lefwMacroSitePattern( const char* name, double origX, double orgY, int orient, int numX, int numY, double spaceX, double spaceY),lefwMacroSitePatternStr( const char* name, double origX, double orgY, int orient, int numX, int numY, double spaceX, double spaceY),lefwNonDefaultRuleEndVia( const char* viaName),lefwNonDefaultRuleHardspacing(),lefwNonDefaultRuleMinCuts( const char* layerName, int numCuts),lefwNonDefaultRuleStartVia( const char* viaName, const char* isDefault),lefwNonDefaultRuleUseVia( const char* viaName),lefwNonDefaultRuleUseViaRule( const char* viaRuleName),lefwSiteRowPattern( const char* siteName, int orient),lefwStartMacroDensity( const char* layerName),lefwViaLayerPolygon( int num_polys, double* xl, double* yl),lefwViaRuleGenDefault(),lefwViaViaRuleRowCol( int numCutRows, int numCutCols),lefwViaViarule( const char* viaRuleName, double xCutSize, double yCutSize, const char* botMetalLayer, const char* cutLayer, const char* topMetalLayer, double xCutSpacing, double yCutSpacing, double xBotEnc, double yBotEnc, double xTopEnc, double yTopEnc),lefwViaViaruleOffset(double xBotOffset, double yBotOffset, double xTopOffset, double yTopOffset),lefwViaViaruleOrigin( double xOffset, double yOffset),lefwViaViarulePattern( const char* cutPattern),void lefwPrintError(int status)">
<META NAME="RightsManagement" CONTENT="Copyright 2017 Cadence Design Systems Inc.">
<META NAME="Title" CONTENT="LEF 5.8 C/C++ Programming Interface -- 6">
<META NAME="TopicTags" CONTENT="FALSE">
<META NAME="Version" CONTENT="5.8">
</head>
<body style="margin-left: 5%;">
<a name="pagetop"></a>
<a name="firstpage"></a>
<!-- Begin Buttons -->
<table width="650" cellpadding="0" cellspacing="0" border="0">
<tr>
<td height="36" width="650" colspan="10">
<img src="images/header_doc.gif" width="650" height="34">
</td>
</tr>
<tr>
<td height="20" width="59">
<a href="javascript:openLibrary()"><img src="../support/nav2_library.gif" border="0" alt="View Library" height="20" width="59"></a>
</td>
<td height="20" width="73">
<a href="lefapiTOC.html"><img src="../support/nav2_toc.gif" alt="Table of Contents" border="0"></a>
</td>
<td height="20" width="46">
<img src="../support/nav2_index_b.gif" border="0">
</td>
<td>
<a href="ch5LEFwritercallback.html"><img src="images/nav2_previous.gif" alt="Previous" border="0"></a>
</td>
<td>
<a href="ch7LEFcompressed.html"><img src="images/nav_next.gif" alt="Next" border="0"></a>
</td>
<td height="20">
<a>
<a href="lefapi.pdf"><img src="../support/nav2_print.gif" border="0" alt="Open PDF to print book" height="20" width="114"></a>
</a>
</td>
<td height="20" width="61">
<img src="../support/nav2_black.gif" border="0" height="20" width="76">
</td>
<td height="20" width="76">
<a href="/feedback.htm"><img src="../support/nav2_feedback.gif" border="0" alt="Email Comments" height="20" width="76"></a>
</td>
<td height="20" width="43">
<a href="../cdsuser/help.html"><img src="../support/nav2_help.gif" border="0" alt="Help Using Documentation" height="20" width="43"></a>
</td>
<td height="20" width="37">
<a href="/exitsearch.htm"><img src="../support/nav2_exit.gif" border="0" alt="Shut Down Cadence Documentation Server" height="20" width="37"></a>
</td>
</tr>
</table>
<!-- End Buttons -->
<p>
<hr>
<p>
<h3>
<center>
<font >
<div>LEF 5.8 C&#47;C++ Programming Interface (Open Licensing Program)</div>
<font >
<div></div>
</font>
</font>
</center>
</h3>
<br>
</p>
<div>
<h1>6<a name="1008781">&nbsp;</a></h1>
<h1><a name="1011663">LEF Writer Routines</a></h1>
<p><a name="1068235">You can use the Cadence</a><font color="#000000"><sup>&#174;</sup></font> Library Exchange Format (LEF) writer routines to create a program that outputs a LEF file. The LEF writer routines correspond to the sections in the LEF file. This chapter describes the routines listed below that you need to write a particular LEF section.</p>
<table summary="" border="0" cellpadding="4" cellspacing="0" bordercolor="#D3D3D3" width="600">
<caption>
<tr>
<td cellpadding="4" border="0" bordercolor="#D3D3D3" valign="middle" width="230">
<p>
<font face="Verdana, Arial, Helvetica, sans-serif" color="#003366"><strong><a name="1068238"><font color="#000000"><strong>Routines</strong></font></a></strong></font>
</p>
</td>
<td cellpadding="4" border="0" bordercolor="#D3D3D3" valign="middle" width="370">
<p>
<font face="Verdana, Arial, Helvetica, sans-serif" color="#003366"><strong><a name="1068240">LEF File Sections</a></strong></font>
</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1068466" title="6" name="1068245"><font color="#0000ff"><u>LEF Writer Setup and Control</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068247">Initialization and global variables</a></p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1065132" title="6" name="1068280"><font color="#0000ff"><u>Bus Bit Characters</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068282"><font size="2" face="'Courier New'" color="#000000">BUSBITCHARS</font></a> statement</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#ClearanceMeasure" title="6" name="1073267"><font color="#0000ff"><u>Clearance Measure</u></font></a> </p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1072003"><font size="2" face="'Courier New'" color="#000000">CLEARANCEMEASURE</font></a> statement</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1065372" title="6" name="1068315"><font color="#0000ff"><u>Divider Character</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068317"><font size="2" face="'Courier New'" color="#000000">DIVIDERCHAR</font></a> statement</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1041987" title="6" name="1068322"><font color="#0000ff"><u>Extensions</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068324">Extensions statement</a></p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#Layer(Cut)" title="6" name="1068335"><font color="#0000ff"><u>Layer (Cut, Masterslice, Overlap, Implant)</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068338"><font size="2" face="'Courier New'" color="#000000">LAYER</font></a> sections about cut, masterslice, overlap, and implant layers</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#Layer(Routing)" title="6" name="1068343"><font color="#0000ff"><u>Layer (Routing)</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068345"><font size="2" face="'Courier New'" color="#000000">LAYER</font></a> section about routing layers</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1070777" title="6" name="1068350"><font color="#0000ff"><u>Macro</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068352"><font size="2" face="'Courier New'" color="#000000">MACRO</font></a> section</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<blockquote><a href="#1065960" title="6" name="1068357"><font color="#0000ff"><u>Macro Obstruction</u></font></a></blockquote>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068359"><font size="2" face="'Courier New'" color="#000000">OBS</font></a> section within a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<blockquote><a href="#1066045" title="6" name="1068364"><font color="#0000ff"><u>Macro Pin</u></font></a></blockquote>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068366"><font size="2" face="'Courier New'" color="#000000">PIN</font></a> section within a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<blockquote><a href="#1066278" title="6" name="1068371"><font color="#0000ff"><u>Macro Pin Port</u></font></a></blockquote>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068373"><font size="2" face="'Courier New'" color="#000000">PORT</font></a> section within a <font size="2" face="'Courier New'" color="#000000">PIN</font> section</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1077609" title="6" name="1077631"><font color="#0000ff"><u>Manufacturing Grid</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1077633"><font size="2" face="'Courier New'" color="#000000">MANUFACTURINGGRID</font></a> statement</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1077306" title="6" name="1077334"><font color="#0000ff"><u>Maximum Via Stack</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1077336"><font size="2" face="'Courier New'" color="#000000">MAXVIASTACK</font></a> statement</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1066594" title="6" name="1068399"><font color="#0000ff"><u>Nondefault Rule</u></font></a> </p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068401"><font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font></a> section </p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1066631" title="6" name="1068406"><font color="#0000ff"><u>Property</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068408"><font size="2" face="'Courier New'" color="#000000">PROPERTY</font></a> statement in a <font size="2" face="'Courier New'" color="#000000">VIA</font>, <font size="2" face="'Courier New'" color="#000000">VIARULE</font>, <font size="2" face="'Courier New'" color="#000000">LAYER</font>, <font size="2" face="'Courier New'" color="#000000">MACRO</font> or <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> section</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#PropertyDefinitions" title="6" name="1068413"><font color="#0000ff"><u>Property Definitions</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068415"><font size="2" face="'Courier New'" color="#000000">PROPERTYDEFINTIONS</font></a> statement</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1066709" title="6" name="1068420"><font color="#0000ff"><u>Same&#45;Net Spacing</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068422"><font size="2" face="'Courier New'" color="#000000">SPACING</font></a> statement</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1066742" title="6" name="1068427"><font color="#0000ff"><u>Site</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068429"><font size="2" face="'Courier New'" color="#000000">SITE</font></a> statement</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1066789" title="6" name="1068434"><font color="#0000ff"><u>Units</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068436"><font size="2" face="'Courier New'" color="#000000">UNITS</font></a> statement</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1071910" title="6" name="1071907"><font color="#0000ff"><u>Use Min Spacing</u></font></a> </p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1071909"><font size="2" face="'Courier New'" color="#000000">USEMINSPACING</font></a> statement</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1071983" title="6" name="1068441"><font color="#0000ff"><u>Version</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068443"><font size="2" face="'Courier New'" color="#000000">VERSION</font></a> statement</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#1066875" title="6" name="1068448"><font color="#0000ff"><u>Via</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068450"><font size="2" face="'Courier New'" color="#000000">VIA</font></a> section</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a href="#ViaRule" title="6" name="1068455"><font color="#0000ff"><u>Via Rule</u></font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1068457"><font size="2" face="'Courier New'" color="#000000">VIARULE</font></a> statement</p>
</td>
</tr>
<tr>
<td cellpadding="4" border="1" bordercolor="#000000" valign="top">
<p><a href="#ViaRuleGenerate" title="6" name="1068462"><font color="#0000ff"><u>Via Rule Generate</u></font></a></p>
</td>
<td cellpadding="4" border="1" bordercolor="#000000" valign="top">
<p><a name="1068464"><font size="2" face="'Courier New'" color="#000000">VIARULEGENERATE</font></a> statement</p>
</td>
</tr>
</table>
<h2><a name="1068466">LEF Writer Setup and Control</a></h2>
<p><a name="1045020">The LEF writer setup and control routines initialize the reader and set global variables that are used by the reader. You must begin and end a LEF file with the </a><font size="2" face="'Courier New'" color="#000000">lefwInit</font> and <font size="2" face="'Courier New'" color="#000000">lefwEnd</font> routines. All other routines must be used between these two routines. The remaining routines described in this section are provided as utilities. For examples of the routines described, see <a href="#1071832" title="6"><font color="Blue"><u>"Setup Examples"</u></font></a><a href="#1071832" title="6"></a>.</p>
<p><a name="1041039">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1058725">lefwInit</a></h3>
<p><a name="1058730">Initializes the LEF writer. This routine must be used first. </a></p>
<h4><a name="1058726">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1058727">int lefwInit(<dd>FILE* </a><font size="2" face="'Courier New'" color="#000000"><em>file</em></font>)</font>
</dl>
<h4><a name="1049639">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1049646"><font size="2" face="'Courier New'" color="#000000"><em>file</em></font></a></strong>
</p>
<blockquote><a name="1085285">Specifies the name of the LEF file to create.</a></blockquote>
<h3><a name="1028575">lefwEnd</a></h3>
<p><a name="1058738">Ends the LEF file. This routine must be used last. This routine does not require any arguments.</a></p>
<h4><a name="1049656">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1049663">int lefwEnd()</a></font>
</dl>
<h3><a name="1040535">lefwCurrentLineNumber</a></h3>
<p><a name="1064609">Returns the line number of the last line written to the LEF file. This routine does not require any arguments.</a></p>
<h4><a name="1049689">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1049696">int lefwCurrentLineNumber()</a></font>
</dl>
<h3><a name="1040548">lefwNewLine</a></h3>
<p><a name="1058969">Writes a blank line. This routine does not require any arguments.</a></p>
<h4><a name="1049718">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1049719">int lefwNewLine()</a></font>
</dl>
<h3><a name="1040563">lefwPrintError</a></h3>
<p><a name="1058754">Prints the return status of the </a><font size="2" face="'Courier New'" color="#000000">lefw*</font> routines.</p>
<h4><a name="1049743">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1049744">void lefwPrintError(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>status</em></font>)</font>
</dl>
<h4><a name="1049755">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1058757"><font size="2" face="'Courier New'" color="#000000"><em>status</em></font></a></strong>
</p>
<blockquote><a name="1085297">Specifies the non&#45;zero integer returned by the LEF writer routines.</a></blockquote>
<h3><a name="1071832">Setup Examples</a></h3>
<p><a name="1071833">The following examples show how to set up the writer. There are two ways to use the LEF writer:</a></p>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a name="1071837">You call the write routines in your own sequence. The writer makes sure that some routines are called before others, but you must make sure the entire sequence is correct, and that all required sections are there.</a></td>
</tr>
</table>
</div>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a name="1071840">You write callback routines for each section, and the writer calls your callback routines in the sequence based on the </a><font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>. If a section is required, but you do not provide a callback routine, the writer issues a warning. If there is a default routine, the writer invokes the default routine with a message attached.</td>
</tr>
</table>
</div>
<p><a name="1071843">This manual includes examples with and without callback routines.</a></p>
<p><a name="1071844">The following example uses the writer without callbacks.</a></p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1064956">int setupRoutine() {<dd> FILE* f;<dd> int res;<dd><dd>...<dd>&#47;&#47; Open the lef file for the writer to write.<dd> if ((f = fopen(&#34;lefOutputFileName&#34;,&#34;w&#34;)) == 0) {<dd> printf(&#34;Couldn't open output file '%s'\n&#34;,<dd> &#34;lefOutputFileName&#34;);<dd> return(2);<dd> }<dd><dd> &#47;&#47; Initialize the writer. This routine has to call first. Call this<dd> &#47;&#47; routine instead of lefwInitCbk(f) if you are not using the <dd> &#47;&#47; callback routines.<dd> res = lefwInit(f);<dd> ...<dd><dd> res = lefwEnd();<dd> ...<dd><dd> fclose(f);<dd><dd> return 0;<dd>}<dd></a></font>
</dl>
<p><a name="1064960">The following example uses the writer with callbacks.</a></p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1064961">int setupRoutine() {<dd> FILE* f;<dd> int res;<dd> int userData = 0x01020304;<dd><dd> ...<dd> &#47;&#47; Open the lef file for the writer to write.<dd> &nbsp;&nbsp;&nbsp;&nbsp;if ((f = fopen(&#34;lefOutputFileName&#34;,&#34;w&#34;)) == 0) {<dd> &nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;Couldn't open output file '%s'\n&#34;,<dd> &nbsp;&nbsp;&nbsp;&nbsp;&#34;lefOutputFileName&#34;);<dd> &nbsp;&nbsp;&nbsp;&nbsp;return(2);<dd> }<dd><dd> &#47;&#47; Initialize the writer. This routine has to call first. Call this<dd> &#47;&#47; routine instead of lefwInit() if you are using the writer with<dd> &#47;&#47; callbacks.<dd> res = lefwInitCbk(f);<dd><dd> &#47;&#47; Set the user callback routines<dd> &nbsp;&nbsp;&nbsp;&nbsp;lefwSetAntennaCbk(antennaCB);<dd> &nbsp;&nbsp;&nbsp;&nbsp;lefwSetBusBitCharsCbk(busBitCharsCB);<dd> &nbsp;&nbsp;&nbsp;&nbsp;lefwSetCaseSensitiveCbk(caseSensCB);<dd> &nbsp;&nbsp;&nbsp;&nbsp;lefwSetCorrectionTableCbk(correctTableCB);<dd> &nbsp;&nbsp;&nbsp;&nbsp;lefwSetEndLibCbk(endLibCB);<dd> &nbsp;&nbsp;&nbsp;&nbsp;...<dd><dd> &#47;&#47; Invoke the parser<dd> &nbsp;&nbsp;&nbsp;&nbsp;res = lefrWrite(f, &#34;lefInputFileName&#34;, (void*)userData);<dd> &nbsp;&nbsp;&nbsp;&nbsp;if (res != 0) {<dd> &nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;LEF writer returns an error\n&#34;);<dd> &nbsp;&nbsp;&nbsp;&nbsp;return(2);<dd> }<dd><dd>&nbsp;&nbsp;&nbsp;&nbsp;fclose(f);<dd><dd>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<dd>}</a></font>
</dl>
<p><a name="1071854">The following example shows how to use the callback routine to mark the end of the LEF file. The type is </a><font size="2" face="'Courier New'" color="#000000">lefwEndLibCbkType</font>.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1064966">#define CHECK_RES(res) \<dd> if (res) { \<dd> lefwPrintError(res); \<dd> return(res); \<dd> }<dd><dd>int endLibCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwEndLibCbkType) {<dd> printf(&#34;Type is not lefwEndLibCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd><dd> res = lefwEnd();<dd> CHECK_RES(res);<dd> return 0;<dd>}</a></font>
</dl>
<h2><a name="1065132">Bus Bit Characters</a></h2>
<p><a name="1041467">The Bus Bit Characters routine writes a LEF </a><font size="2" face="'Courier New'" color="#000000">BUSBITCHARS</font> statement. The <font size="2" face="'Courier New'" color="#000000">BUSBITCHARS</font> statement is optional and can be used only once in a LEF file. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">BUSBITCHARS</font> statement, see <a href="../lefdefref/LEFSyntax.html#BusBitCharacters" target="external_window"><font color="#0000ff"><u>&#34;Bus Bit Characters&#34;</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1080074">The </a><font size="2" face="'Courier New'" color="#000000">BUSBITCHARS</font> statement is part of the LEF file header (which also includes the <font size="2" face="'Courier New'" color="#000000">VERSION</font>, and <font size="2" face="'Courier New'" color="#000000">DIVIDERCHAR</font> statements). If the statements in the header section are not defined, many applications assume default values for them. However, the default values are not formally part of the language definition; therefore you cannot be sure that the same assumptions are used in all applications. You should always explicitly define these values. </p>
<p><a name="1062146">This routine returns </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1062147">lefwBusBitChars</a></h3>
<p><a name="1062148">Writes a </a><font size="2" face="'Courier New'" color="#000000">BUSBITCHARS</font> statement. </p>
<h4><a name="1050307">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1050308">int lefwBusBitChars(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>busBitChars</em></font>)</font>
</dl>
<h4><a name="1059057">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059058"><font size="2" face="'Courier New'" color="#000000"><em>busBitChars</em></font></a></strong>
</p>
<blockquote><a name="1085305">Specifies the pair of characters used to specify bus bits when LEF names are mapped to or from other databases. The characters must be enclosed in double quotation marks.</a></blockquote>
<h3><a name="1065169">Bus Bit Characters Example</a></h3>
<p><a name="1065170">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwBusBitCharsCbkType</font>.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1065171">int busBitCharsCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwBusBitCharsCbkType) {<dd> printf(&#34;Type is not lefwBusBitCharsCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd> res = lefwBusBitChars(&#34;&#60;&#62;&#34;);<dd> CHECK_RES(res);<dd> return 0;}</a></font>
</dl>
<h2><a name="ClearanceMeasure"></a><a name="1072006">Clearance Measure</a></h2>
<p><a name="1072007">The Clearance Measure routine writes a LEF </a><font size="2" face="'Courier New'" color="#000000">CLEARANCEMEASURE</font> statement. The <font size="2" face="'Courier New'" color="#000000">CLEARANCEMEASURE</font> statement is optional and can be used only once in a LEF file. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">CLEARANCEMEASURE</font> section, see <a href="../lefdefref/LEFSyntax.html#ClearanceMeasure" target="external_window"><font color="#0000ff"><u>&#34;Clearance Measure&#34;</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>. </p>
<p><a name="1072057">This routine returns </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="lefwClearanceMeasure"></a><a name="1072031">lefwClearanceMeasure</a></h3>
<p><a name="1072032">Writes a </a><font size="2" face="'Courier New'" color="#000000">CLEARANCEMEASURE</font> statement. </p>
<h4><a name="1072033">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072042">int lefwClearanceMeasure(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>type</em></font>)</font>
</dl>
<h4><a name="1072035">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1072246"><font color="#000000"><em>type</em></font></a></strong>
</p>
<blockquote><a name="1085316">Specifies the type of clearance spacing that will be applied to obstructions (blockages) and pins in cells. <br>Value: Specify one of the following: </a></blockquote>
<table summary="" border="0" cellpadding="4" cellspacing="0" bordercolor="#D3D3D3" width="648">
<caption>
<tr>
<td cellpadding="4" valign="top" width="204">
<p><a name="1072253">&nbsp;&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top" width="120">
<p><a name="1072255"><font size="2" face="'Courier New'" color="#000000">MAXXY</font></a></p>
</td>
<td cellpadding="4" valign="top" width="324">
<p><a name="1072257">Uses the larger x and y distances for spacing between objects.</a></p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1072259">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1072261"><font size="2" face="'Courier New'" color="#000000">EUCLIDEAN</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1072263">Uses euclidean distance for spacing between objects.</a></p>
</td>
</tr>
</table>
<h2><a name="1065372">Divider Character</a></h2>
<p><a name="1041953">The Divider Character routine writes a LEF </a><font size="2" face="'Courier New'" color="#000000">DIVIDERCHAR</font> statement. The <font size="2" face="'Courier New'" color="#000000">DIVIDERCHAR</font> statement is optional and can be used only once in a LEF file. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">DIVIDERCHAR</font> statement, see <a href="../lefdefref/LEFSyntax.html#DividerCharacter" target="external_window"><font color="#0000ff"><u>&#34;Divider Character&#34;</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1080100">The </a><font size="2" face="'Courier New'" color="#000000">DIVIDERCHAR</font> statement is part of the LEF file header (which also includes the <font size="2" face="'Courier New'" color="#000000">VERSION</font>, and <font size="2" face="'Courier New'" color="#000000">BUSBITCHARS</font> statements). If the statements in the header section are not defined, many applications assume default values for them. However, the default values are not formally part of the language definition; therefore you cannot be sure that the same assumptions are used in all applications. You should always explicitly define these values. </p>
<p><a name="1064785">This routine returns </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1040302">lefwDividerChar</a></h3>
<p><a name="1059264">Writes a </a><font size="2" face="'Courier New'" color="#000000">DIVIDERCHAR</font> statement.</p>
<h4><a name="1050760">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1050761">int lefwDividerChar(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>dividerChar</em></font>)</font>
</dl>
<h4><a name="1050772">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1067824"><font size="2" face="'Courier New'" color="#000000"><em>dividerChar</em></font></a></strong>
</p>
<blockquote><a name="1085347">Specifies the character used to express hierarchy when LEF names are mapped to or from other databases. The character must be enclosed in double quotation marks.<br></a><font color="#000000"><strong><br>Note:</strong></font> If the divider character appears in a LEF name as a regular character, you must use a backslash (<font size="2" face="'Courier New'" color="#000000">\</font>) before the character to prevent the LEF reader from interpreting the character as a hierarchy delimiter.</blockquote>
<h3><a name="1065428">Divider Character Examples</a></h3>
<p><a name="1065429">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwDividerCharCbkTyp</font>.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1065430">int dividerCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwDividerCharCbkType) {<dd> printf(&#34;Type is not lefwDividerCharCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd><dd> res = lefwDividerChar(&#34;:&#34;);<dd> CHECK_RES(res);<dd> res = lefwNewLine(); &#47;&#47; add an empty line<dd> CHECK_RES(res);<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="1041987">Extensions </a></h2>
<p><a name="1049464">Extensions routines write a LEF </a><font size="2" face="'Courier New'" color="#000000">BEGINEXT</font> statement. The <font size="2" face="'Courier New'" color="#000000">BEGINEXT</font> statement is optional and can be used more than once in a LEF file. </p>
<p><a name="1078652">Extensions routines let you add customized syntax to the LEF file that can be ignored by tools that do not use that syntax. You can also use extensions to add new syntax not yet supported by your version of LEF, if you are using version 5.1 or later. For syntax information about the LEF </a><font size="2" face="'Courier New'" color="#000000">EXTENSIONS</font> <font size="2" face="'Courier New'" color="#000000">section</font>, see <a href="../lefdefref/LEFSyntax.html#Extensions" target="external_window"><font color="#0000ff"><u>&#34;Extensions&#34;</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1041996">You must begin and end a LEF </a><font size="2" face="'Courier New'" color="#000000">BEGINEXT</font> statement with the <font size="2" face="'Courier New'" color="#000000">lefwStartBeginext</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndBeginext</font> routines. All LEF writer routines that define <font size="2" face="'Courier New'" color="#000000">EXTENSIONS</font> routines must be included between these routines.</p>
<p><a name="1042004">For examples of the routines described here, see </a><a href="#1065511" title="6"><font color="Blue"><u>"Extensions Examples"</u></font></a><a href="#1065511" title="6"></a>.</p>
<p><a name="1070736">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1031188">lefwStartBeginext</a></h3>
<p><a name="1059274">Starts the </a><font size="2" face="'Courier New'" color="#000000">EXTENSIONS</font> statement using the specified tag. </p>
<h4><a name="1050788">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1050789">int lefwStartBeginext(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>tag</em></font>)</font>
</dl>
<h4><a name="1050800">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059281"><font size="2" face="'Courier New'" color="#000000"><em>tag</em></font></a></strong>
</p>
<blockquote><a name="1085365">Identifies the extension block. The tag must be enclosed in double quotation marks.</a></blockquote>
<h3><a name="1031393">lefwEndBeginext</a></h3>
<p><a name="1059285">Writes the </a><font size="2" face="'Courier New'" color="#000000">ENDEXT</font> statement. </p>
<h4><a name="1050816">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1050817">int lefwEndBeginext()</a></font>
</dl>
<h3><a name="1031439">lefwBeginextCreator</a></h3>
<p><a name="1059291">Writes a </a><font size="2" face="'Courier New'" color="#000000">CREATOR</font> statement. The <font size="2" face="'Courier New'" color="#000000">CREATOR</font> statement is optional and can be used only once in an <font size="2" face="'Courier New'" color="#000000">EXTENSIONS</font> statement.</p>
<h4><a name="1050851">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1050852">int lefwBeginextCreator(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>creator</em></font>)</font>
</dl>
<h4><a name="1050867">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1050868"><font size="2" face="'Courier New'" color="#000000"><em>creator</em></font></a></strong>
</p>
<blockquote><a name="1085373">Specifies a string value that defines the creator value.</a></blockquote>
<h3><a name="1031212">lefwBeginextDate</a></h3>
<p><a name="1059305">Writes a </a><font size="2" face="'Courier New'" color="#000000">DATE</font> statement that specifies the current system time and date. The <font size="2" face="'Courier New'" color="#000000">DATE</font> statement is optional and can be used only once in an <font size="2" face="'Courier New'" color="#000000">EXTENSIONS</font> statement.</p>
<h4><a name="1050883">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1050884">int lefwBeginextDate()</a></font>
</dl>
<h3><a name="1031224">lefwBeginextRevision</a></h3>
<p><a name="1059313">Writes a </a><font size="2" face="'Courier New'" color="#000000">REVISION</font> statement. The <font size="2" face="'Courier New'" color="#000000">REVISION</font> statement is optional and can be used only once in an <font size="2" face="'Courier New'" color="#000000">EXTENSIONS</font> statement.</p>
<h4><a name="1050911">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1050923">int lefwBeginextRevision(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>vers1</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>vers2</em></font>) </font>
</dl>
<h4><a name="1050929">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1050934"><font size="2" face="'Courier New'" color="#000000"><em>vers1</em></font></a>, <font size="2" face="'Courier New'" color="#000000"><em>vers2</em></font></strong>
</p>
<blockquote><a name="1085381">Specify the values used for the revision number string.</a></blockquote>
<h3><a name="1031236">lefwBeginextSyntax</a></h3>
<p><a name="1059323">Adds customized syntax to the LEF file. This routine is optional and can be used more than once in an </a><font size="2" face="'Courier New'" color="#000000">EXTENSIONS</font> statement.</p>
<h4><a name="1050944">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1050945">int lefwBeginextSyntax(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>title</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>string</em></font>)</font>
</dl>
<h4><a name="1050956">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1065504"><font size="2" face="'Courier New'" color="#000000"><em>title</em></font></a>, <font size="2" face="'Courier New'" color="#000000"><em>string</em></font></strong>
</p>
<blockquote><a name="1085389">Specify any values you need.</a></blockquote>
<h3><a name="1065511">Extensions Examples</a></h3>
<p><a name="1065512">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwExtCbkType</font>. This example only shows the usage of some functions related to array.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1065513">int extCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwExtCbkType) {<dd> printf(&#34;Type is not lefwExtCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd><dd> res = lefwStartBeginext(&#34;SIGNATURE&#34;);<dd> CHECK_RES(res);<dd> res = lefwBeginextCreator(&#34;CADENCE&#34;);<dd> CHECK_RES(res);<dd> res = lefwBeginextDate();<dd> CHECK_RES(res);<dd> res = lefwEndBeginext();<dd> CHECK_RES(res);<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="Layer(Cut)"></a><a name="1065540">Layer (Cut, Masterslice, Overlap, Implant)</a></h2>
<p><a name="1033299">The following layer routines write </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> sections about cut, masterslice, overlap, and implant layers. At least one <font size="2" face="'Courier New'" color="#000000">LAYER</font> section is required in a LEF file, and more than one <font size="2" face="'Courier New'" color="#000000">LAYER</font> section is generally required to describe a layout. For syntax information about the <font size="2" face="'Courier New'" color="#000000">LAYER</font> sections for cut, masterslice, overlap, and implant layers, see <a href="../lefdefref/LEFSyntax.html#Layer(Cut)" target="external_window"><font color="#0000ff"><u>"Layer (Cut)"</u></font></a>, <a href="../lefdefref/LEFSyntax.html#Layer(MastersliceorOverlap)" target="external_window"><font color="#0000ff"><u>"Layer (Masterslice or Overlap)"</u></font></a>, and <a href="../lefdefref/LEFSyntax.html#Layer(Implant)" target="external_window"><font color="#0000ff"><u>"Layer (Implant)"</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1042162">You must begin and end a LEF </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> section with the <font size="2" face="'Courier New'" color="#000000">lefwStartLayer</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndLayer</font> routines. You create one <font size="2" face="'Courier New'" color="#000000">LAYER</font> section for each layer you need to define. </p>
<p><a name="1070741">For examples of the routines described here, see </a><a href="#1065589" title="6"><font color="Blue"><u>"Layer Examples"</u></font></a><a href="#1065589" title="6"></a>.</p>
<p><a name="1062388">In addition to the routines described in this section, you can include a </a><font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. For more information about these routines, see <a href="#1066631" title="6"><font color="Blue"><u>"Property"</u></font></a><a href="#1066631" title="6"></a>.</p>
<p><a name="1058072">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful. </p>
<h3><a name="1042159">Defining Masterslice and Overlap Layers</a></h3>
<p><a name="1040785">To define a masterslice or overlap layer, you only need to use the </a><font size="2" face="'Courier New'" color="#000000">lefwStartLayer</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndLayer</font> routines. No additional routines are required to define these layers. </p>
<h3><a name="1042160">Defining Cut Layers</a></h3>
<p><a name="1040786">To define a cut layer, you must use the </a><font size="2" face="'Courier New'" color="#000000">lefwLayerCutSpacing</font> routine to start the spacing and the <font size="2" face="'Courier New'" color="#000000">lefwLayerCutSpacingEnd</font> routine to end the spacing. These must be used between the <font size="2" face="'Courier New'" color="#000000">lefwStartLayer</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndLayer</font> routines. Any other routines are optional and must be included after the <font size="2" face="'Courier New'" color="#000000">lefwLayerCutSpacing</font> routine. </p>
<h3><a name="1079121">Defining Implant Layers</a></h3>
<p><a name="1079122">To define an implant layer, you must specify the </a><font size="2" face="'Courier New'" color="#000000">lefwLayerWidth</font> routine between the <font size="2" face="'Courier New'" color="#000000">lefwStartLayer</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndLayer</font> routines. </p>
<h3><a name="1032168">lefwStartLayer</a></h3>
<p><a name="1059379">Starts the </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> section. Each cut, masterslice, overlap, and implant layer must be defined by a separate <font size="2" face="'Courier New'" color="#000000">lefwStartLayer</font>, <font size="2" face="'Courier New'" color="#000000">lefwEndLayer</font> routine pair.</p>
<h4><a name="1051059">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051060">int lefwStartLayer(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>type</em></font>)</font>
</dl>
<h4><a name="1051075">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1058092"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1085397">Specifies the name of the layer being defined.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1058103"><font size="2" face="'Courier New'" color="#000000"><em>type</em></font></a></strong>
</p>
<blockquote><a name="1085404">Specifies the type of layer being defined.<br></a><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">CUT</font>, <font size="2" face="'Courier New'" color="#000000">MASTERSLICE</font>, <font size="2" face="'Courier New'" color="#000000">OVERLAP</font>, or <font size="2" face="'Courier New'" color="#000000">IMPLANT</font></blockquote>
<h3><a name="1032183">lefwEndLayer</a></h3>
<p><a name="1059395">Ends the </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> section for the specified layer.</p>
<h4><a name="1051090">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082687">int lefwEndLayer(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>)</font>
</dl>
<h3><a name="1082695">lefwLayerACCurrentDensity</a></h3>
<p><a name="1073580">Writes an </a><font size="2" face="'Courier New'" color="#000000">ACCURRENTDENSITY</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">ACCURENTDENSITY</font> statement is optional, and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1073581">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073582">int lefwLayerACCurrentDensity(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>type</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1073583">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073584"><font size="2" face="'Courier New'" color="#000000"><em>type</em></font></a> </strong>
</p>
<blockquote><a name="1085412">Specifies one of the AC current limits, </a><font size="2" face="'Courier New'" color="#000000">PEAK</font>, <font size="2" face="'Courier New'" color="#000000">AVERAGE</font>, or <font size="2" face="'Courier New'" color="#000000">RMS.</font></blockquote>
<p>
<strong></strong>
<strong><a name="1073585"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a> </strong>
</p>
<blockquote><a name="1085419">Specifies a maximum current limit for the layer in milliamps per square micron. If you specify </a><font size="2" face="'Courier New'" color="#000000">0</font>, you must call the <font size="2" face="'Courier New'" color="#000000">lefwLayerACFrequency</font> and <font size="2" face="'Courier New'" color="#000000">lefwLayerACTableEntries</font> routines. </blockquote>
<h3><a name="1073591">lefwLayerACCutarea</a></h3>
<p><a name="1073592">Writes a </a><font size="2" face="'Courier New'" color="#000000">CUTAREA</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">CUTAREA</font> statement is optional if you specify a <font size="2" face="'Courier New'" color="#000000">FREQUENCY</font> statement, and can be used only once in an <font size="2" face="'Courier New'" color="#000000">ACCURENTDENSITY</font> statement.</p>
<h4><a name="1073593">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073594">int lefwLayerACCutarea(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numCutareas</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>cutareas</em></font>)</font>
</dl>
<h4><a name="1073595">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073596"><font size="2" face="'Courier New'" color="#000000"><em>numCutareas</em></font></a></strong>
</p>
<blockquote><a name="1085427">Specifies the number of cut area values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1073597"><font size="2" face="'Courier New'" color="#000000"><em>cutareas</em></font></a></strong>
</p>
<blockquote><a name="1085434">Specifies the cut area values, in square microns. If you specify only one cut area value, there is no cut area dependency, and the table entries are assumed to apply to all cut areas.</a></blockquote>
<h3><a name="1079556">lefwLayerACFrequency</a></h3>
<p><a name="1079557">Writes a </a><font size="2" face="'Courier New'" color="#000000">FREQUENCY</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">FREQUENCY</font> statement is required if you specify a value of <font size="2" face="'Courier New'" color="#000000">0</font> in the <font size="2" face="'Courier New'" color="#000000">lefwLayerACCurrentDensity</font> routine, and can be used only once in an <font size="2" face="'Courier New'" color="#000000">ACCURENTDENSITY</font> statement.</p>
<h4><a name="1073625">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073626">int lefwLayerACFrequency(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numFrequency</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>frequency</em></font>)</font>
</dl>
<h4><a name="1085443">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1085444"><font size="2" face="'Courier New'" color="#000000"><em>numFrequency</em></font></a></strong>
</p>
<blockquote><a name="1085450">Specifies the number of frequency values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1085459"><font size="2" face="'Courier New'" color="#000000"><em>frequency</em></font></a></strong>
</p>
<blockquote><a name="1085466">Specifies the frequency values, in megahertz. If you specify only one frequency value, there is no frequency dependency, and the table entries are assumed to apply to all frequencies.</a></blockquote>
<h3><a name="1073680">lefwLayerACTableEntries</a></h3>
<p><a name="1073681">Writes a </a><font size="2" face="'Courier New'" color="#000000">TABLEENTRIES</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">TABLENTRIES</font> statement is required if you specify a <font size="2" face="'Courier New'" color="#000000">FREQUENCY</font> statement, and can be used only once in an <font size="2" face="'Courier New'" color="#000000">ACCURENTDENSITY</font> statement.</p>
<h4><a name="1073682">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073683">int lefwLayerACTableEntries(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numEntries</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>entries</em></font>)</font>
</dl>
<h4><a name="1073684">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073685"><font size="2" face="'Courier New'" color="#000000"><em>numEntries</em></font></a></strong>
</p>
<blockquote><a name="1085474">Specifies the number of table entry values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1085483"><font size="2" face="'Courier New'" color="#000000"><em>entries</em></font></a></strong>
</p>
<blockquote><a name="1085490">Specifies the maximum cut area for each frequency and cut area pair specified in the </a><font size="2" face="'Courier New'" color="#000000">FREQUENCY</font> and <font size="2" face="'Courier New'" color="#000000">CUTAREA</font> statements, in milliamps per square micron. </blockquote>
<h3><a name="lefwLayerAntennaAreaFactor"></a><a name="1073919">lefwLayerAntennaAreaFactor</a></h3>
<p><a name="1073920">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAAREAFACTOR</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">ANTENNAAREAFACTOR</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1073921">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073922">int lefwLayerAntennaAreaFactor(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value<dd></em></font>const char* diffUseOnly)</font>
</dl>
<h4><a name="1073923">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073924"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a> </strong>
</p>
<blockquote><a name="1085498">Specifies the adjust or multiply factor for the antenna metal calculation.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1085507"><font size="2" face="'Courier New'" color="#000000">diffUseOnly</font></a></strong>
</p>
<blockquote><a name="1085514">Optional argument that specifies the current antenna factor should be used only when the corresponding layer is connected to the diffusion. Specify </a><font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument.</blockquote>
<h3><a name="lefwLayerAntennaAreaRatio"></a><a name="1073917">lefwLayerAntennaAreaRatio</a></h3>
<p><a name="1073548">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAAREARATIO</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">ANTENNAREARATIO</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1073549">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073550">int lefwLayerAntennaAreaRatio(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1085531">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1085532"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1085537">Specifies the antenna ratio, using the bottom area of the metal wire that is not connected to the diffusion diode.</a></blockquote>
<h3><a name="lefwLayerAntennaCumAreaRatio"></a><a name="1073861">lefwLayerAntennaCumAreaRatio</a></h3>
<p><a name="1073862">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNACUMAREARATIO</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">ANTENNACUMAREARATIO</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1073863">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073864">int lefwLayerAntennaCumAreaRatio(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1073865">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073866"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1085547">Specifies the cumulative antenna ratio, using the bottom area of the metal wire that is not connected to the diffusion diode.</a></blockquote>
<h3><a name="lefwLayerAntennaCumDiffAreaRatio"></a><a name="1073859">lefwLayerAntennaCumDiffAreaRatio</a></h3>
<p><a name="1073810">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNACUMDIFFAREARATIO</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">ANTENNACUMDIFFAREARATIO</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaCumDiffAreaRatioPWL</font> in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1073811">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073812">int lefwLayerAntennaCumDiffAreaRatio(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1073813">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073814"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a> </strong>
</p>
<blockquote><a name="1085555">Specifies the cumulative antenna ratio, using the bottom area of the metal wire that is connected to the diffusion diode.</a></blockquote>
<h3><a name="lefwLayerAntennaCumDiffAreaRatioPwl"></a><a name="1073815">lefwLayerAntennaCumDiffAreaRatioPwl</a></h3>
<p><a name="1073816">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNACUMDIFFAREARATIOPWL</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">ANTENNACUMDIFFAREARATIOPWL</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaCumDiffAreaRatio</font> in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1073817">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073818">int lefwLayerAntennaCumDiffAreaRatioPwl(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numPwls,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>diffusions,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>ratios</em></font>)</font>
</dl>
<h4><a name="1085561">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1085562"><font size="2" face="'Courier New'" color="#000000"><em>numPwls</em></font></a></strong>
</p>
<blockquote><a name="1085568">Specifies the number of diffusion&#45;ratio pairs.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1085577"><font size="2" face="'Courier New'" color="#000000"><em>diffusions</em></font></a></strong>
</p>
<blockquote><a name="1085584">Specifies the diffusion values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1085593"><font size="2" face="'Courier New'" color="#000000"><em>ratios</em></font></a></strong>
</p>
<blockquote><a name="1085600">Specifies the ratio values.</a></blockquote>
<h3><a name="lefwLayerAntennaDiffAreaRatio"></a><a name="1073807">lefwLayerAntennaDiffAreaRatio</a></h3>
<p><a name="1073735">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNADIFFAREARATIO</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">ANTENNADIFFAREARATIO</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaDiffAreaRatioPWL</font> in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1073736">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073737">int lefwAntennaDiffAreaRatio(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1073738">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073739"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1085608">Specifies the antenna ratio, using the bottom area of the wire that is connected to the diffusion diode.</a></blockquote>
<h3><a name="lefwLayerAntennaDiffAreaRatioPwl"></a><a name="1073740">lefwLayerAntennaDiffAreaRatioPwl</a></h3>
<p><a name="1073741">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNADIFFAREARATIOPWL</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">ANTENNADIFFAREARATIOPWL</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaDiffAreaRatio</font> in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1073742">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073743">int lefwAntennaDiffAreaRatioPWL(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numPwls,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>diffusions,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>ratios</em></font>)</font>
</dl>
<h4><a name="1073744">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073746"><font size="2" face="'Courier New'" color="#000000"><em>numPwls</em></font></a></strong>
</p>
<blockquote><a name="1085620">Specifies the number of diffusion&#45;ratio pairs.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1085629"><font size="2" face="'Courier New'" color="#000000"><em>diffusions</em></font></a></strong>
</p>
<blockquote><a name="1085636">Specifies the diffusion values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1085645"><font size="2" face="'Courier New'" color="#000000"><em>ratios</em></font></a></strong>
</p>
<blockquote><a name="1085652">Specifies the ratio values.</a></blockquote>
<h3><a name="lefwLayerAntennaModel"></a><a name="1077553">lefwLayerAntennaModel</a></h3>
<p><a name="1077554">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAMODEL</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">ANTENNAMODEL</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1077555">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077556">int lefwLayerAntennaModel(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>oxide</em></font>)</font>
</dl>
<h4><a name="1077557">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077558"><font size="2" face="'Courier New'" color="#000000"><em>oxide</em></font></a> </strong>
</p>
<blockquote><a name="1085659">Specifies the oxide model for the layer. Each model can be specified once per layer. If you specify an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAMODEL</font> statement, that value affects all <font size="2" face="'Courier New'" color="#000000">ANTENNA*</font> statements for the layer that follow it until you specify another <font size="2" face="'Courier New'" color="#000000">ANTENNAMODEL</font> statement. <br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">OXIDE1</font>, <font size="2" face="'Courier New'" color="#000000">OXIDE2</font>, <font size="2" face="'Courier New'" color="#000000">OXIDE3</font>, or <font size="2" face="'Courier New'" color="#000000">OXIDE4<br></font><br><font color="#000000"><strong>Note:</strong></font> <font size="2" face="'Courier New'" color="#000000">OXIDE1</font> and <font size="2" face="'Courier New'" color="#000000">OXIDE2</font> are currently supported. If you specify <font size="2" face="'Courier New'" color="#000000">OXIDE3</font> or <font size="2" face="'Courier New'" color="#000000">OXIDE4</font>, current tools parse and ignore them. </blockquote>
<h3><a name="lefwLayerArraySpacing"></a><a name="1082017">lefwLayerArraySpacing</a></h3>
<p><a name="1082245">Writes an </a><font size="2" face="'Courier New'" color="#000000">ARRAYSPACING</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">ARRAYSPACING</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1082246">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082259">int lefwLayerArraySpacing(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>longArray</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>viaWidth</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>cutSpacing</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numArrayCut</em></font>,<dd>int* <font size="2" face="'Courier New'" color="#000000"><em>arrayCuts</em></font>, <dd>double* <font size="2" face="'Courier New'" color="#000000"><em>arraySpacings</em></font>)</font>
</dl>
<h4><a name="1082491">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1082492"><font size="2" face="'Courier New'" color="#000000"><em>longArray</em></font></a></strong>
</p>
<blockquote><a name="1085681">Optional argument that indicates that the via can use </a><font size="2" face="'Courier New'" color="#000000"><em>N </em></font><font size="2" face="'Courier New'" color="#000000">x</font><font size="2" face="'Courier New'" color="#000000"><em> M</em></font> cut arrays, where <font size="2" face="'Courier New'" color="#000000"><em>N </em></font><font size="2" face="'Courier New'" color="#000000">=</font><font size="2" face="'Courier New'" color="#000000"><em> arrayCuts</em></font> and <font size="2" face="'Courier New'" color="#000000"><em>M</em></font> can be any value, including one that is larger than <font size="2" face="'Courier New'" color="#000000"><em>N</em></font>. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<p>
<strong></strong>
<strong><a name="1085694"><font size="2" face="'Courier New'" color="#000000"><em>viaWidth</em></font></a></strong>
</p>
<blockquote><a name="1085701">Optional argument that specifies the via width. The array spacing rules only apply when the via metal width is greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>viaWidth</em></font>. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<p>
<strong></strong>
<strong><a name="1085710"><font size="2" face="'Courier New'" color="#000000"><em>cutSpacing</em></font></a></strong>
</p>
<blockquote><a name="1085717">Specifies the edge&#45;of&#45;cut to edge&#45;of&#45;cut spacing inside one cut array. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1085726"><font size="2" face="'Courier New'" color="#000000"><em>numArrayCuts</em></font></a></strong>
</p>
<blockquote><a name="1085777">Specifies the number of </a><font size="2" face="'Courier New'" color="#000000"><em>arrayCuts</em></font> and <font size="2" face="'Courier New'" color="#000000"><em>arraySpacings</em></font> pairs provided.</blockquote>
<p>
<strong></strong>
<strong><a name="1085786"><font size="2" face="'Courier New'" color="#000000"><em>arrayCuts</em></font></a></strong>
</p>
<blockquote><a name="1085797">Specifies the size of the cut arrays. <br>A large via array with a size greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>arrayCuts</em></font> <font size="2" face="'Courier New'" color="#000000">x</font> <font size="2" face="'Courier New'" color="#000000"><em>arrayCuts</em></font> in both dimensions must use <font size="2" face="'Courier New'" color="#000000"><em>N </em></font><font size="2" face="'Courier New'" color="#000000">x</font><font size="2" face="'Courier New'" color="#000000"><em> N</em></font> cut arrays (where <font size="2" face="'Courier New'" color="#000000"><em>N </em></font><font size="2" face="'Courier New'" color="#000000">=</font><font size="2" face="'Courier New'" color="#000000"><em> arrayCuts</em></font>) separated from other cut arrays by a distance greater than or equal to <font size="2" face="'Courier New'" color="#000000"><em>arraySpacing</em></font>. <br>If you specify multiple <font size="2" face="'Courier New'" color="#000000"><em>arrayCuts</em></font> and <font size="2" face="'Courier New'" color="#000000"><em>arraySpacings</em></font>, the <font size="2" face="'Courier New'" color="#000000"><em>arrayCuts</em></font> values must be specified in increasing order. </blockquote>
<p>
<strong></strong>
<strong><a name="1085822"><font size="2" face="'Courier New'" color="#000000"><em>arraySpacings</em></font></a></strong>
</p>
<blockquote><a name="1085829">Specifies the spacing between the cut arrays. </a></blockquote>
<h3><a name="lefwLayerCutSpacing"></a><a name="1082242">lefwLayerCutSpacing</a></h3>
<p><a name="1082018">Starts a </a><font size="2" face="'Courier New'" color="#000000">SPACING</font> statement for a cut layer. Call <font size="2" face="'Courier New'" color="#000000">lefwLayerCutSpacingEnd</font> to end each spacing.</p>
<p><a name="1082668">The </a><font size="2" face="'Courier New'" color="#000000">SPACING</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1082021">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082022"><font color="#000000">int lefwLayerCutSpacing(<dd>double </font></a><font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font>)</font>
</dl>
<h4><a name="1082023">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1082019"><font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font></a></strong>
</p>
<blockquote><a name="1085837">Specifies the minimum spacing allowed between via cuts, in microns. </a></blockquote>
<h3><a name="lefwLayerCutSpacingAdjacent"></a><a name="1082047">lefwLayerCutSpacingAdjacent</a></h3>
<p><a name="1082050">Writes an </a><font size="2" face="'Courier New'" color="#000000">ADJACENTCUTS</font> statement for a <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">ADJACENTCUTS</font> statement is optional. You can specify only one of the following statements per spacing: <font size="2" face="'Courier New'" color="#000000">LAYER</font>, <font size="2" face="'Courier New'" color="#000000">ADJACENTCUTS</font>, <font size="2" face="'Courier New'" color="#000000">AREA</font>, or <font size="2" face="'Courier New'" color="#000000">PARALLELOVERLAP</font>.</p>
<h4><a name="1082051">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082158">int lefwLayerCutSpacingAdjacent(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>viaCuts</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>distance</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>stack</em></font>)</font>
</dl>
<h4><a name="1082053">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1082054"><font size="2" face="'Courier New'" color="#000000"><em>viaCuts</em></font></a></strong>
</p>
<blockquote><a name="1085849">Optional argument that specifies the number of via cuts--either </a><font size="2" face="'Courier New'" color="#000000">2</font>, <font size="2" face="'Courier New'" color="#000000">3</font>, or <font size="2" face="'Courier New'" color="#000000">4</font>. </blockquote>
<p>
<strong></strong>
<strong><a name="1085858"><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font></a></strong>
</p>
<blockquote><a name="1085865">Specifies the distance between via cuts, in microns.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1085874"><font size="2" face="'Courier New'" color="#000000"><em>stack</em></font></a></strong>
</p>
<blockquote><a name="1085881">Optional argument that sets the </a><font size="2" face="'Courier New'" color="#000000">EXCEPTSAMEPGNET</font> keword for the spacing. If this keyword is set, the <font size="2" face="'Courier New'" color="#000000">ADJACENTCUTS</font> rule does not apply between cuts if they are on the same net, and are on a power and ground net.</blockquote>
<h3><a name="lefwLayerCutSpacingArea"></a><a name="1082048">lefwLayerCutSpacingArea</a></h3>
<p><a name="1082065">Writes an </a><font size="2" face="'Courier New'" color="#000000">AREA</font> statement for a <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">AREA</font> statement is optional. You can specify only one of the following statements per spacing: <font size="2" face="'Courier New'" color="#000000">LAYER</font>, <font size="2" face="'Courier New'" color="#000000">ADJACENTCUTS</font>, <font size="2" face="'Courier New'" color="#000000">AREA</font>, or <font size="2" face="'Courier New'" color="#000000">PARALLELOVERLAP</font>.</p>
<h4><a name="1082066">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082067"><font color="#000000">int lefwLayerCutSpacingArea(<dd>double </font></a><font size="2" face="'Courier New'" color="#000000"><em>cutArea</em></font>)</font>
</dl>
<h4><a name="1082068">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1082069"><font size="2" face="'Courier New'" color="#000000"><em>cutArea</em></font></a></strong>
</p>
<blockquote><a name="1085889">Specifies the cut area. Any cut with an area equal to or greater than this number requires additional spacing. </a></blockquote>
<h3><a name="lefwLayerCutSpacingCenterToCenter"></a><a name="1082063">lefwLayerCutSpacingCenterToCenter</a></h3>
<p><a name="1082078">Writes a </a><font size="2" face="'Courier New'" color="#000000">CENTERTOCENTER</font> statement for a <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">CENTERTOCENTER</font> statement is optional. </p>
<h4><a name="1082079">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082080"><font color="#000000">int lefwLayerCutSpacingCenterToCenter()</font></a></font>
</dl>
<h3><a name="lefwLayerCutSpacingEnd"></a><a name="1082076">lefwLayerCutSpacingEnd</a></h3>
<p><a name="1082091">Ends a </a><font size="2" face="'Courier New'" color="#000000">SPACING</font> statement for a cut layer. </p>
<h4><a name="1082092">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082561"><font color="#000000">int lefwLayerCutSpacingEnd()</font></a></font>
</dl>
<h3><a name="lefwLayerCutSpacingLayer"></a><a name="1082564">lefwLayerCutSpacingLayer</a></h3>
<p><a name="1082100">Writes a </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> statement for a <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement is optional. You can specify only one of the following statements per spacing: <font size="2" face="'Courier New'" color="#000000">LAYER</font>, <font size="2" face="'Courier New'" color="#000000">ADJACENTCUTS</font>, <font size="2" face="'Courier New'" color="#000000">AREA</font>, or <font size="2" face="'Courier New'" color="#000000">PARALLELOVERLAP</font>. </p>
<h4><a name="1082101">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082202">int lefwLayerCutSpacingLayer(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>name2</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>stack</em></font>)</font>
</dl>
<h4><a name="1085908">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1085909"><font size="2" face="'Courier New'" color="#000000"><em>name2</em></font></a></strong>
</p>
<blockquote><a name="1085910">Specifies the second layer name.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1085917"><font size="2" face="'Courier New'" color="#000000"><em>stack</em></font></a></strong>
</p>
<blockquote><a name="1085924">Optional argument indicating that same&#45;net cuts on two different layers can be stacked if they are exactly aligned; otherwise, the cuts must have </a><font size="2" face="'Courier New'" color="#000000"><em>cutSpacing</em></font> between them. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument. </blockquote>
<h3><a name="lefwLayerCutSpacingParallel"></a><a name="1082098">lefwLayerCutSpacingParallel</a></h3>
<p><a name="1082117">Writes a </a><font size="2" face="'Courier New'" color="#000000">PARALLELOVERLAP</font> statement for a <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">PARALLELOVERLAP</font> statement is optional. You can specify only one of the following statements per spacing: <font size="2" face="'Courier New'" color="#000000">LAYER</font>, <font size="2" face="'Courier New'" color="#000000">ADJACENTCUTS</font>, <font size="2" face="'Courier New'" color="#000000">AREA</font>, or <font size="2" face="'Courier New'" color="#000000">PARALLELOVERLAP</font>.</p>
<h4><a name="1082118">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082586"><font color="#000000">int lefwLayerCutSpacingParallel()</font></a></font>
</dl>
<h3><a name="lefwLayerCutSpacingSamenet"></a><a name="1082589">lefwLayerCutSpacingSamenet</a></h3>
<p><a name="1082130">Writes a </a><font size="2" face="'Courier New'" color="#000000">SAMENET</font> statement for a <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">SAMENET</font> statement is optional.</p>
<h4><a name="1082131">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082132"><font color="#000000">int lefwLayerCutSpacingSameNet()</font></a></font>
</dl>
<h3><a name="lefwLayerCutSpacingTableOrtho"></a><a name="1082128">lefwLayerCutSpacingTableOrtho</a></h3>
<p><a name="1082143">Writes a </a><font size="2" face="'Courier New'" color="#000000">SPACINGTABLE</font> <font size="2" face="'Courier New'" color="#000000">ORTHOGONAL</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">SPACINGTABLE</font> <font size="2" face="'Courier New'" color="#000000">ORTHOGONAL</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1082144">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082229">int lefwLayerCutSpacingTableOrtho(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numSpacing</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>cutWithins</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>orthoSpacings</em></font>)</font>
</dl>
<h4><a name="1085943">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1085944"><font size="2" face="'Courier New'" color="#000000"><em>numSpacing</em></font></a></strong>
</p>
<blockquote><a name="1085945">Specifies the number of </a><font size="2" face="'Courier New'" color="#000000"><em>cutWithins</em></font> and <font size="2" face="'Courier New'" color="#000000"><em>orthoSpacings</em></font> pairs provided.</blockquote>
<p>
<strong></strong>
<strong><a name="1085952"><font size="2" face="'Courier New'" color="#000000"><em>cutWithins</em></font></a></strong>
</p>
<blockquote><a name="1085959">Specifies the distance between cuts, in microns. <br>If two cuts have parallel overlap greater than </a><font size="2" face="'Courier New'" color="#000000">0</font> and are less than <font size="2" face="'Courier New'" color="#000000"><em>cutWithin</em></font> distance from each other, then any other cuts in an orthogonal direction must be equal to or greater than <font size="2" face="'Courier New'" color="#000000"><em>orthoSpacings</em></font>.</blockquote>
<p>
<strong></strong>
<strong><a name="1085976"><font size="2" face="'Courier New'" color="#000000"><em>orthoSpacings</em></font></a></strong>
</p>
<blockquote><a name="1085983">Specifies the orthogonal spacing, in microns. </a></blockquote>
<h3><a name="1074126">lefwLayerDCCurrentDensity</a></h3>
<p><a name="1074127">Writes the </a><font size="2" face="'Courier New'" color="#000000">DCCURRENTDENSITY</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">DCCURENTDENSITY</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074128">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074129">int lefwLayerDCCurrentDensity(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>type</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1074130">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074131"><font size="2" face="'Courier New'" color="#000000"><em>type</em></font></a></strong>
</p>
<blockquote><a name="1085991">Specifies the DC current limit, </a><font size="2" face="'Courier New'" color="#000000">AVERAGE.</font></blockquote>
<p>
<strong></strong>
<strong><a name="1086004"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1086011">Specifies a current limit for the layer in milliamps per square microns. If you specify </a><font size="2" face="'Courier New'" color="#000000">0</font>, you must call the <font size="2" face="'Courier New'" color="#000000">lefwLayerDCCutarea</font> and <font size="2" face="'Courier New'" color="#000000">lefwLayerDCTableEntries</font> routines. </blockquote>
<h3><a name="1074218">lefwLayerDCCutarea</a></h3>
<p><a name="1074219">Writes a </a><font size="2" face="'Courier New'" color="#000000">CUTAREA</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">CUTAREA</font> statement is required if you specify a value of <font size="2" face="'Courier New'" color="#000000">0</font> in the <font size="2" face="'Courier New'" color="#000000">lefwLayerDCCurrentDensity</font> routine, and can be used only once in a <font size="2" face="'Courier New'" color="#000000">DCCURENTDENSITY</font> statement.</p>
<h4><a name="1074220">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074221">int lefwLayerDCCutarea(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numCutareas</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>cutareas</em></font>)</font>
</dl>
<h4><a name="1074222">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074223"><font size="2" face="'Courier New'" color="#000000"><em>numCutareas</em></font></a></strong>
</p>
<blockquote><a name="1086019">Specifies the number of cut area values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1086028"><font size="2" face="'Courier New'" color="#000000"><em>cutareas</em></font></a></strong>
</p>
<blockquote><a name="1086035"> Specifies the cut area values, in square microns.</a></blockquote>
<h3><a name="1074225">lefwLayerDCTableEntries</a></h3>
<p><a name="1074226">Writes a </a><font size="2" face="'Courier New'" color="#000000">TABLEENTRIES</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">TABLENTRIES</font> statement is required if you specify a <font size="2" face="'Courier New'" color="#000000">CUTAREA</font> statement, and can be used only once in a <font size="2" face="'Courier New'" color="#000000">DCCURENTDENSITY</font> statement.</p>
<h4><a name="1074227">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074228">int lefwLayerDCTableEntries(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numEntries</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>entries</em></font>)</font>
</dl>
<h4><a name="1074229">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074230"><font size="2" face="'Courier New'" color="#000000"><em>numEntries</em></font></a></strong>
</p>
<blockquote><a name="1086071">Specifies the number of table entry values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1086072"><font size="2" face="'Courier New'" color="#000000"><em>entries</em></font></a></strong>
</p>
<blockquote><a name="1086082">Specifies the maximum current density for each specified cut area, in milliamps per square micron.</a></blockquote>
<h3><a name="lefwLayerEnclosure"></a><a name="1086084">lefwLayerEnclosure</a></h3>
<p><a name="1080158">Writes an </a><font size="2" face="'Courier New'" color="#000000">ENCLOSURE</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">ENCLOSURE</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1080161">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080162">lefwLayerEnclosure(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>location</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>width</em></font>)</font>
</dl>
<h4><a name="1080163">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1080164"><font size="2" face="'Courier New'" color="#000000"><em>location</em></font></a> </strong>
</p>
<blockquote><a name="1086089">Optional argument that specifies whether the overhang is required on the routing layers above or below the cut layer. Specify </a><font size="2" face="'Courier New'" color="#000000">&#34;&#34;</font> to ignore this argument. <br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">ABOVE</font> or <font size="2" face="'Courier New'" color="#000000">BELOW</font> </blockquote>
<p>
<strong></strong>
<strong><a name="1086110"><font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font></strong>
</p>
<blockquote><a name="1086111">Specifies that any rectangle from this cut layer requires the routing layers to overhang by </a><font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font> on two opposite sides, and by <font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font> on the other two opposite sides. </blockquote>
<p>
<strong></strong>
<strong><a name="1086118"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1086125">Optional argument that specifies that the enclosure rule only applies when the width of the routing layer is greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>width</em></font>. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<h3><a name="lefwLayerEnclosureLength"></a><a name="1080157">lefwLayerEnclosureLength</a></h3>
<p><a name="1082283">Writes an </a><font size="2" face="'Courier New'" color="#000000">ENCLOSURE</font> statement with a <font size="2" face="'Courier New'" color="#000000">LENGTH</font> keyword for a cut layer. This routine lets you specify a minimum length instead of the width. The <font size="2" face="'Courier New'" color="#000000">ENCLOSURE</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1082284">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082315">int lefwLayerEnclosureLength(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>location</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>minLength</em></font>)</font>
</dl>
<h4><a name="1082286">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1086138"><font size="2" face="'Courier New'" color="#000000"><em>location</em></font></a></strong>
</p>
<blockquote><a name="1086139">Optional argument that specifies whether the overhang is required on the routing layers above or below the cut layer. If you don't specify this argument, the rule applies to both adjacent routing layers; specify </a><font size="2" face="'Courier New'" color="#000000">&#34;&#34;</font> to ignore this argument. <br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">ABOVE</font> or <font size="2" face="'Courier New'" color="#000000">BELOW</font> </blockquote>
<p>
<strong></strong>
<strong><a name="1086146"><font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font></strong>
</p>
<blockquote><a name="1086153">Overhange values. Any rectangle from this cut layer requires the routing layers to overhang by </a><font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font> on two opposite sides, and by <font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font> on the other two opposite sides. </blockquote>
<p>
<strong></strong>
<strong><a name="1086162"><font size="2" face="'Courier New'" color="#000000"><em>minLength</em></font></a></strong>
</p>
<blockquote><a name="1086169">Optional argument that specifies that the total length of the longest opposite&#45;side overhangs must be greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>minLength</em></font> to make this enclosure valid. The <font size="2" face="'Courier New'" color="#000000"><em>minLength</em></font> is measured at the center of the cut. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument. </blockquote>
<h3><a name="lefwLayerEnclosureWidth"></a><a name="1082280">lefwLayerEnclosureWidth</a></h3>
<p><a name="1082789">Writes an </a><font size="2" face="'Courier New'" color="#000000">ENCLOSURE</font> statement with an <font size="2" face="'Courier New'" color="#000000">EXCEPTEXTRACUT</font> keyword for a cut layer. This routine is similar to <font size="2" face="'Courier New'" color="#000000">lefwLayerEnclosure</font> except that it lets you specify <font size="2" face="'Courier New'" color="#000000">EXCEPTEXTRACUT</font>. The <font size="2" face="'Courier New'" color="#000000">ENCLOSURE</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1082300">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082337">int lefwLayerEnclosureWidth(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>location</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>width</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>cutWithin</em></font>)</font>
</dl>
<h4><a name="1082302">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1082752"><font size="2" face="'Courier New'" color="#000000"><em>location</em></font></a> </strong>
</p>
<blockquote><a name="1086177">Optional argument that specifies whether the overhang is required on the routing layers above or below the cut layer. If you don't specify this argument, the rule applies to both adjacent routing layers; specify </a><font size="2" face="'Courier New'" color="#000000">&#34;&#34;</font> to ignore this argument. <br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">ABOVE</font> or <font size="2" face="'Courier New'" color="#000000">BELOW</font> </blockquote>
<p>
<strong></strong>
<strong><a name="1086186"><font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font></strong>
</p>
<blockquote><a name="1086193">Overhange values. Any rectangle from this cut layer requires the routing layers to overhang by </a><font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font> on two opposite sides, and by <font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font> on the other two opposite sides. </blockquote>
<p>
<strong></strong>
<strong><a name="1086202"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1086209">Optional argument that specifies that the enclosure rule only applies when the width of the routing layer is greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>width</em></font>. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument. If you do not specify this argument, the enclosure rule applies to all widths (as if <font size="2" face="'Courier New'" color="#000000"><em>width</em></font> was <font size="2" face="'Courier New'" color="#000000">0</font>). </blockquote>
<p>
<strong></strong>
<strong><a name="1086218"><font size="2" face="'Courier New'" color="#000000"><em>cutWithin</em></font></a></strong>
</p>
<blockquote><a name="1086225">Optional argument that sets the </a><font size="2" face="'Courier New'" color="#000000">EXCEPTEXTRACUT</font> <font size="2" face="'Courier New'" color="#000000"><em>cutWithin</em></font> keyword. Specifies that if there is another via cut less than or equal to <font size="2" face="'Courier New'" color="#000000"><em>cutWithin</em></font>, then this <font size="2" face="'Courier New'" color="#000000">ENCLOSURE</font> with <font size="2" face="'Courier New'" color="#000000">WIDTH</font> rule is ignored and the <font size="2" face="'Courier New'" color="#000000">ENCLOSURE</font> rules for minimum width wires are applied to the via cuts instead. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<h3><a name="lefwLayerPreferEnclosure"></a><a name="1082278">lefwLayerPreferEnclosure</a></h3>
<p><a name="1080175">Writes a </a><font size="2" face="'Courier New'" color="#000000">PREFERENCLOSURE</font> statement for a cut layer. The <font size="2" face="'Courier New'" color="#000000">PREFERENCLOSURE</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<p><font color="#000000"><strong>Note: </strong></font><a name="1080205">The </a><font size="2" face="'Courier New'" color="#000000">PREFERENCLOSURE</font> statement specifies preferred enclosure rules that can improve manufacturing yield, instead of enclosure rules that absolutely must be met (<font size="2" face="'Courier New'" color="#000000">ENCLOSURE</font> statement). </p>
<h4><a name="1080178">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080184">lefwLayerPreferEnclosure(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>location</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>width</em></font>)</font>
</dl>
<h4><a name="1080180">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1080194"><font size="2" face="'Courier New'" color="#000000"><em>location</em></font></a> </strong>
</p>
<blockquote><a name="1086233">Optional argument that specifies whether the overhang is required on the routing layers above or below the cut layer. Specify </a><font size="2" face="'Courier New'" color="#000000">&#34;&#34;</font> to ignore this argument. <br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">ABOVE</font> or <font size="2" face="'Courier New'" color="#000000">BELOW</font> </blockquote>
<p>
<strong></strong>
<strong><a name="1086246"><font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font></strong>
</p>
<blockquote><a name="1086253">Specifies that any rectangle from this cut layer requires the routing layers to overhang by </a><font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font> on two opposite sides, and by <font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font> on the other two opposite sides. The overhang values must be equal to or larger than the overhang values in the <font size="2" face="'Courier New'" color="#000000">ENCLOSURE</font> rule.</blockquote>
<p>
<strong></strong>
<strong><a name="1086262"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1086269">Optional argument that specifies that the enclosure rule only applies when the width of the routing layer is greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>width</em></font>. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument. </blockquote>
<h3><a name="lefwLayerResistancePerCut"></a><a name="1080174">lefwLayerResistancePerCut</a></h3>
<p><a name="1080215">Writes a </a><font size="2" face="'Courier New'" color="#000000">RESISTANCE</font> statement for the cut layer. The <font size="2" face="'Courier New'" color="#000000">RESISTANCE</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1080218">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080219">lefwLayerResistancePerCut( <dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>resistance</em></font>)</font>
</dl>
<h4><a name="1080224">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1080225"><font size="2" face="'Courier New'" color="#000000"><em>resistance</em></font></a> </strong>
</p>
<blockquote><a name="1086277">Specifies the resistance per cut on this layer. LEF vias without their own specific resistance value, or DEF vias from a via rule without a resistance per cut value, can use this resistance value.</a></blockquote>
<h3><a name="lefwLayerWidth"></a><a name="1077155">lefwLayerWidth</a></h3>
<p><a name="1077160">Writes a </a><font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement for an implant or a cut layer. The <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1077161">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077162">int lefwLayerWidth(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font>)</font>
</dl>
<h4><a name="1077163">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077164"><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font></a> </strong>
</p>
<blockquote><a name="1086289">Specifies the minimum width for the layer.</a></blockquote>
<h3><a name="1065589">Layer Examples</a></h3>
<p><a name="1065590">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwLayerCbkType</font>. This example shows how to create a cut, masterslice, or overlap layer. For an example of a routing layer, see the Layer (Routing) section.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1065591">int layerCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd> double *current;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwLayerCbkType) {<dd> printf(&#34;Type is not lefwLayerCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd><dd> current = (double*)malloc(sizeof(double)*3);<dd><dd> res = lefwStartLayer(&#34;CA&#34;, &#34;CUT&#34;);<dd> CHECK_RES(res);<dd> res = lefwLayerDCCurrentDensity(&#34;AVERAGE&#34;, 0);<dd> CHECK_RES(res);<dd> current[0] = 2.0;<dd> current[1] = 5.0;<dd> current[2] = 10.0;<dd> res = lefwLayerDCWidth(3, current);<dd> CHECK_RES(res);<dd> current[0] = 0.6E&#45;6;<dd> current[1] = 0.5E&#45;6;<dd> current[2] = 0.4E&#45;6;<dd> res = lefwLayerDCTableEntries(3, current);<dd> CHECK_RES(res);<dd> res = lefwEndLayer(&#34;CA&#34;);<dd> CHECK_RES(res);<dd> free((char*)current);<dd><dd> res = lefwStartLayer(&#34;POLYS&#34;, &#34;MASTERSLICE&#34;);<dd> CHECK_RES(res);<dd> res = lefwStringProperty(&#34;lsp&#34;, &#34;top&#34;);<dd> CHECK_RES(res);<dd> res = lefwIntProperty(&#34;lip&#34;, 1);<dd> CHECK_RES(res);<dd> res = lefwRealProperty(&#34;lrp&#34;, 2.3);<dd> CHECK_RES(res);<dd> res = lefwEndLayer(&#34;POLYS&#34;);<dd> CHECK_RES(res);<dd><dd> res = lefwStartLayer(&#34;OVERLAP&#34;, &#34;OVERLAP&#34;);<dd> CHECK_RES(res);<dd> res = lefwEndLayer(&#34;OVERLAP&#34;);<dd> CHECK_RES(res);<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="Layer(Routing)"></a><a name="1065587">Layer (Routing)</a></h2>
<p><a name="1049317">Routing layer routines write </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> sections about routing layers. At least one <font size="2" face="'Courier New'" color="#000000">LAYER</font> section is required in a LEF file, and more than one <font size="2" face="'Courier New'" color="#000000">LAYER</font> section is generally required to describe a layout. For syntax information about the <font size="2" face="'Courier New'" color="#000000">LAYER</font> section for routing layers, see <a href="../lefdefref/LEFSyntax.html#Layer(Routing)" target="external_window"><font color="#0000ff"><u>&#34;Layer (Routing)&#34;</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1048055">You must begin and end a LEF </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> section with the <font size="2" face="'Courier New'" color="#000000">lefwStartLayerRouting</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndLayerRouting</font> routines. The remaining routing layer routines defined in this section must be included between these routines. You create one <font size="2" face="'Courier New'" color="#000000">LAYER</font> section for each routing layer you need to define.</p>
<p><a name="1070752">For examples of the routines described here, see </a><a href="#1065724" title="6"><font color="Blue"><u>"Routing Layer Examples"</u></font></a><a href="#1065724" title="6"> </a></p>
<p><a name="1062436">In addition to the routines described in this section, you can include a </a><font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement within a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. For more information about these routines, see <a href="#1066631" title="6"><font color="Blue"><u>"Property"</u></font></a><a href="#1066631" title="6"></a>.</p>
<p><a name="1058115">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful. </p>
<h3><a name="1032583">lefwStartLayerRouting</a></h3>
<p><a name="1059435">Starts the </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> section. The LEF writer automatically writes the <font size="2" face="'Courier New'" color="#000000">TYPE ROUTING</font> statement. This routine is required to define a routing layer and can be used more than once. Each routing layer must be defined by a separate <font size="2" face="'Courier New'" color="#000000">lefwStartLayerRouting</font>, <font size="2" face="'Courier New'" color="#000000">lefwEndLayerRouting</font> routine pair.</p>
<h4><a name="1051159">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051160">int lefwStartLayerRouting(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>)</font>
</dl>
<h4><a name="1051171">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059441"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1086297">Specifies the name of the routing layer being defined.</a></blockquote>
<h3><a name="1032594">lefwEndLayerRouting</a></h3>
<p><a name="1059451">Ends the </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> section for the specified routing layer.</p>
<h4><a name="1051188">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051189">int lefwEndLayerRouting(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>)</font>
</dl>
<h3><a name="lefwDensityCheckStep"></a><a name="1073562">lefwDensityCheckStep</a></h3>
<p><a name="1074388">Writes a </a><font size="2" face="'Courier New'" color="#000000">DENSITYCHECKSTEP</font> statement. The <font size="2" face="'Courier New'" color="#000000">DENSITYCHECKSTEP</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074393">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074394">int lefwDensityCheckStep(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>stepValue</em></font>)</font>
</dl>
<h4><a name="1074395">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074396"><font size="2" face="'Courier New'" color="#000000"><em>stepValue</em></font></a></strong>
</p>
<blockquote><a name="1086305">Specifies the stepping distance for metal density checks, in distance units.</a></blockquote>
<h3><a name="lefwDensityCheckWindow"></a><a name="1074387">lefwDensityCheckWindow</a></h3>
<p><a name="1074375">Writes a </a><font size="2" face="'Courier New'" color="#000000">DENSITYCHECKWINDOW</font> statement. The <font size="2" face="'Courier New'" color="#000000">DENSITYCHECKWINDOW</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074380">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074381">int lefwDensityCheckWindow(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>windowLength</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>windowWidth</em></font>)</font>
</dl>
<h4><a name="1074382">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074383"><font size="2" face="'Courier New'" color="#000000"><em>windowLength</em></font></a></strong>
</p>
<blockquote><a name="1086313">Specifies the length of the check window, in distance units.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1074384"><font size="2" face="'Courier New'" color="#000000"><em>windowWidth</em></font></a></strong>
</p>
<blockquote><a name="1086320">Specifies the width of the check window, in distance units.</a></blockquote>
<h3><a name="lefwFillActiveSpacing"></a><a name="1074374">lefwFillActiveSpacing</a></h3>
<p><a name="1074403">Writes a </a><font size="2" face="'Courier New'" color="#000000">FILLACTIVESPACING</font> statement. The <font size="2" face="'Courier New'" color="#000000">FILLACTIVESPACING</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074412">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074413">int lefwFillActiveSpacing(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font>)</font>
</dl>
<h4><a name="1074414">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074415"><font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font></a></strong>
</p>
<blockquote><a name="1086327">Specifies the spacing between metal fills and active geometries.</a></blockquote>
<h3><a name="1074402">lefwLayerACCurrentDensity</a></h3>
<p><a name="1073563">Writes an </a><font size="2" face="'Courier New'" color="#000000">ACCURRENTDENSITY</font> statement. The <font size="2" face="'Courier New'" color="#000000">ACCURENTDENSITY</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1073564">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073565">int lefwLayerACCurrentDensity(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>type</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1073566">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073567"><font size="2" face="'Courier New'" color="#000000"><em>type</em></font></a> </strong>
</p>
<blockquote><a name="1086334">Specifies the type of AC current limit.<br></a><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">PEAK</font>, <font size="2" face="'Courier New'" color="#000000">AVERAGE</font>, or <font size="2" face="'Courier New'" color="#000000">RMS</font></blockquote>
<p>
<strong></strong>
<strong><a name="1086347"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1086354">Specifies a maximum current for the layer, in milliamps per micron. If you specify </a><font size="2" face="'Courier New'" color="#000000">0</font>, you must specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerACFrequency</font> and <font size="2" face="'Courier New'" color="#000000">lefwLayerACTableEntries</font> routines. </blockquote>
<h3><a name="1073633">lefwLayerACFrequency</a></h3>
<p><a name="1073634">Writes a </a><font size="2" face="'Courier New'" color="#000000">FREQUENCY</font> statement. The <font size="2" face="'Courier New'" color="#000000">FREQUENCY</font> statement is required if you specify a value of 0 in the <font size="2" face="'Courier New'" color="#000000">lefwLayerACCurrentDensity</font> routine, and can be used only once in an <font size="2" face="'Courier New'" color="#000000">ACCURENTDENSITY</font> statement.</p>
<h4><a name="1073635">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073636">int lefwLayerACFrequency(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numFrequency</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>frequency</em></font>)</font>
</dl>
<h4><a name="1073637">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073638"><font size="2" face="'Courier New'" color="#000000"><em>numFrequency</em></font></a></strong>
</p>
<blockquote><a name="1086361">Specifies the number of frequency values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1086374"><font size="2" face="'Courier New'" color="#000000"><em>frequency</em></font></a> </strong>
</p>
<blockquote><a name="1086381">Specifies the frequency values, in megahertz.</a></blockquote>
<h3><a name="1073668">lefwLayerACTableEntries</a></h3>
<p><a name="1073669">Writes a </a><font size="2" face="'Courier New'" color="#000000">TABLEENTRIES</font> statement. The <font size="2" face="'Courier New'" color="#000000">TABLENTRIES</font> statement is required if you specify a <font size="2" face="'Courier New'" color="#000000">FREQUENCY</font> statement, and can be used only once in an <font size="2" face="'Courier New'" color="#000000">ACCURENTDENSITY</font> statement.</p>
<h4><a name="1073670">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073671">int lefwLayerACTableEntries(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numEntries</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>entries</em></font>)</font>
</dl>
<h4><a name="1073672">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073673"><font size="2" face="'Courier New'" color="#000000"><em>numEntries</em></font></a></strong>
</p>
<blockquote><a name="1086388">Specifies the number of table entry values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1073674"><font size="2" face="'Courier New'" color="#000000"><em>entries</em></font></a></strong>
</p>
<blockquote><a name="1086395">Specifies the maximum current for each of the frequency and width pairs specified in the </a><font size="2" face="'Courier New'" color="#000000">FREQUENCY</font> and <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statements, in milliamps per micron. </blockquote>
<h3><a name="1073666">lefwLayerACWidth</a></h3>
<p><a name="1073652">Writes a </a><font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement is optional if you specify a <font size="2" face="'Courier New'" color="#000000">FREQUENCY</font> statement, and can be used only once in an <font size="2" face="'Courier New'" color="#000000">ACCURENTDENSITY</font> statement.</p>
<h4><a name="1073653">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073654">int lefwLayerACWidth(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numWidths</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>widths</em></font>)</font>
</dl>
<h4><a name="1073655">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073656"><font size="2" face="'Courier New'" color="#000000"><em>numWidths</em></font></a></strong>
</p>
<blockquote><a name="1086404">Specifies the number of width values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1086413"><font size="2" face="'Courier New'" color="#000000"><em>widths</em></font></a></strong>
</p>
<blockquote><a name="1086420">Specifies the wire width values, in microns.</a></blockquote>
<h3><a name="lefwLayerAntennaAreaDiffReducePwl"></a><a name="1073938">lefwLayerAntennaAreaDiffReducePwl</a></h3>
<p><a name="1082959">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAAREADIFFREDUCEPWL</font> statement for a routing or cut layer. The <font size="2" face="'Courier New'" color="#000000">ANTENNAAREADIFFREDUCEPWL</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1082857">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082907">int lefwLayerAntennaAreaDiffReducePwl(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numPwls</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>diffAreas</em></font>, <dd>double* <font size="2" face="'Courier New'" color="#000000"><em>metalDiffFactors</em></font>)</font>
</dl>
<h4><a name="1082859">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1082999"><font size="2" face="'Courier New'" color="#000000"><em>numPwls</em></font></a></strong>
</p>
<blockquote><a name="1086438">Specifies the number of diffusion area and </a><font size="2" face="'Courier New'" color="#000000"><em>metalDiffFactor</em></font> pairs. </blockquote>
<p>
<strong></strong>
<strong><a name="1086439"><font size="2" face="'Courier New'" color="#000000"><em>diffAreas</em></font></a></strong>
</p>
<blockquote><a name="1086444">Specifies the </a><font size="2" face="'Courier New'" color="#000000"><em>diffArea</em></font> values. The values are floating points, specified in microns squared. They should start with <font size="2" face="'Courier New'" color="#000000">0</font> and monotonically increase in value to the maximum size <font size="2" face="'Courier New'" color="#000000"><em>diffArea</em></font> expected.</blockquote>
<p>
<strong></strong>
<strong><a name="1086453"><font size="2" face="'Courier New'" color="#000000"><em>metalDiffFactors</em></font></a></strong>
</p>
<blockquote><a name="1086460">Specifies the </a><font size="2" face="'Courier New'" color="#000000"><em>metalDiffFactor</em></font> values. The values are floating points with no units and are normally between <font size="2" face="'Courier New'" color="#000000">0.0</font> and <font size="2" face="'Courier New'" color="#000000">1.0</font>. </blockquote>
<h3><a name="lefwLayerAntennaAreaFactor(Routing)"></a><a name="1082814">lefwLayerAntennaAreaFactor</a></h3>
<p><a name="1073939">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAAREAFACTOR</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNAAREAFACTOR</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1073940">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073941">int lefwLayerAntennaAreaFactor(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value<dd></em></font>const char* diffUseOnly)</font>
</dl>
<h4><a name="1086479">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1086480"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1086507">Specifies the adjust or multiply factor for the antenna metal calculation.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1086508"><font size="2" face="'Courier New'" color="#000000">diffUseOnly</font></a></strong>
</p>
<blockquote><a name="1086509">Optional argument that specifies the current antenna factor should be used only when the corresponding layer is connected to the diffusion. Specify </a><font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument.</blockquote>
<h3><a name="lefwLayerAntennaAreaMinusDiff"></a><a name="1073902">lefwLayerAntennaAreaMinusDiff</a></h3>
<p><a name="1082932">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAAREAMINUSDIFF</font> statement for a routing or cut layer. The <font size="2" face="'Courier New'" color="#000000">ANTENNAAREAMINUSDIFF</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1082872">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082873"><font color="#000000">int lefwLayerAntennaAreaMinusDiff(<dd>double </font></a><font size="2" face="'Courier New'" color="#000000"><em>minusDiffFactor</em></font>)</font>
</dl>
<h4><a name="1082874">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1082875"><font size="2" face="'Courier New'" color="#000000"><em>minusDiffFactor</em></font></a></strong>
</p>
<blockquote><a name="1086519">Specifies the diffusion area. The antenna ratio metal area will subtract the diffusion area connected to it. </a><font size="2" face="'Courier New'" color="#000000"><em>minusDiffFactor</em></font> is a floating point value and defaults to <font size="2" face="'Courier New'" color="#000000">0.0</font>.</blockquote>
<h3><a name="lefwLayerAntennaAreaRatio(Routing)"></a><a name="1082816">lefwLayerAntennaAreaRatio</a></h3>
<p><a name="1073557">Writes the </a><font size="2" face="'Courier New'" color="#000000">ANTENNAAREARATIO</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNAREARATIO</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1073539">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073540">int lefwLayerAntennaAreaRatio(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1073541">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073542"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1086531">Specifies the antenna ratio, using the bottom area of the metal wire that is not connected to the diffusion diode.</a></blockquote>
<h3><a name="lefwLayerAntennaCumAreaRatio(Routing)"></a><a name="1073901">lefwLayerAntennaCumAreaRatio</a></h3>
<p><a name="1073878">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNACUMAREARATIO</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNACUMAREARATIO</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1073879">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073880">int lefwLayerAntennaCumAreaRatio(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1073881">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073882"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1086539">Specifies the cumulative antenna ratio, using the bottom area of the metal wire that is not connected to the diffusion diode.</a></blockquote>
<h3><a name="lefwLayerAntennaCumDiffAreaRatio(Routing)"></a><a name="1073875">lefwLayerAntennaCumDiffAreaRatio</a></h3>
<p><a name="1073829">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNACUMDIFFAREARATIO</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNACUMDIFFAREARATIO</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaCumDiffAreaRatioPWL</font> in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1073830">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073831">int lefwLayerAntennaCumDiffAreaRatio(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1073832">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073833"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1086547">Specifies the cumulative antenna ratio, using the bottom area of the metal wire that is connected to the diffusion diode.</a></blockquote>
<h3><a name="lefwLayerAntennaCumDiffAreaRatioPwl(Routing)"></a><a name="1073834">lefwLayerAntennaCumDiffAreaRatioPwl</a></h3>
<p><a name="1073835">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNACUMDIFFAREARATIOPWL</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNACUMDIFFAREARATIOPWL</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaCumDiffAreaRatio</font> in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1073836">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073837">int lefwLayerAntennaCumDiffAreaRatioPwl(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numPwls,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>diffusions,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>ratios</em></font>)</font>
</dl>
<h4><a name="1086555">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1086556"><font size="2" face="'Courier New'" color="#000000"><em>numPwls</em></font></a></strong>
</p>
<blockquote><a name="1086562">Specifies the number of diffusion&#45;ratio pairs.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1086571"><font size="2" face="'Courier New'" color="#000000"><em>diffusions</em></font></a></strong>
</p>
<blockquote><a name="1086578">Specifies the diffusion values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1086587"><font size="2" face="'Courier New'" color="#000000"><em>ratios</em></font></a> </strong>
</p>
<blockquote><a name="1086601">Specifies the ratio values.</a></blockquote>
<h3><a name="lefwLayerAntennaCumDiffSideAreaRatio(Routing)"></a><a name="1074070">lefwLayerAntennaCumDiffSideAreaRatio</a></h3>
<p><a name="1074071">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNACUMDIFFSIDEAREARATIO</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNACUMDIFFSIDEAREARATIO</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaCumDiffSideAreaRatioPWL</font> in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074072">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074073">int lefwLayerAntennaCumDiffSideAreaRatio(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1074074">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074075"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1086611">Specifies the cumulative antenna ratio, using the side wall area of the metal wire that is connected to the diffusion diode.</a></blockquote>
<h3><a name="lefwLayerAntennaCumDiffSideAreaRatioPwl(Routing)"></a><a name="1074076">lefwLayerAntennaCumDiffSideAreaRatioPwl</a></h3>
<p><a name="1074077">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNACUMDIFFSIDEAREARATIOPWL</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNACUMDIFFSIDEAREARATIOPWL</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaCumDiffSideAreaRatio</font> in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074078">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074079">int lefwLayerAntennaCumDiffSideAreaRatioPwl(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numPwls,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>diffusions,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>ratios</em></font>)</font>
</dl>
<h4><a name="1074080">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074082"><font size="2" face="'Courier New'" color="#000000"><em>numPwls</em></font></a></strong>
</p>
<blockquote><a name="1086622">Specifies the number of diffusion&#45;ratio pairs.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1086631"><font size="2" face="'Courier New'" color="#000000"><em>diffusions</em></font></a></strong>
</p>
<blockquote><a name="1086638">Specifies the diffusion values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1086647"><font size="2" face="'Courier New'" color="#000000"><em>ratios</em></font></a></strong>
</p>
<blockquote><a name="1086656">Specifies the ratio values.</a></blockquote>
<h3><a name="lefwLayerAntennaCumSideAreaRatio(Routing)"></a><a name="1074068">lefwLayerAntennaCumSideAreaRatio</a></h3>
<p><a name="1074031">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNACUMSIDEAREARATIO</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNACUMSIDEAREARATIO</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1074032">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074033">int lefwAntennaCumSideAreaRatio(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1074034">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074035"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a> </strong>
</p>
<blockquote><a name="1086663">Specifies the cumulative antenna ratio, using the side wall area of the metal wire that is not connected to the diffusion diode.</a></blockquote>
<h3><a name="lefwLayerAntennaCumRoutingPlusCut"></a><a name="1082810">lefwLayerAntennaCumRoutingPlusCut</a></h3>
<p><a name="1082811">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNACUMROUTINGPLUSCUT</font> statement for a routing or cut layer. The <font size="2" face="'Courier New'" color="#000000">ANTENNACUMROUTINGPLUSCUT</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1082820">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082821"><font color="#000000">int lefwLayerAntennaCumRoutingPlusCut()</font></a></font>
</dl>
<h3><a name="lefwLayerAntennaDiffAreaRatio(Routing)"></a><a name="1074028">lefwLayerAntennaDiffAreaRatio</a></h3>
<p><a name="1073758">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNADIFFAREARATIO</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNADIFFAREARATIO</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaDiffAreaRatioPWL</font> in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1073759">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073760">int lefwAntennaDiffAreaRatio(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1073761">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073762"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1086671">Specifies the antenna ratio, using the bottom area of the wire that is connected to the diffusion diode.</a></blockquote>
<h3><a name="lefwLayerAntennaDiffAreaRatioPwl(Routing)"></a><a name="1073763">lefwLayerAntennaDiffAreaRatioPwl</a></h3>
<p><a name="1073764">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNADIFFAREARATIOPWL</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNADIFFAREARATIOPWL</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaDiffAreaRatio</font> in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1073765">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073766">int lefwAntennaDiffAreaRatioPWL(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numPwls,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>diffusions,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>ratios</em></font>)</font>
</dl>
<h4><a name="1073767">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073769"><font size="2" face="'Courier New'" color="#000000"><em>numPwls</em></font></a></strong>
</p>
<blockquote><a name="1086679">Specifies the number of diffusion&#45;ratio pairs.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1073770"><font size="2" face="'Courier New'" color="#000000"><em>diffusions</em></font></a> </strong>
</p>
<blockquote><a name="1086686">Specifies the diffusion values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1073771"><font size="2" face="'Courier New'" color="#000000"><em>ratios</em></font></a></strong>
</p>
<blockquote><a name="1086693">Specifies the ratio values.</a></blockquote>
<h3><a name="lefwLayerAntennaDiffSideAreaRatio"></a><a name="1073993">lefwLayerAntennaDiffSideAreaRatio</a></h3>
<p><a name="1073994">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNADIFFSIDEAREARATIO</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNADIFFSIDEAREARATIO</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaDiffSideAreaRatioPwl</font> in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1073995">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073996">int lefwLayerAntennaDiffSideAreaRatio(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1086699">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1086700"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1086705">Specifies the antenna ratio, using the side wall area of the wire that is connected to the diffusion diode.</a></blockquote>
<h3><a name="lefwLayerAntennaDiffSideAreaRatioPwl"></a><a name="1073999">lefwLayerAntennaDiffSideAreaRatioPwl</a></h3>
<p><a name="1074000">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNADIFFSIDEAREARATIOPWL</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNADIFFSIDEAREARATIOPWL</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaDiffSideAreaRatio</font> in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074001">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074002">int lefwLayerAntennaDiffSideAreaRatioPwl(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numPwls,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>diffusions,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>ratios</em></font>)</font>
</dl>
<h4><a name="1074003">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074005"><font size="2" face="'Courier New'" color="#000000"><em>numPwls</em></font></a></strong>
</p>
<blockquote><a name="1086713">Specifies the number of diffusion&#45;ratio pairs.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1074006"><font size="2" face="'Courier New'" color="#000000"><em>diffusions</em></font></a></strong>
</p>
<blockquote><a name="1086720">Specifies the diffusion values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1074007"><font size="2" face="'Courier New'" color="#000000"><em>ratios</em></font></a></strong>
</p>
<blockquote><a name="1086727">Specifies the ratio values.</a></blockquote>
<h3><a name="lefwLayerAntennaGatePlusDiff"></a><a name="1077563">lefwLayerAntennaGatePlusDiff</a></h3>
<p><a name="1082975">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAGATEPLUSDIFF</font> statement for a routing or cut layer. The <font size="2" face="'Courier New'" color="#000000">ANTENNAGATEPLUSDIFF</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwLayerAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1082841">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1082842"><font color="#000000">int lefwLayerAntennaGatePlusDiff(<dd>double </font></a><font size="2" face="'Courier New'" color="#000000"><em>plusDiffFactor</em></font>)</font>
</dl>
<h4><a name="1082843">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1082813"><font size="2" face="'Courier New'" color="#000000"><em>plusDiffFactor</em></font></a> </strong>
</p>
<blockquote><a name="1086734">Specifies that the antenna ratio gate area should include the diffusion area multiplied by </a><font size="2" face="'Courier New'" color="#000000"><em>plusDiffFactor</em></font>. <font size="2" face="'Courier New'" color="#000000"><em>minusDiffFactor</em></font> is a floating point value.</blockquote>
<h3><a name="lefwLayerAntennaModel(Routing)"></a><a name="1082812">lefwLayerAntennaModel</a></h3>
<p><a name="1077564">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAMODEL</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNAMODEL</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1077565">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077566">int lefwLayerAntennaModel(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>oxide</em></font>)</font>
</dl>
<h4><a name="1077567">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077568"><font size="2" face="'Courier New'" color="#000000"><em>oxide</em></font></a></strong>
</p>
<blockquote><a name="1086745">Specifies the oxide model for the layer. Each model can be specified once per layer. If you specify an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAMODEL</font> statement, that value affects all <font size="2" face="'Courier New'" color="#000000">ANTENNA*</font> statements for the layer that follow it until you specify another <font size="2" face="'Courier New'" color="#000000">ANTENNAMODEL</font> statement. <br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">OXIDE1</font>, <font size="2" face="'Courier New'" color="#000000">OXIDE2</font>, <font size="2" face="'Courier New'" color="#000000">OXIDE3</font>, or <font size="2" face="'Courier New'" color="#000000">OXIDE4</font></blockquote>
<p>
<strong></strong>
<strong><a name="1077571"> </a><font color="#000000"><strong>Note:</strong></font> <font size="2" face="'Courier New'" color="#000000">OXIDE1</font> and <font size="2" face="'Courier New'" color="#000000">OXIDE2</font> are currently supported. If you specify <font size="2" face="'Courier New'" color="#000000">OXIDE3</font> or <font size="2" face="'Courier New'" color="#000000">OXIDE4</font>, current tools parse and ignore them. </strong>
</p>
<h3><a name="lefwLayerAntennaSideAreaFactor"></a><a name="1074111">lefwLayerAntennaSideAreaFactor</a></h3>
<p><a name="1074112">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNASIDEAREAFACTOR</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNASIDEAREAFACTOR</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1074113">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074114">int lefwLayerAntennaSideAreaFactor(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value<dd></em></font>const char* diffUseOnly)</font>
</dl>
<h4><a name="1074115">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1086761"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1086762">Specifies the adjust or multiply factor for the antenna metal calculation.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1086770"><font size="2" face="'Courier New'" color="#000000">diffUseOnly</font></a></strong>
</p>
<blockquote><a name="1086777">Optional argument that specifies that the current antenna factor should only be used when the corresponding layer is connected to the diffusion. Specify </a><font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument.</blockquote>
<h3><a name="lefwLayerAntennaSideAreaRatio"></a><a name="1074109">lefwLayerAntennaSideAreaRatio</a></h3>
<p><a name="1073959">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNASIDEAREARATIO</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNASIDEAREARATIO</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1073960">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073961">int lefwLayerAntennaSideAreaFactor(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1073962">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073963"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1086785">Specifies the antenna ratio, using the side wall area of the wire that is not connected to the diffusion diode.</a></blockquote>
<h3><a name="1074140">lefwLayerDCCurrentDensity</a></h3>
<p><a name="1074141">Writes the </a><font size="2" face="'Courier New'" color="#000000">DCCURRENTDENSITY</font> statement. The <font size="2" face="'Courier New'" color="#000000">DCCURENTDENSITY</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074142">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074143">int lefwLayerDCCurrentDensity(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>type</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>value</em></font>)</font>
</dl>
<h4><a name="1074144">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074145"><font size="2" face="'Courier New'" color="#000000"><em>type</em></font></a> </strong>
</p>
<blockquote><a name="1086800">Specifies the DC current limit, </a><font size="2" face="'Courier New'" color="#000000">AVERAGE.</font></blockquote>
<p>
<strong></strong>
<strong><a name="1086809"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1086816">Specifies the current limit for the layer, in milliamps per micron. If you specify </a><font size="2" face="'Courier New'" color="#000000">0</font>, you must specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerDCWidth</font> and <font size="2" face="'Courier New'" color="#000000">lefwLayerDCTableEntries</font> routines. </blockquote>
<h3><a name="1074191">lefwLayerDCTableEntries</a></h3>
<p><a name="1074192">Writes a </a><font size="2" face="'Courier New'" color="#000000">TABLEENTRIES</font> statement. The <font size="2" face="'Courier New'" color="#000000">TABLENTRIES</font> statement is required if you specify a <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement, and can be used only once in a <font size="2" face="'Courier New'" color="#000000">DCCURENTDENSITY</font> statement.</p>
<h4><a name="1074193">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074194">int lefwLayerDCTableEntries(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numEntries</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>entries</em></font>)</font>
</dl>
<h4><a name="1074195">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074196"><font size="2" face="'Courier New'" color="#000000"><em>numEntries</em></font></a></strong>
</p>
<blockquote><a name="1086824">Specifies the number of table entry values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1074197"><font size="2" face="'Courier New'" color="#000000"><em>entries</em></font></a></strong>
</p>
<blockquote><a name="1086831">Specifies the value of current density for each specified width, in milliamps per micron.</a></blockquote>
<h3><a name="1074198">lefwLayerDCWidth</a></h3>
<p><a name="1074199">Writes a </a><font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement is required if you specify a value of 0 in the <font size="2" face="'Courier New'" color="#000000">lefwLayerDCCurrentDensity</font> routine, and can be used only once in a <font size="2" face="'Courier New'" color="#000000">DCCURENTDENSITY</font> statement.</p>
<h4><a name="1074200">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074201">int lefwLayerDCWidth(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numWidths</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>widths</em></font>)</font>
</dl>
<h4><a name="1074202">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074203"><font size="2" face="'Courier New'" color="#000000"><em>numWidths</em></font></a></strong>
</p>
<blockquote><a name="1086845">Specifies the number of width values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1074204"><font size="2" face="'Courier New'" color="#000000"><em>widths</em></font></a></strong>
</p>
<blockquote><a name="1086856">Specifies the wire width values, in microns.</a></blockquote>
<h3><a name="1074189">lefwLayerRouting</a></h3>
<p><a name="1059455">Writes the </a><font size="2" face="'Courier New'" color="#000000">DIRECTION</font> and <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statements for a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. The <font size="2" face="'Courier New'" color="#000000">DIRECTION</font> and <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statements are required and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1051213">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051214">int lefwLayerRouting(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>direction</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>width</em></font>)</font>
</dl>
<h4><a name="1051221">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1051224"><font size="2" face="'Courier New'" color="#000000"><em>direction</em></font></a></strong>
</p>
<blockquote><a name="1086864">Specifies the preferred routing direction. <br></a><font color="#000000"><em>Value:</em></font> Specify one of the following:<font color="#000000"><em> </em></font> </blockquote>
<table summary="" border="0" cellpadding="4" cellspacing="0" bordercolor="#D3D3D3" width="648">
<caption>
<tr>
<td cellpadding="4" valign="top" width="204">
<p><a name="1080236">&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top" width="132">
<p><a name="1080238"><font size="2" face="'Courier New'" color="#000000">HORIZONTAL</font></a></p>
</td>
<td cellpadding="4" valign="top" width="312">
<p><a name="1080240">Routing parallel to the x axis is preferred.</a></p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1080242">&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1080244"><font size="2" face="'Courier New'" color="#000000">VERTICAL</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1080246">Routing parallel to the y axis is preferred.</a></p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1080248">&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1080250"><font size="2" face="'Courier New'" color="#000000">DIAG45</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1080252">Routing along a 45&#45;degree angle is preferred.</a></p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1080272">&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1080274"><font size="2" face="'Courier New'" color="#000000">DIAG135</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1080276">Routing along a 135&#45;degree angle is preferred.</a></p>
</td>
</tr>
</table>
<p>
<strong></strong>
<strong><a name="1059470"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1086876">Specifies the default routing width to use for all regular wiring on the layer. </a></blockquote>
<h3><a name="lefwLayerRoutingArea"></a><a name="1072291">lefwLayerRoutingArea</a></h3>
<p><a name="1072292">Writes an </a><font size="2" face="'Courier New'" color="#000000">AREA</font> statement. The <font size="2" face="'Courier New'" color="#000000">AREA</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1072293">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072298">int lefwLayerRoutingArea (<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>area</em></font>) </font>
</dl>
<h4><a name="1072299">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1083373"><font size="2" face="'Courier New'" color="#000000"><em>area</em></font></a></strong>
</p>
<blockquote><a name="1086884">Specifies the minimum metal area required for polygons on the layer, in distance units squared. All polygons must have an area that is greater than or equal to area, if no </a><font size="2" face="'Courier New'" color="#000000">MINSIZE</font> rule (<font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingMinsize</font>) is specified. If a <font size="2" face="'Courier New'" color="#000000">MINSIZE</font> rule exists, all polygons must meet either the <font size="2" face="'Courier New'" color="#000000">MINSIZE</font> or the <font size="2" face="'Courier New'" color="#000000">AREA</font> rule.</blockquote>
<h3><a name="1083233">lefwLayerRoutingCapacitance</a></h3>
<p><a name="1059502">Writes a </a><font size="2" face="'Courier New'" color="#000000">CAPACITANCE CPERSQDIST</font> statement. The <font size="2" face="'Courier New'" color="#000000">CAPACITANCE CPERSQDIST</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1051289">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051290">int lefwLayerRoutingCapacitance(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>capacitance</em></font>)</font>
</dl>
<h4><a name="1051305">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059513"><font size="2" face="'Courier New'" color="#000000"><em>capacitance</em></font></a></strong>
</p>
<blockquote><a name="1086892">Specifies the capacitance for each square unit, in picofarads per square micron.</a></blockquote>
<h3><a name="1032649">lefwLayerRoutingCapMultiplier</a></h3>
<p><a name="1059525">Writes the </a><font size="2" face="'Courier New'" color="#000000">CAPMULTIPLIER</font> statement. The <font size="2" face="'Courier New'" color="#000000">CAPMULTIPLIER</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1051322">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051323">int lefwLayerRoutingCapMultiplier(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>capMultiplier</em></font>)</font>
</dl>
<h4><a name="1051334">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1086905"><font size="2" face="'Courier New'" color="#000000"><em>capMultiplier</em></font></a></strong>
</p>
<blockquote><a name="1086906">Specifies the multiplier for interconnect capacitance to account for increases in capacitance caused by nearby wires. </a></blockquote>
<h3><a name="lefwLayerRoutingDiagMinEdgeLength"></a><a name="1032444">lefwLayerRoutingDiagMinEdgeLength </a></h3>
<p><a name="1080396">Writes a </a><font size="2" face="'Courier New'" color="#000000">DIAGMINEDGELENGTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">DIAGMINEDGELENGTH</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1080398">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080399">lefwLayerRoutingDiagMinEdgeLength( <dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>diagLength</em></font>)</font>
</dl>
<h4><a name="1080400">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1080401"><font size="2" face="'Courier New'" color="#000000"><em>diagLength</em></font></a> </strong>
</p>
<blockquote><a name="1086911">Specifies the minimum length for a diagonal edge. Any 45&#45;degree diagonal edge must have a length that is greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>diagLength</em></font>.</blockquote>
<h3><a name="lefwLayerRoutingDiagPitch"></a><a name="1080394">lefwLayerRoutingDiagPitch </a></h3>
<p><a name="1080338">Writes a </a><font size="2" face="'Courier New'" color="#000000">DIAGPITCH</font> statement that contains one pitch value that is used for both the 45&#45;degree angle and 135&#45;degree angle directions. The <font size="2" face="'Courier New'" color="#000000">DIAGPITCH</font> statement is optional and can only be used once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingDiagPitchXYDistance</font> routine.</p>
<h4><a name="1080341">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080342">lefwLayerRoutingDiagPitch( <dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font>)</font>
</dl>
<h4><a name="1080343">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1080344"><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font></a></strong>
</p>
<blockquote><a name="1086919">Specifies the 45&#45;degree routing pitch for the layer.</a></blockquote>
<h3><a name="lefwLayerRoutingDiagPitchXYDistance"></a><a name="1080337">lefwLayerRoutingDiagPitchXYDistance </a></h3>
<p><a name="1080349">Writes a </a><font size="2" face="'Courier New'" color="#000000">DIAGPITCH</font> statement that contains separate values for the 45&#45;degree angle and 135&#45;degree angle directions. The <font size="2" face="'Courier New'" color="#000000">DIAGPITCH</font> statement is optional and can only be used once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingDiagPitch</font> routine. </p>
<h4><a name="1080360">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080361">lefwLayerRoutingDiagPitchXYDistance( <dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>diag45Distance</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>diag135Distance</em></font>)</font>
</dl>
<h4><a name="1080362">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1080363"><font size="2" face="'Courier New'" color="#000000"><em>diag45Distance</em></font></a></strong>
</p>
<blockquote><a name="1086926">Specifies the 45&#45;degree angle pitch (the center&#45;to&#45;center space between 45&#45;degree angle routes).</a></blockquote>
<p>
<strong></strong>
<strong><a name="1086935"><font size="2" face="'Courier New'" color="#000000"><em>diag135Distance</em></font></a> </strong>
</p>
<blockquote><a name="1086942">Specifies the 135&#45;degree angle pitch.</a></blockquote>
<h3><a name="lefwLayerRoutingDiagSpacing"></a><a name="1080348">lefwLayerRoutingDiagSpacing </a></h3>
<p><a name="1080387">Writes a </a><font size="2" face="'Courier New'" color="#000000">DIAGSPACING</font> statement. The <font size="2" face="'Courier New'" color="#000000">DIAGSPACING</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1080389">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080390">lefwLayerRoutingDiagSpacing( <dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>diagSpacing</em></font>)</font>
</dl>
<h4><a name="1080391">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1080392"><font size="2" face="'Courier New'" color="#000000"><em>diagSpacing</em></font></a></strong>
</p>
<blockquote><a name="1086952">Specifies the minimum spacing allowed for a 45&#45;degree angle shape.</a></blockquote>
<h3><a name="lefwLayerRoutingDiagWidth"></a><a name="1080385">lefwLayerRoutingDiagWidth </a></h3>
<p><a name="1080367">Writes a </a><font size="2" face="'Courier New'" color="#000000">DIAGWIDTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">DIAGWIDTH</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1080374">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080375">lefwLayerRoutingDiagWidth( <dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>diagWidth</em></font>)</font>
</dl>
<h4><a name="1080376">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1080377"><font size="2" face="'Courier New'" color="#000000"><em>diagWidth</em></font></a></strong>
</p>
<blockquote><a name="1086964">Specifies the minimum width allowed for a 45&#45;degree angle shape.</a></blockquote>
<h3><a name="1080366">lefwLayerRoutingEdgeCap</a></h3>
<p><a name="1059541">Writes an </a><font size="2" face="'Courier New'" color="#000000">EDGECAPACITANCE</font> statement. The <font size="2" face="'Courier New'" color="#000000">EDGECAPACITANCE</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1051372">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051373">int lefwLayerRoutingEdgeCap(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>edgeCap</em></font>)</font>
</dl>
<h4><a name="1051384">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1086977"><font size="2" face="'Courier New'" color="#000000"><em>edgeCap</em></font></a></strong>
</p>
<blockquote><a name="1086978">Specifies a floating&#45;point value of peripheral capacitance, in picoFarads per micron.</a></blockquote>
<h3><a name="1086979">lefwLayerRoutingHeight</a></h3>
<p><a name="1059559">Writes a </a><font size="2" face="'Courier New'" color="#000000">HEIGHT</font> statement. The <font size="2" face="'Courier New'" color="#000000">HEIGHT</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1051404">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051405">int lefwLayerRoutingHeight(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>height</em></font>)</font>
</dl>
<h4><a name="1051416">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059553"><font size="2" face="'Courier New'" color="#000000"><em>height</em></font></a></strong>
</p>
<blockquote><a name="1086985">Specifies the distance from the top of the ground plane to the bottom of the interconnect.</a></blockquote>
<h3><a name="lefwLayerRoutingMaxwidth"></a><a name="1077069">lefwLayerRoutingMaxwidth</a></h3>
<p><a name="1077070">Writes a </a><font size="2" face="'Courier New'" color="#000000">MAXIMUMWIDTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">MAXIMUMWIDTH</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1077071">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077072">int lefwLayerRoutingMaxwidth(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>width</em></font>)</font>
</dl>
<h4><a name="1077073">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077074"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1086997">Specifies the maximum width a wire on the layer can have.</a></blockquote>
<h3><a name="lefwLayerRoutingMinenclosedarea"></a><a name="1077075">lefwLayerRoutingMinenclosedarea</a></h3>
<p><a name="1077054">Writes a </a><font size="2" face="'Courier New'" color="#000000">MINENCLOSEDAREA</font> statement. The <font size="2" face="'Courier New'" color="#000000">MINENCLOSEDAREA</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1077055">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077056">int lefwLayerRoutingMinenclosedarea(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numMinenclosed</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>area</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>width</em></font>)</font>
</dl>
<h4><a name="1079493">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1079494"><font size="2" face="'Courier New'" color="#000000"><em>numMinenclosed</em></font></a></strong>
</p>
<blockquote><a name="1087005">Specifies the number of values defined in the routine.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1087014"><font size="2" face="'Courier New'" color="#000000"><em>area</em></font></a></strong>
</p>
<blockquote><a name="1087021">Specifies the minimum area size of a hole enclosed by metal. You can specify one or more values.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1087030"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1087037">Optional argument that applies the minimum area size limit only when the hole is created from a wire that has a width that is less than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>width</em></font>. You can specify one or more values.</blockquote>
<h3><a name="lefwLayerRoutingMinimumcut"></a><a name="1076921">lefwLayerRoutingMinimumcut</a></h3>
<p><a name="1073360">Writes a </a><font size="2" face="'Courier New'" color="#000000">MINIMUMCUT</font> statement. The <font size="2" face="'Courier New'" color="#000000">MINIMUMCUT</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1073365">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073366">int lefwLayerRoutingMinimumcut(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>numCuts</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font>)</font>
</dl>
<h4><a name="1073367">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1087050"><font size="2" face="'Courier New'" color="#000000"><em>numCuts</em></font></a></strong>
</p>
<blockquote><a name="1087051">Specifies the number of cuts a via must have when it is on a wide wire or pin whose width is greater than </a><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font>.</blockquote>
<p>
<strong></strong>
<strong><a name="1087058"><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font></a></strong>
</p>
<blockquote><a name="1087065">Specifies the minimum width of the wire or pin. </a></blockquote>
<h3><a name="lefwLayerRoutingMinimumcutConnections"></a><a name="1077081">lefwLayerRoutingMinimumcutConnections</a></h3>
<p><a name="1077082">Writes a </a><font size="2" face="'Courier New'" color="#000000">FROMABOVE</font> or <font size="2" face="'Courier New'" color="#000000">FROMBELOW</font> statement. This statement is optional and can be used only once after each <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingMinimumcut</font> routine.</p>
<h4><a name="1077083">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077084">int lefwLayerRoutingMinimumcutConnections(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>direction</em></font>)</font>
</dl>
<h4><a name="1077085">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077086"><font size="2" face="'Courier New'" color="#000000"><em>direction</em></font></a></strong>
</p>
<blockquote><a name="1087072">Specifies the </a><font size="2" face="'Courier New'" color="#000000">MINIMUMCUT</font> statement applies only to connections from above the layer or from below the layer.<br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">FROMABOVE</font> or <font size="2" face="'Courier New'" color="#000000">FROMBELOW</font> </blockquote>
<h3><a name="lefwLayerRoutingMinimumcutLengthWithin"></a><a name="1077087">lefwLayerRoutingMinimumcutLengthWithin</a></h3>
<p><a name="1077088">Writes a </a><font size="2" face="'Courier New'" color="#000000">LENGTH</font> statement. This statement is optional and can be used only once after each <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingMinimumcut</font> routine.</p>
<h4><a name="1077089">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077090">int lefwLayerRoutingMinimumcutLengthWithin(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>length</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>distance</em></font>)</font>
</dl>
<h4><a name="1077091">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077092"><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font></a></strong>
</p>
<blockquote><a name="1087091">Applies the minimum cut rule to thin wires directly connected to wide wires, if the vias on the thin wires are less than </a><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font> from the wide wire, and the wide wire has a length that is greater than <font size="2" face="'Courier New'" color="#000000"><em>length</em></font>. </blockquote>
<p>
<strong></strong>
<strong><a name="1077093"><font size="2" face="'Courier New'" color="#000000"><em>length</em></font></a></strong>
</p>
<blockquote><a name="1087099">Specifies the minimum length of the wide wire.</a></blockquote>
<h3><a name="lefwLayerRoutingMinimumcutWithin"></a><a name="1083308">lefwLayerRoutingMinimumcutWithin</a></h3>
<p><a name="1083309">Writes a </a><font size="2" face="'Courier New'" color="#000000">MINIMUMCUT</font> statement with a <font size="2" face="'Courier New'" color="#000000">WITHIN</font> keyword. This routine is similar to the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingMinimumcut</font> routine, except that it lets you specify a <font size="2" face="'Courier New'" color="#000000">WITHIN</font> value. The <font size="2" face="'Courier New'" color="#000000">MINIMUMCUT</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<h4><a name="1083310">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1083311">int lefwLayerRoutingMinimumcutWithin(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>numCuts</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>cutDistance</em></font>)</font>
</dl>
<h4><a name="1083312">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1087112"><font size="2" face="'Courier New'" color="#000000"><em>numCuts</em></font></a></strong>
</p>
<blockquote><a name="1087120">Specifies the number of cuts a via must have when it is on a wide wire or pin whose width is greater than </a><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font>.</blockquote>
<p>
<strong></strong>
<strong><a name="1087129"><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font></a></strong>
</p>
<blockquote><a name="1087136">Specifies the minimum width of the wire or pin. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1087145"><font size="2" face="'Courier New'" color="#000000"><em>cutDistance</em></font></a></strong>
</p>
<blockquote><a name="1087152">Specifies that </a><font size="2" face="'Courier New'" color="#000000"><em>numCuts</em></font> via cuts must be less than <font size="2" face="'Courier New'" color="#000000"><em>cutDistance</em></font> from each other to be counted together to meet the minimum cut rule. </blockquote>
<h3><a name="lefwLayerRoutingMinsize"></a><a name="1083304">lefwLayerRoutingMinsize </a></h3>
<p><a name="1080421">Writes a </a><font size="2" face="'Courier New'" color="#000000">MINSIZE</font> statement. The <font size="2" face="'Courier New'" color="#000000">MINSIZE</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1080424">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080425">lefwLayerRoutingMinsize( <dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numRect</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font>, <dd>double* <font size="2" face="'Courier New'" color="#000000"><em>minLength</em></font>)</font>
</dl>
<h4><a name="1080426">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1080427"><font size="2" face="'Courier New'" color="#000000"><em>numRect</em></font></a> </strong>
</p>
<blockquote><a name="1087160">Specifies the number of rectangles defined.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1087169"><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>minLength</em></font></strong>
</p>
<blockquote><a name="1087176">Specifies the minimum width and length values for a rectangle that must be able to fit somewhere within each polygon on this layer. All polygons must meet this </a><font size="2" face="'Courier New'" color="#000000">MINSIZE</font> rule, if no <font size="2" face="'Courier New'" color="#000000">AREA</font> rule is specified (<font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingArea</font>). If an <font size="2" face="'Courier New'" color="#000000">AREA</font> rule is specified, all polygons must meet either the <font size="2" face="'Courier New'" color="#000000">MINSIZE</font> or the <font size="2" face="'Courier New'" color="#000000">AREA</font> rule. </blockquote>
<h3><a name="lefwLayerRoutingMinstep"></a><a name="1080420">lefwLayerRoutingMinstep</a></h3>
<p><a name="1077095">Writes a </a><font size="2" face="'Courier New'" color="#000000">MINSTEP</font> statement. The <font size="2" face="'Courier New'" color="#000000">MINSTEP</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1077096">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077097">int lefwLayerRoutingMinstep(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font>)</font>
</dl>
<h4><a name="1077098">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077099"><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font></a> </strong>
</p>
<blockquote><a name="1087191">Specifies the minimum step size, or shortest edge length, for a shape.</a></blockquote>
<h3><a name="lefwLayerRoutingMinstepMaxEdges"></a><a name="1083533">lefwLayerRoutingMinstepMaxEdges</a></h3>
<p><a name="1083557">Writes a </a><font size="2" face="'Courier New'" color="#000000">MINSTEP</font> statement. This routine is similar to <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingMinstep</font>, except that it lets you specify the <font size="2" face="'Courier New'" color="#000000">MAXEDGES</font> option. The <font size="2" face="'Courier New'" color="#000000">MINSTEP</font> statement is optional and can be called only once after <font size="2" face="'Courier New'" color="#000000">lefwStartLayerRouting</font>. </p>
<h4><a name="1083535">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1083536">int lefwLayerRoutingMinstepMaxEdges(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>maxEdges</em></font>)</font>
</dl>
<h4><a name="1083537">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1083549"><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font></a></strong>
</p>
<blockquote><a name="1087203">Specifies the minimum step size, or shortest edge length, for a shape.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1087212"><font size="2" face="'Courier New'" color="#000000"><em>maxEdges</em></font></a></strong>
</p>
<blockquote><a name="1087219">Specifies the maximum consecutive edges. </a></blockquote>
<h3><a name="lefwLayerRoutingMinstepWithOptions"></a><a name="1083531">lefwLayerRoutingMinstepWithOptions </a></h3>
<p><a name="1080440">Writes a </a><font size="2" face="'Courier New'" color="#000000">MINSTEP</font> statement that contains rule type and total edge length values. The <font size="2" face="'Courier New'" color="#000000">MINSTEP</font> statement is optional and can be more than once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1080448">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080449">lefwLayerRoutingMinstepWithOptions( <dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font>, <dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>rule</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>maxLength</em></font>)</font>
</dl>
<h4><a name="1080450">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1080451"><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font></a> </strong>
</p>
<blockquote><a name="1087227">Specifies the minimum step size, or shortest edge length, for a shape. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1080454"><font size="2" face="'Courier New'" color="#000000"><em>rule</em></font></a></strong>
</p>
<blockquote><a name="1087234">Indicates to which consecutive edges the </a><font size="2" face="'Courier New'" color="#000000">MINSTEP</font> rule applies. A DRC violation occurs if one or more consecutive edges of the specified type are less than <font size="2" face="'Courier New'" color="#000000"><em>distance</em></font>. There can only be one rule of each type per layer. <br><font color="#000000"><em>Value:</em></font> Specify one of the following: </blockquote>
<table summary="" border="0" cellpadding="4" cellspacing="0" bordercolor="#D3D3D3" width="648">
<caption>
<tr>
<td cellpadding="4" valign="top" width="204">
<p><a name="1080483">&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top" width="144">
<p><a name="1080485"><font size="2" face="'Courier New'" color="#000000">INSIDECORNER</font></a></p>
</td>
<td cellpadding="4" valign="top" width="300">
<p><a name="1080487">Applies to consecutive edges of an inside corner that are less than </a><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font>. </p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1080489">&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1080491"><font size="2" face="'Courier New'" color="#000000">OUTSIDECORNER</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1080493">Applies to consecutive edges of an outside corner that are less than </a><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font>. </p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1080495">&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1080497"><font size="2" face="'Courier New'" color="#000000">STEP</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1080499">Applies to consecutive edges of a step that are less than </a><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font>. </p>
</td>
</tr>
</table>
<p>
<strong></strong>
<strong><a name="1080455"><font size="2" face="'Courier New'" color="#000000"><em>maxLength</em></font></a></strong>
</p>
<blockquote><a name="1087241">Specifies the maximum total edge length allowed that OPC can correct without causing new DRC violations. A violation only occurs if the total length of consecutive edges that are less than </a><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font> is greater than <font size="2" face="'Courier New'" color="#000000"><em>maxLength</em></font>. </blockquote>
<h3><a name="lefwLayerRoutingMinwidth"></a><a name="1076975">lefwLayerRoutingMinwidth</a></h3>
<p><a name="1079475">Writes a </a><font size="2" face="'Courier New'" color="#000000">MINWIDTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">MINWIDTH</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1079476">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1079477">int lefwLayerRoutingMinwidth(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>width</em></font>)</font>
</dl>
<h4><a name="1079478">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1079479"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1087249">Specifies the minimum legal object width on the routing layer, in microns. </a></blockquote>
<h3><a name="1079474">lefwLayerRoutingOffset</a></h3>
<p><a name="1059567">Writes an </a><font size="2" face="'Courier New'" color="#000000">OFFSET</font> statement that contains one value for both the x and y offsets. The <font size="2" face="'Courier New'" color="#000000">OFFSET</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingOffsetXYDistance</font> routine.</p>
<h4><a name="1051432">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051433">int lefwLayerRoutingOffset(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>offset</em></font>)</font>
</dl>
<h4><a name="1051444">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059571"><font size="2" face="'Courier New'" color="#000000"><em>offset</em></font></a></strong>
</p>
<blockquote><a name="1087256">Specifies the offset, from the origin (0,0) for the routing grid for the layer. </a></blockquote>
<h3><a name="lefwLayerRoutingOffsetXYDistance"></a><a name="1051470">lefwLayerRoutingOffsetXYDistance </a></h3>
<p><a name="1080405">Writes an </a><font size="2" face="'Courier New'" color="#000000">OFFSET</font> statement that contains separate values for the x and y offsets. The <font size="2" face="'Courier New'" color="#000000">OFFSET</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingOffset</font> routine.</p>
<h4><a name="1080409">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080410">lefwLayerRoutingOffsetXYDistance( <dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>xDistance</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>yDistance</em></font>)</font>
</dl>
<h4><a name="1080411">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1080412"><font size="2" face="'Courier New'" color="#000000"><em>xDistance</em></font></a> </strong>
</p>
<blockquote><a name="1087264">Specifies the x offset for vertical routing tracks.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1080419"><font size="2" face="'Courier New'" color="#000000"><em>yDistance</em></font></a></strong>
</p>
<blockquote><a name="1087271">Specifies the y offset for horizontal routing tracks.</a></blockquote>
<h3><a name="1080403">lefwLayerRoutingPitch</a></h3>
<p><a name="1059610">Writes a </a><font size="2" face="'Courier New'" color="#000000">PITCH</font> statement that contains one pitch value that is used for both the x and y pitch. The <font size="2" face="'Courier New'" color="#000000">PITCH</font> statement is required and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingPitchXYDistance</font> routine. </p>
<h4><a name="1051482">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051483">int lefwLayerRoutingPitch(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>pitch</em></font>)</font>
</dl>
<h4><a name="1051493">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1080303"><font size="2" face="'Courier New'" color="#000000"><em>pitch</em></font></a></strong>
</p>
<blockquote><a name="1087279">Specifies the routing pitch for the layer.</a></blockquote>
<h3><a name="lefwLayerRoutingPitchXYDistance"></a><a name="1080304">lefwLayerRoutingPitchXYDistance</a></h3>
<p><a name="1080305">Writes a </a><font size="2" face="'Courier New'" color="#000000">PITCH</font> statement that contains separate values for the x and y pitch. The <font size="2" face="'Courier New'" color="#000000">PITCH</font> statement is required and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. If you specify this routine, you cannot specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingPitch</font> routine. </p>
<h4><a name="1080316">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080317">lefwLayerRoutingPitchXYDistance( <dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>xDistance</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>yDistance</em></font>)</font>
</dl>
<h4><a name="1080318">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1080319"><font size="2" face="'Courier New'" color="#000000"><em>xDistance</em></font></a></strong>
</p>
<blockquote><a name="1087287">Specifies the x pitch (that is , the space between each vertical routing track).</a></blockquote>
<p>
<strong></strong>
<strong><a name="1080321"><font size="2" face="'Courier New'" color="#000000"><em>yDistance</em></font></a> </strong>
</p>
<blockquote><a name="1087298">Specifies the y pitch (that is, the space between each horizontal routing track).</a></blockquote>
<h3><a name="lefwLayerRoutingProtrusion"></a><a name="1080284">lefwLayerRoutingProtrusion</a></h3>
<p><a name="1077106">Writes a </a><font size="2" face="'Courier New'" color="#000000">PROTRUSION</font> statement. The <font size="2" face="'Courier New'" color="#000000">PROTRUSION</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1077107">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077108">int lefwLayerRoutingProtrusion(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>width1</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>length</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>width2</em></font>)</font>
</dl>
<h4><a name="1077109">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077110"><font size="2" face="'Courier New'" color="#000000"><em>length</em></font></a></strong>
</p>
<blockquote><a name="1087306">Specifies the maximum length of a protrusion.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1077111"><font size="2" face="'Courier New'" color="#000000"><em>width1</em></font></a></strong>
</p>
<blockquote><a name="1087313">Specifies the minimum width of a protrusion.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1077112"><font size="2" face="'Courier New'" color="#000000"><em>width2</em></font></a></strong>
</p>
<blockquote><a name="1087320">Specifies the minimum width of the wire to which the protrusion is connected.</a></blockquote>
<h3><a name="1077003">lefwLayerRoutingResistance</a></h3>
<p><a name="1059622">Writes a </a><font size="2" face="'Courier New'" color="#000000">RESISTANCE RPERSQ</font> statement. The <font size="2" face="'Courier New'" color="#000000">RESISTANCE RPERSQ</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1051516">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051517">int lefwLayerRoutingResistance(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>resistance</em></font>)</font>
</dl>
<h4><a name="1051528">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059580"><font size="2" face="'Courier New'" color="#000000"><em>resistance</em></font></a></strong>
</p>
<blockquote><a name="1087328">Specifies the resistance for a square of wire, in ohms per square micron.</a></blockquote>
<h3><a name="1032726">lefwLayerRoutingShrinkage</a></h3>
<p><a name="1059630">Writes a </a><font size="2" face="'Courier New'" color="#000000">SHRINKAGE</font> statement. The <font size="2" face="'Courier New'" color="#000000">SHRINKAGE</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1051544">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051545">int lefwLayerRoutingShrinkage(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>shrinkage</em></font>)</font>
</dl>
<h4><a name="1051556">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059586"><font size="2" face="'Courier New'" color="#000000"><em>shrinkage</em></font></a></strong>
</p>
<blockquote><a name="1087340">Specifies the value to account for shrinkage of interconnect wiring because of the etching process. Actual wire widths are determined by subtracting this constant value.</a></blockquote>
<h3><a name="1032737">lefwLayerRoutingSpacing</a></h3>
<p><a name="1062546">Writes a </a><font size="2" face="'Courier New'" color="#000000">SPACING</font> statement. The <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<p><font color="#000000"><strong>Note: </strong></font><a name="1079450">You must use either this routine or the </a><font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingStartSpacingtableParallel</font> routine for all <font size="2" face="'Courier New'" color="#000000">LAYER</font> sections. </p>
<h4><a name="1051573">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051574">int lefwLayerRoutingSpacing(<dd>double </a><font color="#000000"><em>Spacing</em></font>)</font>
</dl>
<h4><a name="1051589">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1087353"><font size="2" face="'Courier New'" color="#000000"><em>Spacing</em></font></a></strong>
</p>
<blockquote><a name="1087354">Specifies the minimum spacing allowed between two regular geometries on different nets, also known as the different&#45;net spacing rule. </a></blockquote>
<h3><a name="lefwLayerRoutingSpacingEndOfLine"></a><a name="1083392">lefwLayerRoutingSpacingEndOfLine</a></h3>
<p><a name="1083393">Writes an </a><font size="2" face="'Courier New'" color="#000000">ENDOFLINE</font> statement. The <font size="2" face="'Courier New'" color="#000000">ENDOFLINE</font> statement is optional and can be used only once after a <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement.</p>
<h4><a name="1083394">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1083395"><font color="#000000">int lefwLayerRoutingSpacingEndOfLine(<dd>double </font></a><font size="2" face="'Courier New'" color="#000000"><em>eolWidth</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>eolWithin</em></font>)</font>
</dl>
<h4><a name="1083396">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1083397"><font size="2" face="'Courier New'" color="#000000"><em>eolWidth</em></font></a></strong>
</p>
<blockquote><a name="1087360">Specifies the end&#45;of&#45;line width. An end&#45;of&#45;line with a width less than </a><font size="2" face="'Courier New'" color="#000000"><em>eolWidth</em></font> requires spacing greater than or equal to <font size="2" face="'Courier New'" color="#000000"><em>eolSpace</em></font> beyond the end of the line anywhere within <font size="2" face="'Courier New'" color="#000000"><em>eolWIthin</em></font> distance.</blockquote>
<p>
<strong></strong>
<strong><a name="1083419"><font size="2" face="'Courier New'" color="#000000"><em>eolWithin</em></font></a></strong>
</p>
<blockquote><a name="1087367">The </a><font size="2" face="'Courier New'" color="#000000"><em>eolWithin</em></font> distance. This value must be smaller than the minimum allowed spacing. </blockquote>
<h3><a name="lefwLayerRoutingSpacingEOLParallel"></a><a name="1083398">lefwLayerRoutingSpacingEOLParallel</a></h3>
<p><a name="1083399">Writes a </a><font size="2" face="'Courier New'" color="#000000">PARALLELEDGE</font> statement. The <font size="2" face="'Courier New'" color="#000000">PARALLELEDGE</font> statement is optional and can be used only once after a <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement.</p>
<h4><a name="1083400">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1083401">int lefwLayerRoutingSpacingEOLParallel(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>parSpace</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>parWithin</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>twoEdges</em></font>)</font>
</dl>
<h4><a name="1083402">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1083403"><font size="2" face="'Courier New'" color="#000000"><em>parSpace</em></font></a></strong>
</p>
<blockquote><a name="1087374">Specifies the </a><font size="2" face="'Courier New'" color="#000000"><em>parSpace</em></font> value. The end&#45;of&#45;line rule applies only if there is a parallel edge less than <font size="2" face="'Courier New'" color="#000000"><em>parSpace</em></font> away that is also less than <font size="2" face="'Courier New'" color="#000000"><em>parWithin</em></font> from the end. </blockquote>
<p>
<strong></strong>
<strong><a name="1083437"><font size="2" face="'Courier New'" color="#000000"><em>parWithin</em></font></a></strong>
</p>
<blockquote><a name="1087386">Specifies the </a><font size="2" face="'Courier New'" color="#000000"><em>parWithin</em></font> value. </blockquote>
<p>
<strong></strong>
<strong><a name="1083438"><font size="2" face="'Courier New'" color="#000000"><em>twoEdges</em></font></a></strong>
</p>
<blockquote><a name="1087393">Optional argument that writes the </a><font size="2" face="'Courier New'" color="#000000">TWOEDGES</font> keyword, which specifies that the end&#45;of&#45;line rule applies only if there are two parallel edges that meet the <font size="2" face="'Courier New'" color="#000000">PARALLELEDGE</font> <font size="2" face="'Courier New'" color="#000000"><em>parSpace</em></font> and <font size="2" face="'Courier New'" color="#000000"><em>parWithin</em></font> parameters. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument. </blockquote>
<h3><a name="lefwLayerRoutingSpacingEndOfNotchWidth"></a><a name="1083505">lefwLayerRoutingSpacingEndOfNotchWidth</a></h3>
<p><a name="1083506">Writes an </a><font size="2" face="'Courier New'" color="#000000">ENDOFNOTCHWIDTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">ENDOFNOTCHWIDTH</font> statement is optional and can be used only once after a <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement.</p>
<h4><a name="1083507">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1083508">int lefwLayerRoutingSpacingEndOfNotchWidth(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>eonWidth</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>minNSpacing</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>minNLength</em></font>)</font>
</dl>
<h4><a name="1087399">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1087400"><font size="2" face="'Courier New'" color="#000000"><em>eonWidth</em></font></a></strong>
</p>
<blockquote><a name="1087406">Specifies the end&#45;of&#45;notch width. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1087401"><font size="2" face="'Courier New'" color="#000000"><em>minNSpacing</em></font></a></strong>
</p>
<blockquote><a name="1087413">Specifies the minimum notch spacing. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1083512"><font size="2" face="'Courier New'" color="#000000"><em>minNLength</em></font></a></strong>
</p>
<blockquote><a name="1087420">Specifies the minimum notch length. </a></blockquote>
<h3><a name="lefwLayerRoutingSpacingLengthThreshold"></a><a name="1083503">lefwLayerRoutingSpacingLengthThreshold</a></h3>
<p><a name="1076728">Writes a </a><font size="2" face="'Courier New'" color="#000000">LENGTHTHRESHOLD</font> statement. The <font size="2" face="'Courier New'" color="#000000">LENGTHTHRESHOLD</font> statement is optional and can be used only once after a <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacing</font> routine. If you specify this routine, you cannot specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingRange</font> or <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSamenet</font> routines. </p>
<h4><a name="1076729">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1076730">int lefwLayerRoutingSpacingLengthThreshold(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>lengthValue</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font>)</font>
</dl>
<h4><a name="1087426">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1087427"><font size="2" face="'Courier New'" color="#000000"><em>lengthValue</em></font></a></strong>
</p>
<blockquote><a name="1087432">Specifies the maximum parallel run length or projected length with an adjacent metal object.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1076733"><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font></a>, <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font> </strong>
</p>
<blockquote><a name="1087439">Optional arguments that specify a width range. If you specify a range, the threshold spacing rule applies to all objects with widths that are greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font> and less than or equal to <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font>.</blockquote>
<h3><a name="lefwLayerRoutingSpacingNotchLength"></a><a name="1083487">lefwLayerRoutingSpacingNotchLength</a></h3>
<p><a name="1083488">Writes a </a><font size="2" face="'Courier New'" color="#000000">NOTCHLENGTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">NOTCHLENGTH</font> statement is optional and can be used only once after <font size="2" face="'Courier New'" color="#000000">lefwStartLayerRouting</font>.</p>
<h4><a name="1083489">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1083490"><font color="#000000">int lefwLayerRoutingSpacingNotchLength(<dd>double </font></a><font size="2" face="'Courier New'" color="#000000"><em>minNLength</em></font>)</font>
</dl>
<h4><a name="1083491">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1083492"><font size="2" face="'Courier New'" color="#000000"><em>minNLength</em></font></a></strong>
</p>
<blockquote><a name="1087446">Specifies the minimum notch length. Any notch with notch length less than </a><font size="2" face="'Courier New'" color="#000000"><em>minNLength</em></font> must have a notch spacing greater than or equal to the minimum spacing. The value you specify must be only slightly larger than the normal minimum spacing (for example, between 1x or 2x minimum spacing).</blockquote>
<h3><a name="lefwLayerRoutingSpacingRange"></a><a name="1083483">lefwLayerRoutingSpacingRange</a></h3>
<p><a name="1073383">Writes a </a><font size="2" face="'Courier New'" color="#000000">RANGE</font> statement. The <font size="2" face="'Courier New'" color="#000000">RANGE</font> statement is optional and can be used only once after a <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacing</font> routine. If you specify this routine, you cannot specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingLengthThreshold</font> or <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSameNet</font> routines.</p>
<h4><a name="1073388">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073389">int lefwLayerRoutingSpacingRange(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font>)</font>
</dl>
<h4><a name="1073390">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073391"><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font></a>, <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font></strong>
</p>
<blockquote><a name="1087454">Specifies a width range. If you specify a range, the minimum spacing rule applies to all wires on the layer with widths that are greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font> and less than or equal to <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font>.</blockquote>
<h3><a name="lefwLayerRoutingSpacingRangeInfluence"></a><a name="1072311">lefwLayerRoutingSpacingRangeInfluence</a></h3>
<p><a name="1072312">Writes an </a><font size="2" face="'Courier New'" color="#000000">INFLUENCE</font> statement. The <font size="2" face="'Courier New'" color="#000000">INFLUENCE</font> statement is optional and can be used only once after a <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingRange</font> routine. If you specify this routine, you cannot specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingRangeUseLengthThreshold</font> or <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingRangeRange</font> routines in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1072313">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072314">int lefwLayerRoutingSpacingRangeInfluence (<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>infValue,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>stubMinWidth,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>stubMaxWidth</em></font>)</font>
</dl>
<h4><a name="1087460">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1087461"><font size="2" face="'Courier New'" color="#000000"><em>infValue</em></font></a></strong>
</p>
<blockquote><a name="1087466">Specifies the area of the stub wire which inherits the spacing from a wide wire.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1072319"><font size="2" face="'Courier New'" color="#000000"><em>stubMinWidth, stubMaxWidth</em></font></a></strong>
</p>
<blockquote><a name="1087473">Optional arguments that specify a wire width range. If you specify a range, the influence spacing rule applies to all stub wires on the layer with widths that are greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>stubMinWidth</em></font> and less than or equal to <font size="2" face="'Courier New'" color="#000000"><em>stubMaxWidth</em></font>. </blockquote>
<h3><a name="lefwLayerRoutingSpacingRangeRange"></a><a name="1073502">lefwLayerRoutingSpacingRangeRange</a></h3>
<p><a name="1073444">Writes a second </a><font size="2" face="'Courier New'" color="#000000">RANGE</font> statement. The second <font size="2" face="'Courier New'" color="#000000">RANGE</font> statement is optional and can be used only once after a <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingRange</font> routine. If you specify this routine, you cannot specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingRangeInfluence</font> or <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingRangeUseLengthThreshold</font> routines in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1073459">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073460">int lefwLayerRoutingSpacingRangeRange(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font>)</font>
</dl>
<h4><a name="1073461">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1073462"><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font></a>, <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font></strong>
</p>
<blockquote><a name="1087482">Specify a second width range. If you specify a second range, the minimum spacing rule applies if the widths of both objects are greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font> and less than or equal to <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font> (each object in a different range).</blockquote>
<h3><a name="lefwLayerRoutingSpacingRangeUseLengthThreshold"></a><a name="1073439">lefwLayerRoutingSpacingRangeUseLengthThreshold</a></h3>
<p><a name="1073482">Writes a </a><font size="2" face="'Courier New'" color="#000000">USELENGTHTHRESHOLD</font> statement. The <font size="2" face="'Courier New'" color="#000000">USELENGTHTHRESHOLD</font> statement is optional and can be used only once after a <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingRange</font> routine. If you specify this routine, you cannot specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingRangeRange </font>or <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingRangeInfluence</font> routines in the same <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<p><a name="1073499">This routine is only valid if one or both of the range values in the </a><font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingRange</font> routine are not zero.</p>
<h4><a name="1073472">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073493">int lefwLayerRoutingSpacingRangeUseLengthThreshold()</a></font>
</dl>
<h3><a name="lefwLayerRoutingSpacingSameNet"></a><a name="1083331">lefwLayerRoutingSpacingSameNet</a></h3>
<p><a name="1083332">Writes a </a><font size="2" face="'Courier New'" color="#000000">SAMENET</font> keyword for a <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement. Only one of <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingSameNet</font>, <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingRange</font>, or <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacingLengthThreshold</font> can be called once after <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacing</font>. </p>
<h4><a name="1083333">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1083334"><font color="#000000">int lefwLayerRoutingSpacingSameNet(<dd>int </font></a><font size="2" face="'Courier New'" color="#000000"><em>PGOnly</em></font>)</font>
</dl>
<h4><a name="1083335">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1083336"><font size="2" face="'Courier New'" color="#000000"><em>PGOnly</em></font></a></strong>
</p>
<blockquote><a name="1087490">Optional argument that specifies the </a><font size="2" face="'Courier New'" color="#000000">PGONLY</font> keyword. If this keyword is specified, the <font size="2" face="'Courier New'" color="#000000"><em>minSpacing</em></font> value only applies to same&#45;net metal that is a power or ground net. </blockquote>
<h3><a name="lefwLayerRoutingStartSpacingtableInfluence"></a><a name="1083327">lefwLayerRoutingStartSpacingtableInfluence</a></h3>
<p><a name="1077227">Writes a </a><font size="2" face="'Courier New'" color="#000000">SPACINGTABLE</font> <font size="2" face="'Courier New'" color="#000000">INFLUENCE</font> statement. The <font size="2" face="'Courier New'" color="#000000">SPACINGTABLE</font> <font size="2" face="'Courier New'" color="#000000">INFLUENCE</font> statement is optional and can be used only once after a <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingStartSpacingtableParallel</font> routine. </p>
<h4><a name="1077229">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077230">int lefwLayerRoutingStartSpacingtableInfluence()</a></font>
</dl>
<h3><a name="lefwLayerRoutingStartSpacingInfluenceWidth"></a><a name="1077900">lefwLayerRoutingStartSpacingInfluenceWidth</a></h3>
<p><a name="1077245">Writes a </a><font size="2" face="'Courier New'" color="#000000">SPACINGTABLE</font> <font size="2" face="'Courier New'" color="#000000">INFLUENCE</font> <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">SPACINGTABLE</font> <font size="2" face="'Courier New'" color="#000000">INFLUENCE</font> <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement is required if you specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingStartSpacingtableInfluence</font> routine, and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1077252">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077253">int lefwLayerRoutingStartSpacingInfluenceWidth(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>width</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>distance</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font>)</font>
</dl>
<h4><a name="1077254">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077255"><font size="2" face="'Courier New'" color="#000000"><em>distance</em></font></a> </strong>
</p>
<blockquote><a name="1087498">Specifies an array of values that represent the distance between a wide wire and two perpendicular wires.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1077259"><font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font></a> </strong>
</p>
<blockquote><a name="1087505">Specifies an array of values that represent the spacing between the two perpendicular wires.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1077260"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a> </strong>
</p>
<blockquote><a name="1087512">Specifies an array of values that represent the width of the wide wire.</a></blockquote>
<h3><a name="lefwLayerRoutingStartSpacingtableParallel"></a><a name="1077240">lefwLayerRoutingStartSpacingtableParallel</a></h3>
<p><a name="1077182">Writes a </a><font size="2" face="'Courier New'" color="#000000">SPACINGTABLE</font> <font size="2" face="'Courier New'" color="#000000">PARALLELRUNLENGTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">SPACINGTABLE</font> <font size="2" face="'Courier New'" color="#000000">PARALLELRUNLENGTH</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section. </p>
<p><font color="#000000"><strong>Note: </strong></font><a name="1079429">You must use either this routine or the </a><font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingSpacing</font> routine for all <font size="2" face="'Courier New'" color="#000000">LAYER</font> sections. </p>
<h4><a name="1077184">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077185">int lefwLayerRoutingStartSpacingtableParallel(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numlength</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>length</em></font>)</font>
</dl>
<h4><a name="1077186">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077187"><font size="2" face="'Courier New'" color="#000000"><em>length</em></font></a></strong>
</p>
<blockquote><a name="1087520">Specifies an array of values that represent the maximum parallel run length between two wires.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1077199"><font size="2" face="'Courier New'" color="#000000"><em>numLength</em></font></a></strong>
</p>
<blockquote><a name="1087527">Specifies the number of </a><font size="2" face="'Courier New'" color="#000000"><em>length</em></font> values specified.</blockquote>
<h3><a name="lefwLayerRoutingStartSpacingtableParallelWidth"></a><a name="1077200">lefwLayerRoutingStartSpacingtableParallelWidth</a></h3>
<p><a name="1077208">Writes a </a><font size="2" face="'Courier New'" color="#000000">SPACINGTABLE</font> <font size="2" face="'Courier New'" color="#000000">PARALLELRUNLENGTH</font> <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">SPACINGTABLE PARALLELRUNLENGTH</font> <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement is required if you specify the <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingStartSpacingtableParallel</font> routine, and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1077211">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077212">int lefwLayerRoutingStartSpacingtableParallelWidth(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>width</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numSpacing</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font>)</font>
</dl>
<h4><a name="1077213">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077214"><font size="2" face="'Courier New'" color="#000000"><em>numSpacing</em></font></a></strong>
</p>
<blockquote><a name="1087535">Specifies the number of </a><font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font> values specified.</blockquote>
<p>
<strong></strong>
<strong><a name="1077216"><font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font></a></strong>
</p>
<blockquote><a name="1087542">Specifies an array of values that represent the spacing between the two wires.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1077217"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1087549">Specifies and array of values that represent the maximum width of the two wires.</a></blockquote>
<h3><a name="lefwLayerRoutingStartSpacingtableTwoWidths"></a><a name="1083580">lefwLayerRoutingStartSpacingtableTwoWidths</a></h3>
<p><a name="1083581">Writes a </a><font size="2" face="'Courier New'" color="#000000">SPACINGTABLE TWOWIDTHS</font> statement. The <font size="2" face="'Courier New'" color="#000000">SPACINGTABLE TWOWIDTHS </font>statement is optional and can be used multiple times in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section after the <font size="2" face="'Courier New'" color="#000000">lefwLayerRouting</font> routine. </p>
<h4><a name="1083582">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1083583"><font color="#000000">int lefwLayerRoutingStartSpacingtableTwoWidths()</font></a></font>
</dl>
<h3><a name="lefwLayerRoutingStartSpacingtableTwoWidthsWidth"></a><a name="1083584">lefwLayerRoutingStartSpacingtableTwoWidthsWidth</a></h3>
<p><a name="1083610">Writes a </a><font size="2" face="'Courier New'" color="#000000">SPACINGTABLE TWOWIDTHS</font> <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement. This routine is required after a <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingStartSpacingtableTwoWidths</font> routine. </p>
<h4><a name="1083586">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1083587">int lefwLayerRoutingSpacingtableTwoWidthsWidth(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>width</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>runLength</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numSpacing</em></font>, <dd>double* <font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font>)</font>
</dl>
<h4><a name="1083588">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1083589"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1087557">The widths of the two objects.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1083590"><font size="2" face="'Courier New'" color="#000000"><em>runLength</em></font></a></strong>
</p>
<blockquote><a name="1087564">Optional argument that specifies the parallel run length between the two objects. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument. </blockquote>
<p>
<strong></strong>
<strong><a name="1083591"><font size="2" face="'Courier New'" color="#000000"><em>numSpacing</em></font></a></strong>
</p>
<blockquote><a name="1087571">Specifies the number of </a><font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font> values provided. </blockquote>
<p>
<strong></strong>
<strong><a name="1083592"><font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font></a></strong>
</p>
<blockquote><a name="1087578">The spacing values that represent the spacing between two objects. </a></blockquote>
<h3><a name="lefwLayerRoutingEndSpacingtable"></a><a name="1083576">lefwLayerRoutingEndSpacingtable</a></h3>
<p><a name="1077918">Ends a </a><font size="2" face="'Courier New'" color="#000000">SPACINGTABLE</font> statement. This routine is required if you specify <font size="2" face="'Courier New'" color="#000000">lefwLayerRoutingStartSpacingtableParallel</font>.</p>
<h4><a name="1077919">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077920">int lefwLayerRoutineEndSpacingtable()</a></font>
</dl>
<h3><a name="1077201">lefwLayerRoutingThickness</a></h3>
<p><a name="1059662">Writes a </a><font size="2" face="'Courier New'" color="#000000">THICKNESS</font> statement. The <font size="2" face="'Courier New'" color="#000000">THICKNESS</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1051607">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051608">int lefwLayerRoutingThickness(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>thickness</em></font>)</font>
</dl>
<h4><a name="1051619">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059594"><font size="2" face="'Courier New'" color="#000000"><em>thickness</em></font></a></strong>
</p>
<blockquote><a name="1087586">Specifies the thickness of the interconnect.</a></blockquote>
<h3><a name="1032759">lefwLayerRoutingWireExtension</a></h3>
<p><a name="1059668">Writes a </a><font size="2" face="'Courier New'" color="#000000">WIREEXTENSION</font> statement. The <font size="2" face="'Courier New'" color="#000000">WIREEXTENSION</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1051634">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051635">int lefwLayerRoutingWireExtension(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>wireExtension</em></font>)</font>
</dl>
<h4><a name="1059673">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059675"><font size="2" face="'Courier New'" color="#000000"><em>wireExtension</em></font></a></strong>
</p>
<blockquote><a name="1087594">Specifies the distance by which wires are extended at vias. Enter </a><font size="2" face="'Courier New'" color="#000000">0</font> to specify no wire extension. Values other than <font size="2" face="'Courier New'" color="#000000">0</font> must be more than half of the default routing width for the layer.</blockquote>
<h3><a name="lefwMaxAdjacentSlotSpacing"></a><a name="1074252">lefwMaxAdjacentSlotSpacing</a></h3>
<p><a name="1074305">Writes a </a><font size="2" face="'Courier New'" color="#000000">MAXADJACENTSLOTSPACING</font> statement. The <font size="2" face="'Courier New'" color="#000000">MAXADJACENTSLOTSPACING</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074310">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074311">int lefwMaxAdjacentSlotSpacing(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>maxSpacing</em></font>)</font>
</dl>
<h4><a name="1074312">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074313"><font size="2" face="'Courier New'" color="#000000"><em>maxSpacing</em></font></a></strong>
</p>
<blockquote><a name="1087602">Specifies the maximum spacing, in distance units, allowed between two adjacent slot sections.</a></blockquote>
<h3><a name="lefwMaxCoaxialSlotSpacing"></a><a name="1074304">lefwMaxCoaxialSlotSpacing</a></h3>
<p><a name="1074315">Writes a </a><font size="2" face="'Courier New'" color="#000000">MAXCOAXIALSLOTSPACING</font> statement. The <font size="2" face="'Courier New'" color="#000000">MAXCOAXIALSLOTSPACING</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074320">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074321">int lefwMaxCoaxialSlotSpacing(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>maxSpacing</em></font>)</font>
</dl>
<h4><a name="1074322">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074323"><font size="2" face="'Courier New'" color="#000000"><em>maxSpacing</em></font></a></strong>
</p>
<blockquote><a name="1087610">Specifies the maximum spacing, in distance units, allowed between two slots in the same slot section.</a></blockquote>
<h3><a name="lefwMaxEdgeSlotSpacing"></a><a name="1074314">lefwMaxEdgeSlotSpacing</a></h3>
<p><a name="1074325">Writes a </a><font size="2" face="'Courier New'" color="#000000">MAXEDGESLOTSPACING</font> statement. The <font size="2" face="'Courier New'" color="#000000">MAXEDGESLOTSPACING</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074330">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074331">int lefwMaxEdgeSlotSpacing(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>maxSpacing</em></font>)</font>
</dl>
<h4><a name="1074332">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074333"><font size="2" face="'Courier New'" color="#000000"><em>maxSpacing</em></font></a></strong>
</p>
<blockquote><a name="1087618">Specifies the maximum spacing, in distance units, allowed between slot edges.</a></blockquote>
<h3><a name="lefwMaximumDensity"></a><a name="1074324">lefwMaximumDensity</a></h3>
<p><a name="1074365">Writes a </a><font size="2" face="'Courier New'" color="#000000">MAXIMUMDENSITY</font> statement. The <font size="2" face="'Courier New'" color="#000000">MAXIMUMDENSITY</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074370">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074371">int lefwMaximumDensity(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>maxDensity</em></font>)</font>
</dl>
<h4><a name="1074372">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074373"><font size="2" face="'Courier New'" color="#000000"><em>maxDensity</em></font></a></strong>
</p>
<blockquote><a name="1087626">Specifies the maximum metal density allowed for the layer, as a percentage of its area.</a></blockquote>
<h3><a name="lefwMinimumDensity"></a><a name="1074364">lefwMinimumDensity</a></h3>
<p><a name="1074355">Writes a </a><font size="2" face="'Courier New'" color="#000000">MINIMUMDENSITY</font> statement. The <font size="2" face="'Courier New'" color="#000000">MINIMUMDENSITY</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074360">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074361">int lefwMinimumDensity(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>minDensity</em></font>)</font>
</dl>
<h4><a name="1074362">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074363"><font size="2" face="'Courier New'" color="#000000"><em>minDensity</em></font></a></strong>
</p>
<blockquote><a name="1087633">Specifies the minimum metal density allowed for the layer, as a percentage of its area.</a></blockquote>
<h3><a name="1076700">lefwSlotLength</a></h3>
<p><a name="1078049">Writes a </a><font size="2" face="'Courier New'" color="#000000">SLOTLENGTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">SLOTLENGTH</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1078051">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1078067">int lefwSlotLength(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>minSlotLength</em></font>)</font>
</dl>
<h4><a name="1078053">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1078058"><font size="2" face="'Courier New'" color="#000000"><em>minSlotLength</em></font></a> </strong>
</p>
<blockquote><a name="1087658">Specifies the minimum slot length, in distance units, allowed in the design. </a></blockquote>
<h3><a name="lefwSlotWidth"></a><a name="1078048">lefwSlotWidth</a></h3>
<p><a name="1076701">Wries a </a><font size="2" face="'Courier New'" color="#000000">SLOTWIDTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">SLOTWIDTH</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1076702">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1076703">int lefwSlotWidth(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>minSlotWidth</em></font>)</font>
</dl>
<h4><a name="1076704">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1076705"><font size="2" face="'Courier New'" color="#000000"><em>minSlotWidth</em></font></a></strong>
</p>
<blockquote><a name="1087669">Specifies the minimum slot width, in distance units, allowed in the design. </a></blockquote>
<h3><a name="lefwSlotWireLength"></a><a name="1076697">lefwSlotWireLength</a></h3>
<p><a name="1074283">Writes a </a><font size="2" face="'Courier New'" color="#000000">SLOTWIRELENGTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">SLOTWIRELENGTH</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074288">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074289">int lefwSlotWireLength(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>minWireLength</em></font>)</font>
</dl>
<h4><a name="1074290">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074291"><font size="2" face="'Courier New'" color="#000000"><em>minWireLength</em></font></a></strong>
</p>
<blockquote><a name="1087680">Specifies the minimum wire length, in distance units, allowed for wires that need to be slotted.</a></blockquote>
<h3><a name="lefwSlotWireWidth"></a><a name="1074294">lefwSlotWireWidth</a></h3>
<p><a name="1074253">Writes a </a><font size="2" face="'Courier New'" color="#000000">SLOTWIREWIDTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">SLOTWIREWIDTH</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074270">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074271">int lefwSlotWireWidth(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>minWireWidth</em></font>)</font>
</dl>
<h4><a name="1074272">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074273"><font size="2" face="'Courier New'" color="#000000"><em>minWireWidth</em></font></a> </strong>
</p>
<blockquote><a name="1087687">Specifies the minimum wire width, in distance units, allowed for wires that need to be slotted.</a></blockquote>
<h3><a name="lefwSplitWireWidth"></a><a name="1074334">lefwSplitWireWidth</a></h3>
<p><a name="1074340">Writes a </a><font size="2" face="'Courier New'" color="#000000">SPLITWIREWIDTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">SPLITWIREWIDTH</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1074339">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1074345">int lefwSplitWireWidth(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>minWireWidth</em></font>)</font>
</dl>
<h4><a name="1074346">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074347"><font size="2" face="'Courier New'" color="#000000"><em>minWireWidth</em></font></a> </strong>
</p>
<blockquote><a name="1087694">Specifies the minimum wire width, in distance units, allowed for wires that need to be split.</a></blockquote>
<h3><a name="1065724">Routing Layer Examples</a></h3>
<p><a name="1065725">The following example only shows the usage of some functions related to a routing layer. This example is part of the layer callback routine.</a></p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1065726">int layerCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd> double *current;<dd><dd> ...<dd> res = lefwStartLayerRouting(&#34;M3&#34;);<dd> CHECK_RES(res);<dd> res = lefwLayerRouting(&#34;HORIZONTAL&#34;, 0.9);<dd> CHECK_RES(res);<dd> res = lefwLayerRoutingPitch(1.8);<dd> CHECK_RES(res);<dd> res = lefwLayerRoutingWireExtension(8);<dd> CHECK_RES(res);<dd> res = lefwLayerRoutingSpacing(0.9, 0, 0);<dd> CHECK_RES(res);<dd> res = lefwLayerRoutingResistance(&#34;0.0608&#34;);<dd> CHECK_RES(res);<dd> res = lefwLayerRoutingCapacitance(&#34;0.000184&#34;);<dd> CHECK_RES(res);<dd> res = lefwLayerACCurrentDensity(&#34;AVERAGE&#34;,0);<dd> CHECK_RES(res);<dd> current[0] = 1E6;<dd> current[1] = 100E6;<dd> current[2] = 400E6;<dd> res = lefwLayerACFrequency(3, current);<dd> CHECK_RES(res);<dd> current[0] = 0.6E&#45;6;<dd> current[1] = 0.5E&#45;6;<dd> current[2] = 0.4E&#45;6;<dd> res = lefwLayerACTableEntries(3, current);<dd> CHECK_RES(res);<dd> res = lefwEndLayerRouting(&#34;M3&#34;);<dd> CHECK_RES(res);<dd> ...<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="1070777">Macro</a></h2>
<p><a name="1069175">Macro routines write a LEF </a><font size="2" face="'Courier New'" color="#000000">MACRO</font> section. A <font size="2" face="'Courier New'" color="#000000">MACRO</font> section is optional and can be used more than once in a LEF file. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">MACRO</font> section, see <a href="../lefdefref/LEFSyntax.html#Macro" target="external_window"><font color="#0000ff"><u>&#34;Macro&#34;</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1062602">You must begin and end a LEF </a><font size="2" face="'Courier New'" color="#000000">MACRO</font> section with the <font size="2" face="'Courier New'" color="#000000">lefwStartMacro</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndMacro</font> routines. The <font size="2" face="'Courier New'" color="#000000"><em>macroName</em></font> value in the start and end routines identifies the macro being defined. All LEF writer routines that define this macro must be included between the <font size="2" face="'Courier New'" color="#000000">lefwStartMacro</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndMacro</font> routines specifying that macro name.</p>
<p><a name="1070782">For examples of the routines described here, see </a><a href="#1081170" title="6"><font color="Blue"><u>"Macro Examples"</u></font></a><a href="#1081170" title="6"></a>.</p>
<p><a name="1062609">In addition to the routines described in this section, you can include an </a><font size="2" face="'Courier New'" color="#000000">OBS</font>, or <font size="2" face="'Courier New'" color="#000000">PIN</font> statement within a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section. For more information about these routines, see <a href="#1065960" title="6"><font color="Blue"><u>"Macro Obstruction"</u></font></a><a href="#1065960" title="6"> </a>, or <a href="#1066045" title="6"><font color="Blue"><u>"Macro Pin"</u></font></a><a href="#1066045" title="6"></a>.</p>
<p><a name="1079282">You can also include a </a><font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement within a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section. For more information about these routines, see <a href="#1066631" title="6"><font color="Blue"><u>"Property"</u></font></a><a href="#1066631" title="6"></a>.</p>
<p><a name="1062603">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1033622">lefwStartMacro</a></h3>
<p><a name="1059761">Starts the </a><font size="2" face="'Courier New'" color="#000000">MACRO</font> section. This routine is required to begin each <font size="2" face="'Courier New'" color="#000000">MACRO</font> section.</p>
<h4><a name="1051658">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051659">int lefwStartMacro(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>macroName</em></font>)</font>
</dl>
<h4><a name="1051670">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059681"><font size="2" face="'Courier New'" color="#000000"><em>macroName</em></font></a></strong>
</p>
<blockquote><a name="1087701">Specifies the name of the macro being defined.</a></blockquote>
<h3><a name="1033637">lefwEndMacro</a></h3>
<p><a name="1059775">Ends the </a><font size="2" face="'Courier New'" color="#000000">MACRO</font> section for the specified <font size="2" face="'Courier New'" color="#000000"><em>macroName</em></font>.</p>
<h4><a name="1051686">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051687">int lefwEndMacro(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>macroName</em></font>)</font>
</dl>
<h3><a name="1033651">lefwMacroClass</a></h3>
<p><a name="1059785">Writes a </a><font size="2" face="'Courier New'" color="#000000">CLASS</font> statement. The <font size="2" face="'Courier New'" color="#000000">CLASS</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section.</p>
<h4><a name="1051709">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051710">int lefwMacroClass(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>value1</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>value2</em></font>)</font>
</dl>
<h4><a name="1051721">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059695"><font size="2" face="'Courier New'" color="#000000"><em>value1</em></font></a></strong>
</p>
<blockquote><a name="1087708">Specifies the macro type. <br></a><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">COVER</font>, <font size="2" face="'Courier New'" color="#000000">RING</font>, <font size="2" face="'Courier New'" color="#000000">BLOCK</font>, <font size="2" face="'Courier New'" color="#000000">PAD</font>, <font size="2" face="'Courier New'" color="#000000">CORE</font>, or <font size="2" face="'Courier New'" color="#000000">ENDCAP</font></blockquote>
<p>
<strong></strong>
<strong><a name="1062649"><font size="2" face="'Courier New'" color="#000000"><em>value2</em></font></a></strong>
</p>
<blockquote><a name="1087715">Specifies a subtype for a macro type. If </a><font size="2" face="'Courier New'" color="#000000"><em>value1</em></font> is <font size="2" face="'Courier New'" color="#000000">ENDCAP</font>, you must specify this argument. Otherwise, specify <font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument. </blockquote>
<table summary="" border="0" cellpadding="4" cellspacing="0" bordercolor="#D3D3D3" width="648">
<caption>
<tr>
<td cellpadding="4" border="0" bordercolor="#D3D3D3" valign="middle" width="142">
<p>
<font face="Verdana, Arial, Helvetica, sans-serif" color="#003366"><strong><a name="1062666">If </a><font color="#000000"><em>Value1</em></font> equals:</strong></font>
</p>
</td>
<td cellpadding="4" border="0" bordercolor="#D3D3D3" valign="middle" width="506">
<p>
<font face="Verdana, Arial, Helvetica, sans-serif" color="#003366"><strong><a name="1062668">Then </a><font color="#000000"><em>Value2 is</em></font>:</strong></font>
</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1062657"><font size="2" face="'Courier New'" color="#000000">COVER</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1062670">Optional and can be </a><font size="2" face="'Courier New'" color="#000000">BUMP</font>.</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1079420"><font size="2" face="'Courier New'" color="#000000">BLOCK</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1079422">Optional and can be </a><font size="2" face="'Courier New'" color="#000000">BLACKBOX</font> or <font size="2" face="'Courier New'" color="#000000">SOFT</font>.</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1079397"><font size="2" face="'Courier New'" color="#000000">PAD</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1079414">Optional and can be </a><font size="2" face="'Courier New'" color="#000000">INPUT</font>, <font size="2" face="'Courier New'" color="#000000">OUTPUT</font>, <font size="2" face="'Courier New'" color="#000000">INOUT</font>, <font size="2" face="'Courier New'" color="#000000">POWER</font>, <font size="2" face="'Courier New'" color="#000000">SPACER</font>, or <font size="2" face="'Courier New'" color="#000000">AREAIO</font>.</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1062659"><font size="2" face="'Courier New'" color="#000000">CORE</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1062672">Optional and can be </a><font size="2" face="'Courier New'" color="#000000">FEEDTHRU</font>, <font size="2" face="'Courier New'" color="#000000">TIEHIGH</font>, <font size="2" face="'Courier New'" color="#000000">TIELOW</font>, <font size="2" face="'Courier New'" color="#000000">SPACER</font>, <font size="2" face="'Courier New'" color="#000000">ANTENNACELL</font>, or <font size="2" face="'Courier New'" color="#000000">WELLTAP</font>.</p>
</td>
</tr>
<tr>
<td cellpadding="4" border="1" bordercolor="#000000" valign="top">
<p><a name="1062661"><font size="2" face="'Courier New'" color="#000000">ENDCAP</font></a></p>
</td>
<td cellpadding="4" border="1" bordercolor="#000000" valign="top">
<p><a name="1062707">Required and can be </a><font size="2" face="'Courier New'" color="#000000">PRE</font>, <font size="2" face="'Courier New'" color="#000000">POST</font>, <font size="2" face="'Courier New'" color="#000000">TOPLEFT</font>, <font size="2" face="'Courier New'" color="#000000">TOPRIGHT</font>, <font size="2" face="'Courier New'" color="#000000">BOTTOMLEFT</font>, or <font size="2" face="'Courier New'" color="#000000">BOTTOMRIGHT</font>.</p>
</td>
</tr>
</table>
<h3><a name="1033678">lefwMacroEEQ</a></h3>
<p><a name="1059820">Writes an </a><font size="2" face="'Courier New'" color="#000000">EEQ</font> statement. The <font size="2" face="'Courier New'" color="#000000">EEQ</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section.</p>
<h4><a name="1051765">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051766">int lefwMacroEEQ(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>macroName</em></font>)</font>
</dl>
<h4><a name="1051773">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059705"><font size="2" face="'Courier New'" color="#000000"><em>macroName</em></font></a></strong>
</p>
<blockquote><a name="1087722">Specifies that the macro being defined should be electrically equivalent to the previously defined </a><font size="2" face="'Courier New'" color="#000000"><em>macroName</em></font>.</blockquote>
<h3><a name="1033685">lefwMacroForeign</a></h3>
<p><a name="1059832">Writes a </a><font size="2" face="'Courier New'" color="#000000">FOREIGN</font> statement. The <font size="2" face="'Courier New'" color="#000000">FOREIGN</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section.</p>
<h4><a name="1051789">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051790">int lefwMacroForeign(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>cellName</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>xl</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>yl</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>orient</em></font>)</font>
</dl>
<h4><a name="1051797">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059836"><font size="2" face="'Courier New'" color="#000000"><em>cellName</em></font></a></strong>
</p>
<blockquote><a name="1087729">Specifies which foreign (GDSII) system name to use when placing an instance of this macro.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1062752"><font size="2" face="'Courier New'" color="#000000"><em>xl</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yl</em></font></strong>
</p>
<blockquote><a name="1087736">Optional arguments that specify the macro origin (lower left corner when the macro is in north orientation) offset from the foreign origin. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<p>
<strong></strong>
<strong><a name="1062753"><font size="2" face="'Courier New'" color="#000000"><em>orient</em></font></a></strong>
</p>
<blockquote><a name="1087743">Optional argument that specifies the orientation of the foreign cell when the macro is in north orientation. Specify </a><font size="2" face="'Courier New'" color="#000000">&#45;1</font> to ignore this argument.<br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">0</font> to <font size="2" face="'Courier New'" color="#000000">7</font>. For more information, see <a href="ch1Intro.html#1019049" title="1"><font color="Blue"><u>"Orientation Codes"</u></font></a><a href="ch1Intro.html#1019049" title="1"></a>.</blockquote>
<h3><a name="lefwMacroForeignStr"></a><a name="1076069">lefwMacroForeignStr</a></h3>
<p><a name="1076070">Also writes a </a><font size="2" face="'Courier New'" color="#000000">FOREIGN</font> statement. This routine is the same as the <font size="2" face="'Courier New'" color="#000000">lefwMacroForeign</font> routine with the exception of the <font size="2" face="'Courier New'" color="#000000"><em>orient</em></font> argument, which takes a string instead of an integer. The <font size="2" face="'Courier New'" color="#000000">FOREIGN</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section.</p>
<h4><a name="1073243">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1073244">int lefwMacroForeignStr(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>cellName</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>xl</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>yl</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>orient</em></font>)</font>
</dl>
<h4><a name="1073245">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1075691"><font size="2" face="'Courier New'" color="#000000"><em>cellName</em></font></a></strong>
</p>
<blockquote><a name="1087750">Specifies which foreign (GDSII) system name to use when placing an instance of this macro.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1087762"><font size="2" face="'Courier New'" color="#000000"><em>xl</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yl</em></font></strong>
</p>
<blockquote><a name="1087763">Optional arguments that specify the macro origin (lower left corner when the macro is in north orientation) offset from the foreign origin. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<p>
<strong></strong>
<strong><a name="1075693"><font size="2" face="'Courier New'" color="#000000"><em>orient</em></font></a></strong>
</p>
<blockquote><a name="1087768">Optional argument that specifies the orientation of the foreign cell when the macro is in north orientation. Specify </a><font size="2" face="'Courier New'" color="#000000">&#34;&#34;</font> to ignore this argument.<br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">N</font>, <font size="2" face="'Courier New'" color="#000000">W</font>, <font size="2" face="'Courier New'" color="#000000">S</font>, <font size="2" face="'Courier New'" color="#000000">E</font>, <font size="2" face="'Courier New'" color="#000000">FN</font>, <font size="2" face="'Courier New'" color="#000000">FW</font>, <font size="2" face="'Courier New'" color="#000000">FS</font>, or <font size="2" face="'Courier New'" color="#000000">FE</font></blockquote>
<h3><a name="1033731">lefwMacroOrigin</a></h3>
<p><a name="1062804">Writes an </a><font size="2" face="'Courier New'" color="#000000">ORIGIN</font> statement. The <font size="2" face="'Courier New'" color="#000000">ORIGIN</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section.</p>
<h4><a name="1051890">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051891">int lefwMacroOrigin(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>xl</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>yl</em></font>)</font>
</dl>
<h4><a name="1051902">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1075719"><font size="2" face="'Courier New'" color="#000000"><em>xl</em></font></a>, <font size="2" face="'Courier New'" color="#000000"><em>yl</em></font></strong>
</p>
<blockquote><a name="1087775">Specifies the origin of the macro. </a><font size="2" face="'Courier New'" color="#000000"><em>xl</em></font>, <font size="2" face="'Courier New'" color="#000000"><em>yl</em></font> is the lower left corner point of the macro. The coordinates for macro sites, ports, and obstructions are specified with respect to the macro origin. The origin itself is specified with respect to the lower left corner of the bounding box of the sites of the macro.</blockquote>
<h3><a name="1033753">lefwMacroSite</a></h3>
<p><a name="1059900">Writes a </a><font size="2" face="'Courier New'" color="#000000">SITE</font> statement. The <font size="2" face="'Courier New'" color="#000000">SITE</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section.</p>
<h4><a name="1051947">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1051948">int lefwMacroSite(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>siteName</em></font>)</font>
</dl>
<h4><a name="1051963">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1087787"><font size="2" face="'Courier New'" color="#000000"><em>siteName</em></font></a></strong>
</p>
<blockquote><a name="1087788">Specifies the site associated with the macro.</a></blockquote>
<h3><a name="lefwMacroSitePattern"></a><a name="1087790">lefwMacroSitePattern </a></h3>
<p><a name="1081067">Writes a </a><font size="2" face="'Courier New'" color="#000000">SITE</font> statement that includes a site pattern. The site pattern indicates that the cell is a gate&#45;array cell rather that a row&#45;based standard cell. The <font size="2" face="'Courier New'" color="#000000">SITE</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section.</p>
<h4><a name="1081079">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1081080">lefwMacroSitePattern( <dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>name</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>origX</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>orgY</em></font>, <dd>int <font size="2" face="'Courier New'" color="#000000"><em>orient</em></font>, <dd>int <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font>, <dd>int <font size="2" face="'Courier New'" color="#000000"><em>numY</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font>)</font>
</dl>
<h4><a name="1081081">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1081082"><font size="2" face="'Courier New'" color="#000000"><em>name</em></font></a></strong>
</p>
<blockquote><a name="1087795">Specifies the site associated with the macor.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1081084"><font size="2" face="'Courier New'" color="#000000"><em>origX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>origY</em></font> </strong>
</p>
<blockquote><a name="1087802">Optional arguments that specify the origin of the site inside the macro. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<p>
<strong></strong>
<strong><a name="1081085"><font size="2" face="'Courier New'" color="#000000"><em>orient</em></font></a></strong>
</p>
<blockquote><a name="1087809">Optional argument that specifies the orientation of the site at that location. Specify </a><font size="2" face="'Courier New'" color="#000000">&#45;1</font> to ignore this argument.<br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">0</font> to <font size="2" face="'Courier New'" color="#000000">7</font>. For more information, see <a href="ch1Intro.html#1019049" title="1"><font color="Blue"><u>"Orientation Codes"</u></font></a><a href="ch1Intro.html#1019049" title="1"></a>.</blockquote>
<p>
<strong></strong>
<strong><a name="1081086"><font size="2" face="'Courier New'" color="#000000"><em>numX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>numY</em></font></strong>
</p>
<blockquote><a name="1087816">Optional arguments that specify the number of sites to add in the x and y directions. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<p>
<strong></strong>
<strong><a name="1081087"><font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font></strong>
</p>
<blockquote><a name="1087823">Optional arguments that specify the spacing between sites in the x and y directions. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<h3><a name="lefwMacroSitePatternStr"></a><a name="1081102">lefwMacroSitePatternStr </a></h3>
<p><a name="1081103">Also writes a </a><font size="2" face="'Courier New'" color="#000000">SITE</font> statement that includes a site pattern. This routine is the same as the <font size="2" face="'Courier New'" color="#000000">lefwMacroSitePattern</font> routine with the exception of the <font size="2" face="'Courier New'" color="#000000"><em>orient</em></font> argument, which takes a string instead of an integer. The <font size="2" face="'Courier New'" color="#000000">SITE</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section.</p>
<h4><a name="1081104">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1081105">lefwMacroSitePatternStr( <dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>name</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>origX</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>orgY</em></font>, <dd>int <font size="2" face="'Courier New'" color="#000000"><em>orient</em></font>, <dd>int <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font>, <dd>int <font size="2" face="'Courier New'" color="#000000"><em>numY</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font>)</font>
</dl>
<h4><a name="1081106">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1081107"><font size="2" face="'Courier New'" color="#000000"><em>name</em></font></a> </strong>
</p>
<blockquote><a name="1087830">Specifies the site associated with the macor.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1081108"><font size="2" face="'Courier New'" color="#000000"><em>origX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>origY</em></font></strong>
</p>
<blockquote><a name="1087837">Optional arguments that specify the origin of the site inside the macro. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<p>
<strong></strong>
<strong><a name="1081109"><font size="2" face="'Courier New'" color="#000000"><em>orient</em></font></a></strong>
</p>
<blockquote><a name="1087844">Optional argument that specifies the orientation of the site at that location. Specify </a><font size="2" face="'Courier New'" color="#000000">&#34;&#34;</font> to ignore this argument.<br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">N</font>, <font size="2" face="'Courier New'" color="#000000">W</font>, <font size="2" face="'Courier New'" color="#000000">S</font>, <font size="2" face="'Courier New'" color="#000000">E</font>, <font size="2" face="'Courier New'" color="#000000">FN</font>, <font size="2" face="'Courier New'" color="#000000">FW</font>, <font size="2" face="'Courier New'" color="#000000">FS</font>, or <font size="2" face="'Courier New'" color="#000000">FE</font></blockquote>
<p>
<strong></strong>
<strong><a name="1081113"><font size="2" face="'Courier New'" color="#000000"><em>numX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>numY</em></font></strong>
</p>
<blockquote><a name="1087851">Optional arguments that specify the number of sites to add in the x and y directions. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<p>
<strong></strong>
<strong><a name="1081114"><font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font></strong>
</p>
<blockquote><a name="1087858">Optional arguments that specify the spacing between sites in the x and y directions. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<h3><a name="1081099">lefwMacroSize</a></h3>
<p><a name="1059930">Writes a </a><font size="2" face="'Courier New'" color="#000000">SIZE</font> statement. The <font size="2" face="'Courier New'" color="#000000">SIZE</font> statement is required and can be used only once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section.</p>
<h4><a name="1052009">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1052010">int lefwMacroSize(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>width</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>height</em></font>)</font>
</dl>
<h4><a name="1052021">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059936"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a><font color="#000000"><em>, </em></font><font size="2" face="'Courier New'" color="#000000"><em>height</em></font></strong>
</p>
<blockquote><a name="1087865">Specify the minimum bounding rectangle, in microns, for the macro. The bounding rectangle should be a multiple of the placement grid.</a></blockquote>
<h3><a name="1033783">lefwMacroSymmetry</a></h3>
<p><a name="1059960">Writes a </a><font size="2" face="'Courier New'" color="#000000">SYMMETRY</font> statement. The <font size="2" face="'Courier New'" color="#000000">SYMMETRY</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section.</p>
<h4><a name="1052066">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1052067">int lefwMacroSymmetry(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>symmetry</em></font>)</font>
</dl>
<h4><a name="1052078">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059755"><font size="2" face="'Courier New'" color="#000000"><em>symmetry</em></font></a></strong>
</p>
<blockquote><a name="1087872">Specifies the allowable orientations for the macro.<br></a><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">X</font>, <font size="2" face="'Courier New'" color="#000000">Y</font>, or <font size="2" face="'Courier New'" color="#000000">R90</font></blockquote>
<h3><a name="lefwStartMacroDensity"></a><a name="1081141">lefwStartMacroDensity </a></h3>
<p><a name="1081142">Starts a </a><font size="2" face="'Courier New'" color="#000000">DENSITY</font> statement in the <font size="2" face="'Courier New'" color="#000000">MACRO</font> statement.The <font size="2" face="'Courier New'" color="#000000">DENSITY</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> statement. </p>
<p><a name="1081157">Each </a><font size="2" face="'Courier New'" color="#000000">DENSITY</font> statement must start with this routine and end with the <font size="2" face="'Courier New'" color="#000000">lefwEndMacroDensity</font> routine. Each <font size="2" face="'Courier New'" color="#000000">DENSITY</font> statement also must include at least one <font size="2" face="'Courier New'" color="#000000">lefwMacroDensityLayerRect</font> routine. </p>
<h4><a name="1081160">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1081161">lefwStartMacroDensity( <dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>)</font>
</dl>
<h4><a name="1081162">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1081167"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1087879">Specifies the layer on which to create the density rectangles.</a></blockquote>
<h3><a name="lefwMacroDensityLayerRect"></a><a name="1081168">lefwMacroDensityLayerRect </a></h3>
<p><a name="1081174">Writes a </a><font size="2" face="'Courier New'" color="#000000">RECT</font> statement in the <font size="2" face="'Courier New'" color="#000000">DENSITY</font> statement. The <font size="2" face="'Courier New'" color="#000000">RECT</font> statement is required and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">DENSITY</font> statement.</p>
<h4><a name="1081177">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1081178">lefwMacroDensityLayerRect( <dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>x1</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>y1</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>x2</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>y2</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>densityValue</em></font>)</font>
</dl>
<h4><a name="1081179">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1081180"><font size="2" face="'Courier New'" color="#000000"><em>x1</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>y1</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>x2</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>y2</em></font> </strong>
</p>
<blockquote><a name="1087886">Specifies the coordinates of a rectangle.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1081189"><font size="2" face="'Courier New'" color="#000000"><em>densityValue</em></font></a></strong>
</p>
<blockquote><a name="1087893">Specifies the percentage density of the rectangle.<br></a><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">0</font> to <font size="2" face="'Courier New'" color="#000000">100</font> </blockquote>
<h3><a name="lefwEndMacroDensity"></a><a name="1081193">lefwEndMacroDensity </a></h3>
<p><a name="1081198">Ends the </a><font size="2" face="'Courier New'" color="#000000">DENSITY</font> statement. </p>
<h4><a name="1081202">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1081203">lefwEndMacroDensity()</a></font>
</dl>
<h3><a name="1081170">Macro Examples</a></h3>
<p><a name="1065967">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwMacroCbkType</font>. This example shows function calls to create a macro. It does not include function calls to create a macro obstruction. For an example of how to create a macro obstruction, see the Macro Obstruction section. This example only shows the usage of some functions related to Macro.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1065968">int macroCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd> double *xpath;<dd> double *ypath;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwMacroCbkType) {<dd> printf(&#34;Type is not lefwMacroCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd><dd> res = lefwStartMacro(&#34;INV&#34;);<dd> CHECK_RES(res);<dd> res = lefwMacroClass(&#34;CORE&#34;, NULL);<dd> CHECK_RES(res);<dd> res = lefwMacroForeign(&#34;INVS&#34;, 0, 0, &#45;1);<dd> CHECK_RES(res);<dd> res = lefwMacroPower(1.0);<dd> CHECK_RES(res);<dd> res = lefwMacroSize(67.2, 24);<dd> CHECK_RES(res);<dd> res = lefwMacroSymmetry(&#34;X Y R90&#34;);<dd> CHECK_RES(res);<dd> res = lefwMacroSite(&#34;CORE1&#34;);<dd> CHECK_RES(res);<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="1065960">Macro Obstruction</a></h2>
<p><a name="1048322">Macro obstruction routines write an </a><font size="2" face="'Courier New'" color="#000000">OBS</font> (macro obstruction) section, which further defines a macro. An <font size="2" face="'Courier New'" color="#000000">OBS</font> section is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">OBS</font> section, see <a href="../lefdefref/LEFSyntax.html#MacroObstructionStatement" target="external_window"><font color="#0000ff"><u>&#34;Macro Obstruction Statement&#34;</u></font></a> in the <br><font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1042302">You must use the </a><font size="2" face="'Courier New'" color="#000000">lefwStartMacroObs</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndMacroObs</font> routines to start and end the <font size="2" face="'Courier New'" color="#000000">OBS</font> section. The remaining macro obstruction routines described in this section must be included between these routines. </p>
<p><a name="1070787">For examples of the routines described here, see </a><a href="#1066047" title="6"><font color="Blue"><u>"Macro Obstruction Examples"</u></font></a><a href="#1066047" title="6"></a>.</p>
<p><a name="1037558">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1033818">lefwStartMacroObs</a></h3>
<p><a name="1060004">Starts the </a><font size="2" face="'Courier New'" color="#000000">OBS</font> section in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section. This routine is required for each <font size="2" face="'Courier New'" color="#000000">OBS</font> section, and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section.</p>
<h4><a name="1052095">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1052096">int lefwStartMacroObs()</a></font>
</dl>
<h3><a name="1033833">lefwEndMacroObs</a></h3>
<p><a name="1060012">Ends the </a><font size="2" face="'Courier New'" color="#000000">OBS</font> section.</p>
<h4><a name="1052123">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1052124">int lefwEndMacroObs()</a></font>
</dl>
<h3><a name="lefwMacroObsDesignRuleWidth"></a><a name="1072600">lefwMacroObsDesignRuleWidth</a></h3>
<p><a name="1072601">Writes a </a><font size="2" face="'Courier New'" color="#000000">DESIGNRULEWIDTH</font> statement. Either a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement, a <font size="2" face="'Courier New'" color="#000000">DESIGNRULEWIDTH</font> statement, or a <font size="2" face="'Courier New'" color="#000000">VIA</font> statement must be defined within an <font size="2" face="'Courier New'" color="#000000">OBS</font> section and can be used more than once. </p>
<h4><a name="1072607">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072608">int lefwMacroObsDesignRuleWidth(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>width</em></font>)</font>
</dl>
<h4><a name="1072609">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1078995"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1087900">Specifies the layer on which the geometry lies.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1079002"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1087907">Optional argument that specifies the effective design rule width. If specified, the obstruction is treated as a shape of this width for all spacing checks. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<h3><a name="1078998">lefwMacroObsLayer</a></h3>
<p><a name="1060020">Writes a </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> statement. Either a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement, a <font size="2" face="'Courier New'" color="#000000">DESIGNRULEWIDTH</font> statement, or a <font size="2" face="'Courier New'" color="#000000">VIA</font> statement must be defined within an <font size="2" face="'Courier New'" color="#000000">OBS</font> section and can be used more than once. </p>
<h4><a name="1052146">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1052147">int lefwMacroObsLayer(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font>)</font>
</dl>
<h4><a name="1052158">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1059982"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1087914">Specifies the layer on which to place the obstruction. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1060026"><font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font></a></strong>
</p>
<blockquote><a name="1087921">Optional argument that specifies the minimum spacing allowed between this obstruction and any other shape. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<h3><a name="1063050">lefwMacroObsLayerPath</a></h3>
<p><a name="1063051">Writes a </a><font size="2" face="'Courier New'" color="#000000">PATH</font> statement. Either a <font size="2" face="'Courier New'" color="#000000">PATH</font>, <font size="2" face="'Courier New'" color="#000000">POLYGON</font>, or <font size="2" face="'Courier New'" color="#000000">RECT</font> statement must follow a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement and can be used more than once. </p>
<h4><a name="1052181">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1052182">int lefwMacroObsLayerPath(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>num_paths</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>xl</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>yl</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numY</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font>)</font>
</dl>
<h4><a name="1052193">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1076416"><font size="2" face="'Courier New'" color="#000000"><em>numPaths</em></font></a></strong>
</p>
<blockquote><a name="1087928">Specifies the number of paths to create.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1076417"><font color="#000000"><em> </em></font></a><font size="2" face="'Courier New'" color="#000000"><em>x1</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>y1</em></font></strong>
</p>
<blockquote><a name="1087935">Creates a path between the specified points. The path automatically extends the length by half of the current width on both end points to form a rectangle. (A previous </a><font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement is required.) The line between each pair of points must be parallel to the x or y axis (45&#45;degree angles are not allowed). </blockquote>
<p>
<strong></strong>
<strong><a name="1076418"><font size="2" face="'Courier New'" color="#000000"><em>numX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>numY</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font></strong>
</p>
<blockquote><a name="1087942">Optional arguments that specify the </a><font size="2" face="'Courier New'" color="#000000">PATH ITERATE</font> statement. <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font> and <font size="2" face="'Courier New'" color="#000000"><em>numy</em></font> specify the number of columns and rows of points that make up the array. <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font> and spaceY specify the spacing, in distance units, between the columns and rows. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<h3><a name="1033862">lefwMacroObsLayerPolygon</a></h3>
<p><a name="1060060">Writes a </a><font size="2" face="'Courier New'" color="#000000">POLYGON</font> statement. Either a <font size="2" face="'Courier New'" color="#000000">PATH</font>, <font size="2" face="'Courier New'" color="#000000">POLYGON</font>, or <font size="2" face="'Courier New'" color="#000000">RECT</font> statement must follow a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement and can be used more than once. </p>
<h4><a name="1052217">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1063116">int lefwMacroObsLayerPolygon(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>num_polys</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>xl</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>yl</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numY</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font>,)<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font>)</font>
</dl>
<h4><a name="1063117">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1076429"><font size="2" face="'Courier New'" color="#000000"><em>num_polys</em></font></a> </strong>
</p>
<blockquote><a name="1087949">Specifies the number of polygon sides.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1076430"><font size="2" face="'Courier New'" color="#000000"><em>x1</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>y1</em></font></strong>
</p>
<blockquote><a name="1087974">Specifies a sequence of points to generate a polygon geometry. Every polygon edge must be parallel to the x or y axis, or at a 45&#45;degree angle. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1087975"><font size="2" face="'Courier New'" color="#000000"><em>numX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>numY</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font></strong>
</p>
<blockquote><a name="1087976">Optional arguments that specify the </a><font size="2" face="'Courier New'" color="#000000">POLYGON</font> <font size="2" face="'Courier New'" color="#000000">ITERATE</font> statement. <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font> and <font size="2" face="'Courier New'" color="#000000"><em>numy</em></font> specify the number of columns and rows of points that make up the array. <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font> and spaceY specify the spacing, in distance units, between the columns and rows. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<h3><a name="1033870">lefwMacroObsLayerRect</a></h3>
<p><a name="1060097">Writes a </a><font size="2" face="'Courier New'" color="#000000">RECT</font> statement. Either a <font size="2" face="'Courier New'" color="#000000">PATH</font>, <font size="2" face="'Courier New'" color="#000000">POLYGON</font>, or <font size="2" face="'Courier New'" color="#000000">RECT</font> statement must follow a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement and can be used more than once. </p>
<h4><a name="1052284">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1052285">int lefwMacroObsLayerRect(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>xl1</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>yl1</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>xl2</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>yl2</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numY</em></font>,)&nbsp;&nbsp;&nbsp;&nbsp; <dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font>)</font>
</dl>
<h4><a name="1058290">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1081958"><font size="2" face="'Courier New'" color="#000000"><em>xl1</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yl1</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>xl2</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yl2</em></font></strong>
</p>
<blockquote><a name="1087981">Specifies a rectangle in the current layer, where the points specified are opposite corners of the rectangle. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1081959"><font size="2" face="'Courier New'" color="#000000"><em>numX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>numY</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font></strong>
</p>
<blockquote><a name="1087988">Optional arguments that specify the </a><font size="2" face="'Courier New'" color="#000000">RECT ITERATE</font> statement. <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font> and <font size="2" face="'Courier New'" color="#000000"><em>numy</em></font> specify the number of columns and rows of points that make up the array. <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font> and spaceY specify the spacing, in distance units, between the columns and rows. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<h3><a name="lefwMacroObsLayerWidth"></a><a name="1079021">lefwMacroObsLayerWidth</a></h3>
<p><a name="1079030">Writes a </a><font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement is optional and can be used only once in an <font size="2" face="'Courier New'" color="#000000">LAYER</font> section.</p>
<h4><a name="1079035">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1079036">int lefwMacroObsLayerWidth(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>width</em></font>)</font>
</dl>
<h4><a name="1079037">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1079038"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1087995">Specifies the width that the </a><font size="2" face="'Courier New'" color="#000000">PATH</font> statements use.</blockquote>
<h3><a name="1079032">lefwMacroObsVia</a></h3>
<p><a name="1060128">Writes a </a><font size="2" face="'Courier New'" color="#000000">VIA</font> statement. Either a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement, a <font size="2" face="'Courier New'" color="#000000">DESIGNRULEWIDTH</font> statement, or a <font size="2" face="'Courier New'" color="#000000">VIA</font> statement must be defined within an <font size="2" face="'Courier New'" color="#000000">OBS</font> section and can be used more than once.</p>
<h4><a name="1052324">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1052325">int lefwMacroObsVia(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>xl</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>yl</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numY</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font>,)<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font>)</font>
</dl>
<h4><a name="1052336">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1076445"><font size="2" face="'Courier New'" color="#000000"><em>x1</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>y1</em></font></strong>
</p>
<blockquote><a name="1088002">Specify the location to place the via.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1076446"><font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font></a></strong>
</p>
<blockquote><a name="1088009">Specifies the name of the via to place.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1076447"><font size="2" face="'Courier New'" color="#000000"><em>numX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>numY</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font></strong>
</p>
<blockquote><a name="1088016">Optional arguments that specify the </a><font size="2" face="'Courier New'" color="#000000">VIA</font> <font size="2" face="'Courier New'" color="#000000">ITERATE</font> statement. <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font> and <font size="2" face="'Courier New'" color="#000000"><em>numy</em></font> specify the number of columns and rows of points that make up the array. <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font> and spaceY specify the spacing, in distance units, between the columns and rows. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<h3><a name="1066047">Macro Obstruction Examples</a></h3>
<p><a name="1066048">The following example only shows the usage of some functions related to Macro Obstruction. This example is part of the Macro callback routine.</a></p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1066049">int macroCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd> double *xpath;<dd> double *ypath;<dd><dd> ...<dd> res = lefwStartMacroObs();<dd> CHECK_RES(res);<dd> res = lefwMacroObsLayer(&#34;M1&#34;, 0);<dd> CHECK_RES(res);<dd> res = lefwMacroObsLayerRect(24.1, 1.5, 43.5, 208.5, 0,<dd> &nbsp;&nbsp;&nbsp;&nbsp;0, 0, 0);<dd> CHECK_RES(res);<dd> xpath = (double*)malloc(sizeof(double)*2);<dd> ypath = (double*)malloc(sizeof(double)*2);<dd> xpath[0] = 8.4;<dd> ypath[0] = 3;<dd> xpath[1] = 8.4;<dd> ypath[1] = 124;<dd> res = lefwMacroObsLayerPath(2, xpath, ypath, 0, 0, 0, 0);<dd> CHECK_RES(res);<dd> free((char*)xpath);<dd> free((char*)ypath);<dd> res = lefwEndMacroObs();<dd> CHECK_RES(res);<dd> ...<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="1066045">Macro Pin</a></h2>
<p><a name="1042319">Macro Pin routines write a </a><font size="2" face="'Courier New'" color="#000000">PIN</font> section, which further defines a macro. A <font size="2" face="'Courier New'" color="#000000">PIN</font> section is optional in each <font size="2" face="'Courier New'" color="#000000">MACRO</font> section and can be defined more than once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">PIN</font> section, see <a href="../lefdefref/LEFSyntax.html#MacroPinStatement" target="external_window"><font color="#0000ff"><u>"Macro Pin Statement"</u></font></a> in the<font color="#000000"><em> LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1037586">You must use the </a><font size="2" face="'Courier New'" color="#000000">lefwStartMacroPin</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndMacroPin</font> routines to start and end the <font size="2" face="'Courier New'" color="#000000">PIN</font> section. The remaining macro pin routines must be included between these routines.</p>
<p><a name="1042334">For examples of the routines described here, see </a><a href="#1066280" title="6"><font color="Blue"><u>"Macro Pin Examples"</u></font></a><a href="#1066280" title="6"></a>.</p>
<p><a name="1070794">In addition to the routines described in this section, you can include a </a><font size="2" face="'Courier New'" color="#000000">PORT</font> section within a <font size="2" face="'Courier New'" color="#000000">PIN</font> section. For more information about these routines, see <a href="#1066278" title="6"><font color="Blue"><u>"Macro Pin Port"</u></font></a><a href="#1066278" title="6"></a>.</p>
<p><a name="1037588">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1033909">lefwStartMacroPin</a></h3>
<p><a name="1060306">Starts the </a><font size="2" face="'Courier New'" color="#000000">PIN</font> section in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section. This routine is required for each <font size="2" face="'Courier New'" color="#000000">PIN</font> section and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">MACRO</font> section.</p>
<h4><a name="1052356">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1052357">int lefwStartMacroPin(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>pinName</em></font>)</font>
</dl>
<h4><a name="1052368">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1060154"><font size="2" face="'Courier New'" color="#000000"><em>pinName</em></font></a></strong>
</p>
<blockquote><a name="1088023">Specifies the name of the library pin.</a></blockquote>
<h3><a name="1033924">lefwEndMacroPin</a></h3>
<p><a name="1060320">Ends the </a><font size="2" face="'Courier New'" color="#000000">PIN</font> section for the specified pin.</p>
<h4><a name="1052384">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1052385">int lefwEndMacroPin(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>pinName</em></font>)</font>
</dl>
<h4><a name="1052396">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1060324"><font size="2" face="'Courier New'" color="#000000"><em>pinName</em></font></a></strong>
</p>
<blockquote><a name="1088030">Specifies the name of the library pin.</a></blockquote>
<h3><a name="lefwMacroPinAntennaDiffArea"></a><a name="1072699">lefwMacroPinAntennaDiffArea</a></h3>
<p><a name="1072700">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNADIFFAREA</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNADIFFAREA</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1072701">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072702">int lefwMacroPinAntennaDiffArea(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value,<dd></em></font>const char* <font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>)</font>
</dl>
<h4><a name="1072703">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1072704"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1088037">Specifies the diffusion area, in micron&#45;squared units, to which the pin is connected on a layer.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1072706"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088044">Optional argument that specifies the layer. If you do not specify a layer name, </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font> applies to all layers. Specify <font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument.</blockquote>
<h3><a name="lefwMacroPinAntennaGateArea"></a><a name="1072691">lefwMacroPinAntennaGateArea</a></h3>
<p><a name="1072692">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAGATEAREA</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNAGATEAREA</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwMacroPinAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1072693">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072694">int lefwMacroPinAntennaGateArea(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value,<dd></em></font>const char* <font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>)</font>
</dl>
<h4><a name="1072695">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1072696"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1088051">Specifies the gate area, in micron&#45;squared units, to which the pin is connected on a layer.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1072698"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088058">Optional argument that specifies the layer. If you do not specify a layer name, </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font> applies to all layers. Specify <font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument.</blockquote>
<h3><a name="lefwMacroPinAntennaMaxAreaCar"></a><a name="1072717">lefwMacroPinAntennaMaxAreaCar</a></h3>
<p><a name="1072718">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAMAXAREACAR</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNAMAXAREACAR</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwMacroPinAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section. </p>
<h4><a name="1072719">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072720">int lefwMacroPinAntennaMaxAreaCar(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value,<dd></em></font>const char* <font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>)</font>
</dl>
<h4><a name="1072721">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1072722"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1088065">For hierarchical process antenna effect calculation, specifies the maximum cumulative antenna ratio value on the specified </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>, using the cut area below the current pin layer.</blockquote>
<p>
<strong></strong>
<strong><a name="1072724"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088072">Specifies the layer.</a></blockquote>
<h3><a name="lefwMacroPinAntennaMaxCutCar"></a><a name="1072743">lefwMacroPinAntennaMaxCutCar</a></h3>
<p><a name="1072744">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAMAXCUTCAR</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNAMAXCUTCAR</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwMacroPinAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1072745">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072746">int lefwMacroPinAntennaMaxCutCar(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value,<dd></em></font>const char* <font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>)</font>
</dl>
<h4><a name="1072747">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1072748"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1088079">For hierarchical process antenna effect calculation, specifies the maximum cumulative antenna ratio value on the specified </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>, using the cut area below the current pin layer. </blockquote>
<p>
<strong></strong>
<strong><a name="1072750"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088086">Specifies the layer.</a></blockquote>
<h3><a name="lefwMacroPinAntennaMaxSideAreaCar"></a><a name="1072727">lefwMacroPinAntennaMaxSideAreaCar</a></h3>
<p><a name="1072728">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAMAXSIDEAREACAR</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNAMAXSIDEAREACAR</font> statement is optional and can be used once after each <font size="2" face="'Courier New'" color="#000000">lefwMacroPinAntennaModel</font> routine in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1072729">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072730">int lefwMacroPinAntennaMaxSideAreaCar(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value,<dd></em></font>const char* <font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>)</font>
</dl>
<h4><a name="1072731">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1072732"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1088093">For hierarchical process antenna effect calculation, specifies the maximum cumulative antenna ratio value on the specified </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>, using the metal side wall area below the current pin layer. </blockquote>
<p>
<strong></strong>
<strong><a name="1072734"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088100">Specifies the layer.</a></blockquote>
<h3><a name="lefwMacroPinAntennaModel"></a><a name="1077573">lefwMacroPinAntennaModel</a></h3>
<p><a name="1077574">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAMODEL</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNAMODEL</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1077578">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077580">int lefwMacroPinAntennaModel(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>oxide</em></font>)</font>
</dl>
<h4><a name="1077592">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1078834"><font size="2" face="'Courier New'" color="#000000"><em>oxide</em></font></a></strong>
</p>
<blockquote><a name="1088107">Specifies the oxide model for the pin. Each model can be specified once per layer. If you specify an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAMODEL</font> statement, that value affects all <font size="2" face="'Courier New'" color="#000000">ANTENNAGATEAREA</font> and <font size="2" face="'Courier New'" color="#000000">ANTENNA*CAR</font> statements for the pin that follow it until you specify another <font size="2" face="'Courier New'" color="#000000">ANTENNAMODEL</font> statement. <br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">OXIDE1</font>, <font size="2" face="'Courier New'" color="#000000">OXIDE2</font>, <font size="2" face="'Courier New'" color="#000000">OXIDE3</font>, or <font size="2" face="'Courier New'" color="#000000">OXIDE4<br></font><br><font color="#000000"><strong>Note:</strong></font> <font size="2" face="'Courier New'" color="#000000">OXIDE1</font> and <font size="2" face="'Courier New'" color="#000000">OXIDE2</font> are currently supported. If you specify <font size="2" face="'Courier New'" color="#000000">OXIDE3</font> or <font size="2" face="'Courier New'" color="#000000">OXIDE4</font>, current tools parse and ignore them. </blockquote>
<h3><a name="lefwMacroPinAntennaPartialCutArea"></a><a name="1078858">lefwMacroPinAntennaPartialCutArea</a></h3>
<p><a name="1078859">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAPARTIALCUTAREA</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNAPARTIALCUTAREA</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1072737">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072738">int lefwMacroPinAntennaPartialCutArea(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value,<dd></em></font>const char* <font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>)</font>
</dl>
<h4><a name="1072739">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1072740"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1088128">Specifies the partial cut area, which is above the current pin layer and inside, or outside, the macro on a layer.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1072742"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088135">Optional argument that specifies the layer. If you specify a layer name, </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font> applies to antennas on that layer only. If you do not specify a layer name, <font size="2" face="'Courier New'" color="#000000"><em>value</em></font> applies to all layers. Specify <font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument.</blockquote>
<h3><a name="lefwMacroPinAntennaPartialMetalArea"></a><a name="1072735">lefwMacroPinAntennaPartialMetalArea</a></h3>
<p><a name="1072668">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAPARTIALMETALAREA</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNAPARTIALMETALAREA</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1072669">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072670">int lefwMacroPinAntennaPartialMetalArea(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value,<dd></em></font>const char* <font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>)</font>
</dl>
<h4><a name="1072671">Argument</a></h4>
<p>
<strong></strong>
<strong><a name="1072672"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1088142">Specifies the partial metal area, which is connected directly to the I&#47;O pin and the inside, or outside, of the macro on a layer.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1072680"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088149">Optional argument that specifies the layer. If you do not specify a layer name, </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font> applies to all layers. Specify <font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument. </blockquote>
<h3><a name="lefwMacroPinAntennaPartialMetalSideArea"></a><a name="1072681">lefwMacroPinAntennaPartialMetalSideArea</a></h3>
<p><a name="1072682">Writes an </a><font size="2" face="'Courier New'" color="#000000">ANTENNAPARTIALMETALSIDEAREA</font> statement. The <font size="2" face="'Courier New'" color="#000000">ANTENNAPARTIALMETALSIDEAREA</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1072683">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072684">int lefwMacroPinAntennaPartialMetalSideArea(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>value,<dd></em></font>const char* <font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>) </font>
</dl>
<h4><a name="1072685">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1072686"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1088156">Specifies the partial metal side wall area, which is connected directly to the I&#47;O pin and inside, or outside, of the macro on a layer.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1072690"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088163">Optional argument that specifies the layer. If you do not specify a layer name, </a><font size="2" face="'Courier New'" color="#000000"><em>value</em></font> applies to all layers. Specify <font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument.</blockquote>
<h3><a name="1033975">lefwMacroPinDirection</a></h3>
<p><a name="1060396">Writes a </a><font size="2" face="'Courier New'" color="#000000">DIRECTION</font> statement. The <font size="2" face="'Courier New'" color="#000000">DIRECTION</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1052574">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1052575">int lefwMacroPinDirection(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>direction</em></font>)</font>
</dl>
<h4><a name="1052582">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1088175"><font size="2" face="'Courier New'" color="#000000"><em>direction</em></font></a></strong>
</p>
<blockquote><a name="1088176">Specifies the pin type.<br></a><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">INPUT</font>, <font size="2" face="'Courier New'" color="#000000">OUTPUT</font>, <font size="2" face="'Courier New'" color="#000000">OUTPUT TRISTATE</font>, <font size="2" face="'Courier New'" color="#000000">INOUT</font>, or <font size="2" face="'Courier New'" color="#000000">FEEDTHRU</font></blockquote>
<h3><a name="lefwMacroPinGroundSensitivity"></a><a name="1034061">lefwMacroPinGroundSensitivity </a></h3>
<p><a name="1081264">Writes a </a><font size="2" face="'Courier New'" color="#000000">GROUNDSENSITIVITY</font> statement. The <font size="2" face="'Courier New'" color="#000000">GROUNDSENSITIVITY</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1081267">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1081268">lefwMacroPinGroundSensitivity( <dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>pinName</em></font>)</font>
</dl>
<h4><a name="1081269">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1081270"><font size="2" face="'Courier New'" color="#000000"><em>pinName</em></font></a></strong>
</p>
<blockquote><a name="1088181">Specifies that if this pin is connected to a tie&#45;low connection (such as </a><font size="2" face="'Courier New'" color="#000000">1'b0</font> in Verilog), it should connect to the same net to which <font size="2" face="'Courier New'" color="#000000"><em>pinName</em></font> is connected.</blockquote>
<h3><a name="1081263">lefwMacroPinMustjoin</a></h3>
<p><a name="1060535">Writes a </a><font size="2" face="'Courier New'" color="#000000">MUSTJOIN</font> statement. The <font size="2" face="'Courier New'" color="#000000">MUSTJOIN</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1052930">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1052931">int lefwMacroPinMustjoin(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>pinName</em></font>)</font>
</dl>
<h4><a name="1052942">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1088193"><font size="2" face="'Courier New'" color="#000000"><em>pinName</em></font></a></strong>
</p>
<blockquote><a name="1088194">Specifies the name of another pin in the cell that must be connected with the pin being defined.</a></blockquote>
<h3><a name="lefwMacroPinNetExpr"></a><a name="1034217">lefwMacroPinNetExpr</a></h3>
<p><a name="1081220">Wries a </a><font size="2" face="'Courier New'" color="#000000">NETEXPR</font> statement in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section. The <font size="2" face="'Courier New'" color="#000000">NETEXPR</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1081225">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1081226">lefwMacroPinNetExpr( <dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>name</em></font>)</font>
</dl>
<h4><a name="1081227">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1081228"><font size="2" face="'Courier New'" color="#000000"><em>name</em></font></a></strong>
</p>
<blockquote><a name="1088199">Specifies a net expression property name (such as power1 or power2). If </a><font size="2" face="'Courier New'" color="#000000"><em>name</em></font> matches a net expression property in the netlist (such as in Verilog, VHDL, or OpenAccess), then the property is evaluated, and the software identifies a net to which to connect this pin.</blockquote>
<h3><a name="1081219">lefwMacroPinShape</a></h3>
<p><a name="1060620">Writes a </a><font size="2" face="'Courier New'" color="#000000">SHAPE</font> statement. The <font size="2" face="'Courier New'" color="#000000">SHAPE</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1053255">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1053256">int lefwMacroPinShape(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>name</em></font>)</font>
</dl>
<h4><a name="1053263">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1053266"><font size="2" face="'Courier New'" color="#000000"><em>name</em></font></a></strong>
</p>
<blockquote><a name="1088206">Specifies a pin with special connection requirements because of its shape. <br></a><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">ABUTMENT</font>, <font size="2" face="'Courier New'" color="#000000">RING</font>, or <font size="2" face="'Courier New'" color="#000000">FEEDTHRU</font></blockquote>
<h3><a name="lefwMacroPinSupplySensitivity"></a><a name="1034240">lefwMacroPinSupplySensitivity </a></h3>
<p><a name="1081255">Writes a </a><font size="2" face="'Courier New'" color="#000000">SUPPLYSENSITIVITY</font> statement. The <font size="2" face="'Courier New'" color="#000000">SUPPLYSENSITIVITY</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section. </p>
<h4><a name="1081258">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1081259">lefwMacroPinSupplySensitivity( <dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>pinName</em></font>)</font>
</dl>
<h4><a name="1081260">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1081261"><font size="2" face="'Courier New'" color="#000000"><em>pinName</em></font></a></strong>
</p>
<blockquote><a name="1088213">Specifies that if this pin is connected to a tie&#45;high connection (such as </a><font size="2" face="'Courier New'" color="#000000">1'b1</font> in Verilog), it should connect to the same net to which <font size="2" face="'Courier New'" color="#000000"><em>pinName</em></font> is connected.</blockquote>
<h3><a name="1081254">lefwMacroPinTaperRule</a></h3>
<p><a name="1078762">Writes a </a><font size="2" face="'Courier New'" color="#000000">TAPERRULE</font> statement. The <font size="2" face="'Courier New'" color="#000000">TAPERRULE</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1078763">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1078764">int lefwMacroPinTaperRule(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>ruleName</em></font>)</font>
</dl>
<h4><a name="1078765">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1078766"><font size="2" face="'Courier New'" color="#000000"><em>ruleName</em></font></a></strong>
</p>
<blockquote><a name="1088220">Specifies the nondefault rule to use when tapering wires to the pin.</a></blockquote>
<h3><a name="1078761">lefwMacroPinUse</a></h3>
<p><a name="1060644">Writes a </a><font size="2" face="'Courier New'" color="#000000">USE</font> statement. The <font size="2" face="'Courier New'" color="#000000">USE</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section.</p>
<h4><a name="1053336">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1053337">int lefwMacroPinUse(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>use</em></font>)</font>
</dl>
<h4><a name="1053348">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1060292"><font size="2" face="'Courier New'" color="#000000"><em>use</em></font></a></strong>
</p>
<blockquote><a name="1088227">Specifies how the pin is used.<br></a><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">SIGNAL</font>, <font size="2" face="'Courier New'" color="#000000">ANALOG</font>, <font size="2" face="'Courier New'" color="#000000">POWER</font>, <font size="2" face="'Courier New'" color="#000000">GROUND</font>, or <font size="2" face="'Courier New'" color="#000000">CLOCK</font></blockquote>
<h3><a name="1066280">Macro Pin Examples</a></h3>
<p><a name="1066281">The following example only shows the usage of some functions related to Macro Pin.This example is part of the Macro callback routine.</a></p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1066282">int macroCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd><dd> ...<dd> res = lefwStartMacroPin(&#34;Z&#34;);<dd> CHECK_RES(res);<dd> res = lefwMacroPinDirection(&#34;OUTPUT&#34;);<dd> CHECK_RES(res);<dd> res = lefwMacroPinUse(&#34;SIGNAL&#34;);<dd> CHECK_RES(res);<dd> res = lefwMacroPinShape(&#34;ABUTMENT&#34;);<dd> CHECK_RES(res);<dd> res = lefwMacroPinPower(0.1);<dd> CHECK_RES(res);<dd> res = lefwStartMacroPinPort(NULL);<dd> CHECK_RES(res);<dd> res = lefwEndMacroPin(&#34;Z&#34;);<dd> CHECK_RES(res);<dd> ...<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="1066278">Macro Pin Port </a></h2>
<p><a name="1042364">Macro Pin Port routines write a </a><font size="2" face="'Courier New'" color="#000000">PORT</font> section, which further defines a macro pin. The <font size="2" face="'Courier New'" color="#000000">PORT</font> section is required for each <font size="2" face="'Courier New'" color="#000000">PIN</font> section and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">PIN</font> section. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">PIN</font> section, see <a href="../lefdefref/LEFSyntax.html#MacroPinStatement" target="external_window"><font color="#0000ff"><u>&#34;Macro Pin Statemen&#34;t</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1071869">You must use the </a><font size="2" face="'Courier New'" color="#000000">lefwStartMacroPinPort</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndMacroPinPort</font> routines to start and end the <font size="2" face="'Courier New'" color="#000000">PORT</font> section. The <font size="2" face="'Courier New'" color="#000000">lefwStartMacroPinPort</font> routine must be called after the <font size="2" face="'Courier New'" color="#000000">lefwStartMacroPin</font> routine.The remaining port routines must be included between these routines. </p>
<p><a name="1070805">For examples of the routines described here, see </a><a href="#1066377" title="6"><font color="Blue"><u>"Macro Pin Port Examples"</u></font></a><a href="#1066377" title="6"></a>.</p>
<p><a name="1037625">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1034318">lefwStartMacroPinPort</a></h3>
<p><a name="1060704">Starts the </a><font size="2" face="'Courier New'" color="#000000">PORT</font> section. </p>
<h4><a name="1053417">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1053418">int lefwStartMacroPinPort(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>classType</em></font>)</font>
</dl>
<h4><a name="1053429">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1071857"><font size="2" face="'Courier New'" color="#000000"><em>classType</em></font></a></strong>
</p>
<blockquote><a name="1088234">Optional argument that specifies whether or not the port is a core port. <br></a><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">NONE</font> or <font size="2" face="'Courier New'" color="#000000">CORE</font>.</blockquote>
<h3><a name="1034334">lefwEndMacroPinPort</a></h3>
<p><a name="1060718">Ends the </a><font size="2" face="'Courier New'" color="#000000">PORT</font> section.</p>
<h4><a name="1053446">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1053447">int lefwEndMacroPinPort()</a></font>
</dl>
<h3><a name="lefwMacroPinPortDesignRuleWidth"></a><a name="1071884">lefwMacroPinPortDesignRuleWidth</a></h3>
<p><a name="1071885">Writes a </a><font size="2" face="'Courier New'" color="#000000">DESIGNRULEWIDTH</font> statement. Either a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement, a <font size="2" face="'Courier New'" color="#000000">DESIGNRULEWIDTH</font> statement, or a <font size="2" face="'Courier New'" color="#000000">VIA</font> statement must be defined in a <font size="2" face="'Courier New'" color="#000000">PORT</font> section and can be used more than once. </p>
<h4><a name="1071886">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1071889">int lefwMacroPinPortDesignRuleWidth(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>width</em></font>)</font>
</dl>
<h4><a name="1071887">Argument</a></h4>
<p>
<strong></strong>
<strong><a name="1071900"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088241">Specifies the layer on which to place the geometry. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1071901"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1088248">Optional argument that specifies the effective design rule width. If specified, the router uses the spacing defined in the layer section that corresponds to </a><font size="2" face="'Courier New'" color="#000000"><em>width</em></font>. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<h3><a name="1034344">lefwMacroPinPortLayer</a></h3>
<p><a name="1060726">Writes a </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> statement in the <font size="2" face="'Courier New'" color="#000000">PORT</font> section. Either a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement, a <font size="2" face="'Courier New'" color="#000000">DESIGNRULEWIDTH</font> statement, or a <font size="2" face="'Courier New'" color="#000000">VIA</font> statement must be defined in a <font size="2" face="'Courier New'" color="#000000">PORT</font> section and can be used more than once. </p>
<h4><a name="1053473">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1053474">int lefwMacroPinPortLayer(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font>)</font>
</dl>
<h4><a name="1053481">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1060678"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088255">Specifies the layer on which to place the geometry. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1053487"><font size="2" face="'Courier New'" color="#000000"><em>spacing</em></font></a></strong>
</p>
<blockquote><a name="1088262">Optional argument that specifies the minimum spacing allowed between this geometry and any other shape. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<h3><a name="1034351">lefwMacroPinPortLayerPath</a></h3>
<p><a name="1060745">Writes a </a><font size="2" face="'Courier New'" color="#000000">PATH</font> statement. Either a <font size="2" face="'Courier New'" color="#000000">PATH</font>, <font size="2" face="'Courier New'" color="#000000">POLYGON</font>, or <font size="2" face="'Courier New'" color="#000000">RECT</font> statement must follow a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement. </p>
<h4><a name="1053506">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072643">int lefwMacroPinPortLayerPath(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>num_paths</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>xl</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>yl</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numY</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font>)</font>
</dl>
<h4><a name="1072644">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1063526"><font size="2" face="'Courier New'" color="#000000"><em>numPaths</em></font></a></strong>
</p>
<blockquote><a name="1088269">Specifies the number of paths to create.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1075246"><font color="#000000"><em> </em></font></a><font size="2" face="'Courier New'" color="#000000"><em>x1</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>y1</em></font></strong>
</p>
<blockquote><a name="1088276">Create a path between the specified points. The path automatically extends the length by half of the current width on both end points to form a rectangle. (A previous </a><font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement is required.) The line between each pair of points must be parallel to the x or y axis (45&#45;degree angles are not allowed).</blockquote>
<p>
<strong></strong>
<strong><a name="1063520"><font size="2" face="'Courier New'" color="#000000"><em>numX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>numY</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font></strong>
</p>
<blockquote><a name="1088283">Optional arguments that specify the </a><font size="2" face="'Courier New'" color="#000000">PATH ITERATE</font> statement. <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font> and <font size="2" face="'Courier New'" color="#000000"><em>numy</em></font> specify the number of columns and rows of points that make up the array. <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font> and spaceY specify the spacing, in distance units, between the columns and rows. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<h3><a name="1043715">lefwMacroPinPortLayerPolygon</a></h3>
<p><a name="1060775">Writes a </a><font size="2" face="'Courier New'" color="#000000">POLYGON</font> statement. Either a <font size="2" face="'Courier New'" color="#000000">PATH</font>, <font size="2" face="'Courier New'" color="#000000">POLYGON</font>, or <font size="2" face="'Courier New'" color="#000000">RECT</font> statement must follow a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement. </p>
<h4><a name="1078934">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1053543">int lefwMacroPinPortLayerPolygon(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>num_polys</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>xl</em></font>,<dd>double* <font size="2" face="'Courier New'" color="#000000"><em>yl</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numY</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font>)</font>
</dl>
<h4><a name="1053554">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1070572"><font size="2" face="'Courier New'" color="#000000"><em>num_polys</em></font></a></strong>
</p>
<blockquote><a name="1088290">Specifies the number of polygon sides.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1081880"><font size="2" face="'Courier New'" color="#000000"><em>x1</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>y1</em></font></strong>
</p>
<blockquote><a name="1088297">Specifies a sequence of points to generate a polygon geometry. Each polygon edge must be parallel to the x or y axis, or at a 45&#45;degree angle. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1081881"><font size="2" face="'Courier New'" color="#000000"><em>numX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>numY</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font></strong>
</p>
<blockquote><a name="1088304">Optional arguments that specify the </a><font size="2" face="'Courier New'" color="#000000">POLYGON ITERATE</font> statement. <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font> and <font size="2" face="'Courier New'" color="#000000"><em>numy</em></font> specify the number of columns and rows of points that make up the array. <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font> and spaceY specify the spacing, in distance units, between the columns and rows. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<h3><a name="1075227">lefwMacroPinPortLayerRect</a></h3>
<p><a name="1060796">Writes a </a><font size="2" face="'Courier New'" color="#000000">RECT</font> statement. Either a <font size="2" face="'Courier New'" color="#000000">PATH</font>, <font size="2" face="'Courier New'" color="#000000">POLYGON</font>, or <font size="2" face="'Courier New'" color="#000000">RECT</font> statement must follow a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement. </p>
<h4><a name="1053587">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1053588">int lefwMacroPinPortLayerRect(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>xl1</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>yl1</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>xl2</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>yl2</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numY</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font>)</font>
</dl>
<h4><a name="1081896">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1081897"><font size="2" face="'Courier New'" color="#000000"><em>xl1</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yl1</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>xl2</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yl2</em></font></strong>
</p>
<blockquote><a name="1088311">Specifies a rectangle in the current layer, where the points specified are opposite corners of the rectangle. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1063005"><font size="2" face="'Courier New'" color="#000000"><em>numX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>numY</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font></strong>
</p>
<blockquote><a name="1088318">Optional arguments that specify the </a><font size="2" face="'Courier New'" color="#000000">RECT ITERATE</font> statement. <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font> and <font size="2" face="'Courier New'" color="#000000"><em>numy</em></font> specify the number of columns and rows of points that make up the array. <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font> and spaceY specify the spacing, in distance units, between the columns and rows. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<h3><a name="lefwMacroPinPortLayerWidth"></a><a name="1078917">lefwMacroPinPortLayerWidth</a></h3>
<p><a name="1078915">Writes a </a><font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement. The <font size="2" face="'Courier New'" color="#000000">WIDTH</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">PORT</font> section.</p>
<h4><a name="1078924">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1078925">int lefwMacroPinPortLayerWidth(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>width</em></font>)</font>
</dl>
<h4><a name="1078926">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1078927"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1088325">Specifies the width that the </a><font size="2" face="'Courier New'" color="#000000">PATH</font> statements use. </blockquote>
<h3><a name="1034375">lefwMacroPinPortVia</a></h3>
<p><a name="1060845">Writes a </a><font size="2" face="'Courier New'" color="#000000">VIA</font> statement. Either a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement, a <font size="2" face="'Courier New'" color="#000000">DESIGNRULEWIDTH</font> statement, or a <font size="2" face="'Courier New'" color="#000000">VIA</font> statement must be defined in a <font size="2" face="'Courier New'" color="#000000">PORT</font> section and can be used more than once. </p>
<h4><a name="1053623">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1053624">int lefwMacroPinPortVia(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>xl</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>yl</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>numY</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font>)</font>
</dl>
<h4><a name="1053635">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1063574"><font size="2" face="'Courier New'" color="#000000"><em>x1</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>y1</em></font></strong>
</p>
<blockquote><a name="1088332">Specify the location to place the via.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1063575"><font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font></a></strong>
</p>
<blockquote><a name="1088339">Specifies the name of the via to place.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1063576"><font size="2" face="'Courier New'" color="#000000"><em>numX</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>numY</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>spaceY</em></font></strong>
</p>
<blockquote><a name="1088346">Optional arguments that specify the </a><font size="2" face="'Courier New'" color="#000000">VIA</font> <font size="2" face="'Courier New'" color="#000000">ITERATE</font> statement. <font size="2" face="'Courier New'" color="#000000"><em>numX</em></font> and <font size="2" face="'Courier New'" color="#000000"><em>numy</em></font> specify the number of columns and rows of points that make up the array. <font size="2" face="'Courier New'" color="#000000"><em>spaceX</em></font> and spaceY specify the spacing, in distance units, between the columns and rows. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<h3><a name="1066377">Macro Pin Port Examples</a></h3>
<p><a name="1066378">The following example only shows the usage of some functions related to Macro Pin Port. This example is part of the Macro callback routine.</a></p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1066379">int macroCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd> double *xpath;<dd> double *ypath;<dd><dd> ...<dd> res = lefwStartMacroPin(&#34;Z&#34;);<dd> CHECK_RES(res);<dd><dd> ...<dd><dd> res = lefwStartMacroPinPort(NULL);<dd> CHECK_RES(res);<dd> res = lefwMacroPinPortLayer(&#34;M2&#34;, 5.6);<dd> CHECK_RES(res);<dd> xpath = (double*)malloc(sizeof(double)*3);<dd> ypath = (double*)malloc(sizeof(double)*3);<dd> xpath[0] = 30.8;<dd> ypath[0] = 9;<dd> xpath[1] = 42;<dd> ypath[1] = 9;<dd> xpath[2] = 30.8;<dd> ypath[2] = 9;<dd> res = lefwMacroPinPortLayerPath(3, xpath, ypath, 0, 0,<dd> &nbsp;&nbsp;&nbsp;&nbsp;0, 0);<dd> CHECK_RES(res);<dd> res = lefwEndMacroPinPort();<dd> CHECK_RES(res);<dd><dd> ...<dd> res = lefwEndMacroPin(&#34;Z&#34;);<dd> CHECK_RES(res);<dd> free((char*)xpath);<dd> free((char*)ypath);<dd> ...<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="1077609">Manufacturing Grid</a></h2>
<p><a name="1077610">The Manufacturing Grid routine writes a LEF </a><font size="2" face="'Courier New'" color="#000000">MANUFACTURINGGRID</font> statement. The <font size="2" face="'Courier New'" color="#000000">MANUFACTURINGGRID</font> statement is optional and can be used only once in a LEF file. For syntax information about the <font size="2" face="'Courier New'" color="#000000">MANUFACTURINGGRID</font> statement, see <a href="../lefdefref/LEFSyntax.html#ManufacturingGrid" target="external_window"><font color="#0000ff"><u>"Manufacturing Grid"</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1077621">This routine returns 0 if successful.</a></p>
<h3><a name="lefwManufacturingGrid"></a><a name="1077622">lefwManufacturingGrid</a></h3>
<p><a name="1077623">Writes a </a><font size="2" face="'Courier New'" color="#000000">MANUFACTURINGGRID</font> statement.</p>
<h4><a name="1077624">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077625">int lefwManufacturingGrid(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>grid</em></font>)</font>
</dl>
<h4><a name="1077626">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077627"><font size="2" face="'Courier New'" color="#000000"><em>grid</em></font></a></strong>
</p>
<blockquote><a name="1088353">Specifies the value for the manufacturing grid. You must specify a positive number for a value.</a></blockquote>
<h2><a name="1077306">Maximum Via Stack</a></h2>
<p><a name="1077307">The Maximum Stack Via routine writes a LEF </a><font size="2" face="'Courier New'" color="#000000">MAXVIASTACK</font> statement. The <font size="2" face="'Courier New'" color="#000000">MAXVIASTACK</font> statement is optional and can be used only once in a LEF file. For syntax information about the <font size="2" face="'Courier New'" color="#000000">MAXVIASTACK</font> statement, see <a href="../lefdefref/LEFSyntax.html#MaximumViaStack" target="external_window"><font color="#0000ff"><u>"Maximum Via Stack"</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="13.333333333333332">
<div>&nbsp;</div>
</td>
<td width="133.33333333333331">
<div>
<nobr>
<font size="3"><img src="images/important.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td>
<font size="3"><a name="1077319">The </a><font size="2" face="'Courier New'" color="#000000">lefwMaxviastack</font> routine must be used only after all layer routines are used. </font>
</td>
</tr>
</table>
</div>
<p><a name="1077322">This routine returns </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="lefwMaxviastack"></a><a name="1077324">lefwMaxviastack</a></h3>
<p><a name="1077325">Writes a </a><font size="2" face="'Courier New'" color="#000000">MAXVIASTACK</font> statement. </p>
<h4><a name="1077326">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077327">int lefwMaxviastack(<dd>int value,<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>bottomlayer</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>topLayer</em></font>)</font>
</dl>
<h4><a name="1077328">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1079261"><font size="2" face="'Courier New'" color="#000000"><em>value</em></font></a></strong>
</p>
<blockquote><a name="1088360">Specifies the maximum allowed number of single&#45;stacked vias.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1079259"><font size="2" face="'Courier New'" color="#000000"><em>bottomLayer</em></font></a></strong>
</p>
<blockquote><a name="1088367">Optional argument that specifies the bottom layer in a range of layers for which the maximum stacked via rule applies. Specify </a><font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument.</blockquote>
<p>
<strong></strong>
<strong><a name="1077331"><font size="2" face="'Courier New'" color="#000000"><em>topLayer</em></font></a></strong>
</p>
<blockquote><a name="1088374">Optional argument that specifies the top layer in a range of layers for which the maximum stacked via rule applies. Specify </a><font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument.</blockquote>
<h2><a name="1066594">Nondefault Rule </a></h2>
<p><a name="1066585">Nondefault Rule routines write a LEF </a><font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement. The <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement is optional and can be used only once in a LEF file. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement, see <a href="../lefdefref/LEFSyntax.html#NondefaultRule" target="external_window"><font color="#0000ff"><u>&#34;Nondefault Rule&#34;</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1038646">You must use the </a><font size="2" face="'Courier New'" color="#000000">lefwStartNondefaultRules</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndNondefaultRules</font> routines to start and end the <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> section. The <font size="2" face="'Courier New'" color="#000000">lefwNonDefaultRuleLayer</font> routine must be included between these routines.</p>
<p><a name="1070815">For examples of the routines described here, see </a><a href="#1080895" title="6"><font color="Blue"><u>"Nondefault Rules Example"</u></font></a><a href="#1080895" title="6"></a>.</p>
<p><a name="1063787">In addition to the routines described in this section, you can include a </a><font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement and a <font size="2" face="'Courier New'" color="#000000">VIA</font> statement within a <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> section. For more information about these routines, see <a href="#1066631" title="6"><font color="Blue"><u>"Property"</u></font></a><a href="#1066631" title="6"> </a>, or <a href="#1066875" title="6"><font color="Blue"><u>"Via"</u></font></a><a href="#1066875" title="6"></a>.</p>
<p><a name="1058638">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1038775">lefwStartNonDefaultRule</a></h3>
<p><a name="1061257">Starts the </a><font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement. </p>
<h4><a name="1054215">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054216">int lefwStartNonDefaultRule(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>ruleName</em></font>)</font>
</dl>
<h4><a name="1054227">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1061169"><font size="2" face="'Courier New'" color="#000000"><em>ruleName</em></font></a></strong>
</p>
<blockquote><a name="1088381">Specifies the name of the nondefault rule to define.</a></blockquote>
<h3><a name="1038820">lefwEndNonDefaultRule</a></h3>
<p><a name="1061269">Ends the </a><font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement for the specified <font size="2" face="'Courier New'" color="#000000"><em>ruleName</em></font>.</p>
<h4><a name="1054243">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054244">int lefwEndNonDefaultRule(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>ruleName</em></font>)</font>
</dl>
<h3><a name="lefwNonDefaultRuleHardspacing"></a><a name="1038797">lefwNonDefaultRuleHardspacing </a></h3>
<p><a name="1080791">Writes a </a><font size="2" face="'Courier New'" color="#000000">HARDSPACING</font> statement. The <font size="2" face="'Courier New'" color="#000000">HARDSPACING</font> statement specifies that any spacing values that exceed the LEF <font size="2" face="'Courier New'" color="#000000">LAYER</font> spacing requirements are &#34;hard&#34; rules instead of &#34;soft&#34; rules. By default, routers treat extra spacing requirements as soft rules that are high cost to violate, but not real spacing violations. The <font size="2" face="'Courier New'" color="#000000">HARDSPACING</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement.</p>
<h4><a name="1080802">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080795">lefwNonDefaultRuleHardspacing()</a></font>
</dl>
<h3><a name="1080790">lefwNonDefaultRuleLayer</a></h3>
<p><a name="1061275">Writes a </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> statement in the <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement. The <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement is required and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement. </p>
<h4><a name="1054270">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054271">int lefwNonDefaultRuleLayer(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>width</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>minSpacing</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>wireExtension,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>resistance,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>capacitance</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>edgecap</em></font>)</font>
</dl>
<h4><a name="1054282">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074535"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088388">Specifies the layer for the various width and spacing values. This layer must be a routing layer.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1074522"><font size="2" face="'Courier New'" color="#000000"><em>minSpacing</em></font></a></strong>
</p>
<blockquote><a name="1088395">Optional argument that specifies the recommended minimum spacing for </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font> for routes using this <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> to other geometries. </blockquote>
<p>
<strong></strong>
<strong><a name="1061283"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a></strong>
</p>
<blockquote><a name="1088402">Specifies the required minimum width for layerName. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1072481"><font size="2" face="'Courier New'" color="#000000"><em>wireExtension</em></font></a></strong>
</p>
<blockquote><a name="1088409">Optional argument that specifies the distance by which wires are extended at vias.The value must be greater than or equal to half of the routing width for the layer, as defined in the nondefault rule. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument. </blockquote>
<p>
<strong></strong>
<strong><a name="1081727"><font size="2" face="'Courier New'" color="#000000"><em>resistance</em></font></a> </strong>
</p>
<blockquote><a name="1088416">This argument is obsolete. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<p>
<strong></strong>
<strong><a name="1081742"><font size="2" face="'Courier New'" color="#000000"><em>capacitance</em></font></a></strong>
</p>
<blockquote><a name="1088423">This argument is obsolete. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<p>
<strong></strong>
<strong><a name="1081743"><font size="2" face="'Courier New'" color="#000000"><em>edgecap</em></font></a></strong>
</p>
<blockquote><a name="1088430">This argument is obsolete. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<h3><a name="lefwNonDefaultRuleMinCuts"></a><a name="1080823">lefwNonDefaultRuleMinCuts </a></h3>
<p><a name="1080923">Wries a </a><font size="2" face="'Courier New'" color="#000000">MINCUTS</font> statement in the <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement. The <font size="2" face="'Courier New'" color="#000000">MINCUTS</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement.</p>
<h4><a name="1080938">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080939">lefwNonDefaultRuleMinCuts( <dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>, <dd>int <font size="2" face="'Courier New'" color="#000000"><em>numCuts</em></font>)</font>
</dl>
<h4><a name="1080940">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1080941"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088437">Specifies the cut layer.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1080943"><font size="2" face="'Courier New'" color="#000000"><em>numCuts</em></font></a></strong>
</p>
<blockquote><a name="1088448">Specifies the minimum number of cuts allowed for any via using </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>.</blockquote>
<h3><a name="lefwNonDefaultRuleStartVia"></a><a name="1080922">lefwNonDefaultRuleStartVia </a></h3>
<p><a name="1080824">Starts a </a><font size="2" face="'Courier New'" color="#000000">VIA</font> statement in the <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement. The <font size="2" face="'Courier New'" color="#000000">VIA</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement. </p>
<p><a name="1080854">Each </a><font size="2" face="'Courier New'" color="#000000">VIA</font> statement must start and end with the <font size="2" face="'Courier New'" color="#000000">lefwNonDefaultRuleStartVia</font> and <font size="2" face="'Courier New'" color="#000000">lefwNonDefaultRuleEndVia</font> routines. The following routines can be included within a <font size="2" face="'Courier New'" color="#000000">VIA</font> statement:</p>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a name="1080863"> </a><a href="#1039519" title="6"><font color="Blue"><u>lefwViaLayer</u></font></a><a href="#1039519" title="6"></a> </td>
</tr>
</table>
</div>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a href="#lefwViaLayerPolygon" title="6" name="1081307"><font color="Blue"><u>lefwViaLayerPolygon</u></font></a><a href="#lefwViaLayerPolygon" title="6"></a> </td>
</tr>
</table>
</div>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a href="#1080506" title="6" name="1081295"><font color="Blue"><u>lefwViaLayerRect</u></font></a><a href="#1080506" title="6"></a> </td>
</tr>
</table>
</div>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a href="#1039541" title="6" name="1081296"><font color="Blue"><u>lefwViaResistance</u></font></a><a href="#1039541" title="6"></a> </td>
</tr>
</table>
</div>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a href="#lefwViaViarule" title="6" name="1081297"><font color="Blue"><u>lefwViaViarule</u></font></a><a href="#lefwViaViarule" title="6"></a> (and its related routines) </td>
</tr>
</table>
</div>
<h4><a name="1080833">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080834">lefwNonDefaultRuleStartVia( <dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font>, <dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>isDefault</em></font>)</font>
</dl>
<h4><a name="1080835">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1080836"><font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font></a></strong>
</p>
<blockquote><a name="1088455">Specifies the name for the via.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1080841"><font size="2" face="'Courier New'" color="#000000"><em>isDefault</em></font></a></strong>
</p>
<blockquote><a name="1088462">Identifies the via as the default via between the specified layers. </a></blockquote>
<table summary="" border="0" cellpadding="4" cellspacing="0" bordercolor="#D3D3D3" width="648">
<caption>
<tr>
<td cellpadding="4" valign="top" width="204">
<p><a name="1081758">&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top" width="96">
<p><a name="1081760"><font size="2" face="'Courier New'" color="#000000">NULL</font></a></p>
</td>
<td cellpadding="4" valign="top" width="348">
<p><a name="1081762">Ignores the argument.</a></p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1081764">&nbsp;&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1081766"><font size="2" face="'Courier New'" color="#000000">DEFAULT</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1081768">Identifies the via as the default via.</a></p>
</td>
</tr>
</table>
<h3><a name="lefwNonDefaultRuleEndVia"></a><a name="1080865">lefwNonDefaultRuleEndVia </a></h3>
<p><a name="1080866">Ends the </a><font size="2" face="'Courier New'" color="#000000">VIA</font> statement for the specified <font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font>. Each <font size="2" face="'Courier New'" color="#000000">VIA</font> statement must start and end with the <font size="2" face="'Courier New'" color="#000000">lefwNonDefaultRuleStartVia</font> and <font size="2" face="'Courier New'" color="#000000">lefwNonDefaultRuleEndVia</font> routines. </p>
<h4><a name="1080868">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080877">lefwNonDefaultRuleEndVia( <dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font>)</font>
</dl>
<h3><a name="lefwNonDefaultRuleUseVia"></a><a name="1080919">lefwNonDefaultRuleUseVia </a></h3>
<p><a name="1080886">Writes a </a><font size="2" face="'Courier New'" color="#000000">USEVIA</font> statement in a <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement. The <font size="2" face="'Courier New'" color="#000000">USEVIA</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement.</p>
<h4><a name="1080890">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080891">lefwNonDefaultRuleUseVia( <dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font>)</font>
</dl>
<h4><a name="1080892">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1080893"><font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font></a></strong>
</p>
<blockquote><a name="1088469">Specifies a previously defined via from the LEF </a><font size="2" face="'Courier New'" color="#000000">VIA</font> statement, or a previously defined <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> via to use with this routing rule.</blockquote>
<h3><a name="lefwNonDefaultRuleUseViaRule"></a><a name="1080885">lefwNonDefaultRuleUseViaRule </a></h3>
<p><a name="1080904">Wrties a </a><font size="2" face="'Courier New'" color="#000000">USEVIARULE</font> statement in the <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement. The <font size="2" face="'Courier New'" color="#000000">USEVIARULE</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> statement.</p>
<h4><a name="1080897">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080911">lefwNonDefaultRuleUseViaRule( <dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>viaRuleName</em></font>)</font>
</dl>
<h4><a name="1080912">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1080913"><font size="2" face="'Courier New'" color="#000000"><em>viaRuleName</em></font></a></strong>
</p>
<blockquote><a name="1088476">Specifies a previously defined </a><font size="2" face="'Courier New'" color="#000000">VIARULE</font> <font size="2" face="'Courier New'" color="#000000">GENERATE</font> rule to use with this routing rule. You cannot specify a rule from a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> without a <font size="2" face="'Courier New'" color="#000000">GENERATE</font> keyword. </blockquote>
<h3><a name="1080895">Nondefault Rules Example</a></h3>
<p><a name="1066634">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwNonDefaultCbkType</font>. This example does not include information on how to create a via within the nondefault rule. For an example of how to create a via, see the Via section.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1066635">int nonDefaultCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwNonDefaultCbkType) {<dd> printf(&#34;Type is not lefwNonDefaultCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd><dd> res = lefwStartNonDefaultRule(&#34;RULE1&#34;);<dd> CHECK_RES(res);<dd> res = lefwNonDefaultRuleLayer(&#34;RX&#34;, 10.0, 2.2, 6);<dd> CHECK_RES(res);<dd> res = lefwNonDefaultRuleLayer(&#34;PC&#34;, 10.0, 2.2, 0);<dd> CHECK_RES(res);<dd> res = lefwEndNonDefaultRule(&#34;RULE1&#34;);<dd> CHECK_RES(res);<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="1066631">Property</a></h2>
<p><a name="1064697">The Property routines write a LEF </a><font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement in a <font size="2" face="'Courier New'" color="#000000">VIA</font>, <font size="2" face="'Courier New'" color="#000000">VIARULE</font>, <font size="2" face="'Courier New'" color="#000000">LAYER</font>, <font size="2" face="'Courier New'" color="#000000">MACRO</font>, or <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font> section. The <font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement is optional and can be used more than once in these sections. </p>
<p><a name="1070820">For examples of the routines described here, see </a><a href="#1066672" title="6"><font color="Blue"><u>"Property Example"</u></font></a><a href="#1066672" title="6"></a>.</p>
<p><a name="1064701">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1064702">lefwIntProperty</a></h3>
<p><a name="1064703">Writes a </a><font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement that defines a named property with an <font size="2" face="'Courier New'" color="#000000"><em>integer</em></font> value. The <font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement is optional and can be used more than once in a LEF file.</p>
<h4><a name="1064704">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1064705">int lefwIntProperty(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>propName</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>propValue</em></font>)</font>
</dl>
<h4><a name="1088495">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1088496"><font size="2" face="'Courier New'" color="#000000"><em>propName</em></font></a></strong>
</p>
<blockquote><a name="1088502">Specifies the name of the property.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1088497"><font size="2" face="'Courier New'" color="#000000"><em>propValue</em></font></a></strong>
</p>
<blockquote><a name="1088509">Specifies an integer value.</a></blockquote>
<h3><a name="1064709">lefwRealProperty</a></h3>
<p><a name="1064710">Writes a </a><font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement that defines a named property with a <font size="2" face="'Courier New'" color="#000000"><em>real</em></font> number value. The <font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement is optional and can be used more than once in a LEF file.</p>
<h4><a name="1064711">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1064712">int lefwRealProperty(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>propName</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>propValue</em></font>)</font>
</dl>
<h4><a name="1064713">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1064714"><font size="2" face="'Courier New'" color="#000000"><em>propName</em></font></a></strong>
</p>
<blockquote><a name="1088516">Specifies the name of the property.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1064715"><font size="2" face="'Courier New'" color="#000000"><em>propValue</em></font></a></strong>
</p>
<blockquote><a name="1088523">Specifies a real value.</a></blockquote>
<h3><a name="1064716">lefwStringProperty</a></h3>
<p><a name="1064717">Writes a </a><font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement that defines a named property with a <font size="2" face="'Courier New'" color="#000000"><em>string</em></font> value. The <font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement is optional and can be used more than once in a LEF file.</p>
<h4><a name="1064718">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1064719">int lefwStringProperty(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>propName</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>propValue</em></font>)</font>
</dl>
<h4><a name="1064720">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1064721"><font size="2" face="'Courier New'" color="#000000"><em>propName</em></font></a></strong>
</p>
<blockquote><a name="1088530">Specifies the name of the property.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1064722"><font size="2" face="'Courier New'" color="#000000"><em>propValue</em></font></a></strong>
</p>
<blockquote><a name="1088546">Specifies a string value.</a></blockquote>
<h3><a name="1066672">Property Example</a></h3>
<p><a name="1066673">The following example shows how to create property inside a Macro callback routine. It can be used for Layer, Via, Via Rule, Via within the Nondefault Rule, and Macro.</a></p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1066674">int macroCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd><dd> int res;<dd><dd> ...<dd> res = lefwStringProperty(&#34;TYPE&#34;, &#34;special&#34;);<dd> CHECK_RES(res);<dd> res = lefwIntProperty(&#34;intProp&#34;, 23);<dd> CHECK_RES(res);<dd> res = lefwRealProperty(&#34;realProp&#34;, 24.25);<dd> CHECK_RES(res);<dd> ...<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="PropertyDefinitions"></a><a name="1066670">Property Definitions</a></h2>
<p><a name="1061779">Property Definitions routines write a LEF </a><font size="2" face="'Courier New'" color="#000000">PROPERTYDEFINTIONS</font> statement. The <font size="2" face="'Courier New'" color="#000000">PROPERTYDEFINTIONS</font> statement is optional and can be used only once in a LEF file. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">PROPERTYDEFINTIONS</font> statement, see <font color="#0000ff"><u>&#34;Property </u></font><a href="../lefdefref/LEFSyntax.html#PropertyDefinitions" target="external_window"><font color="#0000ff"><u>Definitions&#34;</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1038879">You must use the </a><font size="2" face="'Courier New'" color="#000000">lefwStartPropDef</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndPropDef</font> routines to start and end the <font size="2" face="'Courier New'" color="#000000">PROPERTYDEFINTIONS</font> statement. The <font size="2" face="'Courier New'" color="#000000">lefwPropDef</font> routine must be included between these routines.</p>
<p><a name="1070825">For examples of the routines described here, see </a><a href="#1066711" title="6"><font color="Blue"><u>"Property Definitions Examples"</u></font></a><a href="#1066711" title="6"></a>.</p>
<p><a name="1038881">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1069705">lefwStartPropDef</a></h3>
<p><a name="1069706">Starts the </a><font size="2" face="'Courier New'" color="#000000">PROPERTYDEFINTIONS</font> statement. </p>
<h4><a name="1069707">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054331">int lefwStartPropDef()</a></font>
</dl>
<h3><a name="1038988">lefwEndPropDef</a></h3>
<p><a name="1061315">Ends the </a><font size="2" face="'Courier New'" color="#000000">PROPERTYDEFINTIONS</font> statement.</p>
<h4><a name="1054358">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054359">int lefwEndPropDef(</a></font>
</dl>
<h3><a name="lefwIntPropDef"></a><a name="1078099">lefwIntPropDef</a></h3>
<p><a name="1078100">Writes an integer property definition in the </a><font size="2" face="'Courier New'" color="#000000">PROPERTYDEFINITIONS</font> statement. The <font size="2" face="'Courier New'" color="#000000">lefwIntProperty</font> routine is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">PROPERTYDEFINITIONS</font> statement.</p>
<h4><a name="1078101">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1078102">int lefwIntPropDef(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>objType</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>propName</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>leftRange</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>rightRange</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>propValue</em></font>)</font>
</dl>
<h4><a name="1078103">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1078136"><font size="2" face="'Courier New'" color="#000000"><em>leftRange</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>rightRange</em></font></strong>
</p>
<blockquote><a name="1088553">Optional arguments that limit integer property values to a specified range. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments. </blockquote>
<p>
<strong></strong>
<strong><a name="1078144"><font size="2" face="'Courier New'" color="#000000"><em>objType</em></font></a></strong>
</p>
<blockquote><a name="1088564">Specifies the object type for which you are defining properties. <br></a><font color="#000000"><em>Value: </em></font><font size="2" face="'Courier New'" color="#000000">LIBRARY</font>, <font size="2" face="'Courier New'" color="#000000">LAYER</font>, <font size="2" face="'Courier New'" color="#000000">VIA</font>, <font size="2" face="'Courier New'" color="#000000">VIARULE</font>, <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font>, <font size="2" face="'Courier New'" color="#000000">MACRO</font>, or <font size="2" face="'Courier New'" color="#000000">PIN</font></blockquote>
<p>
<strong></strong>
<strong><a name="1078150"><font size="2" face="'Courier New'" color="#000000"><em>propName</em></font></a></strong>
</p>
<blockquote><a name="1088571">Specifies a unique property name for the object type.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1088583"><font size="2" face="'Courier New'" color="#000000"><em>propValue</em></font></a></strong>
</p>
<blockquote><a name="1088584">Optional argument that specifies an integer value for an object type. Specify </a><font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument.</blockquote>
<h3><a name="lefwRealPropDef"></a><a name="1078167">lefwRealPropDef</a></h3>
<p><a name="1078177">Writes a real property definition in the </a><font size="2" face="'Courier New'" color="#000000">PROPERTYDEFINITIONS</font> statement. The <font size="2" face="'Courier New'" color="#000000">lefwRealPropDef</font> routine is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">PROPERTYDEFINITIONS</font> statement.</p>
<h4><a name="1078169">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1078185">int lefwRealPropDef(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>objType</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>propName</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>leftRange</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>rightRange</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>propValue</em></font>)</font>
</dl>
<h4><a name="1078170">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1078193"><font size="2" face="'Courier New'" color="#000000"><em>leftRange</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>rightRange</em></font></strong>
</p>
<blockquote><a name="1088589">Optional arguments that limit real property values to a specified range. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<p>
<strong></strong>
<strong><a name="1078194"><font size="2" face="'Courier New'" color="#000000"><em>objType</em></font></a></strong>
</p>
<blockquote><a name="1088596">Specifies the object type for which you are defining properties. <br></a><font color="#000000"><em>Value: </em></font><font size="2" face="'Courier New'" color="#000000">LIBRARY</font>, <font size="2" face="'Courier New'" color="#000000">LAYER</font>, <font size="2" face="'Courier New'" color="#000000">VIA</font>, <font size="2" face="'Courier New'" color="#000000">VIARULE</font>, <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font>, <font size="2" face="'Courier New'" color="#000000">MACRO</font>, or <font size="2" face="'Courier New'" color="#000000">PIN</font></blockquote>
<p>
<strong></strong>
<strong><a name="1078195"><font size="2" face="'Courier New'" color="#000000"><em>propName</em></font></a></strong>
</p>
<blockquote><a name="1088603">Specifies a unique property name for the object type.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1078196"><font size="2" face="'Courier New'" color="#000000"><em>propValue</em></font></a></strong>
</p>
<blockquote><a name="1088610">Optional argument that specifies a real value for an object type. Specify </a><font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument.</blockquote>
<h3><a name="lefwStringPropDef"></a><a name="1078211">lefwStringPropDef</a></h3>
<p><a name="1078227">Writes a string property definition in the </a><font size="2" face="'Courier New'" color="#000000">PROPERTYDEFINITIONS</font> statement. The <font size="2" face="'Courier New'" color="#000000">lefwStringPropDef</font> routine is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">PROPERTYDEFINITIONS</font> statement.</p>
<h4><a name="1078213">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1078239">int lefwStringPropDef(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>objType</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>propName</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>leftRange</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>rightRange</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>propValue</em></font>)</font>
</dl>
<h4><a name="1078249">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1078256"><font size="2" face="'Courier New'" color="#000000"><em>leftRange</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>rightRange</em></font></strong>
</p>
<blockquote><a name="1088617">Optional arguments that limit property values to a specified range. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<p>
<strong></strong>
<strong><a name="1078257"><font size="2" face="'Courier New'" color="#000000"><em>objType</em></font></a></strong>
</p>
<blockquote><a name="1088624">Specifies the object type for which you are defining properties. <br></a><font color="#000000"><em>Value: </em></font><font size="2" face="'Courier New'" color="#000000">LIBRARY</font>, <font size="2" face="'Courier New'" color="#000000">LAYER</font>, <font size="2" face="'Courier New'" color="#000000">VIA</font>, <font size="2" face="'Courier New'" color="#000000">VIARULE</font>, <font size="2" face="'Courier New'" color="#000000">NONDEFAULTRULE</font>, <font size="2" face="'Courier New'" color="#000000">MACRO</font>, or <font size="2" face="'Courier New'" color="#000000">PIN</font></blockquote>
<p>
<strong></strong>
<strong><a name="1078258"><font size="2" face="'Courier New'" color="#000000"><em>propName</em></font></a></strong>
</p>
<blockquote><a name="1088631">Specifies a unique property name for the object type.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1078259"><font size="2" face="'Courier New'" color="#000000"><em>propValue</em></font></a></strong>
</p>
<blockquote><a name="1088638">Optional argument that specifies a string value for an object type. Specify </a><font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument.</blockquote>
<h3><a name="1066711">Property Definitions Examples</a></h3>
<p><a name="1066712">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwPropDefCbkType</font>. This example does not show all of the combinations of Property Definitions defined.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1066713">int propDefCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwPropDefCbkType) {<dd> printf(&#34;Type is not lefwPropDefCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd> res = lefwStartPropDef();<dd> CHECK_RES(res);<dd> res = lefwStringPropDef(&#34;LIBRARY&#34;, &#34;NAME&#34;, 0, 0,<dd> &nbsp;&nbsp;&nbsp;&nbsp;&#34;Cadence96&#34;);<dd> CHECK_RES(res);<dd> res = lefwIntPropDef(&#34;LIBRARY&#34;, &#34;intNum&#34;, 0, 0, 20);<dd> CHECK_RES(res);<dd> res = lefwRealPropDef(&#34;LIBRARY&#34;, &#34;realNum&#34;, 0, 0, 21.22);<dd> CHECK_RES(res);<dd> res = lefwEndPropDef();<dd> CHECK_RES(res);<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="1066709">Same&#45;Net Spacing</a></h2>
<p><a name="1054420">Same&#45;Net Spacing routines write a LEF </a><font size="2" face="'Courier New'" color="#000000">SPACING</font> statement. The <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement is optional and can be used only once in a LEF file. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement, see &#34;Same&#45;Net Spacing&#34; in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1039060">You must use the </a><font size="2" face="'Courier New'" color="#000000">lefwStartSpacing</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndSpacing</font> routines to start and end the <font size="2" face="'Courier New'" color="#000000">SPACING</font> statement. The <font size="2" face="'Courier New'" color="#000000">lefwSpacing</font> routine must be included between these routines.</p>
<p><a name="1070830">For examples of the routines described here, see </a><a href="#1066744" title="6"><font color="Blue"><u>"Same&#45;Net Spacing Examples"</u></font></a><a href="#1066744" title="6"></a>.</p>
<p><a name="1039061">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1039133">lefwStartSpacing</a></h3>
<p><a name="1061336">Writes the </a><font size="2" face="'Courier New'" color="#000000">SPACING</font> statement. </p>
<h4><a name="1054435">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054436">int lefwStartSpacing()</a></font>
</dl>
<h3><a name="1039148">lefwEndSpacing</a></h3>
<p><a name="1061344">Ends the </a><font size="2" face="'Courier New'" color="#000000">SPACING</font> statement.</p>
<h4><a name="1054463">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054464">int lefwEndSpacing()</a></font>
</dl>
<h3><a name="1039159">lefwSpacing</a></h3>
<p><a name="1061369">Writes the </a><font size="2" face="'Courier New'" color="#000000">SAMENET</font> statement. The <font size="2" face="'Courier New'" color="#000000">SAMENET</font> statement is required and can be used more than once.</p>
<h4><a name="1054488">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054489">int lefwSpacing(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName1</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>layerName2</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>minSpace</em></font>,<dd>const char* stack)</font>
</dl>
<h4><a name="1061361">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1061362"><font size="2" face="'Courier New'" color="#000000"><em>layerName1</em></font></a><font color="#000000"><em>, </em></font><font size="2" face="'Courier New'" color="#000000"><em>layerName2</em></font></strong>
</p>
<blockquote><a name="1088645">Specify the names of the layers for which the same&#45;net spacing rule applies. You can specify spacing rules for routing layers and cut layers. For a routing layer, the same&#45;net spacing rule is defined by specifying the same layer name twice. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1061363"><font size="2" face="'Courier New'" color="#000000"><em>minSpace</em></font></a></strong>
</p>
<blockquote><a name="1088656">Specifies the minimum spacing.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1054499"><font size="2" face="'Courier New'" color="#000000">stack</font></a></strong>
</p>
<blockquote><a name="1088663">Optional argument that allows stacked vias at a routing layer. Specify </a><font size="2" face="'Courier New'" color="#000000">NULL</font> to ignore this argument.</blockquote>
<h3><a name="1066744">Same&#45;Net Spacing Examples</a></h3>
<p><a name="1066745">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwSpacingCbkType</font>.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1066746">int spacingCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwSpacingCbkType) {<dd> printf(&#34;Type is not lefwSpacingCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd><dd> res = lefwStartSpacing();<dd> CHECK_RES(res);<dd> res = lefwSpacing(&#34;CUT01&#34;, &#34;CA&#34;, 1.5, NULL);<dd> CHECK_RES(res);<dd> res = lefwEndSpacing();<dd> CHECK_RES(res);<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="1066742">Site</a></h2>
<p><a name="1075357">The Site routines write a LEF </a><font size="2" face="'Courier New'" color="#000000">SITE</font> statement. The <font size="2" face="'Courier New'" color="#000000">SITE</font> statement is optional and can be used more than once in a LEF file. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">SITE</font> statement, see <a href="../lefdefref/LEFSyntax.html#Site" target="external_window"><font color="#0000ff"><u>&#34;Site&#34;</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1078629">Each </a><font size="2" face="'Courier New'" color="#000000">SITE</font> statement must be defined with a <font size="2" face="'Courier New'" color="#000000">lefwSite</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndSite</font> routine.</p>
<p><a name="1075363">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1040655">lefwSite</a></h3>
<p><a name="1061380">Writes a </a><font size="2" face="'Courier New'" color="#000000">SITE</font> statement. </p>
<h4><a name="1054513">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054514">int lefwSite(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>siteName</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>classType</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>symmetry</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>width</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>height</em></font>)</font>
</dl>
<h4><a name="1054525">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1074554"><font size="2" face="'Courier New'" color="#000000"><em>classType</em></font></a></strong>
</p>
<blockquote><a name="1088670">Specifies whether the site is a core site or an I&#47;O pad site. <br></a><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">PAD</font> or <font size="2" face="'Courier New'" color="#000000">CORE</font>.</blockquote>
<p>
<strong></strong>
<strong><a name="1074550"><font size="2" face="'Courier New'" color="#000000"><em>siteName</em></font></a></strong>
</p>
<blockquote><a name="1088677">Specifies the name of the placement site.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1054529"><font size="2" face="'Courier New'" color="#000000"><em>symmetry</em></font></a></strong>
</p>
<blockquote><a name="1088684">Specifies how the site is symmetrical in normal orientation. <br></a><font color="#000000"><em>Value:</em></font> Specify one of the following:<font size="2" face="'Courier New'" color="#000000"> </font></blockquote>
<table summary="" border="0" cellpadding="4" cellspacing="0" bordercolor="#D3D3D3" width="648">
<caption>
<tr>
<td cellpadding="4" valign="top" width="192">
<p><a name="1072519">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top" width="120">
<p><a name="1072521"><font size="2" face="'Courier New'" color="#000000">X</font></a></p>
</td>
<td cellpadding="4" valign="top" width="336">
<p><a name="1072523">Defines the site as symmetric about the x axis.</a></p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1072525">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1072527"><font size="2" face="'Courier New'" color="#000000">Y</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1072529">Defines the site as symmetric about the y axis.</a></p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1072531">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1072533"><font size="2" face="'Courier New'" color="#000000">R90</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1072535">Defines the site as symmetric when rotated 90 degrees.</a></p>
</td>
</tr>
</table>
<p>
<strong></strong>
<strong><a name="1066780"><font size="2" face="'Courier New'" color="#000000"><em>width</em></font></a>,<font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>height</em></font></strong>
</p>
<blockquote><a name="1088691">Specify the dimensions of the site in normal (or north) orientation, in microns.</a></blockquote>
<h3><a name="1072500">lefwEndSite</a></h3>
<p><a name="1072505">Ends a </a><font size="2" face="'Courier New'" color="#000000">SITE</font> statement. </p>
<h4><a name="1072551">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1072584">int lefwEndSite(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>siteName</em></font>)</font>
</dl>
<h4><a name="1072552">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1072585"><font size="2" face="'Courier New'" color="#000000"><em>siteName</em></font></a> </strong>
</p>
<blockquote><a name="1088698">Specifies the name of the placement site.</a></blockquote>
<h3><a name="lefwSiteRowPattern"></a><a name="1080970">lefwSiteRowPattern </a></h3>
<p><a name="1080971">Writes a </a><font size="2" face="'Courier New'" color="#000000">ROWPATTERN</font> statement in the SITE statement. The <font size="2" face="'Courier New'" color="#000000">ROWPATTERN</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">SITE</font> statement.</p>
<h4><a name="1080977">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080978">lefwSiteRowPattern( const char* siteName, <dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>orient</em></font>)</font>
</dl>
<h4><a name="1080979">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1080980"><font size="2" face="'Courier New'" color="#000000"><em>siteName</em></font></a></strong>
</p>
<blockquote><a name="1088709">Specifies the name of a previously defined site. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1080982"><font size="2" face="'Courier New'" color="#000000"><em>orient</em></font></a> </strong>
</p>
<blockquote><a name="1088720">Specifies the orientation for the previously defined site. <br></a><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">0</font> to <font size="2" face="'Courier New'" color="#000000">7</font>. For more information, see <a href="ch1Intro.html#1019049" title="1"><font color="Blue"><u>"Orientation Codes"</u></font></a><a href="ch1Intro.html#1019049" title="1"></a>.</blockquote>
<h3><a name="lefwSiteRowPatternStr"></a><a name="1080998">lefwSiteRowPatternStr </a></h3>
<p><a name="1081003">Also writes a </a><font size="2" face="'Courier New'" color="#000000">ROWPATTERN</font> statement. This routine is the same as the <font size="2" face="'Courier New'" color="#000000">lefwSiteRowPattern</font> routine, with the exception of the <font size="2" face="'Courier New'" color="#000000"><em>orient</em></font> argument, which takes a string instead of an integer. The <font size="2" face="'Courier New'" color="#000000">ROWPATTERN</font> statement is optional and can be used more than once in a <font size="2" face="'Courier New'" color="#000000">SITE</font> statement.</p>
<h4><a name="1081007">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1081008">lefwSiteRowPattern( const char* siteName, <dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>orient</em></font>)</font>
</dl>
<h4><a name="1081009">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1081010"><font size="2" face="'Courier New'" color="#000000"><em>siteName</em></font></a></strong>
</p>
<blockquote><a name="1088727">Specifies the name of a previously defined site. </a></blockquote>
<p>
<strong></strong>
<strong><a name="1081011"><font size="2" face="'Courier New'" color="#000000"><em>orient</em></font></a></strong>
</p>
<blockquote><a name="1088738">Specifies the orientation for the previously defined site. <br></a><font color="#000000"><em>Value: </em></font><font size="2" face="'Courier New'" color="#000000">N</font>, <font size="2" face="'Courier New'" color="#000000">W</font>, <font size="2" face="'Courier New'" color="#000000">S</font>, <font size="2" face="'Courier New'" color="#000000">E</font>, <font size="2" face="'Courier New'" color="#000000">FN</font>, <font size="2" face="'Courier New'" color="#000000">FW</font>, <font size="2" face="'Courier New'" color="#000000">FS</font>, or <font size="2" face="'Courier New'" color="#000000">FE</font>.</blockquote>
<h3><a name="1072501">Site Examples</a></h3>
<p><a name="1072502">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwSiteCbkType</font>.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1066793">int siteCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwSiteCbkType) {<dd> printf(&#34;Type is not lefwSiteCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd><dd> res = lefwSite(&#34;CORE1&#34;, &#34;CORE&#34;, &#34;X&#34;, 67.2, 6);<dd> CHECK_RES(res);<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="1066789">Units</a></h2>
<p><a name="1066783">Units routines write a LEF </a><font size="2" face="'Courier New'" color="#000000">UNITS</font> statement. The <font size="2" face="'Courier New'" color="#000000">UNITS</font> statement is optional and can be used only once in a LEF file. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">UNITS</font> statement, see <a href="../lefdefref/LEFSyntax.html#Units" target="external_window"><font color="#0000ff"><u>&#34;Units&#34;</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1039244">You must use the </a><font size="2" face="'Courier New'" color="#000000">lefwStartUnits</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndSpacing</font> routines to start and end the <font size="2" face="'Courier New'" color="#000000">UNITS</font> statement. The <font size="2" face="'Courier New'" color="#000000">lefwUnits</font> routine must be included between these routines.</p>
<p><a name="1070837">For examples of the routines described here, see </a><a href="#1066839" title="6"><font color="Blue"><u>"Units Examples"</u></font></a><a href="#1066839" title="6"></a>.</p>
<p><a name="1042513">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1039328">lefwStartUnits</a></h3>
<p><a name="1061410">Starts the </a><font size="2" face="'Courier New'" color="#000000">UNITS</font> statement. </p>
<h4><a name="1077737">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054546">int lefwStartUnits()</a></font>
</dl>
<h3><a name="1039368">lefwEndUnits</a></h3>
<p><a name="1061422">Ends the </a><font size="2" face="'Courier New'" color="#000000">UNITS</font> statement.</p>
<h4><a name="1054573">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054574">int lefwEndUnits()</a></font>
</dl>
<h3><a name="1039317">lefwUnits</a></h3>
<p><a name="1061430">Writes a </a><font size="2" face="'Courier New'" color="#000000">UNITS</font> statement. The <font size="2" face="'Courier New'" color="#000000">UNITS</font> statement is required whenever the <font size="2" face="'Courier New'" color="#000000">lefwStartSpacing</font> routine is specified.</p>
<h4><a name="1054598">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054599">int lefwUnits(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>time</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>capacitance</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>resistance</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>power</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>current</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>voltage</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>database</em></font>)</font>
</dl>
<h4><a name="1054610">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1054613"><font size="2" face="'Courier New'" color="#000000"><em>time</em></font></a></strong>
</p>
<blockquote><a name="1088745">Optional argument that specifies a </a><font size="2" face="'Courier New'" color="#000000">TIME</font>&nbsp;<font size="2" face="'Courier New'" color="#000000">NANOSECONDS</font> statement. This interprets one LEF time unit as one nanosecond. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument. </blockquote>
<p>
<strong></strong>
<strong><a name="1054614"><font size="2" face="'Courier New'" color="#000000"><em>capacitance</em></font></a></strong>
</p>
<blockquote><a name="1088756">Optional argument that specifies a </a><font size="2" face="'Courier New'" color="#000000">CAPACITANCE</font> <font size="2" face="'Courier New'" color="#000000">PICOFARADS</font> statement. This interprets one LEF capacitance unit as one picofarad. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<p>
<strong></strong>
<strong><a name="1063967"><font size="2" face="'Courier New'" color="#000000"><em>resistance</em></font></a></strong>
</p>
<blockquote><a name="1088763">Optional argument that specifies a </a><font size="2" face="'Courier New'" color="#000000">RESISTANCE</font> <font size="2" face="'Courier New'" color="#000000">OHMS</font> statement. This interprets one LEF resistance unit as one ohm. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<p>
<strong></strong>
<strong><a name="1063968"><font size="2" face="'Courier New'" color="#000000"><em>power</em></font></a></strong>
</p>
<blockquote><a name="1088770">Optional argument that specifies a </a><font size="2" face="'Courier New'" color="#000000">POWER</font> <font size="2" face="'Courier New'" color="#000000">MILLIWATTS</font> statement. This interprets one LEF power unit as one milliwatt. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<p>
<strong></strong>
<strong><a name="1063980"><font size="2" face="'Courier New'" color="#000000"><em>current</em></font></a></strong>
</p>
<blockquote><a name="1088777">Optional argument that specifies a </a><font size="2" face="'Courier New'" color="#000000">CURRENT</font> <font size="2" face="'Courier New'" color="#000000">MILLIAMPS</font> statement. This interprets one LEF current unit as one milliamp. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<p>
<strong></strong>
<strong><a name="1063981"><font size="2" face="'Courier New'" color="#000000"><em>voltage</em></font></a></strong>
</p>
<blockquote><a name="1088784">Optional argument that specifies a </a><font size="2" face="'Courier New'" color="#000000">VOLTAGE</font> <font size="2" face="'Courier New'" color="#000000">VOLTS</font> statement. This interprets one LEF voltage unit as one volt. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<p>
<strong></strong>
<strong><a name="1054619"><font size="2" face="'Courier New'" color="#000000"><em>database</em></font></a></strong>
</p>
<blockquote><a name="1088791">Optional argument that specifies a </a><font size="2" face="'Courier New'" color="#000000">DATABASE</font> <font size="2" face="'Courier New'" color="#000000">MICRONS</font> statement. This interprets one LEF distance unit as multiplied when converted into database units. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<h3><a name="1075831">lefwUnitsFrequency</a></h3>
<p><a name="1075835">Writes a </a><font size="2" face="'Courier New'" color="#000000">FREQUENCY</font> statement in the <font size="2" face="'Courier New'" color="#000000">UNITS</font> statement. The <font size="2" face="'Courier New'" color="#000000">FREQUENCY</font> statement is optional and can be used only once in a <font size="2" face="'Courier New'" color="#000000">UNITS</font> statement. </p>
<h4><a name="1075832">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1075836">int lefwUnitsFrequency(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>frequency</em></font>)</font>
</dl>
<h4><a name="1075833">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1075837"><font size="2" face="'Courier New'" color="#000000"><em>frequency</em></font></a></strong>
</p>
<blockquote><a name="1088798">Specifies a </a><font size="2" face="'Courier New'" color="#000000">FREQUENCY</font> <font size="2" face="'Courier New'" color="#000000">MEGAHERTZ</font> statement. This interprets one LEF frequency unit as one megahertz.</blockquote>
<h3><a name="1066839">Units Examples</a></h3>
<p><a name="1066840">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwUnitsCbkType</font>.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1066841">int unitsCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwUnitsCbkType) {<dd> printf(&#34;Type is not lefwUnitsCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd> res = lefwStartUnits();<dd> CHECK_RES(res);<dd> res = lefwUnits(100, 10, 10000, 10000, 10000, 1000, 0);<dd> CHECK_RES(res);<dd> res = lefwEndUnits();<dd> CHECK_RES(res);<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="1071910">Use Min Spacing</a></h2>
<p><a name="1071914">The Use Min Spacing routine writes a LEF </a><font size="2" face="'Courier New'" color="#000000">USEMINSPACING</font> statement, which defines how minimum spacing is calculated for obstruction geometries. The <font size="2" face="'Courier New'" color="#000000">USEMINSPACING</font> statement is optional and can be used more than once in a LEF file.</p>
<p><a name="1072223">For syntax information about the LEF </a><font size="2" face="'Courier New'" color="#000000">USEMINSPACING</font> statement, see <font color="#0000ff"><u>"Use Min Spacing"</u></font> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1080119">This routine returns </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="lefwUseMinSpacing"></a><a name="1071948">lefwUseMinSpacing</a></h3>
<p><a name="1071949">Writes a </a><font size="2" face="'Courier New'" color="#000000">USEMINSPACING</font> statement. </p>
<h4><a name="1071980">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1071987">int lefwUseMinSpacing(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>type</em></font>,<dd>const char* <font color="#000000"><em>onOff</em></font>)</font>
</dl>
<h4><a name="1071981">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1071998"><font color="#000000"><em>type</em></font></a></strong>
</p>
<blockquote><a name="1088805">Specifies that the minimum spacing applies to obstruction geometries.<br></a><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">OBS</font></blockquote>
<p>
<strong></strong>
<strong><a name="1071999"><font color="#000000"><em>onOff</em></font></a></strong>
</p>
<blockquote><a name="1088812">Specifies how to calculate the minimum spacing. <br>Value: Specify one of the following: </a></blockquote>
<table summary="" border="0" cellpadding="4" cellspacing="0" bordercolor="#D3D3D3" width="648">
<caption>
<tr>
<td cellpadding="4" valign="top" width="192">
<p><a name="1077672">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top" width="120">
<p><a name="1077674"><font size="2" face="'Courier New'" color="#000000">ON</font></a></p>
</td>
<td cellpadding="4" valign="top" width="336">
<p><a name="1077676">Spacing is computed as if the </a><font size="2" face="'Courier New'" color="#000000">MACRO</font> <font size="2" face="'Courier New'" color="#000000">OBS</font> shapes were min&#45;width wires. Some LEF models abstract many min&#45;width wires as a single large <font size="2" face="'Courier New'" color="#000000">OBS</font> shape; therefore using wide wire spacing would be too conservative.</p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1077678">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1077680"><font size="2" face="'Courier New'" color="#000000">OFF</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1077682">Spacing is computed to </a><font size="2" face="'Courier New'" color="#000000">MACRO OBS</font> shapes as if they were actual routing shapes. A wide <font size="2" face="'Courier New'" color="#000000">OBS</font> shape would use wide wire spacing rules, and a thin <font size="2" face="'Courier New'" color="#000000">OBS</font> shapes would use thin wire spacing rules.</p>
</td>
</tr>
</table>
<h2><a name="1071983">Version</a></h2>
<p><a name="1044938">The version routine writes a LEF </a><font size="2" face="'Courier New'" color="#000000">VERSION</font> statement. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">VERSION</font> statement, see <a href="../lefdefref/LEFSyntax.html#Version" target="external_window"><font color="#0000ff"><u>&#34;Version&#34;</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1064739">The </a><font size="2" face="'Courier New'" color="#000000">VERSION</font> statement is part of the LEF file header (which also includes the <font size="2" face="'Courier New'" color="#000000">BUSBITCHARS</font>, and <font size="2" face="'Courier New'" color="#000000">DIVIDERCHAR</font> statements). If the statements in the header section are not defined, many applications assume default values for them. However, the default values are not formally part of the language definition; therefore you cannot be sure that the same assumptions are used in all applications. You should always explicitly define these values. </p>
<p><a name="1044943">This routine returns </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1040899">lefwVersion</a></h3>
<p><a name="1061454">Writes a </a><font size="2" face="'Courier New'" color="#000000">VERSION</font> statement. The <font size="2" face="'Courier New'" color="#000000">VERSION</font> statement can be used only once in a LEF file.</p>
<h4><a name="1054633">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054634">int lefwVersion(<dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>vers1</em></font>,<dd>int <font size="2" face="'Courier New'" color="#000000"><em>vers2</em></font>)</font>
</dl>
<h4><a name="1054645">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1075438"><font size="2" face="'Courier New'" color="#000000"><em>vers1</em></font></a><font color="#000000"><em>, </em></font><font size="2" face="'Courier New'" color="#000000"><em>vers2</em></font></strong>
</p>
<blockquote><a name="1088819">Specify which version of the LEF syntax is being used. </a><font size="2" face="'Courier New'" color="#000000"><em>vers1</em></font> is the major value. <font size="2" face="'Courier New'" color="#000000"><em>vers2</em></font> is the minor value.</blockquote>
<h3><a name="1075439">Version Examples</a></h3>
<p><a name="1075440">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwVersionCbkType</font>.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1066879">int versionCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwVersionCbkType) {<dd> printf(&#34;Type is not lefwVersionCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd><dd> res = lefwVersion(5, 3);<dd> CHECK_RES(res);<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="1066875">Via</a></h2>
<p><a name="1039250">Via routines write a LEF </a><font size="2" face="'Courier New'" color="#000000">VIA</font> section. A <font size="2" face="'Courier New'" color="#000000">VIA</font> section is optional and can be used more than once in a LEF file. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">VIA</font> section, see <a href="../lefdefref/LEFSyntax.html#Via" target="external_window"><font color="#0000ff"><u>&#34;Via&#34;</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1081442">Each </a><font size="2" face="'Courier New'" color="#000000">VIA</font> section must start and end with the <font size="2" face="'Courier New'" color="#000000">lefwStartVia</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndVia</font> routines. The remaining via routines must be included between these routines.</p>
<p><a name="1081458">In addition to the routines described in this section, you can include a </a><font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement within a <font size="2" face="'Courier New'" color="#000000">VIA</font> section. For more information about these routines, see <a href="#1066631" title="6"><font color="Blue"><u>"Property"</u></font></a><a href="#1066631" title="6"></a>.</p>
<p><a name="1081468">For examples of the routines described here, see </a><a href="#1066962" title="6"><font color="Blue"><u>"Via Examples"</u></font></a><a href="#1066962" title="6"></a>.</p>
<p><a name="1064020">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful. </p>
<h3><a name="1039449">lefwStartVia</a></h3>
<p><a name="1061466">Starts a </a><font size="2" face="'Courier New'" color="#000000">VIA</font> section. </p>
<h4><a name="1054658">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054659">int lefwStartVia(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>isDefault</em></font>)</font>
</dl>
<h4><a name="1054666">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1054669"><font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font></a></strong>
</p>
<blockquote><a name="1088826">Specifies the name for the via.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1061473"><font size="2" face="'Courier New'" color="#000000"><em>isDefault</em></font></a></strong>
</p>
<blockquote><a name="1088833">Optional argument that identifies the via as the default via between the specified layers. </a></blockquote>
<table summary="" border="0" cellpadding="4" cellspacing="0" bordercolor="#D3D3D3" width="648">
<caption>
<tr>
<td cellpadding="4" valign="top" width="192">
<p><a name="1081663">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top" width="120">
<p><a name="1081665"><font size="2" face="'Courier New'" color="#000000">NULL</font></a></p>
</td>
<td cellpadding="4" valign="top" width="336">
<p><a name="1081667">Ignores the argument.</a></p>
</td>
</tr>
<tr>
<td cellpadding="4" valign="top">
<p><a name="1081669">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1081671"><font size="2" face="'Courier New'" color="#000000">DEFAULT</font></a></p>
</td>
<td cellpadding="4" valign="top">
<p><a name="1081673">Identifies the via as the default via.</a></p>
</td>
</tr>
</table>
<h3><a name="1039464">lefwEndVia</a></h3>
<p><a name="1061481">Ends the </a><font size="2" face="'Courier New'" color="#000000">VIA</font> section for the specified <font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font> value.</p>
<h4><a name="1054683">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054684">int lefwEndVia(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font>)</font>
</dl>
<h3><a name="1039519">lefwViaLayer</a></h3>
<p><a name="1061507">Writes a </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> statement for a via. Either a <font size="2" face="'Courier New'" color="#000000">LAYER</font> or a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement is required in a <font size="2" face="'Courier New'" color="#000000">VIA</font> section. A <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement can be used more than once for a via. </p>
<p><a name="1081369">If you specify this routine, you must also specify one of the following routines:</a></p>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a href="#lefwViaLayerPolygon" title="6" name="1081370"><font color="Blue"><u>lefwViaLayerPolygon</u></font></a><a href="#lefwViaLayerPolygon" title="6"></a> </td>
</tr>
</table>
</div>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a href="#1080506" title="6" name="1081372"><font color="Blue"><u>lefwViaLayerRect</u></font></a><a href="#1080506" title="6"></a> </td>
</tr>
</table>
</div>
<p><a name="1081374">You can also optionally specify the following routine:</a></p>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a href="#1039541" title="6" name="1081375"><font color="Blue"><u>lefwViaResistance</u></font></a><a href="#1039541" title="6"></a> </td>
</tr>
</table>
</div>
<h4><a name="1054748">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054749">int lefwViaLayer(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>)</font>
</dl>
<h4><a name="1054760">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1061511"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088840">Specifies the layer on which to create the rectangles that make up the via. Normal vias have exactly three layers used: a cut layer and two layers that touch the cut layer (routing or masterslice). </a></blockquote>
<h3><a name="lefwViaLayerPolygon"></a><a name="1039530">lefwViaLayerPolygon </a></h3>
<p><a name="1080507">Writes a </a><font size="2" face="'Courier New'" color="#000000">POLYGON</font> statement for a via. Either a <font size="2" face="'Courier New'" color="#000000">POLYGON</font> or <font size="2" face="'Courier New'" color="#000000">RECT</font> statement is required if a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement is specified in a <font size="2" face="'Courier New'" color="#000000">VIA</font> section, and can be used more than once. </p>
<h4><a name="1080523">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080524">lefwViaLayerPolygon( <dd>int num_polys, <dd>double* xl, <dd>double* yl)</a></font>
</dl>
<h4><a name="1080525">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1080526"><font size="2" face="'Courier New'" color="#000000"><em>num_polys</em></font></a></strong>
</p>
<blockquote><a name="1088847">Specifies the number of polygon sides.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1080528"><font size="2" face="'Courier New'" color="#000000"><em>xl</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yl</em></font></strong>
</p>
<blockquote><a name="1088854">Specifies a sequence of points to generate a polygon geometry. The polygon edges must be parallel to the x axis, the y axis, or at a 45&#45;degree angle. The polygon is generated by connecting each successive point, then connecting the first and last points.</a></blockquote>
<h3><a name="1080506">lefwViaLayerRect</a></h3>
<p><a name="1064100">Writes a </a><font size="2" face="'Courier New'" color="#000000">RECT</font> statement. Either a <font size="2" face="'Courier New'" color="#000000">POLYGON</font> or <font size="2" face="'Courier New'" color="#000000">RECT</font> statement is required if a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement is specified in a <font size="2" face="'Courier New'" color="#000000">VIA</font> section, and can be used more than once.</p>
<h4><a name="1066937">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054777">int lefwViaLayerRect(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>x1l,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>y1l</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>x2l</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>y2l</em></font>)</font>
</dl>
<h4><a name="1054784">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1061213"><font size="2" face="'Courier New'" color="#000000"><em>x1l</em></font></a>, <font size="2" face="'Courier New'" color="#000000"><em>y1l</em></font>, <font size="2" face="'Courier New'" color="#000000"><em>x2l</em></font>, <font size="2" face="'Courier New'" color="#000000"><em>y2l</em></font></strong>
</p>
<blockquote><a name="1088861">Specify the points that make up the via.</a></blockquote>
<h3><a name="1039541">lefwViaResistance</a></h3>
<p><a name="1061564">Writes a </a><font size="2" face="'Courier New'" color="#000000">RESISTANCE</font> statement. The <font size="2" face="'Courier New'" color="#000000">RESISTANCE</font> statement is optional and can be used only once with a <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement in a <font size="2" face="'Courier New'" color="#000000">VIA</font> section. </p>
<h4><a name="1054800">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054801">int lefwViaResistance(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>resistance</em></font>)</font>
</dl>
<h4><a name="1054812">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1061217"><font size="2" face="'Courier New'" color="#000000"><em>resistance</em></font></a></strong>
</p>
<blockquote><a name="1088868">Specifies the total resistance of the via, in units of ohms, given as the resistance per via. Note that this is not a resistance per via&#45;cut value; it is the total resistance of the via.</a></blockquote>
<h3><a name="lefwViaViarule"></a><a name="1080578">lefwViaViarule</a></h3>
<p><a name="1080606">Writes a </a><font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement for the via. Either a <font size="2" face="'Courier New'" color="#000000">LAYER</font> or a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement is required in a <font size="2" face="'Courier New'" color="#000000">VIA</font> section. A <font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement can be used only once in a <font size="2" face="'Courier New'" color="#000000">VIA</font> section.</p>
<p><a name="1081396">If you specify this routine, you can optionally specify the following routines:</a></p>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a href="#lefwViaViaruleOffset" title="6" name="1081397"><font color="Blue"><u>lefwViaViaruleOffset</u></font></a><a href="#lefwViaViaruleOffset" title="6"></a> </td>
</tr>
</table>
</div>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a href="#lefwViaViaruleOrigin" title="6" name="1081411"><font color="Blue"><u>lefwViaViaruleOrigin</u></font></a><a href="#lefwViaViaruleOrigin" title="6"></a> </td>
</tr>
</table>
</div>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a href="#lefwViaViarulePattern" title="6" name="1081413"><font color="Blue"><u>lefwViaViarulePattern</u></font></a><a href="#lefwViaViarulePattern" title="6"></a> </td>
</tr>
</table>
</div>
<div>
<table border="0" cellspacing="0" cellpadding="3" summary="">
<tr valign="baseline">
<td width="31.999679999999998">
<div>
<nobr>
<font color="#000000"><img src="images/b_bullet.gif" alt="ParagraphBullet" border="0"></font>
</nobr>
</div>
</td>
<td><a href="#lefwViaViaruleRowCol" title="6" name="1081414"><font color="Blue"><u>lefwViaViaruleRowCol</u></font></a><a href="#lefwViaViaruleRowCol" title="6"></a> </td>
</tr>
</table>
</div>
<h4><a name="1080579">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080627">lefwViaViarule( <dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>viaRuleName</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>xCutSize</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>yCutSize</em></font>, <dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>botMetalLayer</em></font>, <dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>cutLayer</em></font>, <dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>topMetalLayer</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>xCutSpacing</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>yCutSpacing</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>xBotEnc</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>yBotEnc</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>xTopEnc</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>yTopEnc</em></font>)</font>
</dl>
<h4><a name="1080628">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1080629"><font size="2" face="'Courier New'" color="#000000"><em>viaRuleName</em></font></a></strong>
</p>
<blockquote><a name="1088875">Specifies the name of the LEF </a><font size="2" face="'Courier New'" color="#000000">VIARULE</font> that produced this via. This name must refer to a previouslydefined <font size="2" face="'Courier New'" color="#000000">VIARULE</font> <font size="2" face="'Courier New'" color="#000000">GENERATE</font> rule name. This indicates that the via is the result of automatic via generation, and that the via name is only used locally inside this LEF file. </blockquote>
<p>
<strong></strong>
<strong><a name="1080637"><font size="2" face="'Courier New'" color="#000000"><em>xCutSize</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yCutSize</em></font> </strong>
</p>
<blockquote><a name="1088882">Specifies the required width (</a><font size="2" face="'Courier New'" color="#000000"><em>xSize</em></font>) and height (<font size="2" face="'Courier New'" color="#000000"><em>ySize</em></font>) of the cut layer rectangles.</blockquote>
<p>
<strong></strong>
<strong><a name="1080638"><font size="2" face="'Courier New'" color="#000000"><em>botMetalLayer</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>cutLayer</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>topMetalLayer</em></font></strong>
</p>
<blockquote><a name="1088889">Specifies the required names of the bottom routing layer, cut layer, and top routing layer. These layers must be previously defined in layer definitions, and must match the layer names defined in the specified LEF </a><font size="2" face="'Courier New'" color="#000000"><em>viaRuleName</em></font>.</blockquote>
<p>
<strong></strong>
<strong><a name="1080639"><font size="2" face="'Courier New'" color="#000000"><em>xCutSpacing</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yCutSpacing</em></font></strong>
</p>
<blockquote><a name="1088896">Specifies the required x and y spacing between cuts. The spacing is measured between one cut edge and the next cut edge.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1080640"><font size="2" face="'Courier New'" color="#000000"><em>xBotEnc</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yBotEnc</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>xTopEnc</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yTopEnc</em></font></strong>
</p>
<blockquote><a name="1088903">Specifies the required x and y enclosure values for the bottom and top metal layers. The enclosure measures the distance from the cut array edge to the metal edge that encloses the cut array.</a></blockquote>
<h3><a name="lefwViaViaruleOffset"></a><a name="1080667">lefwViaViaruleOffset </a></h3>
<p><a name="1080704">Writes an </a><font size="2" face="'Courier New'" color="#000000">OFFSET</font> statement for the via. The <font size="2" face="'Courier New'" color="#000000">OFFSET</font> statement is optional with a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement and can be used only once in a <font size="2" face="'Courier New'" color="#000000">VIA</font> section.</p>
<h4><a name="1080707">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080708">lefwViaViaruleOffset(<dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>xBotOffset</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>yBotOffset</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>xTopOffset</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>yTopOffset</em></font>)</font>
</dl>
<h4><a name="1080709">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1080710"><font size="2" face="'Courier New'" color="#000000"><em>xBotOffset</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yBotOffset</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>xTopOffset</em></font><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yTopOffset</em></font></strong>
</p>
<blockquote><a name="1088910">Specifies the x and y offset for the bottom and top metal layers. By default, the </a><font size="2" face="'Courier New'" color="#000000">0,0</font> origin of the via is the center of the cut array and the enclosing metal rectangles. These values allow each metal layer to be offset independently. <br>After the non&#45;shifted via is computed, the metal layer rectangles are offset by adding the appropriate values--the x&#47;y <font size="2" face="'Courier New'" color="#000000"><em>BotOffset</em></font> values to the metal layer below the cut layer, and the x&#47; y <font size="2" face="'Courier New'" color="#000000"><em>TopOffset</em></font> values to the metal layer above the cut layer. These offsets are in addition to any offset caused by the <font size="2" face="'Courier New'" color="#000000"><em>ORIGIN</em></font> values.</blockquote>
<h3><a name="lefwViaViaruleOrigin"></a><a name="1080703">lefwViaViaruleOrigin </a></h3>
<p><a name="1080683">Writes an </a><font size="2" face="'Courier New'" color="#000000">ORIGIN</font> statement for the via. The <font size="2" face="'Courier New'" color="#000000">ORIGIN</font> statement is optional with a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement and can be used only once in a <font size="2" face="'Courier New'" color="#000000">VIA</font> section.</p>
<h4><a name="1080686">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080687">lefwViaViaruleOrigin( <dd>double </a><font size="2" face="'Courier New'" color="#000000"><em>xOffset</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>yOffset</em></font>)</font>
</dl>
<h4><a name="1080688">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1080689"><font size="2" face="'Courier New'" color="#000000"><em>xOffset</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>yOffset</em></font></strong>
</p>
<blockquote><a name="1088929">Specifies the x and y offset for all of the via shapes. By default, the </a><font size="2" face="'Courier New'" color="#000000">0,0</font> origin of the via is the center of the cut array and the enclosing metal rectangles. After the non&#45;shifted via is computed, all cut and metal rectangles are offset by adding these values. </blockquote>
<h3><a name="lefwViaViarulePattern"></a><a name="1080682">lefwViaViarulePattern </a></h3>
<p><a name="1080747">Writes a </a><font size="2" face="'Courier New'" color="#000000">PATTERN</font> statement for the via. The <font size="2" face="'Courier New'" color="#000000">PATTERN</font> statement is optional with a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement and can be used only once in a <font size="2" face="'Courier New'" color="#000000">VIA</font> section.</p>
<h4><a name="1080752">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080753">lefwViaViarulePattern( <dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>cutPattern</em></font>)</font>
</dl>
<h4><a name="1080754">Arguments </a></h4>
<p>
<strong></strong>
<strong><a name="1080755"><font size="2" face="'Courier New'" color="#000000"><em>cutPattern</em></font></a></strong>
</p>
<blockquote><a name="1088936">Specifies the cut pattern encoded as an ASCII string. This parameter is only required when some of the cuts are missing from the array of cuts, and defaults to &#34;all cuts are present,&#34; if not specified. </a></blockquote>
<h3><a name="lefwViaViaruleRowCol"></a><a name="1080746">lefwViaViaruleRowCol </a></h3>
<p><a name="1080668">Writes a </a><font size="2" face="'Courier New'" color="#000000">ROWCOL</font> statement for the via. The <font size="2" face="'Courier New'" color="#000000">ROWCOL</font> statement is optional with a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement and can be used only once in a <font size="2" face="'Courier New'" color="#000000">VIA</font> section.</p>
<h4><a name="1080671">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080672">lefwViaViaRuleRowCol( <dd>int </a><font size="2" face="'Courier New'" color="#000000"><em>numCutRows</em></font>, <dd>int <font size="2" face="'Courier New'" color="#000000"><em>numCutCols</em></font>)</font>
</dl>
<h4><a name="1080673">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1080674"><font size="2" face="'Courier New'" color="#000000"><em>numCutRows</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>numCutCols</em></font></strong>
</p>
<blockquote><a name="1088943">Specifies the number of cut rows and columns that make up the via array.</a></blockquote>
<h3><a name="1066962">Via Examples</a></h3>
<p><a name="1066963">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwViaCbkType</font>.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1066964">int viaCB (lefwCallbackType_e type,<dd> lefiUserData userData) {<dd> int res;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwViaCbkType) {<dd> printf(&#34;Type is not lefwViaCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd><dd> res = lefwStartVia(&#34;RX_PC&#34;, &#34;DEFAULT&#34;);<dd> CHECK_RES(res);<dd> res = lefwViaResistance(2);<dd> CHECK_RES(res);<dd> res = lefwViaForeign(&#34;IN1X&#34;, 0, 0, &#45;1);<dd> CHECK_RES(res);<dd> res = lefwViaLayer(&#34;RX&#34;);<dd> CHECK_RES(res);<dd> res = lefwViaLayerRect(&#45;0.7, &#45;0.7, 0.7, 0.7);<dd> CHECK_RES(res);<dd> res = lefwViaLayer(&#34;CUT12&#34;);<dd> CHECK_RES(res);<dd> res = lefwViaLayerRect(&#45;0.25, &#45;0.25, 0.25, 0.25);<dd> CHECK_RES(res);<dd> res = lefwRealProperty(&#34;realProperty&#34;, 32.33);<dd> CHECK_RES(res);<dd> res = lefwIntProperty(&#34;COUNT&#34;, 34);<dd> CHECK_RES(res);<dd> res = lefwEndVia(&#34;RX_PC&#34;);<dd> CHECK_RES(res);<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="ViaRule"></a><a name="1066960">Via Rule</a></h2>
<p><a name="1046773">Via Rule routines write a LEF </a><font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement. A <font size="2" face="'Courier New'" color="#000000">VIARULE</font> or a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> G<font size="2" face="'Courier New'" color="#000000">ENERATE</font> statement is required in a LEF file. You can create more than one <font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement in a LEF file. For syntax information about the LEF <font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement, see <a href="../lefdefref/LEFSyntax.html#ViaRule" target="external_window"><font color="#0000ff"><u>&#34;Via Rule&#34;</u></font></a> in the <br><font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1039264">You must use the </a><font size="2" face="'Courier New'" color="#000000">lefwStartViaRule</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndViaRule</font> routines to start and end the <font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement. The <font size="2" face="'Courier New'" color="#000000">lefwViaRuleLayer</font> and <font size="2" face="'Courier New'" color="#000000">lefwViaRuleVia</font> routines must be included between these routines.</p>
<p><a name="1070870">For examples of the routines described here, see </a><a href="#1067024" title="6"><font color="Blue"><u>"Via Rule Examples"</u></font></a><a href="#1067024" title="6"></a>.</p>
<p><a name="1064123">In addition to the routines described in this section, you can include a </a><font size="2" face="'Courier New'" color="#000000">PROPERTY</font> statement within a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement. For more information about these routines, see <a href="#1066631" title="6"><font color="Blue"><u>"Property"</u></font></a><a href="#1066631" title="6"></a>.</p>
<p><a name="1058708">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="1039563">lefwStartViaRule</a></h3>
<p><a name="1061580">Starts a </a><font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement. </p>
<h4><a name="1054876">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054877">int lefwStartViaRule(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>viaRuleName</em></font>)</font>
</dl>
<h4><a name="1075480">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1039574"><font size="2" face="'Courier New'" color="#000000"><em>viaRuleName</em></font></a></strong>
</p>
<blockquote><a name="1088950">Specifies the name to identify the via rule.</a></blockquote>
<h3><a name="1061589">lefwEndViaRule</a></h3>
<p><a name="1061593">Ends the </a><font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement for the specified <font size="2" face="'Courier New'" color="#000000"><em>viaRuleName</em></font> value.</p>
<h4><a name="1054901">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1054902">int lefwEndViaRule(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>viaRuleName</em></font>)</font>
</dl>
<h3><a name="lefwViaRuleLayer"></a><a name="1039585">lefwViaRuleLayer</a></h3>
<p><a name="1078407">Writes a </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> statement. The <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement is required and must be used exactly twice in a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement.</p>
<h4><a name="1078413">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1078414">int lefwViaRuleLayer(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>direction</em></font>, <dd>double <font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>maxWidth,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>overhang,<dd></em></font>double <font size="2" face="'Courier New'" color="#000000"><em>metalOverhang</em></font>)</font>
</dl>
<h4><a name="1078415">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1079329"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1088957">Specifies the top or bottom routing layer of the via.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1079327"><font size="2" face="'Courier New'" color="#000000"><em>direction</em></font></a></strong>
</p>
<blockquote><a name="1088964">Specifies the wire direction. If you specify a width range, the rule applies to wires of the specified </a><font size="2" face="'Courier New'" color="#000000"><em>direction</em></font> that fall within the range. Otherwise, the rule applies to all wires on the layer of the specified <font size="2" face="'Courier New'" color="#000000"><em>direction</em></font>. <br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">HORIZONTAL</font> or <font size="2" face="'Courier New'" color="#000000">VERTICAL</font></blockquote>
<p>
<strong></strong>
<strong><a name="1078418"><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font></strong>
</p>
<blockquote><a name="1088978">Optional arguments that specify a wire width range within which the wire must fall in order for the rule to apply. That is, the wire width must be greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font> and less than or equal to <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font>. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<p>
<strong></strong>
<strong><a name="1081694"><font size="2" face="'Courier New'" color="#000000"><em>overhang</em></font></a></strong>
</p>
<blockquote><a name="1088985">This argument is obsolete. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<p>
<strong></strong>
<strong><a name="1081698"><font size="2" face="'Courier New'" color="#000000"><em>metalOverhang</em></font></a></strong>
</p>
<blockquote><a name="1088992">This argument is obsolete. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<h3><a name="lefwViaRuleVia"></a><a name="1078406">lefwViaRuleVia</a></h3>
<p><a name="1078434">Writes a </a><font size="2" face="'Courier New'" color="#000000">VIA</font> statement. The <font size="2" face="'Courier New'" color="#000000">VIA</font> statement is required and can be used more than once after both <font size="2" face="'Courier New'" color="#000000">lefwViaRuleLayer</font> routines are used. </p>
<h4><a name="1078435">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1078436">int lefwViaRuleVia(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font>)</font>
</dl>
<h4><a name="1078437">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1078442"><font size="2" face="'Courier New'" color="#000000"><em>viaName</em></font></a></strong>
</p>
<blockquote><a name="1088999">Specifies a previously defined via to test for the current via rule. The first via in the list that can be placed at the location without design rule violations is selected. The vias must all have exactly three layers in them. The three layers must include the same routing layers as listed in the </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> statements of the <font size="2" face="'Courier New'" color="#000000">VIARULE</font>, and a cut layer that is between the two routing layers.</blockquote>
<h3><a name="1067024">Via Rule Examples</a></h3>
<p><a name="1067025">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwViaRuleCbkType</font>.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1067026">int viaRuleCB(lefwCallbackType_e c, lefiUserData ud) {<dd> int res;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwViaCbkType) {<dd> printf(&#34;Type is not lefwViaCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd><dd> res = lefwStartViaRule(&#34;VIALIST12&#34;);<dd> CHECK_RES(res);<dd> lefwAddComment(&#34;Break up the old lefwViaRule into 2<dd> &nbsp;&nbsp;&nbsp;&nbsp;routines&#34;);<dd> lefwAddComment(&#34;lefwViaRuleLayer and lefwViaRuleVia&#34;);<dd> res = lefwViaRuleLayer(&#34;M1&#34;, &#34;VERTICAL&#34;, 9.0, 9.6, 4.5,<dd> &nbsp;&nbsp;&nbsp;&nbsp;0);<dd> CHECK_RES(res);<dd> res = lefwViaRuleLayer(&#34;M2&#34;, &#34;HORIZONTAL&#34;, 3.0, 3.0, 0,<dd> &nbsp;&nbsp;&nbsp;&nbsp;0);<dd> CHECK_RES(res);<dd> res = lefwViaRuleVia(&#34;VIACENTER12&#34;);<dd> CHECK_RES(res);<dd> res = lefwStringProperty(&#34;vrsp&#34;, &#34;new&#34;);<dd> CHECK_RES(res);<dd> res = lefwIntProperty(&#34;vrip&#34;, 1);<dd> CHECK_RES(res);<dd> res = lefwRealProperty(&#34;vrrp&#34;, 4.5);<dd> CHECK_RES(res);<dd> res = lefwEndViaRule(&#34;VIALIST12&#34;);<dd> CHECK_RES(res);<dd><dd> return 0;}</a></font>
</dl>
<h2><a name="ViaRuleGenerate"></a><a name="1067022">Via Rule Generate</a></h2>
<p><a name="1039978">The Via Rule Generate routines write a LEF </a><font size="2" face="'Courier New'" color="#000000">VIARULE GENERATE</font> statement. A <font size="2" face="'Courier New'" color="#000000">VIARULE GENERATE</font> or a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> statement is required in a LEF file. You can create more than one <font size="2" face="'Courier New'" color="#000000">VIARULE GENERATE</font> statement in a LEF file. For syntax information the LEF <font size="2" face="'Courier New'" color="#000000">VIARULE GENERATE</font> statement, see <a href="../lefdefref/LEFSyntax.html#ViaRuleGenerate" target="external_window"><font color="#0000ff"><u>&#34;Via Rule Generate&#34;</u></font></a> in the <font color="#000000"><em>LEF&#47;DEF Language Reference</em></font>.</p>
<p><a name="1077343">You must use the </a><font size="2" face="'Courier New'" color="#000000">lefwStartViaRuleGen</font> and <font size="2" face="'Courier New'" color="#000000">lefwEndViaRuleGen</font> routines to start and end the <font size="2" face="'Courier New'" color="#000000">VIARULE</font> <font size="2" face="'Courier New'" color="#000000">GENERATE</font> statement. All other routines must be included between these routines.</p>
<p><a name="1067051">Use the Via Rule Generate routines to cover special wiring that is not explicitly defined in the Via Rule routines. </a></p>
<p><a name="1077354">All routines return </a><font size="2" face="'Courier New'" color="#000000">0</font> if successful.</p>
<h3><a name="lefwStartViaRuleGen"></a><a name="1040135">lefwStartViaRuleGen</a></h3>
<p><a name="1077356">Starts a </a><font size="2" face="'Courier New'" color="#000000">VIARULE</font> <font size="2" face="'Courier New'" color="#000000">GENERATE</font> statement. </p>
<h4><a name="1077361">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077366">int lefwStartViaRuleGen(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>viaRuleName</em></font>)</font>
</dl>
<h4><a name="1077367">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077368"><font size="2" face="'Courier New'" color="#000000"><em>viaRuleName</em></font></a></strong>
</p>
<blockquote><a name="1089006">Specifies the name for the via rule (formula).</a></blockquote>
<h3><a name="lefwEndViaRuleGen"></a><a name="1077391">lefwEndViaRuleGen</a></h3>
<p><a name="1077402">Ends the </a><font size="2" face="'Courier New'" color="#000000">VIARULE</font> <font size="2" face="'Courier New'" color="#000000">GENERATE</font> statement for the specified <font size="2" face="'Courier New'" color="#000000"><em>viaRuleName</em></font> value. </p>
<h4><a name="1077409">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077410">int lefwEndViaRuleGen(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>viaRuleName</em></font>)</font>
</dl>
<h3><a name="lefwViaRuleGenDefault"></a><a name="1077401">lefwViaRuleGenDefault </a></h3>
<p><a name="1080765">Writes a </a><font size="2" face="'Courier New'" color="#000000">DEFAULT</font> statement for the via.The <font size="2" face="'Courier New'" color="#000000">DEFAULT</font> statement specifies that the via rule can be used to generate vias for the default routing rule, and to supplement any <font size="2" face="'Courier New'" color="#000000">DEFAULT</font> fixed vias that might be predefined in the LEF <font size="2" face="'Courier New'" color="#000000">VIA</font> statement, as the router needs them. The <font size="2" face="'Courier New'" color="#000000">DEFAULT</font> statement is optional and can be used only once for a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> <font size="2" face="'Courier New'" color="#000000">GENERATE</font> statement. </p>
<h4><a name="1080771">Syntax </a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1080774">lefwViaRuleGenDefault()</a></font>
</dl>
<h3><a name="lefwViaRuleGenLayer"></a><a name="1080764">lefwViaRuleGenLayer</a></h3>
<p><a name="1077392">Writes a routing </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> statement. Either the routing <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement or the <font size="2" face="'Courier New'" color="#000000">ENCLOSURE</font> statement is required and must be used exactly twice in a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> <font size="2" face="'Courier New'" color="#000000">GENERATE</font> statement. </p>
<h4><a name="1077420">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077421">int lefwViaRuleGenLayer(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>,<dd>const char* <font size="2" face="'Courier New'" color="#000000"><em>direction</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>overhang</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>metalOverhang</em></font>)</font>
</dl>
<h4><a name="1077422">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1079342"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1089013">Specifies the routing layer for the top or bottom of the via.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1079340"><font size="2" face="'Courier New'" color="#000000"><em>direction</em></font></a></strong>
</p>
<blockquote><a name="1089020">Specifies the wire direction. If you specify a width range, the rule applies to wires of the specified </a><font size="2" face="'Courier New'" color="#000000"><em>direction</em></font> that fall within the range. Otherwise, the rule applies to all wires on the layer of the specified <font size="2" face="'Courier New'" color="#000000"><em>direction</em></font>. <br><font color="#000000"><em>Value:</em></font> <font size="2" face="'Courier New'" color="#000000">HORIZONTAL</font> or <font size="2" face="'Courier New'" color="#000000">VERTICAL</font></blockquote>
<p>
<strong></strong>
<strong><a name="1079350"><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font></strong>
</p>
<blockquote><a name="1089027">Optional arguments that specify a wire width range within which the wire must fall in order for the rule to apply. That is, the wire width must be greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font> and less than or equal to <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font>. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore these arguments.</blockquote>
<p>
<strong></strong>
<strong><a name="1077451"><font size="2" face="'Courier New'" color="#000000"><em>overhang</em></font></a></strong>
</p>
<blockquote><a name="1089034">This argument is obsolete. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<p>
<strong></strong>
<strong><a name="1079357"><font size="2" face="'Courier New'" color="#000000"><em>metalOverhang</em></font></a></strong>
</p>
<blockquote><a name="1089041">This argument is obsolete. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<h3><a name="lefwViaRuleGenLayer3"></a><a name="1077393">lefwViaRuleGenLayer3</a></h3>
<p><a name="1078491">Writes a cut </a><font size="2" face="'Courier New'" color="#000000">LAYER</font> statement. The cut <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement is required and can be used only once after either both <font size="2" face="'Courier New'" color="#000000">lefwViaRuleGenLayer</font>, or both <font size="2" face="'Courier New'" color="#000000">lefwViaRuleGenLayerEnclosure</font> routines are used. </p>
<h4><a name="1077473">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077474">int lefwViaRuleGenLayer3(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>xl</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>yl</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>xh</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>yh</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>xSpacing</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>ySpacing</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>resistance</em></font>)</font>
</dl>
<h4><a name="1077475">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1077476"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1089048">Specifies the cut layer for the generated via.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1077479"><font size="2" face="'Courier New'" color="#000000"><em>xl yl xh yh</em></font></a></strong>
</p>
<blockquote><a name="1089055">Specifies the location of the lower left contact cut rectangle.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1077483"><font size="2" face="'Courier New'" color="#000000"><em>xSpacing ySpacing</em></font></a></strong>
</p>
<blockquote><a name="1089062">Defines center&#45;to&#45;center spacing in the x and y dimensions to create an array of contact cuts.The number of cuts of an array in each direction is the most that can fit within the bounds of the intersection formed by the two special wires. Cuts are only generated where they do not violate stacked or adjacent via design rules.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1079366"><font size="2" face="'Courier New'" color="#000000"><em>resistance</em></font></a></strong>
</p>
<blockquote><a name="1089069">Optional argument that specifies the resistance of the cut layer, given as the resistance per contact cut. Specify </a><font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<h3><a name="lefwViaRuleGenLayerEnclosure"></a><a name="1077501">lefwViaRuleGenLayerEnclosure</a></h3>
<p><a name="1077512">Writes an </a><font size="2" face="'Courier New'" color="#000000">ENCLOSURE</font> statement. Either the <font size="2" face="'Courier New'" color="#000000">ENCLOSURE</font> statement or the routing <font size="2" face="'Courier New'" color="#000000">LAYER</font> statement is required and must be used exactly twice in a <font size="2" face="'Courier New'" color="#000000">VIARULE</font> <font size="2" face="'Courier New'" color="#000000">GENERATE</font> statement.</p>
<h4><a name="1077510">Syntax</a></h4>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1077521">int lefwViaRuleGenLayerEnclosure(<dd>const char* </a><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font>,<dd>double <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font>)</font>
</dl>
<h4><a name="1077522">Arguments</a></h4>
<p>
<strong></strong>
<strong><a name="1078536"><font size="2" face="'Courier New'" color="#000000"><em>layerName</em></font></a></strong>
</p>
<blockquote><a name="1089076">Specifies the routing layer for the top or bottom of the via.</a></blockquote>
<p>
<strong></strong>
<strong><a name="1077526"><font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font></strong>
</p>
<blockquote><a name="1089083">Specifies that the via must be covered by metal on two opposite sides by at least </a><font size="2" face="'Courier New'" color="#000000"><em>overhang1</em></font>, and on the other two sides by at least <font size="2" face="'Courier New'" color="#000000"><em>overhang2</em></font>. The via generation code then chooses the direction of overhang that best maximizes the number of cuts that can fit in the via.</blockquote>
<p>
<strong></strong>
<strong><a name="1079379"><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font></a><font size="2" face="'Courier New'" color="#000000"> </font><font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font></strong>
</p>
<blockquote><a name="1089090">Optional arguments that specify a wire width range within which the wire must fall in order for the rule to apply. That is, the wire width must be greater than or equal to </a><font size="2" face="'Courier New'" color="#000000"><em>minWidth</em></font> and less than or equal to <font size="2" face="'Courier New'" color="#000000"><em>maxWidth</em></font>. Specify <font size="2" face="'Courier New'" color="#000000">0</font> to ignore this argument.</blockquote>
<h3><a name="1067082">Via Rule Generate Examples</a></h3>
<p><a name="1067083">The following example shows a callback routine with the type </a><font size="2" face="'Courier New'" color="#000000">lefwViaRuleCbkType</font> with Generate.</p>
<dl>
<font size="2" face="'Courier New'" color="#000000"><a name="1067084">int viaRuleCB(lefwCallbackType_e c, lefiUserData ud) {<dd> int res;<dd><dd> &#47;&#47; Check if the type is correct<dd> if (type != lefwViaCbkType) {<dd> printf(&#34;Type is not lefwViaCbkType, terminate<dd> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writing.\n&#34;);<dd> return 1;<dd> }<dd><dd> res = lefwStartViaRuleGen(&#34;VIAGEN12&#34;);<dd> CHECK_RES(res);<dd> res = lefwViaRuleGenLayer(&#34;M1&#34;, &#34;VERTICAL&#34;, 0.1, 19, 1.4,<dd> &nbsp;&nbsp;&nbsp;&nbsp;0);<dd> CHECK_RES(res);<dd> res = lefwViaRuleGenLayer(&#34;M2&#34;, &#34;HORIZONTAL&#34;, 0, 0, 1.4,<dd> &nbsp;&nbsp;&nbsp;&nbsp;0);<dd> CHECK_RES(res);<dd> res = lefwViaRuleGenLayer3(&#34;V1&#34;, &#45;0.8, &#45;0.8, 0.8, 0.8,<dd> &nbsp;&nbsp;&nbsp;&nbsp;5.6, 6.0, 0.2);<dd> CHECK_RES(res);<dd> res = lefwEndViaRuleGen(&#34;VIAGEN12&#34;);<dd> CHECK_RES(res);<dd><dd> return 0;}</a></font>
</dl>
<p><a name="1067080">&nbsp;</a></p>
</div>
<br>
<a href="#pagetop">Return to top of page</a>
<hr>
<hr align="left">
<div style="text-align: left;">
<!-- Begin Buttons -->
<table width="650" cellpadding="0" cellspacing="0" border="0">
<tr>
<td height="20" width="59">
<a href="javascript:openLibrary()"><img src="../support/nav2_library.gif" border="0" alt="View Library" height="20" width="59"></a>
</td>
<td height="20" width="73">
<a href="lefapiTOC.html"><img src="../support/nav2_toc.gif" alt="Table of Contents" border="0"></a>
</td>
<td height="20" width="46">
<img src="../support/nav2_index_b.gif" border="0">
</td>
<td>
<a href="ch5LEFwritercallback.html"><img src="images/nav2_previous.gif" alt="Previous" border="0"></a>
</td>
<td>
<a href="ch7LEFcompressed.html"><img src="images/nav_next.gif" alt="Next" border="0"></a>
</td>
<td>
<a>
<a href="lefapi.pdf"><img src="../support/nav2_print.gif" border="0" alt="Open PDF to print book" height="20" width="114"></a>
</a>
</td>
<td height="20" width="61">
<img src="../support/nav2_black.gif" border="0" height="20" width="76">
</td>
<td height="20" width="76">
<a href="/feedback.htm"><img src="../support/nav2_feedback.gif" border="0" alt="Email Comments" height="20" width="76"></a>
</td>
<td height="20" width="43">
<a href="../cdsuser/help.html"><img src="../support/nav2_help.gif" border="0" alt="Help Using Documentation" height="20" width="43"></a>
</td>
<td height="20" width="37">
<a href="/exitsearch.htm"><img src="../support/nav2_exit.gif" border="0" alt="Shut Down Cadence Documentation Server" height="20" width="37"></a>
</td>
</tr>
</table>
<!-- End Buttons -->
</div>
<br>
<font size="-1" >
For support, see <a href="http://support.cadence.com" target="_blank">Cadence Online Support</a> service.</font>
<br>
<br>
<font size="-1" >
<font size="-1"><i>Copyright &#169; 2016, <a href ="http://www.cadence.com">Cadence Design Systems, Inc.</a></i></font>
</font>
<br>
<font size="-1" >
All rights reserved.</font>
<br>
<br>
</body>
</html>