2012-11-16 06:54:58 -06:00
#!/usr/bin/env python
try :
import sys
import os . path
import optparse
import Cfg
import Hurricane
import Viewer
import CRL
import Nimbus
import Metis
import Mauka
Update to Qt 5, requires cmake 2.8.9. New placer: Etesian.
Update to Qt 5:
* Change: Now requires at least cmake 2.8.9.
* Change: CMakeLists.txt needs small changes. Qt modules must be found
one by one (Core, Gui, Widgets). Must add "set(CMAKE_AUTOMOC ON)"
in the top file and replace "qt4" prefix in macros by "qt5".
Added simpler macro "setup_qt()" in FindBootstrap.cmake.
* Change: No longer need to include <QGtkStyle> is is choosen by default
according to the current desktop environment.
* Change: In <hurricane>, In HApplication, launch ExceptionWidget when
a std::exception is catched instead of silently discarting it.
New placer Tool: Etesian
* New: <etesian> analytical placer. Encapsulate Coloquinte from
Gabriel Gouvine.
* New: in <documentation>, add stub demonstration ToolEngine <smurf>.
Needs to be commented.
Miscellaneous:
* New: in <boostrap> and <unicorn>, added support for Etesian, the new
analytic placer. The tool itself will be added in the next commit.
* Bug: in <CellWidget>, when shifting the display buffer, we no longer
can copy the buffer on itself (we should never have). Now go through
a temporary one (PlaneId::AutoCopy) which is added to the
DrawingPlanes. Affect "goLeft()" and "goUp()".
* Bug: In <CellWidget>, remove the WA_PaintOnScreen flag/attribute.
When it's on, no PaintEvent is transmitted to the CellWidget
when it's the central widget of the <CellViewer> (QMainWindow).
It's something I still don't understand from the doc of Qt.
* Change: In <AreaCommand>, use the PlaneId enumeration instead of a
anonymous numerical index.
* Change: In <HApplication>, no longer catch and silently discard
standartd exceptions but launch the ExceptionWidget...
Suppress the now deprecated constructor with "Type" argument.
* Change: In <SelectionModel>, the "reset()" method is deprecated in
Qt5, instead enclose the "clear()" by a "beginResetModel()" and
"endResetModel()" pair.
* New: In <crlcore>, add support for ISPD05 benchmarks (in Bookshelf
format). Forked from ISPD04 and not finished yet.
* Change: In <Mauka>, distinguish the Action string identifier from
<Etesian>
* New: In <unicorn>, add entry for ISPD05 loader. Add entry for
<Etesian> analytic placer.
2014-03-22 05:50:36 -05:00
import Etesian
2012-11-16 06:54:58 -06:00
import Katabatic
import Kite
import Unicorn
except ImportError , e :
module = str ( e ) . split ( ) [ - 1 ]
print ' [ERROR] The < %s > python module or symbol cannot be loaded. ' % module
print ' Please check the integrity of the <coriolis> package. '
sys . exit ( 1 )
except Exception , e :
print ' [ERROR] A strange exception occurred while loading the basic Coriolis/Python '
print ' modules. Something may be wrong at Python/C API level. \n '
print ' %s ' % e
sys . exit ( 2 )
def setCgtBanner ( banner ) :
banner . setName ( ' cgt ' )
banner . setPurpose ( ' Coriolis Graphical Tool ' )
return banner
def credits ( ) :
s = ' '
s + = ' Tool Credits \n '
s + = ' Hurricane .................... Remy Escassut & Christian Masson \n '
s + = ' Nimbus - Infrastructure .......................... Hugo Clement \n '
s + = ' Mauka - Placer ........................... Christophe Alexandre \n '
s + = ' Knik - Global Router ............................ Damien Dupuis \n '
s + = ' Kite - Detailed Router ....................... Jean-Paul Chaput \n \n '
s + = ' hMETIS software credits (used by Mauka) \n '
s + = ' Author ........................................ Georges Karypis \n '
s + = ' Prof. Ident. .......................... University of Minnesota \n '
s + = ' URL .......................... http://glaros.dtc.umn.edu/gkhome \n \n '
s + = ' FLUTE software credits (used by Knik) \n '
s + = ' Author ........................................ Chris C. N. CHU \n '
s + = ' Prof. Ident. ............................ Iowa State University \n '
s + = ' URL ........................ http://home.eng.iastate.edu/~cnchu \n \n '
return s
2012-12-03 02:30:16 -06:00
def runScript ( scriptPath , editor ) :
2012-11-16 06:54:58 -06:00
try :
script = __import__ ( scriptPath )
except Exception , e :
print ' [ERROR] An exception occured while loading the Stratus script module: '
print ' < %s > \n ' % ( scriptPath )
print ' You should check for simple python errors in this module. '
print ' Error was: '
print ' %s \n ' % e
print ' Trying to continue anyway... '
return
2012-12-03 02:30:16 -06:00
if not hasattr ( script , ' ScriptMain ' ) :
print ' [ERROR] Script module is missing function ScriptMain(). '
2012-11-16 06:54:58 -06:00
print ' < %s > ' % scriptPath
return
2012-12-03 02:30:16 -06:00
script . ScriptMain ( editor )
2012-11-16 06:54:58 -06:00
return
if __name__ == ' __main__ ' :
try :
usage = str ( setCgtBanner ( CRL . Banner ( ) ) )
usage + = ' \n cgt [options] '
parser = optparse . OptionParser ( usage )
Improved UpdateSession & exception catching. Start of RoutingGauge implem.
Miscellaneous:
* Change: In <crlcore>, in display.conf use the same display threshold
for both METAL2 & METAL3.
In alliance.conf, the side of VIAs in the gauge is 2l (not 3l).
In kite.conf, separate edge densities for H/V.
* Change: In <Cell>, in flattenNets() use flag as argument, not a
boolean. Do not create rings for clock or supply nets.
* Change: In <DeepNet>, in _createRoutingPads() do not create rings
for clock or supply net (duplicated policy as in Cell::flattenNets()).
* Bug: In <ControllerWidget>, at last find the bad signal disconnect
that was causing ungraceful messages.
* Change: In <knik>, in Edge display occupancy/capacity in the string
name. Improved display progress and debugging capabilities.
Improved exception catch & breakpoint managment:
* Bug: In <PaletteWidget>, in updateExtensions() replace the calls to
deleteLayer() by delete. This cause the widget to be immediatly
erased instead of waiting for the event queue to be completly
processed. This was causing the widget to be left in a incoherent
state when stoping at a breakpoint.
* Bug: In <BreakpointWidget>, in execNoModal(), flush the main event
loop (QApplication::flush()) *before* lauching the *local* event
loop. This is to ensure all widgets are in their final state when
waiting (especially <PaletteWidget>).
* Change: In <ExceptionWidget>, new method catchAllWrapper() to
execute any std::function< void() > function/method with a "try"/
"catch" wraparound and lauch the widget in case something is catch.
* New: In <hurricane>, support for a oberver pattern, backported from
<katabatic> with an Obervable capable of being linked to any
number of Obervers.
* New: In <Cell>, made it observable to detect Cell change, currently
emit two kind of signals:
- Cell::CellAboutToChange : *before* any change.
- Cell::CellChanged : *after* the change has been completed.
* New: In <UpdateSession>, in Go::invalidate() add the Cell owning the
Go to the UPDATOR_STACK (of course the cell is added only once).
In addition, when the Cell is added, send a notification of
Cell::CellAboutToChange to all it's observers. The slave instances
are also invalidated.
Conversely in UpdateSession::_preDestroy() for each invalidated
Cell send a Cell::CellChanged notification to all observer.
The UPDATOR_STACK has been slightly amended to accept Cell which
are not Gos. Prior to this, the Cell where completly excluded from
the UpdateSession mechanism, so it's instances where never actualised
of anything referring to the Cell for that matter.
Note: we use two different mechanisms to transmit a Cell change,
observers and the slave instance map. I think at some point it
should be unificated.
* Change: In <CellViewer>, make it a Cell observer to redraw when the
cell is modificated (also update the palette).
Uses the catchAllWrapper() to protect all critical actions.
* Change: In <GraphicTool>, no longer need of cellPreModificated and
cellPostModificated signals. Now done through the Cell obersvers.
* Change: In <mauka>, <etesian> & <kite> now uses the catchAllWrapper
method for protection (need to split methods in two, to be able
to pass it as argument). No longer emit cellPreModificated and
cellPostModificated.
Support for RoutingGauge in P&R:
* Bug: In <placeandroute.py>, the connection from the internal power
ring to the connectors was not done correctly. Wrong contact layers
leading to a gap.
* Change: In <BuildPowerRails>, detection of the corona signals based
on how the "pck_px" pad is connected. No longer based on name
matching.
* Change: In <placeandroute.py>, support for 2 routing metal only
(3 metal in the technology).
* Change: In <katabatic> & <kite> support for a "top layer" limitation
on the routing gauge, this allows to use only two routing metals
(METAL2 & METAL3). Work in progress.
2014-04-20 12:25:08 -05:00
parser . add_option ( ' -c ' , ' --cell ' , type = ' string ' , dest = ' cell ' , help = ' The name of the cell to load, whithout extension. ' )
parser . add_option ( ' --acm-sigda-89 ' , type = ' string ' , dest = ' acmSigdaName ' , help = ' An ACM/SIGDA 89 bench name to load, whithout extension. ' )
parser . add_option ( ' --ispd-05 ' , type = ' string ' , dest = ' ispd05name ' , help = ' An ISPD 05 bench (placement) name to load, whithout extension. ' )
parser . add_option ( ' --script ' , type = ' string ' , dest = ' script ' , help = ' Run a Python or Stratus script. ' )
parser . add_option ( ' -v ' , ' --verbose ' , action = ' store_true ' , dest = ' verbose ' , help = ' First level of verbosity. ' )
parser . add_option ( ' -V ' , ' --very-verbose ' , action = ' store_true ' , dest = ' veryVerbose ' , help = ' Second level of verbosity. ' )
parser . add_option ( ' -i ' , ' --info ' , action = ' store_true ' , dest = ' info ' , help = ' Display lots of informational messages. ' )
parser . add_option ( ' --paranoid ' , action = ' store_true ' , dest = ' paranoid ' , help = ' Display everything that *may be* suspicious... ' )
parser . add_option ( ' -b ' , ' --bug ' , action = ' store_true ' , dest = ' bug ' , help = ' Display bug related messages. ' )
parser . add_option ( ' --show-conf ' , action = ' store_true ' , dest = ' showConf ' , help = ' Display Kite configuration. ' )
parser . add_option ( ' -D ' , ' --core-dump ' , action = ' store_true ' , dest = ' coreDump ' , help = ' Enable core-dump when a crash occurs. ' )
parser . add_option ( ' -L ' , ' --log-mode ' , action = ' store_true ' , dest = ' logMode ' , help = ' Disable ANSI escape sequences in console output. ' )
parser . add_option ( ' -t ' , ' --text ' , action = ' store_true ' , dest = ' textMode ' , help = ' Run in command line mode. ' )
parser . add_option ( ' -m ' , ' --margin ' , type = ' float ' , dest = ' margin ' , help = ' Percentage of free area to add to the minimal placement area. ' )
parser . add_option ( ' -Q ' , ' --quadri-place ' , action = ' store_true ' , dest = ' quadPlace ' , help = ' Performs a quadri-partitionnement as first placement stage. ' )
parser . add_option ( ' -P ' , ' --annealing ' , action = ' store_true ' , dest = ' annealingPlace ' , help = ' Place using simulated annealing. ' )
parser . add_option ( ' --min-psize ' , type = ' int ' , dest = ' minPSize ' , help = ' Sets the size of a leaf partition (quadripartition stage). ' )
parser . add_option ( ' -G ' , ' --global-route ' , action = ' store_true ' , dest = ' globalRoute ' , help = ' Run the global router (Knik). ' )
parser . add_option ( ' -g ' , ' --load-global ' , action = ' store_true ' , dest = ' loadGlobal ' , help = ' Reload a global routing from disk. ' )
parser . add_option ( ' --save-global ' , action = ' store_true ' , dest = ' saveGlobal ' , help = ' Save the global routing solution. ' )
Express "xEdgeCapacity" ratio as "xTracksReservedLocal" a number of tracks.
* Change: In Kite, Katabatic & Knik, express the number of tracks truly
available to the global router by the number of tracks reserved to
the local routage inside a GCell. Replace the ratio parameter
"hEdgeCapacity" by an integer parameter "hTracksReservedLocal"
(duplicate for verticals).
It is more explicit to give directly the number of tracks that
are to be used locally, and potentially saves us from rouding
problems when calculating the number of availables tracks.
Note: we cannot do that for the layer saturateRatio as it
uses the density ratio that take account local wires, leading
to fractional results.
* Change: In Katabatic, in <GCellGrid>, rename checkEdgeSaturation()
into checkEdgeOverflow(), more explicit.
* Change: In Knik, in <Graph>, display the computed capacities of the
lower left node edges (should be the same througout all the grid).
* Change: In Unicorn, in <cgt.py>, uses the new parameters names for
edge density.
2014-06-10 09:58:52 -05:00
parser . add_option ( ' --htracks-local ' , type = ' int ' , dest = ' hTracksLocal ' , help = ' The amount of horizontal tracks reserved for the GCell local routing. ' )
parser . add_option ( ' --vtracks-local ' , type = ' int ' , dest = ' vTracksLocal ' , help = ' The amount of vertical tracks reserved for the GCell local routing . ' )
Improved UpdateSession & exception catching. Start of RoutingGauge implem.
Miscellaneous:
* Change: In <crlcore>, in display.conf use the same display threshold
for both METAL2 & METAL3.
In alliance.conf, the side of VIAs in the gauge is 2l (not 3l).
In kite.conf, separate edge densities for H/V.
* Change: In <Cell>, in flattenNets() use flag as argument, not a
boolean. Do not create rings for clock or supply nets.
* Change: In <DeepNet>, in _createRoutingPads() do not create rings
for clock or supply net (duplicated policy as in Cell::flattenNets()).
* Bug: In <ControllerWidget>, at last find the bad signal disconnect
that was causing ungraceful messages.
* Change: In <knik>, in Edge display occupancy/capacity in the string
name. Improved display progress and debugging capabilities.
Improved exception catch & breakpoint managment:
* Bug: In <PaletteWidget>, in updateExtensions() replace the calls to
deleteLayer() by delete. This cause the widget to be immediatly
erased instead of waiting for the event queue to be completly
processed. This was causing the widget to be left in a incoherent
state when stoping at a breakpoint.
* Bug: In <BreakpointWidget>, in execNoModal(), flush the main event
loop (QApplication::flush()) *before* lauching the *local* event
loop. This is to ensure all widgets are in their final state when
waiting (especially <PaletteWidget>).
* Change: In <ExceptionWidget>, new method catchAllWrapper() to
execute any std::function< void() > function/method with a "try"/
"catch" wraparound and lauch the widget in case something is catch.
* New: In <hurricane>, support for a oberver pattern, backported from
<katabatic> with an Obervable capable of being linked to any
number of Obervers.
* New: In <Cell>, made it observable to detect Cell change, currently
emit two kind of signals:
- Cell::CellAboutToChange : *before* any change.
- Cell::CellChanged : *after* the change has been completed.
* New: In <UpdateSession>, in Go::invalidate() add the Cell owning the
Go to the UPDATOR_STACK (of course the cell is added only once).
In addition, when the Cell is added, send a notification of
Cell::CellAboutToChange to all it's observers. The slave instances
are also invalidated.
Conversely in UpdateSession::_preDestroy() for each invalidated
Cell send a Cell::CellChanged notification to all observer.
The UPDATOR_STACK has been slightly amended to accept Cell which
are not Gos. Prior to this, the Cell where completly excluded from
the UpdateSession mechanism, so it's instances where never actualised
of anything referring to the Cell for that matter.
Note: we use two different mechanisms to transmit a Cell change,
observers and the slave instance map. I think at some point it
should be unificated.
* Change: In <CellViewer>, make it a Cell observer to redraw when the
cell is modificated (also update the palette).
Uses the catchAllWrapper() to protect all critical actions.
* Change: In <GraphicTool>, no longer need of cellPreModificated and
cellPostModificated signals. Now done through the Cell obersvers.
* Change: In <mauka>, <etesian> & <kite> now uses the catchAllWrapper
method for protection (need to split methods in two, to be able
to pass it as argument). No longer emit cellPreModificated and
cellPostModificated.
Support for RoutingGauge in P&R:
* Bug: In <placeandroute.py>, the connection from the internal power
ring to the connectors was not done correctly. Wrong contact layers
leading to a gap.
* Change: In <BuildPowerRails>, detection of the corona signals based
on how the "pck_px" pad is connected. No longer based on name
matching.
* Change: In <placeandroute.py>, support for 2 routing metal only
(3 metal in the technology).
* Change: In <katabatic> & <kite> support for a "top layer" limitation
on the routing gauge, this allows to use only two routing metals
(METAL2 & METAL3). Work in progress.
2014-04-20 12:25:08 -05:00
parser . add_option ( ' --events-limit ' , type = ' int ' , dest = ' eventsLimit ' , help = ' The maximum number of iterations (events) that the router is allowed to perform. ' )
parser . add_option ( ' -R ' , ' --detail-route ' , action = ' store_true ' , dest = ' detailRoute ' , help = ' Run the detailed router (Kite). ' )
parser . add_option ( ' -M ' , ' --dump-measures ' , action = ' store_true ' , dest = ' dumpMeasures ' , help = ' Dump some statistical measurements on the disk. ' )
parser . add_option ( ' -s ' , ' --save-design ' , type = ' string ' , dest = ' saveDesign ' , help = ' Save the routed design. ' )
parser . add_option ( ' --top-routing-layer ' , type = ' string ' , dest = ' topRoutingLayer ' , help = ' Sets the top (upper) routing layer. ' )
2012-11-16 06:54:58 -06:00
( options , args ) = parser . parse_args ( )
args . insert ( 0 , ' cgt ' )
2013-12-03 19:57:21 -06:00
af = CRL . AllianceFramework . get ( )
2012-11-16 06:54:58 -06:00
#Hurricane.trace(True)
Cfg . Configuration . pushDefaultPriority ( Cfg . Parameter . Priority . CommandLine )
Improved UpdateSession & exception catching. Start of RoutingGauge implem.
Miscellaneous:
* Change: In <crlcore>, in display.conf use the same display threshold
for both METAL2 & METAL3.
In alliance.conf, the side of VIAs in the gauge is 2l (not 3l).
In kite.conf, separate edge densities for H/V.
* Change: In <Cell>, in flattenNets() use flag as argument, not a
boolean. Do not create rings for clock or supply nets.
* Change: In <DeepNet>, in _createRoutingPads() do not create rings
for clock or supply net (duplicated policy as in Cell::flattenNets()).
* Bug: In <ControllerWidget>, at last find the bad signal disconnect
that was causing ungraceful messages.
* Change: In <knik>, in Edge display occupancy/capacity in the string
name. Improved display progress and debugging capabilities.
Improved exception catch & breakpoint managment:
* Bug: In <PaletteWidget>, in updateExtensions() replace the calls to
deleteLayer() by delete. This cause the widget to be immediatly
erased instead of waiting for the event queue to be completly
processed. This was causing the widget to be left in a incoherent
state when stoping at a breakpoint.
* Bug: In <BreakpointWidget>, in execNoModal(), flush the main event
loop (QApplication::flush()) *before* lauching the *local* event
loop. This is to ensure all widgets are in their final state when
waiting (especially <PaletteWidget>).
* Change: In <ExceptionWidget>, new method catchAllWrapper() to
execute any std::function< void() > function/method with a "try"/
"catch" wraparound and lauch the widget in case something is catch.
* New: In <hurricane>, support for a oberver pattern, backported from
<katabatic> with an Obervable capable of being linked to any
number of Obervers.
* New: In <Cell>, made it observable to detect Cell change, currently
emit two kind of signals:
- Cell::CellAboutToChange : *before* any change.
- Cell::CellChanged : *after* the change has been completed.
* New: In <UpdateSession>, in Go::invalidate() add the Cell owning the
Go to the UPDATOR_STACK (of course the cell is added only once).
In addition, when the Cell is added, send a notification of
Cell::CellAboutToChange to all it's observers. The slave instances
are also invalidated.
Conversely in UpdateSession::_preDestroy() for each invalidated
Cell send a Cell::CellChanged notification to all observer.
The UPDATOR_STACK has been slightly amended to accept Cell which
are not Gos. Prior to this, the Cell where completly excluded from
the UpdateSession mechanism, so it's instances where never actualised
of anything referring to the Cell for that matter.
Note: we use two different mechanisms to transmit a Cell change,
observers and the slave instance map. I think at some point it
should be unificated.
* Change: In <CellViewer>, make it a Cell observer to redraw when the
cell is modificated (also update the palette).
Uses the catchAllWrapper() to protect all critical actions.
* Change: In <GraphicTool>, no longer need of cellPreModificated and
cellPostModificated signals. Now done through the Cell obersvers.
* Change: In <mauka>, <etesian> & <kite> now uses the catchAllWrapper
method for protection (need to split methods in two, to be able
to pass it as argument). No longer emit cellPreModificated and
cellPostModificated.
Support for RoutingGauge in P&R:
* Bug: In <placeandroute.py>, the connection from the internal power
ring to the connectors was not done correctly. Wrong contact layers
leading to a gap.
* Change: In <BuildPowerRails>, detection of the corona signals based
on how the "pck_px" pad is connected. No longer based on name
matching.
* Change: In <placeandroute.py>, support for 2 routing metal only
(3 metal in the technology).
* Change: In <katabatic> & <kite> support for a "top layer" limitation
on the routing gauge, this allows to use only two routing metals
(METAL2 & METAL3). Work in progress.
2014-04-20 12:25:08 -05:00
if options . coreDump : Cfg . getParamBool ( ' misc.catchCore ' ) . setBool ( False )
if options . verbose : Cfg . getParamBool ( ' misc.verboseLevel1 ' ) . setBool ( True )
if options . veryVerbose : Cfg . getParamBool ( ' misc.verboseLevel2 ' ) . setBool ( True )
if options . info : Cfg . getParamBool ( ' misc.info ' ) . setBool ( True )
if options . paranoid : Cfg . getParamBool ( ' misc.paranoid ' ) . setBool ( True )
if options . bug : Cfg . getParamBool ( ' misc.bug ' ) . setBool ( True )
if options . logMode : Cfg . getParamBool ( ' misc.logMode ' ) . setBool ( True )
if options . showConf : Cfg . getParamBool ( ' misc.showConf ' ) . setBool ( True )
if options . margin : Cfg . getParamPercentage ( ' nimbus.spaceMargin ' ) . setPercentage ( options . margin )
if options . minPSize : Cfg . getParamInt ( ' metis.numberOfInstancesStopCriterion ' ) . setInt ( options . minPSize )
Express "xEdgeCapacity" ratio as "xTracksReservedLocal" a number of tracks.
* Change: In Kite, Katabatic & Knik, express the number of tracks truly
available to the global router by the number of tracks reserved to
the local routage inside a GCell. Replace the ratio parameter
"hEdgeCapacity" by an integer parameter "hTracksReservedLocal"
(duplicate for verticals).
It is more explicit to give directly the number of tracks that
are to be used locally, and potentially saves us from rouding
problems when calculating the number of availables tracks.
Note: we cannot do that for the layer saturateRatio as it
uses the density ratio that take account local wires, leading
to fractional results.
* Change: In Katabatic, in <GCellGrid>, rename checkEdgeSaturation()
into checkEdgeOverflow(), more explicit.
* Change: In Knik, in <Graph>, display the computed capacities of the
lower left node edges (should be the same througout all the grid).
* Change: In Unicorn, in <cgt.py>, uses the new parameters names for
edge density.
2014-06-10 09:58:52 -05:00
if options . hTracksLocal : Cfg . getParamInt ( ' kite.hTracksReservedLocal ' ) . setInt ( options . hTracksLocal )
if options . vTracksLocal : Cfg . getParamInt ( ' kite.vTracksReservedLocal ' ) . setInt ( options . vTracksLocal )
if options . eventsLimit : Cfg . getParamInt ( ' kite.eventsLimit ' ) . setInt ( options . eventsLimit )
Improved UpdateSession & exception catching. Start of RoutingGauge implem.
Miscellaneous:
* Change: In <crlcore>, in display.conf use the same display threshold
for both METAL2 & METAL3.
In alliance.conf, the side of VIAs in the gauge is 2l (not 3l).
In kite.conf, separate edge densities for H/V.
* Change: In <Cell>, in flattenNets() use flag as argument, not a
boolean. Do not create rings for clock or supply nets.
* Change: In <DeepNet>, in _createRoutingPads() do not create rings
for clock or supply net (duplicated policy as in Cell::flattenNets()).
* Bug: In <ControllerWidget>, at last find the bad signal disconnect
that was causing ungraceful messages.
* Change: In <knik>, in Edge display occupancy/capacity in the string
name. Improved display progress and debugging capabilities.
Improved exception catch & breakpoint managment:
* Bug: In <PaletteWidget>, in updateExtensions() replace the calls to
deleteLayer() by delete. This cause the widget to be immediatly
erased instead of waiting for the event queue to be completly
processed. This was causing the widget to be left in a incoherent
state when stoping at a breakpoint.
* Bug: In <BreakpointWidget>, in execNoModal(), flush the main event
loop (QApplication::flush()) *before* lauching the *local* event
loop. This is to ensure all widgets are in their final state when
waiting (especially <PaletteWidget>).
* Change: In <ExceptionWidget>, new method catchAllWrapper() to
execute any std::function< void() > function/method with a "try"/
"catch" wraparound and lauch the widget in case something is catch.
* New: In <hurricane>, support for a oberver pattern, backported from
<katabatic> with an Obervable capable of being linked to any
number of Obervers.
* New: In <Cell>, made it observable to detect Cell change, currently
emit two kind of signals:
- Cell::CellAboutToChange : *before* any change.
- Cell::CellChanged : *after* the change has been completed.
* New: In <UpdateSession>, in Go::invalidate() add the Cell owning the
Go to the UPDATOR_STACK (of course the cell is added only once).
In addition, when the Cell is added, send a notification of
Cell::CellAboutToChange to all it's observers. The slave instances
are also invalidated.
Conversely in UpdateSession::_preDestroy() for each invalidated
Cell send a Cell::CellChanged notification to all observer.
The UPDATOR_STACK has been slightly amended to accept Cell which
are not Gos. Prior to this, the Cell where completly excluded from
the UpdateSession mechanism, so it's instances where never actualised
of anything referring to the Cell for that matter.
Note: we use two different mechanisms to transmit a Cell change,
observers and the slave instance map. I think at some point it
should be unificated.
* Change: In <CellViewer>, make it a Cell observer to redraw when the
cell is modificated (also update the palette).
Uses the catchAllWrapper() to protect all critical actions.
* Change: In <GraphicTool>, no longer need of cellPreModificated and
cellPostModificated signals. Now done through the Cell obersvers.
* Change: In <mauka>, <etesian> & <kite> now uses the catchAllWrapper
method for protection (need to split methods in two, to be able
to pass it as argument). No longer emit cellPreModificated and
cellPostModificated.
Support for RoutingGauge in P&R:
* Bug: In <placeandroute.py>, the connection from the internal power
ring to the connectors was not done correctly. Wrong contact layers
leading to a gap.
* Change: In <BuildPowerRails>, detection of the corona signals based
on how the "pck_px" pad is connected. No longer based on name
matching.
* Change: In <placeandroute.py>, support for 2 routing metal only
(3 metal in the technology).
* Change: In <katabatic> & <kite> support for a "top layer" limitation
on the routing gauge, this allows to use only two routing metals
(METAL2 & METAL3). Work in progress.
2014-04-20 12:25:08 -05:00
if options . topRoutingLayer : Cfg . getParamString ( ' katabatic.topRoutingLayer ' ) . setString ( options . topRoutingLayer )
2012-11-16 06:54:58 -06:00
quadPlace = options . quadPlace
annealingPlace = options . annealingPlace
loadGlobal = options . loadGlobal
saveGlobal = options . saveGlobal
globalRoute = options . globalRoute
detailRoute = options . detailRoute
Cfg . Configuration . popDefaultPriority ( )
cell = None
if options . acmSigdaName :
cell = CRL . AcmSigda . load ( options . acmSigdaName )
2014-03-26 08:47:17 -05:00
if options . ispd05name :
cell = CRL . Ispd05 . load ( options . ispd05name )
2012-11-16 06:54:58 -06:00
elif options . cell :
cell = af . getCell ( options . cell , CRL . Catalog . State . Views )
else :
quadPlace = False
annealingPlace = False
loadGlobal = False
saveGlobal = False
globalRoute = False
detailRoute = False
if not options . textMode :
# Run in graphic mode.
ha = Viewer . HApplication . create ( args )
Viewer . Graphics . enable ( )
unicorn = Unicorn . UnicornGui . create ( )
unicorn . setApplicationName ( ' cgt ' )
unicorn . registerTool ( Mauka . GraphicMaukaEngine . grab ( ) )
Update to Qt 5, requires cmake 2.8.9. New placer: Etesian.
Update to Qt 5:
* Change: Now requires at least cmake 2.8.9.
* Change: CMakeLists.txt needs small changes. Qt modules must be found
one by one (Core, Gui, Widgets). Must add "set(CMAKE_AUTOMOC ON)"
in the top file and replace "qt4" prefix in macros by "qt5".
Added simpler macro "setup_qt()" in FindBootstrap.cmake.
* Change: No longer need to include <QGtkStyle> is is choosen by default
according to the current desktop environment.
* Change: In <hurricane>, In HApplication, launch ExceptionWidget when
a std::exception is catched instead of silently discarting it.
New placer Tool: Etesian
* New: <etesian> analytical placer. Encapsulate Coloquinte from
Gabriel Gouvine.
* New: in <documentation>, add stub demonstration ToolEngine <smurf>.
Needs to be commented.
Miscellaneous:
* New: in <boostrap> and <unicorn>, added support for Etesian, the new
analytic placer. The tool itself will be added in the next commit.
* Bug: in <CellWidget>, when shifting the display buffer, we no longer
can copy the buffer on itself (we should never have). Now go through
a temporary one (PlaneId::AutoCopy) which is added to the
DrawingPlanes. Affect "goLeft()" and "goUp()".
* Bug: In <CellWidget>, remove the WA_PaintOnScreen flag/attribute.
When it's on, no PaintEvent is transmitted to the CellWidget
when it's the central widget of the <CellViewer> (QMainWindow).
It's something I still don't understand from the doc of Qt.
* Change: In <AreaCommand>, use the PlaneId enumeration instead of a
anonymous numerical index.
* Change: In <HApplication>, no longer catch and silently discard
standartd exceptions but launch the ExceptionWidget...
Suppress the now deprecated constructor with "Type" argument.
* Change: In <SelectionModel>, the "reset()" method is deprecated in
Qt5, instead enclose the "clear()" by a "beginResetModel()" and
"endResetModel()" pair.
* New: In <crlcore>, add support for ISPD05 benchmarks (in Bookshelf
format). Forked from ISPD04 and not finished yet.
* Change: In <Mauka>, distinguish the Action string identifier from
<Etesian>
* New: In <unicorn>, add entry for ISPD05 loader. Add entry for
<Etesian> analytic placer.
2014-03-22 05:50:36 -05:00
unicorn . registerTool ( Etesian . GraphicEtesianEngine . grab ( ) )
2012-11-16 06:54:58 -06:00
unicorn . registerTool ( Kite . GraphicKiteEngine . grab ( ) )
2012-12-03 02:30:16 -06:00
#unicorn.setAnonNetSelectable(False)
2012-11-16 06:54:58 -06:00
unicorn . setLayerVisible ( " grid " , False ) ;
unicorn . setLayerVisible ( " text.instance " , False ) ;
unicorn . setLayerVisible ( " text.component " , False ) ;
2012-12-03 02:30:16 -06:00
if options . script :
runScript ( options . script , unicorn )
2012-11-16 06:54:58 -06:00
setCgtBanner ( unicorn . getBanner ( ) )
print unicorn . getBanner ( )
print credits ( )
if cell : unicorn . setCell ( cell )
unicorn . show ( )
ha . qtExec ( )
else :
# Run in command line mode.
kiteSuccess = False
if quadPlace or annealingPlace :
loadGlobal = False
globalRoute = True
if quadPlace and annealingPlace :
annealingPlace = False
runMaukaTool = quadPlace or annealingPlace
if runMaukaTool :
nimbus = Nimbus . NimbusEngine . create ( cell )
if options . showConf : nimbus . printConfiguration ( )
if annealingPlace :
Cfg . getParamPercentage ( ' mauka.standardAnnealing ' ) . setBool ( True ) ;
if quadPlace :
metis = Metis . MetisEngine . create ( cell )
if options . showConf : metis . printConfiguration ( )
Metis . MetisEngine . doQuadriPart ( cell )
Mauka . MaukaEngine . regroupOverloadedGCells ( cell )
mauka = Mauka . MaukaEngine . create ( cell )
if options . showConf : mauka . printConfiguration ( )
mauka . run ( )
if detailRoute and not ( loadGlobal or globalRoute ) : globalRoute = True
runKiteTool = loadGlobal or globalRoute or detailRoute
if runKiteTool :
2013-12-03 19:57:21 -06:00
if loadGlobal : globalFlags = Kite . KtLoadGlobalRouting
else : globalFlags = Kite . KtBuildGlobalRouting
2012-11-16 06:54:58 -06:00
routingNets = [ ]
kite = Kite . KiteEngine . create ( cell )
2014-07-06 17:42:38 -05:00
if options . showConf : kite . printConfiguration ( )
2012-11-16 06:54:58 -06:00
kite . runGlobalRouter ( globalFlags )
if saveGlobal : kite . saveGlobalSolution ( )
if detailRoute :
2013-12-03 19:57:21 -06:00
kite . loadGlobalRouting ( Katabatic . EngineLoadGrByNet , routingNets )
kite . layerAssign ( Katabatic . EngineNoNetLayerAssign )
2012-11-16 06:54:58 -06:00
kite . runNegociate ( )
kiteSuccess = kite . getToolSuccess ( )
kite . finalizeLayout ( )
if options . dumpMeasures :
kite . dumpMeasures ( )
kite . destroy ( )
if options . saveDesign :
views = CRL . Catalog . State . Physical
if options . saveDesign != cell . getName ( ) :
cell . setName ( options . saveDesign )
views | = CRL . Catalog . State . Logical
af . saveCell ( cell , views )
sys . exit ( kiteSuccess )
except Exception , e :
print e
sys . exit ( 0 )