Limbo 3.5.4
Loading...
Searching...
No Matches
LefDataBase.h
Go to the documentation of this file.
1
7
8#ifndef LEFPARSER_DATABASE_H
9#define LEFPARSER_DATABASE_H
10
11#include <string>
12#include <vector>
13#include <iostream>
14#include <fstream>
15#include <sstream>
16#include <cassert>
17#include <limbo/thirdparty/lefdef/5.8/lef/lef/lefrReader.hpp>
18#include <limbo/thirdparty/lefdef/5.8/lef/lef/lefwWriter.hpp>
19#include <limbo/thirdparty/lefdef/5.8/lef/lef/lefiDebug.hpp>
20#include <limbo/thirdparty/lefdef/5.8/lef/lef/lefiEncryptInt.hpp>
21#include <limbo/thirdparty/lefdef/5.8/lef/lef/lefiUtil.hpp>
22
24namespace LefParser {
25
27using std::cout;
28using std::endl;
29using std::cerr;
30using std::string;
31using std::vector;
32using std::pair;
33using std::make_pair;
34using std::ostringstream;
36
38typedef LefDefParser::lefiArrayFloorPlan lefiArrayFloorPlan;
39typedef LefDefParser::lefiArray lefiArray;
40typedef LefDefParser::lefiNoiseVictim lefiNoiseVictim;
41typedef LefDefParser::lefiNoiseResistance lefiNoiseResistance;
42typedef LefDefParser::lefiNoiseEdge lefiNoiseEdge;
43typedef LefDefParser::lefiNoiseTable lefiNoiseTable;
44typedef LefDefParser::lefiCorrectionVictim lefiCorrectionVictim;
45typedef LefDefParser::lefiCorrectionResistance lefiCorrectionResistance;
46typedef LefDefParser::lefiCorrectionEdge lefiCorrectionEdge;
47typedef LefDefParser::lefiCorrectionTable lefiCorrectionTable;
48typedef LefDefParser::lefiAntennaPWL lefiAntennaPWL;
49typedef LefDefParser::lefiLayerDensity lefiLayerDensity;
50typedef LefDefParser::lefiParallel lefiParallel;
51typedef LefDefParser::lefiInfluence lefiInfluence;
52typedef LefDefParser::lefiTwoWidths lefiTwoWidths;
53typedef LefDefParser::lefiSpacingTable lefiSpacingTable;
54typedef LefDefParser::lefiOrthogonal lefiOrthogonal;
55typedef LefDefParser::lefiAntennaModel lefiAntennaModel;
56typedef LefDefParser::lefiLayer lefiLayer;
57typedef LefDefParser::lefiObstruction lefiObstruction;
58typedef LefDefParser::lefiPinAntennaModel lefiPinAntennaModel;
59typedef LefDefParser::lefiPin lefiPin;
60typedef LefDefParser::lefiDensity lefiDensity;
61typedef LefDefParser::lefiMacro lefiMacro;
62typedef LefDefParser::lefiTiming lefiTiming;
63typedef LefDefParser::lefiGeometries lefiGeometries;
64typedef LefDefParser::lefiSpacing lefiSpacing;
65typedef LefDefParser::lefiIRDrop lefiIRDrop;
66typedef LefDefParser::lefiMinFeature lefiMinFeature;
67typedef LefDefParser::lefiSite lefiSite;
68typedef LefDefParser::lefiSitePattern lefiSitePattern;
69typedef LefDefParser::lefiTrackPattern lefiTrackPattern;
70typedef LefDefParser::lefiGcellPattern lefiGcellPattern;
71typedef LefDefParser::lefiUseMinSpacing lefiUseMinSpacing;
72typedef LefDefParser::lefiMaxStackVia lefiMaxStackVia;
73typedef LefDefParser::lefiNonDefault lefiNonDefault;
74typedef LefDefParser::lefiProp lefiProp;
75typedef LefDefParser::lefiPropType lefiPropType;
76typedef LefDefParser::lefiUnits lefiUnits;
77typedef LefDefParser::lefiViaLayer lefiViaLayer;
78typedef LefDefParser::lefiVia lefiVia;
79typedef LefDefParser::lefiViaRuleLayer lefiViaRuleLayer;
80typedef LefDefParser::lefiViaRule lefiViaRule;
81
82typedef LefDefParser::lefiNoiseMargin lefiNoiseMargin;
83typedef LefDefParser::lefiGeomRect lefiGeomRect;
84typedef LefDefParser::lefiGeomRectIter lefiGeomRectIter;
85typedef LefDefParser::lefiGeomPath lefiGeomPath;
86typedef LefDefParser::lefiGeomPathIter lefiGeomPathIter;
87typedef LefDefParser::lefiGeomPolygon lefiGeomPolygon;
88typedef LefDefParser::lefiGeomPolygonIter lefiGeomPolygonIter;
89typedef LefDefParser::lefiGeomVia lefiGeomVia;
90typedef LefDefParser::lefiGeomViaIter lefiGeomViaIter;
91typedef LefDefParser::lefiPoints lefiPoints;
92
93enum lefiGeomEnum {
94 lefiGeomUnknown = LefDefParser::lefiGeomUnknown,
95 lefiGeomLayerE = LefDefParser::lefiGeomLayerE,
96 lefiGeomLayerExceptPgNetE = LefDefParser::lefiGeomLayerExceptPgNetE,
97 lefiGeomLayerMinSpacingE = LefDefParser::lefiGeomLayerMinSpacingE,
98 lefiGeomLayerRuleWidthE = LefDefParser::lefiGeomLayerRuleWidthE,
99 lefiGeomWidthE = LefDefParser::lefiGeomWidthE,
100 lefiGeomPathE = LefDefParser::lefiGeomPathE,
101 lefiGeomPathIterE = LefDefParser::lefiGeomPathIterE,
102 lefiGeomRectE = LefDefParser::lefiGeomRectE,
103 lefiGeomRectIterE = LefDefParser::lefiGeomRectIterE,
104 lefiGeomPolygonE = LefDefParser::lefiGeomPolygonE,
105 lefiGeomPolygonIterE = LefDefParser::lefiGeomPolygonIterE,
106 lefiGeomViaE = LefDefParser::lefiGeomViaE,
107 lefiGeomViaIterE = LefDefParser::lefiGeomViaIterE,
108 lefiGeomClassE = LefDefParser::lefiGeomClassE,
109 lefiGeomEnd = LefDefParser::lefiGeomEnd
110};
112
113// forward declaration
126{
127 public:
131 double current_version() const;
134 void current_version(double cv);
135
136 // Although it is true that I can use pure virtual functions for all callbacks,
137 // run-time information is better than compile-time errors.
138 // Because most LEF files are so simple that we only need several callbacks.
139 // Then user does not need to provide some callbacks.
140
143 virtual void lef_version_cbk(string const& v)
144 {
145 cout << "LEF version: " << v << endl;
146 lef_user_cbk_reminder(__func__);
147 }
148
150 virtual void lef_version_cbk(double v);
153 virtual void lef_dividerchar_cbk(string const& v)
154 {
155 cout << "LEF dividerchar: " << v << endl;
156 lef_user_cbk_reminder(__func__);
157 }
158
160 virtual void lef_casesensitive_cbk(int v);
163 virtual void lef_nowireextension_cbk(string const& v)
164 {
165 cout << "LEF nowireextension: " << v << endl;
166 lef_user_cbk_reminder(__func__);
167 }
168
170 virtual void lef_manufacturing_cbk(double v);
173 virtual void lef_useminspacing_cbk(lefiUseMinSpacing const& v);
176 virtual void lef_clearancemeasure_cbk(string const& v)
177 {
178 cout << "LEF clearancemeasure: " << v << endl;
179 lef_user_cbk_reminder(__func__);
180 }
181
183 virtual void lef_units_cbk(lefiUnits const& v);
186 virtual void lef_busbitchars_cbk(string const& v)
187 {
188 cout << "LEF busbitchars: " << v << endl;
189 lef_user_cbk_reminder(__func__);
190 }
191
193 virtual void lef_layer_cbk(lefiLayer const& v);
196 virtual void lef_maxstackvia_cbk(lefiMaxStackVia const& v);
199 virtual void lef_via_cbk(lefiVia const& v);
202 virtual void lef_viarule_cbk(lefiViaRule const& v);
205 virtual void lef_spacing_cbk(lefiSpacing const& v);
208 virtual void lef_irdrop_cbk(lefiIRDrop const& v);
211 virtual void lef_minfeature_cbk(lefiMinFeature const& v);
214 virtual void lef_dielectric_cbk(double v);
217 virtual void lef_nondefault_cbk(lefiNonDefault const& v);
220 virtual void lef_site_cbk(lefiSite const& v);
223 virtual void lef_macrobegin_cbk(std::string const& v)
224 {
225 cout << "macro begin " << v << endl;
226 lef_user_cbk_reminder(__func__);
227 }
228
230 virtual void lef_macro_cbk(lefiMacro const& v);
233 virtual void lef_pin_cbk(lefiPin const& v);
236 virtual void lef_obstruction_cbk(lefiObstruction const& v);
239 virtual void lef_density_cbk(lefiDensity const& v);
242 virtual void lef_timing_cbk(lefiTiming const& v);
245 virtual void lef_array_cbk(lefiArray const& v);
248 virtual void lef_prop_cbk(lefiProp const& v);
251 virtual void lef_noisemargin_cbk(lefiNoiseMargin const& v);
254 virtual void lef_edgeratethreshold1_cbk(double v);
257 virtual void lef_edgeratethreshold2_cbk(double v);
260 virtual void lef_edgeratescalefactor_cbk(double v);
263 virtual void lef_noisetable_cbk(lefiNoiseTable const& v);
266 virtual void lef_correctiontable_cbk(lefiCorrectionTable const& v);
269 virtual void lef_inputantenna_cbk(double v);
272 virtual void lef_outputantenna_cbk(double v);
275 virtual void lef_inoutantenna_cbk(double v);
278 virtual void lef_antennainput_cbk(double v);
281 virtual void lef_antennaoutput_cbk(double v);
284 virtual void lef_antennainout_cbk(double v);
287 virtual void lef_extension_cbk(string const& v)
288 {
289 cout << "LEF extension: " << v << endl;
290 lef_user_cbk_reminder(__func__);
291 }
292 protected:
294 public:
296 static int lefrShiftCase;
297 private:
300 void lef_user_cbk_reminder(const char* str) const;
301};
302
303} // namespace LefParser
304
305#endif
virtual void lef_antennainout_cbk(double v)
antenna inout callback
virtual void lef_correctiontable_cbk(lefiCorrectionTable const &v)
correction table callback
virtual void lef_timing_cbk(lefiTiming const &v)
timing callback
virtual void lef_array_cbk(lefiArray const &v)
array callback
virtual void lef_obstruction_cbk(lefiObstruction const &v)
obstruction callback, describe obstructions in a standard cell
double current_version() const
virtual void lef_outputantenna_cbk(double v)
output antenna callback
virtual void lef_clearancemeasure_cbk(string const &v)
set clearance measure
virtual void lef_prop_cbk(lefiProp const &v)
property callback
virtual void lef_nondefault_cbk(lefiNonDefault const &v)
non-default rule callback
virtual void lef_irdrop_cbk(lefiIRDrop const &v)
IR drop callback.
virtual void lef_version_cbk(double v)
set LEF version
virtual void lef_viarule_cbk(lefiViaRule const &v)
add via rule
static int lefNamesCaseSensitive
virtual void lef_pin_cbk(lefiPin const &v)
pin callback, describe pins in a standard cell
virtual void lef_nowireextension_cbk(string const &v)
set no wire extension flag
LefDataBase()
constructor
virtual void lef_via_cbk(lefiVia const &v)
add via
virtual void lef_density_cbk(lefiDensity const &v)
density callback
virtual void lef_site_cbk(lefiSite const &v)
site callback
virtual void lef_manufacturing_cbk(double v)
set manufacturing entry
virtual void lef_casesensitive_cbk(int v)
set case sensitive flag
virtual void lef_noisetable_cbk(lefiNoiseTable const &v)
noise table callback
void current_version(double cv)
set current version
virtual void lef_version_cbk(string const &v)
set LEF version
virtual void lef_macrobegin_cbk(std::string const &v)
macro begin callback, describe standard cell type
virtual void lef_inoutantenna_cbk(double v)
inout antenna callback
virtual void lef_spacing_cbk(lefiSpacing const &v)
spacing callback
virtual void lef_macro_cbk(lefiMacro const &v)
macro callback, describe standard cell type
virtual void lef_maxstackvia_cbk(lefiMaxStackVia const &v)
max stack via
virtual void lef_layer_cbk(lefiLayer const &v)
add layer
virtual void lef_inputantenna_cbk(double v)
input antenna callback
virtual void lef_busbitchars_cbk(string const &v)
set bus bit characters
virtual void lef_noisemargin_cbk(lefiNoiseMargin const &v)
noise margin callback
virtual void lef_edgeratescalefactor_cbk(double v)
edge rate scale factor
virtual void lef_antennainput_cbk(double v)
antenna input callback
virtual void lef_extension_cbk(string const &v)
extension callback
virtual void lef_units_cbk(lefiUnits const &v)
set unit
virtual void lef_dividerchar_cbk(string const &v)
set divider characters
virtual void lef_dielectric_cbk(double v)
dielectric callback
virtual void lef_edgeratethreshold1_cbk(double v)
edge rate threshold 1
virtual void lef_edgeratethreshold2_cbk(double v)
edge rate threshold 2
virtual void lef_antennaoutput_cbk(double v)
antenna output callback
virtual void lef_minfeature_cbk(lefiMinFeature const &v)
min feature callback
virtual void lef_useminspacing_cbk(lefiUseMinSpacing const &v)
set use min space
namespace for LefParser
Definition LefDataBase.h:24