Limbo
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
DefDataBase.h
Go to the documentation of this file.
1 
8 #ifndef DEFPARSER_DATABASE_H
9 #define DEFPARSER_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/def/def/defrReader.hpp>
18 #include <limbo/thirdparty/lefdef/5.8/def/def/defiAlias.hpp>
19 
21 namespace DefParser {
22 
24 using std::cout;
25 using std::endl;
26 using std::cerr;
27 using std::string;
28 using std::vector;
29 using std::pair;
30 using std::make_pair;
31 using std::ostringstream;
32 typedef int int32_t;
33 typedef unsigned int uint32_t;
34 typedef long int64_t;
36 
39 struct Item
40 {
42  virtual void print(ostringstream&) const {};
47  friend std::ostream& operator<<(std::ostream& os, Item const& rhs)
48  {
49  std::ostringstream ss;
50  rhs.print(ss);
51  os << ss.str();
52  return os;
53  }
58  friend ostringstream& operator<<(ostringstream& ss, Item const& rhs)
59  {
60  rhs.print(ss);
61  return ss;
62  }
63 };
65 struct Row : public Item
66 {
67  string row_name;
68  string macro_name;
69  int32_t origin[2];
70  string orient;
71  int32_t repeat[2];
72  int32_t step[2];
73  void reset()
75  {
76  row_name = macro_name = orient = "";
77  origin[0] = origin[1] = -1;
78  repeat[0] = repeat[1] = -1;
79  step[0] = step[1] = -1;
80  }
83  virtual void print(ostringstream& ss) const
84  {
85  ss << "//////// Row ////////" << endl
86  << "row_name = " << row_name << endl
87  << "macro_name = " << macro_name << endl
88  << "origin = " << origin[0] << " " << origin[1] << endl
89  << "orient = " << orient << endl
90  << "repeat = " << repeat[0] << " " << repeat[1] << endl
91  << "step = " << step[0] << " " << step[1] << endl;
92  }
93 };
95 struct Component : public Item
96 {
97  string comp_name;
98  string macro_name;
99  string status;
100  int32_t origin[2];
101  string orient;
102  void reset()
104  {
105  comp_name = macro_name = status = orient = "";
106  origin[0] = origin[1] = -1;
107  }
110  virtual void print(ostringstream& ss) const
111  {
112  ss << "//////// Component ////////" << endl
113  << "comp_name = " << comp_name << endl
114  << "macro_name = " << macro_name << endl
115  << "status = " << status << endl
116  << "origin = " << origin[0] << " " << origin[1] << endl
117  << "orient = " << orient << endl;
118  }
119 };
121 struct Pin : public Item
122 {
123  string pin_name;
124  string net_name;
125  string direct;
126  string status;
127  int32_t origin[2];
128  string orient;
129  vector<string> vLayer;
130  vector<vector<int32_t> > vBbox;
131  string use;
132  void reset()
134  {
135  pin_name = net_name = direct = status = orient = "";
136  origin[0] = origin[1] = -1;
137  vLayer.clear();
138  vBbox.clear();
139  use = "";
140  }
143  virtual void print(ostringstream& ss) const
144  {
145  ss << "//////// Pin ////////" << endl
146  << "pin_name = " << pin_name << endl
147  << "net_name = " << net_name << endl
148  << "direct = " << direct << endl
149  << "status = " << status << endl
150  << "origin = " << origin[0] << " " << origin[1] << endl
151  << "orient = " << orient << endl;
152  for (uint32_t i = 0; i < vLayer.size(); ++i)
153  ss << "layer " << vLayer[i] << " " << vBbox[i][0] << " " << vBbox[i][1] << " " << vBbox[i][2] << " " << vBbox[i][3] << endl;
154  ss << "use = " << use << endl;
155  }
156 };
158 struct Net : public Item
159 {
160  string net_name;
161  int32_t net_weight;
162  vector< std::pair<string, string> > vNetPin;
163  void reset()
165  {
166  net_name = "";
167  net_weight = 1;
168  vNetPin.clear();
169  }
172  virtual void print(ostringstream& ss) const
173  {
174  ss << "//////// Net ////////" << endl
175  << "net_name = " << net_name << endl
176  << "net_weight = " << net_weight << endl;
177  for (uint32_t i = 0; i < vNetPin.size(); ++i)
178  ss << "(" << vNetPin[i].first << ", " << vNetPin[i].second << ") ";
179  ss << endl;
180  }
181 };
182 // forward declaration
188 {
189  public:
191  virtual void set_def_dividerchar(string const&) = 0;
193  virtual void set_def_busbitchars(string const&) = 0;
195  virtual void set_def_version(string const&) = 0;
197  virtual void set_def_design(string const&) = 0;
199  virtual void set_def_unit(int) = 0;
201  virtual void set_def_diearea(int, int, int, int) = 0;
203  virtual void add_def_row(Row const&) = 0;
205  virtual void add_def_component(Component const&) = 0;
207  virtual void resize_def_component(int) = 0;
209  virtual void add_def_pin(Pin const&) = 0;
211  virtual void resize_def_pin(int) = 0;
213  virtual void add_def_net(Net const&) = 0;
215  virtual void resize_def_net(int) = 0;
216  // check these callbacks at runtime
218  virtual void resize_def_blockage(int);
220  virtual void add_def_placement_blockage(std::vector<std::vector<int> > const&);
222  virtual void end_def_design();
223 
224  protected:
227  void def_user_cbk_reminder(const char* str) const;
228 };
229 
230 } // namespace DefParser
231 
232 #endif
net to describe interconnection of netlist
Definition: DefDataBase.h:158
pin of node/cell
Definition: DefDataBase.h:121
friend std::ostream & operator<<(std::ostream &os, Item const &rhs)
Definition: DefDataBase.h:47
string status
placement status
Definition: DefDataBase.h:99
virtual void resize_def_net(int)=0
set number of nets
friend ostringstream & operator<<(ostringstream &ss, Item const &rhs)
Definition: DefDataBase.h:58
virtual void set_def_unit(int)=0
set DEF unit
int32_t step[2]
Definition: DefDataBase.h:72
void reset()
reset all data members
Definition: DefDataBase.h:74
virtual void print(ostringstream &ss) const
print data members
Definition: DefDataBase.h:143
virtual void resize_def_blockage(int)
set number of blockages
string pin_name
pin name
Definition: DefDataBase.h:123
void def_user_cbk_reminder(const char *str) const
remind users to define some optional callback functions at runtime
virtual void set_def_version(string const &)=0
set DEF version
Temporary data structures to hold parsed data. Base class for all temporary data structures.
Definition: DefDataBase.h:39
int32_t repeat[2]
do x by y
Definition: DefDataBase.h:71
vector< vector< int32_t > > vBbox
bounding box on each layer
Definition: DefDataBase.h:130
virtual void set_def_busbitchars(string const &)=0
set BUS bit characters
void reset()
reset all data members
Definition: DefDataBase.h:133
namespace for DefParser
Definition: DefDataBase.h:21
virtual void end_def_design()
end of design
virtual void print(ostringstream &ss) const
print data members
Definition: DefDataBase.h:110
virtual void set_def_diearea(int, int, int, int)=0
set die area xl, yl, xh, yh
virtual void add_def_component(Component const &)=0
add component/cell
virtual void print(ostringstream &) const
print data members
Definition: DefDataBase.h:42
virtual void add_def_placement_blockage(std::vector< std::vector< int > > const &)
add placement blockages, array of boxes with xl, yl, xh, yh
virtual void resize_def_pin(int)=0
set number of pins
virtual void print(ostringstream &ss) const
print data members
Definition: DefDataBase.h:172
Base class for def database. Only pure virtual functions are defined. User needs to inheritate this c...
Definition: DefDataBase.h:187
void reset()
reset all data members
Definition: DefDataBase.h:164
void reset()
reset all data members
Definition: DefDataBase.h:103
virtual void add_def_pin(Pin const &)=0
add pin
placement row
Definition: DefDataBase.h:65
string comp_name
component name
Definition: DefDataBase.h:97
string macro_name
macro name of component, standard cell type
Definition: DefDataBase.h:98
string status
placement status
Definition: DefDataBase.h:126
string net_name
net name
Definition: DefDataBase.h:124
string orient
orientation
Definition: DefDataBase.h:70
virtual void set_def_design(string const &)=0
set design name
int32_t origin[2]
offset to node origin
Definition: DefDataBase.h:127
vector< string > vLayer
layers
Definition: DefDataBase.h:129
string orient
orientation
Definition: DefDataBase.h:128
string net_name
net name
Definition: DefDataBase.h:160
int32_t net_weight
net weight
Definition: DefDataBase.h:161
string macro_name
macro name of row
Definition: DefDataBase.h:68
int32_t origin[2]
x, y of origin
Definition: DefDataBase.h:100
virtual void print(ostringstream &ss) const
print data members
Definition: DefDataBase.h:83
virtual void set_def_dividerchar(string const &)=0
set divider characters
cell in placement
Definition: DefDataBase.h:95
string direct
direction
Definition: DefDataBase.h:125
virtual void add_def_net(Net const &)=0
add net
virtual void add_def_row(Row const &)=0
add row
vector< std::pair< string, string > > vNetPin
Definition: DefDataBase.h:162
string row_name
row name
Definition: DefDataBase.h:67
int32_t origin[2]
x, y of origin
Definition: DefDataBase.h:69
virtual void resize_def_component(int)=0
add component/cell