Doc for Yosys and Etesian + minor fixes

* Blif import checks if the file exists
* Typo in Knik
This commit is contained in:
Gabriel Gouvine 2015-04-05 11:35:06 +02:00
parent c63ee783ed
commit aa17b90bea
3 changed files with 61 additions and 13 deletions

View File

@ -126,7 +126,9 @@ Cell * Blif::load ( string cellPath ) //, Cell *cell )
auto framework = AllianceFramework::get (); auto framework = AllianceFramework::get ();
std::ifstream ccell ( cellPath+".blif" ); std::ifstream ccell ( cellPath+".blif" );
if(ccell.fail()){
throw Error("Unable to open the file\n");
}
cmess2 << " " << tab << "+ " << cellPath << " [BLIF]" << endl; cmess2 << " " << tab << "+ " << cellPath << " [BLIF]" << endl;
std::vector<model> models; std::vector<model> models;

View File

@ -48,6 +48,7 @@
.. |Hurricane| replace:: :sc:`Hurricane` .. |Hurricane| replace:: :sc:`Hurricane`
.. |HurricaneAMS| replace:: :sc:`HurricaneAMS` .. |HurricaneAMS| replace:: :sc:`HurricaneAMS`
.. |Alliance| replace:: :sc:`Alliance` .. |Alliance| replace:: :sc:`Alliance`
.. |Yosys| replace:: :sc:`Yosys`
.. |GenLib| replace:: :sc:`GenLib` .. |GenLib| replace:: :sc:`GenLib`
.. |Nero| replace:: :sc:`Nero` .. |Nero| replace:: :sc:`Nero`
.. |Druc| replace:: :cb:`Druc` .. |Druc| replace:: :cb:`Druc`
@ -946,8 +947,9 @@ changed we still use the |Alliance| files format, but they now really represent
views of the same object. The point is that one must be very careful about views of the same object. The point is that one must be very careful about
view coherency when going to and from |Coriolis|. view coherency when going to and from |Coriolis|.
As for the first release, |Coriolis| can be used only for two purposes : As for the second release, |Coriolis| can be used only for three purposes :
* **Placing a design**, in which case the |netlist| view must be present.
* **Routing a design**, in that case the |netlist| * **Routing a design**, in that case the |netlist|
view and the |layout| view must be present and |layout| view must contain view and the |layout| view must be present and |layout| view must contain
a placement. Both views must have the same name. When saving the routed design, a placement. Both views must have the same name. When saving the routed design,
@ -958,12 +960,42 @@ As for the first release, |Coriolis| can be used only for two purposes :
state. state.
Synthetizing and loading a design
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Coriolis| supports several file formats. It can load all file format
from the |Alliance| toolchain (.ap for layout, behavioural and structural vhdl .vbe and .vst),
BLIF netlist format as well as benchmark formats from the ISPD contests.
It can be compiled with LEF/DEF support, although it requires acceptance of the SI2 license
and may not be compiled in your version of the software.
Synthesis under Yosys
---------------------
You can create a BLIF file from the |Yosys| synthetizer, which can be imported under Coriolis.
Most libraries are specified as a .lib liberty file and a .lef LEF file. Although |Yosys| opens
most .lib files with minor modifications, Coriolis may be compiled without LEF support, in
which case you need .ap files.
In this case, you need to export your .lef library as .ap files or compile your Coriolis version
with LEF support.
Once you have installed a common library under |Yosys| and Coriolis, just synthetize your design
with |Yosys| and import it (as Blif without the extension) under Coriolis to perform place&route.
Synthesis under Alliance
------------------------
|Alliance| is an older toolchain but has been extensively used for years. Coriolis can import
and write Alliance designs and libraries directly.
Etesian -- Placer Etesian -- Placer
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~
The |Etesian| placer is a state of the art (as of 2015) analytical placer. This |Coriolis| The |Etesian| placer is a state of the art (as of 2015) analytical placer. It is
tool is actually an encapsulation of |Coloquinte| which *is* the placer. |Coloquinte| within ``5%`` of other placers' solutions, but is normally a bit worse than ePlace.
is provided as a separate library, see the building instructions. This |Coriolis| tool is actually an encapsulation of |Coloquinte| which *is* the placer.
|Coloquinte| is provided as a separate library, see the building instructions.
.. note:: *Instance Uniquification Unsupported:* a same logical instance cannot have .. note:: *Instance Uniquification Unsupported:* a same logical instance cannot have
two different placements. So, either you manually make a clone of it or you two different placements. So, either you manually make a clone of it or you
@ -1003,6 +1035,14 @@ later). To perform a new placement, you must restart |cgt|. In addition, if you
have saved the placement on disk, you must erase any :cb:`.ap` file, which are have saved the placement on disk, you must erase any :cb:`.ap` file, which are
automatically reloaded along with the netlist (:cb:`.vst`). automatically reloaded along with the netlist (:cb:`.vst`).
|noindent|
**Limitations**
Etesian supports standard cells and fixed macros. As for the Coriolis 2.1 version,
it doesn't support movable macros, and you must place every macro beforehand.
Timing and routability analysis are not included either, and the returned placement
may be unroutable.
|newpage| |newpage|
@ -1035,14 +1075,20 @@ Etesian Configuration Parameters
| | Sets the balance between the speed of the | | | Sets the balance between the speed of the |
| | placer and the solution quality | | | placer and the solution quality |
+-----------------------------------+------------------+----------------------------+ +-----------------------------------+------------------+----------------------------+
|``etesian.routingDriven`` | TypeBool | :cb:`False` |
| +------------------+----------------------------+
| | Whether the tool will try routing iterations |
| | and whitespace allocation to improve |
| | routability; to be implemented |
+-----------------------------------+------------------+----------------------------+
|``etesian.graphics`` | TypeInt | :cb:`2` | |``etesian.graphics`` | TypeInt | :cb:`2` |
| +------------------+----------------------------+ | +------------------+----------------------------+
| | How often the display will be refreshed, more | | | How often the display will be refreshed |
| | refreshing slows the placer. | | | More refreshing slows the placer. |
| | | | | |
| | * ``1`` show both upper and lower bounds | | | * ``1`` shows both upper and lower bounds |
| | * ``2`` show only lower bound | | | * ``2`` only shows lower bound results |
| | * ``3`` Don't show anything | | | * ``3`` only shows the final results |
+-----------------------------------+-----------------------------------------------+ +-----------------------------------+-----------------------------------------------+
@ -1605,7 +1651,7 @@ Once an entry point has been activated, you may recursively expore all
it's fields using the right/left arrows. it's fields using the right/left arrows.
.. note:: *Do not put your fingers in the socket:* when inspecting .. note:: *Do not put your fingers in the socket:* when inspecting
anything, do not modify the DataBase. If the any object under inspection anything, do not modify the DataBase. If any object under inspection
is deleted, you will crash the application... is deleted, you will crash the application...
.. note:: *Implementation Detail:* the inspector support is done with .. note:: *Implementation Detail:* the inspector support is done with
@ -1642,7 +1688,7 @@ either languages.
A script could be run directly in text mode from the command line or through A script could be run directly in text mode from the command line or through
the graphical interface (see `Python Scripts in Cgt`_). the graphical interface (see `Python Scripts in Cgt`_).
Asides for this requirement, the python script can contains anything valid Asides for this requirement, the python script can contain anything valid
in |Python|, so don't hesitate to use any package or extention. in |Python|, so don't hesitate to use any package or extention.
Small example of Python/Stratus script: :: Small example of Python/Stratus script: ::

View File

@ -242,7 +242,7 @@ void KnikEngine::initGlobalRouting( const map<Name,Net*>& excludedNets )
continue; continue;
} }
// We want to route nets with more at least 2 and less than MaxDegree vertexes // We want to route nets with more than 2 and less than MaxDegree vertexes
unsigned netDegree = _routingGraph->countVertexes ( *inet ); unsigned netDegree = _routingGraph->countVertexes ( *inet );
if ( (netDegree > 1) and (netDegree < MaxDegree) ) { if ( (netDegree > 1) and (netDegree < MaxDegree) ) {
Box bbox = inet->getBoundingBox(); Box bbox = inet->getBoundingBox();