Various typos correction (courtesy of G. Gouvine).
This commit is contained in:
parent
f528cdea4c
commit
d69327d9a9
13
README.rst
13
README.rst
|
@ -5,20 +5,19 @@
|
||||||
Coriolis README
|
Coriolis README
|
||||||
===============
|
===============
|
||||||
|
|
||||||
|
Coriolis is a free database, placement tool and routing tool for VLSI design.
|
||||||
Coriolis is a free database, placement tool and routing tool for VLSI designs.
|
|
||||||
|
|
||||||
|
|
||||||
Purpose
|
Purpose
|
||||||
=======
|
=======
|
||||||
|
|
||||||
Coriolis provides several tools to perform the layout of VLSI circuits. Its
|
Coriolis provides several tools to perform the layout of VLSI circuits. Its
|
||||||
main components are the Hurricane database, the Etesian placer and the Kite
|
main components are the Hurricane database, the Etesian placer and the Katana
|
||||||
router, but other tools can use the Hurricane database and the parsers
|
router, but other tools can use the Hurricane database and the parsers
|
||||||
provided.
|
provided.
|
||||||
|
|
||||||
The user interface <cgt> is the prefered way to use Coriolis, but all
|
The user interface <cgt> is the prefered way to use Coriolis, but all
|
||||||
Coriolis tools are Python modules and thus scriptables.
|
Coriolis tools are Python modules and thus scriptable.
|
||||||
|
|
||||||
|
|
||||||
Documentation
|
Documentation
|
||||||
|
@ -33,7 +32,7 @@ The documentation of the latest *stable* version is also
|
||||||
available online. It may be quite outdated from the *devel*
|
available online. It may be quite outdated from the *devel*
|
||||||
version.
|
version.
|
||||||
|
|
||||||
https://soc-extras.lip6.fr/en/coriolis/coriolis2-users-guide/
|
https://www-soc.lip6.fr/sesi-docs/coriolis2-docs/coriolis2/en/latex/users-guide/UsersGuide.pdf
|
||||||
|
|
||||||
|
|
||||||
Building Coriolis
|
Building Coriolis
|
||||||
|
@ -85,8 +84,8 @@ The Coriolis main interface can be launched with the command: ::
|
||||||
|
|
||||||
ego@home:~: ~/coriolis-2.x/<OS>.<DISTRIB>/Release.Shared/install/bin/coriolis
|
ego@home:~: ~/coriolis-2.x/<OS>.<DISTRIB>/Release.Shared/install/bin/coriolis
|
||||||
|
|
||||||
The ``coriolis`` script is tasked to guess it's location and setup appropriatly
|
The ``coriolis`` script detects its location and setups the UNIX
|
||||||
the UNIX environment, then lauch ``cgt`` (or *any* command, with the
|
environment appropriately, then lauches ``cgt`` (or *any* command, with the
|
||||||
``--run=<COMMAND>`` option).
|
``--run=<COMMAND>`` option).
|
||||||
|
|
||||||
Conversely, you can setup the current shell environement for Coriolis by
|
Conversely, you can setup the current shell environement for Coriolis by
|
||||||
|
|
|
@ -380,7 +380,7 @@ Occurrence CHyperNetDriverPortOccurrences::Locator::getElement() const
|
||||||
{
|
{
|
||||||
if (_pinLocator.isValid())
|
if (_pinLocator.isValid())
|
||||||
return _pinLocator.getElement();
|
return _pinLocator.getElement();
|
||||||
return _plugOccurrenceLocator.getElement();
|
return _plugOccurrenceLocator.getElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
Locator<Occurrence>* CHyperNetDriverPortOccurrences::Locator::getClone() const
|
Locator<Occurrence>* CHyperNetDriverPortOccurrences::Locator::getClone() const
|
||||||
|
|
|
@ -537,13 +537,13 @@ extern "C" {
|
||||||
, { "addCellGauge" , (PyCFunction)PyAllianceFramework_addCellGauge , METH_VARARGS
|
, { "addCellGauge" , (PyCFunction)PyAllianceFramework_addCellGauge , METH_VARARGS
|
||||||
, "Add a new cell gauge." }
|
, "Add a new cell gauge." }
|
||||||
, { "getCellGauge" , (PyCFunction)PyAllianceFramework_getCellGauge , METH_VARARGS
|
, { "getCellGauge" , (PyCFunction)PyAllianceFramework_getCellGauge , METH_VARARGS
|
||||||
, "Get a cell gauge (whithout a name, return the default)." }
|
, "Get a cell gauge (without a name, return the default)." }
|
||||||
, { "matchCellGauge" , (PyCFunction)PyAllianceFramework_matchCellGauge , METH_VARARGS
|
, { "matchCellGauge" , (PyCFunction)PyAllianceFramework_matchCellGauge , METH_VARARGS
|
||||||
, "Find the first CellGauge comptible with width and height." }
|
, "Find the first CellGauge comptible with width and height." }
|
||||||
, { "addRoutingGauge" , (PyCFunction)PyAllianceFramework_addRoutingGauge , METH_VARARGS
|
, { "addRoutingGauge" , (PyCFunction)PyAllianceFramework_addRoutingGauge , METH_VARARGS
|
||||||
, "Add a new routing gauge." }
|
, "Add a new routing gauge." }
|
||||||
, { "getRoutingGauge" , (PyCFunction)PyAllianceFramework_getRoutingGauge , METH_VARARGS
|
, { "getRoutingGauge" , (PyCFunction)PyAllianceFramework_getRoutingGauge , METH_VARARGS
|
||||||
, "Get a routing gauge (whithout a name, return the default)." }
|
, "Get a routing gauge (without a name, return the default)." }
|
||||||
, { "setRoutingGauge" , (PyCFunction)PyAllianceFramework_setRoutingGauge , METH_VARARGS
|
, { "setRoutingGauge" , (PyCFunction)PyAllianceFramework_setRoutingGauge , METH_VARARGS
|
||||||
, "Select the default routing gauge." }
|
, "Select the default routing gauge." }
|
||||||
//, { "destroy" , (PyCFunction)PyAllianceFramework_destroy , METH_NOARGS
|
//, { "destroy" , (PyCFunction)PyAllianceFramework_destroy , METH_NOARGS
|
||||||
|
|
|
@ -335,7 +335,7 @@ def ScriptMain ( **kw ):
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
parser = optparse.OptionParser()
|
parser = optparse.OptionParser()
|
||||||
parser.add_option( '-c', '--cell', type='string', dest='cell' , help='The name of the chip to build, whithout extension.')
|
parser.add_option( '-c', '--cell', type='string', dest='cell' , help='The name of the chip to build, without extension.')
|
||||||
parser.add_option( '-v', '--verbose' , action='store_true', dest='verbose' , help='First level of verbosity.')
|
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( '-V', '--very-verbose' , action='store_true', dest='veryVerbose', help='Second level of verbosity.')
|
||||||
(options, args) = parser.parse_args()
|
(options, args) = parser.parse_args()
|
||||||
|
|
|
@ -274,6 +274,7 @@ namespace Etesian {
|
||||||
Super::_postCreate();
|
Super::_postCreate();
|
||||||
|
|
||||||
// Ugly: Name based detection of ISPD benchmarks.
|
// Ugly: Name based detection of ISPD benchmarks.
|
||||||
|
// Maybe base it on whether the imported library is in Bookshelf format or not?
|
||||||
if (getString(getCell()->getName()).substr(0,7) == "bigblue") {
|
if (getString(getCell()->getName()).substr(0,7) == "bigblue") {
|
||||||
cmess2 << " o ISPD benchmark <" << getCell()->getName()
|
cmess2 << " o ISPD benchmark <" << getCell()->getName()
|
||||||
<< ">, no feed cells will be added." << endl;
|
<< ">, no feed cells will be added." << endl;
|
||||||
|
@ -649,8 +650,6 @@ namespace Etesian {
|
||||||
_placementLB.positions_ = positions;
|
_placementLB.positions_ = positions;
|
||||||
_placementLB.orientations_ = orientations;
|
_placementLB.orientations_ = orientations;
|
||||||
_placementUB = _placementLB;
|
_placementUB = _placementLB;
|
||||||
//cerr << "Coloquinte cell height: " << _circuit.get_cell(0).size.y << endl;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -831,6 +830,7 @@ namespace Etesian {
|
||||||
|
|
||||||
int_t sliceHeight = getSliceHeight() / getHorizontalPitch();
|
int_t sliceHeight = getSliceHeight() / getHorizontalPitch();
|
||||||
roughLegalize(sliceHeight, options);
|
roughLegalize(sliceHeight, options);
|
||||||
|
// TODO: for uniform density distribution, add some margin to the cell sizes so we don't disrupt it during detailed placement
|
||||||
|
|
||||||
for ( int i=0; i<iterations; ++i ){
|
for ( int i=0; i<iterations; ++i ){
|
||||||
ostringstream label;
|
ostringstream label;
|
||||||
|
@ -838,7 +838,7 @@ namespace Etesian {
|
||||||
label << " [" << setw(3) << setfill('0') << i << "]";
|
label << " [" << setw(3) << setfill('0') << i << "]";
|
||||||
|
|
||||||
optimize_x_orientations( _circuit, _placementUB ); // Don't disrupt VDD/VSS connections in a row
|
optimize_x_orientations( _circuit, _placementUB ); // Don't disrupt VDD/VSS connections in a row
|
||||||
_progressReport1(label.str()+" Oriented ......." );
|
_progressReport1(label.str() + " Oriented ......." );
|
||||||
if(options & UpdateDetailed)
|
if(options & UpdateDetailed)
|
||||||
_updatePlacement( _placementUB );
|
_updatePlacement( _placementUB );
|
||||||
|
|
||||||
|
|
|
@ -176,9 +176,10 @@ namespace Hurricane {
|
||||||
void TransistorLayer::setExtentionWidth ( const BasicLayer* layer, DbU::Unit width )
|
void TransistorLayer::setExtentionWidth ( const BasicLayer* layer, DbU::Unit width )
|
||||||
{
|
{
|
||||||
for ( size_t i=0 ; i<_basicLayers.size() ; i++ ) {
|
for ( size_t i=0 ; i<_basicLayers.size() ; i++ ) {
|
||||||
if ( _basicLayers[i] == layer )
|
if ( _basicLayers[i] == layer ) {
|
||||||
_extentionWidths[i] = width;
|
_extentionWidths[i] = width;
|
||||||
_maximalExtentionWidth = max ( _maximalExtentionWidth, width );
|
_maximalExtentionWidth = max ( _maximalExtentionWidth, width );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -828,7 +828,7 @@ int main ( int argc, char *argv[] )
|
||||||
, "Set the level of trace, trace messages with a level superior to "
|
, "Set the level of trace, trace messages with a level superior to "
|
||||||
"<arg> will be printed on <stderr>." )
|
"<arg> will be printed on <stderr>." )
|
||||||
( "cell,c" , poptions::value<string>()
|
( "cell,c" , poptions::value<string>()
|
||||||
, "The name of the cell to load, whithout extension." )
|
, "The name of the cell to load, without extension." )
|
||||||
( "knik,k" , poptions::bool_switch(&knikSimple)->default_value(false)
|
( "knik,k" , poptions::bool_switch(&knikSimple)->default_value(false)
|
||||||
, "Perform a simple routing pass.")
|
, "Perform a simple routing pass.")
|
||||||
( "KNIK,K" , poptions::bool_switch(&knikOverflow)->default_value(false)
|
( "KNIK,K" , poptions::bool_switch(&knikOverflow)->default_value(false)
|
||||||
|
|
|
@ -48,5 +48,5 @@ AutoHorizontal/AutoVertical
|
||||||
|
|
||||||
* The local ``slacken()`` methods are, in fact AutoSegment::makeTopologyDogLeg().
|
* The local ``slacken()`` methods are, in fact AutoSegment::makeTopologyDogLeg().
|
||||||
|
|
||||||
* We now must be able to create AutoHorizontal/AutoContact whithout suppling
|
* We now must be able to create AutoHorizontal/AutoContact without suppling
|
||||||
the anchor AutoContacts. Allows more supple building constructions.
|
the anchor AutoContacts. Allows more supple building constructions.
|
||||||
|
|
|
@ -243,7 +243,7 @@ namespace {
|
||||||
//! function:
|
//! function:
|
||||||
//! <ul>
|
//! <ul>
|
||||||
//! <li>One global: nonsensical because there also must be a terminal.
|
//! <li>One global: nonsensical because there also must be a terminal.
|
||||||
//! <li>Two aligned globals: in that case we do a straight wire whithout
|
//! <li>Two aligned globals: in that case we do a straight wire without
|
||||||
//! any AutoContact (handled by the source/target of the wire).
|
//! any AutoContact (handled by the source/target of the wire).
|
||||||
//! </ul>
|
//! </ul>
|
||||||
//!
|
//!
|
||||||
|
|
|
@ -68,7 +68,7 @@ namespace Katana {
|
||||||
if ( _locator.isValid() ) {
|
if ( _locator.isValid() ) {
|
||||||
_element = Session::lookup( _locator.getElement()->getCanonical(bounds)->base() );
|
_element = Session::lookup( _locator.getElement()->getCanonical(bounds)->base() );
|
||||||
if ( !_element ) {
|
if ( !_element ) {
|
||||||
cerr << Bug("Canonical segment whithout TrackElement.") << endl;
|
cerr << Bug("Canonical segment without TrackElement.") << endl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ namespace Kite {
|
||||||
if ( _locator.isValid() ) {
|
if ( _locator.isValid() ) {
|
||||||
_element = Session::lookup( _locator.getElement()->getCanonical(bounds)->base() );
|
_element = Session::lookup( _locator.getElement()->getCanonical(bounds)->base() );
|
||||||
if ( !_element ) {
|
if ( !_element ) {
|
||||||
cerr << Bug("Canonical segment whithout TrackElement.") << endl;
|
cerr << Bug("Canonical segment without TrackElement.") << endl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ struct SegRecord {
|
||||||
struct NetSurfacesComp : public binary_function<const NetRecord, const NetRecord, bool> {
|
struct NetSurfacesComp : public binary_function<const NetRecord, const NetRecord, bool> {
|
||||||
public: bool operator() ( const NetRecord &record1, const NetRecord &record2 ) const {
|
public: bool operator() ( const NetRecord &record1, const NetRecord &record2 ) const {
|
||||||
if (record1._exArea < record2._exArea) return true;
|
if (record1._exArea < record2._exArea) return true;
|
||||||
if (record1._exArea == record1._exArea) {
|
if (record1._exArea == record2._exArea) {
|
||||||
if (getString(record1._net->getName()) < getString(record2._net->getName())) return true;
|
if (getString(record1._net->getName()) < getString(record2._net->getName())) return true;
|
||||||
if (record1._net == record2._net) assert ( false );
|
if (record1._net == record2._net) assert ( false );
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,9 +106,10 @@ void defiPath::clear() {
|
||||||
|
|
||||||
void defiPath::Destroy() {
|
void defiPath::Destroy() {
|
||||||
|
|
||||||
if (keys_)
|
if (keys_) {
|
||||||
free((char*)(keys_));
|
free((char*)(keys_));
|
||||||
keys_ = NULL;
|
keys_ = NULL;
|
||||||
|
}
|
||||||
if (data_) {
|
if (data_) {
|
||||||
clear();
|
clear();
|
||||||
free((char*)(data_));
|
free((char*)(data_));
|
||||||
|
|
|
@ -52,10 +52,10 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
parser = optparse.OptionParser(usage)
|
parser = optparse.OptionParser(usage)
|
||||||
parser.add_option( '--no-init' , action='store_true', dest='noInit' , help='Do not load any initialization.')
|
parser.add_option( '--no-init' , action='store_true', dest='noInit' , help='Do not load any initialization.')
|
||||||
parser.add_option( '-c', '--cell' , type='string' , dest='cell' , help='The name of the cell to load, whithout extension.')
|
parser.add_option( '-c', '--cell' , type='string' , dest='cell' , help='The name of the cell to load, without 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( '--acm-sigda-89' , type='string' , dest='acmSigdaName' , help='An ACM/SIGDA 89 bench name to load, without extension.')
|
||||||
parser.add_option( '--blif' , type='string' , dest='blifName' , help='A Blif (Yosys) design name to load, whithout extension.')
|
parser.add_option( '--blif' , type='string' , dest='blifName' , help='A Blif (Yosys) design name to load, without extension.')
|
||||||
parser.add_option( '--ispd-05' , type='string' , dest='ispd05name' , help='An ISPD 05 bench (placement) name to load, whithout extension.')
|
parser.add_option( '--ispd-05' , type='string' , dest='ispd05name' , help='An ISPD 05 bench (placement) name to load, without extension.')
|
||||||
parser.add_option( '-v', '--verbose' , action='store_true', dest='verbose' , help='First level of verbosity.')
|
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( '-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( '-i', '--info' , action='store_true', dest='info' , help='Display lots of informational messages.')
|
||||||
|
|
|
@ -137,7 +137,7 @@ int main ( int argc, char *argv[] )
|
||||||
( "dump-measures,M" , bopts::bool_switch(&dumpMeasures)->default_value(false)
|
( "dump-measures,M" , bopts::bool_switch(&dumpMeasures)->default_value(false)
|
||||||
, "Dump statistical measurements on the disk.")
|
, "Dump statistical measurements on the disk.")
|
||||||
( "cell,c" , bopts::value<string>()
|
( "cell,c" , bopts::value<string>()
|
||||||
, "The name of the cell to load, whithout extension." )
|
, "The name of the cell to load, without extension." )
|
||||||
( "save-design,s" , bopts::value<string>()
|
( "save-design,s" , bopts::value<string>()
|
||||||
, "Save the routed design.")
|
, "Save the routed design.")
|
||||||
( "export-def" , bopts::bool_switch(&exportDef)->default_value(false)
|
( "export-def" , bopts::bool_switch(&exportDef)->default_value(false)
|
||||||
|
@ -145,9 +145,9 @@ int main ( int argc, char *argv[] )
|
||||||
( "import-def" , bopts::value<string>()
|
( "import-def" , bopts::value<string>()
|
||||||
, "Import the design in DEF format.")
|
, "Import the design in DEF format.")
|
||||||
( "importk-ispd04-bk" , bopts::value<string>()
|
( "importk-ispd04-bk" , bopts::value<string>()
|
||||||
, "The name of the ISPD04 benchmark to import (Bookshelf .aux), whithout extension." )
|
, "The name of the ISPD04 benchmark to import (Bookshelf .aux), without extension." )
|
||||||
( "import-iccad04-def" , bopts::value<string>()
|
( "import-iccad04-def" , bopts::value<string>()
|
||||||
, "The name of the ICCAD04 benchmark to import (LEF/DEF), whithout extension." )
|
, "The name of the ICCAD04 benchmark to import (LEF/DEF), without extension." )
|
||||||
( "save-import" , bopts::bool_switch(&saveImport)->default_value(false)
|
( "save-import" , bopts::bool_switch(&saveImport)->default_value(false)
|
||||||
, "Save of the imported design immediatly after loading.");
|
, "Save of the imported design immediatly after loading.");
|
||||||
|
|
||||||
|
|
|
@ -102,10 +102,10 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
parser = optparse.OptionParser(usage)
|
parser = optparse.OptionParser(usage)
|
||||||
parser.add_option( '--no-init' , action='store_true', dest='noInit' , help='Do not load any initialization.')
|
parser.add_option( '--no-init' , action='store_true', dest='noInit' , help='Do not load any initialization.')
|
||||||
parser.add_option( '-c', '--cell' , type='string' , dest='cell' , help='The name of the cell to load, whithout extension.')
|
parser.add_option( '-c', '--cell' , type='string' , dest='cell' , help='The name of the cell to load, without 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( '--acm-sigda-89' , type='string' , dest='acmSigdaName' , help='An ACM/SIGDA 89 bench name to load, without extension.')
|
||||||
parser.add_option( '--blif' , type='string' , dest='blifName' , help='A Blif (Yosys) design name to load, whithout extension.')
|
parser.add_option( '--blif' , type='string' , dest='blifName' , help='A Blif (Yosys) design name to load, without extension.')
|
||||||
parser.add_option( '--ispd-05' , type='string' , dest='ispd05name' , help='An ISPD 05 bench (placement) name to load, whithout extension.')
|
parser.add_option( '--ispd-05' , type='string' , dest='ispd05name' , help='An ISPD 05 bench (placement) name to load, without extension.')
|
||||||
parser.add_option( '--script' , type='string' , dest='script' , help='Run a Python or Stratus script.')
|
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', '--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( '-V', '--very-verbose' , action='store_true', dest='veryVerbose' , help='Second level of verbosity.')
|
||||||
|
|
|
@ -659,10 +659,10 @@ namespace Bookshelf {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ordereds[0].empty() )
|
if ( ordereds[0].empty() )
|
||||||
throw Exception("Bookshelf::Parser(): .aux file do not contains <.nodes>.");
|
throw Exception("Bookshelf::Parser(): .aux file does not contains <.nodes>.");
|
||||||
|
|
||||||
if ( ordereds[1].empty() )
|
if ( ordereds[1].empty() )
|
||||||
throw Exception("Bookshelf::Parser(): .aux file do not contains <.nets>.");
|
throw Exception("Bookshelf::Parser(): .aux file does not contains <.nets>.");
|
||||||
|
|
||||||
for ( size_t iext=0 ; iext<5 ; ++iext ) {
|
for ( size_t iext=0 ; iext<5 ; ++iext ) {
|
||||||
if ( ordereds[iext].empty() ) continue;
|
if ( ordereds[iext].empty() ) continue;
|
||||||
|
|
Loading…
Reference in New Issue