- Change: Read verbosity, info and trace level from configuration.
- New: Catches correctly boost exceptions.
- New: Can specify an additionnal XML configuration file on the command
line.
- Change: Makes use of the CRL::System environment variable loading.
XML environment loading is also obsoleted by the new Utility features.
- Change: In UnicornGui, _banner is now a static member. Useful to print
the banner whenever running in pure text mode so no UnicornGui is
created.
- Change: In doQuadriPart, manage correctly non-square designs. So that
after an initial non-quadripartition step, the partitions are rougly
squares. Seems to have trouble with small designs.
- Change: In doQuadriPart, manage correctly non-square designs. So that
after an initial non-quadripartition step, the partitions are rougly
squares. Seems to have trouble with small designs.
- New: In <tools.configuration.xml>, added parameters for verbosity, info
and trace level.
- New: Uniform mecanism to get the "/etc" path. Now System reads the
environment variables (thanks to boost::program_option).
- Change: In Utility, correct "when first called" initialisation of the
System singleton. Access to members only through static members that
ensure the initialisation of the singleton first.
- Change: In System, makes uses of the callback feature of Parameter to
initialize the new configuration parameters (verbosity, coredump, ...).
- Change: In linefill, build upon mstream instead of ostream. Now dual
aspect, inherit ostream and have a mstream member.
- New: More thorough type checking of parameter's type while setting/
getting.
- New: In Parameter, callback mechanism (trimmed down Observer pattern)
to uses whenever Qt signal/slots are not used. This is needed to
maintain data coherency througout the software.
./coriolis/src/crlcore/src/ccore/crlcore/Banner.h
- Moved "CBanner" to "Banner", cleaned up, relooked, renamed functions, reorganised.
* ./coriolis/src/crlcore/src/ccore/ToolEngine.cpp
./coriolis/src/crlcore/src/ccore/crlcore/ToolEngine.h
./coriolis/src/crlcore/src/ccore/crlcore/ToolEngines.h
- Renamed CEngine to ToolEngine, cleaned up, relooked. All fonctions as static
members.
* ./coriolis/src/crlcore/src/ccore/Memory.cpp
./coriolis/src/crlcore/src/ccore/crlcore/Memory.h
- Renamed CMemory to Memory (as for Timer), minimal cleanup.
* ./coriolis/src/crlcore/src/ccore/crlcore/*.h
- Change anti-double inclusion constants from __XX_H__ to __CRL_XX_H__
(that is: include namespace) to avoid potential constant clashes with
other pieces of software.
* ./coriolis/src/crlcore/src/ccore/Utilities.cpp
./coriolis/src/crlcore/src/ccore/crlcore/Utilities.h
- Finish porting of all features from CUtils. Simplificated mstream using
member templates. Speedup mstream by using static_cast instead of
dynamic_cast.
* ./coriolis/src/crlcore/src/ccore/Environment.cpp
- Now read CORIOLIS_TOP from UNIX environment instead of hard-coded
directory (to my personnal installation...). See new method
"loadFromShell()", needs to be extended to all other variables.
_____________________________________________________________________________
* ./hurricane/src/hurricane/BasicLayer.{h,cpp}
- Suppress all graphics related members from Layer.
- Adding realName member for symbolic to real transformation.
* ./hurricane/src/hviewer/CellWidget.cpp
Bug: Now uses display threshold from Graphics (DisplayStyle) instead
of layer. Now layers appears/diseapears while zooming/unzooming.
* ./coriolis/src/crlcore :
- Separating clearly symbolic technology form real technology.
- Various file renaming.
_____________________________________________________________________________
* ./hurricane/src :
- Complete include re-organisation.
include/hurricane/*.h : kernel.
include/hurricane/viewer/*.h : hviewer.
include/hurricane/inspector/*.h : hinspector.
Includes have been moved into subdirectories of .cpp files (as in
crlcore).
- Now you must include files like this :
#include <hurricane/Layer.h>
#include <hurricane/viewer/CellViewer.h>
#include <hurricane/inspector/HInspector.h>
- Suppressed viewer specific include path in FindHURRICANE.cmake.
- Re-enabled documentation, with dot disabled as it seems to slow down
doxygen.
* ./crlcore/src/crlcore :
- Adapted to new Hurricane include scheme. Corrected bugs in it's own
include files (noticeably "Utilities.h").
_____________________________________________________________________________
* ./hurricane/doc/hurricane :
- Added (empty) directories "html" & "latex". Those directories are
created by doxygen, but as they are used in the CMakeList.txt, they
must be present even before the fisrt run of cmake (otherwise cmake
choke on them).
- Doxygen sets to only generate html & pdf (through LaTeX) documentation.
- All ".dox" files corrected to suit the new function members naming
scheme (some work may remains in code examples).
_____________________________________________________________________________
* ./hurricane/doc/hurricane/src/hurricane/Layer.{h.cpp}
./hurricane/doc/hurricane/src/hurricane/BasicLayer.{h.cpp}
- Changed "Type" to "Material" to fit better the OpenAccess semantic.
Introduce Material meanings : pWell, nWell, pImplant, nImplant
active, metal, cut, obstacle & other.
* ./coriolis/src/crlcore :
- Switched to the generic layer model. Updated technology XML configuration
files, technology parser & AP parser/driver.
- Note that the representation of transistors visually changes as it's now
modelled with Implant + Active.
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- CompositeLayer replaced by 5 kind of symbolic layers :
RegularLayer (1 BasicLayer)
DiffusionLayer (2 or 3 BasicLayers: active+implant,well)
TransistorLayer (3 or 4 BasicLayers: poly+active+implant,well)
ContactLayer (4 or 5 BasicLayers: metal+cut+active+implant,well)
ViaLayer (3 BasicLayers: metal0+cut0+metal1)
- To better follow the OpenAccess semantic, the "obstacle" Material type
is renommed to "blockage".
- NB: doxygen documentation is not up-to-date and issue warnings.
* ./coriolis/src/crlcore :
- Migrate from CompositeLayer to the various SymbolicLayers.
- Symbolic rules are now closer to the reality so that a Cell displayed
with Hurricane should look identical to the Graal one.
- Complete rewrite of the AP parser. Much simplificated, do not try to
merge/articulates segments. This ensure a true rendering of the
Cell. Especially do not create contact to anchor diffusion segments,
which leads to very strange randering (DRC error as well).
_____________________________________________________________________________
* ./hurricane :
- Unit evolution to allow Symbolic (lamda) and Real (grid founder) mixing.
All functions related to Unit translations are now grouped under
the "DbU" class (another tribute to OpenAccess). "DbU" contains
only static attributes (constants) and methods. Unit itself becomes
a typedef inside this class, hence the file renaming from Unit.{h,cpp}
to DbU.{h.cpp}. Have to replace all instances of "Unit" by "DbU::Unit".
- Doc will be updated shortly.
_____________________________________________________________________________
* ./coriolis/src/crlcore :
- New AP parser : simplificated, no longer try to re-articulates segments.
More accurate representation of standart cell innards.
- More accurate symbolic extentions rules.
- Propagated changes from Hurricane about Unit/DbU.
_____________________________________________________________________________
* ./hurricane/src :
- Rename "pyext" to "isobar".
_____________________________________________________________________________
* ./hurricane/doc/hurricane :
- Documentation of DbU, replacing documentation of Unit.
* ./hurricane/src/hurricane/hurricane/DBo.h :
- Property set is now a mutable member, allowing const DBo to changes
their properties. Strange side effect on SlotAdapter in which we
need to declare two separate templates, one for const type and
another for non-const type.
- _getTypeName() defined to prevents noisy error message when a
derived class (from DBo) do not want to implement support for
the inspector.
_____________________________________________________________________________
Derrick Release !!
* ./hurricane/src
- Simplification of the Inspector internal mechanism. Simple, but with
more templates, means a slower compilation.
- The DbU::Unit problem : DbU::Unit are only typedef over long type,
so we cannot create a specific overload for them. Uses "getValueRecord()"
instead of "getRecord()"
- For HInspectorWidget add a "getClone()" method. Also add a global
object counter (for Record too) to track down memory leaks.
- Big rewrite of the HInspectorWidget : now do not leak memory like hell,
and only kept allocated the current Record and not the full stack
of them (instead, we stack Slots which are ligthweigh objects).
- Rename of "real" unit to "grid" unit.
- New conversion function "getPhysicalsPerGrid()" and associated
mechanism.
* ./coriolis/src/crlcore :
- Synchronise with the Hurricane modifications.
_____________________________________________________________________________
* ./hurricane/src/hurricane/DbU.{h,cpp} :
- Add forgotten converter function physicalToGrid(), physical units to
founder grid units.
* ./hurricane/src/hinspector :
- Added history support, and ability to move through the history stack.
- Fork support : by typing 'O' (capitalized 'o' letter) you can open
a new inspector on the current record.
_____________________________________________________________________________
* ./hurricane/src/hinspector :cla
- No more extra arguments in HInspectorWidget & RecordModel constructors.
Valid values have to be sets through setRootRecord() & setSlot().
- Key for forking sub-inspector is now *minus* 'o'.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Bug: very tricky one. Do not emit "layoutAboutToChange()" signal
after destroying the Record used by the RecordModel but before
setting a new one and not setting the _record field to NULL.
Now setRootRecord() should work more than once.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- API : in CellWidget & CellViewer constructors now only takes the
parent QWidget.
- Renaming coordinates translation functions for more clarity.
- Adding a StatusBar showing mouse coordinates.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Grid & Spot support (adjusted display threshold).
- Added new copyToScreen() functions for _drawingBuffer to screen refreshment
or partial copy (useful for Spot).
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- New Widget policy : a widget do not generate other widget : applied to
CellWidget which no longer supplies Palette & StatusBar.
API note: to associate a HPalette to a CellWidget (that is be able
to select layer) you have to call "bindToPalette()" on the CellWidget.
- Hurricane reusable widget names prefixed by 'H' : HMousePosition and
HPalette.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- New feature : support for highlighted selection with decent refresh time.
To active selection mode, use the 's' key or the "View" menu.
- New feature : HNetlist to browse a Cell's Netlist. HNetlist can be used
with any NetInformations derived class, allowing the user to enrich
the HNetlist displayed fields. For an example, have a look at
SimpleNetlistWidget.
- Added proper licence header to all file.
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- New feature : geometrical Query with callback fonctions "a la" OpenAccess.
* ./hurricane/src/hviewer :
- Uses Query to draw display.
- Bug : when drawing segments as lines (width inferior to 1 pixel)
uses an alternate Pen which is one pixel wide and SolidLine styled,
avoiding strange orange lines... Mechanism implemented in sub-class
DrawingPlanes.
- Make selection always visible regardless the zoom level.
- CellWidget names it's most importants childs QWidget (mostly menus)
for later retrieval in customized sub-classes.
* ./coriolis/src/crlcore/src/cyclop :
- Created a simple derived class from CellViewer. Example of customisation
of CellWidget.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Bug : now CellViewer can start with a NULL Cell, note that in this
case all displacement/zooming function of CellWidget became uneffective.
(display only a black screen)
- New widget : HGraphics to select the layout graphic's theme.
- New widget : HDisplayFilter to select displayed hierarchical levels.
- Distinguish between Close (one viewer) & Exit (all viewers).
- Small enhancments of DisplayStyle (Description & darkening).
* ./coriolis/src/crlcore/src/ccore :
- Xml display parser takes account of DisplayStyle description & darkening.
* ./coriolis/src/crlcore/src/cyclop :
- Enhanced COpenCellDialog : ability to open in a new Viewer.
- Bug : now Cyclop can start on a NULL Cell.
- Half Bug : when a Cell is loaded at start, call show() *before* setCell()
so all internal widget resizing due to the insertion of the toolbar,
menbar palette ... takes places before the Cell fit. Now the loaded
cell appears correctly fitted.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- New feature : Command support. Move command is now implemenented as a
Command and no longer built into the CellWidget. ZoomCommand implemented.
- New feature : SelectCommand support along with new HSelection widget to
browse the current selection. Selection is automatically kept up to
date.
- Note : Selection Browser & Netlist Browser pointer in the CellViewer are
resets to NULL on widget destruction by closing. We do not want to keep
big widget hiden. The are allocateds on demand.
- New feature : progessive grid. First display 5x5 then 5x5 + 1x1.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Bug : default argument to setWeight() sould be QFont::Normal and not "-1".
Shows in Qt debug mode (catched by an assert).
- Bug : SelectCommand now keep the Selection check button in sync.
- Change : Palette doesn't show at start.
* ./hurricane :
- Now choice between static and dynamic linking. Note that thoses options are
mutually exclusives.
* ./coriolis/src/crlcore :
- New choice between static and dynamic linking.
- New feature : XmlParser optional warning when file not found (default is
to warn).
- New feature : now read environment from user's optional configuration file :
~/.environment.alliance.xml
- Potential bug : when loading/parsing file, the XmlReader hangs if the opened
file is a directory, and QFile allows directory opening :-(
_____________________________________________________________________________
* ./hurricane/src/viewer :
- New features : advanced selection widget/commands. Communications between
CellWidget, HSelectionPopup, HSelection & SelectCommand mostly done
through signal/slots (better undersdanding of the possibilities).
- Change : debug menu is hidden by default.
- Change : in all the QTableView rows are now correctly resized, even when
filtering is active (new forceRowHeight() slot). I'm pretty sure there's
a better way to handle this, but I haven't found it for now.
- Change : small naming normalisation in all those TableView.
_____________________________________________________________________________
* ./hurricane/src/viewer :
- New feature : display instances names (vertical on bottom left corner
of the AB). New CellWidget capability : drawText(). Small modification
of styles & display.xml to distinguish between different kind of texts.
(instances name, master cell names, ...).
- New feature : do not create color, pen & brush at start in Graphics/
DisplayStyles. Now for the graphics to be used it must be enabled with
a call to "Graphics::enable()" *AFTER* allocating the QApplication.
* ./coriolis/src/crlcore/src/cyclop :
- New argument "--text" to check pure text mode.
_____________________________________________________________________________
* ./hurricane/src/hurricane/Name.h
./hurricane/src/hurricane/Name.cpp :
- New feature : Allocate a static member "_emptyName" which could be used
to manage effeciently empty Name (for functions returning reference on
Name, by example).
* ./hurricane/src/hurricane/Property.h
./hurricane/src/hurricane/Property.cpp :
- Change : Now StandardPrivateProperty & StandardSharedProperty templates
systematically uses static member for the property's name. This leads
to suppress the "const Name&" argument when creating a property, and
the _name member is no longer present in each object instance.
- Change : Property must now be created/get through static methods :
StandardPrivateProperty<Value>::get ( DBo* );
StandardPrivateProperty<Value>::create ( DBo* );
StandardPrivateProperty<Value>::create ( DBo*, const Value& );
Note that, as before, the Value type must provide a default constructor
and a copy constructor.
* ./hurricane/src/hviewer/DisplayStyle.cpp :
Bug : early Graphics::enable() no longer makes application crash.
* ./coriolis/src/crlcore/properties :
- Complete redesign of properties managment. Individual properties relateds
to the same concept and DBo* are now grouped together into an
"ExtensionDatas" which is nested into a specific "Extension" Property.
The various datas can be accessed through static methods of the Extention
object. Two Extension have been created :
a. LefDefExtensionDatas / LefDefExtension (on Cell*) : holds convert
factors & Ioc orders (if any).
b. NetExtensionDatas/NetExtension (on Net*) : holds various Port names,
currently only one Name at the same time is managed.
* ./coriolis/src/crlcore/lefdef :
- Change : re-enable and big cleanup of the LEF/DEF parsers drivers. Currently
only the DEF parser is enabled.
* ./coriolis/src/crlcore/src/AllianceFramework.cpp :
- New : Ability to pre-load all cells from a library.
* ./coriolis/src/crlcore/src/cyclop :
- New : Ability to choose the input format "on the fly".
_____________________________________________________________________________
* ./hurricane/src/hurricane/ExtensionSlice.h
./hurricane/src/hurricane/ExtensionSlice.cpp
./hurricane/src/hurricane/ExtensionGo.h
./hurricane/src/hurricane/ExtensionGo.cpp :
- New : support for user-based Gos & Slices. A normal slice is a couple
(Layer,QuadTree) while a ExtensionSlice is a couple (Name,Quadtree).
Note that for efficiency ExtensionSlices also uses a mask bitmap.
This new feature implies modifications of the Cell QuadTrees and
the Query callback/class. CellWidget & Palette also updated to allow
the drawing of thoses new slices.
* ./coriolis/src/crlcore/src/cyclop/DemoGo.{h,cpp} :
- Example : how to construct & uses an ExtensionGo (draw a thick red
box around the Cell's abutment box).
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- New : Mask object to manage masks.
- New : BasicLayer ordering & connectivity is managed.
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- New : DebugSession for a selective trace activation, based on "symbols",
that is, void pointers to objects.
- New : ExtensionGos are now selectables (integrated to the
Cell_OccurrencesUnder collection). Note that they are manageds as Gos
and *not* ExtensionGos.
- New : Bug flavor of Exception (sibling of Error & Warning).
* ./hurricane/src/hviewer :
- Change : ExtensionGos are now hidden by default.
* ./coriolis/src/crlcore :
- Technology directly avalaible in RoutingGauge.
- _viaLayers table in RoutingGauge to manage METAL/METAL connexity.
Can contains NULL in case of non-contiguous metals.
- Contants are moved into a Constant top-level namespace named
"Constant"...
- RoutingLayerGauge no longer checks for BasicLayer (could be
RegularLayer).
* ./coriolis/src/nimbus :
- Uses Constant namespace.
* ./coriolis/src/knik :
- Edges are now drawed as true colored edges between two vertexes,
and not as sides of the GCell.
* ./coriolis/src/katabatic :
- Initial portage from Coriolis 1. AutoContacts resizing is still to be
activated.
* ./coriolis/src/unicorn :
- Bug : bad libraries depndencies in CMakeList.txt.
- Added Katabatic tool.
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- Bug : double deletion of ExtensionSlice, one in Cell and one in
ExtensionGo::unmaterialize() when the last ExtensionGo is removed.
Keep the one in unmaterialize.
- Bug : missing "_preDestroy()" in ExtensionGo (not really a bug but may
be useful in the future).
- Modification : begin to uses "ltrace(level)" instead of "trace()".
Levels affecteds to Hurricane are 0-10 (the lowest).
* ./coriolis/src/katabatic :
- New : create a Configuration object to group all that's related to
configuration (RoutingGauge ...).
- Finished porting :
a. - AutoContact resizing.
b. - Structure stripping to get back to Hurricane.
- Todo : AutoContact removal from the GCell lists whenever destructed.
In combination with "engineDelete" to speedup the destruction
process. Not a priority as we never destruct AutoContacts for now.
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- Bug : memory leak in Query.h. When we do try a levelDown() remove the
Instance locator that have been created (and is not valid).
- To trace the numbers of Instances Locator add a counter inside the
QuadTree. The code is commented but could be useful in case of
another memory leak...
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- New feature : first try at a more ergonomic interface. The "Controller",
a simple Tabbed window for managing all settings.
Reorganize the way things are selected (Nets, Area, single), aglomerated
selection.
Use a "logical" progression Netlist -> Selection -> Inspector.
- In CellWiddget, new Selection managment mecanism to ensure persistent
Selection across cell modifications.
New signals/slots to manage Cell modification :
a. - cellPreModificated() : must be launched *before* the Cell modification
by the tool about to modify it.
b. - cellPostModificated() : must be lauched *after* the Cell modification
This mecanism may be amended to automatically fit with the UpdateSessions.
- Cleanup (part 1) : more consistent name for widgets, replace the 'H' prefix by
a "Widget" suffix. Objects are modified by not filenames yet (due to svn not
liking file renaming and modications at the same time).
- Improved support for static building in CMakeList.txt.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Bug : InspectorWidget was using Record from Occurrences in the SelectionWidget.
but those Occurences were created on the fly by the CellWidget/Selectors.
So, whenever the selection changes the Occurrence may diseapear leaving a
bad Record in the InspectorWidget (core dump).
Now, the TabInspector keep a copy of the Inspected occurrence, so it
can go through any selection change.
In addition, the InspectorWidget could be passed Occurrence that it keeps
local copy along with Record*.
- New Feature : internal, first step toward an extensible ControllerWidget :
now all Tab are derived classes of ControllerTab.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- New feature : full uses of SelectionModel in NetlistWidget, allow multiple
selection. New option to automatically select Nets from the Netlist
browser into the SelectionWidget (temporarily set up in cumulative
mode).
- Rename : SelectorCommand into SelectorCriterion (file name renaming in
next commit).
- Reorganisazion : in CellWidget, SelectorCommand/SelectorCriterions operations
are gathered in a single object : SelectionCriterions.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Rename : SelectorCommand into SelectorCriterion (file part).
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Bug: Bad detection of libraries in HURRICANE_CHECK_LIBRARY macro.
- New feature : add a "selectable" characteric on drawable objects. Allows
to selectively select objects through dragging. Note that it's implemented
in term of BasicLayer & ExtensionGo. If an object (Component) has a Layer
composed of more than one BasicLayer it will become selectable as soon as
one of it's BasicLayer is selectable.
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- New feature : remove Hurricane's original basic Timer and replace it with
the one from Coriolis/crlcore. Added ability to get the elapsed time
without stopping the timer.
* ./hurricane/src/hviewer :
- New feature : complete redesign of the drawing refreshment loop. Now there's
a "secondary" loop managed by the "RedrawManager" object which bufferize
the redraw requests. The "_redraw()" function has been made interruptible
at coarse level (between layer).
Important note about the redrawing design : the QApplication::processEvents()
function cannot be called inside the paintEvent() functions/sub-functions.
So the drawing is separated from the paintEvent. The paintEvent() performs
only quick pixmap buffer copy. The _redraw() is triggered by the move/refresh
events bufferized by the RedrawManager, flush periodically the loop event
and send direct (not posted) paint events (repaint() call).
Another constraint is that the displayed Widget can only be painted during
the paintEvent(). Otherwise the painter refuses to initialize.
- Ergonomy : adopt more standard key/mouse bindings. No more CTRL key for zooming
(too small zooms are rejecteds, thresold at 10x10 pixels). Continuous move
is enabled with SPACE+mouse.
* ./coriolis/src/unicorn :
- Reorganisation : Unicorn is now supplied as a separate library. Due to a limitation
of cmake the binary can no longer be named "unicorn" as it conflicts with the
library name. So it's been renamed into unimain (better candidates?)
_____________________________________________________________________________
* Merry Christmas & Fuck Numericable.
* ./hurricane/src/hurricane :
- New feature: Display support for Rubber, three modes of representation : centric,
barycentric and (pseudo) steiner.
- New feature: ability to generate pdf/ps snapshot using QPrinter. Can perform
an exact snapshot or print a synthetic A4 (choice hard-wired for now).
- Change: display styles reorganisation, recreation of the "Alliance Graal" look.
- New feature: darkening managment at CellWidget level, to allow Extension to
darken when unselecteds.
- New feature: ExtentionGo are now managed by the selection redraw function.
- New feature: Selector set is now sorted by object type, this allow to speedup
the redraw function which will now perform only one loop.
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- Bug : Timer.h/.cpp, friend overload of the operator<<(ostream&) introduce
a ostream<<() function in the Hurricane namespace which prevent the
overload to resolve correctly under MacOS X (gcc 4.0).
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- New feature: support for breakpoints with a selectable stop level.
See Breakpoint.h. Graphical popup automatically when Graphics is
enabled.
User can select what to do when a breakpoint is reached and valid
through a callback mechanism.
A disabled example is avalaible in GraphicKatabaticEngine.cpp.
- Ergonomy : reverse the zooming direction of the mouse weel (some said
it's like in MS Word...).
- Bug: accept zoom when bottom right is below lower left (absolute value).
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Bug: redraw the palette layer samples whenever the style changes. Uses a
new, more clear model to transmit signals. A star model where the
CellWidget is the center, signals propagate a void pointer which tells
the emitter to avoid looping. First a slave emit the signal to the
CellWidget. When the CellWidget receive the signal it's transmitted to
all slave widgets.
- New feature: ExceptionWidget (derived from QDialog) to display properly
catched exceptions. The Abort button of the Dialog forces the program
to core-dump with a SIGSEGV. The "Try to Continue" resumes the program,
which is higtly to crash anyway...
- New feature: a HApplication in replacement of the QApplication to catch
exceptions in the notify() function, that is exceptions that could be
throwed inside event handlers.
* ./coriolis/src/unicorn :
- New feature: making uses of HApplication.
_____________________________________________________________________________
* ./coriolis/src/crlcore :
- New feature: users can select it's preferred display style through the
environment.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Change: BreakpointWidget is no longer modal, need to replace the ::exec()
by a custom made one.
_____________________________________________________________________________
* ./coriolis/src/katabatic :
- Supress the last remnants of Nimbus (used to build the GCell grid),
now read the grid cut lines from Katabatic.
* ./coriolis/src/unicorn :
- No more linking with Nimbus library.
_____________________________________________________________________________
* ./coriolis/src/katabatic :
- Bug: correctly build the GCell grid from Knik.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Change: make ExceptionWidget & BreakpointWidget non-resizables.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Bug: do not redraw the grid with each paintEvent(). This is a terrific
cpu eater. Grid is now drawn into the same plane as the layers.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Optimization: rework the display speed and display policies. Now redraw
requests no longer interrupt themselves, provoking a lagging effect but
a more fluid display (Events interruption is working nonetheless).
Small rework on RedrawManger: more meaningful attributes names and
code simplification.
The previous behavior can be re-enabled with the ALLOW_REQUEST_INTERRUPT
define.
Try to reduce to the min the number of pixmap copy, less calls to
DrawingPlanes & repaint.
The hurricaneAMS transview so regain it's previous fluidity when
parameters are changed.
- Change: the _stripWidth can now be adjusted.
- Note on profiling: sysprof, or rusage do not take account for operations
outside the processus, so for example, when a pixmap copy is done, it
doesn't show any cost in the processus but it's paid in Xorg.
The operation seems to be fast while it's slower instead.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- New feature: CellWidget now store it's internal state in a separate
nested object CellWidgetState. The State is work in progress, currently
is store the Cell*, showSelection, cumulativeSelection, selection
criterions and showBoundaries. showBoundaries may evolve to be stored
as part of the Palette's state.
- Change: implement the "start" propagation model signal/slot for
showSelection, cumulativeSelection & showBoundaries. The main concern
is to avoid signals loop. See SelectionWidget::setShowSelection(bool)
for an example.
- Change: supress the minimumSize of the SelectionWidget (200 pixels is a
waste of space when the Path is empty).
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Change: simpler implementation of the occurence selection mechanims
between SelectionPopup, SelectCommand, SelectionWidget & CellWidget.
Consistent (identical) names of signal/slots : selectionToggled() and
toggleSelection().
- Change: disable QApplication::processEvent() has it seems to slow down
display refreshment on Mac OS. This may be a side effect of another
problem not yet diagnosed.
- New feature: CellWidget internal state enhancement : now manage an
history of scales (through 'u' & 'd').
- New feature: hierarchical exploration through 'CTRL+u' & 'CTRL+d'.
On second though, what a bad key mapping. To be corrected soon...
* ./coriolis/src/* :
- Bug: for Mac OS, event when building a shared library we need to
supply the complete list of dependency libraries. Affect almost
all tools.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Bug: correction of the bad keyPress event handling in InspectorWidget
(had to press twice the key for the action to be transmitted).
Uses an eventFilter() at InspectorWidget instead of a keyPressEvent()
overload. The keyPress event is first received by the QTableView then
transmitted to the upper level. The eventFilter allows the InspectorWidget
to catch the event *before* it gets to QTableView (but let pass thoses
it don't want).
- Bug: idem for SeletionWidget.
- Change: do not draw the rectangular area of AreaCommand until it is bigger
than a given threshold (programmable). Affect ZoomCommand and
SelectCommand. ZoomCommand no longer issue a warning when the zoom is
to small.
- New feature: fit to net in the NetlistWidget. Uses simple contextual menu,
another way to avoid overloading keyPressEvent().
- Change: in Query, the filter has now it's own subtype: Query::Mask.
- Change: enhancement for the "start" model of signal propagation, used to
re-implement the DisplayFilterWidget.
- Change: more clear policy for signal emission: a signal must be emitted
by any "setter" method (setStartLevel(), setStopLevel(), ...). Has to
be enforced for all setter (work in progress).
- Change: re-implemenation of the delayed refresh mechanism. No more flags
propaged througout the functions calls but a session mechanism instead.
See CellWidget::openRefreshSession() & CellWidget::closeRefreshSession().
Nothing is actually drawn until the last session is closed.
Session mechanism can be invoked by signals/slots, see NetlistWidget.
- Change: less dangerous key mapping:
'z' : zoom in.
'm' : zoom out.
'CTRL+z' : previous zoom level.
'CTRL+m' : next zoom level.
'CTRL+Up' : back in hierarchy.
'CTRL+Down' : go down in hierarchy.
'SHIFT+Up' : back in hierarchy stack.
'SHIFT+Down' : go down in hierarchy stack.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Change: modifie GraphicsWidget, PaletteWidget, NetlistWidget &
SelectionWidget to comply to the "star" model.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Bug: in CellViewer::setCell(), do not try to get the name of the cell if
it's a NULL pointer... Solve the cyclop "empty cell" coredump problem.
- New feature : dbo_destroy<> a shared_ptr<> that calls the destroy method
of an object, specially tailored for DBo. Application in Cyclop.
_____________________________________________________________________________
* ./coriolis/src/crlcore :
- Bug: make Cyclop "COpenCellDialog" non-resizable.
* ./coriolis/src/unicorn :
- Change: rename the binary from "unimain" to "cgt", shorter to type and
with a good memorization potential. cgt stands for "Coriolis Graphical
Tool".
- Change: uses dbo_ptr<> in CgtMain.cpp.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Feature: ability to hide/show layer of the palette from the code, needs
the CellWidget to be bound to a palette to work.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Bug: corrected memory leak in RedrawManager, events weren't freed.
- Bug: various attributes reordering in constructors.
_____________________________________________________________________________
* ./coriolis/src/crlcore :
- Rename: in RoutingLayerGauge, "Index" have been wrongly substituted by
"Depth", restoring the orignal name (ie: getTrackIndex()).
_____________________________________________________________________________
* ./coriolis/src/katabatic :
- Lots of (small) adjustments needed to match kite requirements.
_____________________________________________________________________________
* ./coriolis/src/unicorn :
- Change: switching from Katabatic to Kite. Note that as Kite is a derived
class of Katabatic, both tools musn't coexist on the same Cell.
_____________________________________________________________________________
* ./coriolis/src/crlcore :
- New feature: Ability to get the value of an options through an accessor
and not only an implicit conversion.
_____________________________________________________________________________
* ./coriolis/src/knik :
- Small modification: ability to get the size of the grid. Print this
size in verbose mode for automatic benches.
_____________________________________________________________________________
* ./coriolis/src/katabatic :
- Bug: Due to the simplication of the decorator model, AutoContact are
no longer derived objects from Contact. So we must replace all the
dynamic_cast<> by lookup functions.
- Change: starts renaming "getContact()" accessor of AutoContact by
the generic "base()" accessor.
_____________________________________________________________________________
* ./coriolis/src/kite :
Bug: incoherency control in Session::addMoveEvent(), Session::addSortEvent().
Change: small verbosity level changes.
_____________________________________________________________________________
* ./coriolis/src/unicorn :
- New feature: text mode in "cgt" for running benches.
_____________________________________________________________________________
* ./coriolis/src/katabatic :
- Ported documentation from coriolis 1. Important remark: the documentation
related to symbols in local anonymous namespaces cannot be put in a separate
".dox" file, as doxygen cannot understand that the ".dox" and ".cpp" files
are associated. So we move the doc directly into the ".cpp" file. Too bad.
_____________________________________________________________________________
* ./hurricane :
- Bug: destructor of Technology was destroying some Layers twice. Destruction
of Layer was done by a loop over a multimap<> that could contains more
than one entry of a Layer... Now using a loop over the IntrusiveMap.
- Change: Reorganization of NetExternalComponents property, all functions
are now static functions members as the property name.
* ./coriolis/src/crlcore :
- Bug: in Catalog destructor StateProperty must be removed from Cells as the
associated State is deleted.
- Bug: in ToolEngineRelation add a flag to tell if the ToolEngine is being
destroyed by the way of the Cell or by the way of itself. Avoid looping
in destructors.
- Bug: correct darkening factor for Alliance styles in display.xml.
* ./coriolis/src/katabatic :
- Bug: bad topology building for _GCell_1G_1L3(), now it's made as a dedicated
topology.
- Bug: in _GCell_xG_1L1_1L2(), horizontal local segment instead of vertical.
- Bug: topology 3G 1L2 was not managed, uses xG_xL2 now.
- Change: local function "autoContactFromRP()" of LoadGrByNet is now moved
as a static function member of AutoContact : AutoContact::fromRp().
- Change: new getLayer() decorator accessor in AutoContact.
- Bug: in LayerAssign::splitAutoContact(), take into account the case when
a global wire is directly anchored on a RoutingPad (VIA12). In this case
we must create a complete HV access through M2/M3 (M4) as the original
global wire is moved to M4/M5.
- Bug: in KatabaticEngine::_saveNet(Net*) when deleting a zero-length segment,
ensure that the source is not anchored on a RoutingPad (swap with target)
as this is the to be deleted contact. If both source & target are anchored
and the segment has NULL length, pospone destruction with an Error message.
* ./coriolis/src/kite :
- Bug: supress the "double penalty", UNIMPLEMENTED warning then BUG warning.
After analyse it's definitively unimplemented and not a bug.
- Change: rename "closeRouting" into "finalize".
- Change: now ToolEngines can safely remains hooked into the Cell rigth to
the DataBase deletion, no longer remove Knik (Kite will be removed).
* ./coriolis/src/unicorn :
- Change: adapt to the latest API of Knik.
- Change: sets routing edge capacity to 0.9 in order to proceed the shifter
bench.
_____________________________________________________________________________
* ./hurricane :
- Change: in CellWidget::DrawingPlane, complete replacement of hard-coded
numeric indexes by the PlaneId enum values.
- Change: in SelectionWidget, filter on the Occurrence name instead of the
path name. Todo: add a radio button to select on witch column we sort.
- Bug: in SelectionWidget, when the filter is active, remap the index
of the toggled occurrence through the filter.
* ./coriolis/src/crlcore :
- Bug: while pre-destruction ToolEngineRelation, looping over a Collection
set while deleting it. Replace by a "delete first element 'till it's
empty".
* ./hurricane,
./coriolis/src/katabatic,
./coriolis/src/kite :
- Change: documentation building with doxygen is now optional and disabled
by default. To enable documentation generation run cmake with the
following argument :
-D "BUILD_DOC:STRING=ON"
Or edit the cmake cache variable "BUILD_DOC".
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- Change: replace the simple _engineDelete boolean flag by a full fledged
_state variable telling exactly at which point we are.
- Change/Bug: reorganization of the save/delete procedure. Now there's a
separate function to revert to the pure Hurricane layout :
finalizeLayout() [virtual]
In addition introduce "_gutKatabatic()" & "_gutKite()" which are
in charge of deleting cleanly all internal structures but allowing
the ToolEngine to remain consistant (albeit empty). The "_gut()"
are not virtual and are to be called in two contextes: from the
_preDestroy() and from finalizeLayout(). They must manage two cases,
whether the structure is still intact or has already been cleared
due to a former call to finalizeLayout().
The two possible sequences calls :
1. - Layout not finalized :
=> runNegociate()
=> destroy()
=> _preDestroy() // _state: drived.
=> _gutKite()
2. - Layout not finalized :
=> runNegociate()
=> finalizeLayout() // _state: Driving.
=> _gutKite()
=> destroy() // _state: Drived.
=> _preDestroy()
=> _gutKite()
* ./coriolis/src/kite :
- Bug: in GCellRoutingSet, inversion of the min/max density bounds for the
set expansion. The practical results was that the set was only agglomerating
of the exact same density.
- Bug: when loading AutoSegments into the Kite GCell/GCellSet, the order number
has to be incremented once by GCellRoutingSet and *not* for each GCell of
the set.
_____________________________________________________________________________
* ./hurricane :
- Cleanup debug messages.
- New: in NetExternalComponents, adds a static method "isExternal(Component*)",
used in AP driver.
* ./coriolis/src/crlcore :
- Bug in ApDriver :
1. - Use DbU translation function to get right lambda coordinates,
SCALE_X is now systematically sets to 100 instead of deduced
from the DB.
2. - No longer generate lines with "UNTRANSLATED" layer. If needed
we should issue a warning, but not a corrupted ap file.
3. - Correct translation of vectorised name elements :
"b(3)" --> "b 3"
- Cleanup debug messages.
* ./coriolis/src/katabatic :
- Change: GCell densities are now computed on a per layer basis.
The densities are stored as unsigned char, with "1.0" equivalent
to 64. This is we can only describe up to a 4.0 overload, but this
should suffice.
- New: add a "desaturate()" method on the GCell which "push up"
overcell global segments till density is acceptable.
- New: controlable desaturation threshold for GCells.
- Bug: In _saveNet(Net*), some AutoSegments are removed, we must
keep the LUT in sync at this point, as the LUT is used to
remove AutoSegments in DestroyAutoSegment.
- Bug: bad states managment in _gutKatabatic() & _gutKite() and
_preDestroy().
* ./coriolis/src/kite :
- Bug: In RoutingEvent, when the interval is too narrow and contains no
Track, do not issue a bug but an "UNIMPLEMENTED" (less stressing for
myself).
* ./coriolis/src/unicorn :
- New: add a "save" option (only valid for Kite in text mode), finalize
the layout before saving...
_____________________________________________________________________________
* ./coriolis/src/katabatic :
- New: makePowerRails() : a simple trans-hierarchic method of KatabaticEngine
to build-up and unify power rails.
- Bug: use of freed memory, loop over a deleted AutoSegment in _saveNet().
- Bug: memory leak in GCell, delete density table.
* ./coriolis/src/kite :
- New: build power rails.
* ./coriolis/src/unicorn :
- New: build power rails in kite text mode.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Change: more ergonomic selection mode commands. Now clicking on "nothing"
automatically switch off selection displaying.
_____________________________________________________________________________
* ./coriolis/src/kite :
- Bug: In AutoContact, the _getString() function was setting V alignate
flag using H alignate member... resulting in nonsensical error messages.
Also correct vertical disconnected components which was telling that
horizontals weren't connecteds.
Messages were nonsensicals, but error were reals.
- Bug: In RoutingEvent::_setAside() when a set aside request fails, do not
not reschedule a RoutingEvent for the currently routed segment as it
will fail again (until the ripup limit is reached). Now _setAside()
returns a boolean indincating success or failure.
- Bug: In RoutingEvent::_setAside() when iterating over the collapseds
perpandiculars of a pushed segment (to transmit constraints), we can
encouter more than one perpandicular associated to the same canonical,
in this case we must schedule only one RoutingEvent. To do so we keep
track of already processeds canonicals in a set<>.
- Bug: (temporary) when an event is unimplemented, to not try to reschedule
it when _setAsides() requests are emitted, will gradually diseapear as
unimplemented cases are implementeds...
- Bug: remove duplicated UNIMPLEMENTED warnings, to get accurate statistics
about what work is remaining. Introduce an "unimplemented" flag in the
RoutingEvent.
- Bug: In LayerAssign, the AutoContact splitter fails for some tricky
configurations. As those configurations are poor routing, correct thoses
to make the bug deseapear, but it's still lurking :-(
Introduce a AutoSegment::changeDepth() method which change layer of
an AutoSegment AND the local non-terminal connected AutoSegments at
the same time.
- Bug: in LayerAssign, after splitting an AutoContact, connexity hypothesis
could be broken. Add post treatement that look if any horizontal/vertical
alignement constraints must be sets on both splitted AutoContacts.
The mechanism itself is implemented inside the AutoContact::computeAlignate()
method, itself created from JunctionBox::checkTopology().
Have to verify is the connexity constraints could be enforced by
construction (have to re-understand the splitting code...).
- Bug: In TrackSegment/Session, the invalidate/revalidate mechanism of The
TrackSegment was completly missing. Now sets up a callback on
AutoSegment which is responsible for revalidating the associated TrackSegment.
Note: to revalidate the TrackSegment we have to look for the canonical
AutoSegment.
- Bug: In RoutingEvent, when forked update the TrackSegment/Data event pointer.
Suppress annoying duplicated UNIMPLEMENTED events.
- Bug: In AutoContact, invalidate all AutoSegments connecteds, not only those
for wich the extension is updated.
- Bug: imbroglio with virtual methods & _getString() in RoutingEvent and
InsertRoutingEvent preventing getString() to work on InsertRoutingEvent.
Declare insepector pointer support for InsertRoutingEvent.
- Change: in RoutingEvent, the comparison operator now also sort over
signal names in case of equality. This a try to be more reproductible.
Do not forget to remove it when benching as it's a slow down.
- Change: in TrackSegmentCost/DataNegociate, the ripup count is moved from
DataNegociate to TrackSegmentCost as it's now used in the TrackCost
calculation. Proxy setter/getter are kept in DataNegociate.
- Change: In Session :
a. New lookup function to get Kite::GCell from Katabatic::GCell.
b. Kept a cached copy of the NegociateWindow order.
c. New access function to the current NegociateWindow.
d. New access function to the KiteEngine ripup cost threshold.
- Change: order, event queue & event history are now attribute of NegociateWindow
instead of simple variable of _negociate().
- Change: rewrite of the AutoSegment load & TrackSegment load in the GCells.
Mostly to simplicate the dog leg creation.
- Change: in GCell, now GCell keep a reference of the owning grid, and offer
neigborhing utilities (getRight(), getLeft(), getUp(), getDown()).
- New: in GCell, static function looking for the lowest GCell under a
TrackSegment. If the database is coherent, it should be the one owning
that TrackSegment.
- New: Collection & filter in TrackSegments to get canonical collapseds only
once (and hide the Session::lookup() at the same time).
- New: in Track::check(), now look for duplicated TrackSegment.
- New: first support for dog leg creation in TrackSegment.
- New: Ripup count is took in account in the TrackCost sort function (new
attribute, the max from the underlying segments). The sort function
places Track candidates whith lower ripup count in front, but only
when a certain theshold is exceeded.
- New: in KiteEngine :
a. RipupCost threshold setter/getter (see above).
b. ExpandRatio for the GCellRoutingSet setter/getter, allow to tune the
ratio above which contiguous GCell with similar density are agglomerated.
_____________________________________________________________________________
* ./coriolis/src/katabatic :
- Bug/Change: In AutoContact, no longer throw an Error in JunctionBox when
we found an AutoContact anchored on another one (which IS a topological
construction error). Just issue a warning and ignore it.
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- Bug: strange interraction between template, const Data and getString().
Must const_cast<> to const datas before calling getString().
* ./coriolis/src/crlcore :
- Change: gmetalh, gmetalv & gcontact are now compliants with the Layer
connexity mechanism. Also hard coded in the symbolic technology
parser the gmetal & gcontact are now marked as "working".
Note:
Has to implement correctly the Layer working set selection in
the parser & the xml file.
- New: In ToolBox, add "deleteEmptyNets()" to remove empty Nets.
* ./coriolis/src/knik :
- Change: moved LoadSolution() from Ispd to Knik. Completly reworked
segment/contact building.
- Change: In GraphicKnikEngine, much more robustness of the slot functions
regarding NULL cell or NULL viewer.
_____________________________________________________________________________
* All tools :
- No longer catches Warning() as they shouldn't be thrown.
* ./coriolis/src/crlcore :
- Bug: In ToolBox, do not delete POWER, GROUND or CLOCK nets, even if they
are empty.
* ./coriolis/src/knik :
- Bug: BoxRouter solution parser now support negative coordinates...
_____________________________________________________________________________
* ./hurricane/doc/hurricane :
- Bug: In the various Property sub-types dox file the Hurricane namespace
wasn't closed, resulting in the deseapearance of thoses classes in the
documentation (painful to diagnose).
Still, the doc for the derived Property mostly remains to be written.
- Bug: clearing some remnants of a merge conflict in DataBase.dox.
_____________________________________________________________________________
* ./coriolis/srk/katabatic :
- Change: New iterative policy for desaturating METALx (move segments,
revalidate layout, re-compute true density & iterate).
- Change: Second desaturation method, in "step by step" mode. Desaturate
a GCell one segment at a time.
- Change: In GCell, new density update policy. Invalidate flag and
automatic revalidation if needed when the density is accessed.
- Change: no longer separate build/constraint/optimal steps at Cell
level. Any invalidated net automatically go through theses steps.
- Bug: shrink of one Track GCell's bounding box to avoid sharing Tracks
between adjacent GCell. This Track sharing is responsible for the
ordering problems that showed up from time to time. The GCell do not
own it's topmost & rightmost Track (follow the Knik convention).
New static member "_topRightShrink" to shrink the bounding box
from an arbitrary amount needed to make top & right track outside
the GCell box.
- Bug: classical interval vs. point problems, must add one to the
side divided by the length.
- Bug: in AutoContact::getLength() : the set of already proccessed
AutoSegments is not local to this function but to the GCell for
which we compute the wirelength. Make it a parameter...
* ./coriolis/src/kite :
- Change: threshold adjustements for saturation in global & local
routing.
_____________________________________________________________________________
* ./hurricane :
- Bug : In Timer.h, forgot to declare the specialized getString()
template, thus preventing the timer to be correctly display in
output streams.
- Bug : In CellWidget::_redraw(), uses "paintersBegin()" instead of
"painterBegin()" (whithout the "s"). The former open painters for
both normal & selection planes which are subsequently accessed by
"setPen()". The laters opens only the normal plane painter resulting
in warnings for the selection plane painter (shows only from Qt 4.5).
- New : In CellWidget, ability to support the physical grid (not only the
symbolic grid). Added selection symbolic/real in the DisplayFilter.
- Change : add to Technology and all the Layers sub-classes a
"_onDbuChange(float)" method.
This is due to the fact that the symbolic technology is loaded first
into the DataBase (needed for defining the BasicLayer ordering) along with
all the symbolic dimensions for the symbolic Layers. Only afterward, we
load the real technology (hcmos9 for instance) which will sets the
"grids per lambda" factor to it's true value, changing the meaning of
the already loaded symbolic values. Then, it is necessary to scale those
values so they are coherent with the new "GPL" factor, hence the
"_onDbuChange()" function.
NEVER USE THIS FUNCTION AFTER THE TECHNOLOGY HAS BEEN LOADED, it would
render all symbolic coordinates false...
_____________________________________________________________________________
* ./coriolis/src/crlcore :
- New : real technology parser now read the Grids per Lambda factor.
_____________________________________________________________________________
* ./hurricane/src/viewer :
- Change: Consistent encapsulation of "_active" in Command and all it's derived
classes.
- New: support for Rulers. Start drawing by pressing Shift+L.Button, finish
by pressing it again. To cancel a Ruler press Shift+R.Button.
Drawing style support also added : "text.ruler". Rulers are always
visibles (display threshold sets to zero), only the numbers of graduations
displayeds changes (at least 5 pixels between two graduations).
* ./coriolis/src/crlcore :
- New: In display.xml, entry for "text.ruler" (to display Rulers).
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- Rewrite file header to reinstate the BULL copyright and the LGPL license.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- New: In PaletteWidget: allow to select the number of rows of the grid
widget (up to "infinite", meaning one column). Allow to hide entire
groups in the widget.
* ./unicorn :
- New: In CgtMain, uses the GtkStyle to read the graphic look from the current
Gtk theme ensuring a much homogenous look. Activated only under Linux.
Done in two lines of code. As they says in Microsoft: Waahhouuu.
_____________________________________________________________________________
* ./coriolis/src/katabatic :
- Change: In GCell, Top/Right shrink is now 1u instead of 4 lambdas (see
the Tracks_Spiral bug in kite).
- Bug: Stable canonisation. Two subsequent runs of "_canonize()" must
choose the same canonical AutoSegment from an aligned set.
Initially, we choose the "lowest" AutoSegment from an aligned set to
be the canonical. But the topology manipulation algorithm may reorder
the aligned set so the canonical is no longer the lowest, the stable
canonization first look for the previous canonical and preserve it if
it could.
The canonization must be stable because Kite associate a
TrackSegment for each canonical AutoSegment. And when a Net is
re-canonized, such as after creating a dogleg, a sets of aligned
AutoSegment must keep the same canonical.
- Bug: In Session, when revalidating a Net, do not apply the "_toOptimals()"
because when Kite is running it has already displaced AutoSegments and
we do not want them to be moved (without informing Kite).
In fact, after initialization, AutoSegments must only be moved through
TrackSegment (i.e. Kite) and not Katabatic.
- Afterthough: The name "Collapseds" for the collection is misleading,
should have been "Aligneds" instead. May change someday...
* ./coriolis/src/kite :
- Bug: In Tracks_Spiral collection, when the start track, that is, the Track
nearest to the center of the optimal interval is greater than the constraint
interval iself, it is not excluded to the collection. The opposite case,
when the start Track was lesser than the constraint interval was correctly
handled.
This bug explains why I have to set the TopRightShrink of GCells to 4
lambdas (i.e. greater than 2.5 lambda, the current rounding factor for
the "nearest" Track).
On the other hand, has we still have to exclude Top/Right Track so we
must keep the Top/Right shrink mechanism. The Tracks_Spiral include the
bounds of interval [min:max], so either we shrink all the Contacts
bounding boxes or only the one of the GCell.
- Bug: Create new TrackSegments in GCell only after net canonization, we
must create TrackSegment only for canonical AutoSegments, they must
be correctly sets.
- New: Atomic dogleg creation is working.
_____________________________________________________________________________
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- Bug: In GCell::CompareByDensity(), must be a "strictly inferior" instead of
"inferior or equal", which lead the std::sort() template to fails on vector<>.
- Change/Bug : Invert the canonization creation mode. By default, AutoSegment
are created in non-canonical mode, then canonize the whole net. This ensure
that during canonization we never encounter two canonicals on the same set
of aligneds AutoSegments. Also ensure canonization stability.
- Change/Bug : Net canonization no longer moves AutoSegments into optimal
position (call to "_toOptimal()"). This is needed because, when creating
dog legs, re-canonisation musn't displace already Track inserteds AutoSegments
thus creating incoherency between the AutoSegment and the cached TrackSegment.
- Change : For the TrackSegment revalidation mechanism to work, invalidation of
an AutoSegment now invalidate the whole sets of aligned AutoSegments.
- Change : Adds a "destroy mode" to the AutoSegments. Used to suppress the
AutoSegment invalidation mechanism during the "finalize" steps
(the Collapsed Collection used in _invalidate cannot work at this time).
- Change : Reorganize the whole revalidation system.
1. - Suppress the revalidation callback of AutoSegments, now revalidation
takes place in Sessions.
2. - AutoSegments are revalidateds in Katabatic::Session() and then stored
in "_revalidateds".
3. - In Kite::Session() revalidate TrackSegments. To be revalidateds
TrackSegments are deduced from the _revalidateds vector (i.e. canonicals).
- Change: Inverse the meaning of "_valid" flag on TrackSegments, now it is
sets to true *after* an effective revalidation. It avoid multiple
revalidate in Session. The flags are resets to false at each Session
closure.
- Change: Renamed "autoInvalidates()" in "invalidate()" / "revalidate()".
- Change: Harmonisation of check functions now all overloads of "_check()".
- Change: Disable the "Assign Layer by Length" steps in layer assignment.
Leads to better results in the desaturate steps.
- New: Dog leg creation is now working.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Bug: In CellWidget, the drawRulers was copying an enlarged redrawArea into
the Selection Plane causing the selection to deseapear gradually when
slowly shifting.
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- Bug: In Katabatic::GCell::removeHSegment(), detach the right number of
TrackSegments.
- Bug: In BaseGrid::Axis::getGraduationNumber(), when the point in exactly
on a graduation, returns the index above, and not below as done by
lower_bound(). This was causing incorrect GCell geometrical selection.
- Bug: In LoadGrByNet::getSegmentHookType(), inversion between north & south
segment type (source means north and target means south).
- Change: Introduce fixed AutoContact & AutoSegment, specially designed to
handle "big" terminals in M2 or above. Terminals are covered by an
overlapping AutoSegment of fixed type.
Fixed AutoSegments are always canonicals and should never have aligneds
on them. Alignment constraint is carried throught the supporting fixed
AutoContact which have a "punctual" constraint box.
New checks on setAxis & makeDogLeg() so that fixed segments cannot be
used on them.
- Change: In LoadGrByNet, new _GCell_rp_AutoContact() to automatically build
the terminal protection & attach the right kind of AutoContact given the
metal, size and access direction of the RoutingPad.
- Change: In GCell, when loading routing, directly put fixed TrackSegments
into track. And exclude them from routing events.
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- New: Utility functions to manage float rounding errors.
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- Change: Hook the Data-Base full checking mode to "CHECK_DATABASE" #define
instead of "NDEBUG" to allow compiling in debug mode without too much
slow down. "CHECK_DATABASE" slows down by more than a 15x factor the
runtime... (reminder for myself: builCoriolis.sh has a new switch,
"--check-db|-D" to activate this compilation option).
- Bug: AutoSegment are now truly created in non-canonical state, the canonical
parameter being removed from all the creation/constructors functions calls.
Look for discussion about canonization state in earlier commits.
- Bug: After making an AutoSegment dogleg, must re-canonize the Net before
the new TrackSegments are built.
* ./coriolis/src/katabatic,
./coriolis/src/kite :
Making the detailed routing fully deterministic. This was becoming a necessity
as the remaining bugs were becoming more and more elusives and unreproductibles
between "release" & "debug" versions. No noticeable slow down.
- Change: In Gcell, the various density are float numbers, but, due to non-
reproductibles hook ordering their computations are not made in the same
order, resulting in rounding errors. Those rounding errors, in turns made
the sorting functions over (density,index) to sort *only* on faulty density
generating aleatory order between "same density" GCell.
Now after all float computation, we round them trough "floatRound()" to
nearest 1/1000.
- Bug: In SortRpByX() / SortRpByY() to perform a meaningful sort, must uses
"rp->getCenter().getX()" instead of "rp->getX()" on the RoutingPads.
- Bug: In _GCell_xG_xL2(), in the case of a fully horizontal global configuration,
the North/East and South/West global AutoContacts were not correctly choosen.
- Bug: In getTerminalInterval(), when exploring the routing wires in search of
a RoutingPad discart global routing segments, which have been handled in a
previous treatment.
Note: we assume that we are on leaf branches of the routing tree so there's
at most one RoutingPad to found.
- Change: The concept of canonical AutoSegment should only be used by tools using
Katabatic not Katabatic itself.
As a consequence we now manage sets of aligneds AutoSegments whithout having
a canonical representant so we needs to introduce a set of processed segments.
Hence the supplemental parameter in setAxis(), computeOptimal(), toConstraintAxis(),
toOptimalAxis().
The second consequence is the splitting of the Net revalidate() function in
Session's. First stage do constraint & optimal computation and the second
performs the canonization.
- Change: Delayed canonization, making Katabatic free of the canonical concept we
can postpone the canonization stage of a Net until all AutoSegments have been
correctly placed (after constraint computation, optimal placement & revalidate).
This reduce drastically the likeliness of complete AutoSegment equality (in the
sense of CompareCanonical()), thus supressing aleatory choice for the canonical
representant (this case was encountered in the MIPS micro-programmed).
- Change: To generate a trace suited to compare the determinism of two run a new
define is introduced : CHECK_DETERMISM (the definition itself enables the
trace).
* ./coriolis/src/unicorn :
- Change: moving the list of Nets to trace into CgtMain.cpp to have the same trace
in graphical & command line modes.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- New: Adds a nice cartouche on printed snapshots.
* ./coriolis/src/kite :
- Forgotten: Re-enable layer assignment & routing in graphical Kite.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Change: Small size adjustments on the cartouche.
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- Change: In RoutingEvent, moves flavors "relax()" & "ripup()" from members
functions to local module functions.
- Bug: In TrackSegment::makeDogLeg(), when making a dog leg, as the original
segment may be unmovable (placed by a more prioritar GCellRoutingSet) it
will never be riped up. So, the dog leg (perpandicular) axis must be sets
on the edge of the GCell (left or right according to where the orignal
cames from). This make the Track in the GCell completly free and the
insertion of the segment requesting the dogleg could be done without
creating any overlap.
- Bug: In TrackCost, in the comparison operator<(), the ripup gap count was
miscalculated (inverted) concentrating ripup on one Track instead of
trying to scatters them evenly over all candidtates Track.
- Change: No more InsertRoutingEvent subclass of RoutingEvent. Now there's only
one class RoutingEvent holding all the computation (suppress the needs
for virtual functions).
- Change: In RoutingEvent::Compare(), add criterion over the Layer depth for
various ordering tests.
- New: In TrackSegment, mechanism to fine-control the recursive dog leg creation.
- Change: In RoutingEvent::_setAside(), more fine tuned operations. Mixes pushes
and ripups. Pushes TrackSegments that can be simply shrinkeds (and keep them
in Track), ripups thoses which hard-overlaps.
- Change: In RoutingEvent::_setRightBound() & RoutingEvent::_setLeftBound().
- Change: new Ripup function.
- Change: Ability to stop the algorithm on the first database incoherency to
examinates what's wrong. Works only in CHECK_DATABASE mode.
- New: In KiteEngine, add a "printCompletion()" methods to display the completion
state of the design after running negociation. More accurate than grepping
the trace file.
- Change: In RoutingEvent, no longer uses the complex Tracks_Spiral collection as
the Tracks are sorted according to overlap costs afterwards. Revert to the
simple Tracks_Range collection (linear).
- Bug: In TrackCost, the comparison operator<() was sorting in the wrong direction,
thus concentrating on saturated tracks!
- Change/Bug: In Katabatic::Session, separate the canonization step of a Net from
the alignment step. This way canonization no longer result in AutoSegment
invalidation through alignment which was causing problem to the Session
revalidation mechanism.
- Change: To solve more transparently (but sligtly more slowly) the TrackSegment
revalidation problem, when going through invalidated AutoSegment, search for
the canonical one to do the proper lookup.
This allows to suppress calls to TrackSegment::invalidate() in the code.
- New: In AutoSegment, method "_checkConstraints()" which verify that the constraints
form source & target are identical as they must be *after* the constraints
propagation stage.
- Change: In AutoSegment, integrated checker function "_check()" which verify
invalidation, shadow extentions values and AutoSegment constraints from
both AutoContact source & target.
- Change: In Katabatic, "check()" became "_check()" and is now virtual and
returning a coherency flag.
- Bug: In NetConstraints, propagateConstraintFromRp() was applying constraints
only to source AutoSegment. But when an ending AutoSegment is reached,
constraints must also be applied to the target if the AutoSegment is in
the direction of the constraint.
- Bug: In NetConstraints, _computeNetConstraints(Net*) must restore native
AutoContact constraints trhough all the Net before applying anew those
coming from the RoutingPad. This function must be called *only* after a
topological change.
- Bug: In RoutingEvent, whenever a Net's topology changes (when a dog-leg is
created for instance) constraints shadowed from the AutoSegment must be
updateds. This done trough the GCell::addTrackSegment() which is called
systematically after a dogleg is created for each createds and modificateds
AutoSegments.
- Bug: In AutoVertical/AutoHorizontal, create the dogLeg layer according to
the current one.
- Change: In TrackSegment/AutoHorizontal/AutoVertical : the axis of the dogleg
perpandicular segment is sets as close as possible to the saturated area
directly in AutoHorizontal/AutoVertical, no longer in TrackSegment.
- Change: In Katabatic::Session, now returns the set of Nets that have been
topologically modificateds.
- Bug/Change : After a dogleg creation the RoutingEvents must re-read constraints
from the TrackSegment/AutoSegment. And this update must be done *after* the
Session has been revalidated (mainly after the Net has been re-canonized).
This update mecanism is hidden in the Kite::Session::revalidate method,
which for each TrackSegment part of a modificated Net (in the topological
sense) sends through the DataNegociate object a full invalidation request
to the RoutingEvent (if any).
- Change: Moves GCell registration of AutoSegments from the AutoSegment::create()
static method to the dynamic "_postCreate()" of AutoHorizontal & AutoVertical.
More clean & integrated, and avoid AutoSegments unregistereds into GCells.
- Change: In RoutingEvent, do not ripup perpandicular segment to the inserted if
the Insertor has worked (it should have cleaned the target Track).
- Change: In LoadGrByNet, protect punctual M1 terminal by a fixed M2 TrackSegment,
as for M2 terminals. Not very optimal since we create two AutoContacts,
an AutoContact and a TrackSegment were a special subtype of TrackSegment
could do the trick.
_____________________________________________________________________________
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- Bug: In RoutingEvent::process(), when a TrackSegment is being relaxed
because the best candidate is hard overlapping, do not forget to reschedule
the original (broken) TrackSegment. Others created TrackSegment are taken
care of by GCell::addTrackSegment().
- Bug: In RoutingEvent, in Insertor::insert() when ripping up a portion of
Track, do not ripup the fixeds TrackSegments.
- Bug: In NegociateWindow, the NegociateOverlapCost callback must account
fixed segments as hard obstacles (thus setting the "infinite" cost flag).
- Change: In TrackSegment::makeDogLeg(), reset the ripup count of the broken
TrackSegment.
- Change: Much more simple attractor computation in TrackSegmentCost.
Update the TrackSegmentCost systematically before processing the RoutingEvent.
Todo: a transparent invalidation/revalidation mechanism.
- New: Separate RoutingEvent process into multiple stages. One "Negociation"
stage during which ripup is enabled and one "Packing" stage to see if an
unrouted Segment could, in fact be inserted (due to the ripup of other
competitors).
- Bug: A RoutingEvent must be forked only once at a time. Meaning that there
can be only one active RoutingEvent (in the queue) at a time. To check,
from a processed RoutingEvent if there is no already active fork, get
the active RoutingEvent through the TrackSegment DataNegociate attribute.
- Change: A side effect of the dogLeg is that the "original" part of a
TrackSegment must be re-affected to the "lowest" (most congested) of it's
remaining GCells. But this lower could be outside of current RoutingSet
(not routed yet). This leads to a TrackSegment already routed when
processing the RoutingSet of which the new owner is part of.
Change the Bug message into an Info one, as it's not a bug, it's a
feature...
- New: Implementation of all the features neededs to "move Up" a TrackSegment
during the negociation stage. This include :
1. - TrackSegment::canMoveUp() -> proxy to AutoSegment::canMoveUp(true).
2. - TrackSegment::moveUp().
3. - AutoSegment::canMoveUp(bool propagate)
4. - AutoSegment::moveUp(bool propagate)
5. - AutoSegment::changeDepth(unsigned int depth,bool propagate).
6. - AutoSegment::_changeDepth(unsigned int depth).
7. - GCell::hasFreeTrack(unsigned int depth).
The "propagate" flag tells if the "move Up" must be applied to all the
aligneds AutoSegments or only to the current one. "changeDepth()" is splitted
into two function, the overall one (that may do the loop over all aligneds)
and the atomic one that do the work on one AutoSegment.
- Bug: In LayerAssign, when an AutoSegment is moved up, invalidate it.
- Change: In LayerAssign, when creating new AutoSegment to fill the layers gaps,
put them in reasonable initial positions (guesseds from the AutoSegment
original extremities).
- Bug: In AutoHorizontal & AutoVertical, for dog leg creation, when the broken
AutoSegment is Local, do not put it on the GCell side opposite to the break
but in the middle of the original AutoSegment.
- Change : in RoutingEvent::modifyTopology(), first try to move up a Segment and
break it only in second choice.
- New: Special case configuration post-processing. Make preventive dog leg when
a fixed METAL2 terminal is connected to a global perpandicular with little
slack. That is, a tight alignment of METAL2 terminals.
- Bug: In TrackSegmentCost, in the attractor computation again, one step backward,
we need to distinguish between left and right attractors, if there is exactly
the same number of attractors in each direction then do not take it into
account.
- Bug: In AutoSegment::changeDepth(), invalidate the AutoSegment *before* changing
the layer (apply to the AutoSegment iself and any of it's changed perpandicular).
Re-canonize immediatly, as for the dogleg creation, so the newly created
TrackSegment can be attached to the right canonical. This is due to the fact
that TrackSegments are created *before* the Session is revalidated.
The correct sequence for Net's topoligical modification is :
1. - Invalidate whatever segment is about to be modificated, along with any
neighboring ones.
2. - Do the modification.
3. - Re-canonize all invalidateds segments.
4. - Do any additionnal processing.
5. - Revalidate/close the session.
- Bug: In TrackSegmentCost::update(), clear the previous attractor vector before
computing a new one.
- Change: In RoutingEvent::process() Track cost computation, call consolidate()
which enable the perpandicular overlap cost to be taken into account.
- New: In RoutingEvent, the optimalAxis interval to sets the reference calculation
for axis weight. Currently used only by the selfRelax feature to limit the
displacement of the dogleg inside the original track segment span.
_____________________________________________________________________________
* ./coriolis/src/unicorn :
- Change: Do not uses QGtkStyle if Qt version is below 4.5.0.
_____________________________________________________________________________
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- Change: In NetConstraints, changed constraints propagation mechanism, as a
drawback was put into evidence by the "desalignate()" procedure.
- Bug: In RoutingEvent::getAxisWeight(), inversion in the weight computation,
when the left weight is greater compute distance to interval min bound,
and when the right weight is greater calculate distance to interval max bound.
- Bug: In RoutingEvent, the local "relax(TrackSegment*,Track,begin,end,...) was
not returning false in failure cases.
- Bug: In RoutingEvent relax() local function take account of the correct left/right
axis weight (double bug syndrom).
- New: In RoutingEvent::modifyTopology() More smart ripup history exploration,
explore the history until 3 dislodgers have been found or 300 events have been
searcheds.
- Change: In GCell::addTrackSegment(), separate the RoutingEvent rescheduling
part and put it in a TrackSegment::reschedule() method. Allows a more
flexible case handling (notably in dog legs creation).
- Change: In all ::makeDogLeg() methods, suppress the "from source or target"
detachment option. As we do not know on which side is the associated canonical
AutoSegment, we cannot guarantee that the original TrackSegment will be
on the wanted side. Now always detach the target AutoContact.
- Bug: In GCell::addTrackSegment(), when re-computing the owning GCell of an
already created TrackSegment, the lowest GCell may change even if the order
doesn't. Keep the original GCell in case of unchanged order (avoid faulty
swapTrack() in makeDogLeg()).
- New: Implementation of the "double dogleg case" in the RoutingEvent::relax()
local function.
- Change: Now only one dogleg at a time is supported. Must be reset between
two doglegs during the same session.
- Change: In Session & KiteEngine, Segment* lookup now try to find the canonical
the Segment* is not associated to a canonical AutoSegment*. New convenience
function to lookup from an AutoSegment* (not only the base Hurricane::Segment*).
- Change: Suppress the HollowTrackSegment subtype. It was used only to performs
calls to lower_bound, but we can trick the lower_bound template to directly
uses the "position" value (trough a modification of the comparison functor).
As a consequence, TrackSegment no longer have devived classes so we can
remove all virtuals functions.
- New: In Track, in parallel to the TrackSegments, we introduces TrackMarkers.
For now, there only one kind of TrackMarker : those signaling the presence
of a potential RoutingPad access point. Note that we create exactly one
marker by RoutingPad, and it's hooked in all the Tracks accessible from
the RoutingPad. The Markers are took into account in the Track cost function.
Un-virtualisze all Track methods, as this class do not have any derived.
- Bug: Add a "slackened" state flag to prevent infinite slakening recursions.
- Bug: Prevent local TrackSegment to be "dog-legged" more than once, either by
source or by target (because of local segment's ability to reverse source
and target, the flags are not meaningful).
- Bug: Always perform a "canDogLegAt()" before actually calling "makeDogLeg()".
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- Change: In Technology::getViaBetween(Layer*,Layer*) if the two layers
are identicals, return the layer instead of NULL (mostly for mono-
metallic VIAs).
* ./hurricane/src/hviewer :
- Bug: In CellWidget::redrawSelection(), correct calculation of the
selected Instances abutment box. We must apply the occurrence path
transformation to the instance transformation and not the other way
around.
- Bug: In SelectorLess(), Instance must be *inferior* to Components as
they are drawed after in CellWidget::redrawSelection().
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- Important: this version passes the n°2 test circuit "AMD 2901 16 bits".
Svn version: 827.
- Change: Complete rewrite of the RoutingEvent::process() mechanic. See
The Kite documentation for a complete description of this extensive
change (30% less source code).
- Change: in TrackSegment::canDogLeg(), when creating a dogleg on a local
TrackSegment attached to exactly one Terminal AutoContact, sets the
dogleg directly above the AutoContact. We assumes that if a dogleg is
needed near a terminal is must "go up" as quickly as possible.
- Bug: In Track::SegmentCompare() : compare according to "canonical"
positions (i.e. the whole agglomerated meta-segment) instead of only
the canonical representant.
- Bug: In RoutingEvent::modifyTopology() : completly wrong dislodger
computation (big mess with duplicated & obsoleted code).
- Bug: In RoutingEvent.State::relax(), when a double dogleg is created,
TrackSegment inserteds in Track could be swapped meanwhile the two
original bits have to be inserteds in the original Track. The Track
insertion must occurs only after source & target doglegs have been
createds. The criterion being that the TrackSegment owning GCell is
lower than the current (Session) and the Track is not sets.
- What? : In TrackSegment, the lock seems to be unused.
- Bug: In Session::_addRemoveEvent(), forgot to place a sorting event
on the impacted Track. This was leading to index incoherency inside
a Track.
May explain why kite core dump while compiled with gcc of version
above 4.1.x.
- Bug: In AutoHorizontal::_canSlacken() and it's AutoVertical counterpart,
the lengthes of the constraints interval where shrunk by the GCell's
"_topRightShrink" thus never reaching the total of 10 free tracks.
This was leading to unnededs slackening, generating "strange non-
optimal shapes".
This bug is duplicated in the AutoHorizontal::_slacken() method.
- Bug: In AutoHorizontal::makeDogLeg() and it's AutoVertical counterpart,
when breaking a global AutoSegment on either it's source or target
GCell, one fragment changes from "Global" to "Local" which may cause
problems for source/target AutoContact topologies. In that case, force
H/V alignement on AutoContact which becames connecteds to a Local
AutoSegment.
- Change: Sets two different ripup limits, one for global AutoSegments and
the other for local AutoSegments.
- Change: In RoutingEvent, split the State class in two. A new class is
created: Manipulator which holds all the methods needed to insert, ripup
or topologically modify a TrackSegment.
- Bug: In Track::checkOverlap, when multiple segments of a same Net are
contiguous, the overlap with the next (of another Net) was not checked
correctly.
- Change/Bug: In RoutingEvent, the State::addAction() is now called only from
inside State or Manipulator (better encapsulation), and ensure correct
TrackSegment re-ordering after a ripup.
- Bug: In KatabaticEngine::_saveNet(), bad computation of the Layer of the
shrinked VIA remaining after a zero-length AutoSegment deletion.
The layer set connected to a zero-length AutoSegment is now handled
by a separate local function "isTopAndBottomConnected()".
The zero-length deletion is now progessive (re-check after each
deletion).
Don't forget to account for anchors on Contact.
_____________________________________________________________________________
* In All top level CMakeList :
- Adds a CMAKE_POLICY CMP0003 has we've upgraded to cmake 2.6.
* ./hurricane/src/hurricane :
- Bug: In Interval, the merge method wasn't working if the "other"
Interval was empty (doing merge) instead of nothing. This was
a non-symetrical behavior.
* ./hurricane/src/hviewer :
- New: In CellViewer, adds an accessor to the ControlerWidget widget.
- Bug: In CellViewer::imageDisplay(), when using GtkStyle the file
dialog seems to core dump if the directory is not specified.
Now systematically starts with the current working directory.
* ./coriolis/src/crlcore :
- New: In RoutingGauge, add a convenience function getLayerDirection(const Layer*).
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- New: In RoutingEvent, new RoutingEvent event level managment. The level
is now always equal to zero, that is the initial ordering is never
changed. This the concept of "static ordering". The only exception
beeing that in some cases we want to re-schedule "immediately" a
RoutingEvent (to grab the previously freed space) in that case, we
temporarily sets the event level to one.
- Bug: In Manipulator::relax() when the original TrackSegment goes into
a non-already routed GCell set, disable the associated RoutingEvent
as we cannot delete it (referenced through pointer in the stack and
the history).
- New: In AutoContact, add restoreHConnexity() & restoreVConnexity() to
that can split an AutoContact if a disconnected configuration has
appeared (implementation in JunctionBox). That case was occuring
on the local part of newly created dogleg.
- Change: In RoutingEvent::State::manageMaximumRipup(), try to desalignate
the segment before doing anything else.
- Bug: In AutoHorizontal::makeDogLeg() & AutoVertical::makeDogLeg(),
when a *local* AutoSegment is splitted, both resulting fragments
remains locals.
- Change: In AutoContact, restoreVConnexity() & restoreHConnexity() where
"splitting" global AutoSegments to avoid creation of too strong
constraints and the "merge effect" (two independ AutoSegments
fusionning).
Now it can also maintain local AutoSegments separateds (on demand).
- New: In AutoContact, restoreConnexity() a front-end to the H/V functions
that ensure that the connexity is kept.
- Change: In LayerAssign, ::splitAutoContact is now using the
restoreXConnexity() functions instead of it's own local implementation.
- Change: In LoadGrByNet, _GCell_1G_xL1() in GLOBAL_VERTICAL_END case the
global vertical AutoSegment is now put at the "center" of all horizontal
connecting to terminals instead of the "west", with all terminals
chaineds together on the "east".
- New: In AutoSegment, new way of making dog leg in local AutoSegments,
taking in account aligneds and an Interval from which to move out.
- Change: In TrackSegment, common post-treatment after a dog leg creation
has been moved into a "_postDogLeg()" method. Creates new TrackSegments
and update GCell ownership.
- Change: In RoutingEvent, the Manipulator::relax() method now uses the
new dogleg creation for local TrackSegments.
- Change: In RoutingEvent, Manipulator::insertInTrack() when riping up
"others perpandicular" for shrinkage, check if their intrinsic
priority is superior to the one of the to be inserted segment so
they are to be re-inserted before it. If not, temporarily increase
their event level.
- Bug: In Track, the getIBound() method was not finding the right lower
bound index. The criterion is not only the beginning position, but
also the first of segment of an overlapping set of the same net.
- New: In AutoSegment::JunctionBox(), complete re-implementation of
the former LayerAssign::splitAutoContact(). Put into the right place
(that is JunctionBox) and full reimplenent as the JunctionBox::split()
method. Comes with a thorough documentation.
Along with some adjutments in H/V alignate, seems to solve all remaining
bugs that where showing in the shifter.
- Bug: In JunctionBox::canVDesalignate() & canHDesalignate() we cannot
desalignate H/V contact, even if they have a global stem in the right
direction if they have more than 2 segments in the perpandicular
direction to the desalignment (makes a "four side box").
_____________________________________________________________________________
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- *VERY IMPORTANT MILESTONE*: this version is correctly routing the three
first routing benches: addacu, amd2901 & shifter. There still are
non-deterministic effects sometimes leading to failure.
The main configuration parameters are:
- Knik Edge Capacity Percent: 65%
- Kite Saturate Ratio: 75%
- Kite Expand Ratio: 70%
- Kite Ripup Cost: 3
- Kite Ripup Limits: 10 / 10
- Change: In GCellConfiguration::_GCell_1G_xL1, in vertical cases, no
longer forces horizontal alignment on the horizontal terminal wires.
- Bug: In RoutingEvent, State::manageMaximumRipup(), the event was not
reschecheduled if the first desalignate was successful.
- Change: Implementation of the "go outside GCell" mechanism. Allowed
for local only for now (still respect the global routing).
Currently it will lead to innacuracy in GCell's density.
- Bug: In NetConstraints::propagateConstraints(), do not propagate
restriction on target AutoContact that are *not* alignated in the
propagating direction.
- Bug: In NetConstraints::propagateConstraints(), apply the constraints
on source AutoContact if it's alignated in the propagation direction.
- New: In AutoSegment/TrackSegment adds a new flag "allowOutsideGCell"
allowing the Segment to go outside it's constraint box, thus preventing
AutoSegment::toConstraintAxis() displacing a segment and creating
incoherencies at Kite level.
- Bug: In AutoHorizontal/AutoVertical <>::slacken(), forgot to restore
connexity of the AutoContact from which the Segment is slackened.
- Change: In AutoSegment::desalignate(), desalignate all Contacts not only
the "inners" ones (thoses who are both source & target).
- Bug: In RoutingEvent, the _hasAxisHint was not set up when an axis hint
was positionned, disabling the uses of the hint.
- Change: In Katabatic::Session, the canonization and Contact splitting
is now integrated inside the Session and should be managed much more
transparently. A new "intermediary" Session function has been added:
Session::revalidateTopology() when canonization/splitting is needed
before/without doing a full revalidate (mostly for Kite Session
aware functions wrapped around AutoSegment manipulation methods).
There is potential for optimization here, and maybe some tricky
bugs still lurking around.
- Bug: In AutoContact::JunctionBox::split(), must transmit H/V alignement
constraint from the original Contact to the "secondary" (newly created
split part).
- Bug: In RoutingEvent::revalidate(), when trying to go outside GCell we
should compensate for the _topLeftShrink of the GCell otherwise we
will never expand to the "right". In fact it's the constraints which
is actually shrinked, not the GCell (for a later investigation).
- Bug: In KiteEngine::_link(), rejecting NULL TrackSegment registration
attempts. Display a Bug message.
- Change: In AutoSegment::getCanonical(), as supporting AutoContact could
go outside their GCell, we can have "inversion" of position on
global AutoSegment. Now check for min/max inversion.
- Change: In Manipulator::makeDogLeg(Interval), activate the axis hint not
only on the dogleg but also on the parallel one (stick close to the
original axis).
- Bug: In AutoHorizontal/AutoVertical::makeDogLeg() activate the split
on the source/target restoreUConnexity() to avoid bad canonization.
- Change: In TrackSegment::makeDogLeg() now calls _postDogLeg() to have
an uniform behavior.
- Bug: In TrackSegment::_postDogLeg(), propagate the slacken flag to
the created TrackSegment. To avoid loops of slacken/dogleg/slacken.
- New: In AutoHorizontal, adds a new local function "slacken(AutoContact*)"
for slackening Segments anchoreds on VIA12, that is METAL1 terminals.
In that case separate completly the AutoContact instead of just making
a dogleg. No needs to implement it's AutoVertical conterpart as METAL3
Segment are never anchoreds on VIA12.
- Change: In RoutingEvent::getAxisWeight(), always uses the axis hint when
the weights are equals. Make the segment stick close to it's initial
position.
- Change: In Manipulator::insertInTrack(), if the insertion is successful
move the Segment on the target track (but do not insert it).
May be very *DANGEROUS*. Have to check if it's compatible with the
algorithm general assumption. For now, now error can be seen which is
a good hint that it's compatible.
- Change: In AutoSegment::canGoOutsideGCell(), be much less restrictive,
allow all local to go outside. Still strictly comply with the global
routing.
- Bug/Change: In Manipulator::relax(), the target dogleg point was not
correctly found (or not found at all). Also change of policy: break
at closest point enclosing the conflict interval instead of in the
GCell of the lowest density.
The source dogleg point was also faulty.
- Bug: In AutoSegment::canGoOutsideGCell(), do not allow terminal segment
to go outside their GCell, they may disconnect from their terminals.
- Bug: In Manipulator::goOutsideGCell(), do not return true if the event
has already been flagged as "can go outside GCell". Return "true"
only when the states changes: it's truly a topological modification.
- Change: In State::manageMaximumRipup(), replace the linear exploration
of track [min:max] by a spiral exploration starting with the current
position of the segment.
- Bug: In Manipulator::shrinkToTrack(), bounding perpandiculars segments
where systematically pushed to the left. Now they are attracted by
the center of the minimal span interval.
- Bug: In Manipulator::relax(Interval), when setting the axis of the newly
created perpandicular segment (the dogleg), if the dogleg is on the
source/target GCell don't go outside of the Segment extension.
When the breaking GCell is not an extremity, the axis is forced
to the more suited side of the GCell.
This bug was causing overlaps.
- Change: In Manipulator::relax(), complete rewrite of the loop detecting
the conflict area, due to too many bugs found in the older one.
- Bug: In JunctionBox::split(), call splitTerminal() on anchored contacts
only if the layer span is greater than 1 (more than 2 layers).
Otherwise: infinite loop...
- Bug/Change: In RoutingEvent::_processNegociate() & State::doActions(),
separate the perpandicular ripup state so we can check if it has been
successful. If not, do not try to insert the segment, go straight to
maximum ripup instead. As a consequence, State::doActions() should be
made usable more than once (implement a flushing procedure).
- Bug/Change: In TrackSegment::makeDogLeg() / Manipulator::relax(Interval),
As we no longer expand the Interval in relax() of "one track on each
side" (5 lambdas), we have to do it in TrackSegment::makeDogLeg() so
the dogleg have a suitable starting position. The Algorithm is very
sensible about that initial position.
- Bug: In TrackSegment::makeDogLeg(), when making a double dogleg force
track insertion of the new parallel segment. As the two ends are the
remains of the original segment they must be inserteds.
- Change: In TrackSegment, new mechanism allowing one dog leg by RoutingSet
on global segment. This theoretically allow one dog leg on each density
borderline between two area of differing densities.
_____________________________________________________________________________
* ./coriolis/src/unicorn :
- Change: In CgtMain::main(), adds a new options to specify the Global
router edge dnsity percentage (65% per default).
- Change: In CgtMain::main(), when running in text mode/single tool run,
return 0 if the tool was successful and 1 otherwise (abide by the
standard shell return code).
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- Bug: In the various "canDogLeg()" methods, return false when applied to
a Fixed Segment.
- Bug: In the various Manipulator segment changing methods, always reject
fixed segments.
- Bug: As a double security, also disable ripping of fixed segments in
SegmentAction::doAction().
- Bug: In AutoContact::getNativeConstraintBox(), when the AutoContact was
fixed, we were returning box from the center of the current position.
This is completly wrong (don't event remember why do that). Now,
perform a full computation if it's anchored or the GCell bounding box
otherwise.
- Bug: In TrackSegment::canDogLegAt(GCell*), compare with the right source/
target GCell. Do not uses the AutoSegment base as if there are more than
one collapsed the source/target won't be correct and allow dogleg where
there shouldn't.
- Bug: In TrackSegment::slacken(), more selective triggering of the "slackened"
flag. Only raising it on segments newly created, not all invalidateds.
- Bug: In AutoSegment::slacken(), in propagate mode, must gather the collapseds
before any slackening happens because it breaks alignments.
- Bug: In JunctionBox::canGoOutside(), return false when the contact *is*
anchored. Not the other way around. Was causing severe restriction.
- Bug: In AutoHorizontal/AutoVertical::makeDogLeg(), when breaking a terminal
segment the "terminal" flag was not correctly migrated to either source or
target segment.
- Change: In State::manageMaximumRipup(), when reaching a Reset Ripup Count
of 5, no longer search for a conflict but try to move up the segment.
- Bug: In Manipulator::relax(), and once again! In the "two dogleg" case,
the attraction and axis of the doglegs where inverteds, making it hard
to solve for the router.
- Bug: In Manipulator::relax(), grrr. When the dogleg count is zero, return
false, and *not* true. This was causing overlaps to appears.
- Bug: In JunctionBox::restoreVConnexity() / restoreHConnexity(), if there is
only one global in the to be restored direction, do nothing (instead of
forcing perpandicular alignment). Example: for restoreVConnexity(), if
there is only one global vertical, do nothing instead of forcing horizontal
alignment.
This was causing overlap and incoherency in the TrackSegment LUT by
fusionning two TrackSegment on one Segment.
- Change: Big rework of the GCellRoutingSet expand mechanism to avoid creating
artificial break in area of same density. Work now partly "globally" and
partly "by layer" density comparison.
The size & number of the GCellRoutingSets have a great influence on the
runtime (x3) and size (x1.5). So there should be further analysis.
I noted a strange effect with the floatDifference() function. When it's
used directly in a return instruction, the behavior is wrong. I must pass
by an intermediate int variable to get a correct result (?).
- Change: In Manipulator::relax(Interval), adjustments in the policy finding
the minimal & maximal GCell containing the dog leg point.
1. - Pushing the break points as far as possible, gives worst result.
2. - We just displace of one GCell if the break point is exactly on the
GCell side (to avoid the "unplaceable dogleg" problem).
- Change: In GCellRoutingSet::expand(), agglomerate a ring of cells around
the routing set, regardless of their density.
- Change: In Manipulator::minimize(), the computation of the segment minimal
size was faulty. Now treat correctly case where the segment could be
punctual.
- Change: In TrackSegment::makeDogLeg() various flavors, instead of "going up"
for the dogleg metal "go down", except for METAL2.
- In TrackSegment::canDogLegAt(GCell*), adds one more verification: that the
requested dogleg GCell is inside the span for that segment. As perpandiculars
segments are allowed to go outside their Cell range, one segment can also
grow outside and so be requested to be broken at that point. Now we forbid
this. One effect was allowing multiple breaks in at source/target points.
- Change: In TrackSegment::_postDogLeg(), systematically allow dogleg segments
to go outside the GCell.
- Change: In KiteEngine, adds a "ToolSuccess" flag that return true on tool
successfullness.
- Change: To attenuate the GCellRoutingSet border effect change the aggregation
method to a fixed delta threshold of 0.2.
IMPORTANT: Increasing the thresold increase the area of a GCellRoutingSet
which in turn increase the number of TrackSegments to handle at a time.
And due to the fact that they are put in a continuously sorted vector, this
induce a noticeable slowdown. Have to switch to a set<>.
- Bug/Change: Disable the "go outside GCell" mechanism. It was not done according
to the data-base coherency rules and was generating random overlaps.
Nevertheless, this possibility was clearly a factor of convergence, so
it will be reimplemented, but this time the AutoContacts/AutoSegments will
be changed of GCells to keep the coherency (but much complicated :-(( ).
_____________________________________________________________________________
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- Change: In RoutingEvent/RoutingEventQueue, replace the vector based event
queue by a set based event queue. This implies that the sorting keys do
not changes during set operations. To ensure that, we create a cached
key inside the RoutingEvent which is modified only when the RoutingEvent
is outside the set. Another point is that as key can be equal for different
events, as a last resort we uses pointer comparison.
Note: In the GNU STL implementation of the set<>, if a key already
exits when inserting, the element is *not* inserted. The previous one
remains in the set.
This set<> based implementation leads to a 41% time reduction.
- Change: In KiteEngine, more explicit API to set/access the various ripup
limits (global & local).
Note: ripup limits greater than 10 do not seems to affect the quality
of the resulting solution (nor the runtime either). Settings differents
limits has no visible effect either.
_____________________________________________________________________________
* ./hurricane/src/hurricane :
- New: In DbU, create a "onCustomGrid(point,step,round)" method to place
a point on an arbitrary grid. That different from the real or symbolic
ones.
- Bug: In DbU, all the snap function where bugged when passed negatives
coordinates.
- New: In DbU, new conversion function, DbU::getPhysical() to translate into
physical (metric) system.
- New: In CellWidget, separate the "Snap Grid" (real or symbolic) from the
cursor position. The cursor position will now be displayed in half-lambda
(symbolic mode) or founder grid unit (real mode).
That can be changed trough the CellWidget::setCursorStep(DbU::Unit)
method.
- New: In CellViewer/ControllerWidget, the CTRL+I keys toggle the visibility
of the Controller instead of systematically showing it.
- Bug: In DbU, do not multiply by _physicalPerGrid in getGrid(), was causing
all coordinates to appear as zero...
- Change: In CellWidget & Command, rewrite of the active command mechanism.
Now a command is associated to one CellWidget exactly, the active flag
was shared among all CellWidget which was an error (do not show unless
we start to multithread).
- Bug: Correct event passing through all registered commands.
- New: In SelectCommand/SelectionPopup/SelectionPopupModel now there are three
selection mode:
Mode 0: Select all Component under point.
Mode 1: Select whole nets whose at least one component is under point.
Mode 2: Same as 1, but hide all cluttering "*nymous*" nets.
Rotation through the mode is done by pressing repeadedly the 'N' key.
The various select modes are implemented through "sub" Collections.
- New: In Occurrence, new method getBoundingBox(const BasicLayer*). Returns
a different value from getBoundingBox() only if the Entity is a Component.
Long awaited by the Solstice extractor.
- Change: In ExtensionSlice, keep track of the created ExtensionSlice by name
to avoid consuming a new bit each time an ExtensionGo slice is deallocated/
re-allocated (happens often in Solstice/Equinox).
- Backtrack: In SelectCommand, do not uses boost::regex as their library have
not been compiled for 32 bits support under OSX Snow Leopard.
- Bug: In Command.h, include and uses std::string has in some rare case no one
has done it before.
- Change: In RulerCommand, allow the ruler to be on the cursor grid, not the
snap grid (usesul for the real mode where the snap grid is much bigger
than the cursor grid).
* ./coriolis/src/knik :
- Bug: In SaveSolution, forgotten close() on file stream resulting in truncated
".kgr" file, whose in turn makes the final router to fail (incomplete rings).
- Change: In Graph, augment the FLUTE_LIMIT to 1000 to fit the new Flute
capabilities.
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- New: Ability to change an AutoSegment/TrackSegment of GCell, that is
changing the global routing.
- Bug: In RoutingEventQueue::repushInvalidateds(), we where always pushing
the element of index "1" instead of index "i", this bug was very gross,
yet not showing until late.
- Change: In RoutingEvent, slight modification in the priority computation.
Honor the (L+1)*(H+1) heuristic. The H is the static span, not evolving
while tracks are useds.
- Change: In Manipulator::minimize(), if the hole is bigger (on one bound)
than the span, restrict to the span.
- Bug: In State::manageMaximumRipup(), the successfulness of "minimize()" was
ignored, thus making the next topological modification anyway.
- Change/Bug: In Track::getOverlapCost(), do not account terminal markers from
the same net.
- Bug: In Track::getOverlapCost(), compute the markers cost, even if the
insert interval is *after* the last inserted TrackSegment of the Track.
- Change: In RoutingEvent::process(), the mode is no longer a global state
supplied by the NegociateWindow but instead a member of each RoutingEvent.
(the mode).
Must distinguish between two packing modes, packing during negociation
and packing as post process. The difference being that if the packing
fail during negociation, the event is rescheduled.
- Bug: In Manipulator::shrinkToTrack(), miscalculation of the mimimun span
interval of the segment (shrunkFree). We were using the perpandicular
constraints instead of the parallels!
Need to introduce a new method AutoSegment::getMinSpanU() to compute
the minimum span.
- Bug: In Manipulator::relax(), not only sets the dogleg segment axis, but
also the associated event axis hint. This is because the hint is
initialised from the axis of the dogleg before it has been put in
proper position.
- Change: In TrackCost::consolidate(), if no hard overlap, substract the
"same net sharing" cost from the delta cost to promote more segment
sharing.
- Change: In RoutingEvent::getAxisWeight(), disable the left/right weight,
uses only the axis hint.
- Cleanup: In RoutingEvent, removing deprecated "Go Outside GCell" and
"Insert State" features.
- Change: In TrackCost::operator<(), make the ripup count criterion superior
to the hard/soft overlap criterion. Infinite still the more prioritary.
- Bug: In Manipulator::insertInTrack(), the axis hints for shrink right
and shrink left were inverted.
- Change: In RoutingEvent::_processNegociate(), revert to the simple
policy of only trying to insert in the best candidate Track.
- Change: In NegociateWindow::_negociate(), disable the post packing
stage. No more needed now as the routing quality as increased.
- Change: In TrackSegment & RoutingEvent, adds a "isSlackenDogLeg"
accessor tell if the TrackSegment is one created for slackening.
That is, the perpandicular part of the dogleg. It's true when
the slacken flag is true and the dogleg level greater than zero.
Being a slacken dog leg will prevent the axis hint to change. The
dogleg must stay close to it's initial position.
- Change: In RoutingEvent/Manipulator::makeDogLeg(Interval), when
making a dogleg on a terminal connected TrackSegment, for the
dogleg to stay on the Terminal AutoContact. This a way of "Escaping
constraints as soon as possible". Uses the "forceToHint" flag.
This is somewhat redundant with the previous change. Should have to
rethink thoses two as a whole.
- Bug: In TrackSegment::swapTrack(), not only swap Tracks but also
Events, if any. The consequence was to render unroutable some of
the exchanged TrackSegment: they were lacking an associated event.
- Bug: In AutoSegment::canMoveUp(), allow global segment to be moved
up regardless of the source/target AutoContact topologies.
- New: In RoutingEvent/GraphicKiteEngine, add support for a callback
to call periodically to in order to implement weak multi-threading.
Used to allow progressive refresh of the CellWidget and router
interrupt through CTRL+C.
- Change: In TrackSegment, prevent move up of local Segment that are
part of a dogleg. Moving up local dogleg could lead to infinite/
recursive breaking.
- Change: In Manipulator::relax(Interval), do not relax if the Interval
contains a terminal (segment is M2 and contains M1 terminal).
- Change: In RoutingEvent, adds a counter of proccesseds events.
- New: In TrackSegment/AutoSegment add a new "canPivotUp()" method,
slightly different from "canMoveUp()". The difference being that
"pivoting up" do not need the creation of any intermediary segment.
For example a M2 connected to M3's can pivot up to M4. But a M3
connected to M2's cannot pivot up to M4 (needs to create intermediary
M3).
- Change: In AutoContact, SegmentEnd sort the global & local ends with
SegmentCanonical() in order to restoreHConnexity() to separate the
segments in the same order and stay deterministic.
- New: In AutoSegment, to finally solve the determinism problem add an
unique index (the "Id") to all AutoSegment. Makes all sort functor
to uses it as a last resort criterion.
AutoSegment are created in deterministic order from the global
routing :
1. - Sort Nets by name.
2. - For each name, find the lowest index GCell containing a
starting stem.
3. - From the starting stem, explore all the Net's GCell. GCells
are stacked in the fork list in order EAST, WEST, NORTH, SOUTH.
4. - Each GCell is build deterministically.
In TrackSegment, CompareByPosition now uses Id instead of net name
for fastest access.
- Change: Switch from "floatRound()" & "ceil()" to "rintf()" to perform
rounding. The rounding was having problems (that I don't clearly
understand before).
- Change: In LoadGrByNet::singleGCell(), ensure that there is exactly two
RoutingPad in the GCell.
_____________________________________________________________________________
* ./hurricane/src/hviewer :
- Change: In RulerCommand, key & mouse now mimic Cadence behavior.
_____________________________________________________________________________
* IT IS FUCKING WORKING! At least on a MIPS pipeline at 55% density.
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- Change: In RoutingEvent, fusion of Manipulator::modifyTopology() and
State::manageMaximumRipup() into one State::slackenTopology().
Replace the resetRipupCount (stored in the TrackSegment) by a succession
of defined states (stored in DataNegociate), each state associated
to an increased step of slackening. State changes occurs when the
maximum ripup count is reached for a TrackSegment.
Global & Local TrackSegments have a sligthly differend way of
slackening, showing in the succession of states.
States for local segments :
a. - Desalignate
b. - Minimize
c. - DogLeg
d. - Slacken
e. - ConflictSolve2
f. - MoveUp
g. - MaximumSlack
h. - Unimplemented
States for global segments :
a. - Desalignate
b. - Slacken
c. - ConflictSolve1
d. - MoveUp
e. - MaximumSlack
f. - Unimplemented
The state is the *next* slackening state. To not pass directly from
"MoveUp" to "Unimplemented", which would stop the exploration, there
is an intermediate state "MaximumSlack".
If a sate "transition" fails, calls the "ripupPerpandiculars" manipulator
(until the Unimplemeted stage is reached). That calls seems to induce a
neat slowdow. Has to investigate more thorougly.
- Change: In all files, start to remove printing of the base() segment
pointer, the Id is now sufficent to serve as marker through the log/
debug files.
- Bug: In Manipulator::relax(Interval), when there is 2 dogleg to make,
do not create a Session::insertEvent if the original framgment of
the first dogleg is outside the active GCell routing set.
That was causing TrackSegment to be routed/inserted too early.
- Change: In GCellConfiguration::construct(), globals segments that happens
to be diretcly anchoreds on terminal contacts are now flagged as
terminals. In other words a TrackSegment can be *both* Global and
Terminal.
Has to modify various TrackSegment slackening methods to take this
change into account.
- Change/Bug: In JunctionBox::split(), when separating from a Terminal
AutoContact, we must update the Z Span to withdraw the layer of that
Terminal. To simplify, we make a recursive call on the detached
AutoContact.
- Bug: In AutoHorizontal/AutoVertical::slacken() method, correctly slacken
from Terminals that are *not* in METAL1 (side effect of the Global+
Terminal change).
- New: Ability to stop the router after a given number of event. Useful
to automatically stop when there is an undetected loop.
- Bug: In AutoSegment::canPivotUp(), bad depth computation allowing non-
pivotable segments to go up. This was causing event loops.
- Change: In RoutingEvent, remove support for left/right axis weight.
The axis hint method is definitely giving better results.
- Change: In DataNegociate/TrackSegmentCost, remove the resetRipupCount
support, now more clearly handled through the DataNegociate
SlackState (there's a loose matching between the SlackState enum
values and the resetRipupCount).
- Change/Bug: In RoutingEvent::revalidate, always re-compute pure constraints
from the TrackSegment (no noticeable slowdown).
When reverting to pure constraints, still took into account the
perpandiculars constraints from TrackSegments of previous order,
as they cannot be modified (riped up). This was causing overlaps
when occuring in conjunstion with the "boundary problem".
Disable the ripup of perpandiculars in this function if the
constraint interval is too narrow. Instead make that functionality
a Manipulator by itself: Manipulator::ripupPerpandiculars() then
call it each time a slackenTopology transition fails.
- New: In GCellRoutingSet/GCell, finally introduce a "border" capacity
to solve the problem of the "left/right neighbor terminal unreachability".
- New: In GCellRoutingSet::expand() adds a de-notching step to avoid almost
enclosed GCell of lower order or thin strip of lower order GCell between
higher order. Always the same "border smothing problem".
- New: In Track, add the ability to ignore TrackSegment with an order greater
or equal to the Session when finding free space. Used in conjunction with
the "ignorePerpandiculars" mechanism.
- Change/Bug: In RoutingEvent, new implementation of the "ignore perpandicular
constraints" mechanism. New Manipulator::ripupOnPerpandiculars() which
ripup TrackSegments from other Nets that are overlaping with the
perpandiculars from the current Net that are still in Track (which is to
say that they are from a lower order an must not be ripped off).
- Change: In RoutingEvent/DataNegociate, allow more than one "SolveConflict1"
state occur on a same TrackSegment. Currently we allow 2 of these.
Need to introduce a "same state" counter in DataNegociate, accessible
through getStateCount().
- Change: In RoutingEvent/TrackCost, when computing costs of a global
TrackSegment, avoid candidate Tracks that contains local TrackSegment in
state LocalVsGlobals.
- Bug: In AutoHorizontal/AutoVertical/::slacken(), coordinate inversion when
calling restoreVConnexity/restoreHConnexity. It was corrected later by
the toConstraintsAxis, but the initial position was non-optimal which was
in turn leading the algorithm into dead-ends.
- Change: In Manipulator::relax(Interval), when relaxing a TrackSegment from
a more prioritary order, "expand" the relaxing interval as much as possible.
(put the break point nearest to the order borderline).
For TrackSegment of current (or greater) order, still do a minimal
break.
Overriden by the full rewrite (see below).
- Change: In TrackCost::operator<(), the hard overlap cost now takes precedence
over the ripup count, avoid uneeded hard overlap ripup.
- Change: In Manipulator::relax(Interval), once again a full and clean rewrite
to manage all the new cases. Expansion policy changed, the the break part
is extended to enclose as much as possible of the segment while staying
*exactly* in the same order. Then choose the breaking GCell at the lowest
density point.
Allowing to create the break point in higher (less saturated) orders may
lead to pseudo-unsolvable cases. That is when the parpandiculars are all
routed and cannot be removed for two adjancent doglegs of different Nets.
Solved later by the introduction of Manipulator::ripple().
- Change: In Manipulator::insertInTrack(), when ripping up perpandicular of
conflicting parallels (i.e. "segment3") remove only those whose constraints
intersect the conflict zone.
- Change: In State::slackenTopology(), now uses explictly named flags instead
of booleans to configure the method. Add a new mode in which failure to
modify do not cause a state transition. Needed by conflictSolve1 in case
of failure.
- New: In Manipulator::moveUp(), when a moveUp takes place force the ripup of
all local in the former layer occupied by the segment. This ensure that
the locals will make uses of the freed space (packing).
- New: In AutoContact, as for the AutoSegment, introduce Ids. Needed for a very
tricky debug.
- Change: In RoutingEvent/State/Manipulator, unification & simplification of
the various ripup perpandiculars methods. Suppression of the "ignore
perpandicular".
- Change: In Manipulator::insertInTrack(), new specific managment for the
intrication problem. Intrication occurs when two segment are cross
blocking themselves because there is only two perpandiculars free tracks
left and we must swap those perpandiculars.
Enhanced Manipulator::shrinkToTrack to take account thoses new cases.
- Bug/Change: In GCell, getDensity()/hasFreeTrack() where not correctly
computed leading to systematic allowance of "canMoveUp" and therefore
saturation of the higher routing levels.
Add support for extra penalty in density computation when a segment
ends into a GCell instead of going through it (a way of taking fragmen-
tation into account).
- Change: In RoutingEvent, in State constructor, introduce a limit on the
number of tracks than can be locked by local segment, blocking uses
by global segment (and forcing them to go up). There is a limit for
each layer, decreasing as we go up (the higher we are, the likely we
wants globals segment to uses the tracks).
- Change: In LoadGrByNet, systematically uses _GCell_rp_Access() to create
AutoContacts attacheds to RoutingPad as it automtically create the
appropriate fixed AutoSegment protection. This will be somewhat
redundant with obstacle managment in the future.
Makes all utilitarian methods of GCellConfiguration static, to use
in SingleGCell.
- Change: In GCell, increase the border width to 2 pitches to be coherent
with the Manipulator::relax breaking theshold (2 pitches also).
- New: In RoutingEvent/TrackSegment, Manipulator::ripple() specific manipulator
to solve the problem of H/V constraints on dogleg of which perpandiculars
are from lower order (cannot be ripped up) wich prevent the normal
"ripupPerpandicular" mechanism to be effective.
This manipulator ripup all parallels to the currently processed
TrackSegment with axis hints shifted to left or right, this should free
at least one track if it's possible at all.
This mechanic is very crude and should be replaced later with something
truly manganging the H/V graph constraint.
- Bug: In Track::expandUsedInterval(), try to expand until we changes of Net's
owner. If we stop at the first hole, we may discard a longer segment
encompassing the hole between two smaller ones.
This was affecting the Track::getOverlapCost() method and generating
overlaps.
- Change: In TrackSegment/AutoSegment, displace the "slackened" flag from
TrackSegment into AutoSegment. This will allow a more fine tuning of
the attribute. Previously, all invalidated AutoSegment after a slacken
transformation where marked as slackened which is a bit too much.
This lack of selectiveness was causing slackening to fail in some
cases.
- Change: In AutoHorizontal/AutoVertical::_makeDogLeg(), dogleg segment are
marked as slackened.
- Change: In AutoSegment::AutoSegment(), automatically setup the "Terminal"
flag when creating the AutoSegment. Based on the "Terminal" flag of the
AutoContact.
- Change: In RoutingEvent/State::conflictSolve1(), rewrite of the procedure
to allow full sweep of the candidates track then examination of the
best candidates. Currently manage up to two other TrackSegment/Net
overlap, that is, only one breakpoint. May be more if needed.
- Change: In TrackSegment::moveUp(), if a TrackSegment is moved up reset
it's state so it can be broken through conflictSolve1 again.
- Change: In NegociateWindow::NeogociateOverlapCost(), change in the overlap
calculation. If the obstacle fully enclose the insert interval, count
the *whole* length of the obstacle. If it only intersect, count only
the overlaping length. This allow to discriminate between long
overlaping TrackSegment (generally global) and choose the shortest one.
- Change: In RoutingEvent::processNegociate(), when a segment can no longer
be ripped up, still check if there is a fully free track were it can be
inserted before trying to slacken it.
- Change: In RoutingEvent/TrackSegmentCost, the ripup count is an inapropriate
name/conception. In fact we do not count the ripups but the number of times
we have tried to negociate a TrackSegment (calls of _processNegociate).
The "ripup count" thus is a measurement of how hard it is to insert a
TrackSegment (more accurate as it leads to better results). It must be
the times we call _processNegociate and not *only* when we actually have
to negociate (that is, there's not a free space) for the "ripup count".
ripple mechanism to take effect. That is, when a track has been to much
ripped up, try another one, avoiding being trapped in local minimas.
- New: In AutoSegment/TrackSegment/RoutingEvent, add a new kind of Segment,
the "Strap" segment. Strap segment are small ones that cannot be broken
or moved. Have their own state machine in slackenTopology().
They have been introduced to prevent the "over-breaking" pathological
behavior, when the routers break small Segment, making more small Segment
and thus congesting event more the area.
- New: In AutoSegment/TrackSegment/PreProcess, adds a new step to compute
and propagate caging constraints to perpandicular Segment so they will
never try Tracks that could never be reached.
To handle extra/user constraints restriction on Segment, introduce
a "user constraint" in AutoSegment. It's a general purpose mechanism.
- Bug: In RoutingEvent::Key, when updating the key, also update the Segment
Id. It may change (not often though) when RoutingEvent are swapped in
a Track ownership swap (see TrackSegment::swap).
- Bug: In PreProcess::propagateCagedConstraints(), incomplete propagation on
perpandiculars (forgotten source or target contact) leading to dead-ends.
_____________________________________________________________________________
* ./hurricane/src/hurricane:
- In Common.h, disable floatCompare(), floatDifference() & floatRound() as
they triggers g++ warnings in optimized mode. Replace with roundfp().
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- In GCellRoutingSet::expand(), denotching step now uses a queue instead of
performing a simple loop on the already agglomerated GCells.
- Change: Uses roundf() instead of rintf() to truly do rounding toward the
nearest integer.
- Change: In Manipulator::moveUp(), disable the "ripup of locals before a
moveUp". On MIPS pipeline, leads to a drop from 92k events to 87k events,
with no impact on routage quality.
- Change: In Kite/Katabatic, configurable options are now put into separates
objects "Configuration". There is one Configuration in Katabatic and
another in Kite, and they follow the Decorator design pattern:
Kite::Configuration is a decoration of Katabatic::Configuration.
They can be both accesseds through the Session.
- Change: In LayerAssign/LoadGrByNet, suppress the __config local variable
by calls to Session::getRoutingLayer or Session::getContactLayer.
- Change/Bug: In AutoSegment/AutoHorizontal/AutoVertical, adds a recomputation
function for the "terminal" flag. The correct recomputation *after* a
topological modification (in Session::revalidate()) suppress lots of
annoying warning messages.
- Change/Bug: In Manipulator::relax(Interval), do not allow break in the
first GCell if it's the only one.
- New: Standalone text-only binary for kite. First step toward a full
static binary.
* ./coriolis/crlcore/src/cyclop,
./coriolis/crlcore/src/x2y,
./coriolis/src/unicorn,
./coriolis/src/ispd :
- Change: In CgtMain, command line parsing in now done with Boost.
The old COption built in crlcore will be removed and should no longer
be used.
_____________________________________________________________________________
* ./coriolis/src/crlcore :
- Bug: In Utilities, inversed condition for core-dumping.
- Bug: In technology.symbolic.xml, due to a typo BLOCKAGE weren't given the
correct extention cap, leading to overlaps in Kite.
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- New: Support for blockages. A Query is used to build trans-hierarchically
the blockages in all layers. We now need to insert heterogeneous objects
into a Track, so we create the base class <TrackElement> and two derived
<TrackSegment> and <TrackBlockage> (more to come). One drawback beeing
that we changes inlined function into virtual ones. The measurement show
no sign of slowdow.
A first problem to treat is the overlap between fixed segments, inserted
to protect access to M3 and blockages. For now, whenever such overlap
occurs we *delete* the AutoSegment instead of creating a TrackSegment
inserted into a Track. Less objects and no special overlap cases to
manage in the _check() functions.
- Bug: In _GCell_rp_AutoContacts(), when protecting M3 terminals, two
AutoSegments are createds, one in M3 which AutoContacts are useds to build
the topology and one M2 to protect the access when M3 is punctual.
Instead of hooking on the M3 we were hooking on the M2 protector which
was later removed because overlaping with a M2 blockage, causing core dumps
or hole in the topology...
- Change: Sessionned mechanism for AutoSegment/AutoContacts deletion. That is,
deletion occurs *only* after revalidation (used to track down the previous
bug).
- Change: In slackenTopology(), ripple if ripupPerpandiculars() fails, instead
of choosing between the two. Also if ripup perpandiculars is called while
no perpandicular is placed, schedules the perpandiculars at EventLevel2.
The overlap is in fact parallel on fixed segments.
- Change: In Manipulator::relax(), reject breakup when there's only one dogleg
and it's in the last GCell. Cut down 4k events on the MIPS pipeline with
no degradation of the routing completion.
- Change: In RoutingEvent::compare(), TrackSegment taggeds as "ripple" must be
routed first. "ripple" TrackSegment are dogleg created in GCells of lower
orders and the parallel part of the dogleg cannot be ripped up when the
GCell is finally reached. This can lead to overconstraints which are solved
by propagating a "ripple", but in order for the ripple to work, TrackSegments
subject of the rippling must be already inserted in Tracks, hence the new
ordering.
- Bug: In GCellRoutingSet::loadBorder(), do not add twice a border segment.
No bad effect otherwise a displeasing bug message.
- Change/Bug: Avoid core-dumping when the tool is still active at exit.
The Hurricane data-base is partly destroyed *before* the ToolEngine itself
is. So in that case we must not try to access decorated Contacts & Segments.
- Bug: In RoutingEvent, cloned RoutingEvent weren't accounted but it was not
showing because they were also forgotten to push into the history. Thoses
two bugs were combining to make an invisible memory leak.
Now we uses "create()", "clone()" & "destroy()" to manipulate allocates
or free RoutingEvents.
The lead to this problem was given by a side effect on "border" segments
who weren't routed due to a non-deleted RoutingEvent.
- Change: In RoutingEvent, remove the obsoleted "_refCount".
_____________________________________________________________________________
* ./hurricane/src/hviewer:
- Change: In CellWidget/Ruler, rulers are now unidirectionals (as in Cadence).
- New: In CellWidget, support for drawing components names. Includes correction
of badly computed coordinates in drawDisplayText.
Components names are drawed only for the top level of hierarchy and only
if the bounding box is large enought (currently hard-coded to 50x50 pixels).
- New: In Net, "Automatic" attributes to distinguish automatically generated
net names without string pattern matching. "Automatic" Net's names are not
drawn by the CellWidget to much cluttering the display. And testing a boolean
is way faster than a pattern matching on a hard-coded name.
- Change: In CellWidget, when loading a terminal Cell, draw it's internals.
* ./coriolis/src/crlcore:
- New: In ApParser, make uses of the new Net attribute "Automatic".
_____________________________________________________________________________
* ./hurricane/src/hurricane:
- New: In DbU, extend the StringMode/getValueString() to support the physical
unit in addition of lambda & foundry grid. "setStringMode()" has now a
second parameter "UnitPower", only used when the mode is DbU::Physical.
* ./hurricane/src/hviewer:
- New: In CellWidget, the fitToContents now adds a margin of 5% to get border
clear of the bounding box.
- New: In CellWidget, ability to display lengths in nanometers & micrometers
in complement of symbolic and foundry grid. DisplayFilterWidget modificated
accordingly. New members:
void setPhysicalMode ( DbU::UnitPower );
bool physicalMode () const;
DbU::UnitPower getUnitPower () const;
In addition to:
bool gridMode () const;
bool symbolicMode () const;
void setGridMode ();
void setSymbolicMode ();
_____________________________________________________________________________
* ./hurricane/src/hurricane:
- Bug: In DbU, "micro" symbol is "u", not "m".
- Change: In DbU, uses different precisions on differents units.
* ./hurricane/src/hviewer:
- Change: In CellWidget, when drawing a Ruler, display the current Unit
mode on first & last tick.
* ./hurricane/src/hurricane,
./hurricane/src/hviewer:
- Change: In DbU/CellWidget, some more small adjustments on the ruler.
_____________________________________________________________________________
* ./io/openChams:
- Typo: Newlines at end of file, case sensitiveness. Shows only under Linux,
not Mac OSX/Xcode.
* ./coriolis/src/knik:
- Bug: In saveSolution(), do not drives nets that have not been routed,
that is, POWER, GROUND and maybe CLOCK. The visible effect was an
extraneous gmetalh segment over all the power rails.
* ./coriolis/src/crlcore:
- Bug: In AllianceFramework constructor, the SxLib routing gauge was faulty.
The layers gauges in METAL4 & METAL5 where having the depth of the
METAL1...
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- Change: In Session, more simple coding of the static access functions,
allowing to put most of them inline.
- New: Support for power rails. A Query is used to build trans-hierarchically
the power rails in all layers. New <TrackFixedSegment> class derived from
<TrackElement>, the supporting Hurricane Segment can be shared between
any number of TrackFixedSegment and the deletion of the TrackFixedSegment
*do not* delete the Hurricane Segment.
_____________________________________________________________________________
* ./hurricane/src/hurricane:
- Bug: In DebugSession, bad stacking/unstacking of debug levels (unapaired),
and wrong value stacked sometimes.
* ./coriolis/src/knik:
- In Graph::createHEdge/createVEdge, compute a correct capacity according to
the SxLib gauge. This is an ambiguity with the getTrackNumber() when tracks
are exaclty on the interval bound they should be considered as "shared".
Needs a complete code inspection of Knik & Kite to choose a coherent
model for Track counting.
* ./coriolis/src/katabatic,
./coriolis/src/kite :
- Clean: In Katabatic::Configuration, move "saturate ratio" & "global threshold"
configuration parameters from KiteEngine to Configuration.
- Change: In KiteEngine, to be able to annotate the global graph (edge capacity)
Kite kinda "swallow" knik, that is, Knik is now to be run from the inside
of Kite.
This new organisation is needed by the taking into account of power rails
and obtacles wich can decrease significantly the edges capacities.
Remark: We no longer "grab" the Knik ToolEngine into cgt as we don't want
it to be run in stand-alone mode.
- Bug: In AutoContact, in JunctionBox::split(), when there is no horizontal or
vertical (AutoContact anchoreds on terminals) the position of the broke
point was not correct (sets to *zero*). The consequence was that the strap
segments where puts in a bad position: the bound of the constraint interval,
generating hard to solve configurations.
- Change: In RoutingEvent, migrate EventLevel 1 & 2 to 3 & 4. Uses new 1 & 2
levels to order TrackSegments coming from a dog leg topological modification.
When making dogleg, the parallel parts must be routed *before* the
perpandicular part. This assume that the axis of the perpandicular Segment
is put at the reasonnable position. Being routed *after* the broken parallels
ensure that it do not go in a bad position preventing the dogleg effectiveness.
- New: In GCell/TrackSegment, add the "stiffness" measurement. The stiffness is,
for each GCell, the ratio between placed TrackSegment (from hihgher orders)
and the total number of TrackSegments attacheds to that GCell.
Obvioulsy for routed GCell, that ratio must be equal to 1.0. But for
unrouted GCells, we can detect thoses who, although in lesser satured areas,
are becoming overconstrained due to a large number of placed TrackSegments.
- New: In GCell, ability to change the order after beeing incorporated into
a GCellRoutingSet. To allow pre-emptive routing of critically stiff GCells.
- Disable: All stiffness mechanism. The stiffness measurement is not significative
enought to control pre-emptive GCell routing.
- New: The "Ring" features. It's a mechanism similar to the "border" feature.
When new perpandiculars are createds and they are at the end of TrackSegment
in the process of routing they are added to the "Ring". As such, they will be
routed along with the order. A TrackSegment exits the "Ring" when it's
"native" order is reached. "Border" and "Ring" are mutually exclusives, with
priority to the "Ring".
The "Ring" feature intend to solve the problem of incompatibles constraints
in GCell less saturateds generated by GCells higly saturated.
- New: On METAL3 terminals, when connecting with horizontal Segments,
the horizontal must be in METAL4, not default METAL2.
- New: On border/ring segment, when a slackenTopology() is resquested on them,
do not apply it on them but on their perpandicular which is truly part of
the GCellRoutingSet.
- Bug: In RoutingEvent::State::slackenTopology(), infinite loop on ripup of
ring/border Segment. If thoses kind of Segments reaches their ripup limit,
they musn't be rescheduled in the events stack...
- Change: In RoutingEvent::State::localVsGlobal(), refine the way the global
to dislodge is selected. Choose the global with the less terminals *in the
GCell* and longuest otherwhise. New Track::getOverlapWeight() method.
- Change: In LoadGrByNet, manage 4G+2L1 with 4G+xL1 (first appearance in
eFPGA 4x4).
- Change: In Configuration, sets the merging threshold to 0.3 which allows to
successfully process eFPGA matrixes (4x4, 4x8, 8x8).
* All Hurricane/Coriolis tools:
- Change: Simplify the CMakeLists,
_____________________________________________________________________________
* ./hurricane/src/hviewer,
./coriolis/src/crlcore,
./coriolis/src/knik,
./coriolis/src/katabatic,
./coriolis/src/kite,
./coriolis/src/equinox,
./coriolis/src/solstice,
./coriolis/src/ispd:
- SVN MOVE: Source tree simplification & uniformisation. Now all tools
are at the same level, directly under the root of the repository.
No more "coriolis/src".
* All tools:
- Change: Adaptation to cmake 2.8. No more "add_subdirectory()" when
the sub directory doesn't hold a CMakeList.txt.
For "add_definition()", set policy 00005 to NEW.
- Change: Integrate IO extenal libraries.
- Change: Small compatibilities between "size_t" and "unsigned int"
under 64 bits.
- Change: Temporarily disable Equinox/Solstice in unicorn.
_____________________________________________________________________________
* ./crlcore:
- Change: In ApParser, do not stop the parser whenever an external
component is found on an internal Net. Instead, display a warning,
sets the Net external and continue.
_____________________________________________________________________________
* All Tools:
- Change: New structure for the installation & CMake system.
* Tools are now grouped in "projects". There are three projects:
1. - IO: Standalones parsers/drivers (IO_USER_TOP, IO_TOP).
2. - Coriolis: Base & digital tools (CORIOLIS_USER_TOP, CORIOLIS_TOP).
3. - Chams: Analogic tools (CHAMS_USER_TOP, CHAMS_TOP).
Each *project* has a two "TOP" environement variables, for
example: IO_TOP and IO_USER_TOP. Thoses variables are the only
ones useds to locate the tool (CMake modules, headers & libraries).
The local path always takes precedence over the global one.
The localisation process occurs in each tool top CMakeLists.txt
where the macro SETUP_PROJECT_PATH is to be defined. There is no
way to put it in a shared includes file as it's the macro precisely
used to locates the includes... You have to call the macro once for
each project you wants to uses:
SETUP_PROJECT_PATHS(IO)
SETUP_PROJECT_PATHS(CORIOLIS)
* In FindTOOL.cmake, supress the <TOOL>_DIR_SEARCH and uses the
<PROJECT>_DIR_SEARCH instead (example: CORIOLIS_DIR_SEARCH).
* buildCoriolis.py modificated according to the new "TOP" scheme.
* All Tools:
- Change: <PROJECT>_SEARCH_PATH are put back into the *first* tool of
a project.
- Bug: In HURRICANE_CHECK_MACRO(), the quiet flag was not correctly
implemented. User ARGV instead of argv (case sensitivity!).
_____________________________________________________________________________
* ./goodies :
- Change: In builCoriolis.py, expand the '~' in the root path if needed.
- Bug: Do not stop if the "--no-cache" option is given but the
CMakeCache doesn't exists.
_____________________________________________________________________________
* ./goodies:
- Bug: In buildCoriolis.py, io tool was both declared as belonging to io
and hurricane project. Removed from Hurricane.
- Bug: In buildCoriolis.py, exctract correctly the return status of a
command to return it to the parent process. See Python documentation
about os.wait() & os.waitpid().
* ./katabatic :
- Change: Uses a map instead of a sorted vector in the layer assignment
steps. It was used to order GCells by density, and causing terrific
slowdown on big examples. Namely the eFPGA 16x16 took 1h20, now it's
down to 21 seconds...
Devellop a new object <DyKeyQueue> to handle map with elements
whose key *can* change. Next step is to normalize the key caching
mechanism and to templatize.
- Change: In LayerAssign, account the number of globals AutoSegments
moved up.
* ./hurricane/src/viewer:
- Bug: In NetlistWidget/NetlistModel, suppress the "forceRowHeight()"
method which was terribly slowing down the table display. Instead
uses the "setDefaultSectionSize()" of the vertical header to setup
the row height (much more compact display).
- Bug: In NetlistModel, strangely, although we have a "data()" and a
"headerData()" method, the "data()" is also called for the headers
potentially erasing any previous setting done with "headerData()".
This was occuring for the fonts settings. Don't known if it is
a bug or a feature of Qt...
- Thoses changes has to be ported to the others widgets some times...
* ./hurricane/src/viewer:
- Change: In Cyclop, now uses the GtkStyle when not under OSX and Qt is
newer or equal to Qt 4.5.0.
- Change: In the various Qt Model Table, do the rowHeigh bug correction.
- Bug: In InspectorWidget/NetlistModel, when browsing through the records
tree, the records were generated twice at each slot change. This
was due to the History ComboBox sending a index change signal then
the InspectorWidget setting the slot *again*.
When trying to explore a Slot, but this Slot is empty (like an
empty vector, for instance) do not gut the RecordModel. Because
as we find out that the new Slot is empty we go back and restore
the previous contents. Potentially slow if we comes from a Slot
with lots of records. Now we dump the contents only if there is
something to explore.
* ./hurricane/src/hurricane:
- Bug: In Record, the slots where stored in a list container, which was
making indexed accesses very very slow. This slowdown was also
affecting the destructor of Record (this is the explanation why
the RecordWidget was slow, even when *leaving* the net IntrusiveSet).
Now implemented in term of STL vector.
- Bug: In Slot/Common, still some adjustements to make the Inspection
mechanism work with all types. Correct the "IntrusiveMap<>" not
working with the NetMap. Related to templates not using the same
constness.
- Change: In Entity/DBo/Cell, Some more adjustements on Slot/Records.
* ./kite:
- Cleanup: In GCell, remove the DyKeyQueue support as it's been moved
to Katabatic level.
- Change: In NegociateWidow, increase the event stop thresold to 4M events
to be able to process the eFPGA matrix 16x16 (150K gates).
_____________________________________________________________________________
* ./goodies:
- Bug: In buildCoriolis.py, when multiple projects where given on the command
line, only the latest was processed. Now all projects are processeds.
(in the order given on the command line so watch out!)
* ./hurricane/src/hurricane:
- New: In Query, add support for Markers, although they are Go's, are stored
in a separate QuadTree directly at Cell level. In a very similar fashion
to the ExtensionGos. Sometimes should look if thoses mecanism could be
unified.
* ./hurricane/src/viewer:
- New: In CellWidget, add support for displaying References. Uses the Marker
Query. For now labels are displayed centered on the reference point,
making that point hard to see. That behavior may be changed later if
needs to be.
- Bug: In InspectorWidget, the History::push() wasn't updating the ComboBox
index. The line was strangely commented out (?).
_____________________________________________________________________________
* ./goodies:
- Change: In buildCoriolis.py, now manage correctly any combination of
projects/tools/standalone tools. Standalones tools are always processeds
last.
* ./crlcore:
- Change: In ToolEngine, adds a static method "destroyAll()" that must be
called *before* the Hurricane database destruction. This is to avoid
a mis-oredering in destruction.
ToolEngines are stored in a property, property are part of the DBo
base object so are destroyed *after* the Cell derived object has been.
Thus ToolEngine are deleted *after* the Cell components and if they
still refers to it, we are doomed.
- Change: In display.xml, color support for displaying references.
* ./katabatic:
- New: In GCell & LayerAssign, adds a supplemental desaturation steps when
a GCell containts too many (more than 7) RoutingPads in M1. This is
especially useful for the eFPGA matrix with it's custom made cells.
* ./kite:
- Change: In TrackSegment, _postDogLeg() & _postModify(), add segments to
"Ring" if they are directly connected to a RoutingPad. To maintain the
"border effect" after a topological slackening.
- Change: In GraphicKiteEngine, in the global routing relateds menus, suppress
the mention of "solution" as it might be unclear for an average user.
(just "Save Global Routing" or "Load Global Routing").
- Change: In RoutingEvent, conflictSolve1() tries to move up "other" blocking
segment before trying to break "self".
- Bug: In TrackSegment::reschedule(), remove from Track segments that are
now in a greater order than the current one. This bug was shown in the
TrackSegment::_postModify() method after a desalignate.
It was causing overlaps and/or routing completion false reports.
* ./unicorn:
- Change: Uses the specific ToolEngine destroy, to avoid disgracious
core dumps in cases of early exits...
_____________________________________________________________________________
* ./hurricane:
- New: In Reference, adds a type to differentiate between "Labels" and
"Position". Labels are strings that we wants to display, and position
are specific points with a name attached to it.
- New: In CellWidget, specific display for the two kind of references
(Label & Display).
* ./crlcore:
- New: The Measure extension (on any DBo) that allows to save measurement
and print them later into a file. Mainly to supply gnuplot with datas.
Obsoletes the "statsExtract.py" script from statistics, and much
more reliable.
* ./katabatic:
- Bug: In GCell, bad cast between <size_t> and <unsigned int>, showed only
under 64 bits.
- New: In KatabaticEngine::printMeasures(), adds a support for measurments,
both time and memory size in Mb are stored for each tag.
- New: Adds measurements "Gates", "GCells", "load" & "assign".
* ./kite:
- Bug: In RoutingEvent::Manipulator::forceToTrack(), wrong return code,
was always return true, blocking the explorations of least good
Track.
- Bug: In RoutingEvent::_processNegociate(), must reset the "insert state"
while looping on candidate. This bug was having the same effect as
(and masking) the previous one!
- Bug: In TrackSegment::moveUp(), reset the ripup count after the move
up...
- Change: At various DebugSession opening points, sets the debug level to
200 to avoid extraneous debugging output.
- New: KiteEngine::dumpMeasures() to create a data file for later uses
by gnuplot. In interactive mode, this function is called in the
"finalize layout" stage.
- New: Adds measurments "algo", "fin" & "Segs".
* ./unicorn:
- New: Adds a call to dumpMeasures().
_____________________________________________________________________________
* ./crlcore:
- New: In AllianceFramework, getInstancesCount() to count the number of
instances in a Cell. The count can be recursive or not or ignore or
not feed cells. This could be viewed as a very simple query, and has
to be implemented here because we only new Feed Cell from the CATAL
of the Alliance Framework.
* ./knik:
- Bug: In MatrixVertex::getLineIndex() and getColumnIndex(), in regular
mode, when the Y/X coordinate is exactly on the upper right angle,
return the inferior index (instead of superior which is out of bounds).
- Change: In MatrixVertex, RoutingGrid & KnikEngine, replace the _lowerLeftX &
_lowerLeftY by a complete copy of the Cell's abutment box. Makes
easier for getLineIndex() to find out of bound coordinates.
- Change: In KnikEngine & LoadSolution add a time/memory measurement,
for Kite statistics.
* ./katabatic:
- Change: In Grid/BaseGrid, add an Abutment Box attribute (to facilitate
segment truncation in Kite::TrackFixedSegment.
- Change: In Grid/BaseGrid::Axis, when computing a row/column index using
the graduation table, if the coordinate is exactly on the last
graduation, return the last GCell instead of "out of bound".
- Change: In GCell::hasFreeTrack(), AutoSegment::canMoveUp() &
AutoSegment::canPivotUp() adds a "reserve" parameter to modify the
amount of wirelength to remains free after the insertion.
* ./kite:
- Change: In TrackFixedSegment, when the source/target coordinates of the
fixed segment are outside the grid (i.e. the Cell Abutment Box) truncate
them.
- Change: In GCell::addTrackSegment, when looking for overlap between the
to be inserted TrackSegment and Blockage segment, shrink the Blockage
span by one DbU to avoid false overlap when they are just edges connexes.
- Bug: In RoutingEvent::slackenTopology, in the local segment FSM, looping
on the MaximumSlack state. Now also checks the state count.
- Change: In TrackSegment::canMoveUp() & canPivotUp() adds the "reserve"
parameter and uses it in RoutingEvent to prevent over saturated GCells.
- Change: In Configuration, parameters adjustements: expandStep increased to
0.40. Makes RoutingSets biggers but no noticeable slow down.
* ./unicorn:
- New: In CgtMain, add supports for iteration limit.
_____________________________________________________________________________
* ./hurricane:
- Bug: In PaletteWidget, do not derive from QScrollArea. Instead uses it
as a child widget. This solves the refreshing problem of the Palette.
As a rule now: never derives from anything other than QWidget.
- New: GotoWidget, not having this feature finally unverved me enough for
beeing implemented. You can specify an (x,y) on which the view will
be centered and an aperture which gives the size of the view smallest
side. It's a way of specifying the zoom level (as the zoom is not
meaningful for users). An aperture of "zero" disable that feature,
that is, zoom remains unchanged. The coordinates are integer which
are implicitly expressed in the current mode used by the viewer
(Symbolic, Grid, or Physical in micro-meters).
- Change: Big rewrite of how the Symbolic/Grid/Physical modes are sets
to/from the CellWidget. Impacted widgets are CellWidget &
DisplayFilterWidget.
Main changes are that there is no more "individual" setter/getter for
modes (setSymbolic(), setGrid(), setPhysical(DbU::UnitPower)) but one
with two arguments:
setDbuMode(int mode,DbU::UnitPower)
Signals & slots of the widgets also evolves into:
dbuModeChanged(int mode,DbU::UnitPower)
changeDbuMode (int mode,DbU::UnitPower)
_____________________________________________________________________________
* Most of tools:
- Bug: In top CMakeLists.txt the SETUP_PROJECT_PATHS was not inserting
X_USER_TOP *before* X_TOP, thus potentially allowing an obsolete
system-wide configuration to shadow an up-to-date local one.
* ./goodies:
- New: In buildCoriolis.py, adds a "--rm-build" option which removes the
tool's build directory before building it. A very crude way to ensure
that nothing obsolete form a previous build will gets in the way...
* ./crlcore:
- New: In Utilities, The Dots class which allow nice pretty printing on
a terminal (like lines of books summaries).
* ./hurricane:
- Bug: In CellWidget, correct the slightly off position of Labels references.
- New: In ControllerWidget, new TabSettings tab to hold the configuration
settings of the various Coriolis tools. The TabSettings is a tab itself.
* ./katabatic:
- Change: In Configuration/KatabaticEngine, introduce a static Configuration
object (singleton) to handle the default configuration. Configuration are
now created only through cloning operations. In KatabaticEngine, the
_configuration becomes a pointer (previoulsy an value).
Confifuration becames a singleton and a decorator.
Also adds a print method to nicely display configurations values on
the terminal.
* ./kite:
- Change: In Configuration/KiteEngine, propagate changes in Configuration
in Kite. Note that a *second* singleton is created at Kite level.
- New: KiteEngine::printConfiguration() method to allow quick checks of
the router's main parameters.
- New: ConfigurationWidget to display/sets all the revelant Katabatic/
Kite configuration parameters. To be used with the TabSettings from
the ControllerWidget.
The ConfigurationWidget is bound to the default (static) Kite
configuration, as once it has been run you obviously cannot change the
router's settings.
* ./unicorn:
- New: "--show-conf" options to dump the current configuration.
_____________________________________________________________________________
* ./katabatic:
- Bug: In KatabaticEnginge::_desaturate() (part of LayerAssign), reset
the moved up Segment pointer between iterations. Suppress the warning
about the GCell's DyKeyQueue beeing not revalidated on deletion.
- Change: In LoadGrByNet, manage the 4G+3L1 configuration with the generic
_GCell_xG_xL1_xL3(). Needed for "dct_lvl2".
* ./kite:
- Change: In TrackCost, the ripup cost is now computed from a mix between
the number of ripup *and* the data state. Restore a correct balance
of the ripping up between segments.
- New: In RoutingEvent::State::conflictSolve1(), when a very long Segment
enters in conflictSolve1(), still prefers to move it up in one piece,
but if it's not possible, it is unlikely that it will overlap with
only one or two other Segment. In that cases, blindy break it up in
the middle.
- New: In RoutingEvent::Manipulator, another overload of makeDogLeg to
allow break up at one precise point.
- Change/Bug: In RoutingEvent::Manipulator::Relax(), reset the state of
the non-overlapping Segment fragments instead of inheriting blindly
of the state of the breaked up one. Gives some supplemental slack
that allows to converge.
- Note: Now the strategy is to disable the uses of GCellRoutingSet by
setting the expand step to 0.99. This induces only a slight slow
dow and memory increase and passes all the tests...
- Mark: This revision passes all the benches except for idct, vld &
ieee_division.
_____________________________________________________________________________
* ./hurricane:
- Bug: In Net.h, force expansion of SlotTemplate<Net*> with the line:
const SlotTemplate<Net*> dummyNetSlot ( string("dummyNetSlot"), NULL );
I've no satisfactory explanation, but in the cyclop Inspector the
Cell's NetMap is correctly created and in the cgt Inspector, Nets
entries of the NetMap appears as "unsupported", meaning that the
SlotTemplate<> has not been generated for Net. This correct the
problem.
* ./knik:
- Change: In KnikEngine::initGlobalRouting(), increase the maximal degree
of net to be routed (1000 -> 13000). This to allow the clock to be
routed of the "vld" circuit.
* ./katabatic:
- Change: In KatabaticEngine, the containers used to store the "nets to
route" is changed from a vector<> to a set<> sorted by the Nets names.
Uses more memory but allows much faster Net deletion.
- New: In _loadNetGlobalRouting(Net*), detect non-routed Nets. A Net is
considered as unrouted if it's 10 first RoutingPads have no slave
Segment. The Net is withdrawn from the set of Nets to route.
- Bug: In GCellConfiguration::_GCell_1G_1L1(), correctly compute the
access flag passed to _GCell_rp_Access().
- Change: In AutoContact::restrictConstraintBox() adds "warnOnError"
parameter to shut down warnings.
- New: KatabaticEngine::_computeNetConstraints() now also returns a set<>
of segments on which constraints are incompatibles. All the NetConstraints
related functions are modificateds accordingly.
- Change: In KatabaticEngine::_loadNetGlobalRouting(), create dogleg
on overconstrained Segments computed by a call to _computeNetConstraints().
Overconstraineds Segments can occurs when a global is directly
connecting two punctual RoutingPads (see "ieee_division").
As a side effect, and to avoid looping each Net is revalidated
*before* making any dogleg. So Nets are revalidated one by one instead
of alltogether.
- Change: In AutoSegment::_toConstraintAxis(), do nothing if constraint
interval is empty.
* ./kite:
- Change: In Configuration, sets the default expandStep parameter to
0.99 (gives better results).
- Change: In KiteEngine::_computeCagedConstraints(), detect and build
a list of segments on which caged constraints are incompatibles
(tearing effect shown in ieee_division). All caged constraints
functions are modificated accordingly.
- Change: In Session::_revalidate(), makes doglegs on Segment with
incompatible caged constraints.
- Mark: vld & ieee_division works.
* ./unicorn:
- Change: Sets the default "expand-step" parameter to 0.99, as in Kite.
_____________________________________________________________________________
* ./crlcore:
- Cleanup: No longer import the std namespace in headers.
- Bug: In Measures.h, incoherent prototyping of getMeasure() template.
- Change: In Environment, SearchPath & the XML format, slight change to
allow overwriting of Alliance library pathes. Instead of having an
attribute on the <system> node that applies to all libraries, we
have a "mode" attribute in each <library> node.
"mode" can takes three values:
1. - "append" : the library path is added in tail of the list.
2. - "prepend" : the library path is added in head of the list.
3. - "replace" : if the library already exists in the pathes,
this ones replaces it, whitout modifiying the order.
If it doesn't exists, it simply appended.
The "replace" mode is the one to be used if a users wants to shadow
system libraries by his own versions (sets in ~/.environment.alliance.xml).
* ./knik:
- New: KnikEngine::computeSymbolicWireLength(), which adds to the measurments
1. - The sum of global wire length (in lambdas).
2. - The abutment box area of the design (in square lambdas).
3. - The saturation ratio of the design: wire length divided by area and
normalized by a "fully routed GCell".
* ./katabatic:
- New: In LoadGrByNet, display the design saturation (informative).
* ./kite:
- New: In KiteEngine, export GWL, Area & Sat measurements.
_____________________________________________________________________________
* ./hurricane:
- Cleanup: In Slot.h, comment out print for debug.
- New: In CellViewer, adds a renameCell() method to "rename" the currently
loaded Cell "in place". Utility function for SaveCellDialog (see below).
* ./crlcore:
- Change: In Cyclop, rename COpenCellDialog in OpenCellDialog.
* ./unicorn:
- Change: Rename COpenCellDialog in OpenCellDialog.
- Change: In CgtMain, now the save parameter must be supplied with a design
name. The same should be different from the input one to avoid overwrites.
- New: SaveCellDialog to write back the Cell. Currently only writes the
layout view.
_____________________________________________________________________________
* All tools:
- Change: In the CMakeLists.txt, in all the install commands remove all
the leading "/" as they prevents the CMAKE_INSTALL_PREFIX to be took
into account. It was nevertheless working because buildCoriolis.py was
using DESTDIR which is prepended anyway.
* ./goodies:
- Change: In buildCoriolis.py, no longer uses the DESTDIR but instead
CMAKE_INSTALL_PREFIX.
_____________________________________________________________________________
* ./goodies:
- New: In buildCoriolis.py, support to build rpm packages (in user's "rpm"
directory).
- Added: coriolis2.spec.in for rpm building. Install under /opt/coriolis2.
This spec files has the particularity to also buildup a binary tarball
of the compiled & installed files, this avoid a second complete build
stage. The tarball is put into "rpm/SOURCES".
* All tools:
- Change: Correction to suppress all g++ warnings. Except thoses comming
from bad Python system includes...
_____________________________________________________________________________
* All tools:
- Change: adopt a tree layout compliant with the UNIX FHS.
* includes under TOP/include/coriolis2.
* shared datas under TOP/shared/coriolis2.
* docs under TOP/share/doc/coriolis2.
* configuration under TOP/etc/coriolis2
* ./crlcore:
- Change: In Environment, comply to the new tree layout, search configuration
files under TOP/etc/coriolis2/.
* ./knik:
- Change: In flute, comply to the new tree layout, get the "POW*.dat" files
from TOP/share/coriolis2/flute-2.4.
_____________________________________________________________________________
* ./io:
- Change: Revert back to the state in which "io" must be included into
the path for #include.
_____________________________________________________________________________
* All tools:
- Change: Adds ${LIB_SUFFIX} to all library search paths.
_____________________________________________________________________________
* ./crlcore:
- New: Adds a README.tex describing the essentials features of Coriolis2.
- New: Support for LaTeX in CMake through the macros supplieds by Sandia.
- Change: Adds support for installation of config file in system-wide
/etc.
* ./goodies:
- Change: In coriolis2.spec.in, now do a install "in system", that is
under /usr witch configuration in /etc. Create a patch file to
sets up accordingly the pathes in configurations files.
- Change: More accurate detection of the qt version based on distribution
recognition (%{rhel} & %{fedora}).
* ./goodies:
- New: In buildCoriolis.py, support for the distribution patch.
The distribution patch do some customizations needed for the distribution.
- Change: In coriolis2.spec.in, support for patch, include starter
documentation. Do not prepend %{buildroot} to CORIOLIS_TOP environment
variables.
* ./goodies:
- Bug: In coriolis2.spec.in, needs to add the CMAKE_MODULE_PATH component
pointing into the %{buildroot} for tools to find their ".cmake".
* ./hurricane:
- Change: In FindHURRICANE.cmake, prepend ${DESTDIR} to the search pathes
components (for use by packagers).
* ./crlcore:
- Change: In top CMakeLists.txt, prepend ${DESTDIR} to CMAKE_MODULE_PATH
components (for use by packagers).
* ./vlsisapd:
- Change: New cmake to find the python site packages directory. Install
python modules in that library.
* ./goodies:
- Bug: In coriolis2.spec.in, split the build in two steps so the documentation
can be installed in the right docdir.
* ./goodies:
- Bug: In coriolis2.spec.in, just remove the installed doc then install them
from build with the %doc directive.
* ./vlsisapd:
- Change: Conditional compilation of DTR & OpenChams. They are compiled only if
their directory is present (see buildCoriolis.doRpm()).
* ./goodies:
- Change: In buildCoriolis.py, adds "dvi" & "safepdf" targets on "crlcore" tool.
Not very clean because it's hard-coded.
* ./crlcore:
- Change: Conditionnal compilation of "doc".
* ./unicorn:
- Change: More consistants text-mode arguments.
* ./crlcore:
- Bug: In AllianceFramework, do not try to build SxLib gauge if the layers are
not presents. Prevent cgt to miserably fails if the environment is not
found.
- Change: In src/ccore/CMakeLists.txt, try to guess the CORIOLIS_TOP from the
compilation environment and pass back to sources.
- Change: Rename hcmos9 into cmos130 in configuration files.
* ./katabatic:
- New: Adds support to restrict the number of routing layers.
* ./kite:
- New: Adds support to restrict the number of routing layers. Not enabled yet
because the router needs some more tweak if using only two routing layers.
* ./crlcore:
- Change: In the to CMakeLists.txt checks for CMake version to see what policy
to apply.
* ./knik:
- Change: In KnikEngine, adds a credits for FLUTE in the ::create() methods.
Printed every time Knik is run (whatever the verbose level).
* ./unicorn:
- Cleanup: In CgtMain, remove obsoleted help function.
* ./unicorn:
- License: In CgtMain, adds banner for FLUTE credits (always displayed).
* ./hurricane:
- Change: When static linking is required, also switch Boost libraries in static
mode. Automatically done is modules using FindHURRICANE through
SET_LIB_LINK_MODE(). Note: FindBoost must be called *after* SET_LIB_LINK_MODE().
* ./goodies:
- New: In coriolis2.spec.in, adds switch to generate package with static libraries.
* ./crlcore:
- Change: In Banner, use a wider cartouche.
- Change: In README, small adjustments.
- Packaging: Second try, svn 1470.
* ./unicorn:
- Change: In CgtMain, add a more complete credits cartouche .
* ./goodies:
- Bug: In coriolis2.spec.in, typos in static libraries commands.
* ./kite:
- Bug: In RoutingEvent, Cs1Candidate::getConflicts() uses of out of bound index.
Strangely shows only under recent distributions (Fedora 13).
* ./crlcore:
- Change: Makes all e-mail references to points to <alliance-users@asim.lip6.fr>.
- Packaging: Second try, svn 1472.
* ./crlcore:
- Change: Rename doc files that differs only by the case, to comply with OSX.
- Packaging: Fourth try, svn 1475.
* ./crlcore:
- Change: In README, last adjustements for release 1475. They belongs to this
release even if they are tagged 1476.
* ./nimbus:
- New: And rising from the dead, here comes Nimbus.
- Change: Rename Nimbus into NimbusEngine for coherency with other tools.
_____________________________________________________________________________
* ./goodies:
- New: Added Nimbus & Mauka tools.
* ./hurricane:
- Change: In Instance & Cell, do *not* materialize unplaced instances.
This is to avoid overloading the QuadTree at point (0,0) and besides
has no senses. Uses the PlacementStatus state.
- Bug: In Viewer CMakeLists.txt, put tool include directories first.
* ./crlcore:
- Bug: In CMakeLists.txt, local include directories *first*.
- New: In Utilities, Dots::asBool() & Dots::asLambda().
- New: In display.xml, new <drawingstyle> for Mauka Containers.
* ./nimbus:
- New: Adds a standard Configuration mechanism.
- New: Allow the user to specify the aspect ratio in addition to the
margin.
* ./mauka:
- New: Initial port from Coriolis 1. Needs to re-introduce Nimbus :-(.
Modificated to provide Configuration & standard ConfigurationWidget.
* ./katabatic:
- Change: In LoadGrByNet, no longer display each net name in cmess2.
* ./kite:
- Bug: In CMakeLists.txt, local include directories *first*.
- Change: In Configuration::setRipupLimit(), swap the two parameters,
more natural ordering.
- New: In ConfigurationWidget, adds an "apply" button to register the
new parameters values.
* ./unicorn:
- Bug: In CMakeLists.txt, local include directories *first*.
- New: Register the Mauka tool (placer).
_____________________________________________________________________________
* ./crlcore:
- New: "linefill" class which allows to print filled lines and automatically
go to the next line whenever the line is full (more than 80 characters).
- New: In ToolBox, getInstancesCount() recursively counts leaf cell instances.
- New: In CellGauge, added getClone() method (for Configuration).
- Change: It seems that the changes to match the new VLSISAPD weren't commited
by Damien...
* ./nimbus:
- New: Now options are handleds by the standard "Configuration". Especially
suppress the need to specify a Library when creating the tool. Now the
Configuration directly supplies the CellGauge & RoutingGauge.
* ./metis:
- New: Initial port from Coriolis 1.
* ./mauka:
- New: In ConfigurationWidget, add support for hMETIS partitionner.
- New: Static method doQuadriPart() to perform recursive quadri-partionning
of the circuit. Down to the instanceStopCriterion and with metis/nimbus.
Ported from pycoriolis.
- New: MaukaEngine::regroupOverloadedGCells() also imported from pycoriolis.
- New: hMETIS support.
- Change: In Configuration, now CellGauge characteristics are supplied only
through Configuration.
- Change: In SubRow, change the way bin widths are computed.
- Bug: In Surface & MaukaEngine, lengthes that are "proportional" to areas
are now coded with double instead of DbU::Unit, because of capacity
overflow.
* ./unicorn:
- New: Integrates support for Metis, more command line options related to
the placement step, "--margin" & "--partition-size-stop".
_____________________________________________________________________________
* ./vlsisapd:
- New: Generic XML configuration parser "Configuration", comes with a
little editor "vlsisapd-conf-editor" (temporary name).
* ./hurricane/src/viewer:
- Change: The tab settings of the controller now refers to the XML
configuration widget.
* ./crlcore:
- In /etc, supplies a default XML configuration file for all tools:
tools.configuration.xml.
* ./nimbus,
./metis,
./mauka,
./katabatic,
./kite :
- Change: switch toward the XML configuration system. Suppress the need
of a default static configuration (now built on demand from the XML
database).
In Mauka and Kite, suppress the ConfigurationWidget, wich are
obsoleted by the generic XML configuration widget.
* ./unicorn:
- Change: Adapted to the XML configuration system.
./metis,
./mauka,
./katabatic,
./kite :
- Change: switch toward the XML configuration system. Suppress the need
of a default static configuration (now built on demand from the XML
database).
In Mauka and Kite, suppress the ConfigurationWidget, wich are
obsoleted by the generic XML configuration widget.
./metis,
./mauka,
./katabatic,
./kite :
- Change: switch toward the XML configuration system. Suppress the need
of a default static configuration (now built on demand from the XML
database).
In Mauka and Kite, suppress the ConfigurationWidget, wich are
obsoleted by the generic XML configuration widget.
./metis,
./mauka,
./katabatic,
./kite :
- Change: switch toward the XML configuration system. Suppress the need
of a default static configuration (now built on demand from the XML
database).
In Mauka and Kite, suppress the ConfigurationWidget, wich are
obsoleted by the generic XML configuration widget.
./metis,
./mauka,
./katabatic,
./kite :
- Change: switch toward the XML configuration system. Suppress the need
of a default static configuration (now built on demand from the XML
database).
In Mauka and Kite, suppress the ConfigurationWidget, wich are
obsoleted by the generic XML configuration widget.
./metis,
./mauka,
./katabatic,
./kite :
- Change: switch toward the XML configuration system. Suppress the need
of a default static configuration (now built on demand from the XML
database).
In Mauka and Kite, suppress the ConfigurationWidget, wich are
obsoleted by the generic XML configuration widget.
- New: In ConfigurationWidget, add support for hMETIS partitionner.
- New: Static method doQuadriPart() to perform recursive quadri-partionning
of the circuit. Down to the instanceStopCriterion and with metis/nimbus.
Ported from pycoriolis.
- New: MaukaEngine::regroupOverloadedGCells() also imported from pycoriolis.
- New: hMETIS support.
- Change: In Configuration, now CellGauge characteristics are supplied only
through Configuration.
- Change: In SubRow, change the way bin widths are computed.
- Bug: In Surface & MaukaEngine, lengthes that are "proportional" to areas
are now coded with double instead of DbU::Unit, because of capacity
overflow.
- New: Now options are handleds by the standard "Configuration". Especially
suppress the need to specify a Library when creating the tool. Now the
Configuration directly supplies the CellGauge & RoutingGauge.
- New: "linefill" class which allows to print filled lines and automatically
go to the next line whenever the line is full (more than 80 characters).
- New: In ToolBox, getInstancesCount() recursively counts leaf cell instances.
- New: In CellGauge, added getClone() method (for Configuration).
- Change: It seems that the changes to match the new VLSISAPD weren't commited
by Damien...
* agds :
- all agds object now belong to AGDS namespace
- 'Gds' has been removed from all filenames
* cif
- all cif objects now belong to CIF namespace
- 'Cif' has been removed from all filenames
* dtr
- minor modifications in CMakeLists.txt since Boost Python is now used by other driver & parser
ADDS
* agds :
- new python module
* cif
- new python module
* doc
- brand new doxygen documentation with
global presentation
cif format (driver)
agds format (driver)
links & contacts
* examples
- examples files in C++ and Python for cif & agds drivers (others will follow)
My view is : the possibility of configuration and combination of OA,
are almost infinite, the .cmake should not bother on finding the directory
hierarchy depending on uname value but only identify OA libraries and includes.
To compile the OPENACCESS WRAPPER
all you have to do is set an OPENACCESS_TOP like
in the other projects.
Example :
Now assuming you work on coriolis machine
To use the precompiled cadence OA v22.04.057 in
/users/soft/opus/6.1.0/Linux/IC-6.1.0/oa_v22.04.057/lib/linux_rhel40_64/opt
and the headers extracted from si2 OA v22.04.042 in
/dsk/l1/misc/caba/OA_HEADER/include
you can create a directory, let's say /dsk/l1/misc/caba/CADENCE_OA
containing symbolic links respectively named lib and include
Then set OPENACCESS_TOP to this created dir
export OPENACCESS_TOP=/dsk/l1/misc/caba/CADENCE_OA
- Bug: In CMakeLists.txt, local include directories *first*.
- Change: In Configuration::setRipupLimit(), swap the two parameters,
more natural ordering.
- New: In ConfigurationWidget, adds an "apply" button to register the
new parameters values.
- Bug: In CMakeLists.txt, local include directories *first*.
- New: In Utilities, Dots::asBool() & Dots::asLambda().
- New: In display.xml, new <drawingstyle> for Mauka Containers.
- Change: In Instance & Cell, do *not* materialize unplaced instances.
This is to avoid overloading the QuadTree at point (0,0) and besides
has no senses. Uses the PlacementStatus state.
- Bug: In Viewer CMakeLists.txt, put tool include directories first.