2010-03-09 09:24:29 -06:00
|
|
|
|
|
|
|
// -*- C++ -*-
|
|
|
|
|
|
|
|
namespace Katabatic {
|
|
|
|
|
|
|
|
/*! \class GCellGrid
|
|
|
|
*
|
2013-12-03 18:58:58 -06:00
|
|
|
* \brief GCell Grid
|
|
|
|
*
|
|
|
|
* The GCell Grid of Katabatic. Although the base template class
|
|
|
|
* Grid support irregular grid, the GCellGrid is regular, following
|
|
|
|
* the Knik global router GCells. Only the topmost row and leftmost
|
|
|
|
* column may have different height or width to cope with the
|
|
|
|
* design real size.
|
2010-03-09 09:24:29 -06:00
|
|
|
*
|
2013-12-03 18:58:58 -06:00
|
|
|
* Due to the regular nature of the grid, the horizontal & vertical
|
|
|
|
* edges capacities are all identical, and initialized from the
|
|
|
|
* Katabatic Configuration.
|
|
|
|
*
|
|
|
|
* The grid is build from the Knik global routing, so obviously
|
|
|
|
* a KnikEngine must be attached to the Cell when building the
|
|
|
|
* GCellGrid. An error is thrown otherwise.
|
2010-03-09 09:24:29 -06:00
|
|
|
*/
|
|
|
|
|
2013-12-03 18:58:58 -06:00
|
|
|
//! \function GCellGrid* GCellGrid::create( KatabaticEngine* ktbt );
|
|
|
|
//! API-space contructor.
|
|
|
|
|
|
|
|
//! \function void GCellGrid::_postCreate ();
|
|
|
|
//! Perform the GCell & GCell vector allocation.
|
|
|
|
//! - Read the horizontal and vertical cut lines from Knik and translate
|
|
|
|
//! them into BaseGrid::Axis.
|
|
|
|
//! - From the BaseGrid::Axis, deduces the exact positions of the GCells and
|
|
|
|
//! allocate them.
|
|
|
|
//! - The GCell allocation is done in a "row by row" fashion consistent
|
|
|
|
//! with BaseGrid implicit assumptions.
|
|
|
|
|
|
|
|
//! \function void GCellGrid::_preDestroy ();
|
|
|
|
//! The GCells are deleted at this point.
|
|
|
|
|
|
|
|
//! \function Cell* GCellGrid::getCell() const;
|
|
|
|
//! \sreturn The associated Cell.
|
|
|
|
|
|
|
|
//! \function KatabaticEngine* GCellGrid::getKatabatic() const;
|
|
|
|
//! \sreturn The associated KatabaticEngine.
|
|
|
|
|
|
|
|
//! \function unsigned int GCellGrid::getDensityMode() const;
|
|
|
|
//! \sreturn The computation mode of the GCell densities.
|
|
|
|
|
|
|
|
//! \function size_t GCellGrid::getHEdgeCapacity() const;
|
|
|
|
//! \sreturn The horizontal edge capacity. As the matrix is regular it is
|
|
|
|
//! identical for all horizontal edges.
|
|
|
|
|
|
|
|
//! \function size_t GCellGrid::getVEdgeCapacity() const;
|
|
|
|
//! \sreturn The vertical edge capacity. As the matrix is regular it is
|
|
|
|
//! identical for all vertical edges.
|
|
|
|
|
|
|
|
//! \function Interval GCellGrid::getUSide( unsigned int direction ) const;
|
|
|
|
//! \sreturn The side of the whole grid in \c direction.
|
|
|
|
|
|
|
|
//! \function size_t GCellGrid::checkDensity() const;
|
|
|
|
//! \sreturn The number of GCell saturateds.
|
|
|
|
//!
|
|
|
|
//! Check all GCells for saturations.
|
|
|
|
|
|
|
|
//! \function bool GCellGrid::checkEdgeSaturation( float threshold ) const;
|
|
|
|
//! \sreturn \true if at least one edge is over \c threshold (percentage
|
|
|
|
//! of occupation).
|
|
|
|
//!
|
|
|
|
//! Check all the edges for saturations.
|
|
|
|
|
|
|
|
//! \function void GCellGrid::setDensityMode( unsigned int mode );
|
|
|
|
//! Sets the density computation mode.
|
|
|
|
|
|
|
|
//! \function void GCellGrid::updateContacts( unsigned int flags=KbOpenSession );
|
|
|
|
//! Force an update on all AutoContact on all the GCells.
|
|
|
|
//! if \c openSession is \true, enclose the update in a Session.
|
|
|
|
|
|
|
|
//! \function size_t GCellGrid::updateDensity();
|
|
|
|
//! \sreturn The number of GCell saturateds.
|
|
|
|
//!
|
|
|
|
//! Force a density update on all the GCells.
|
|
|
|
|
|
|
|
//! \enum GCellGrid::DensityMode
|
|
|
|
//! Various ways of computing the overall density of a GCell.
|
|
|
|
|
|
|
|
//! \var GCellGrid::AverageHVDensity
|
|
|
|
//! The average density all depths accounted.
|
|
|
|
|
|
|
|
//! \var GCellGrid::AverageHDensity
|
|
|
|
//! The average density of horizontal layers.
|
|
|
|
|
|
|
|
//! \var GCellGrid::AverageVDensity
|
|
|
|
//! The average density of horizontal layers.
|
|
|
|
|
|
|
|
//! \var GCellGrid::MaxHVDensity
|
|
|
|
//! The maximum of the average horizontal & vertical densities taken
|
|
|
|
//! as a whole.
|
|
|
|
|
|
|
|
//! \var GCellGrid::MaxVDensity
|
|
|
|
//! The maximum of the average vertical densities taken depth by depth.
|
|
|
|
|
|
|
|
//! \var GCellGrid::MaxHDensity
|
|
|
|
//! The maximum of the average horizontal densities taken depth by depth.
|
|
|
|
|
|
|
|
//! \var GCellGrid::MaxDensity
|
|
|
|
//! The maximum of the average horizontal & vertical densities
|
|
|
|
//! taken depth by depth.
|
|
|
|
|
|
|
|
}
|
2010-03-09 09:24:29 -06:00
|
|
|
|