- New: In RoutingEvent, while routing a full chip, transient full blockages
may happens due to the initial position of some perpandiculars on theirs
optimal positions. Check for it and perform a "ripupPerpandicular" with
the perpandiculars re-routed first (on normal operation, this is the
reverse).
- Change: In NegociateWindow::NegociateOverlapCost(), do not account terminals
if the layer is *above* METAL3 as it is unlikely that it's truly directly
connected to a terminal (true at least for our designs).
- Change: In RoutingEvent::State, add a "fullBlocked" flag to perform the
full blockage direction while building the state object.
- Change: In RoutingEvent::cacheAxisHint(), when the TrackSegment has parent,
uses the parent current axis position and not it's axis hint.
- Change: In Manipulator::insertInTrack(), when the overlapped segment is a
Local and is completly enclosed (shrinkLeft & shrinkRight), no longer
rip it up but force a shrink left/right instead.
- Bug: In RoutingEvent, the event sorting function was sorting in the *wrong*
order! The less prioritary first! With the correct sort, we won an
additionnal 30% in speed (total: 69%). From the "reference" time we have
a 3.2 speed-up. And we can successfully process denser designs...
- New: In GCell, compute a "fragmentation" indice, the average free track
length, the more fragmented, the smaller the indice.
- New: In AutoSegment::canMoveUp(), when requested, not only check for free
(parallel) track in the up layer but also check that the begin/end
local segments created to maintain layer connexity do not creates too
much fragmentation. This fragment could prove critical in higly dense
GCells.
- Change: In LayerAssign, disable the ::rpDesaturate() steps, after optimization
the router can handle 10 terminals per GCells in M2 without problem.
And ::rpDesaturate() must uses GCell::stepNetDesaturate() and *not*
directly ::stepDesaturate().
- Bug: In GraphicMaukaEngine::doQuadriPart(), performs a quadri-partition
only if there is more than 4*instanceStopCriterions Cells (trans-
hierarchically computeds).
- Bug: In Grid::Grid(), uses trans-hierarchical iterators to compute the
sum of "instance width" instead of the "flat" ones.
- Bug: In Grid::rectangularShape(), uses "minWith" parameter *only* if it's
different from DbU::Max.
- New: In BuildPowerRails, special processing for the power ring segments.
The "diagonal" of vias at each corner is causing a misbehavior of the
routing algorithm (due to fully saturated GCells in one direction).
As a temporary fix, extend the segments so they form a "square corner".
(problem arise on "d_in_i(22)").
- New: In RoutingEvent::_processNegociate, disable the "isForcedToHint()"
feature. No noticeable loss of quality or speed.
- New: In TrackElement/TrackSegment, wraps the AutoSegment parent's mechanism.
Allows to gets the DataNegociate of either the segment or it's parent.
- New: State::solveFullBlockages(), dedicated method to solves the case when
all the allowed tracks of a segment are blocked, tries to moves up
local segments and to break-up global ones.
- New: RoutingEventLoop, a more sophisticated way to detect looping.
Maintain a dynamic histogram of the last N (default 10) segments routeds,
with the count of how many times they have occurred. If that count
exeed 40, we *may* be facing a loop.
- Change: In State::conflictSolve1, implement new policy. The global segments
no more can be broken by local ones. The idea behind is that breaking
a global on the request of a local will only produce more cluttering
in the GCell. Globals must be keep straigth pass through, especially
inside near-saturated GCells. Globals breaking however can occurs at
another global's request.
- Change: In TrackCost, implement the new policy about locals segments that
cannot break globals segments. The sorting class now accept flags to
modulate the sorting function. Two options avalaibles: IgnoreAxisWeigth
(to uses for strap segments) and DiscardGlobals (to uses with locals).
- Change: In TrackCost, the "distance to fixed" have now an upper bound of
50 lambdas (no need to be greater because it means it's outside the
begin & en GCells). Take account not only of fixed segment, but also
of placed segments which makes bound.
- Bug: In Track::_check(), while calling each individual TrackSegment check,
uses it as the *first* argument of the "or", otherwise it may not be
called.
- Bug: In ProtectRoutingPad, loop over segment Collections while modificating
it was producing non-deterministic results. The fact that a collection
must be not modificated while beeing iterated is becoming a more and more
painful problem.
- New: In AutoSegment, adds a "_parent" attribute to keep track of the fragmentation
processus. Currently used only for strap segments, points to the original
segment in the appropriate direction (before the split).
- New: In GCell & LayerAssign, new method of layer assignment. Move up
the whole net trunk if only one of it's segment is inside an over-saturated
GCell. AutoSegment are moved up only if there is at least 2 free tracks
remaining on the upper level.
- Change: In Session::_canonize(), uses the lowest segment Id as canonical.
More reliable than geometricals criterions in the end. Assuming that the
segments are being created in deterministic order, which *should* be the
case consediring the way we are walking through the global routing.
- Change: In AutoSegment, completly suppress the CompareCanonical(), replace
it by the much simpler CompareId().
- Change: In GCell::rpDesaturate(), stops desaturation when bottom density
is under 0.5, otherwise we are causing a severe imbalance in M2/M4
densities. All wires pushed up to M4...
- Change: In ChipTools, for the Pad's RoutingPad, reslect the best component
using the one in the lowest layer. To avoid problem when splitting
AutoContact as we expect the base Contact to be on the lower layer.
- Bug: In GCellConfiguration::_GCell_xG_xL1_xL3(), add H/V alignement constraints
in fork case. This allow NE/SW contact to be splitted correctly later.
- Bug: In AutoContact::split(), the connexity on the splitted contacts was
not correctly restored, leading to canonization and parentage looping
errors. This was concealed by the Kite Track::_check() bug (incomplete
individual TrackSegment checking).
- New: In GraphicsParser, read the new darkening scheme (HSV ratio).
"display.xml" configuaration file modificated accordingly. May be some
tuning needed for white background styles.
- Change: In RoutingPad, uses my C++ style. Normalize constructors calls.
Allow to select (trough flags) the way the "best component" is choosen.
Currently: Biggest Area or Lowest Layer or Highest Layer.
* ./hurricane/src/viewer:
- New: In DisplayStyle, darkening is now expressed as a ratio over the HSV
components of a color. Introduce a new DisplayStyle::HSVr type.
Allow a more readable darkening effect. All object modicated accordingly.
- Change: In NetlistWidget, the "Net" section now correctly dimension itself
on the widest net name. Must suppress all the size Hints in the header
& data models.
- Change: In st_model, separate View() in two methods, one that load the
model into the editor (still named View()) and a Breakpoint() method
for putting true stop points. The Breakpoint() method calls the
View() method. Will simplificate my explanations to the students...
- New: Histogram object, imported from Kite. Made more generic to be reusable
by all.
- Change: In Measures, added Inspector support.
NOTE: The hidden property holding MeasuresDatas no longer uses a pointer
a value. This forces us to enable the copy constructor. It is needed
for some inner STL container manipulation, but should *not* be used
with non-empty datas. The copy constructor *do not* copy the internal
datas (reset the object).
- New: In Measurments, support for complex data sets, saved in separate Gnuplot
<.dat> files. Used to integrate Histogram.
- New: In Histogram, now a supported Measure type so it can be integrated along
all others measurments.
- Bug: In display.xml, forgotten gcut description in Alliance Classic black
style.
- In CellViewer, adds a shortcut for launching Stratus scipts: SHIFT+P,S
and one for pure Python scripts: SHIFT+P,P.
- In ExceptionWidget, put the trace inside a QScrollArea so all the call
stack can be viewed regardless of the window's size. It seems that
QFontMetrics has problems to compute the right text size when using
a Qt::RichText enabled widget. Adds some "manual" corrections, hope
they will be sufficiently portables.
- Change: In GCell & GCellGrid, unificated way of computing all the GCell's
densities.
- Change: In GCell::stepDesaturate(), uses shearUp() instead of moveUp().
- Change: In AutoSegment, new method ::shearUp() to avoid moveUp() saturating
GCells as side-effect.
- Change: Big cleanup. Supress all the GCell level: GCell, GCellGrid,
GCellRoutingSet. Blockages now managed inside the BuildPower.
- New: In NegociateWindow, Histogram of GCell densities in Gnuplot
format.
- Change: Propagate renaming "obstacle" -> "blockage".
- Bug/Change: In Configuration, the value of the extensionCap was too big
(1.5 lambda), reduce to 0.5 lambda. This is a problem, the extension
should be coupled to the layer as it is not the same for each METAL.
- Bug: When using TrackElement, always uses the virtual "->isFixed()" method
instead of trying to access to "->base()->isFixed()" as the base may be
NULL in case of blockage/fixed segment.
- Change: Merge PowerRails & Blockage trans-hierarchical construction (into
PowerRails). All blockages are groupeds under "blockagenet".
Allows to remove TrackBlockage & BuildBlockages.
- Change: In KiteEngine::annotateGloblalGraph(), when routing a full chip,
ring power segments around the core must completly saturate the edges
in their segment direction. This is to prevent the global router to
use paths under the power/ground ring (may generate unsolvable configs).
- Change: In KiteEngine::annotateGloblalGraph(), when routing a full chip,
distinguish three areas: the core (65%), the corona (90%) and the pads
(100%). Capacities on the edges are sets accordingly.
- Change: In RoutingEvent, introduce an alternative algorithm for
conflictSolve1, FindPath which try to deduce the breakpoints from a
truly explorated path. Unfortunatly this gives worst results than the
Cs1Candidates method. The why should be investigated as it's a critical
point in the algorithm.
- Change: In Manipulator::ripupPerpandicular(), when a caged perpandicular
is encountered, instead of just "stopping", rip it up and change is
axis hint (actually increase) it's axis hint so it stands a chance to
go outside the track with an obstacle.
- Change: In RoutingEvent/State::slackenTopology(), allow move up of local
segments when they are tightly constrained *and* blocked (cageds).
Partial modification of functions calls from booleans to flags.
- Bug: In NegociateWindow::NegociateOverlapCost, check for fixed segments
before trying to get DataNegociate. The lack of DataNegociate cause the
TrackElement to be discarted. It's a failsafe behavior, but it leads to
overlaps.
- Bug: In ProtectRoutingPad, in Pad Cells only, *do not* protect RoutingPad
to avoid the edge capacity over the pad to decrease to zero. This is
due to unused RoutingPads being accounted as blockages.
- New: ChipTools, regroup all datas and utilities to manage a full-chip
design.
- Change: In LoadGrByNet/GCellConfiguration::_GCell_xG_1Pad(), uses straight
perpandicular wires on top & right pads. The GCells under those connectors
are fully saturated, wires must go out as straight as possible.
- Change: In AutoHorizontal/AutoVertical, update the "terminal" flag after
slackening. This is to avoid global that are no longer connected to
terminals behave as such.
- Change: In AutoSegment::canMoveUp() & canPivotUp(), prevent all local segments
to go up. This is to avoid cluttering upper levels with small segments.
- Change: In GCellConfiguration, for xG_xL3, detect straight vertical topologies
and for them to be fixed (new flag FIXED_GLOBAL set by the topological
builder instead of the constructor). This prevent the router to do
stupid things...
To sets the "Fixed" flag *after* the axis of global segments have been
positionned correctly adds a "_toFixGlobals" static table lookup.
- Change: In GCell::stepDesaturate(), if less than one free track remains in
the upper layer, do not move up the segment. This allows from a minimum
free room for expansion.
- Change: In GCell::_getString(), display indexes and layer names in various
saturation tables.
- Change: In AutoSegment, allow move up of local Segment. ::moveUp() and
::canMoveUp() arguments go from booleans to flags, which are more
explicits.
- Change: Rename "obstacle" to "blockage" in all the places it still appears
to be completly homogeneous.
- New: In Catalog, adds a "Pad" attribute to mark cells that are pads.
- Change: In ApParser, discard "padreal" instances as a cause for a Cell to
be non-terminal. This is for LeafPlugOccurrences to consider the terminals
of those cells.
- Change: In ApParser, makes use of the new Pad flag in Catalog.
- New: Torus object. To allow a simpler management of a chip's corona,
the toric area between the pads and the core.
- Change: In HyperNet/LeafPlugOccurrences, change the instance stop criterions
from "isLeaf()", which means "contains no instances" to "isTerminal()"
which can be programmatically changed. This has to be done for the Pads
which are non-leaf due to "padreal" but still must be considered for their
connectors.
This modification is coupled with one in the Ap parser.
- Change: In Backtrace, enable support for Apple backtrace. This is a blind
test as I can't check by myself.
* ./hurricane/src/viewer:
- Change: In CellWidget/SelectionModel/SelectionWidget, rewrite the Gos selec-
tion mechanism. Now ExtensionGo could be selecteds as they ought to be.
Also adopt a more standard way of how objetcs are selecteds.
Prefer "dataChanged()" signal over "reset()" or "layoutChanged()" as
it keeps the selection instead of resetting it.
Unselecteds entry in the window (toggled with 't') are now shown in
red for better readability.
* New <subCircuitsPathes> section in <circuit> that lists the pathes that contain subCircuits xml files
* New Device object that inherits from simplified Instance object.
- Instance has a name, a model, some connectors and optionnal parameters
- Device has the same attributes plus mosType, sourceBulkConnected and transistors
* Updated readFromFile and wrtieToFile methods to support these modifications
* Updated parse and drive examples to support these modifications
- Note: only C++ examples has been updated since my boost.python environment is actually totaly broken
* New buffer.xml example that uses subCircuits.
* New <subCircuitsPathes> section in <circuit> that lists the pathes that contain subCircuits xml files
* New Device object that inherits from simplified Instance object.
- Instance has a name, a model, some connectors and optionnal parameters
- Device has the same attributes plus mosType, sourceBulkConnected and transistors
* Updated readFromFile and wrtieToFile methods to support these modifications
* Updated parse and drive examples to support these modifications
- Note: only C++ examples has been updated since my boost.python environment is actually totaly broken
* New buffer.xml example that uses subCircuits.
- New: Inspector support enabled for AllianceFramework and most of it's
sub-objects. Attached as a property on the DataBase to be browsable
through the Inspector.
- Change: Now also read a <.coriolis2.configuration.xml> in the user's
root account (before the directory specific one and after the system-
wide).
- Change: In verbose mode, also display what environment files are being
read.
- Change: No more reference to CRL_CATA_LIB in error messages.
- Change: Suppress stratus2sxlib obsolete library.
Recently adds have been adjusted in PyDtr.py
Examples have been updated (c++ is tested, python fails on my Mac due to a strange python2.6.6 behavior I have to check this)
getRule method of Techno does not throw exception anymore if rule is not found : a NULL Rule* is returned instead.
but getValue methods throw exception if rule is not found
- New: In CgtMain, support for Stratus script execution from command line:
"--stratus-script=<script_file>" (whitout ".py" extension).
- Change: In CgtMain, makes use of priority for configuration settings.
- Change: Add support for chip-level nets. POWER/GROUND/CLOCK as signals.
- Bug: Reorder import so that CRL is always imported first so that the
problem of duplicated type_info RTTI doesn't show.
- Bug: Uses correct Contact with for rings.
- Bug: Reorder import so that CRL is always imported first so that the
problem of duplicated type_info RTTI doesn't show.
- New: In BuilPowerRails & BuildBlockage, specific support for chip-level
design. The Alliance "top chip" design hierarchical structure is
hard-coded. Top level POWER/GROUND/CLOCK nets must always have the
<vsse>, <vdde>, <ck>, <vssi>, <vddi>, <ckc>, <cki> names.
Specific method to get trans-hierarchical root nets, espcially in
case of global ones (POWER/GROUND). Clock is *not* global.
Some correction in the manner obscured tracks are computeds.
- New: ProtectRoutingPad module that perform a more clean work for protecting
unused RoutingPad.
- Bug: In BuildPowerRails, uses stable_sort<> instead of sort<>, which
causes unexplained core dumps (seems to try to perform a comparison
using the "end" pseudo element). Already occured in Knik, no explanation
other than a STL bug.
- Change: Slight changes in the weights to move up. Now needs a full empty
track instead of a half one.
- Change: In loadGlobalRouting(), more exlicit message as to why a net is
filtered out the routing set (POWER, GROUND, CLOCK or BLOCKAGE).
- New: ChipTool, module with utilities specific to chip routing. Containing
a function to pre-break wires around a block.
- New: In loadGlobalRouting/GCellConfiguration, adds supports for RoutingPad
connected on chip's pad.
- New: In GCellGrid/GCell, can compute the density in three modes: average,
max of H/V and max of layer. Currently implemented in getMaxHVDensity(),
should be unificated with getDensity(). Used for display purposes.
- Bug: In AutoContact, when splitting a contact, add a specific check for
"one layer span".
- Bug: In AutoSegment::canMoveUp(), do not move up fixed segments.
- Bug: In Edge::getCost(), when the edge capacity is null, return maximum
cost (HUGE).
- Bug: In Knik::saveSolution(), saves only Segments that belongs to global
routing, that is in GMetalH/GMetalV.
- New: In Utilities, uses the new Backtrace to print the stack before
core-dumping.
- New: In Environment, pattern recognition of Pad model names.
- New: In AllianceFramework, pattern recognition of Pad model names.
- Bug: In Measures, add inspector support and uses pointer to prevent using
copy construction. Makes the inspector to core-dump.
- New: In RoutingLayerGauge, inspector support for Constant::Direction.
- Change: In ApDriver, correct managment of BIGVIA sizes. BIGVIA in one
metal keep their sizes, but BIGVIA whith cut must be expandeds to
contains their enclosure in metals. In Hurricane VIA size are relatives
to the cut but in Alliance, to the biggest metal.
Generate correct direction (always UP or RIGHT) for segments.
- Change: In ApParser, shrink BIGVIA to the size of their cut from the
Alliance format. Avoid VIA "bloating".
More thorough verification of Segment data coherency, mainly with
direction.
Suppress warning of non-existent logical instance in the special
case of "padreal".
- Change: In VstParserGrammar, perform an explicit plug connection on globals
Nets if the names of globals Nets differs.
- New: In display.xml, add style for printers (B&W).
- Bug: In technology.symbolic.xml, BLOCKAGE6 was associated to metal6 instead
of blockage6.
Correct extensions value for VIA metal layers above cut1.
- Bug: In Utilities, in System singleton constructor check of duplicated
type_info/RTTI initialization. Occurs when python modules are useds.
CRL must always be included first.
- New: Backtrace to print the stack when an exception is thrown.
- New: In Error, support for Backtrack.
- Change: In TextTranslator, provides a default HTML translator instead of
building it every time it was needed.
- Bug: In Common, when demangling a C++ symbol fails, returns the empty
string instead of NULL.
* ./hurricane/src/viewer:
- New: In Exception, support for the Backtrack new feature.
* ./hurricane/src/isobar:
- Change: In PyHurricane, when catching a C++ exception, adds a newline to
have a more clean display.