2018-06-06 11:42:26 -05:00
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0//EN'>
< html >
< head >
< meta http-equiv = "Content-Type" content = "text/html;charset=iso-8859-1" >
< title > Kite - Detailed Router< / title >
< script type = "text/javascript" src = "jquery.js" > < / script >
< script type = "text/javascript" src = "dynsections.js" > < / script >
< link href = "SoC.css" rel = "stylesheet" type = "text/css" >
< link href = "tabs.css" rel = "stylesheet" type = "text/css" >
< / head >
< h1 id = "pagetop" class = "header" > Kite - Detailed Router< / h1 >
<!--
< center class = "header" >
< table class = "header" >
< tr >
< td > < a href = "customSummary.html" > Summary< / a > < / td >
< td > < a href = "namespaces.html" > Namespaces< / a > < / td >
< td > < a href = "customHierarchy.html" > Class Hierarchy< / a > < / td >
< td > < a href = "annotated.html" > Classes< / a > < / td >
< td > < a href = "functions.html" > Member Index< / a > < / td >
< / tr >
< / table >
< / center >
-->
< br >
< body onload = "javascript:toggleLevel(1)" >
2018-10-18 11:10:01 -05:00
<!-- Generated by Doxygen 1.8.14 -->
< script type = "text/javascript" src = "menudata.js" > < / script >
< script type = "text/javascript" src = "menu.js" > < / script >
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */< / script >
< div id = "main-nav" > < / div >
2018-06-06 11:42:26 -05:00
< div id = "nav-path" class = "navpath" >
< ul >
< li class = "navelem" > < a class = "el" href = "namespaceKite.html" > Kite< / a > < / li > < li class = "navelem" > < a class = "el" href = "classKite_1_1RoutingEventLoop.html" > RoutingEventLoop< / a > < / li > < / ul >
< / div >
< / div > <!-- top -->
< div class = "header" >
< div class = "summary" >
< a href = "#pub-methods" > Public Member Functions< / a > |
< a href = "classKite_1_1RoutingEventLoop-members.html" > List of all members< / a > < / div >
< div class = "headertitle" >
< div class = "title" > RoutingEventLoop Class Reference< / div > < / div >
< / div > <!-- header -->
< div class = "contents" >
< p > Simple loop dectector for < a class = "el" href = "classKite_1_1RoutingEvent.html" title = "Atomic Placement Request for a TrackSegment. " > RoutingEvent< / a > .
< a href = "classKite_1_1RoutingEventLoop.html#details" > More...< / a > < / p >
< table class = "memberdecls" >
< tr class = "heading" > < td colspan = "2" > < h2 class = "groupheader" > < a name = "pub-methods" > < / a >
Public Member Functions< / h2 > < / td > < / tr >
< tr class = "memitem:aa33efa06ccc2175e35eff7ac6dadffb6" > < td class = "memItemLeft" align = "right" valign = "top" >   < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "classKite_1_1RoutingEventLoop.html#aa33efa06ccc2175e35eff7ac6dadffb6" > RoutingEventLoop< / a > (size_t depth=10, int limit=20)< / td > < / tr >
< tr class = "separator:aa33efa06ccc2175e35eff7ac6dadffb6" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
2018-10-18 11:10:01 -05:00
< tr class = "memitem:a78155a2b0119ac92d377fa404e348a98" > < td class = "memItemLeft" align = "right" valign = "top" > bool  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "classKite_1_1RoutingEventLoop.html#a78155a2b0119ac92d377fa404e348a98" > isLooping< / a > () const< / td > < / tr >
< tr class = "separator:a78155a2b0119ac92d377fa404e348a98" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a5744f7f01d26947fb0765bc5d1e2c3bd" > < td class = "memItemLeft" align = "right" valign = "top" > int  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "classKite_1_1RoutingEventLoop.html#a5744f7f01d26947fb0765bc5d1e2c3bd" > getMaxCount< / a > () const< / td > < / tr >
< tr class = "separator:a5744f7f01d26947fb0765bc5d1e2c3bd" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a7411a9e20edba3f3eeceb237dec86ff3" > < td class = "memItemLeft" align = "right" valign = "top" > const std::vector< Element > &   < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "classKite_1_1RoutingEventLoop.html#a7411a9e20edba3f3eeceb237dec86ff3" > getElements< / a > () const< / td > < / tr >
< tr class = "separator:a7411a9e20edba3f3eeceb237dec86ff3" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
2018-06-06 11:42:26 -05:00
< tr class = "memitem:ad684b7c05480897bdbd86a5fb8363c72" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "classKite_1_1RoutingEventLoop.html#ad684b7c05480897bdbd86a5fb8363c72" > update< / a > (size_t id)< / td > < / tr >
< tr class = "separator:ad684b7c05480897bdbd86a5fb8363c72" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a9b6582ce996327c65bf532396ca11b61" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "classKite_1_1RoutingEventLoop.html#a9b6582ce996327c65bf532396ca11b61" > erase< / a > (size_t id)< / td > < / tr >
< tr class = "separator:a9b6582ce996327c65bf532396ca11b61" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< / table >
< a name = "details" id = "details" > < / a > < h2 class = "groupheader" > Detailed Description< / h2 >
< div class = "textblock" > < p > Simple loop dectector for < a class = "el" href = "classKite_1_1RoutingEvent.html" title = "Atomic Placement Request for a TrackSegment. " > RoutingEvent< / a > . < / p >
< p > The < a class = "el" href = "classKite_1_1RoutingEventLoop.html" title = "Simple loop dectector for RoutingEvent. " > RoutingEventLoop< / a > can be roughly understood as a truncated histogram of the < code > depth< / code > last (in the time meaning) greatest riped up elements.< / p >
2018-10-18 11:10:01 -05:00
< p > The loop detector keep track of the < code > depth< / code > < a class = "el" href = "classKite_1_1TrackElement.html" title = "Abstract Class for all Elements inserted inside a Track. " > TrackElement< / a > with the greatest processing count. < a class = "el" href = "classKite_1_1TrackElement.html" title = "Abstract Class for all Elements inserted inside a Track. " > TrackElement< / a > are just identified through the < code > id< / code > of their associated AutoSegment. Each entry in the loop table contains:< / p > < ul >
2018-06-06 11:42:26 -05:00
< li > The < code > id< / code > of the associated < a class = "el" href = "classKite_1_1TrackSegment.html" title = "Derived Katabatic::AutoSegment for the router. " > TrackSegment< / a > (< a class = "elRef" doxygen = "/dsk/l1/jpc/coriolis-2.x/src/coriolis/katabatic/doc/html/katabatic.tag:../katabatic/" href = "../katabatic/classKatabatic_1_1AutoSegment.html" > Katabatic::AutoSegment< / a > ).< / li >
< li > The < code > count< / code > of times it has been processed< / li >
< li > The < code > timestamp< / code > of the latest time it has been updated.< / li >
< / ul >
< p > The table (implemented as < code > vector< > < / code > ) it kept sorted on the timestamp (decreasing). Whenever there is more than < code > depth< / code > elements in the table, the oldest one are discarted (regardless of their count). Obviously, there are pathological cases into which a loop cannot be detected, but so far it has not happened so a more robust approach seems not necessary at this time.< / p >
< p > Whenever the count of an element reaches < code > countLimit< / code > , the looping flag is set. It will remains set unless the faulty element is manually removed. < / p >
< / div > < h2 class = "groupheader" > Constructor & Destructor Documentation< / h2 >
2018-10-18 11:10:01 -05:00
< a id = "aa33efa06ccc2175e35eff7ac6dadffb6" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#aa33efa06ccc2175e35eff7ac6dadffb6" > ◆ < / a > < / span > RoutingEventLoop()< / h2 >
2018-06-06 11:42:26 -05:00
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > < a class = "el" href = "classKite_1_1RoutingEventLoop.html" > RoutingEventLoop< / a > < / td >
< td > (< / td >
< td class = "paramtype" > size_t  < / td >
< td class = "paramname" > < em > depth< / em > = < code > 10< / code > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > int  < / td >
< td class = "paramname" > < em > countLimit< / em > = < code > 20< / code >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Construct a loop detector that handle < code > depth< / code > differents segments and has a looping threshold of < code > countLimit< / code > . < / p >
< / div >
< / div >
< h2 class = "groupheader" > Member Function Documentation< / h2 >
2018-10-18 11:10:01 -05:00
< a id = "a78155a2b0119ac92d377fa404e348a98" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a78155a2b0119ac92d377fa404e348a98" > ◆ < / a > < / span > isLooping()< / h2 >
2018-06-06 11:42:26 -05:00
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > bool isLooping < / td >
< td > (< / td >
< td class = "paramname" > < / td > < td > )< / td >
< td > const< / td >
< / tr >
< / table >
< / td >
< td class = "mlabels-right" >
< span class = "mlabels" > < span class = "mlabel" > inline< / span > < / span > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > < b > Returns:< / b > < b > true< / b > if the loop threshold has been reached for at least one element. < / p >
2018-10-18 11:10:01 -05:00
< p class = "reference" > Referenced by < a class = "el" href = "classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f" > RoutingEvent::process()< / a > .< / p >
2018-06-06 11:42:26 -05:00
< / div >
< / div >
2018-10-18 11:10:01 -05:00
< a id = "a5744f7f01d26947fb0765bc5d1e2c3bd" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a5744f7f01d26947fb0765bc5d1e2c3bd" > ◆ < / a > < / span > getMaxCount()< / h2 >
2018-06-06 11:42:26 -05:00
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > int getMaxCount < / td >
< td > (< / td >
< td class = "paramname" > < / td > < td > )< / td >
< td > const< / td >
< / tr >
< / table >
< / td >
< td class = "mlabels-right" >
< span class = "mlabels" > < span class = "mlabel" > inline< / span > < / span > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > The maximal count an element as reached so far. < / p >
2018-10-18 11:10:01 -05:00
< p class = "reference" > Referenced by < a class = "el" href = "classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f" > RoutingEvent::process()< / a > .< / p >
2018-06-06 11:42:26 -05:00
< / div >
< / div >
2018-10-18 11:10:01 -05:00
< a id = "a7411a9e20edba3f3eeceb237dec86ff3" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a7411a9e20edba3f3eeceb237dec86ff3" > ◆ < / a > < / span > getElements()< / h2 >
2018-06-06 11:42:26 -05:00
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > const std::vector< Element > & getElements < / td >
< td > (< / td >
< td class = "paramname" > < / td > < td > )< / td >
< td > const< / td >
< / tr >
< / table >
< / td >
< td class = "mlabels-right" >
< span class = "mlabels" > < span class = "mlabel" > inline< / span > < / span > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > The complete table elements. < / p >
2018-10-18 11:10:01 -05:00
< p class = "reference" > Referenced by < a class = "el" href = "classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f" > RoutingEvent::process()< / a > .< / p >
2018-06-06 11:42:26 -05:00
< / div >
< / div >
2018-10-18 11:10:01 -05:00
< a id = "ad684b7c05480897bdbd86a5fb8363c72" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#ad684b7c05480897bdbd86a5fb8363c72" > ◆ < / a > < / span > update()< / h2 >
2018-06-06 11:42:26 -05:00
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void update < / td >
< td > (< / td >
< td class = "paramtype" > size_t  < / td >
< td class = "paramname" > < em > id< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Update the loop, telling that element < code > id< / code > has appreared one more time. < / p >
2018-10-18 11:10:01 -05:00
< p class = "reference" > Referenced by < a class = "el" href = "classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f" > RoutingEvent::process()< / a > .< / p >
2018-06-06 11:42:26 -05:00
< / div >
< / div >
2018-10-18 11:10:01 -05:00
< a id = "a9b6582ce996327c65bf532396ca11b61" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a9b6582ce996327c65bf532396ca11b61" > ◆ < / a > < / span > erase()< / h2 >
2018-06-06 11:42:26 -05:00
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void erase < / td >
< td > (< / td >
< td class = "paramtype" > size_t  < / td >
< td class = "paramname" > < em > id< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Remove the entry related to element < code > id< / code > in the table. The state of the table is fully recomputed after the removal (looping flag & maximum count).< / p >
< p > This method is used when a loop has been encountered, presumably on element < code > id< / code > , and we want to continue. To avoid the loop detector yelling at each check, the associated < a class = "el" href = "classKite_1_1TrackElement.html" title = "Abstract Class for all Elements inserted inside a Track. " > TrackElement< / a > should be invalidated and it's reference removed from the table. < / p >
2018-10-18 11:10:01 -05:00
< p class = "reference" > Referenced by < a class = "el" href = "classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f" > RoutingEvent::process()< / a > .< / p >
2018-06-06 11:42:26 -05:00
< / div >
< / div >
< hr / > The documentation for this class was generated from the following files:< ul >
< li > < a class = "el" href = "RoutingEventLoop_8h_source.html" > RoutingEventLoop.h< / a > < / li >
< li > RoutingEventLoop.cpp< / li >
< li > RoutingEventLoop.dox< / li >
< / ul >
< / div > <!-- contents -->
< br >
< hr >
< table class = "footer1" >
< tr >
Migrating the initialisation system to be completely Python-like.
* New: In bootstrap/coriolisEnv.py, add the "etc" directory to the
PYTHONPATH as initialization are now Python modules.
* New: In Hurricane/analogic, first groundwork for the integration of
PIP/MIM/MOM multi-capacitors. Add C++ and Python interface for the
allocation matrix and the list of capacities values.
* Change: In Hurricane::RegularLayer, add a layer parameter to the
constructor so the association between the RegularLayer and it's
BasicLayer can readily be done.
* Change: In Hurricane::Layer, add a new getCut() accessor to get the
cut layer in ViaLayer.
* Change: In Hurricane::DataBase::get(), the Python wrapper should no
longer consider an error if the data-base has not been created yet.
Just return None.
* Bug: In Isobar::PyLayer::getEnclosure() wrapper, if the overall
enclosure is requested, pass the right parameter to the C++ function.
* Change: In AllianceFramework, make public _bindLibraries() and export
it to the Python interface.
* Change: In AllianceFramework::create(), do not longer call bindLibraries().
This now must be done explicitely and afterwards.
* Change: In AllianceFramework::createLibrary() and
Environement::addSYSTEM_LIBRARY(), minor bug corrections that I don't
recall.
* Change: In SearchPath::prepend(), set the selected index to zero and
return it.
* Change: In CRL::System CTOR, add "etc" to the PYTHONPATH as the
configuration files are now organized as Python modules.
* New: In PyCRL, export the CRL::System singleton, it's creation is no
longer triggered by the one of AllianceFramework.
* New: In CRL/etc/, convert most of the configuration files into the
Python module format. For now, keep the old ".conf", but that are no
longer used.
For the real technologies, we cannot keep the directory name as
"180" or "45" as it not allowed by Python syntax, so we create "node180"
or "node45" instead.
Most of the helpers and coriolisInit.py are no longer used now.
To be removed in future commits after being sure that everything
works...
* Bug: In AutoSegment::makeDogleg(AutoContact*), the layer of the contacts
where badly computed when one end of the original segment was attached
to a non-preferred direction segment (mostly on terminal contacts).
Now use the new AutoContact::updateLayer() method.
* Bug: In Dijkstra::load(), limit symetric search area only if the net
is a symmetric one !
* Change: In Katana/python/katanaInit.py, comply with the new initialisation
scheme.
* Change: In Unicorn/cgt.py, comply to the new inititalization scheme.
* Change: In cumulus various Python scripts remove the call to
helpers.staticInitialization() as they are not needed now (we run in
only *one* interpreter, so we correctly share all init).
In plugins/__init__.py, read the new NDA directory variable.
* Bug: In cumulus/plugins/Chip.doCoronafloorplan(), self.railsNb was not
correctly managed when there was no clock.
* Change: In cumulus/plugins/Configuration.coronaContactArray(), compute
the viaPitch from the technology instead of the hard-coded 4.0 lambdas.
In Configuration.loadConfiguration(), read the "ioring.py" from
the new user's settings module.
* Bug: In stratus.dpgen_ADSB2F, gives coordinates translated into DbU to
the XY functions.
In st_model.Save(), use the VstUseConcat flag to get correct VST files.
In st_net.hur_net(), when a net is POWER/GROUND or CLOCK also make it
global.
* Change: In Oroshi/python/WIP_Transistor.py, encapsulate the generator
inside a try/except block to get prettier error (and stop at the first).
2019-10-28 12:09:14 -05:00
< td class = "LFooter" > < small > Generated by doxygen 1.8.14 on Mon Oct 28 2019< / small > < / td >
2018-06-06 11:42:26 -05:00
< td class = "RFooter" > < a href = '#pagetop' > < small > Return to top of page< / small > < / a > < / td >
< / tr >
< / table >
< table class = "footer2" >
< tr >
< td class = "LFooter" > Kite - Detailed Router< / td >
< td class = "RFooter" > < small > Copyright © 2008-2016 UPMC. All rights reserved< / small > < / td >
< / tr >
< / table >
< / body >
< / html >