// ***************************************************************************** // ***************************************************************************** // Copyright 2012 - 2014, Cadence Design Systems // // This file is part of the Cadence LEF/DEF Open Source // Distribution, Product Version 5.8. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or // implied. See the License for the specific language governing // permissions and limitations under the License. // // For updates, support, or to become part of the LEF/DEF Community, // check www.openeda.org for details. // // $Author: arakhman $ // $Revision: #11 $ // $Date: 2013/04/23 $ // $State: $ // ***************************************************************************** // ***************************************************************************** #ifndef lefrData_h #define lefrData_h #include #include #include #include #include "lefiDefs.hpp" #include "lefiUser.hpp" #include "lefiLayer.hpp" #include "lefiArray.hpp" #include "lefiUtil.hpp" #include "lefiMacro.hpp" #include "lefiPropType.hpp" #include "lefiCrossTalk.hpp" #include "lefiProp.hpp" #include "lefiNonDefault.hpp" #include "lefiVia.hpp" #include "lefiViaRule.hpp" #include "lefiUnits.hpp" #include "lefrReader.hpp" #define CURRENT_VERSION 5.8 #define RING_SIZE 10 #define IN_BUF_SIZE 16384 #define TOKEN_SIZE 4096 BEGIN_LEFDEF_PARSER_NAMESPACE struct lefCompareStrings { bool operator()(const std::string &lhs, const std::string &rhs) const { return std::strcmp(lhs.c_str(), rhs.c_str()) < 0; } }; typedef std::map lefAliasMap; typedef std::map lefStringMap; typedef std::map lefIntMap; typedef std::map lefDoubleMap; class lefrData { public: lefrData(); ~lefrData(); static void reset(); void initRead(); void doubleBuffer(); FILE* lefrFile; FILE* lefrLog; char lefPropDefType; char* arrayName; char* last; char* layerName; char* lefch; char* lefrFileName; char* macroName; char* ndName; char* next; char* nonDefaultRuleName; char* outMsg; char* pinName; char* shiftBuf; char* siteName; char* viaName; char* viaRuleName; double layerCutSpacing; double lef_save_x; double lef_save_y; // for interpreting (*) notation of LEF/DEF double leflVal; double lefrVal; double versionNum; int antennaInoutWarnings; int antennaInputWarnings; int antennaOutputWarnings; int arrayCutsVal; int arrayCutsWar; int arrayWarnings; int caseSensitiveWarnings; int correctionTableWarnings; int dielectricWarnings; int doneLib; // keep track if the library is done parsing int edgeRateScaleFactorWarnings; int edgeRateThreshold1Warnings; int edgeRateThreshold2Warnings; int encrypted; int first; int first_buffer; int ge56almostDone; // have reached the EXTENSION SECTION int ge56done; // a 5.6 and it has END LIBRARY statement int hasBusBit; int hasDirection; int hasDivChar; int hasFixedMask; int hasGeoLayer; int hasInfluence; int hasLayerMincut; int hasManufactur; int hasMask; int hasMinfeature; int hasNameCase; int hasOpenedLogFile; int hasPRP; int hasParallel; int hasPitch; int hasSamenet; int hasSite; int hasSiteClass; int hasSiteSize; int hasSpCenter; int hasSpLayer; int hasSpParallel; int hasSpSamenet; int hasTwoWidths; int hasType; int hasVer; int hasViaRule_layer; int hasWidth; int hasFatalError; // don't report errors after the file end. int iRDropWarnings; int ignoreVersion; // ignore checking version number int inDefine; int inoutAntennaWarnings; int inputAntennaWarnings; int input_level; int isGenerate; int layerCut; int layerDir; int layerMastOver; int layerRout; int layerWarnings; int lefDefIf; int lefDumbMode; int lefErrMsgPrinted; int lefFixedMask; //All the LEF MACRO PIN MASK assignments can be int lefInfoMsgPrinted; int lefInvalidChar; int lefNdRule; int lefNewIsKeyword; int lefNlToken; int lefNoNum; int lefRetVal; int lefWRetVal; int lefWarnMsgPrinted; int lef_errors; int lef_nlines; int lef_ntokens; int lef_warnings; int lefrDoGcell; int lefrDoGeometries; int lefrDoSite; int lefrDoTrack; int lefrHasLayer; // 5.5 this & lefrHasMaxVS is to keep track that int lefrHasMaxVS; // MAXVIASTACK has to be after all layers int lefrHasSpacing; // keep track of spacing in a layer int lefrHasSpacingTbl; // keep track of spacing table in a layer int macroWarnings; int maxStackViaWarnings; int minFeatureWarnings; int msgCnt; int namesCaseSensitive; // always true in 5.6 int ndLayer; int ndLayerSpace; int ndLayerWidth; int ndRule; int needGeometry; int noWireExtensionWarnings; int noiseMarginWarnings; int noiseTableWarnings; int nonDefaultWarnings; int numVia; int obsDef; int origDef; int outputAntennaWarnings; int pinDef; int pinWarnings; int prtNewLine; // sometimes need to print a new line int prtSemiColon; // sometimes ; is not printed yet int ringPlace; int shiftBufLength; int siteDef; int siteWarnings; int sizeDef; int spParallelLength; int spaceMissing; int spacingWarnings; int symDef; int timingWarnings; int unitsWarnings; int use5_3; int use5_4; int useLenThr; int useMinSpacingWarnings; int viaLayer; int viaRuleHasDir; int viaRuleHasEnc; int viaRuleLayer; int viaRuleWarnings; int viaWarnings; lefiAntennaEnum antennaType; lefiAntennaPWL* lefrAntennaPWLPtr; lefiArray lefrArray; lefiCorrectionTable lefrCorrectionTable; lefiDensity lefrDensity; lefiGcellPattern* lefrGcellPatternPtr; lefiGeometries* lefrGeometriesPtr; lefiIRDrop lefrIRDrop; lefiLayer lefrLayer; lefiMacro lefrMacro; lefiMaxStackVia lefrMaxStackVia; // 5.5 lefiMinFeature lefrMinFeature; lefiNoiseMargin lefrNoiseMargin; lefiNoiseTable lefrNoiseTable; lefiNonDefault lefrNonDefault; lefiNonDefault* nd; // PCR 909010 - For VIA in the nondefaultrule lefiNum macroNum; lefiObstruction lefrObstruction; lefiPin lefrPin; lefiProp lefrProp; lefiSite lefrSite; lefiSitePattern* lefrSitePatternPtr; lefiSpacing lefrSpacing; lefiTiming lefrTiming; lefiTrackPattern* lefrTrackPatternPtr; lefiUnits lefrUnits; lefiUseMinSpacing lefrUseMinSpacing; lefiVia lefrVia; lefiViaRule lefrViaRule; lefStringMap alias_set; lefDoubleMap define_set; lefIntMap defineb_set; lefStringMap defines_set; int tokenSize; //ARRAYS // Ring buffer storage char *ring[RING_SIZE]; int ringSizes[RING_SIZE]; char lefDebug[100]; char *current_token; char *pv_token; char *uc_token; char current_buffer[IN_BUF_SIZE]; const char *current_stack[20]; // the stack itself char lefrErrMsg[1024]; char temp_name[258]; std::vector Hist_text; // to hold the msg limit, 0 - num of limit // 1 - num of message printed, 4701 = 4700 + 1, message starts on 1 // 2 - warning printed int msgLimit[2][MAX_LEF_MSGS]; }; extern lefrData *lefData; END_LEFDEF_PARSER_NAMESPACE #endif