AMF-Placer  2.0
An Open-Source Timing-driven Analytical Mixed-size FPGA Placer
DeviceInfo.h
Go to the documentation of this file.
1 
25 #ifndef _DeviceINFO
26 #define _DeviceINFO
27 
28 #include "strPrint.h"
29 #include <assert.h>
30 #include <fstream>
31 #include <iostream>
32 #include <map>
33 #include <set>
34 #include <sstream>
35 #include <string>
36 #include <vector>
37 
43 {
44  public:
50  {
56  };
57 
63  {
64  public:
67  {
68  }
69 
70  DeviceElement(std::string &name, DeviceElementType type, int id)
71  : name(name), parentPtr(nullptr), type(type), id(id)
72  {
73  }
74 
75  virtual ~DeviceElement()
76  {
77  }
78 
79  inline std::string &getName()
80  {
81  return name;
82  }
84  {
85  return parentPtr;
86  }
88  {
89  return type;
90  }
91  inline int getElementIdInParent()
92  {
93  return id;
94  }
95 
96  private:
97  std::string name;
100  int id;
101  };
102 
103  class DeviceBEL;
104  class DeviceSite;
105  class DeviceTile;
106  class ClockRegion;
107  class ClockColumn;
108 
113  class DeviceBEL : public DeviceElement
114  {
115  public:
124  DeviceBEL(std::string &name, std::string &BELType, DeviceElement *parentPtr, int id)
126  {
128  }
129 
131  {
132  }
133 
135  inline DeviceSite *getSite()
136  {
137  return site;
138  };
139  inline std::string &getBELType()
140  {
141  return BELType;
142  }
143 
144  private:
151  std::string BELType;
152  DeviceSite *site = nullptr;
153  // TODO: also record the pins on BEL for later routing.
154  };
155 
162  class DeviceSite : public DeviceElement
163  {
164  public:
177  DeviceSite(std::string &name, std::string &siteType, DeviceElement *parentPtr, float locX, float locY,
178  int clockRegionX, int clockRegionY, int id)
181  {
183 
184  // extract the integer XY from the siteName from later processing
185  // WARNING: In the site name, these XY values are not actual LOCATION!!!
186  if (name.find('_') != std::string::npos)
187  {
188  std::string tmpName = name.substr(name.rfind('_') + 1, name.size() - name.rfind('_') - 1);
189  if (tmpName.find('Y') != std::string::npos)
190  {
191  siteY = std::stoi(tmpName.substr(tmpName.find('Y') + 1, tmpName.size() - tmpName.find('Y') - 1));
192  siteX = std::stoi(tmpName.substr(tmpName.find('X') + 1, tmpName.find('Y') - tmpName.find('X') - 1));
193  }
194  else
195  {
196  siteX = -1;
197  siteY = -1;
198  }
199  }
200  else
201  {
202  siteX = -1;
203  siteY = -1;
204  }
205  }
206 
208  {
209  if (sitePins)
210  delete sitePins;
211  }
212 
218  {
219  public:
221  {
222  refPinsName.clear();
223  name2offsetY.clear();
224  name2offsetX.clear();
225  }
227  {
228  }
229  std::vector<std::string> refPinsName;
230  std::map<std::string, float> name2offsetX;
231  std::map<std::string, float> name2offsetY;
232  };
233 
234  void setTile(DeviceElement *parentTilePtr);
235  inline DeviceTile *getTile()
236  {
237  assert(parentTile);
238  return parentTile;
239  };
240 
248  void setParentSite(DeviceElement *parentSitePtr);
250  {
251  return parentSite;
252  };
253 
261  void addChildSite(DeviceElement *parentSitePtr);
262  inline std::vector<DeviceSite *> &getChildrenSites()
263  {
264  return childrenSites;
265  };
266 
267  inline void setSiteLocation(float x, float y)
268  {
269  locX = x;
270  locY = y;
271  };
272 
273  inline std::string &getSiteType()
274  {
275  return siteType;
276  };
277 
278  inline void addChildBEL(DeviceBEL *child)
279  {
280  childrenBELs.push_back(child);
281  };
282 
283  inline std::vector<DeviceBEL *> &getChildrenBELs()
284  {
285  return childrenBELs;
286  };
287 
288  inline float X()
289  {
290  return locX;
291  }
292  inline float Y()
293  {
294  return locY;
295  }
296 
298  {
299  return sitePins;
300  }
301  inline void setSitePinInfos(DeviceSitePinInfos *_sitePins)
302  {
303  sitePins = _sitePins;
304  }
305 
312  inline bool isOccupied()
313  {
314  return occupied;
315  }
316  inline void setOccupied()
317  {
318  occupied = true;
319  }
320 
327  inline bool isMapped()
328  {
329  return mapped;
330  }
331  inline void setMapped()
332  {
333  mapped = true;
334  }
335  inline void resetMapped()
336  {
337  mapped = false;
338  }
339 
340  inline int getSiteY()
341  {
342  assert(siteY >= 0);
343  return siteY;
344  }
345 
346  inline int getSiteX()
347  {
348  assert(siteX >= 0);
349  return siteX;
350  }
351 
352  inline int getClockRegionX()
353  {
354  return clockRegionX;
355  }
356 
357  inline int getClockRegionY()
358  {
359  return clockRegionY;
360  }
361 
362  inline void setClockRegion(ClockRegion *_clockRegion)
363  {
364  clockRegion = _clockRegion;
365  }
366 
368  {
369  return clockRegion;
370  }
371 
372  inline void setClockHalfColumn(ClockColumn *_clockHalfColumn)
373  {
374  clockHalfColumn = _clockHalfColumn;
375  }
376 
378  {
379  return clockHalfColumn;
380  }
381 
382  private:
383  std::string siteType;
386  std::vector<DeviceBEL *> childrenBELs;
387  DeviceSite *parentSite; // mainly to handle overlapped sites
388  std::vector<DeviceSite *> childrenSites;
389  DeviceTile *parentTile = nullptr;
391  float locX;
392  float locY;
393  int clockRegionX = -1;
394  int clockRegionY = -1;
395  int siteY;
396  int siteX;
397 
402  bool occupied = false;
403 
408  bool mapped = false;
409  };
410 
415  class DeviceTile : public DeviceElement
416  {
417  public:
426  DeviceTile(std::string &name, std::string &tileType, DeviceInfo *device, int id)
428  {
429  if (name.rfind("X") != std::string::npos && name.rfind("Y") != std::string::npos)
430  {
431  tileIdX = std::stoi(name.substr(name.rfind("X") + 1, name.rfind("Y") - name.rfind("X") - 1));
432  tileIdY = std::stoi(name.substr(name.rfind("Y") + 1, name.size() - name.rfind("Y") - 1));
433  }
434  }
435 
437  {
438  }
439 
440  void addChildSite(DeviceElement *sitePtr);
441  inline std::vector<DeviceSite *> &getChildrenSites()
442  {
443  return childrenSites;
444  };
445  inline std::string &getTileType()
446  {
447  return tileType;
448  }
449 
450  inline int getTileIdX()
451  {
452  return tileIdX;
453  }
454 
455  inline int getTileIdY()
456  {
457  return tileIdY;
458  }
459 
460  private:
461  std::string tileType;
462  std::vector<DeviceSite *> childrenSites;
464  int tileIdX = -1,
465  tileIdY = -1; // idX/idY are not the exact locations. It can be used to detect the half clock column.
466  };
467 
475  {
476  public:
478  {
479  sites.clear();
480  clockNetId2Cnt.clear();
481  clockNetId2CellIds.clear();
482  clockNetId2Sites.clear();
483  };
485  {
486  sites.clear();
487  clockNetId2Cnt.clear();
488  clockNetId2CellIds.clear();
489  clockNetId2Sites.clear();
490  }
491 
492  void addSite(DeviceSite *curSite)
493  {
494  if (curSite->X() < left)
495  left = curSite->X();
496  if (curSite->X() > right)
497  right = curSite->X();
498  if (curSite->getName().find("SLICE") != std::string::npos)
499  {
500  if (curSite->Y() > top)
501  top = curSite->Y();
502  if (curSite->Y() < bottom)
503  bottom = curSite->Y();
504  }
505  sites.push_back(curSite);
506  }
507 
508  inline std::vector<DeviceSite *> &getSites()
509  {
510  return sites;
511  }
512 
518  {
519  clockNetId2Cnt.clear();
520  clockNetId2CellIds.clear();
521  clockNetId2Sites.clear();
522  }
523 
530  inline void addClockNetId(int clockNetId, int cellId)
531  {
532  if (clockNetId2Cnt.find(clockNetId) == clockNetId2Cnt.end())
533  {
534  clockNetId2Cnt[clockNetId] = 0;
535  }
536  clockNetId2Cnt[clockNetId] += 1;
537  if (clockNetId2CellIds.find(clockNetId) == clockNetId2CellIds.end())
538  {
539  clockNetId2CellIds[clockNetId] = std::vector<int>();
540  }
541  clockNetId2CellIds[clockNetId].push_back(cellId);
542  }
543 
544  inline int getClockNum()
545  {
546  return clockNetId2Cnt.size();
547  }
548 
557  inline void setBoundary(float _left, float _right, float _top, float _bottom)
558  {
559  left = _left;
560  right = _right;
561  top = _top;
562  bottom = _bottom;
563  }
564 
565  inline void setLeft(float x)
566  {
567  left = x;
568  }
569 
570  inline void setRight(float x)
571  {
572  right = x;
573  }
574 
575  inline void setTop(float y)
576  {
577  top = y;
578  }
579 
580  inline void setBottom(float y)
581  {
582  bottom = y;
583  }
584 
585  inline std::map<int, std::vector<int>> &getClockNetId2CellIds()
586  {
587  return clockNetId2CellIds;
588  }
589 
590  inline unsigned int getClockNumLimit()
591  {
592  return clockLimit;
593  }
594 
595  inline void setId(unsigned int _id)
596  {
597  id = _id;
598  }
599 
600  inline unsigned int getId()
601  {
602  return id;
603  }
604 
605  inline float getLeft()
606  {
607  return left;
608  }
609 
610  inline float getRight()
611  {
612  return right;
613  }
614 
615  inline float getTop()
616  {
617  return top;
618  }
619 
620  inline float getBottom()
621  {
622  return bottom;
623  }
624 
625  private:
626  int id;
627  std::vector<DeviceSite *> sites;
628  float left = 1000000, right = -1000000, top = -1000000, bottom = 1000000;
629 
634  std::map<int, int> clockNetId2Cnt;
635 
640  std::map<int, std::vector<int>> clockNetId2CellIds;
641  std::map<int, DeviceSite *> clockNetId2Sites;
642  unsigned int clockLimit = 12;
643  };
644 
652  {
653  public:
660  {
661  assert(curSite);
662  sites.clear();
663  clockColumns.clear();
664  sites.push_back(curSite);
665  gridX = curSite->getClockRegionX();
666  gridY = curSite->getClockRegionY();
667  curSite->setClockRegion(this);
668  leftX = curSite->X();
669  rightX = curSite->X();
670  topY = curSite->Y();
671  bottomY = curSite->Y();
672  tiles.insert(curSite->getTile());
673  }
674 
676  {
677  sites.clear();
678  for (auto &row : clockColumns)
679  {
680  for (auto clockColumn : row)
681  {
682  if (clockColumn)
683  delete clockColumn;
684  }
685  }
686  clockColumns.clear();
687  }
688 
694  inline void addSite(DeviceSite *tmpSite)
695  {
696  assert(tmpSite);
697  tmpSite->setClockRegion(this);
698  if (tmpSite->X() < leftX)
699  leftX = tmpSite->X();
700  if (tmpSite->X() > rightX)
701  rightX = tmpSite->X();
702  if (tmpSite->getName().find("SLICE") != std::string::npos)
703  {
704  if (tmpSite->Y() > topY)
705  topY = tmpSite->Y();
706  if (tmpSite->Y() < bottomY)
707  bottomY = tmpSite->Y();
708  }
709  sites.push_back(tmpSite);
710  tiles.insert(tmpSite->getTile());
711  }
712 
713  inline void setLeft(float x)
714  {
715  leftX = x;
716  }
717 
718  inline void setRight(float x)
719  {
720  rightX = x;
721  }
722 
723  inline void setTop(float y)
724  {
725  topY = y;
726  }
727 
728  inline void setBottom(float y)
729  {
730  bottomY = y;
731  }
732 
738  inline float getLeft()
739  {
740  return leftX;
741  }
742 
748  inline float getRight()
749  {
750  return rightX;
751  }
752 
758  inline float getTop()
759  {
760  return topY;
761  }
762 
768  inline float getBottom()
769  {
770  return bottomY;
771  }
772 
777  void mapSiteToClockColumns();
778 
784  {
785  for (auto &row : clockColumns)
786  {
787  for (auto clockColumn : row)
788  {
789  clockColumn->resetClockInfo();
790  }
791  }
792  }
793 
802  inline void addClockAndCell(int clockNetId, int cellId, float x, float y)
803  {
804  float offsetXInRegion = x - leftX;
805  float offsetYInRegion = y - bottomY;
806 
807  // this approach is not accurate enought since the slice columns are not evenly
808  // distributed in a clock region. However, it is fast for frequently checking of
809  // clock utilization
810  int colX = offsetXInRegion / colWidth;
811  int colY = offsetYInRegion / colHeight;
812  assert(colX >= -1);
813  assert(colY >= -1);
814  assert(clockColumns.size());
815  assert(colY <= (int)clockColumns.size());
816  assert(colX <= (int)clockColumns[0].size());
817  if (colX < 0)
818  colX = 0;
819  if (colY < 0)
820  colY = 0;
821  if (colX >= (int)clockColumns[0].size())
822  {
823  colX = clockColumns[0].size() - 1;
824  }
825  if (colY >= (int)clockColumns.size())
826  {
827  colY = clockColumns.size() - 1;
828  }
829  clockColumns[colY][colX]->addClockNetId(clockNetId, cellId);
830  }
831 
838  {
839  int res = 0;
840  for (auto &row : clockColumns)
841  {
842  for (auto clockColumn : row)
843  {
844  if (clockColumn)
845  {
846  if (clockColumn->getClockNum() > res)
847  {
848  res = clockColumn->getClockNum();
849  }
850  }
851  }
852  }
853  return res;
854  }
855 
857  {
858  int res = 0;
859  ClockColumn *resPtr = nullptr;
860  for (auto &row : clockColumns)
861  {
862  for (auto clockColumn : row)
863  {
864  if (clockColumn)
865  {
866  if (clockColumn->getClockNum() > res)
867  {
868  res = clockColumn->getClockNum();
869  resPtr = clockColumn;
870  }
871  }
872  }
873  }
874  return resPtr;
875  }
876 
877  inline std::vector<std::vector<ClockColumn *>> &getClockColumns()
878  {
879  return clockColumns;
880  }
881 
882  private:
883  std::vector<DeviceSite *> sites;
884  std::set<DeviceTile *> tiles;
885  std::vector<std::vector<ClockColumn *>> clockColumns;
886  int columnNumY = 2;
887  int gridX, gridY;
890  int leftTileIdX = 1000000, bottomTileIdY = 1000000, rightTileIdX = -1, topTileIdY = -1;
891  float colHeight;
892  float colWidth;
893  };
894 
895  // clang-format off
913  // clang-format on
914  DeviceInfo(std::map<std::string, std::string> &JSONCfg, std::string _deviceName);
916  {
917  for (auto bel : BELs)
918  delete bel;
919  for (auto site : sites)
920  delete site;
921  for (auto tile : tiles)
922  delete tile;
923  }
924 
925  void printStat(bool verbose = false);
926 
932  inline void addBELTypes(std::string &strBELType)
933  {
934  BELTypes.insert(strBELType);
935  }
936 
944  void addBEL(std::string &BELName, std::string &BELType, DeviceSite *parentSite);
945 
951  inline void addSiteTypes(std::string &strSiteType)
952  {
953  siteTypes.insert(strSiteType);
954  }
955 
967  void addSite(std::string &siteName, std::string &siteType, float locx, float locy, int clockRegionX,
968  int clockRegionY, DeviceTile *parentTile);
969 
970  inline void addTileTypes(std::string &strTileType)
971  {
972  tileTypes.insert(strTileType);
973  }
974  void addTile(std::string &tileName, std::string &tileType);
975 
976  inline std::string &getDeviceName()
977  {
978  return deviceName;
979  }
980 
986  inline std::set<std::string> &getBELTypes()
987  {
988  return BELTypes;
989  }
990 
997  inline DeviceBEL *getBELWithName(std::string &BELName)
998  {
999  assert(name2BEL.find(BELName) != name2BEL.end());
1000  return name2BEL[BELName];
1001  }
1002 
1009  inline std::vector<DeviceBEL *> &getBELsInType(std::string &BELType)
1010  {
1011  assert(BELType2BELs.find(BELType) != BELType2BELs.end());
1012  return BELType2BELs[BELType];
1013  }
1014 
1020  inline std::set<std::string> &getSiteTypes()
1021  {
1022  return siteTypes;
1023  }
1024 
1031  inline DeviceSite *getSiteWithName(std::string &siteName)
1032  {
1033  assert(name2Site.find(siteName) != name2Site.end());
1034  return name2Site[siteName];
1035  }
1036 
1043  inline std::vector<DeviceSite *> &getSitesInType(std::string &siteType)
1044  {
1045  assert(siteType2Sites.find(siteType) != siteType2Sites.end());
1046  return siteType2Sites[siteType];
1047  }
1048 
1054  inline std::set<std::string> &getTileTypes()
1055  {
1056  return tileTypes;
1057  }
1058 
1065  inline DeviceTile *getTileWithName(std::string &tileName)
1066  {
1067  assert(name2Tile.find(tileName) != name2Tile.end());
1068  return name2Tile[tileName];
1069  }
1070 
1077  inline std::vector<DeviceTile *> &getTilesInType(std::string &tileType)
1078  {
1079  assert(tileType2Tiles.find(tileType) != tileType2Tiles.end());
1080  return tileType2Tiles[tileType];
1081  }
1082 
1091  void loadPCIEPinOffset(std::string specialPinOffsetFileName);
1092 
1093  inline std::vector<DeviceBEL *> &getBELs()
1094  {
1095  return BELs;
1096  }
1097  inline std::vector<DeviceSite *> &getSites()
1098  {
1099  return sites;
1100  }
1101  inline std::vector<DeviceTile *> &getTiles()
1102  {
1103  return tiles;
1104  }
1105 
1106  inline DeviceBEL *getBEL(std::string &Name)
1107  {
1108  assert(name2BEL.find(Name) != name2BEL.end());
1109  return name2BEL[Name];
1110  }
1111  inline DeviceSite *getSite(std::string &Name)
1112  {
1113  assert(name2Site.find(Name) != name2Site.end());
1114  return name2Site[Name];
1115  }
1116  inline DeviceTile *getTile(std::string &Name)
1117  {
1118  assert(name2Tile.find(Name) != name2Tile.end());
1119  return name2Tile[Name];
1120  }
1121 
1122  inline std::string getBELType2FalseBELType(std::string curBELType)
1123  {
1124  if (BELType2FalseBELType.find(curBELType) == BELType2FalseBELType.end())
1125  {
1126  return curBELType;
1127  }
1128  else
1129  {
1130  return BELType2FalseBELType[curBELType];
1131  }
1132  }
1133 
1147  void loadBELType2FalseBELType(std::string curFileName);
1148 
1154  {
1155  for (auto curSite : sites)
1156  {
1157  if (!curSite->isOccupied())
1158  {
1159  curSite->resetMapped();
1160  }
1161  }
1162  }
1163 
1168  void mapClockRegionToArray();
1169 
1170  inline float getBoundaryTolerance()
1171  {
1172  return boundaryTolerance;
1173  }
1174 
1183  inline void getClockRegionByLocation(float locX, float locY, int &clockRegionX, int &clockRegionY)
1184  {
1185  int resX = 0, resY = 0;
1186  for (int j = 0; j < clockRegionNumX; j++)
1187  {
1188  if (clockRegionXBounds[j] < locX)
1189  {
1190  resX = j;
1191  }
1192  else
1193  {
1194  break;
1195  }
1196  }
1197  for (int i = 0; i < clockRegionNumY; i++)
1198  {
1199  if (clockRegionYBounds[i] < locY)
1200  {
1201  resY = i;
1202  }
1203  else
1204  {
1205  break;
1206  }
1207  }
1208  clockRegionX = resX;
1209  clockRegionY = resY;
1210  }
1211 
1217  inline int getClockRegionNumX()
1218  {
1219  return clockRegionNumX;
1220  }
1221 
1227  inline int getClockRegionNumY()
1228  {
1229  return clockRegionNumY;
1230  }
1231 
1242  void recordClockRelatedCell(float locX, float locY, int regionX, int regionY, int cellId, int netId);
1243 
1251  inline int getMaxUtilizationOfClockColumns_InClockRegion(int regionX, int regionY)
1252  {
1253  return clockRegions[regionY][regionX]->getMaxUtilizationOfClockColumns();
1254  }
1255 
1261  inline std::vector<std::vector<ClockRegion *>> &getClockRegions()
1262  {
1263  return clockRegions;
1264  }
1265 
1266  inline std::vector<ClockColumn *> &getClockColumns()
1267  {
1268  return clockColumns;
1269  }
1270 
1271  private:
1272  std::string deviceName;
1273  std::set<std::string> BELTypes;
1274  std::map<std::string, std::vector<DeviceBEL *>> BELType2BELs;
1275  std::vector<DeviceBEL *> BELs;
1276 
1277  std::set<std::string> siteTypes;
1278  std::map<std::string, std::vector<DeviceSite *>> siteType2Sites;
1279  std::vector<DeviceSite *> sites;
1280 
1281  std::set<std::string> tileTypes;
1282  std::map<std::string, std::vector<DeviceTile *>> tileType2Tiles;
1283  std::vector<DeviceTile *> tiles;
1284 
1285  std::map<std::string, std::string> BELType2FalseBELType;
1286 
1287  std::map<std::string, DeviceBEL *> name2BEL;
1288  std::map<std::string, DeviceSite *> name2Site;
1289  std::map<std::string, DeviceTile *> name2Tile;
1290 
1291  std::map<std::pair<int, int>, ClockRegion *> coord2ClockRegion;
1292  std::vector<std::vector<ClockRegion *>> clockRegions;
1293  std::vector<ClockColumn *> clockColumns;
1294  std::vector<float> clockRegionXBounds;
1295  std::vector<float> clockRegionYBounds;
1296 
1297  std::map<std::string, std::string> &JSONCfg;
1300 
1301  float boundaryTolerance = 0.5;
1304 };
1305 
1306 #endif
DeviceInfo::ClockRegion::bottomSiteY
int bottomSiteY
Definition: DeviceInfo.h:889
DeviceInfo::DeviceSite::getTile
DeviceTile * getTile()
Definition: DeviceInfo.h:235
DeviceInfo::ClockColumn::left
float left
Definition: DeviceInfo.h:628
DeviceInfo::mapClockRegionToArray
void mapClockRegionToArray()
map recognized clock regions into an array for later clock utilization evaluation
Definition: DeviceInfo.cc:172
DeviceInfo::ClockColumn::setRight
void setRight(float x)
Definition: DeviceInfo.h:570
DeviceInfo::ClockRegion::addClockAndCell
void addClockAndCell(int clockNetId, int cellId, float x, float y)
add a cell into the clock region
Definition: DeviceInfo.h:802
DeviceInfo::ClockColumn::ClockColumn
ClockColumn()
Definition: DeviceInfo.h:477
DeviceInfo::DeviceSite::locX
float locX
Definition: DeviceInfo.h:391
DeviceInfo::ClockRegion::rightX
float rightX
Definition: DeviceInfo.h:888
DeviceInfo::clockRegionXBounds
std::vector< float > clockRegionXBounds
Definition: DeviceInfo.h:1294
DeviceInfo::ClockRegion::bottomY
float bottomY
Definition: DeviceInfo.h:888
DeviceInfo::ClockRegion::rightSiteX
int rightSiteX
Definition: DeviceInfo.h:889
DeviceInfo::ClockRegion::getRight
float getRight()
Get the Right boundary of the clock region.
Definition: DeviceInfo.h:748
DeviceInfo::ClockRegion::setRight
void setRight(float x)
Definition: DeviceInfo.h:718
DeviceInfo::ClockRegion::getMaxUtilizationClockColumnsPtr
ClockColumn * getMaxUtilizationClockColumnsPtr()
Definition: DeviceInfo.h:856
DeviceInfo::ClockRegion::setBottom
void setBottom(float y)
Definition: DeviceInfo.h:728
DeviceInfo::ClockColumn::setTop
void setTop(float y)
Definition: DeviceInfo.h:575
DeviceInfo::resetAllSiteMapping
void resetAllSiteMapping()
remove the mapped flags for all sites without fixed elements
Definition: DeviceInfo.h:1153
DeviceInfo::DeviceTile::~DeviceTile
~DeviceTile()
Definition: DeviceInfo.h:436
DeviceInfo::DeviceSite::setMapped
void setMapped()
Definition: DeviceInfo.h:331
DeviceInfo::DeviceSite::getSiteX
int getSiteX()
Definition: DeviceInfo.h:346
DeviceInfo::DeviceSite::parentTile
DeviceTile * parentTile
Definition: DeviceInfo.h:389
DeviceInfo::clockRegions
std::vector< std::vector< ClockRegion * > > clockRegions
Definition: DeviceInfo.h:1292
DeviceInfo::boundaryTolerance
float boundaryTolerance
Definition: DeviceInfo.h:1301
DeviceInfo::DeviceElementType
DeviceElementType
types of the elements in a device
Definition: DeviceInfo.h:50
DeviceInfo::DeviceElement::getName
std::string & getName()
Definition: DeviceInfo.h:79
DeviceInfo::DeviceSite::clockRegion
ClockRegion * clockRegion
Definition: DeviceInfo.h:384
DeviceInfo::ClockColumn::getTop
float getTop()
Definition: DeviceInfo.h:615
DeviceInfo::DeviceElement::getElementIdInParent
int getElementIdInParent()
Definition: DeviceInfo.h:91
DeviceInfo::DeviceTile::DeviceTile
DeviceTile(std::string &name, std::string &tileType, DeviceInfo *device, int id)
Construct a new Device Tile object.
Definition: DeviceInfo.h:426
DeviceInfo::DeviceSite::setSiteLocation
void setSiteLocation(float x, float y)
Definition: DeviceInfo.h:267
DeviceInfo::ClockColumn::top
float top
Definition: DeviceInfo.h:628
DeviceInfo::BELTypes
std::set< std::string > BELTypes
Definition: DeviceInfo.h:1273
DeviceInfo::getSiteWithName
DeviceSite * getSiteWithName(std::string &siteName)
Get a site based on a given name.
Definition: DeviceInfo.h:1031
DeviceInfo::DeviceElementType_Site
@ DeviceElementType_Site
Definition: DeviceInfo.h:52
exportDeviceLocation.siteType
siteType
Definition: exportDeviceLocation.py:357
DeviceInfo::ClockRegion::resetClockUtilizationInfo
void resetClockUtilizationInfo()
reset the clock utilization for each column in the clock region
Definition: DeviceInfo.h:783
DeviceInfo::DeviceSite::DeviceSitePinInfos::name2offsetY
std::map< std::string, float > name2offsetY
Definition: DeviceInfo.h:231
paintPlacement.y
list y
Definition: paintPlacement.py:153
DeviceInfo::name2Site
std::map< std::string, DeviceSite * > name2Site
Definition: DeviceInfo.h:1288
DeviceInfo::getSitesInType
std::vector< DeviceSite * > & getSitesInType(std::string &siteType)
Get sites of a specfic type.
Definition: DeviceInfo.h:1043
DeviceInfo::DeviceBEL::site
DeviceSite * site
Definition: DeviceInfo.h:152
DeviceInfo::DeviceSite::siteX
int siteX
Definition: DeviceInfo.h:396
DeviceInfo::ClockRegion::columnNumY
int columnNumY
Definition: DeviceInfo.h:886
DeviceInfo::BELs
std::vector< DeviceBEL * > BELs
Definition: DeviceInfo.h:1275
DeviceInfo::getBELs
std::vector< DeviceBEL * > & getBELs()
Definition: DeviceInfo.h:1093
DeviceInfo::ClockRegion::colHeight
float colHeight
Definition: DeviceInfo.h:891
DeviceInfo::ClockColumn::getClockNum
int getClockNum()
Definition: DeviceInfo.h:544
DeviceInfo::ClockRegion::topTileIdY
int topTileIdY
Definition: DeviceInfo.h:890
DeviceInfo::getClockColumns
std::vector< ClockColumn * > & getClockColumns()
Definition: DeviceInfo.h:1266
DeviceInfo::DeviceSite::clockHalfColumn
ClockColumn * clockHalfColumn
Definition: DeviceInfo.h:385
DeviceInfo::DeviceSite::setClockRegion
void setClockRegion(ClockRegion *_clockRegion)
Definition: DeviceInfo.h:362
DeviceInfo::DeviceElement::id
int id
Definition: DeviceInfo.h:100
DeviceInfo::DeviceSite::mapped
bool mapped
a flag that this site is mapped to an design element (might be movable elements)
Definition: DeviceInfo.h:408
DeviceInfo::ClockColumn::setLeft
void setLeft(float x)
Definition: DeviceInfo.h:565
DeviceInfo::DeviceSite::parentSite
DeviceSite * parentSite
Definition: DeviceInfo.h:387
DeviceInfo::getClockRegionByLocation
void getClockRegionByLocation(float locX, float locY, int &clockRegionX, int &clockRegionY)
Get the clock region ID (X/Y) by a given location (X/Y)
Definition: DeviceInfo.h:1183
DeviceInfo::ClockColumn::clockNetId2Sites
std::map< int, DeviceSite * > clockNetId2Sites
Definition: DeviceInfo.h:641
DeviceInfo::DeviceSite::~DeviceSite
~DeviceSite()
Definition: DeviceInfo.h:207
DeviceInfo::ClockColumn::getBottom
float getBottom()
Definition: DeviceInfo.h:620
paintPlacement.x
list x
Definition: paintPlacement.py:152
DeviceInfo::clockColumns
std::vector< ClockColumn * > clockColumns
Definition: DeviceInfo.h:1293
DeviceInfo::DeviceSite::getChildrenBELs
std::vector< DeviceBEL * > & getChildrenBELs()
Definition: DeviceInfo.h:283
DeviceInfo::ClockRegion::setTop
void setTop(float y)
Definition: DeviceInfo.h:723
DeviceInfo::DeviceSite::DeviceSitePinInfos::~DeviceSitePinInfos
~DeviceSitePinInfos()
Definition: DeviceInfo.h:226
DeviceInfo::DeviceSite::getSitePinInfos
DeviceSitePinInfos * getSitePinInfos()
Definition: DeviceInfo.h:297
DeviceInfo::ClockColumn::right
float right
Definition: DeviceInfo.h:628
DeviceInfo::getClockRegionNumY
int getClockRegionNumY()
Get the number of rows of the clock region array.
Definition: DeviceInfo.h:1227
DeviceInfo::ClockColumn::setBoundary
void setBoundary(float _left, float _right, float _top, float _bottom)
Set the Boundary of the clock column.
Definition: DeviceInfo.h:557
DeviceInfo::ClockColumn
a column of site in clock region
Definition: DeviceInfo.h:475
DeviceInfo::ClockRegion::sites
std::vector< DeviceSite * > sites
Definition: DeviceInfo.h:883
DeviceInfo::DeviceTile::getTileIdX
int getTileIdX()
Definition: DeviceInfo.h:450
DeviceInfo::DeviceTile::addChildSite
void addChildSite(DeviceElement *sitePtr)
Definition: DeviceInfo.cc:459
DeviceInfo::DeviceSite::setSitePinInfos
void setSitePinInfos(DeviceSitePinInfos *_sitePins)
Definition: DeviceInfo.h:301
DeviceInfo::ClockRegion::getBottom
float getBottom()
Get the Bottom boundary of the clock region.
Definition: DeviceInfo.h:768
DeviceInfo::ClockColumn::setId
void setId(unsigned int _id)
Definition: DeviceInfo.h:595
DeviceInfo::ClockColumn::bottom
float bottom
Definition: DeviceInfo.h:628
DeviceInfo::DeviceTile::getTileType
std::string & getTileType()
Definition: DeviceInfo.h:445
DeviceInfo::getBEL
DeviceBEL * getBEL(std::string &Name)
Definition: DeviceInfo.h:1106
DeviceInfo::ClockRegion::getMaxUtilizationOfClockColumns
int getMaxUtilizationOfClockColumns()
Get the Max Utilization Of Clock Columns.
Definition: DeviceInfo.h:837
DeviceInfo::ClockColumn::sites
std::vector< DeviceSite * > sites
Definition: DeviceInfo.h:627
DeviceInfo::tiles
std::vector< DeviceTile * > tiles
Definition: DeviceInfo.h:1283
DeviceInfo::DeviceSite::DeviceSite
DeviceSite(std::string &name, std::string &siteType, DeviceElement *parentPtr, float locX, float locY, int clockRegionX, int clockRegionY, int id)
Construct a new Device Site object.
Definition: DeviceInfo.h:177
DeviceInfo::ClockColumn::getLeft
float getLeft()
Definition: DeviceInfo.h:605
DeviceInfo::ClockRegion::ClockRegion
ClockRegion(DeviceSite *curSite)
Construct a new Clock Region object.
Definition: DeviceInfo.h:659
DeviceInfo::getMaxUtilizationOfClockColumns_InClockRegion
int getMaxUtilizationOfClockColumns_InClockRegion(int regionX, int regionY)
Get the maximum utilization among the clock columns in clock region.
Definition: DeviceInfo.h:1251
DeviceInfo::DeviceElement
basic class of device element
Definition: DeviceInfo.h:63
DeviceInfo::DeviceElement::type
DeviceElementType type
Definition: DeviceInfo.h:99
DeviceInfo::DeviceSite::DeviceSitePinInfos::refPinsName
std::vector< std::string > refPinsName
Definition: DeviceInfo.h:229
DeviceInfo::ClockColumn::getClockNumLimit
unsigned int getClockNumLimit()
Definition: DeviceInfo.h:590
DeviceInfo::ClockRegion::colWidth
float colWidth
Definition: DeviceInfo.h:892
DeviceInfo::deviceArchievedTextFileName
std::string deviceArchievedTextFileName
Definition: DeviceInfo.h:1298
DeviceInfo::DeviceSite::setTile
void setTile(DeviceElement *parentTilePtr)
Definition: DeviceInfo.cc:444
DeviceInfo::name2BEL
std::map< std::string, DeviceBEL * > name2BEL
Definition: DeviceInfo.h:1287
DeviceInfo::clockRegionYBounds
std::vector< float > clockRegionYBounds
Definition: DeviceInfo.h:1295
DeviceInfo::addTile
void addTile(std::string &tileName, std::string &tileType)
Definition: DeviceInfo.cc:554
DeviceInfo::DeviceElementType_CLOCKREGION
@ DeviceElementType_CLOCKREGION
Definition: DeviceInfo.h:54
DeviceInfo::DeviceSite::getClockHalfColumn
ClockColumn * getClockHalfColumn()
Definition: DeviceInfo.h:377
DeviceInfo::ClockRegion::gridX
int gridX
Definition: DeviceInfo.h:887
DeviceInfo::getTile
DeviceTile * getTile(std::string &Name)
Definition: DeviceInfo.h:1116
DeviceInfo::getBELTypes
std::set< std::string > & getBELTypes()
get BEL types in the device
Definition: DeviceInfo.h:986
DeviceInfo::DeviceSite::sitePins
DeviceSitePinInfos * sitePins
Definition: DeviceInfo.h:390
DeviceInfo::DeviceTile::getChildrenSites
std::vector< DeviceSite * > & getChildrenSites()
Definition: DeviceInfo.h:441
DeviceInfo::DeviceTile::tileIdY
int tileIdY
Definition: DeviceInfo.h:465
DeviceInfo::printStat
void printStat(bool verbose=false)
Definition: DeviceInfo.cc:466
DeviceInfo::coord2ClockRegion
std::map< std::pair< int, int >, ClockRegion * > coord2ClockRegion
Definition: DeviceInfo.h:1291
DeviceInfo::ClockRegion::gridY
int gridY
Definition: DeviceInfo.h:887
DeviceInfo::ClockColumn::id
int id
Definition: DeviceInfo.h:626
DeviceInfo::DeviceElement::name
std::string name
Definition: DeviceInfo.h:97
DeviceInfo::DeviceSite::childrenSites
std::vector< DeviceSite * > childrenSites
Definition: DeviceInfo.h:388
DeviceInfo::recordClockRelatedCell
void recordClockRelatedCell(float locX, float locY, int regionX, int regionY, int cellId, int netId)
record the information of cell in a specific clock region
Definition: DeviceInfo.cc:388
DeviceInfo::siteTypes
std::set< std::string > siteTypes
Definition: DeviceInfo.h:1277
DeviceInfo::DeviceSite
Site class for site on device.
Definition: DeviceInfo.h:163
DeviceInfo::DeviceSite::getClockRegionX
int getClockRegionX()
Definition: DeviceInfo.h:352
DeviceInfo::getSites
std::vector< DeviceSite * > & getSites()
Definition: DeviceInfo.h:1097
DeviceInfo::ClockColumn::resetClockInfo
void resetClockInfo()
reset the clock net information, including cells in it
Definition: DeviceInfo.h:517
DeviceInfo::DeviceSite::getClockRegion
ClockRegion * getClockRegion()
Definition: DeviceInfo.h:367
DeviceInfo::addSiteTypes
void addSiteTypes(std::string &strSiteType)
add a Site type into the set of the existing site types
Definition: DeviceInfo.h:951
strPrint.h
DeviceInfo::DeviceBEL::DeviceBEL
DeviceBEL(std::string &name, std::string &BELType, DeviceElement *parentPtr, int id)
Construct a new Device BEL object.
Definition: DeviceInfo.h:124
DeviceInfo::ClockColumn::getSites
std::vector< DeviceSite * > & getSites()
Definition: DeviceInfo.h:508
DeviceInfo::ClockColumn::~ClockColumn
~ClockColumn()
Definition: DeviceInfo.h:484
DeviceInfo::BELType2BELs
std::map< std::string, std::vector< DeviceBEL * > > BELType2BELs
Definition: DeviceInfo.h:1274
DeviceInfo::DeviceElement::~DeviceElement
virtual ~DeviceElement()
Definition: DeviceInfo.h:75
DeviceInfo::name2Tile
std::map< std::string, DeviceTile * > name2Tile
Definition: DeviceInfo.h:1289
DeviceInfo::ClockRegion
class for clock regions on FPGA
Definition: DeviceInfo.h:652
DeviceInfo::getSite
DeviceSite * getSite(std::string &Name)
Definition: DeviceInfo.h:1111
DeviceInfo::specialPinOffsetFileName
std::string specialPinOffsetFileName
Definition: DeviceInfo.h:1299
DeviceInfo::getBELWithName
DeviceBEL * getBELWithName(std::string &BELName)
get a BEL based on a given name
Definition: DeviceInfo.h:997
DeviceInfo::getBoundaryTolerance
float getBoundaryTolerance()
Definition: DeviceInfo.h:1170
DeviceInfo::addSite
void addSite(std::string &siteName, std::string &siteType, float locx, float locy, int clockRegionX, int clockRegionY, DeviceTile *parentTile)
add a site into the device information class
Definition: DeviceInfo.cc:535
DeviceInfo::DeviceSite::DeviceSitePinInfos::DeviceSitePinInfos
DeviceSitePinInfos()
Definition: DeviceInfo.h:220
DeviceInfo::ClockRegion::mapSiteToClockColumns
void mapSiteToClockColumns()
for the clock column constraints, we need to map site to columns.
Definition: DeviceInfo.cc:264
DeviceInfo::DeviceTile::getTileIdY
int getTileIdY()
Definition: DeviceInfo.h:455
DeviceInfo::getBELsInType
std::vector< DeviceBEL * > & getBELsInType(std::string &BELType)
get BELs of a specific type
Definition: DeviceInfo.h:1009
DeviceInfo::DeviceSite::DeviceSitePinInfos
a class record the pin on the site boundary
Definition: DeviceInfo.h:218
DeviceInfo::ClockRegion::rightTileIdX
int rightTileIdX
Definition: DeviceInfo.h:890
DeviceInfo::DeviceElementType_Tile
@ DeviceElementType_Tile
Definition: DeviceInfo.h:53
DeviceInfo::getTileWithName
DeviceTile * getTileWithName(std::string &tileName)
Get a tile With name.
Definition: DeviceInfo.h:1065
DeviceInfo::DeviceElement::parentPtr
DeviceElement * parentPtr
Definition: DeviceInfo.h:98
DeviceInfo::DeviceTile::childrenSites
std::vector< DeviceSite * > childrenSites
Definition: DeviceInfo.h:462
DeviceInfo::DeviceSite::occupied
bool occupied
a flag that this site is occupied by fixed element
Definition: DeviceInfo.h:402
DeviceInfo::DeviceBEL::getSite
DeviceSite * getSite()
Definition: DeviceInfo.h:135
DeviceInfo::getTiles
std::vector< DeviceTile * > & getTiles()
Definition: DeviceInfo.h:1101
DeviceInfo::clockRegionNumY
int clockRegionNumY
Definition: DeviceInfo.h:1303
DeviceInfo::DeviceSite::getSiteType
std::string & getSiteType()
Definition: DeviceInfo.h:273
DeviceInfo::ClockColumn::setBottom
void setBottom(float y)
Definition: DeviceInfo.h:580
DeviceInfo::DeviceInfo
DeviceInfo(std::map< std::string, std::string > &JSONCfg, std::string _deviceName)
Construct a new Device Info object.
Definition: DeviceInfo.cc:44
DeviceInfo::DeviceSite::setClockHalfColumn
void setClockHalfColumn(ClockColumn *_clockHalfColumn)
Definition: DeviceInfo.h:372
DeviceInfo::siteType2Sites
std::map< std::string, std::vector< DeviceSite * > > siteType2Sites
Definition: DeviceInfo.h:1278
DeviceInfo::ClockRegion::leftSiteX
int leftSiteX
Definition: DeviceInfo.h:889
DeviceInfo::DeviceSite::setOccupied
void setOccupied()
Definition: DeviceInfo.h:316
DeviceInfo::DeviceSite::siteType
std::string siteType
Definition: DeviceInfo.h:383
DeviceInfo::DeviceSite::clockRegionX
int clockRegionX
Definition: DeviceInfo.h:393
DeviceInfo::ClockColumn::getId
unsigned int getId()
Definition: DeviceInfo.h:600
DeviceInfo::getTileTypes
std::set< std::string > & getTileTypes()
Get the tile types in the device.
Definition: DeviceInfo.h:1054
DeviceInfo::ClockRegion::leftX
float leftX
Definition: DeviceInfo.h:888
DeviceInfo::addTileTypes
void addTileTypes(std::string &strTileType)
Definition: DeviceInfo.h:970
DeviceInfo::DeviceSite::getChildrenSites
std::vector< DeviceSite * > & getChildrenSites()
Definition: DeviceInfo.h:262
DeviceInfo::DeviceTile::tileIdX
int tileIdX
Definition: DeviceInfo.h:464
DeviceInfo::DeviceSite::getClockRegionY
int getClockRegionY()
Definition: DeviceInfo.h:357
DeviceInfo::DeviceSite::getSiteY
int getSiteY()
Definition: DeviceInfo.h:340
DeviceInfo::ClockColumn::addClockNetId
void addClockNetId(int clockNetId, int cellId)
add a cell in a specific clock domain
Definition: DeviceInfo.h:530
DeviceInfo::~DeviceInfo
~DeviceInfo()
Definition: DeviceInfo.h:915
DeviceInfo::ClockRegion::setLeft
void setLeft(float x)
Definition: DeviceInfo.h:713
DeviceInfo::DeviceSite::addChildSite
void addChildSite(DeviceElement *parentSitePtr)
Set the Parent Site object.
Definition: DeviceInfo.cc:455
DeviceInfo::DeviceBEL::setSite
void setSite(DeviceElement *parentPtr)
Definition: DeviceInfo.cc:437
DeviceInfo::DeviceSite::isMapped
bool isMapped()
check whether this site is mapped to an design element (might be movable elements)
Definition: DeviceInfo.h:327
DeviceInfo::getBELType2FalseBELType
std::string getBELType2FalseBELType(std::string curBELType)
Definition: DeviceInfo.h:1122
DeviceInfo::addBELTypes
void addBELTypes(std::string &strBELType)
add a BEL type into the set of the existing BEL types
Definition: DeviceInfo.h:932
DeviceInfo::getClockRegionNumX
int getClockRegionNumX()
Get the number of columns of the clock region array.
Definition: DeviceInfo.h:1217
DeviceInfo::clockRegionNumX
int clockRegionNumX
Definition: DeviceInfo.h:1302
DeviceInfo::DeviceElement::getParentPtr
DeviceElement * getParentPtr()
Definition: DeviceInfo.h:83
DeviceInfo::getTilesInType
std::vector< DeviceTile * > & getTilesInType(std::string &tileType)
Get the tiles of a specific type.
Definition: DeviceInfo.h:1077
DeviceInfo::DeviceSite::DeviceSitePinInfos::name2offsetX
std::map< std::string, float > name2offsetX
Definition: DeviceInfo.h:230
DeviceInfo::DeviceBEL
BEL(Basic Element of Logic), the smallest undividable element.
Definition: DeviceInfo.h:114
DeviceInfo::ClockRegion::topY
float topY
Definition: DeviceInfo.h:888
DeviceInfo::DeviceElement::getElementType
DeviceElementType getElementType()
Definition: DeviceInfo.h:87
DeviceInfo::DeviceTile::device
DeviceInfo * device
Definition: DeviceInfo.h:463
DeviceInfo::DeviceBEL::BELType
std::string BELType
BEL Type recorded by a string (for flexibility)
Definition: DeviceInfo.h:151
DeviceInfo::ClockRegion::getClockColumns
std::vector< std::vector< ClockColumn * > > & getClockColumns()
Definition: DeviceInfo.h:877
DeviceInfo
Information class related to FPGA device, including the details of BEL/Site/Tile/ClockRegion.
Definition: DeviceInfo.h:43
DeviceInfo::DeviceSite::X
float X()
Definition: DeviceInfo.h:288
DeviceInfo::ClockRegion::addSite
void addSite(DeviceSite *tmpSite)
add a site in the clock region and update the boundary of the clock region
Definition: DeviceInfo.h:694
DeviceInfo::DeviceSite::childrenBELs
std::vector< DeviceBEL * > childrenBELs
Definition: DeviceInfo.h:386
DeviceInfo::ClockRegion::topSiteY
int topSiteY
Definition: DeviceInfo.h:889
DeviceInfo::DeviceSite::setParentSite
void setParentSite(DeviceElement *parentSitePtr)
Set the Parent Site object.
Definition: DeviceInfo.cc:451
DeviceInfo::DeviceSite::getParentSite
DeviceSite * getParentSite()
Definition: DeviceInfo.h:249
DeviceInfo::DeviceTile::tileType
std::string tileType
Definition: DeviceInfo.h:461
DeviceInfo::DeviceSite::resetMapped
void resetMapped()
Definition: DeviceInfo.h:335
DeviceInfo::DeviceElement::DeviceElement
DeviceElement(std::string &name, DeviceElement *parentPtr, DeviceElementType type, int id)
Definition: DeviceInfo.h:65
DeviceInfo::DeviceSite::siteY
int siteY
Definition: DeviceInfo.h:395
DeviceInfo::tileType2Tiles
std::map< std::string, std::vector< DeviceTile * > > tileType2Tiles
Definition: DeviceInfo.h:1282
DeviceInfo::tileTypes
std::set< std::string > tileTypes
Definition: DeviceInfo.h:1281
DeviceInfo::ClockRegion::tiles
std::set< DeviceTile * > tiles
Definition: DeviceInfo.h:884
DeviceInfo::DeviceElementType_Device
@ DeviceElementType_Device
Definition: DeviceInfo.h:55
DeviceInfo::BELType2FalseBELType
std::map< std::string, std::string > BELType2FalseBELType
Definition: DeviceInfo.h:1285
DeviceInfo::JSONCfg
std::map< std::string, std::string > & JSONCfg
Definition: DeviceInfo.h:1297
DeviceInfo::DeviceSite::isOccupied
bool isOccupied()
check whether this site is occupied by fixed element
Definition: DeviceInfo.h:312
DeviceInfo::loadPCIEPinOffset
void loadPCIEPinOffset(std::string specialPinOffsetFileName)
load the detailed location information of pins on PCIE IO slot
Definition: DeviceInfo.cc:394
DeviceInfo::ClockRegion::~ClockRegion
~ClockRegion()
Definition: DeviceInfo.h:675
checkHalfColumn.i
int i
Definition: checkHalfColumn.py:5
DeviceInfo::ClockColumn::clockNetId2CellIds
std::map< int, std::vector< int > > clockNetId2CellIds
the elements for each clock in the clock column
Definition: DeviceInfo.h:640
DeviceInfo::DeviceBEL::~DeviceBEL
~DeviceBEL()
Definition: DeviceInfo.h:130
DeviceInfo::ClockRegion::clockColumns
std::vector< std::vector< ClockColumn * > > clockColumns
Definition: DeviceInfo.h:885
DeviceInfo::DeviceSite::addChildBEL
void addChildBEL(DeviceBEL *child)
Definition: DeviceInfo.h:278
DeviceInfo::ClockColumn::clockLimit
unsigned int clockLimit
Definition: DeviceInfo.h:642
DeviceInfo::ClockColumn::getClockNetId2CellIds
std::map< int, std::vector< int > > & getClockNetId2CellIds()
Definition: DeviceInfo.h:585
DeviceInfo::ClockColumn::clockNetId2Cnt
std::map< int, int > clockNetId2Cnt
counter for the elements for each clock in the clock column
Definition: DeviceInfo.h:634
DeviceInfo::getDeviceName
std::string & getDeviceName()
Definition: DeviceInfo.h:976
DeviceInfo::ClockRegion::leftTileIdX
int leftTileIdX
Definition: DeviceInfo.h:890
DeviceInfo::loadBELType2FalseBELType
void loadBELType2FalseBELType(std::string curFileName)
load BEL type remapping information since some cell can be placed in sites of different sites....
Definition: DeviceInfo.cc:570
DeviceInfo::addBEL
void addBEL(std::string &BELName, std::string &BELType, DeviceSite *parentSite)
add a BEL element into the device information
Definition: DeviceInfo.cc:518
DeviceInfo::ClockRegion::getLeft
float getLeft()
Get the Left boundary of the clock region.
Definition: DeviceInfo.h:738
DeviceInfo::deviceName
std::string deviceName
Definition: DeviceInfo.h:1272
DeviceInfo::DeviceElementType_BEL
@ DeviceElementType_BEL
Definition: DeviceInfo.h:51
DeviceInfo::sites
std::vector< DeviceSite * > sites
Definition: DeviceInfo.h:1279
DeviceInfo::DeviceElement::DeviceElement
DeviceElement(std::string &name, DeviceElementType type, int id)
Definition: DeviceInfo.h:70
DeviceInfo::DeviceTile
A tile is a combination of sites.
Definition: DeviceInfo.h:416
DeviceInfo::ClockRegion::getTop
float getTop()
Get the Top boundary of the clock region.
Definition: DeviceInfo.h:758
DeviceInfo::ClockRegion::bottomTileIdY
int bottomTileIdY
Definition: DeviceInfo.h:890
DeviceInfo::DeviceSite::locY
float locY
Definition: DeviceInfo.h:392
DeviceInfo::DeviceSite::clockRegionY
int clockRegionY
Definition: DeviceInfo.h:394
DeviceInfo::ClockColumn::addSite
void addSite(DeviceSite *curSite)
Definition: DeviceInfo.h:492
DeviceInfo::DeviceBEL::getBELType
std::string & getBELType()
Definition: DeviceInfo.h:139
DeviceInfo::getClockRegions
std::vector< std::vector< ClockRegion * > > & getClockRegions()
Get the Clock Regions in an 2D array clockregion[Y][X].
Definition: DeviceInfo.h:1261
DeviceInfo::DeviceSite::Y
float Y()
Definition: DeviceInfo.h:292
DeviceInfo::ClockColumn::getRight
float getRight()
Definition: DeviceInfo.h:610
DeviceInfo::getSiteTypes
std::set< std::string > & getSiteTypes()
Get the Site Types in the device.
Definition: DeviceInfo.h:1020