coriolis/unicorn/CMakeLists.txt

83 lines
3.1 KiB
CMake
Raw Normal View History

PROJECT(UNICORN)
CMAKE_MINIMUM_REQUIRED(VERSION 2.4.0)
IF(COMMAND CMAKE_POLICY)
CMAKE_POLICY(SET CMP0003 NEW)
ENDIF(COMMAND CMAKE_POLICY)
IF(APPLE)
EXECUTE_PROCESS(
COMMAND sw_vers -productVersion
OUTPUT_VARIABLE OSX_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
MESSAGE(STATUS "OSX_VERSION='${OSX_VERSION}'")
IF(${OSX_VERSION} MATCHES "^10\\.[012345]\\.?")
MESSAGE(STATUS "OSX < 10.6")
ELSE(${OSX_VERSION} MATCHES "^10\\.[012345]\\.?")
SET(CMAKE_OSX_ARCHITECTURES "i386;ppc") # for QT4.5 32bits on snow leopard
ENDIF(${OSX_VERSION} MATCHES "^10\\.[012345]\\.?")
ENDIF(APPLE)
SET(CMAKE_C_FLAGS_DEBUG "-g -Wall" CACHE STRING "Debug options." FORCE)
SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall" CACHE STRING "Debug options." FORCE)
#SET(CMAKE_LINKER_FLAGS_DEBUG "-pg" CACHE STRING "Debug options." FORCE)
#SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "-pg" CACHE STRING "Debug options." FORCE)
#SET(CMAKE_MODULE_LINKER_FLAGS_DEBUG "-pg" CACHE STRING "Debug options." FORCE)
#SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "-pg" CACHE STRING "Debug options." FORCE)
IF(COMMAND CMAKE_POLICY)
CMAKE_POLICY(SET CMP0003 NEW)
ENDIF(COMMAND CMAKE_POLICY)
# This macro has to be included in all the tools CMakeLists.txt as it's
# the sole means of localizing other tools/projects.
MACRO(SETUP_PROJECT_PATHS project)
IF( NOT("$ENV{${project}_TOP}" STREQUAL "") )
MESSAGE("-- ${project}_TOP is set to $ENV{${project}_TOP}")
2010-05-22 09:14:37 -05:00
SET(PROJECT_MODULE_PATH "${DESTDIR}$ENV{${project}_TOP}/share/cmake/Modules/")
2010-04-28 16:55:06 -05:00
LIST(INSERT CMAKE_MODULE_PATH 0 "${PROJECT_MODULE_PATH}")
ENDIF( NOT("$ENV{${project}_TOP}" STREQUAL "") )
IF( NOT("$ENV{${project}_USER_TOP}" STREQUAL "") )
MESSAGE("-- ${project}_USER_TOP is set to $ENV{${project}_USER_TOP}")
2010-05-22 09:14:37 -05:00
SET(PROJECT_MODULE_PATH "${DESTDIR}$ENV{${project}_USER_TOP}/share/cmake/Modules/")
2010-04-28 16:55:06 -05:00
LIST(INSERT CMAKE_MODULE_PATH 0 "${PROJECT_MODULE_PATH}")
ENDIF( NOT("$ENV{${project}_USER_TOP}" STREQUAL "") )
2010-04-28 16:55:06 -05:00
LIST(REMOVE_DUPLICATES CMAKE_MODULE_PATH)
ENDMACRO(SETUP_PROJECT_PATHS project)
SETUP_PROJECT_PATHS(VLSISAPD)
SETUP_PROJECT_PATHS(CORIOLIS)
* ./coriolis/src/crlcore/src/ccore/Banner.cpp ./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.
2010-06-18 09:04:42 -05:00
STRING(REGEX MATCH "^/usr" IS_USR "$ENV{CORIOLIS_TOP}")
STRING(REGEX MATCH "^/opt" IS_OPT "$ENV{CORIOLIS_TOP}")
IF(IS_USR OR IS_OPT)
MESSAGE("-- Using system-wide /etc.")
SET(SYS_CONF_DIR "/etc" CACHE STRING "System configuration directory (/etc)" FORCE)
ELSE(IS_USR OR IS_OPT)
MESSAGE("-- Using install tree /etc.")
SET(SYS_CONF_DIR "etc" CACHE STRING "System configuration directory (/etc)" FORCE)
ENDIF(IS_USR OR IS_OPT)
SET(QT_USE_QTXML "true")
FIND_PACKAGE(Qt4 REQUIRED) # find and setup Qt4 for this project
FIND_PACKAGE(LEFDEF REQUIRED)
FIND_PACKAGE(VLSISAPD REQUIRED)
FIND_PACKAGE(HURRICANE REQUIRED)
FIND_PACKAGE(CORIOLIS REQUIRED)
FIND_PACKAGE(NIMBUS REQUIRED)
FIND_PACKAGE(METIS REQUIRED)
FIND_PACKAGE(MAUKA REQUIRED)
FIND_PACKAGE(KNIK REQUIRED)
FIND_PACKAGE(KATABATIC REQUIRED)
FIND_PACKAGE(KITE REQUIRED)
#FIND_PACKAGE(EQUINOX REQUIRED)
#FIND_PACKAGE(SOLSTICE REQUIRED)
SET_LIB_LINK_MODE()
* ./coriolis/src/crlcore/src/ccore/Banner.cpp ./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.
2010-06-18 09:04:42 -05:00
FIND_PACKAGE(Boost 1.33.1 COMPONENTS program_options filesystem REQUIRED)
ADD_SUBDIRECTORY(src)