#include <Nodes.h>
Collaboration diagram for parquetfp::Nodes:

Public Member Functions | |
| Nodes (char *baseName) | |
| Nodes (void) | |
| unsigned | getNumNodes (void) |
| void | parseNodes (char *fnameBl) |
| void | parsePl (char *fnamePl) |
| Node & | getNode (unsigned index) |
| Node & | getTerm (unsigned index) |
| void | putNewNode (Node &node) |
| void | putNewTerm (Node &term) |
| void | clearNodes (void) |
| void | clearTerm (void) |
| void | clean (void) |
| itNode | nodesBegin (void) |
| itNode | nodesEnd (void) |
| unsigned | getNumTerminals (void) |
| Node & | getTerminal (unsigned index) |
| itNode | terminalsBegin (void) |
| itNode | terminalsEnd (void) |
| vector< double > | getNodeWidths () |
| vector< double > | getNodeHeights () |
| vector< double > | getXLocs () |
| vector< double > | getYLocs () |
| double | getNodeWidth (unsigned index) |
| double | getNodeHeight (unsigned index) |
| double | getNodesArea () |
| double | getMinHeight () |
| double | getMinWidth () |
| void | putNodeWidth (unsigned index, double width) |
| void | putNodeHeight (unsigned index, double height) |
| void | changeOrient (unsigned index, ORIENT newOrient, Nets &nets) |
| void | updatePinsInfo (Nets &nets) |
| void | updatePlacement (int index, bool type, double xloc, double yloc) |
| void | updateOrient (int index, bool type, ORIENT newOrient) |
| void | updateHW (int index, bool type, double width, double height) |
| void | initNodesFastPOAccess (Nets &nets, bool reset=false) |
| void | savePl (char *baseFileName) |
| void | saveNodes (char *baseFileName) |
| void | saveCapoNodes (char *baseFileName) |
| void | saveCapoPl (char *baseFileName) |
| void | saveCapoScl (char *baseFileName, double reqdAR, double reqdWS) |
Private Attributes | |
| vector< Node > | _nodes |
| vector< Node > | _terminals |
|
|
Definition at line 56 of file Nodes.cxx. References parseNodes(), and parsePl().
00057 {
00058 char fname[1024];
00059 strcpy(fname,baseName);
00060 strcat(fname,".blocks");
00061 parseNodes(fname);
00062 strcpy(fname,baseName);
00063 strcat(fname,".pl");
00064 parsePl(fname);
00065 }
|
Here is the call graph for this function:

|
|
Definition at line 58 of file Nodes.h.
00059 {}
|
|
||||||||||||||||
|
Definition at line 422 of file Nodes.cxx. References _nodes, and parquetfp::Node::changeOrient(). Referenced by parquetfp::Annealer::anneal(), and parquetfp::DB::setOrient().
00423 {
00424 Node& node = _nodes[index];
00425 node.changeOrient(newOrient, nets);
00426 }
|
Here is the call graph for this function:

|
|
Definition at line 84 of file Nodes.h. References _nodes, and _terminals. Referenced by parquetfp::DB::clean().
00085 {
00086 _nodes.clear();
00087 _terminals.clear();
00088 }
|
|
|
Definition at line 78 of file Nodes.h. References _nodes.
00079 { _nodes.resize(0); }
|
|
|
Definition at line 81 of file Nodes.h. References _terminals.
00082 { _terminals.resize(0); }
|
|
|
Definition at line 658 of file Nodes.cxx. References parquetfp::itNode, nodesBegin(), and nodesEnd(). Referenced by saveCapoScl().
00659 {
00660 itNode node;
00661 double minHeight = 1e100;
00662 for(node = nodesBegin(); node != nodesEnd(); ++node)
00663 {
00664 if(minHeight > node->getHeight())
00665 minHeight = node->getHeight();
00666 }
00667 return minHeight;
00668 }
|
Here is the call graph for this function:

|
|
Definition at line 670 of file Nodes.cxx. References parquetfp::itNode, nodesBegin(), and nodesEnd(). Referenced by saveCapoScl().
00671 {
00672 itNode node;
00673 double minWidth = 1e100;
00674 for(node = nodesBegin(); node != nodesEnd(); ++node)
00675 {
00676 if(minWidth > node->getWidth())
00677 minWidth = node->getWidth();
00678 }
00679 return minWidth;
00680 }
|
Here is the call graph for this function:

|
|
|
Definition at line 363 of file Nodes.cxx. References _nodes. Referenced by parquetfp::Annealer::anneal(), parquetfp::DB::getNodeHeight(), parquetfp::DB::getTopRightCorner(), parquetfp::Annealer::makeMoveSlacksOrient(), and parquetfp::Annealer::packSoftBlocks().
00364 {
00365 return _nodes[index].getHeight();
00366 }
|
|
|
Definition at line 386 of file Nodes.cxx. References parquetfp::itNode, nodesBegin(), and nodesEnd(). Referenced by parquetfp::DB::getNodeHeights().
00387 {
00388 vector<double> heights;
00389 for(itNode iNodes=nodesBegin(); iNodes!=nodesEnd(); iNodes++)
00390 heights.push_back(iNodes->getHeight());
00391 return heights;
00392 }
|
Here is the call graph for this function:

|
|
Definition at line 411 of file Nodes.cxx. References parquetfp::itNode, nodesBegin(), and nodesEnd(). Referenced by parquetfp::DB::getNodesArea(), and saveCapoScl().
00412 {
00413 itNode iNode;
00414 double area = 0;
00415 for(iNode = nodesBegin(); iNode != nodesEnd(); ++iNode)
00416 {
00417 area += iNode->getHeight()*iNode->getWidth();
00418 }
00419 return area;
00420 }
|
Here is the call graph for this function:

|
|
Definition at line 358 of file Nodes.cxx. References _nodes. Referenced by parquetfp::Annealer::anneal(), parquetfp::DB::getNodeWidth(), parquetfp::DB::getTopRightCorner(), parquetfp::Annealer::makeMoveSlacksOrient(), and parquetfp::Annealer::packSoftBlocks().
00359 {
00360 return _nodes[index].getWidth();
00361 }
|
|
|
Definition at line 378 of file Nodes.cxx. References parquetfp::itNode, nodesBegin(), and nodesEnd(). Referenced by parquetfp::DB::getNodeWidths().
00379 {
00380 vector<double> widths;
00381 for(itNode iNodes=nodesBegin(); iNodes!=nodesEnd(); iNodes++)
00382 widths.push_back(iNodes->getWidth());
00383 return widths;
00384 }
|
Here is the call graph for this function:

|
|
Definition at line 355 of file Nodes.cxx. References _nodes. Referenced by parquetfp::ClusterDB::addNetsToNewDB(), parquetfp::ClusterDB::cluster1Layer(), parquetfp::ClusterDB::clusterMulti(), parquetfp::DB::DB(), parquetfp::ClusterDB::getClosestNode(), parquetfp::DB::getNumNodes(), parquetfp::DB::getTopRightCorner(), parquetfp::DB::updateNodeDimensions(), parquetfp::DB::updateNodeLocation(), parquetfp::DB::updateNodeSlim(), and parquetfp::DB::updatePlacement().
00356 { return _nodes.size(); }
|
|
|
Definition at line 97 of file Nodes.h. References _terminals. Referenced by parquetfp::DB::shiftOptimizeDesign().
00098 { return _terminals.size(); }
|
|
|
Definition at line 69 of file Nodes.h. References _terminals. Referenced by parquetfp::DB::getOptimalRangeStart(), updateHW(), updateOrient(), and updatePlacement().
00070 { return _terminals[index]; }
|
|
|
Definition at line 100 of file Nodes.h. References _terminals. Referenced by parquetfp::ClusterDB::addNetsToNewDB(), parquetfp::DB::DB(), parquetfp::DB::evalHPWL(), parquetfp::AnalytSolve::getDesignOptLoc(), parquetfp::AnalytSolve::getOptLoc(), parquetfp::DB::plot(), parquetfp::DB::saveCapoNets(), and updatePinsInfo().
00101 { return _terminals[index]; }
|
|
|
Definition at line 395 of file Nodes.cxx. References parquetfp::itNode, nodesBegin(), and nodesEnd(). Referenced by parquetfp::DB::getBottomLeftCorner(), parquetfp::DB::getTopRightCorner(), and parquetfp::DB::getXLocs().
00396 {
00397 vector<double> xloc;
00398 for(itNode iNodes=nodesBegin(); iNodes!=nodesEnd(); iNodes++)
00399 xloc.push_back(iNodes->getX());
00400 return xloc;
00401 }
|
Here is the call graph for this function:

|
|
Definition at line 403 of file Nodes.cxx. References parquetfp::itNode, nodesBegin(), and nodesEnd(). Referenced by parquetfp::DB::getBottomLeftCorner(), parquetfp::DB::getTopRightCorner(), and parquetfp::DB::getYLocs().
00404 {
00405 vector<double> yloc;
00406 for(itNode iNodes=nodesBegin(); iNodes!=nodesEnd(); iNodes++)
00407 yloc.push_back(iNodes->getY());
00408 return yloc;
00409 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 682 of file Nodes.cxx. References parquetfp::itNode, nodesBegin(), and nodesEnd(). Referenced by parquetfp::DB::DB().
00683 {
00684 itNode node;
00685 if (reset)
00686 for(node = nodesBegin(); node != nodesEnd(); ++node)
00687 node->allPinsAtCenter = false;
00688 else
00689 {
00690 for(node = nodesBegin(); node != nodesEnd(); ++node)
00691 node->allPinsAtCenter = node->calcAllPinsAtCenter(nets);
00692 }
00693 }
|
Here is the call graph for this function:

|
|
|
|
Definition at line 67 of file Nodes.cxx. References _nodes, _terminals, parquetfp::Node::addSubBlockIndex(), parquetfp::Node::addVoltage(), eatblank(), eathash(), parquetfp::needCaseChar(), skiptoeol(), parquetfp::Point::x, and parquetfp::Point::y. Referenced by Nodes().
00068 {
00069 char block_name[1024];
00070 char block_type[1024];
00071 char tempWord1[1024];
00072
00073 vector<Point> vertices;
00074 int numVertices;
00075 bool success;
00076 double width, height;
00077
00078 int voltage;
00079
00080 double area,minAr,maxAr;
00081 int numSoftBl=0;
00082 int numHardBl=0;
00083 int numTerm=0;
00084
00085 int indexBlock=0;
00086 int indexTerm=0;
00087
00088 ifstream input(fnameBl);
00089 if(!input)
00090 {
00091 cout<<"ERROR: .blocks file could not be opened successfully"<<endl;
00092 exit(0);
00093 }
00094 skiptoeol(input);
00095 while(!input.eof())
00096 {
00097 input>>tempWord1;
00098 if(!(strcmp(tempWord1,"NumSoftRectangularBlocks")))
00099 break;
00100 }
00101 input>>tempWord1;
00102 input>>numSoftBl;
00103 while(!input.eof())
00104 {
00105 input>>tempWord1;
00106 if(!(strcmp(tempWord1,"NumHardRectilinearBlocks")))
00107 break;
00108 }
00109 input>>tempWord1;
00110 input>>numHardBl;
00111
00112 while(!input.eof())
00113 {
00114 input>>tempWord1;
00115 if(!(strcmp(tempWord1,"NumTerminals")))
00116 break;
00117 }
00118 input>>tempWord1;
00119 input>>numTerm;
00120
00121 while(!input.eof())
00122 {
00123 block_type[0] = '\0';
00124 eatblank(input);
00125 if(input.eof())
00126 break;
00127 if(input.peek()=='#')
00128 eathash(input);
00129 else
00130 {
00131 eatblank(input);
00132 if(input.peek() == '\n' || input.peek() == '\r'
00133 || input.peek() == EOF)
00134 {
00135 input.get();
00136 continue;
00137 }
00138
00139 input >> block_name;
00140 input >> block_type ;
00141
00142
00143 if(!strcmp(block_type,"softrectangular"))
00144 {
00145 input >> voltage;
00146 input >> area;
00147 input >> minAr;
00148 input >> maxAr;
00149 Node temp(block_name,area,minAr,maxAr,indexBlock,false);
00150 temp.addSubBlockIndex(indexBlock);
00151 temp.addVoltage(voltage);
00152 _nodes.push_back(temp);
00153
00154 ++indexBlock;
00155 //cout<<block_name<<" "<<area<<endl;
00156 }
00157 else if(!strcmp(block_type,"hardrectilinear"))
00158 {
00159 input >> voltage;
00160 input >> numVertices;
00161 Point tempPoint;
00162 success = 1;
00163 if(numVertices > 4)
00164 cout<<"ERROR in parsing .blocks file. rectilinear blocks (" << block_name << ", " << numVertices << ") can be only rectangles for now\n";
00165 for(int i=0; i<numVertices; ++i)
00166 {
00167 success &= needCaseChar(input, '('); input.get();
00168 input >> tempPoint.x;
00169 success &= needCaseChar(input, ','); input.get();
00170 input >> tempPoint.y;
00171 success &= needCaseChar(input, ')'); input.get();
00172 vertices.push_back(tempPoint);
00173 }
00174 if(!success)
00175 cout<<"ERROR in parsing .blocks file while processing hardrectilinear blocks"<<endl;
00176
00177 width = vertices[2].x - vertices[0].x;
00178 height = vertices[2].y - vertices[0].y;
00179 area = width*height;
00180 minAr = width/height;
00181 maxAr = minAr;
00182 Node temp(block_name,area,minAr,maxAr,indexBlock,false);
00183 temp.addSubBlockIndex(indexBlock);
00184 temp.addVoltage(voltage);
00185 _nodes.push_back(temp);
00186 ++indexBlock;
00187 vertices.clear();
00188 //cout<<block_name<<" "<<area<<endl;
00189 }
00190 else if(!strcmp(block_type,"terminal"))
00191 {
00192 Node temp(block_name,0,1,1,indexTerm,true);
00193 temp.addSubBlockIndex(indexTerm);
00194 _terminals.push_back(temp);
00195 ++indexTerm;
00196 //cout<<indexTerm<<" "<<block_name<<endl;
00197 }
00198 /*
00199 else
00200 cout<<"ERROR in parsing .blocks file"<<endl;
00201 */
00202 }
00203 }
00204 input.close();
00205
00206 if(numSoftBl+numHardBl+numTerm != indexBlock+indexTerm)
00207 cout<<"ERROR in parsing .blocks file. No: of blocks do not tally "<<(indexBlock+indexTerm)<<" vs "<<(numSoftBl+numHardBl+numTerm)<<endl;
00208
00209 }
|
Here is the call graph for this function:

|
|
Definition at line 211 of file Nodes.cxx. References eatblank(), eathash(), getNode(), parquetfp::itNode, parquetfp::needCaseChar(), parquetfp::Node::needSyncOrient, nodesBegin(), nodesEnd(), parquetfp::ORIENT, skiptoeol(), terminalsBegin(), terminalsEnd(), parquetfp::toOrient(), updateHW(), updateOrient(), and updatePlacement(). Referenced by Nodes().
00212 {
00213 char block_name[1024];
00214 char tempWord[1024];
00215 char tempWord1[1024];
00216 double xloc;
00217 double yloc;
00218 double width;
00219 double height;
00220 bool success;
00221 ORIENT newOrient;
00222 itNode node;
00223
00224 map<const char*, int, ltstr> index;
00225 map<const char*, bool, ltstr> type;
00226 for(node = nodesBegin(); node != nodesEnd(); node++)
00227 {
00228 index[node->getName()] = node->getIndex();
00229 type[node->getName()] = 0;
00230 }
00231 for(node = terminalsBegin(); node != terminalsEnd(); node++)
00232 {
00233 index[node->getName()] = node->getIndex();
00234 type[node->getName()] = 1;
00235 }
00236
00237 ifstream input(fnamePl);
00238 if(!input)
00239 {
00240 cout<<"ERROR: .pl file could not be opened successfully"<<endl;
00241 return;
00242 }
00243
00244 skiptoeol(input);
00245 while(!input.eof())
00246 {
00247 eatblank(input);
00248 if(input.eof())
00249 break;
00250 if(input.peek()=='#')
00251 eathash(input);
00252 else
00253 {
00254 eatblank(input);
00255 if(input.peek() == '\n' || input.peek() == '\r'
00256 || input.peek() == EOF)
00257 {
00258 input.get();
00259 continue;
00260 }
00261 input>>block_name;
00262 input>>xloc;
00263 input>>yloc;
00264 int thisIndex = index[block_name];
00265 int thisType = type[block_name];
00266
00267 updatePlacement(thisIndex, thisType, xloc, yloc);
00268
00269 eatblank(input);
00270 success = 1;
00271 if(input.peek() == 'D') //block with width and height
00272 {
00273 input>>tempWord;
00274 success &= needCaseChar(input,'('); input.get();
00275 input>>width;
00276 success &= needCaseChar(input,','); input.get();
00277 input>>height;
00278 success &= needCaseChar(input,')'); input.get();
00279
00280 if(!success || strcmp(tempWord,"DIMS"))
00281 cout<<"ERROR in parsing .pl file while reading in DIMS\n";
00282 updateHW(thisIndex, thisType, width, height);
00283 getNode(thisIndex).needSyncOrient = false;
00284 }
00285
00286 success = 1;
00287 eatblank(input);
00288 if(input.peek() == ':') //initial orientation given
00289 {
00290 input.get();
00291 input>>tempWord1; //the orientation in words;
00292 newOrient = toOrient(tempWord1);
00293 updateOrient(thisIndex, thisType, newOrient);
00294 }
00295 //cout<<block_name<<" "<<xloc<<" "<<yloc<<endl;
00296 }
00297 }
00298 input.close();
00299 }
|
Here is the call graph for this function:

|
|
Definition at line 72 of file Nodes.h. References _nodes. Referenced by parquetfp::ClusterDB::cluster1Layer(), parquetfp::ClusterDB::clusterMultiPhysical(), and parquetfp::DB::DB().
00073 { _nodes.push_back(node); }
|
|
|
Definition at line 75 of file Nodes.h. References _terminals. Referenced by parquetfp::ClusterDB::cluster1Layer(), parquetfp::ClusterDB::clusterMultiPhysical(), and parquetfp::DB::DB().
00076 { _terminals.push_back(term); }
|
|
||||||||||||
|
Definition at line 373 of file Nodes.cxx. References _nodes. Referenced by parquetfp::Annealer::anneal(), and parquetfp::Annealer::packSoftBlocks().
00374 {
00375 _nodes[index].putHeight(height);
00376 }
|
|
||||||||||||
|
Definition at line 368 of file Nodes.cxx. References _nodes. Referenced by parquetfp::Annealer::anneal(), and parquetfp::Annealer::packSoftBlocks().
00369 {
00370 _nodes[index].putWidth(width);
00371 }
|
|
|
Definition at line 506 of file Nodes.cxx. References _nodes, _terminals, parquetfp::itNode, nodesBegin(), nodesEnd(), terminalsBegin(), and terminalsEnd(). Referenced by parquetfp::DB::saveCapo().
00507 {
00508
00509 char fileName[1024];
00510 strcpy(fileName, baseFileName);
00511 strcat(fileName, ".nodes");
00512 ofstream file(fileName);
00513 file<<"UCLA nodes 1.0"<<endl<<endl<<endl;
00514
00515 file<<"NumNodes : \t"<<_nodes.size()+_terminals.size()<<endl;
00516 file<<"NumTerminals : \t"<<_terminals.size()<<endl;
00517
00518 itNode node;
00519
00520 double width, height, temp;
00521 for(node = nodesBegin(); node != nodesEnd(); ++node)
00522 {
00523 width = node->getWidth();
00524 height = node->getHeight();
00525 if(int(node->getOrient())%2 == 1)
00526 {
00527 temp = width;
00528 width = height;
00529 height = temp;
00530 }
00531 file<<"\t"<<node->getName()<<"\t"<<width<<"\t"<<height<<endl;
00532 }
00533
00534 for(node = terminalsBegin(); node != terminalsEnd(); ++node)
00535 {
00536 width = node->getWidth();
00537 height = node->getHeight();
00538 if(int(node->getOrient())%2 == 1)
00539 {
00540 temp = width;
00541 width = height;
00542 height = temp;
00543 }
00544 file<<"\t"<<node->getName()<<"\t"<<width<<"\t"<<height<<"\tterminal "
00545 <<endl;
00546 }
00547 file.close();
00548 }
|
Here is the call graph for this function:

|
|
Definition at line 576 of file Nodes.cxx. References parquetfp::itNode, nodesBegin(), nodesEnd(), terminalsBegin(), terminalsEnd(), and parquetfp::toChar(). Referenced by parquetfp::DB::saveCapo().
00577 {
00578 char fileName[1024];
00579 strcpy(fileName, baseFileName);
00580 strcat(fileName, ".pl");
00581 ofstream file(fileName);
00582
00583 file<<"UCLA pl 1.0"<<endl<<endl<<endl;
00584
00585 itNode node;
00586
00587 for(node = nodesBegin(); node != nodesEnd(); ++node)
00588 {
00589 file<<"\t"<<node->getName()<<"\t"<<node->getX()<<"\t"
00590 <<node->getY()<<" : \t"<<toChar(node->getOrient())<<endl;
00591 }
00592
00593
00594 for(node = terminalsBegin(); node != terminalsEnd(); ++node)
00595 {
00596 file<<"\t"<<node->getName()<<"\t"<<node->getX()<<"\t"
00597 <<node->getY()<<" : \t"<<toChar(node->getOrient())<<endl;
00598 }
00599
00600 file.close();
00601 }
|
Here is the call graph for this function:

|
||||||||||||||||
|
Definition at line 603 of file Nodes.cxx. References getMinHeight(), getMinWidth(), and getNodesArea(). Referenced by parquetfp::DB::saveCapo().
00604 {
00605 //default required aspect ratio of 1
00606 double AR;
00607 if(reqdAR == -9999)
00608 AR = 1;
00609 else
00610 AR = reqdAR;
00611
00612 double area = (1+reqdWS/100.0)*getNodesArea(); //add WS
00613 double height = sqrt(area/AR);
00614 double width = AR*height;
00615 int siteWidth = 1;
00616 int numSites = int(width/siteWidth) + 1;
00617 int rowHeight;
00618 int minHeight = int(getMinHeight());
00619 int minWidth = int(getMinWidth());
00620 if(minHeight < minWidth)
00621 rowHeight = minHeight;
00622 else
00623 rowHeight = minWidth;
00624
00625 rowHeight = int(rowHeight/10);
00626 if(rowHeight < 1)
00627 rowHeight = 1;
00628
00629 int numRows = int(height/rowHeight) + 1;
00630 int rowCoord = 1;
00631
00632 char fileName[1024];
00633 strcpy(fileName, baseFileName);
00634 strcat(fileName, ".scl");
00635 ofstream file(fileName);
00636
00637 file<<"UCLA scl 1.0"<<endl<<endl<<endl;
00638 file<<"Numrows : "<<numRows<<endl;
00639
00640 for(int i=0; i<numRows; ++i)
00641 {
00642 file<<"CoreRow Horizontal"<<endl;
00643 file<<" Coordinate\t: "<<rowCoord<<endl;
00644 file<<" Height\t: "<<rowHeight<<endl;
00645 file<<" SiteWidth\t: "<<siteWidth<<endl;
00646 file<<" Sitespacing\t: "<<siteWidth<<endl;
00647 file<<" Siteorient\t: N"<<endl;
00648 file<<" Sitesymmetry\t: Y"<<endl;
00649 file<<" SubrowOrigin\t: 0 Numsites\t: "<<numSites<<endl;
00650 file<<"End"<<endl;
00651
00652 rowCoord += rowHeight;
00653 }
00654
00655 file.close();
00656 }
|
Here is the call graph for this function:

|
|
Definition at line 550 of file Nodes.cxx. References _nodes, _terminals, parquetfp::itNode, nodesBegin(), nodesEnd(), terminalsBegin(), and terminalsEnd(). Referenced by parquetfp::DB::save().
00551 {
00552 char fileName[1024];
00553 strcpy(fileName, baseFileName);
00554 strcat(fileName, ".blocks");
00555 ofstream file(fileName);
00556 file<<"UCSC blocks 1.0"<<endl<<endl<<endl;
00557
00558 file<<"NumSoftRectangularBlocks : \t"<<_nodes.size()<<endl;
00559 file<<"NumHardRectilinearBlocks : \t0"<<endl;
00560 file<<"NumTerminals : \t"<<_terminals.size()<<endl<<endl;
00561
00562 itNode node;
00563
00564 for(node = nodesBegin(); node != nodesEnd(); ++node)
00565 {
00566 file<<node->getName()<<" softrectangular "<<node->getArea()<<"\t"
00567 <<node->getminAR()<<"\t"<<node->getmaxAR()<<endl;
00568 }
00569 file<<endl;
00570 for(node = terminalsBegin(); node != terminalsEnd(); ++node)
00571 file<<node->getName()<<" terminal"<<endl;
00572
00573 file.close();
00574 }
|
Here is the call graph for this function:

|
|
Definition at line 473 of file Nodes.cxx. References parquetfp::itNode, nodesBegin(), nodesEnd(), terminalsBegin(), terminalsEnd(), and parquetfp::toChar(). Referenced by parquetfp::DB::save(), and parquetfp::DB::saveBestCopyPl().
00474 {
00475 char fileName[1024];
00476 strcpy(fileName, baseFileName);
00477 strcat(fileName, ".pl");
00478 ofstream outPl(fileName);
00479 if(!outPl)
00480 {
00481 cout<<"ERROR in saving .pl file"<<endl;
00482 return;
00483 }
00484 cout<<"Saving "<<fileName<<" as output .pl file"<<endl;
00485 outPl<<"UMICH blocks 1.0"<<endl<<endl<<endl<<endl;
00486
00487 itNode node;
00488
00489 for(node = nodesBegin(); node != nodesEnd(); node++)
00490 {
00491 outPl<<node->getName()<<"\t"<<node->getX()<<"\t"<<node->getY();
00492 outPl<<"\tDIMS = ("<<node->getWidth()<<", "<<node->getHeight()<<")";
00493 outPl<<"\t: "<<toChar(node->getOrient())<<endl;
00494 }
00495 outPl<<endl;
00496
00497 for(node = terminalsBegin(); node != terminalsEnd(); node++)
00498 {
00499 outPl<<node->getName()<<"\t"<<node->getX()<<"\t"<<node->getY()
00500 <<"\t: "<<toChar(node->getOrient())<<endl;
00501 }
00502 outPl<<endl;
00503 outPl.close();
00504 }
|
Here is the call graph for this function:

|
|
Definition at line 103 of file Nodes.h. References _terminals, and parquetfp::itNode. Referenced by parquetfp::ClusterDB::cluster1Layer(), parquetfp::ClusterDB::clusterMultiPhysical(), parquetfp::DB::DB(), parquetfp::AnalytSolve::getDesignOptLoc(), parsePl(), parquetfp::DB::plot(), saveCapoNodes(), saveCapoPl(), saveNodes(), savePl(), parquetfp::Nets::updateNodeInfo(), and updatePinsInfo().
00104 { return _terminals.begin(); }
|
|
|
Definition at line 105 of file Nodes.h. References _terminals, and parquetfp::itNode. Referenced by parquetfp::ClusterDB::cluster1Layer(), parquetfp::ClusterDB::clusterMultiPhysical(), parquetfp::DB::DB(), parquetfp::AnalytSolve::getDesignOptLoc(), parsePl(), parquetfp::DB::plot(), saveCapoNodes(), saveCapoPl(), saveNodes(), savePl(), parquetfp::Nets::updateNodeInfo(), and updatePinsInfo().
00106 { return _terminals.end(); }
|
|
||||||||||||||||||||
|
Definition at line 337 of file Nodes.cxx. References getNode(), getTerm(), parquetfp::Node::putHeight(), and parquetfp::Node::putWidth(). Referenced by parsePl().
00338 {
00339 if(!type)
00340 {
00341 Node& node = getNode(index);
00342 node.putWidth(width);
00343 node.putHeight(height);
00344 }
00345 else
00346 {
00347 Node& node = getTerm(index);
00348 node.putWidth(width);
00349 node.putHeight(height);
00350 }
00351 //cout<<"ERROR: could not find node to update Height/Width for. Name: "<<
00352 // block_name<<endl;
00353 }
|
Here is the call graph for this function:

|
||||||||||||||||
|
Definition at line 321 of file Nodes.cxx. References getNode(), getTerm(), and parquetfp::Node::putOrient(). Referenced by parsePl().
00322 {
00323 if(!type)
00324 {
00325 Node& node = getNode(index);
00326 node.putOrient(newOrient);
00327 }
00328 else
00329 {
00330 Node& node = getTerm(index);
00331 node.putOrient(newOrient);
00332 }
00333 //cout<<"ERROR: could not find node to update Orient for. Name: "<<block_name
00334 // <<endl;
00335 }
|
Here is the call graph for this function:

|
|
Definition at line 429 of file Nodes.cxx. References parquetfp::Node::addPin(), getNode(), getTerminal(), parquetfp::itNet, parquetfp::itNode, parquetfp::itPin, parquetfp::N, parquetfp::NodePin::netIndex, parquetfp::Nets::netsBegin(), parquetfp::Nets::netsEnd(), nodesBegin(), nodesEnd(), parquetfp::NodePin::pinOffset, terminalsBegin(), and terminalsEnd(). Referenced by parquetfp::ClusterDB::addNetsToNewDB(), and parquetfp::DB::DB().
00430 {
00431 itNet net;
00432 itPin pin;
00433 itNode node;
00434 NodePin tempNodePin;
00435 unsigned pinOffset;
00436
00437 for(node=nodesBegin(); node != nodesEnd(); ++node)
00438 node->clearPins();
00439 for(node=terminalsBegin(); node != terminalsEnd(); ++node)
00440 node->clearPins();
00441
00442 for(net = nets.netsBegin(); net != nets.netsEnd(); net++)
00443 {
00444 pinOffset = 0;
00445 for(pin = net->pinsBegin(); pin != net->pinsEnd(); pin++)
00446 {
00447 tempNodePin.netIndex = net->getIndex();
00448 tempNodePin.pinOffset = pinOffset;
00449 unsigned nodeIndex = pin->getNodeIndex();
00450 if(!pin->getType()) //if not pad
00451 {
00452 Node& node = getNode(nodeIndex);
00453 node.addPin(tempNodePin);
00454 }
00455 else
00456 {
00457 Node& node = getTerminal(nodeIndex);
00458 node.addPin(tempNodePin);
00459 }
00460 pinOffset++;
00461 }
00462 }
00463
00464 //now sync the orientations of the pins with that of the nodes
00465 for(node = nodesBegin(); node != nodesEnd(); ++node)
00466 {
00467 if(node->getOrient() != N) //synchronize orientation only if not N
00468 node->syncOrient(nets);
00469 }
00470 }
|
Here is the call graph for this function:

|
||||||||||||||||||||
|
Definition at line 302 of file Nodes.cxx. References getNode(), getTerm(), parquetfp::Node::putX(), and parquetfp::Node::putY(). Referenced by parsePl().
00303 {
00304 if(!type)
00305 {
00306 Node& node = getNode(index);
00307 node.putX(xloc);
00308 node.putY(yloc);
00309 }
00310 else
00311 {
00312 Node& node = getTerm(index);
00313 node.putX(xloc);
00314 node.putY(yloc);
00315 }
00316 // cout<<"ERROR: could not find node to update placement for. Name: "<<
00317 //block_name<<endl;
00318 return;
00319 }
|
Here is the call graph for this function:

|
|
Definition at line 53 of file Nodes.h. Referenced by changeOrient(), clean(), clearNodes(), getNode(), getNodeHeight(), getNodeWidth(), getNumNodes(), nodesBegin(), nodesEnd(), parseNodes(), putNewNode(), putNodeHeight(), putNodeWidth(), saveCapoNodes(), and saveNodes(). |
|
|
Definition at line 54 of file Nodes.h. Referenced by clean(), clearTerm(), getNumTerminals(), getTerm(), getTerminal(), parseNodes(), putNewTerm(), saveCapoNodes(), saveNodes(), terminalsBegin(), and terminalsEnd(). |
1.3.2