2014-05-27 08:40:42 -05:00
|
|
|
# -*- Mode:Python; explicit-buffer-name: "kite.conf<vsc200>" -*-
|
|
|
|
|
|
|
|
import helpers
|
|
|
|
|
|
|
|
# Contains the layout (shared by all technologies).
|
|
|
|
execfile( helpers.sysConfDir+'/common/kite.conf' )
|
2012-11-16 06:49:47 -06:00
|
|
|
|
|
|
|
|
|
|
|
parametersTable = \
|
In CRL, update real conf. files. Smarter management of pin in LEF parser.
* Change: In CRL Core, etc/, update the configuration files of real
technologies. Mostly for FreePDK 45. This work is also done for
AMS c35b4 (350nm) but in a private (SoC) git repository.
Added a new parameter 'lefImport.minTerminalwidth' for the
minimum size (width) of a metal1 terminal in standard cells.
Corrected bug of the minimum trace level which must be
initialized to a great value and *not* zero;
* Change: In CRL Core, BlifParser, detect when there is no tie low
or tie high defined, issue an error (connexion left open) but
continue.
* New: In CRL::RoutingLayerGauge, new overlad of getTrackPosition()
with the parameter set of getTrackIndex(). Used to know if a
terminal is on-grid or not.
* New: In CRL::LefImport, smarter management of metal1 pins. Adds a
_pinPostProcess() function to select the external components
among the various shapes. If the gauge is VH, all the pin rectangles
are translateds into vertical segments (even if the metal1 gauge
says the tracks are horizontals).
The _pinPostProcess() function adds as external components of
a net, only the segments of a sufficent width as given in
'lefImport.minTerminalWidth' and that are on-grid.
2018-01-06 09:18:33 -06:00
|
|
|
( ('lefImport.minTerminalWidth' ,TypeDouble ,0.0 )
|
|
|
|
, ("katabatic.globalLengthThreshold",TypeInt ,1450 ) # Katabatic parameters.
|
2014-05-27 08:40:42 -05:00
|
|
|
, ("katabatic.saturateRatio" ,TypePercentage,80 )
|
|
|
|
, ("katabatic.saturateRp" ,TypeInt ,8 )
|
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
|
|
|
, ('katabatic.topRoutingLayer' ,TypeString , 'METAL5')
|
2012-11-16 06:49:47 -06:00
|
|
|
# Kite parameters.
|
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
|
|
|
, ("kite.hTracksReservedLocal" ,TypeInt ,4 , { 'min':0, 'max':18 } )
|
|
|
|
, ("kite.vTracksReservedLocal" ,TypeInt ,3 , { 'min':0, 'max':18 } )
|
|
|
|
, ("kite.eventsLimit" ,TypeInt ,4000002 )
|
|
|
|
, ("kite.ripupCost" ,TypeInt ,3 , { 'min':0 } )
|
|
|
|
, ("kite.strapRipupLimit" ,TypeInt ,16 , { 'min':1 } )
|
|
|
|
, ("kite.localRipupLimit" ,TypeInt ,9 , { 'min':1 } )
|
|
|
|
, ("kite.globalRipupLimit" ,TypeInt ,5 , { 'min':1 } )
|
|
|
|
, ("kite.longGlobalRipupLimit" ,TypeInt ,5 , { 'min':1 } )
|
Corrections in the Dijkstra global routing (ripup) mechanism.
* Bug: In Anabatic::Dijkstra, the degree of a vertex (the number of neighbors
belonging to the same net) was miscalculated. This was leading, in the
materialize step to some feed-through vertexes not being broken.
Leading in turn to incomplete transformation of the detailed routing.
Also in _trackback(), the degree of the first vertex we were backtracking
from was not incremented.
* Bug: In Anabatic::Dijkstra::materialize(), systematically use
GCell::breakGoThrough() on both source and target. This is needed when
we are in the ripup phase as both source and target can be go-through.
This was also leading to incomplete detailed routing transformation.
* Change: In Anabatic::Edge::ripup(), ripup one third of the segments instead
of thoses exeeding the global length threshold. This way we are sure to
desaturate an edge. Needs to be further calibrated.
* Change: In Aanabatic::GCell::breakGoThrough(), no longer return NULL.
Return existing gcontact if any. Break if it is a go-through and create
a new gcontact in last resort. Maybe rename this function.
* New: In Anabatic::Configuration, new parameters:
- anabatic.edgeHScaling, to adjust the length of the horizontal edges
relative to the vertical ones (this is a ratio).
- anabatic.globalIterations, set the maximum number of ripup passes
of the global router.
* New: In CRL/etc/*/kite.conf, added new parameters anabatic.edgeHScaling
and anabatic.globalIterations.
* New: In Katana::GlobalRoute::DigitalDistance, take into account the new
edgeHScaling factor. Must be used when the capacity of V-edges differs
greatly for H-edges (case of AMS 350nm c35b4 for instance).
* Bug: In Katana::GlobalRoute::DigitalDistance, the historic cost is
computed for an edge length of "1". Must be multiplicated by the
current edge length to have any measurable effect.
This bug is finally explaining why the ripup was producing the
same solutions over and over, the historical cost was negligible!
2018-04-16 05:10:48 -05:00
|
|
|
, ("anabatic.edgeHScaling" ,TypeDouble ,1.0 )
|
|
|
|
, ("anabatic.globalIterations" ,TypeInt ,10 , { 'min':1, 'max':100 } )
|
2012-11-16 06:49:47 -06:00
|
|
|
)
|
New coriolis launcher. Configuration files cleanup.
* Change: In CRL Core, simplify the loading sequence. The technology,
both symbolic and real is now loaded directly from coriolisInit.py
and not through the Alliance loader. This was a leftover from the
time configuration was in XML. Remove others traces of XML loading.
Remove SYMB_TECHNO_NAME, REAL_TECHNO_NAME & DISPLAY from the Alliance
environement, as they was no longer used.
Note that technology *still* need to be loader *after* Alliance
framework has been initialized.
Gauge information is moved from <alliance.conf> to <kite.conf>.
* Bug: In Coloquinte, in optimization_subproblems.cxx static variables
must not be inlined. Generate a problem when linking in debug mode
(seems the symbol gets optimised out).
* Bug: In Katabatic, in Grid::getGCell(), when the coordinate is *outside*
the area, do not try to find a GCell, directly return NULL.
* New: In Unicorn, create a generic command launcher named "coriolis" which
automatically take cares of all environement setup, then run a command
by default, it's <cgt>, but it can be anything. For example: <zsh>.
2015-04-13 11:54:09 -05:00
|
|
|
|
|
|
|
|
|
|
|
# Format of routingGaugesTable (dictionary):
|
|
|
|
# A list of entry of the form:
|
2016-04-13 11:18:43 -05:00
|
|
|
# ( METAL_NAME, (Direction, Type, depth, density, offset, pitch, wire_width, via_width, obs_dw) )
|
Support for Net alias names. Blif parser enhancements.
* New: In Hurricane, In Net & Cell, support for Net aliases names.
Use a structure based on a simple ring of NetAliasHook. The Net
holds a global map, sorted by names of all the aliases of all Nets.
Elements NetAliasesHook of the map are slaves of ring whose master
is an attribute of the Net (it is *not* in the map, as the primary
name of the Net).
In case of merge, the aliases of both Nets are merged and the
name of the merged one become an alias.
The Cell::getNet() looks in both the Net map and the aliases to
find a Net by name.
* Bug: In CRL Core, in coriolisInit.py, reoder the loading of the
configuration files so the real technology is read as early as
possible to set up the <gridsPerLambda> factor before any lambda
is actually computed...
* Bug: In CRL Core, in AcmSigda, do not try to fed the file when it
has failed to be opened. Throw a clean exception instead.
* New: In CRL Core, in Toolbox, add a NamingScheme object to convert
a design into VHDL compliant names (mainly from Blif/Verilog).
This is extensible in any case.
* New: In CRL Core, in BlifParser, slightly more informative warning
messages. Align the loading progress information on the other
parsers.
Add a capability to select which component of the design will
be returned, if there are more than one. Use the "." as separator.
For exemple you can request "Processor.Alu", which will load
the "Alu" component from the design in "Processor.blif".
To be able to save a Blif loaded design, systematically convert
all the name for VHDL compliance, as it is the format used by
the Coriolis native files (vst).
Export the Blif parser to the Python interface.
* New: In Kite, In NegociateWindow, add a counter of the number of
remaining events. Gives an idea of the ETA...
* New: In Unicorn, in cgt.by, add an option to load a Blif design from
the command line.
* New: In Cumulus, new RSave plugin to save both netlist & layout.
Partly redundant with the previous one. Have to better organize
that later.
2015-04-16 08:40:02 -05:00
|
|
|
|
New coriolis launcher. Configuration files cleanup.
* Change: In CRL Core, simplify the loading sequence. The technology,
both symbolic and real is now loaded directly from coriolisInit.py
and not through the Alliance loader. This was a leftover from the
time configuration was in XML. Remove others traces of XML loading.
Remove SYMB_TECHNO_NAME, REAL_TECHNO_NAME & DISPLAY from the Alliance
environement, as they was no longer used.
Note that technology *still* need to be loader *after* Alliance
framework has been initialized.
Gauge information is moved from <alliance.conf> to <kite.conf>.
* Bug: In Coloquinte, in optimization_subproblems.cxx static variables
must not be inlined. Generate a problem when linking in debug mode
(seems the symbol gets optimised out).
* Bug: In Katabatic, in Grid::getGCell(), when the coordinate is *outside*
the area, do not try to find a GCell, directly return NULL.
* New: In Unicorn, create a generic command launcher named "coriolis" which
automatically take cares of all environement setup, then run a command
by default, it's <cgt>, but it can be anything. For example: <zsh>.
2015-04-13 11:54:09 -05:00
|
|
|
routingGaugesTable = {}
|
|
|
|
|
|
|
|
routingGaugesTable['vsclib'] = \
|
2016-04-13 11:18:43 -05:00
|
|
|
( ( 'METAL1', ( Gauge.Vertical , Gauge.PinOnly, 0, 0.0, 4, 8, 3, 2, 6.5 ) )
|
|
|
|
, ( 'METAL2', ( Gauge.Horizontal, Gauge.Default, 1, 7.0, 0, 8, 4, 2, 6 ) )
|
|
|
|
, ( 'METAL3', ( Gauge.Vertical , Gauge.Default, 2, 0.0, 4, 8, 4, 2, 6 ) )
|
|
|
|
, ( 'METAL4', ( Gauge.Horizontal, Gauge.Default, 3, 0.0, 0, 8, 4, 2, 6 ) )
|
|
|
|
, ( 'METAL5', ( Gauge.Vertical , Gauge.Default, 4, 0.0, 4, 8, 4, 2, 6 ) )
|
|
|
|
#, ( 'METAL6', ( Gauge.Horizontal, Gauge.Default, 5, 0.0, 0, 8, 4, 2, 6 ) )
|
|
|
|
#, ( 'METAL7', ( Gauge.Vertical , Gauge.Default, 6, 0.0, 4, 8, 4, 2, 6 ) )
|
New coriolis launcher. Configuration files cleanup.
* Change: In CRL Core, simplify the loading sequence. The technology,
both symbolic and real is now loaded directly from coriolisInit.py
and not through the Alliance loader. This was a leftover from the
time configuration was in XML. Remove others traces of XML loading.
Remove SYMB_TECHNO_NAME, REAL_TECHNO_NAME & DISPLAY from the Alliance
environement, as they was no longer used.
Note that technology *still* need to be loader *after* Alliance
framework has been initialized.
Gauge information is moved from <alliance.conf> to <kite.conf>.
* Bug: In Coloquinte, in optimization_subproblems.cxx static variables
must not be inlined. Generate a problem when linking in debug mode
(seems the symbol gets optimised out).
* Bug: In Katabatic, in Grid::getGCell(), when the coordinate is *outside*
the area, do not try to find a GCell, directly return NULL.
* New: In Unicorn, create a generic command launcher named "coriolis" which
automatically take cares of all environement setup, then run a command
by default, it's <cgt>, but it can be anything. For example: <zsh>.
2015-04-13 11:54:09 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# Format of cellGaugesTable (dictionary):
|
|
|
|
# A list of entry of the form:
|
|
|
|
# ( METAL_PIN, xy_common_pitch, slice_height, slice_step )
|
|
|
|
|
|
|
|
cellGaugesTable = {}
|
|
|
|
cellGaugesTable['vsclib'] = ('metal2', 8.0, 72.0, 8.0)
|
|
|
|
|