60 lines
2.5 KiB
C++
60 lines
2.5 KiB
C++
|
|
// -*- C++ -*-
|
|
|
|
|
|
namespace Katabatic {
|
|
|
|
/*! \defgroup NetOptimals 6. AutoSegment Optimal Placement (internal)
|
|
*
|
|
* This modules documents how \c AutoSegment optimal placement are computed.
|
|
* It is intented for developpers only.
|
|
*
|
|
* The principle is quite simple : for any given \c AutoSegment, for example
|
|
* a vertical one (\b A), we want to find the optimal position so the wire
|
|
* length of \c AutoSegment perpandicular to \b A would be minimal. This
|
|
* optimal position is an interval of X positions, possibly reduced to a
|
|
* point.
|
|
*
|
|
* Given an \c AutoSegment, we will take into account :
|
|
* <ul>
|
|
* <li>Perpandicular global \c AutoSegment.
|
|
* <li>Terminals linked to the \c AutoSegment through any number of
|
|
* local \c AutoSegment (collapsed or not).
|
|
* </ul>
|
|
*
|
|
* How to find the optimal interval :
|
|
*
|
|
* First we build an histogram in the direction perpandicular to the
|
|
* \c AutoSegment. For \b A : in horizontal direction. We populate the
|
|
* histogram with the axis coordinate of global \c AutoSegment and
|
|
* terminals linked to \b A. Note that for global \c AutoSegment the
|
|
* "axis" coordinate is the position of the side of the \c FCell.
|
|
* For terminal depending on their orientation relative to \b A we
|
|
* add either their axis or their two extremities.
|
|
*
|
|
* The optimal interval is then the median interval of the histogram.
|
|
*
|
|
* The set of examples below shows some representative cases.
|
|
*
|
|
* \image html NetOptimals-1.png "Multiple Verticals Terminals"
|
|
* \image latex NetOptimals-1.pdf "Multiple Verticals Terminals" width=0.6\textwidth
|
|
* \image html NetOptimals-2.png "Globals Only"
|
|
* \image latex NetOptimals-2.pdf "Globals Only" width=0.6\textwidth
|
|
* \image html NetOptimals-3.png "One Horizontal Terminal"
|
|
* \image latex NetOptimals-3.pdf "One Horizontal Terminal" width=0.6\textwidth
|
|
*/
|
|
|
|
|
|
//! \addtogroup NetOptimals
|
|
//! \{
|
|
|
|
/*! \function void KatabaticEngine::_computeNetOptimals ( Net* net );
|
|
* \param net The net for which to compute optimal placement.
|
|
*
|
|
* compute optimal placement of all net's AutoSegment.
|
|
*/
|
|
|
|
//! \}
|
|
|
|
}
|