* ./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 | * | HTML Standart Tags |
* x-----------------------------------------------------------------x * +-----------------------------------------------------------------+
*/ */
html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 { html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 {
font-size: 95%; font-size: 11pt;
font-family: verdana, sans-serif; /* The Open Sans font family is supplied by TexLive. */
font-family: "Open Sans", Verdana, sans-serif;;
} }
body { body {
@ -19,11 +20,15 @@
background-attachment: fixed; background-attachment: fixed;
background-repeat: no-repeat; background-repeat: no-repeat;
margin-top: 2em; margin-top: 2em;
margin-right: 10%; width: 550pt;
margin-left: 10%; margin-right: auto;
margin-left: auto;
/*
margin-right: 12%;
margin-left: 12%;
*/
} }
hr { hr {
height: 1px; height: 1px;
border: 0; border: 0;
@ -32,26 +37,32 @@
} }
.navigation { font-size: 80%; }
h1, h2, h3, h4, h5, h6 { h1, h2, h3, h4, h5, h6 {
font-family: verdana, sans-serif; /*font-family: "Liberation Serif", sans-serif;*/
} }
h1 { text-align: center; } h1 { text-align: center; }
h2, h3, h4, h5, h6 { text-align: left; h2, h3, h4, h5, h6 { text-align: left;
padding-top: 2em; padding-top: 11pt;
} }
h1, h2, h3 { font-family: "Trebuchet MS", sans-serif; h1, h2, h3 { /*font-family: "Liberation Serif", sans-serif; */
color: #09550B; /*color: #09550B;*/
} }
h1 { font-weight: bold; font-size: 160%; } h1 { font-weight:normal; font-size: 170%; letter-spacing:0.2em; word-spacing:0.4em; }
h2 { font-weight: bold; font-size: 130%; } h2 { font-weight:normal; font-size: 140%; letter-spacing:0.2em; word-spacing:0.4em; }
h3 { font-weight: bold; font-size: 110%; } h3 { font-weight: bold; font-size: 118%; letter-spacing:0.2em; word-spacing:0.4em; }
h4 { font-weight: bold; font-size: 90%; } h4 { font-weight: bold; font-size: 100%; }
h5 { font-style: italic; font-size: 90%; } h5 { font-style: italic; font-size: 100%; }
h6 { font-variant: small-caps; font-size: 90%; } 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 { .hide {
display: none; display: none;
@ -71,7 +82,7 @@
text-align: right; text-align: right;
font-weight: bold; font-weight: bold;
font-style: italic; font-style: italic;
font-size: 75%; font-size: 80%;
} }
@ -102,36 +113,38 @@
dt, dd { margin-top: 0; margin-bottom: 0; } dt, dd { margin-top: 0; margin-bottom: 0; }
dt { font-weight: bold; } dt { font-weight: bold; }
td { font-size: 85%; }
pre, tt, code { pre, tt, code {
font-family: "andale mono", monospace; /*font-family: "andale mono", monospace;*/
font-size: 95%; font-size: 100%;
white-space: pre; white-space: pre;
} }
pre { pre {
font-size: 80%; font-size: 80%;
border: solid; border: dashed;
border-width: thin; border-width: thin;
border-color: #003300; border-color: #003300;
/*
background-color: #EEEEEE; background-color: #EEEEEE;
*/
background-color: #FCFCE1;
padding: 0.5em; padding: 0.5em;
margin-left: 2em; margin-left: 2em;
margin-right: 2em margin-right: 2em
} }
tt { color: green; } tt { color: green; }
em { font-style: italic; font-weight: bold; } em { font-style: italic;
strong { font-weight: bold; } font-weight: normal; }
small.footnotesize { font-size: 95%; } strong { font-weight: bold; }
span.textit { font-style: italic; } span.textit { font-style: italic; }
span.textbf { font-weight: bold; } span.textbf { font-weight: bold; }
.small { font-size: 80%; } .small { font-size: 90%; }
.white { color: #FFFFFF; } .white { color: #FFFFFF; }
ul.toc { ul.toc {
@ -153,51 +166,126 @@
text-decoration: underline; 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 | * | 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). * Quick Index Class (top page navigation bar).
*/ */
div.qindex, div.nav { div.qindex, div.nav {
width: 100%; width: 100%-4px;
background-color: #eeeeff; /*background-color: #DADAEF;*/
border: 1px solid #003300; /*background-color: #eeeeff;*/
/*background-color: #EEEEEE;*/
background-color: #CCE6CA;
border: 0px solid #003300;
text-align: center; text-align: center;
margin: 2px; margin: 0px;
padding: 2px; padding: 2px;
line-height: 140%; line-height: 140%;
} }
a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef { a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef {
text-decoration: none; text-decoration: none;
font-weight: bold; /*font-family: Courier;*/
font-weight: normal;
/*font-size: 110%;*/
} }
a.qindex, a.qindex:visited { a.qindex, a.qindex:visited {
@ -240,12 +328,92 @@
width: 80%; 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. * Verbatim Source Code / Examples.
*/ */
pre.fragment { background-color: #EEEEEE; } /* pre.fragment { background-color: #EEEEEE; } */
span.keyword { color: #008000 } span.keyword { color: #008000 }
span.keywordtype { color: #604020 } span.keywordtype { color: #604020 }
@ -254,26 +422,45 @@
span.preprocessor { color: #806020 } span.preprocessor { color: #806020 }
span.stringliteral { color: #002080 } span.stringliteral { color: #002080 }
span.charliteral { color: #008080 } span.charliteral { color: #008080 }
span.red { color: red }
/* ------------------------------------------------------------------- /* -------------------------------------------------------------------
* Attributes Listing. * Attributes Listing.
*/ */
p.formulaDsp {
text-align: center;
}
.mdTable { .mdTable {
border: 1px solid #868686; /*border: 1px solid #868686;*/
background-color: #F4F4FB; /*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 { .mdRow {
padding: 5px 10px; padding: 5px 10px;
} }
/* This Mozilla/Firefox bug has been corrected from v1.5.
* .mdname1 {
* padding: 3px 0px 0px 0px;
* }
*/
.mdescLeft, .mdescRight { .mdescLeft, .mdescRight {
padding: 0px 8px 4px 8px; padding: 0px 8px 4px 8px;
font-size: 12px; font-size: 11px;
font-style: italic; font-style: italic;
background-color: #FAFAFA; /*background-color: #FAFAFA;*/
border-top: 1px none #E0E0E0; border-top: 1px none #E0E0E0;
border-right: 1px none #E0E0E0; border-right: 1px none #E0E0E0;
border-bottom: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0;
@ -281,32 +468,92 @@
margin: 0px; margin: 0px;
} }
.memItemLeft, .memItemRight, .memTemplItemLeft { .memitem {
padding: 1px 0px 0px 8px; 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; margin: 4px;
border-top-width: 1px; border-top-width: 1px;
border-right-width: 1px; border-right-width: 1px;
border-bottom-width: 1px; border-bottom-width: 1px;
border-left-width: 1px; border-left-width: 1px;
/*
border-top-color: #0c0c0c; border-top-color: #0c0c0c;
border-right-color: #0c0c0c; border-right-color: #0c0c0c;
border-bottom-color: #0c0c0c; border-bottom-color: #0c0c0c;
border-left-color: #0c0c0c; border-left-color: #0c0c0c;
border-top-style: solid; */
border-top-style: none;
border-right-style: none; border-right-style: none;
border-bottom-style: none; border-bottom-style: dotted;
border-left-style: none; 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; } .memTemplItemLeft, .memTemplItemRight {
.memItemRight { font-size: 13px; } border-bottom-width: 2px;
.memTemplItemLeft { font-size: 12px; } border-bottom-style: solid;
.memTemplItemRight { font-size: 13px; } font-weight: bold;
}
.memItemLeft { font-size: 11px; width: 35%; }
.memItemRight { font-size: 12px; }
.memTemplItemLeft { font-size: 11px; }
.memTemplItemRight { font-size: 12px; }
.memTemplParams { .memTemplParams {
color: #606060; color: #FFFFFF;
background-color: #FAFAFA; background-color: #000000;
font-size: 12px; 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); /*! \function void AllianceFramework::addCellGauge(CellGauge* gauge);
* \Return Add a new CellGauge. The last added becomes the default one. * \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); /*! \function Cell* AllianceFramework::getCell(const string& name, unsigned int mode, unsigned int depth=(unsigned int)-1);
* \param name the name of the Cell. * \param name the name of the Cell.
* \param mode control the loader behavior. * \param mode control the loader behavior.

View File

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

View File

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

View File

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

View File

@ -445,8 +445,8 @@ namespace {
void ApParser::_parseConnector () void ApParser::_parseConnector ()
{ {
static DbU::Unit XCON, YCON, WIDTH; static DbU::Unit XCON, YCON, WIDTH;
static unsigned int index; static int index;
static char pinName[1024]; string pinName;
static Net* net; static Net* net;
static Pin* pin; static Pin* pin;
static LayerInformation* layerInfo; static LayerInformation* layerInfo;
@ -457,53 +457,58 @@ namespace {
static Name EAST = "EAST"; static Name EAST = "EAST";
static Name WEST = "WEST"; static Name WEST = "WEST";
vector<char*> fields = _splitString ( _rawLine+2, ',' ); vector<char*> fields = _splitString( _rawLine+2, ',' );
if ( fields.size() < 7 ) if (fields.size() < 7)
_printError ( false, "Malformed Connector line." ); _printError ( false, "Malformed Connector line." );
else { else {
XCON = _getUnit ( fields[0] ); XCON = _getUnit( fields[0] );
YCON = _getUnit ( fields[1] ); YCON = _getUnit( fields[1] );
WIDTH = _getUnit ( fields[2] ); WIDTH = _getUnit( fields[2] );
index = atoi(fields[4]);
orientation = fields[5]; orientation = fields[5];
size_t length = strlen ( fields[3] ); index = -1;
if ( length > 1000 ) { 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)." ); _printError ( false, "Connector name too long (exceed 1000 characters)." );
return; return;
} }
strncpy ( pinName, fields[3], 1023 ); pinName = fields[3];
if ( index > 0 ) { size_t bindex = pinName.find(' ');
pinName [ length ] = '.'; if (bindex != string::npos) {
strncpy ( pinName+length+1, fields[4], 1022-length ); pinName[ bindex ] = '(';
pinName += ')';
}
if (index >= 0) {
pinName += '.' + string(fields[4]);
} }
net = _getNet ( fields[3] ); net = _getNet ( fields[3] );
layerInfo = _getLayerInformation ( fields[6] ); layerInfo = _getLayerInformation( fields[6] );
if ( orientation == NORTH ) accessDirection = Pin::AccessDirection::NORTH; 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 == SOUTH ) accessDirection = Pin::AccessDirection::SOUTH; else if (orientation == WEST ) accessDirection = Pin::AccessDirection::WEST;
else if ( orientation == EAST ) accessDirection = Pin::AccessDirection::EAST; else if (orientation == EAST ) accessDirection = Pin::AccessDirection::EAST;
else accessDirection = Pin::AccessDirection::UNDEFINED; else accessDirection = Pin::AccessDirection::UNDEFINED;
if ( layerInfo && net ) { if (layerInfo and net) {
net->setExternal ( true ); net->setExternal( true );
pin = Pin::create ( net pin = Pin::create( net
, pinName , pinName
, accessDirection , accessDirection
, Pin::PlacementStatus::PLACED , Pin::PlacementStatus::PLACED
, layerInfo->getLayer() , layerInfo->getLayer()
, XCON , XCON
, YCON , YCON
, WIDTH , WIDTH
, WIDTH , WIDTH
); );
//setExternal ( pin );
} }
if ( !net ) _printError ( false, "Unknown net name %s." , fields[5] ); if (not net ) _printError( false, "Unknown net name %s." , fields[5] );
if ( !layerInfo ) _printError ( false, "Unknown layer name %s.", fields[6] ); 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 { class mstream : public std::ostream {
public: public:
enum StreamMasks { Verbose0 = (1<<0) enum StreamMasks { Verbose0 = 0x00000001
, Verbose1 = (1<<1) , Verbose1 = 0x00000002
, Verbose2 = (1<<2) , Verbose2 = 0x00000004
, Info = (1<<3) , Info = 0x00000008
, Bug = (1<<4) , Paranoid = 0x00000010
, VerboseLevel0 = Verbose0 , Bug = 0x00000020
, VerboseLevel1 = Verbose0|Verbose1
, VerboseLevel2 = Verbose0|Verbose1|Verbose2
}; };
public: public:
static void enable ( unsigned int mask ); static void enable ( unsigned int mask );
@ -340,6 +338,7 @@ extern mstream cmess0;
extern mstream cmess1; extern mstream cmess1;
extern mstream cmess2; extern mstream cmess2;
extern mstream cinfo; extern mstream cinfo;
extern mstream cparanoid;
extern mstream cbug; extern mstream cbug;

View File

@ -1,15 +1,9 @@
// -*- C++ -*- // -*- C++ -*-
// //
// This file is part of the Coriolis Software. // 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 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 | // | 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 | // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== | // | =============================================================== |
// | C++ Module : "./crlcore/DefExport.cpp" | // | C++ Module : "./crlcore/DefExport.cpp" |
// | *************************************************************** | // +-----------------------------------------------------------------+
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
#include <memory> #include <memory>
@ -58,6 +49,20 @@ namespace {
using namespace CRL; 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_CBK(status) if ((status) != 0) return driver->checkStatus(status);
#define CHECK_STATUS_DRV(status) if ((status) != 0) return checkStatus(status); #define CHECK_STATUS_DRV(status) if ((status) != 0) return checkStatus(status);
#define RETURN_CHECK_STATUS_CBK(status) return driver->checkStatus(status); #define RETURN_CHECK_STATUS_CBK(status) return driver->checkStatus(status);
@ -66,44 +71,46 @@ namespace {
class DefDriver { class DefDriver {
public: public:
static void drive ( Cell* cell, unsigned int flags ); static void drive ( Cell* cell, unsigned int flags );
static int getUnits (); static int getUnits ();
static int toDefUnits ( DbU::Unit ); static int toDefUnits ( DbU::Unit );
static DbU::Unit getSliceHeight (); static int toDefOrient ( Transformation::Orientation );
static DbU::Unit getPitchWidth (); static void toDefCoordinates ( Instance*, int& statusX, int& statusY, int& statusOrient );
~DefDriver (); static DbU::Unit getSliceHeight ();
int write (); 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: private:
DefDriver ( Cell*, const string& designName, FILE*, unsigned int flags ); static int _designCbk ( defwCallbackType_e, defiUserData );
inline Cell* getCell (); static int _designEndCbk ( defwCallbackType_e, defiUserData );
inline const string& getDesignName () const; static int _historyCbk ( defwCallbackType_e, defiUserData );
inline unsigned int getFlags () const; static int _versionCbk ( defwCallbackType_e, defiUserData );
inline int getStatus () const; static int _dividerCbk ( defwCallbackType_e, defiUserData );
int checkStatus ( int status ); static int _busBitCbk ( defwCallbackType_e, defiUserData );
private: static int _unitsCbk ( defwCallbackType_e, defiUserData );
static int _designCbk ( defwCallbackType_e, defiUserData ); static int _technologyCbk ( defwCallbackType_e, defiUserData );
static int _designEndCbk ( defwCallbackType_e, defiUserData ); static int _dieAreaCbk ( defwCallbackType_e, defiUserData );
static int _historyCbk ( defwCallbackType_e, defiUserData ); static int _gcellGridCbk ( defwCallbackType_e, defiUserData );
static int _versionCbk ( defwCallbackType_e, defiUserData ); static int _rowCbk ( defwCallbackType_e, defiUserData );
static int _dividerCbk ( defwCallbackType_e, defiUserData ); static int _trackCbk ( defwCallbackType_e, defiUserData );
static int _busBitCbk ( defwCallbackType_e, defiUserData ); static int _viaCbk ( defwCallbackType_e, defiUserData );
static int _unitsCbk ( defwCallbackType_e, defiUserData ); static int _pinCbk ( defwCallbackType_e, defiUserData );
static int _technologyCbk ( defwCallbackType_e, defiUserData ); static int _pinPropCbk ( defwCallbackType_e, defiUserData );
static int _dieAreaCbk ( defwCallbackType_e, defiUserData ); static int _componentCbk ( defwCallbackType_e, defiUserData );
static int _gcellGridCbk ( defwCallbackType_e, defiUserData ); static int _netCbk ( defwCallbackType_e, defiUserData );
static int _rowCbk ( defwCallbackType_e, defiUserData ); static int _snetCbk ( defwCallbackType_e, defiUserData );
static int _trackCbk ( defwCallbackType_e, defiUserData ); static int _extensionCbk ( defwCallbackType_e, defiUserData );
static int _viaCbk ( defwCallbackType_e, defiUserData ); static int _groupCbk ( defwCallbackType_e, defiUserData );
static int _pinCbk ( defwCallbackType_e, defiUserData ); static int _propDefCbk ( defwCallbackType_e, defiUserData );
static int _pinPropCbk ( defwCallbackType_e, defiUserData ); static int _regionCbk ( defwCallbackType_e, defiUserData );
static int _componentCbk ( defwCallbackType_e, defiUserData ); static int _scanchainCbk ( 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: private:
static int _units; static int _units;
static DbU::Unit _sliceHeight; 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; } int DefDriver::getUnits () { return _units; }
@ -129,6 +138,53 @@ namespace {
inline const string& DefDriver::getDesignName () const { return _designName; } 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 ) DefDriver::DefDriver ( Cell* cell, const string& designName, FILE* defStream, unsigned int flags )
: _cell (cell) : _cell (cell)
, _designName(designName) , _designName(designName)
@ -435,26 +491,41 @@ namespace {
CHECK_STATUS_CBK(status); CHECK_STATUS_CBK(status);
forEach ( Instance*, iinstance, cell->getInstances() ) { 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() , getString((*iinstance)->getMasterCell()->getName()).c_str()
, 0 // numNetNames (disabled). , 0 // numNetNames (disabled).
, NULL // netNames (disabled). , NULL // netNames (disabled).
, NULL // eeq (electrical equivalence). , NULL // eeq (electrical equivalence).
, NULL // genName. , NULL // genName.
, NULL // genParameters. , NULL // genParameters.
, NULL // source (who has created it). , source // source (who has created it).
, 0 // numForeigns. , 0 // numForeigns.
, NULL // foreigns. , NULL // foreigns.
, NULL // foreignsX[]. , NULL // foreignsX[].
, NULL // foreignsY[]. , NULL // foreignsY[].
, NULL // foreignsOrient[]. , NULL // foreignsOrient[].
, "UNPLACED" // status (placement status). , statusS // status (placement status).
, 0 // status X (disabled). , statusX // status X (disabled).
, 0 // status Y (disabled). , statusY // status Y (disabled).
, 0 // status orientation (disabled). , statusOrient // status orientation (disabled).
, 0.0 // weight (disabled). , 0.0 // weight (disabled).
, NULL // region (disabled). , NULL // region (disabled).
, 0, 0, 0, 0 // region coordinates. , 0, 0, 0, 0 // region coordinates.
); );
if ( status != 0 ) return driver->checkStatus(status); if ( status != 0 ) return driver->checkStatus(status);
} }
@ -481,7 +552,8 @@ namespace {
forEach ( Net*, inet, cell->getNets() ) { forEach ( Net*, inet, cell->getNets() ) {
if ( (*inet)->isSupply() or (*inet)->isClock() ) continue; 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); if ( status != 0 ) return driver->checkStatus(status);
forEach ( Plug*, iplug, (*inet)->getPlugs() ) { forEach ( Plug*, iplug, (*inet)->getPlugs() ) {

View File

@ -1,15 +1,9 @@
// -*- C++ -*- // -*- C++ -*-
// //
// This file is part of the Coriolis Software. // 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 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 | // | 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 | // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== | // | =============================================================== |
// | C++ Module : "./crlcore/LefExport.cpp" | // | C++ Module : "./crlcore/LefExport.cpp" |
// | *************************************************************** | // +-----------------------------------------------------------------+
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
#include <memory> #include <memory>
@ -59,6 +50,20 @@ namespace {
using namespace CRL; 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 CHECK_STATUS(status) if ((status) != 0) return checkStatus(status);
#define RETURN_CHECK_STATUS(status) return checkStatus(status); #define RETURN_CHECK_STATUS(status) return checkStatus(status);
@ -121,8 +126,10 @@ namespace {
}; };
int LefDriver::_units = 100; int LefDriver::_units = 100;
AllianceFramework* LefDriver::_framework = NULL; AllianceFramework* LefDriver::_framework = NULL;
DbU::Unit LefDriver::_sliceHeight = 0;
DbU::Unit LefDriver::_pitchWidth = 0;
int LefDriver::getUnits () { return _units; } int LefDriver::getUnits () { return _units; }
@ -198,7 +205,9 @@ namespace {
{ {
if ( lg == NULL ) return 0; 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; if ( _status != 0 ) return _status;
_status = lefwLayerRouting ( (lg->getDirection() == Constant::Horizontal) ? "HORIZONTAL" : "VERTICAL" _status = lefwLayerRouting ( (lg->getDirection() == Constant::Horizontal) ? "HORIZONTAL" : "VERTICAL"
@ -215,7 +224,7 @@ namespace {
_status = lefwLayerRoutingSpacing ( toLefUnits(lg->getPitch()-lg->getWireWidth()-DbU::lambda(1.0)) ); _status = lefwLayerRoutingSpacing ( toLefUnits(lg->getPitch()-lg->getWireWidth()-DbU::lambda(1.0)) );
if ( _status != 0 ) return _status; 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 ) int LefDriver::_manufacturingGridCbk ( lefwCallbackType_e, lefiUserData udata )
{ {
#if 0 #if 1
// The driver puts it before UNITS, which seems to displease Cadence Encounter. // 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. // So, as long as it doesn't prevent Encounter to works, disable it.
LefDriver* driver = (LefDriver*)udata; LefDriver* driver = (LefDriver*)udata;

View File

@ -6,6 +6,7 @@ print " - Loading Misc. configuration."
# Misc. parameters. # Misc. parameters.
Cfg.getParamBool("misc.catchCore" ).setBool(False) Cfg.getParamBool("misc.catchCore" ).setBool(False)
Cfg.getParamBool("misc.info" ).setBool(True ) Cfg.getParamBool("misc.info" ).setBool(True )
Cfg.getParamBool("misc.paranoid" ).setBool(False)
Cfg.getParamBool("misc.bug" ).setBool(False) Cfg.getParamBool("misc.bug" ).setBool(False)
Cfg.getParamBool("misc.logMode" ).setBool(True ) Cfg.getParamBool("misc.logMode" ).setBool(True )
Cfg.getParamBool("misc.verboseLevel1").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.verboseLevel1", "Verbose" , 0 )
layout.addParameter ( "Misc.", "misc.verboseLevel2", "Very Verbose" , 0 ) layout.addParameter ( "Misc.", "misc.verboseLevel2", "Very Verbose" , 0 )
layout.addParameter ( "Misc.", "misc.info" , "Show Infos" , 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.bug" , "Show Bugs" , 0 )
layout.addParameter ( "Misc.", "misc.logMode" , "Output is a TTY" , 0 ) layout.addParameter ( "Misc.", "misc.logMode" , "Output is a TTY" , 0 )
layout.addParameter ( "Misc.", "misc.traceLevel" , "Trace Level" , 1 ) 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 ); System::get()->setCatchCore ( not coreDump );
if ( verbose1 ) mstream::enable ( mstream::VerboseLevel1 ); if (verbose1) mstream::enable ( mstream::Verbose0|mstream::Verbose1 );
if ( verbose2 ) mstream::enable ( mstream::VerboseLevel2 ); if (verbose2) mstream::enable ( mstream::Verbose0|mstream::Verbose1|mstream::Verbose2 );
dbo_ptr<AllianceFramework> af ( AllianceFramework::create() ); dbo_ptr<AllianceFramework> af ( AllianceFramework::create() );

View File

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