* ./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:
parent
12f595941a
commit
b4887b1180
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -26,7 +26,7 @@ allianceConfig = \
|
|||
, ( 'POWER' , 'vdd')
|
||||
, ( 'GROUND' , 'vss')
|
||||
, ( 'CLOCK' , '^ck.*')
|
||||
, ( 'BLOCKAGE' , '^blockageNet*')
|
||||
, ( 'BLOCKAGE' , '^blockage[Nn]et*')
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -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" ) );
|
||||
|
|
|
@ -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] );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
|
@ -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() ) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 )
|
||||
|
|
|
@ -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() );
|
||||
|
||||
|
|
|
@ -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 ();
|
||||
|
||||
|
|
Loading…
Reference in New Issue