Xplace_for_ICCAD/thirdparty/lefdef/lef58/include/lefrData.hpp

308 lines
8.4 KiB
C++
Raw Normal View History

2022-10-20 22:46:17 +08:00
// *****************************************************************************
// *****************************************************************************
// 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 <cstring>
#include <string>
#include <vector>
#include <map>
#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<std::string, std::string, lefCompareStrings> lefAliasMap;
typedef std::map<std::string, std::string, lefCompareStrings> lefStringMap;
typedef std::map<std::string, int, lefCompareStrings> lefIntMap;
typedef std::map<std::string, double, lefCompareStrings> 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<char> 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