* ./hurricane/doc/hurricane:

- Change: In Cell, added doc about PlacementStatus.
    - Change: In Transformation, more detailed explanations about the
        orientations. A little beautifying too...
    - Change: RoutingPad doc update.
    - Change: Entity doc update (for id).
    - Change: In HTML header/footer uses the new SoC.css.

  * ./crlcore/src:
    - Change: In DefDriver, added support for placement exportation.
    - New: In Utility, added a "paranoid" output stream (for my extra
       warnings in the router).
    - Bug: In ApParser, correct parsing of connectors index (recreate
       the vector).
    - Change: In alliance.conf, make "blockageNet" case insensitive.
    - Change: In misc.conf, added support for paranoid stream.
    - Change: In x2y and CyclopMain correct verbose flags positionning.

  * ./crlcore/doc:
    - Change: Updated style and added some documenation.
This commit is contained in:
Jean-Paul Chaput 2013-12-04 01:47:34 +00:00
parent 12f595941a
commit b4887b1180
13 changed files with 634 additions and 252 deletions

View File

@ -1,14 +1,15 @@
/*
* x-----------------------------------------------------------------x
* +-----------------------------------------------------------------+
* | HTML Standart Tags |
* x-----------------------------------------------------------------x
* +-----------------------------------------------------------------+
*/
html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 {
font-size: 95%;
font-family: verdana, sans-serif;
font-size: 11pt;
/* The Open Sans font family is supplied by TexLive. */
font-family: "Open Sans", Verdana, sans-serif;;
}
body {
@ -19,11 +20,15 @@
background-attachment: fixed;
background-repeat: no-repeat;
margin-top: 2em;
margin-right: 10%;
margin-left: 10%;
width: 550pt;
margin-right: auto;
margin-left: auto;
/*
margin-right: 12%;
margin-left: 12%;
*/
}
hr {
height: 1px;
border: 0;
@ -32,26 +37,32 @@
}
.navigation { font-size: 80%; }
h1, h2, h3, h4, h5, h6 {
font-family: verdana, sans-serif;
/*font-family: "Liberation Serif", sans-serif;*/
}
h1 { text-align: center; }
h2, h3, h4, h5, h6 { text-align: left;
padding-top: 2em;
padding-top: 11pt;
}
h1, h2, h3 { font-family: "Trebuchet MS", sans-serif;
color: #09550B;
h1, h2, h3 { /*font-family: "Liberation Serif", sans-serif; */
/*color: #09550B;*/
}
h1 { font-weight: bold; font-size: 160%; }
h2 { font-weight: bold; font-size: 130%; }
h3 { font-weight: bold; font-size: 110%; }
h4 { font-weight: bold; font-size: 90%; }
h5 { font-style: italic; font-size: 90%; }
h6 { font-variant: small-caps; font-size: 90%; }
h1 { font-weight:normal; font-size: 170%; letter-spacing:0.2em; word-spacing:0.4em; }
h2 { font-weight:normal; font-size: 140%; letter-spacing:0.2em; word-spacing:0.4em; }
h3 { font-weight: bold; font-size: 118%; letter-spacing:0.2em; word-spacing:0.4em; }
h4 { font-weight: bold; font-size: 100%; }
h5 { font-style: italic; font-size: 100%; }
h6 { font-variant: small-caps; font-size: 100%; }
h2.classHierarchy {
/*border: 1px none #008500;*/
border: 1px none #000000;
border-top-width: 1px;
border-top-style: dotted;
padding-top: 1em;
}
.hide {
display: none;
@ -71,7 +82,7 @@
text-align: right;
font-weight: bold;
font-style: italic;
font-size: 75%;
font-size: 80%;
}
@ -102,36 +113,38 @@
dt, dd { margin-top: 0; margin-bottom: 0; }
dt { font-weight: bold; }
td { font-size: 85%; }
pre, tt, code {
font-family: "andale mono", monospace;
font-size: 95%;
/*font-family: "andale mono", monospace;*/
font-size: 100%;
white-space: pre;
}
pre {
font-size: 80%;
border: solid;
border: dashed;
border-width: thin;
border-color: #003300;
/*
background-color: #EEEEEE;
*/
background-color: #FCFCE1;
padding: 0.5em;
margin-left: 2em;
margin-right: 2em
}
tt { color: green; }
em { font-style: italic; font-weight: bold; }
strong { font-weight: bold; }
small.footnotesize { font-size: 95%; }
tt { color: green; }
em { font-style: italic;
font-weight: normal; }
strong { font-weight: bold; }
span.textit { font-style: italic; }
span.textbf { font-weight: bold; }
span.textit { font-style: italic; }
span.textbf { font-weight: bold; }
.small { font-size: 80%; }
.white { color: #FFFFFF; }
.small { font-size: 90%; }
.white { color: #FFFFFF; }
ul.toc {
@ -153,51 +166,126 @@
text-decoration: underline;
}
table.remark {
margin-right: 5%;
margin-left: 5%;
border: solid;
border-width: thin;
border-color: #003300;
}
table.remarktext {
text-align: justify;
background-color: #EEEEEE;
}
table.citation {
margin-right: 10%;
margin-left: 10%;
}
/*
* x-----------------------------------------------------------------x
* +-----------------------------------------------------------------+
* | Doxygen Specific Classes |
* x-----------------------------------------------------------------x
* +-----------------------------------------------------------------+
*/
/* -------------------------------------------------------------------
* Header & Footer Classes (customized top page navigation bar).
*/
h1.header {
font-size: 200%;
/*font-family: times, verdana, sans-serif;*/
}
center.header {
background-color: #CCE6CA;
}
table.header {
/*width: 100%;*/
/*background-color: #EEEEEE;*/
background-color: #CCE6CA;
}
table.header td {
padding: 2px 14px;
text-align: center;
font-weight: bold;
/*font-family: verdana, sans-serif;*/
font-size: 110%;
}
table.DoxUser td, table.DoxUser th {
padding: 0px 5px;
border: 0px;
}
table.DoxUser th {
background-color: #CCE6CA;
}
table.footer1, table.footer2 { width: 100%; }
td.LFooter { text-align: left; }
td.RFooter { text-align: right; }
td.CFooter { text-align: center;}
table.footer2 td.RFooter { font-weight: bold; width: 35% }
table.footer2 td.CFooter { width: 30% }
table.footer2 td.LFooter { font-weight: bold; width: 35%; /*font-family: time;*/ }
table.classHierarchy {
border-collapse: separate;
border-spacing: 5px;
font-size: 110%;
}
table.classHierarchy tr {
border: 1px solid blue;
}
table.classHierarchy td.normal {
border: 1px solid #CCE6CA;
width: 140pt;
text-align: center;
font-weight: bold;
background-color: #CCE6CA;
}
table.classHierarchy td.virtual {
border: 1px solid black;
width: 140pt;
text-align: center;
font-weight: bold;
}
table.classHierarchy td.wnormal {
border: 1px solid #CCE6CA;
width: 240pt;
text-align: center;
font-weight: bold;
background-color: #CCE6CA;
}
table.classHierarchy td.wvirtual {
border: 1px solid black;
width: 240pt;
text-align: center;
font-weight: bold;
}
div.ah {
/*font-family: time;*/
font-size: 250%;
}
/* -------------------------------------------------------------------
* Quick Index Class (top page navigation bar).
*/
div.qindex, div.nav {
width: 100%;
background-color: #eeeeff;
border: 1px solid #003300;
width: 100%-4px;
/*background-color: #DADAEF;*/
/*background-color: #eeeeff;*/
/*background-color: #EEEEEE;*/
background-color: #CCE6CA;
border: 0px solid #003300;
text-align: center;
margin: 2px;
margin: 0px;
padding: 2px;
line-height: 140%;
}
a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef {
text-decoration: none;
font-weight: bold;
/*font-family: Courier;*/
font-weight: normal;
/*font-size: 110%;*/
}
a.qindex, a.qindex:visited {
@ -240,12 +328,92 @@
width: 80%;
}
h3 a[name="index__"],
h3 a[name="index_a"],
h3 a[name="index_b"],
h3 a[name="index_c"],
h3 a[name="index_d"],
h3 a[name="index_e"],
h3 a[name="index_f"],
h3 a[name="index_g"],
h3 a[name="index_h"],
h3 a[name="index_i"],
h3 a[name="index_j"],
h3 a[name="index_k"],
h3 a[name="index_l"],
h3 a[name="index_m"],
h3 a[name="index_n"],
h3 a[name="index_o"],
h3 a[name="index_p"],
h3 a[name="index_q"],
h3 a[name="index_r"],
h3 a[name="index_s"],
h3 a[name="index_t"],
h3 a[name="index_u"],
h3 a[name="index_v"],
h3 a[name="index_w"],
h3 a[name="index_x"],
h3 a[name="index_y"],
h3 a[name="index_z"],
h3 a[name="index_0"],
h3 a[name="index_1"],
h3 a[name="index_2"],
h3 a[name="index_3"],
h3 a[name="index_4"],
h3 a[name="index_5"],
h3 a[name="index_6"],
h3 a[name="index_7"],
h3 a[name="index_8"],
h3 a[name="index_9"]
h3 a[id="index__"],
h3 a#index_a,
h3 a#index_b,
h3 a#index_c,
h3 a#index_d,
h3 a#index_e,
h3 a#index_f,
h3 a#index_g,
h3 a#index_h,
h3 a#index_i,
h3 a#index_j,
h3 a#index_k,
h3 a#index_l,
h3 a#index_m,
h3 a#index_n,
h3 a#index_o,
h3 a#index_p,
h3 a#index_q,
h3 a#index_r,
h3 a#index_s,
h3 a#index_t,
h3 a#index_u,
h3 a#index_v,
h3 a#index_w,
h3 a#index_x,
h3 a#index_y,
h3 a#index_z,
h3 a#index_0,
h3 a#index_1,
h3 a#index_2,
h3 a#index_3,
h3 a#index_4,
h3 a#index_5,
h3 a#index_6,
h3 a#index_7,
h3 a#index_8,
h3 a#index_9,
h3 a#index_0x7e
{
font-family: time;
font-size: 250%;
}
/* -------------------------------------------------------------------
* Verbatim Source Code / Examples.
*/
pre.fragment { background-color: #EEEEEE; }
/* pre.fragment { background-color: #EEEEEE; } */
span.keyword { color: #008000 }
span.keywordtype { color: #604020 }
@ -254,26 +422,45 @@
span.preprocessor { color: #806020 }
span.stringliteral { color: #002080 }
span.charliteral { color: #008080 }
span.red { color: red }
/* -------------------------------------------------------------------
* Attributes Listing.
*/
p.formulaDsp {
text-align: center;
}
.mdTable {
border: 1px solid #868686;
background-color: #F4F4FB;
/*border: 1px solid #868686;*/
/*background-color: #DADAEF;*/
/*background-color: #F4F4FB;*/
border: 1px none #008500;
border-left-width: 1px;
border-left-style: solid;
/*background-color: #B8E6B8;*/
/*background-color: #CCE6CA;*/
margin-top: 25px;
font-size: 105%;
}
.mdRow {
padding: 5px 10px;
}
/* This Mozilla/Firefox bug has been corrected from v1.5.
* .mdname1 {
* padding: 3px 0px 0px 0px;
* }
*/
.mdescLeft, .mdescRight {
padding: 0px 8px 4px 8px;
font-size: 12px;
font-size: 11px;
font-style: italic;
background-color: #FAFAFA;
/*background-color: #FAFAFA;*/
border-top: 1px none #E0E0E0;
border-right: 1px none #E0E0E0;
border-bottom: 1px none #E0E0E0;
@ -281,32 +468,92 @@
margin: 0px;
}
.memItemLeft, .memItemRight, .memTemplItemLeft {
padding: 1px 0px 0px 8px;
.memitem {
margin-bottom: 30px;
border: 1px none #008500;
}
.memproto {
background-color: #CCE6CA;
border-left-width: 4px;
border-left-style: solid;
border-color: #008500;
}
.memname {
white-space: nowrap;
padding-left: 5px;
font-size: 105%;
}
table.memname * {
font-family: "Monospace";
}
.memdoc{
padding-left: 5px;
/*margin-top: -8px;*/
border-left-width: 1px;
border-left-style: solid;
border-color: #008500;
}
div.contents * table tr {
padding: 3px 3px 3px 8px;
}
.memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight {
/*padding: 1px 0px 0px 8px;*/
padding: 3px 3px 3px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
/*
border-top-color: #0c0c0c;
border-right-color: #0c0c0c;
border-bottom-color: #0c0c0c;
border-left-color: #0c0c0c;
border-top-style: solid;
*/
border-top-style: none;
border-right-style: none;
border-bottom-style: none;
border-bottom-style: dotted;
border-left-style: none;
background-color: #FAFAFA;
/*background-color: #DADAEF;*/
/*background-color: #eeeeff;*/
/*background-color: #EEEEEE;*/
/*background-color: #CCE6CA;*/
font-family: "Monospace";
}
.memItemLeft { font-size: 12px; }
.memItemRight { font-size: 13px; }
.memTemplItemLeft { font-size: 12px; }
.memTemplItemRight { font-size: 13px; }
.memTemplItemLeft, .memTemplItemRight {
border-bottom-width: 2px;
border-bottom-style: solid;
font-weight: bold;
}
.memItemLeft { font-size: 11px; width: 35%; }
.memItemRight { font-size: 12px; }
.memTemplItemLeft { font-size: 11px; }
.memTemplItemRight { font-size: 12px; }
.memTemplParams {
color: #606060;
background-color: #FAFAFA;
font-size: 12px;
color: #FFFFFF;
background-color: #000000;
font-size: 11px;
font-weight: bold;
}
.groupText, .groupHeader {
color: #09550B;
font-size: 130%;
font-weight: bold;
margin-top: 15px;
}
.groupHeader {
margin-bottom: -30pt;
}

View File

@ -110,6 +110,16 @@
/*! \function void AllianceFramework::addCellGauge(CellGauge* gauge);
* \Return Add a new CellGauge. The last added becomes the default one.
*/
//! \function Cell* AllianceFramework::createCell( const string& name, AllianceLibrary* library=NULL );
//! \param name the name of the cell.
//! \param library an Alliance library.
//! \Return the newly created Cell.
//!
//! Create a new Cell named \c name in the AllianceLibrary \c library. If \c library is
//! \c NULL, uses the working library. Checks are performed to ensure that
//! in a given library no two cells have the same name.
/*! \function Cell* AllianceFramework::getCell(const string& name, unsigned int mode, unsigned int depth=(unsigned int)-1);
* \param name the name of the Cell.
* \param mode control the loader behavior.

View File

@ -102,6 +102,9 @@
/*! \function SearchPath& Environment::getLIBRARIES();
* \Return The ordered list of libraries, under the form of a serch path.
*/
/*! \function string Environment::getLIBRARYPath(size_t i);
* \Return The path of library at index \c i in the search path.
*/
/*! \function std::string Environment::getPrint() const;
* \Return A nicely formatted string to resume the current environements
* settings. Mainly for verbose outputs on ttys.

View File

@ -7,8 +7,9 @@
*/
html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 {
font-size: 96%;
font-family: verdana, sans-serif;
font-size: 11pt;
/* The Open Sans font family is supplied by TexLive. */
font-family: "Open Sans", Verdana, sans-serif;;
}
body {
@ -19,8 +20,13 @@
background-attachment: fixed;
background-repeat: no-repeat;
margin-top: 2em;
margin-right: 8%;
margin-left: 8%;
width: 550pt;
margin-right: auto;
margin-left: auto;
/*
margin-right: 12%;
margin-left: 12%;
*/
}
hr {
@ -32,14 +38,14 @@
h1, h2, h3, h4, h5, h6 {
font-family: "Liberation Serif", sans-serif;
/*font-family: "Liberation Serif", sans-serif;*/
}
h1 { text-align: center; }
h2, h3, h4, h5, h6 { text-align: left;
padding-top: 2em;
padding-top: 11pt;
}
h1, h2, h3 { font-family: "Liberation Serif", sans-serif;
h1, h2, h3 { /*font-family: "Liberation Serif", sans-serif; */
/*color: #09550B;*/
}
h1 { font-weight:normal; font-size: 170%; letter-spacing:0.2em; word-spacing:0.4em; }
@ -52,8 +58,8 @@
h2.classHierarchy {
/*border: 1px none #008500;*/
border: 1px none #000000;
border-top-width: 2px;
border-top-style: solid;
border-top-width: 1px;
border-top-style: dotted;
padding-top: 1em;
}
@ -110,7 +116,7 @@
pre, tt, code {
font-family: "andale mono", monospace;
/*font-family: "andale mono", monospace;*/
font-size: 100%;
white-space: pre;
}
@ -131,7 +137,7 @@
tt { color: green; }
em { font-style: italic;
font-weight: bold; }
font-weight: normal; }
strong { font-weight: bold; }
span.textit { font-style: italic; }
@ -161,8 +167,6 @@
}
/*
* +-----------------------------------------------------------------+
* | Doxygen Specific Classes |
@ -176,7 +180,7 @@
h1.header {
font-size: 200%;
font-family: times, verdana, sans-serif;
/*font-family: times, verdana, sans-serif;*/
}
center.header {
@ -184,8 +188,8 @@
}
table.header {
/*width: 100%;*/
/*background-color: #EEEEEE;*/
/*width: 100%;*/
/*background-color: #EEEEEE;*/
background-color: #CCE6CA;
}
@ -193,17 +197,26 @@
padding: 2px 14px;
text-align: center;
font-weight: bold;
font-family: verdana, sans-serif;
/*font-family: verdana, sans-serif;*/
font-size: 110%;
}
table.DoxUser td, table.DoxUser th {
padding: 0px 5px;
border: 0px;
}
table.DoxUser th {
background-color: #CCE6CA;
}
table.footer1, table.footer2 { width: 100%; }
td.LFooter { text-align: left; }
td.RFooter { text-align: right; }
td.CFooter { text-align: center;}
table.footer2 td.RFooter { font-weight: bold; width: 35% }
table.footer2 td.CFooter { width: 30% }
table.footer2 td.LFooter { font-weight: bold; width: 35%; font-family: time; }
table.footer2 td.LFooter { font-weight: bold; width: 35%; /*font-family: time;*/ }
table.classHierarchy {
border-collapse: separate;
@ -246,7 +259,7 @@
}
div.ah {
font-family: time;
/*font-family: time;*/
font-size: 250%;
}
@ -270,7 +283,9 @@
a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef {
text-decoration: none;
font-weight: bold;
/*font-family: Courier;*/
font-weight: normal;
/*font-size: 110%;*/
}
a.qindex, a.qindex:visited {
@ -407,12 +422,17 @@
span.preprocessor { color: #806020 }
span.stringliteral { color: #002080 }
span.charliteral { color: #008080 }
span.red { color: red }
/* -------------------------------------------------------------------
* Attributes Listing.
*/
p.formulaDsp {
text-align: center;
}
.mdTable {
/*border: 1px solid #868686;*/
/*background-color: #DADAEF;*/
@ -466,6 +486,10 @@
font-size: 105%;
}
table.memname * {
font-family: "Monospace";
}
.memdoc{
padding-left: 5px;
@ -501,6 +525,7 @@
/*background-color: #eeeeff;*/
/*background-color: #EEEEEE;*/
/*background-color: #CCE6CA;*/
font-family: "Monospace";
}
.memTemplItemLeft, .memTemplItemRight {
@ -509,7 +534,7 @@
font-weight: bold;
}
.memItemLeft { font-size: 11px; }
.memItemLeft { font-size: 11px; width: 35%; }
.memItemRight { font-size: 12px; }
.memTemplItemLeft { font-size: 11px; }
.memTemplItemRight { font-size: 12px; }

View File

@ -26,7 +26,7 @@ allianceConfig = \
, ( 'POWER' , 'vdd')
, ( 'GROUND' , 'vss')
, ( 'CLOCK' , '^ck.*')
, ( 'BLOCKAGE' , '^blockageNet*')
, ( 'BLOCKAGE' , '^blockage[Nn]et*')
)

View File

@ -41,44 +41,51 @@ namespace {
void verboseLevel1Changed ( Cfg::Parameter* p )
{
if ( p->asBool() ) mstream::enable ( mstream::VerboseLevel1 );
else mstream::disable ( mstream::VerboseLevel1 );
if (p->asBool()) mstream::enable ( mstream::Verbose0|mstream::Verbose1 );
else mstream::disable( mstream::Verbose1|mstream::Verbose2 );
//cerr << "Verbose Level 1: " << boolalpha << p->asBool() << endl;
//cerr << "Verbose Level 1: " << boolalpha << p->asBool() << " mask:" << mstream::getActiveMask() << endl;
}
void verboseLevel2Changed ( Cfg::Parameter* p )
{
if ( p->asBool() ) mstream::enable ( mstream::VerboseLevel2 );
else mstream::disable ( mstream::VerboseLevel2 );
if (p->asBool()) mstream::enable ( mstream::Verbose0|mstream::Verbose1|mstream::Verbose2 );
else mstream::disable( mstream::Verbose2 );
//cerr << "Verbose Level 2: " << boolalpha << p->asBool() << " mask:" << mstream::getActiveMask() << endl;
}
void infoChanged ( Cfg::Parameter* p )
{
if ( p->asBool() ) mstream::enable ( mstream::Info );
else mstream::disable ( mstream::Info );
if (p->asBool()) mstream::enable ( mstream::Info );
else mstream::disable( mstream::Info );
}
void paranoidChanged ( Cfg::Parameter* p )
{
if (p->asBool()) mstream::enable ( mstream::Paranoid );
else mstream::disable( mstream::Paranoid );
}
void bugChanged ( Cfg::Parameter* p )
{
if ( p->asBool() ) mstream::enable ( mstream::Bug );
else mstream::disable ( mstream::Bug );
if ( p->asBool() ) mstream::enable ( mstream::Bug );
else mstream::disable( mstream::Bug );
}
void catchCoreChanged ( Cfg::Parameter* p )
{
System::setCatchCore ( p->asBool() );
}
{ System::setCatchCore( p->asBool() ); }
void logModeChanged ( Cfg::Parameter* p )
{
if ( not p->asBool() ) tty::enable ();
else tty::disable ();
if (not p->asBool()) tty::enable ();
else tty::disable ();
}
@ -114,11 +121,12 @@ int tty::_width = 80;
bool tty::_enabled = true;
unsigned int mstream::_activeMask = mstream::Verbose0;
mstream cmess0 ( mstream::Verbose0, std::cout );
mstream cmess1 ( mstream::Verbose1, std::cout );
mstream cmess2 ( mstream::Verbose2, std::cout );
mstream cinfo ( mstream::Info , std::cout );
mstream cbug ( mstream::Bug , std::cout );
mstream cmess0 ( mstream::Verbose0, std::cout );
mstream cmess1 ( mstream::Verbose1, std::cout );
mstream cmess2 ( mstream::Verbose2, std::cout );
mstream cinfo ( mstream::Info , std::cout );
mstream cparanoid ( mstream::Paranoid, std::cout );
mstream cbug ( mstream::Bug , std::cout );
// -------------------------------------------------------------------
@ -315,6 +323,7 @@ namespace CRL {
Cfg::getParamBool ("misc.verboseLevel1" ,true )->registerCb ( verboseLevel1Changed );
Cfg::getParamBool ("misc.verboseLevel2" ,true )->registerCb ( verboseLevel2Changed );
Cfg::getParamBool ("misc.info" ,false)->registerCb ( infoChanged );
Cfg::getParamBool ("misc.paranoid" ,false)->registerCb ( paranoidChanged );
Cfg::getParamBool ("misc.bug" ,false)->registerCb ( bugChanged );
Cfg::getParamBool ("misc.logMode" ,false)->registerCb ( logModeChanged );
Cfg::getParamInt ("misc.traceLevel" ,1000 )->registerCb ( traceLevelChanged );
@ -325,6 +334,7 @@ namespace CRL {
verboseLevel1Changed ( Cfg::getParamBool("misc.verboseLevel1") );
verboseLevel2Changed ( Cfg::getParamBool("misc.verboseLevel2") );
infoChanged ( Cfg::getParamBool("misc.info" ) );
paranoidChanged ( Cfg::getParamBool("misc.paranoid" ) );
bugChanged ( Cfg::getParamBool("misc.bug" ) );
logModeChanged ( Cfg::getParamBool("misc.logMode" ) );
traceLevelChanged ( Cfg::getParamInt ("misc.traceLevel" ) );

View File

@ -445,8 +445,8 @@ namespace {
void ApParser::_parseConnector ()
{
static DbU::Unit XCON, YCON, WIDTH;
static unsigned int index;
static char pinName[1024];
static int index;
string pinName;
static Net* net;
static Pin* pin;
static LayerInformation* layerInfo;
@ -457,53 +457,58 @@ namespace {
static Name EAST = "EAST";
static Name WEST = "WEST";
vector<char*> fields = _splitString ( _rawLine+2, ',' );
if ( fields.size() < 7 )
vector<char*> fields = _splitString( _rawLine+2, ',' );
if (fields.size() < 7)
_printError ( false, "Malformed Connector line." );
else {
XCON = _getUnit ( fields[0] );
YCON = _getUnit ( fields[1] );
WIDTH = _getUnit ( fields[2] );
index = atoi(fields[4]);
XCON = _getUnit( fields[0] );
YCON = _getUnit( fields[1] );
WIDTH = _getUnit( fields[2] );
orientation = fields[5];
size_t length = strlen ( fields[3] );
if ( length > 1000 ) {
index = -1;
if (fields[4] != '\0') index = atoi( fields[4] );
size_t length = strlen( fields[3] );
if (length > 1000) {
_printError ( false, "Connector name too long (exceed 1000 characters)." );
return;
}
strncpy ( pinName, fields[3], 1023 );
if ( index > 0 ) {
pinName [ length ] = '.';
strncpy ( pinName+length+1, fields[4], 1022-length );
pinName = fields[3];
size_t bindex = pinName.find(' ');
if (bindex != string::npos) {
pinName[ bindex ] = '(';
pinName += ')';
}
if (index >= 0) {
pinName += '.' + string(fields[4]);
}
net = _getNet ( fields[3] );
layerInfo = _getLayerInformation ( fields[6] );
net = _getNet ( fields[3] );
layerInfo = _getLayerInformation( fields[6] );
if ( orientation == NORTH ) accessDirection = Pin::AccessDirection::NORTH;
else if ( orientation == WEST ) accessDirection = Pin::AccessDirection::WEST;
else if ( orientation == SOUTH ) accessDirection = Pin::AccessDirection::SOUTH;
else if ( orientation == EAST ) accessDirection = Pin::AccessDirection::EAST;
if (orientation == NORTH) accessDirection = Pin::AccessDirection::NORTH;
else if (orientation == SOUTH) accessDirection = Pin::AccessDirection::SOUTH;
else if (orientation == WEST ) accessDirection = Pin::AccessDirection::WEST;
else if (orientation == EAST ) accessDirection = Pin::AccessDirection::EAST;
else accessDirection = Pin::AccessDirection::UNDEFINED;
if ( layerInfo && net ) {
net->setExternal ( true );
pin = Pin::create ( net
, pinName
, accessDirection
, Pin::PlacementStatus::PLACED
, layerInfo->getLayer()
, XCON
, YCON
, WIDTH
, WIDTH
);
//setExternal ( pin );
if (layerInfo and net) {
net->setExternal( true );
pin = Pin::create( net
, pinName
, accessDirection
, Pin::PlacementStatus::PLACED
, layerInfo->getLayer()
, XCON
, YCON
, WIDTH
, WIDTH
);
}
if ( !net ) _printError ( false, "Unknown net name %s." , fields[5] );
if ( !layerInfo ) _printError ( false, "Unknown layer name %s.", fields[6] );
if (not net ) _printError( false, "Unknown net name %s." , fields[5] );
if (not layerInfo ) _printError( false, "Unknown layer name %s.", fields[6] );
}
}

View File

@ -257,14 +257,12 @@ inline std::string tty::bgcolor ( unsigned int mask )
class mstream : public std::ostream {
public:
enum StreamMasks { Verbose0 = (1<<0)
, Verbose1 = (1<<1)
, Verbose2 = (1<<2)
, Info = (1<<3)
, Bug = (1<<4)
, VerboseLevel0 = Verbose0
, VerboseLevel1 = Verbose0|Verbose1
, VerboseLevel2 = Verbose0|Verbose1|Verbose2
enum StreamMasks { Verbose0 = 0x00000001
, Verbose1 = 0x00000002
, Verbose2 = 0x00000004
, Info = 0x00000008
, Paranoid = 0x00000010
, Bug = 0x00000020
};
public:
static void enable ( unsigned int mask );
@ -340,6 +338,7 @@ extern mstream cmess0;
extern mstream cmess1;
extern mstream cmess2;
extern mstream cinfo;
extern mstream cparanoid;
extern mstream cbug;

View File

@ -1,15 +1,9 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved
// Copyright (c) UPMC 2010-2013, All Rights Reserved
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | C a d e n c e D E F E x p o r t e r |
// | |
@ -17,10 +11,7 @@
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== |
// | C++ Module : "./crlcore/DefExport.cpp" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
// +-----------------------------------------------------------------+
#include <memory>
@ -58,6 +49,20 @@ namespace {
using namespace CRL;
string toLower ( const string& s )
{
string lowered;
for ( size_t i=0 ; i<s.size() ; ++i ) {
if ( (s[i] < 'A') or (s[i] > 'Z') )
lowered.push_back( s[i] );
else
lowered.push_back( s[i] + (int)'a'-(int)'A' );
}
return lowered;
}
#define CHECK_STATUS_CBK(status) if ((status) != 0) return driver->checkStatus(status);
#define CHECK_STATUS_DRV(status) if ((status) != 0) return checkStatus(status);
#define RETURN_CHECK_STATUS_CBK(status) return driver->checkStatus(status);
@ -66,44 +71,46 @@ namespace {
class DefDriver {
public:
static void drive ( Cell* cell, unsigned int flags );
static int getUnits ();
static int toDefUnits ( DbU::Unit );
static DbU::Unit getSliceHeight ();
static DbU::Unit getPitchWidth ();
~DefDriver ();
int write ();
static void drive ( Cell* cell, unsigned int flags );
static int getUnits ();
static int toDefUnits ( DbU::Unit );
static int toDefOrient ( Transformation::Orientation );
static void toDefCoordinates ( Instance*, int& statusX, int& statusY, int& statusOrient );
static DbU::Unit getSliceHeight ();
static DbU::Unit getPitchWidth ();
~DefDriver ();
int write ();
private:
DefDriver ( Cell*, const string& designName, FILE*, unsigned int flags );
inline Cell* getCell ();
inline const string& getDesignName () const;
inline unsigned int getFlags () const;
inline int getStatus () const;
int checkStatus ( int status );
private:
DefDriver ( Cell*, const string& designName, FILE*, unsigned int flags );
inline Cell* getCell ();
inline const string& getDesignName () const;
inline unsigned int getFlags () const;
inline int getStatus () const;
int checkStatus ( int status );
private:
static int _designCbk ( defwCallbackType_e, defiUserData );
static int _designEndCbk ( defwCallbackType_e, defiUserData );
static int _historyCbk ( defwCallbackType_e, defiUserData );
static int _versionCbk ( defwCallbackType_e, defiUserData );
static int _dividerCbk ( defwCallbackType_e, defiUserData );
static int _busBitCbk ( defwCallbackType_e, defiUserData );
static int _unitsCbk ( defwCallbackType_e, defiUserData );
static int _technologyCbk ( defwCallbackType_e, defiUserData );
static int _dieAreaCbk ( defwCallbackType_e, defiUserData );
static int _gcellGridCbk ( defwCallbackType_e, defiUserData );
static int _rowCbk ( defwCallbackType_e, defiUserData );
static int _trackCbk ( defwCallbackType_e, defiUserData );
static int _viaCbk ( defwCallbackType_e, defiUserData );
static int _pinCbk ( defwCallbackType_e, defiUserData );
static int _pinPropCbk ( defwCallbackType_e, defiUserData );
static int _componentCbk ( defwCallbackType_e, defiUserData );
static int _netCbk ( defwCallbackType_e, defiUserData );
static int _snetCbk ( defwCallbackType_e, defiUserData );
static int _extensionCbk ( defwCallbackType_e, defiUserData );
static int _groupCbk ( defwCallbackType_e, defiUserData );
static int _propDefCbk ( defwCallbackType_e, defiUserData );
static int _regionCbk ( defwCallbackType_e, defiUserData );
static int _scanchainCbk ( defwCallbackType_e, defiUserData );
static int _designCbk ( defwCallbackType_e, defiUserData );
static int _designEndCbk ( defwCallbackType_e, defiUserData );
static int _historyCbk ( defwCallbackType_e, defiUserData );
static int _versionCbk ( defwCallbackType_e, defiUserData );
static int _dividerCbk ( defwCallbackType_e, defiUserData );
static int _busBitCbk ( defwCallbackType_e, defiUserData );
static int _unitsCbk ( defwCallbackType_e, defiUserData );
static int _technologyCbk ( defwCallbackType_e, defiUserData );
static int _dieAreaCbk ( defwCallbackType_e, defiUserData );
static int _gcellGridCbk ( defwCallbackType_e, defiUserData );
static int _rowCbk ( defwCallbackType_e, defiUserData );
static int _trackCbk ( defwCallbackType_e, defiUserData );
static int _viaCbk ( defwCallbackType_e, defiUserData );
static int _pinCbk ( defwCallbackType_e, defiUserData );
static int _pinPropCbk ( defwCallbackType_e, defiUserData );
static int _componentCbk ( defwCallbackType_e, defiUserData );
static int _netCbk ( defwCallbackType_e, defiUserData );
static int _snetCbk ( defwCallbackType_e, defiUserData );
static int _extensionCbk ( defwCallbackType_e, defiUserData );
static int _groupCbk ( defwCallbackType_e, defiUserData );
static int _propDefCbk ( defwCallbackType_e, defiUserData );
static int _regionCbk ( defwCallbackType_e, defiUserData );
static int _scanchainCbk ( defwCallbackType_e, defiUserData );
private:
static int _units;
static DbU::Unit _sliceHeight;
@ -116,7 +123,9 @@ namespace {
};
int DefDriver::_units = 100;
int DefDriver::_units = 100;
DbU::Unit DefDriver::_sliceHeight = 0;
DbU::Unit DefDriver::_pitchWidth = 0;
int DefDriver::getUnits () { return _units; }
@ -129,6 +138,53 @@ namespace {
inline const string& DefDriver::getDesignName () const { return _designName; }
int DefDriver::toDefOrient ( Transformation::Orientation orient )
{
switch ( orient ) {
case Transformation::Orientation::ID: return 0; // N.
case Transformation::Orientation::R1: return 1; // W.
case Transformation::Orientation::R2: return 2; // S.
case Transformation::Orientation::R3: return 3; // E.
case Transformation::Orientation::MX: return 4; // FN.
case Transformation::Orientation::XR: return 5; // FE.
case Transformation::Orientation::MY: return 6; // FS.
case Transformation::Orientation::YR: return 7; // FW.
}
return 0; // N
}
void DefDriver::toDefCoordinates ( Instance* instance, int& statusX, int& statusY, int& statusOrient )
{
const Transformation& transf = instance->getTransformation();
statusX = toDefUnits ( transf.getTx() );
statusY = toDefUnits ( transf.getTy() );
statusOrient = toDefOrient( transf.getOrientation() );
switch ( transf.getOrientation() ) {
case Transformation::Orientation::ID: break;
case Transformation::Orientation::R1: break;
case Transformation::Orientation::R2:
statusX -= toDefUnits( instance->getMasterCell()->getAbutmentBox().getWidth() );
statusY -= toDefUnits( instance->getMasterCell()->getAbutmentBox().getHeight() );
break;
case Transformation::Orientation::R3: break;
case Transformation::Orientation::MX:
statusX -= toDefUnits( instance->getMasterCell()->getAbutmentBox().getWidth() );
break;
case Transformation::Orientation::XR:
break;
case Transformation::Orientation::MY:
statusY -= toDefUnits( instance->getMasterCell()->getAbutmentBox().getHeight() );
break;
case Transformation::Orientation::YR:
break;
}
}
DefDriver::DefDriver ( Cell* cell, const string& designName, FILE* defStream, unsigned int flags )
: _cell (cell)
, _designName(designName)
@ -435,26 +491,41 @@ namespace {
CHECK_STATUS_CBK(status);
forEach ( Instance*, iinstance, cell->getInstances() ) {
status = defwComponent ( getString((*iinstance)->getName()).c_str()
string insname = getString((*iinstance)->getName());
const char* source = NULL;
const char* statusS = "UNPLACED";
int statusX = 0;
int statusY = 0;
int statusOrient = 0;
if (CatalogExtension::isFeed((*iinstance)->getMasterCell())) source = "DIST";
if ((*iinstance)->getPlacementStatus() == Instance::PlacementStatus::PLACED) statusS = "PLACED";
if ((*iinstance)->getPlacementStatus() == Instance::PlacementStatus::FIXED ) statusS = "FIXED";
if (statusS[0] != 'U') {
toDefCoordinates( *iinstance, statusX, statusY, statusOrient );
}
status = defwComponent ( insname.c_str()
, getString((*iinstance)->getMasterCell()->getName()).c_str()
, 0 // numNetNames (disabled).
, NULL // netNames (disabled).
, NULL // eeq (electrical equivalence).
, NULL // genName.
, NULL // genParameters.
, NULL // source (who has created it).
, 0 // numForeigns.
, NULL // foreigns.
, NULL // foreignsX[].
, NULL // foreignsY[].
, NULL // foreignsOrient[].
, "UNPLACED" // status (placement status).
, 0 // status X (disabled).
, 0 // status Y (disabled).
, 0 // status orientation (disabled).
, 0.0 // weight (disabled).
, NULL // region (disabled).
, 0, 0, 0, 0 // region coordinates.
, 0 // numNetNames (disabled).
, NULL // netNames (disabled).
, NULL // eeq (electrical equivalence).
, NULL // genName.
, NULL // genParameters.
, source // source (who has created it).
, 0 // numForeigns.
, NULL // foreigns.
, NULL // foreignsX[].
, NULL // foreignsY[].
, NULL // foreignsOrient[].
, statusS // status (placement status).
, statusX // status X (disabled).
, statusY // status Y (disabled).
, statusOrient // status orientation (disabled).
, 0.0 // weight (disabled).
, NULL // region (disabled).
, 0, 0, 0, 0 // region coordinates.
);
if ( status != 0 ) return driver->checkStatus(status);
}
@ -481,7 +552,8 @@ namespace {
forEach ( Net*, inet, cell->getNets() ) {
if ( (*inet)->isSupply() or (*inet)->isClock() ) continue;
status = defwNet ( getString((*inet)->getName()).c_str() );
string netName = getString((*inet)->getName()) + "_net";
status = defwNet ( netName.c_str() );
if ( status != 0 ) return driver->checkStatus(status);
forEach ( Plug*, iplug, (*inet)->getPlugs() ) {

View File

@ -1,15 +1,9 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved
// Copyright (c) LIP6 2010-2013, All Rights Reserved
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | C a d e n c e D E F E x p o r t e r |
// | |
@ -17,10 +11,7 @@
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== |
// | C++ Module : "./crlcore/LefExport.cpp" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
// +-----------------------------------------------------------------+
#include <memory>
@ -59,6 +50,20 @@ namespace {
using namespace CRL;
string toLower ( const string& s )
{
string lowered;
for ( size_t i=0 ; i<s.size() ; ++i ) {
if ( (s[i] < 'A') or (s[i] > 'Z') )
lowered.push_back( s[i] );
else
lowered.push_back( s[i] + (int)'a'-(int)'A' );
}
return lowered;
}
#define CHECK_STATUS(status) if ((status) != 0) return checkStatus(status);
#define RETURN_CHECK_STATUS(status) return checkStatus(status);
@ -121,8 +126,10 @@ namespace {
};
int LefDriver::_units = 100;
AllianceFramework* LefDriver::_framework = NULL;
int LefDriver::_units = 100;
AllianceFramework* LefDriver::_framework = NULL;
DbU::Unit LefDriver::_sliceHeight = 0;
DbU::Unit LefDriver::_pitchWidth = 0;
int LefDriver::getUnits () { return _units; }
@ -198,7 +205,9 @@ namespace {
{
if ( lg == NULL ) return 0;
_status = lefwStartLayerRouting ( getString(lg->getLayer()->getName()).c_str() );
string layerName = getString(lg->getLayer()->getName());
_status = lefwStartLayerRouting ( layerName.c_str() );
if ( _status != 0 ) return _status;
_status = lefwLayerRouting ( (lg->getDirection() == Constant::Horizontal) ? "HORIZONTAL" : "VERTICAL"
@ -215,7 +224,7 @@ namespace {
_status = lefwLayerRoutingSpacing ( toLefUnits(lg->getPitch()-lg->getWireWidth()-DbU::lambda(1.0)) );
if ( _status != 0 ) return _status;
return _status = lefwEndLayerRouting ( getString(lg->getLayer()->getName()).c_str() );
return _status = lefwEndLayerRouting ( layerName.c_str() );
}
@ -567,7 +576,7 @@ namespace {
int LefDriver::_manufacturingGridCbk ( lefwCallbackType_e, lefiUserData udata )
{
#if 0
#if 1
// The driver puts it before UNITS, which seems to displease Cadence Encounter.
// So, as long as it doesn't prevent Encounter to works, disable it.
LefDriver* driver = (LefDriver*)udata;

View File

@ -6,6 +6,7 @@ print " - Loading Misc. configuration."
# Misc. parameters.
Cfg.getParamBool("misc.catchCore" ).setBool(False)
Cfg.getParamBool("misc.info" ).setBool(True )
Cfg.getParamBool("misc.paranoid" ).setBool(False)
Cfg.getParamBool("misc.bug" ).setBool(False)
Cfg.getParamBool("misc.logMode" ).setBool(True )
Cfg.getParamBool("misc.verboseLevel1").setBool(True )
@ -22,6 +23,7 @@ layout.addParameter ( "Misc.", "misc.catchCore" , "Catch Core Dumps", 1 )
layout.addParameter ( "Misc.", "misc.verboseLevel1", "Verbose" , 0 )
layout.addParameter ( "Misc.", "misc.verboseLevel2", "Very Verbose" , 0 )
layout.addParameter ( "Misc.", "misc.info" , "Show Infos" , 0 )
layout.addParameter ( "Misc.", "misc.paranoid" , "Show Everything" , 0 )
layout.addParameter ( "Misc.", "misc.bug" , "Show Bugs" , 0 )
layout.addParameter ( "Misc.", "misc.logMode" , "Output is a TTY" , 0 )
layout.addParameter ( "Misc.", "misc.traceLevel" , "Trace Level" , 1 )

View File

@ -127,8 +127,8 @@ int main ( int argc, char *argv[] )
}
System::get()->setCatchCore ( not coreDump );
if ( verbose1 ) mstream::enable ( mstream::VerboseLevel1 );
if ( verbose2 ) mstream::enable ( mstream::VerboseLevel2 );
if (verbose1) mstream::enable ( mstream::Verbose0|mstream::Verbose1 );
if (verbose2) mstream::enable ( mstream::Verbose0|mstream::Verbose1|mstream::Verbose2 );
dbo_ptr<AllianceFramework> af ( AllianceFramework::create() );

View File

@ -46,8 +46,8 @@ int main(int argc, char *argv[]) {
}
System::get()->setCatchCore ( not coreDump );
if ( verbose1 ) mstream::enable ( mstream::VerboseLevel1 );
if ( verbose2 ) mstream::enable ( mstream::VerboseLevel2 );
if (verbose1) mstream::enable ( mstream::Verbose0|mstream::Verbose1 );
if (verbose2) mstream::enable ( mstream::Verbose0|mstream::Verbose1|mstream::Verbose2 );
AllianceFramework* af = AllianceFramework::create ();