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 is a free database, placement tool and routing tool for VLSI designs.
|
||||
Coriolis is a free database, placement tool and routing tool for VLSI design.
|
||||
|
||||
|
||||
Purpose
|
||||
=======
|
||||
|
||||
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
|
||||
provided.
|
||||
|
||||
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
|
||||
|
@ -33,7 +32,7 @@ The documentation of the latest *stable* version is also
|
|||
available online. It may be quite outdated from the *devel*
|
||||
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
|
||||
|
@ -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
|
||||
|
||||
The ``coriolis`` script is tasked to guess it's location and setup appropriatly
|
||||
the UNIX environment, then lauch ``cgt`` (or *any* command, with the
|
||||
The ``coriolis`` script detects its location and setups the UNIX
|
||||
environment appropriately, then lauches ``cgt`` (or *any* command, with the
|
||||
``--run=<COMMAND>`` option).
|
||||
|
||||
Conversely, you can setup the current shell environement for Coriolis by
|
||||
|
|
|
@ -537,13 +537,13 @@ extern "C" {
|
|||
, { "addCellGauge" , (PyCFunction)PyAllianceFramework_addCellGauge , METH_VARARGS
|
||||
, "Add a new cell gauge." }
|
||||
, { "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
|
||||
, "Find the first CellGauge comptible with width and height." }
|
||||
, { "addRoutingGauge" , (PyCFunction)PyAllianceFramework_addRoutingGauge , METH_VARARGS
|
||||
, "Add a new routing gauge." }
|
||||
, { "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
|
||||
, "Select the default routing gauge." }
|
||||
//, { "destroy" , (PyCFunction)PyAllianceFramework_destroy , METH_NOARGS
|
||||
|
|
|
@ -335,7 +335,7 @@ def ScriptMain ( **kw ):
|
|||
|
||||
if __name__ == '__main__':
|
||||
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', '--very-verbose' , action='store_true', dest='veryVerbose', help='Second level of verbosity.')
|
||||
(options, args) = parser.parse_args()
|
||||
|
|
|
@ -274,6 +274,7 @@ namespace Etesian {
|
|||
Super::_postCreate();
|
||||
|
||||
// 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") {
|
||||
cmess2 << " o ISPD benchmark <" << getCell()->getName()
|
||||
<< ">, no feed cells will be added." << endl;
|
||||
|
@ -649,8 +650,6 @@ namespace Etesian {
|
|||
_placementLB.positions_ = positions;
|
||||
_placementLB.orientations_ = orientations;
|
||||
_placementUB = _placementLB;
|
||||
//cerr << "Coloquinte cell height: " << _circuit.get_cell(0).size.y << endl;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -831,6 +830,7 @@ namespace Etesian {
|
|||
|
||||
int_t sliceHeight = getSliceHeight() / getHorizontalPitch();
|
||||
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 ){
|
||||
ostringstream label;
|
||||
|
@ -838,7 +838,7 @@ namespace Etesian {
|
|||
label << " [" << setw(3) << setfill('0') << i << "]";
|
||||
|
||||
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)
|
||||
_updatePlacement( _placementUB );
|
||||
|
||||
|
|
|
@ -176,11 +176,12 @@ namespace Hurricane {
|
|||
void TransistorLayer::setExtentionWidth ( const BasicLayer* layer, DbU::Unit width )
|
||||
{
|
||||
for ( size_t i=0 ; i<_basicLayers.size() ; i++ ) {
|
||||
if ( _basicLayers[i] == layer )
|
||||
if ( _basicLayers[i] == layer ) {
|
||||
_extentionWidths[i] = width;
|
||||
_maximalExtentionWidth = max ( _maximalExtentionWidth, width );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void TransistorLayer::_onDbuChange ( float scale )
|
||||
|
|
|
@ -828,7 +828,7 @@ int main ( int argc, char *argv[] )
|
|||
, "Set the level of trace, trace messages with a level superior to "
|
||||
"<arg> will be printed on <stderr>." )
|
||||
( "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)
|
||||
, "Perform a simple routing pass.")
|
||||
( "KNIK,K" , poptions::bool_switch(&knikOverflow)->default_value(false)
|
||||
|
|
|
@ -48,5 +48,5 @@ AutoHorizontal/AutoVertical
|
|||
|
||||
* 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.
|
||||
|
|
|
@ -243,7 +243,7 @@ namespace {
|
|||
//! function:
|
||||
//! <ul>
|
||||
//! <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).
|
||||
//! </ul>
|
||||
//!
|
||||
|
|
|
@ -68,7 +68,7 @@ namespace Katana {
|
|||
if ( _locator.isValid() ) {
|
||||
_element = Session::lookup( _locator.getElement()->getCanonical(bounds)->base() );
|
||||
if ( !_element ) {
|
||||
cerr << Bug("Canonical segment whithout TrackElement.") << endl;
|
||||
cerr << Bug("Canonical segment without TrackElement.") << endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ namespace Kite {
|
|||
if ( _locator.isValid() ) {
|
||||
_element = Session::lookup( _locator.getElement()->getCanonical(bounds)->base() );
|
||||
if ( !_element ) {
|
||||
cerr << Bug("Canonical segment whithout TrackElement.") << endl;
|
||||
cerr << Bug("Canonical segment without TrackElement.") << endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ struct SegRecord {
|
|||
struct NetSurfacesComp : public binary_function<const NetRecord, const NetRecord, bool> {
|
||||
public: bool operator() ( const NetRecord &record1, const NetRecord &record2 ) const {
|
||||
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 (record1._net == record2._net) assert ( false );
|
||||
}
|
||||
|
|
|
@ -106,9 +106,10 @@ void defiPath::clear() {
|
|||
|
||||
void defiPath::Destroy() {
|
||||
|
||||
if (keys_)
|
||||
if (keys_) {
|
||||
free((char*)(keys_));
|
||||
keys_ = NULL;
|
||||
}
|
||||
if (data_) {
|
||||
clear();
|
||||
free((char*)(data_));
|
||||
|
|
|
@ -52,10 +52,10 @@ if __name__ == '__main__':
|
|||
|
||||
parser = optparse.OptionParser(usage)
|
||||
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( '--acm-sigda-89' , type='string' , dest='acmSigdaName' , help='An ACM/SIGDA 89 bench name to load, whithout extension.')
|
||||
parser.add_option( '--blif' , type='string' , dest='blifName' , help='A Blif (Yosys) design 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( '-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, without 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, without extension.')
|
||||
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.')
|
||||
|
|
|
@ -137,7 +137,7 @@ int main ( int argc, char *argv[] )
|
|||
( "dump-measures,M" , bopts::bool_switch(&dumpMeasures)->default_value(false)
|
||||
, "Dump statistical measurements on the disk.")
|
||||
( "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 the routed design.")
|
||||
( "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 the design in DEF format.")
|
||||
( "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>()
|
||||
, "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 of the imported design immediatly after loading.");
|
||||
|
||||
|
|
|
@ -102,10 +102,10 @@ if __name__ == '__main__':
|
|||
|
||||
parser = optparse.OptionParser(usage)
|
||||
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( '--acm-sigda-89' , type='string' , dest='acmSigdaName' , help='An ACM/SIGDA 89 bench name to load, whithout extension.')
|
||||
parser.add_option( '--blif' , type='string' , dest='blifName' , help='A Blif (Yosys) design 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( '-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, without 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, without 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.')
|
||||
|
|
|
@ -659,10 +659,10 @@ namespace Bookshelf {
|
|||
}
|
||||
|
||||
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() )
|
||||
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 ) {
|
||||
if ( ordereds[iext].empty() ) continue;
|
||||
|
|
Loading…
Reference in New Issue