Integration of the latest Coloquinte in Etesian & misc modifs.
* New: In Bootstrap, in Builder & coriolisEnv.py support for RHEL7/SL7.
The sub-directory name is 'el7_64'.
In qt_setup() add QtSvg to list of Qt5 & Qt4 used libraries.
* New: In Hurricane, In Cell add a placeholder for flags. First use to
store whether the Nets have been transhierarchically flatteneds.
* New: In Hurricane, In NetRoutingState add an Unconnected flag for
more accurate diagnosis.
* New: Hurricane, in CellViewer add an entry menu for stress tests.
The script must be named "stressScript.py" in the cwd.
* Change: In CRL Core, in display.conf add a scaling parameter for the
display threhold of the layer. This way we can adapt to different
standard cells height.
* Change: In CRL Core, in ISPD05 bookshelf loader, use the pitch of the
cell gauge instead of a hard-wired 5.0.
* Change: In Cumulus, in ClockTreePlugin, add support for Etesian placer
and a new configuration parameter to choose between Mauka/Etesian.
* New: In Etesian, support for the latest Coloquinte.
Add feed insertion stage.
* Bug: In Kite, In BuildPowerRails, check that _ck is not NULL before
tring to access it's name...
* Change: In Kite, check if the Cell has it's Nets flattened before
doing it (or not).
2015-02-01 16:24:13 -06:00
|
|
|
// -*- C++ -*-
|
|
|
|
//
|
|
|
|
// This file is part of the Coriolis Software.
|
2016-01-20 17:41:19 -06:00
|
|
|
// Copyright (c) UPMC 2015-2016, All Rights Reserved
|
Integration of the latest Coloquinte in Etesian & misc modifs.
* New: In Bootstrap, in Builder & coriolisEnv.py support for RHEL7/SL7.
The sub-directory name is 'el7_64'.
In qt_setup() add QtSvg to list of Qt5 & Qt4 used libraries.
* New: In Hurricane, In Cell add a placeholder for flags. First use to
store whether the Nets have been transhierarchically flatteneds.
* New: In Hurricane, In NetRoutingState add an Unconnected flag for
more accurate diagnosis.
* New: Hurricane, in CellViewer add an entry menu for stress tests.
The script must be named "stressScript.py" in the cwd.
* Change: In CRL Core, in display.conf add a scaling parameter for the
display threhold of the layer. This way we can adapt to different
standard cells height.
* Change: In CRL Core, in ISPD05 bookshelf loader, use the pitch of the
cell gauge instead of a hard-wired 5.0.
* Change: In Cumulus, in ClockTreePlugin, add support for Etesian placer
and a new configuration parameter to choose between Mauka/Etesian.
* New: In Etesian, support for the latest Coloquinte.
Add feed insertion stage.
* Bug: In Kite, In BuildPowerRails, check that _ck is not NULL before
tring to access it's name...
* Change: In Kite, check if the Cell has it's Nets flattened before
doing it (or not).
2015-02-01 16:24:13 -06:00
|
|
|
//
|
|
|
|
// +-----------------------------------------------------------------+
|
|
|
|
// | C O R I O L I S |
|
|
|
|
// | E t e s i a n - A n a l y t i c P l a c e r |
|
|
|
|
// | |
|
|
|
|
// | Author : Jean-Paul CHAPUT |
|
|
|
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
|
|
|
// | =============================================================== |
|
|
|
|
// | C++ Module : "./FeedCells.cpp" |
|
|
|
|
// +-----------------------------------------------------------------+
|
|
|
|
|
|
|
|
|
|
|
|
#include <sstream>
|
|
|
|
#include "hurricane/Warning.h"
|
|
|
|
#include "etesian/FeedCells.h"
|
|
|
|
#include "etesian/EtesianEngine.h"
|
|
|
|
|
|
|
|
|
|
|
|
namespace Etesian {
|
|
|
|
|
|
|
|
using std::cerr;
|
|
|
|
using std::endl;
|
|
|
|
using std::map;
|
|
|
|
using std::string;
|
|
|
|
using std::ostringstream;
|
|
|
|
using std::make_pair;
|
|
|
|
using Hurricane::Warning;
|
|
|
|
using Hurricane::DbU;
|
|
|
|
|
|
|
|
|
|
|
|
void FeedCells::useFeed ( Cell* cell )
|
|
|
|
{
|
|
|
|
if ( cell == NULL ) return;
|
|
|
|
|
|
|
|
DbU::Unit pitch = _etesian->getPitch();
|
|
|
|
|
|
|
|
if (cell->getAbutmentBox().getWidth() % pitch != 0)
|
|
|
|
cerr << Warning( "FeedCells::addFeed(): <%s> has not a width (%s) multiple of pitch (%s)."
|
|
|
|
, getString(cell->getName()).c_str()
|
|
|
|
, DbU::getValueString(cell->getAbutmentBox().getWidth()).c_str()
|
|
|
|
, DbU::getValueString(pitch).c_str()
|
|
|
|
) << endl;
|
|
|
|
|
|
|
|
int pitchNb = (int)( cell->getAbutmentBox().getWidth() / pitch );
|
|
|
|
|
|
|
|
if (getFeed(pitchNb) != NULL) {
|
|
|
|
cerr << Warning( "FeedCells::addFeed(): <%s> duplicate feed for width %d."
|
|
|
|
, getString(cell->getName()).c_str()
|
|
|
|
, pitchNb
|
|
|
|
) << endl;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
_feedCells.insert( make_pair(pitchNb,cell) );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Cell* FeedCells::getBiggestFeed () const
|
|
|
|
{
|
|
|
|
if (_feedCells.empty()) return NULL;
|
|
|
|
return (*(--_feedCells.end())).second;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Cell* FeedCells::getSmallestFeed () const
|
|
|
|
{
|
|
|
|
if (_feedCells.empty()) return NULL;
|
|
|
|
return (*(_feedCells.begin())).second;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Cell* FeedCells::getFeed ( int pitches ) const
|
|
|
|
{
|
|
|
|
map<int,Cell*>::const_iterator ifeed = _feedCells.find( pitches );
|
|
|
|
if (ifeed == _feedCells.end()) return NULL;
|
|
|
|
|
|
|
|
return (*ifeed).second;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
string FeedCells::getUniqueInstanceName () const
|
|
|
|
{
|
|
|
|
ostringstream name;
|
|
|
|
name << "feed_" << _feedCount++;
|
|
|
|
|
|
|
|
return name.str();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} // Etesian namespace.
|