coriolis/vlsisapd/doc/html/dtr.html

89 lines
25 KiB
HTML
Raw Normal View History

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0//EN'>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>VLSI SAPD Documentation</title>
<link href="stylesheet.css" rel="stylesheet" type="text/css">
</head>
<h1 id="pagetop" class="header">VLSI SAPD Documentation</h1>
<center class="header">
<table class="header">
<tr>
<td><a href="index.html">Presentation</a></td>
<td><a href="agds.html">AGDS</a></td>
<td><a href="cif.html">CIF</a></td>
<td><a href="dtr.html">DTR</a></td>
<td><a href="openchams.html">OPENCHAMS</a></td>
<td><a href="spice.html">SPICE</a></td>
<td><a href="contact.html">Links & Contact</a></td>
</tr>
</table>
</center>
<br>
<hr>
<body>
Analog integration part II. Analog place & route (slicing tree). * Change: In Hurricane::CellWidget, set the minimal size to 350 pixels to fit my normal DPI secondary screen... * Change: In Hurricane::Error(), reactivate the backtrace generation by default. Seriously slow down the program each time an Error is to be constructed. * Bug: In Analog::Device::preCreate(), check for NULL Technology before attempting to use it. * Change: In Hurricane/Analog, remove all '*Arguments*' classes and their Python interface. It was an obsoleted way of passing devices parameters to the Python layout generators (located in Oroshi). Now we just get them straight from the Device with the getParamter() method. * Change: In CRL::System CTOR, add Python pathes for Oroshi & Karakaze. * Change: In Oroshi/Python/WIP_*.py layout generator scripts, remove all uses of the "Arguments". Directly access the parameters through the device itself. Make the checkCoherency() with identical arguments as of layout(). * New: Bora tool that performs analog place & route. Based on a slicing tree representation. It is the thesis work of Eric Lao. Code beautyfication and some programming cleanup. * New: Karakaze tool, provide the Python base class AnalogDesign used to build an analog design. Create/configure devices and assemble them in a slicing tree. * Change: In Unicorn/cgt.py, display the stack trace in case of an ImportError exception as well as for other exceptions. Add Bora to the set for included tool engines.
2018-10-18 11:10:01 -05:00
<!-- Generated by Doxygen 1.8.14 -->
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">DTR Format </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="dtrPres"></a>
Presentation</h1>
Analog integration part II. Analog place & route (slicing tree). * Change: In Hurricane::CellWidget, set the minimal size to 350 pixels to fit my normal DPI secondary screen... * Change: In Hurricane::Error(), reactivate the backtrace generation by default. Seriously slow down the program each time an Error is to be constructed. * Bug: In Analog::Device::preCreate(), check for NULL Technology before attempting to use it. * Change: In Hurricane/Analog, remove all '*Arguments*' classes and their Python interface. It was an obsoleted way of passing devices parameters to the Python layout generators (located in Oroshi). Now we just get them straight from the Device with the getParamter() method. * Change: In CRL::System CTOR, add Python pathes for Oroshi & Karakaze. * Change: In Oroshi/Python/WIP_*.py layout generator scripts, remove all uses of the "Arguments". Directly access the parameters through the device itself. Make the checkCoherency() with identical arguments as of layout(). * New: Bora tool that performs analog place & route. Based on a slicing tree representation. It is the thesis work of Eric Lao. Code beautyfication and some programming cleanup. * New: Karakaze tool, provide the Python base class AnalogDesign used to build an analog design. Create/configure devices and assemble them in a slicing tree. * Change: In Unicorn/cgt.py, display the stack trace in case of an ImportError exception as well as for other exceptions. Add Bora to the set for included tool engines.
2018-10-18 11:10:01 -05:00
<p>The <b>Design Technology Rules (DTR)</b> format was developped as a part of the Chams Project (<a href="http://www-soc.lip6.fr/recherche/cian/chams/">http://www-soc.lip6.fr/recherche/cian/chams/</a>). It aims at offering a generic description of layout design rules for CMOS technologies.<br />
</p>
<h2><a class="anchor" id="dtrAutrhos"></a>
Author</h2>
<p>Damien Dupuis: damien.dupuis(at)lip6(.)fr</p>
<h2><a class="anchor" id="dtrLimits"></a>
Limitations</h2>
<p>Only simple rules are supported at the moment. For example the minimum width of a metal layer has only one value, although it should depends on the length of the wire drawned.</p>
<h1><a class="anchor" id="dtrDB"></a>
Stand alone database structure</h1>
Analog integration part II. Analog place & route (slicing tree). * Change: In Hurricane::CellWidget, set the minimal size to 350 pixels to fit my normal DPI secondary screen... * Change: In Hurricane::Error(), reactivate the backtrace generation by default. Seriously slow down the program each time an Error is to be constructed. * Bug: In Analog::Device::preCreate(), check for NULL Technology before attempting to use it. * Change: In Hurricane/Analog, remove all '*Arguments*' classes and their Python interface. It was an obsoleted way of passing devices parameters to the Python layout generators (located in Oroshi). Now we just get them straight from the Device with the getParamter() method. * Change: In CRL::System CTOR, add Python pathes for Oroshi & Karakaze. * Change: In Oroshi/Python/WIP_*.py layout generator scripts, remove all uses of the "Arguments". Directly access the parameters through the device itself. Make the checkCoherency() with identical arguments as of layout(). * New: Bora tool that performs analog place & route. Based on a slicing tree representation. It is the thesis work of Eric Lao. Code beautyfication and some programming cleanup. * New: Karakaze tool, provide the Python base class AnalogDesign used to build an analog design. Create/configure devices and assemble them in a slicing tree. * Change: In Unicorn/cgt.py, display the stack trace in case of an ImportError exception as well as for other exceptions. Add Bora to the set for included tool engines.
2018-10-18 11:10:01 -05:00
<p>The database contains four object :</p><ul>
<li><a class="el" href="class_d_t_r_1_1_techno.html">DTR::Techno</a> contains generic informations such as the name of the technology and the unit used, and the list of all technologic rules.</li>
<li><a class="el" href="class_d_t_r_1_1_rule.html">DTR::Rule</a> &amp; <a class="el" href="class_d_t_r_1_1_a_rule.html">DTR::ARule</a> respectively describe a symmetrical and an asymmetrical rule.</li>
</ul>
<p>The library also use the <a class="el" href="class_d_t_r_1_1_d_t_r_exception.html">DTR::DTRException</a> class to throw excptions.</p>
<h2><a class="anchor" id="dtrParser"></a>
Using the parser</h2>
<p>Simply load a technology with static function <a class="el" href="class_d_t_r_1_1_techno.html#acf863c2bdb7f1aacc4422c8155c60d17" title="creates and returns a Techno object based on a database source file. ">DTR::Techno::readFromFile()</a> and then get rules (<a class="el" href="class_d_t_r_1_1_techno.html#a4d56a05b47bd6c51e4e18120f49b584b" title="returns the rule uniquely identified by its name and layers. ">DTR::Techno::getRule()</a>) or directly values (<a class="el" href="class_d_t_r_1_1_techno.html#ac08e2e60dd16750551221ca908001057" title="returns the value of a rule uniquely identified by its name and layers. ">DTR::Techno::getValue()</a>).</p>
<h2><a class="anchor" id="dtrDriver"></a>
Using the driver</h2>
<p>Using the driver is very simple, user has to create a <a class="el" href="class_d_t_r_1_1_techno.html">DTR::Techno</a> object and simply add <a class="el" href="class_d_t_r_1_1_rule.html">DTR::Rule</a> or <a class="el" href="class_d_t_r_1_1_a_rule.html">DTR::ARule</a> to it. The adding methods return the newly created Rule so user can set the rule type (<a class="el" href="class_d_t_r_1_1_rule.html#a3568407d7a7890c39b8c9acc1e608535" title="sets the type of a rule. ">DTR::Rule::setType()</a>) if necessary. Finally use the <a class="el" href="class_d_t_r_1_1_techno.html#a26b05539dd3345963b8708788b82e2cb" title="writes the database to file. ">DTR::Techno::writeToFile()</a> method to dump the database to file.</p>
<h1><a class="anchor" id="dtrExamples"></a>
Examples</h1>
Analog integration part II. Analog place & route (slicing tree). * Change: In Hurricane::CellWidget, set the minimal size to 350 pixels to fit my normal DPI secondary screen... * Change: In Hurricane::Error(), reactivate the backtrace generation by default. Seriously slow down the program each time an Error is to be constructed. * Bug: In Analog::Device::preCreate(), check for NULL Technology before attempting to use it. * Change: In Hurricane/Analog, remove all '*Arguments*' classes and their Python interface. It was an obsoleted way of passing devices parameters to the Python layout generators (located in Oroshi). Now we just get them straight from the Device with the getParamter() method. * Change: In CRL::System CTOR, add Python pathes for Oroshi & Karakaze. * Change: In Oroshi/Python/WIP_*.py layout generator scripts, remove all uses of the "Arguments". Directly access the parameters through the device itself. Make the checkCoherency() with identical arguments as of layout(). * New: Bora tool that performs analog place & route. Based on a slicing tree representation. It is the thesis work of Eric Lao. Code beautyfication and some programming cleanup. * New: Karakaze tool, provide the Python base class AnalogDesign used to build an analog design. Create/configure devices and assemble them in a slicing tree. * Change: In Unicorn/cgt.py, display the stack trace in case of an ImportError exception as well as for other exceptions. Add Bora to the set for included tool engines.
2018-10-18 11:10:01 -05:00
<p>As said is the global presentation, VLSI SAPD project provides C++ libraries and Python modules for each supported format. In this section we present simple code examples to parse and drive a DTR file using C++ or Python. The DTR file considered is the same for all examples: <code>example.dtr.xml</code> </p><div class="fragment"><div class="line">&lt;<span class="keywordtype">technology</span> <span class="keyword">name</span>=<span class="stringliteral">&quot;example&quot;</span> <span class="keyword">unit</span>=<span class="stringliteral">&quot;micro&quot;</span> <span class="keyword">version</span>=<span class="stringliteral">&quot;rev.A&quot;</span>&gt;</div><div class="line"> &lt;<span class="keywordtype">physical_rules</span>&gt;</div><div class="line"> <span class="comment">&lt;!-- transistor --&gt;</span></div><div class="line"> &lt;<span class="keywordtype">rule</span> <span class="keyword">name</span>=<span class="stringliteral">&quot;transistorMinL&quot;</span> <span class="keyword">value</span>=<span class="stringliteral">&quot;0.10&quot;</span> <span class="keyword">ref</span>=<span class="stringliteral">&quot;ref1&quot;</span>/&gt; </div><div class="line"> &lt;<span class="keywordtype">rule</span> <span class="keyword">name</span>=<span class="stringliteral">&quot;transistorMinW&quot;</span> <span class="keyword">value</span>=<span class="stringliteral">&quot;0.20&quot;</span> <span class="keyword">ref</span>=<span class="stringliteral">&quot;ref2&quot;</span>/&gt;</div><div class="line"></div><div class="line"> <span class="comment">&lt;!-- minWidth --&gt;</span></div><div class="line"> &lt;<span class="keywordtype">rule</span> <span class="keyword">name</span>=<span class="stringliteral">&quot;minWidth&quot;</span> <span class="keyword">layer</span>=<span class="stringliteral">&quot;metal1&quot;</span> <span class="keyword">value</span>=<span class="stringliteral">&quot;0.15&quot;</span> <span class="keyword">ref</span>=<span class="stringliteral">&quot;ref3&quot;</span>/&gt;</div><div class="line"></div><div class="line"> <span class="comment">&lt;!-- minSpacing --&gt;</span></div><div class="line"> &lt;<span class="keywordtype">rule</span> <span class="keyword">name</span>=<span class="stringliteral">&quot;minSpacing&quot;</span> <span class="keyword">layer</span>=<span class="stringliteral">&quot;metal1&quot;</span> <span class="keyword">value</span>=<span class="stringliteral">&quot;0.20&quot;</span> <span class="keyword">ref</span>=<span class="stringliteral">&quot;ref4&quot;</span>/&gt;</div><div class="line"> &lt;<span class="keywordtype">rule</span> <span class="keyword">name</span>=<span class="stringliteral">&quot;minSpacing&quot;</span> <span class="keyword">layer1</span>=<span class="stringliteral">&quot;active&quot;</span> <span class="keyword">layer2</span>=<span class="stringliteral">&quot;poly&quot;</span> <span class="keyword">value</span>=<span class="stringliteral">&quot;0.10&quot;</span> <span class="keyword">ref</span>=<span class="stringliteral">&quot;ref5&quot;</span>/&gt;</div><div class="line"></div><div class="line"> <span class="comment">&lt;!-- minExtension --&gt;</span></div><div class="line"> &lt;<span class="keywordtype">arule</span> <span class="keyword">name</span>=<span class="stringliteral">&quot;minExtension&quot;</span> <span class="keyword">layer1</span>=<span class="stringliteral">&quot;poly&quot;</span> <span class="keyword">layer2</span>=<span class="stringliteral">&quot;active&quot;</span> <span class="keyword">value</span>=<span class="stringliteral">&quot;0.20&quot;</span> <span class="keyword">ref</span>=<span class="stringliteral">&quot;ref6&quot;</span>/&gt;</div><div class="line"></div><div class="line"> <span class="comment">&lt;!-- minArea --&gt;</span></div><div class="line"> &lt;<span class="keywordtype">rule</span> <sp
<h2><a class="anchor" id="dtrC"></a>
C++</h2>
<h3><a class="anchor" id="dtrParseC"></a>
Parser</h3>
Analog integration part II. Analog place & route (slicing tree). * Change: In Hurricane::CellWidget, set the minimal size to 350 pixels to fit my normal DPI secondary screen... * Change: In Hurricane::Error(), reactivate the backtrace generation by default. Seriously slow down the program each time an Error is to be constructed. * Bug: In Analog::Device::preCreate(), check for NULL Technology before attempting to use it. * Change: In Hurricane/Analog, remove all '*Arguments*' classes and their Python interface. It was an obsoleted way of passing devices parameters to the Python layout generators (located in Oroshi). Now we just get them straight from the Device with the getParamter() method. * Change: In CRL::System CTOR, add Python pathes for Oroshi & Karakaze. * Change: In Oroshi/Python/WIP_*.py layout generator scripts, remove all uses of the "Arguments". Directly access the parameters through the device itself. Make the checkCoherency() with identical arguments as of layout(). * New: Bora tool that performs analog place & route. Based on a slicing tree representation. It is the thesis work of Eric Lao. Code beautyfication and some programming cleanup. * New: Karakaze tool, provide the Python base class AnalogDesign used to build an analog design. Create/configure devices and assemble them in a slicing tree. * Change: In Unicorn/cgt.py, display the stack trace in case of an ImportError exception as well as for other exceptions. Add Bora to the set for included tool engines.
2018-10-18 11:10:01 -05:00
<p>The following code (<code>parseDtr.cpp</code>) is an example of how to parse a DTR file using C++ library. </p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"></div><div class="line"><span class="preprocessor">#include &quot;vlsisapd/dtr/Techno.h&quot;</span></div><div class="line"></div><div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> * argv[]) {</div><div class="line"> <a class="code" href="class_d_t_r_1_1_techno.html">DTR::Techno</a>* techno = <a class="code" href="class_d_t_r_1_1_techno.html#acf863c2bdb7f1aacc4422c8155c60d17">DTR::Techno::readFromFile</a>(<span class="stringliteral">&quot;./example.dtr.xml&quot;</span>);</div><div class="line"></div><div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;+-----------------------------+&quot;</span> &lt;&lt; endl</div><div class="line"> &lt;&lt; <span class="stringliteral">&quot;| technology: &quot;</span> &lt;&lt; techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#a3fd7335faa33dce2f87c7e50eef3e294">getName</a>() &lt;&lt; <span class="stringliteral">&quot; |&quot;</span> &lt;&lt; endl</div><div class="line"> &lt;&lt; <span class="stringliteral">&quot;| units: &quot;</span> &lt;&lt; techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#a42e12e8f890c03ebf12e754d7e489dcb">getUnit</a>() &lt;&lt; <span class="stringliteral">&quot; |&quot;</span> &lt;&lt; endl</div><div class="line"> &lt;&lt; <span class="stringliteral">&quot;| version: &quot;</span> &lt;&lt; techno-&gt;getVersion() &lt;&lt; <span class="stringliteral">&quot; |&quot;</span> &lt;&lt; endl</div><div class="line"> &lt;&lt; <span class="stringliteral">&quot;+-----------------------------+&quot;</span> &lt;&lt; endl &lt;&lt; endl;</div><div class="line"></div><div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;transistorMinL = &quot;</span> &lt;&lt; techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#ac08e2e60dd16750551221ca908001057">getValue</a>(<span class="stringliteral">&quot;transistorMinL&quot;</span>) &lt;&lt; endl</div><div class="line"> &lt;&lt; <span class="stringliteral">&quot;transistorMinW = &quot;</span> &lt;&lt; techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#ad5ef5b8e444ab7a86a2e3bff7762c956">getValueAsString</a>(<span class="stringliteral">&quot;transistorMinW&quot;</span>) &lt;&lt; endl</div><div class="line"> &lt;&lt; <span class="stringliteral">&quot;minWidth of metal1 = &quot;</span> &lt;&lt; techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#ac08e2e60dd16750551221ca908001057">getValue</a>(<span class="stringliteral">&quot;minWidth&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>) &lt;&lt; endl</div><div class="line"> &lt;&lt; <span class="stringliteral">&quot;minSpacing of metal1 = &quot;</span> &lt;&lt; techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#ac08e2e60dd16750551221ca908001057">getValue</a>(<span class="stringliteral">&quot;minWidth&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>) &lt;&lt; endl</div><div class="line"> &lt;&lt; <span class="stringliteral">&quot;minSpacing of active vs poly = &quot;</span> &lt;&lt; techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#ac08e2e60dd16750551221ca908001057">getValue</a>(<span class="stringliteral">&quot;minSpacing&quot;</span>, <span class="stringliteral">&quot;active&quot;</span>, <span class="stringliteral">&quot;poly&quot;</span>) &lt;&lt; endl</div><div class="line"> &lt;&lt; <span class="stringliteral">&quot;minExtension active over poly = &quot;</span> &lt;&lt; te
Driver</h3>
Analog integration part II. Analog place & route (slicing tree). * Change: In Hurricane::CellWidget, set the minimal size to 350 pixels to fit my normal DPI secondary screen... * Change: In Hurricane::Error(), reactivate the backtrace generation by default. Seriously slow down the program each time an Error is to be constructed. * Bug: In Analog::Device::preCreate(), check for NULL Technology before attempting to use it. * Change: In Hurricane/Analog, remove all '*Arguments*' classes and their Python interface. It was an obsoleted way of passing devices parameters to the Python layout generators (located in Oroshi). Now we just get them straight from the Device with the getParamter() method. * Change: In CRL::System CTOR, add Python pathes for Oroshi & Karakaze. * Change: In Oroshi/Python/WIP_*.py layout generator scripts, remove all uses of the "Arguments". Directly access the parameters through the device itself. Make the checkCoherency() with identical arguments as of layout(). * New: Bora tool that performs analog place & route. Based on a slicing tree representation. It is the thesis work of Eric Lao. Code beautyfication and some programming cleanup. * New: Karakaze tool, provide the Python base class AnalogDesign used to build an analog design. Create/configure devices and assemble them in a slicing tree. * Change: In Unicorn/cgt.py, display the stack trace in case of an ImportError exception as well as for other exceptions. Add Bora to the set for included tool engines.
2018-10-18 11:10:01 -05:00
<p>This C++ code (<code>driveDtr.cpp</code>) generates a out.dtr.xml file equivalent to the previous example.dtr.xml. </p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"></div><div class="line"><span class="preprocessor">#include &quot;vlsisapd/dtr/Techno.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;vlsisapd/dtr/Rules.h&quot;</span></div><div class="line"></div><div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> * argv[]) {</div><div class="line"> <a class="code" href="class_d_t_r_1_1_techno.html">DTR::Techno</a>* techno = <span class="keyword">new</span> <a class="code" href="class_d_t_r_1_1_techno.html">DTR::Techno</a>(<span class="stringliteral">&quot;MyTech&quot;</span>, <span class="stringliteral">&quot;micro&quot;</span>, <span class="stringliteral">&quot;rev.A&quot;</span>);</div><div class="line"></div><div class="line"> techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#afa2c8412c365c950649b9f81661ecafd">addRule</a> (<span class="stringliteral">&quot;transistorMinL&quot;</span>, 0.1 , <span class="stringliteral">&quot;ref1&quot;</span>);</div><div class="line"> techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#afa2c8412c365c950649b9f81661ecafd">addRule</a> (<span class="stringliteral">&quot;transistorMinW&quot;</span>, 0.2 , <span class="stringliteral">&quot;ref2&quot;</span>);</div><div class="line"> techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#afa2c8412c365c950649b9f81661ecafd">addRule</a> (<span class="stringliteral">&quot;minWidth&quot;</span> , 0.15, <span class="stringliteral">&quot;ref3&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>);</div><div class="line"> techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#afa2c8412c365c950649b9f81661ecafd">addRule</a> (<span class="stringliteral">&quot;minSpacing&quot;</span> , 0.2 , <span class="stringliteral">&quot;ref4&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>);</div><div class="line"> techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#afa2c8412c365c950649b9f81661ecafd">addRule</a> (<span class="stringliteral">&quot;minSpacing&quot;</span> , 0.1 , <span class="stringliteral">&quot;ref5&quot;</span>, <span class="stringliteral">&quot;active&quot;</span>, <span class="stringliteral">&quot;poly&quot;</span>);</div><div class="line"> techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#a5f5a790974fe7d3b1c6f1b698ef0a818">addARule</a>(<span class="stringliteral">&quot;minExtension&quot;</span> , 0.2 , <span class="stringliteral">&quot;ref6&quot;</span>, <span class="stringliteral">&quot;poly&quot;</span> , <span class="stringliteral">&quot;active&quot;</span>);</div><div class="line"> </div><div class="line"> <a class="code" href="class_d_t_r_1_1_rule.html">DTR::Rule</a>* rule = techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#afa2c8412c365c950649b9f81661ecafd">addRule</a>(<span class="stringliteral">&quot;minArea&quot;</span>, 0.1, <span class="stringliteral">&quot;ref7&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>);</div><div class="line"> rule-&gt;<a class="code" href="class_d_t_r_1_1_rule.html#a3568407d7a7890c39b8c9acc1e608535">setType</a>(<span class="stringliteral">&quot;area&quot;</span>);</div><div class="line"></div><div class="line"> techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#a26b05539dd3345963b8708788b82e2cb">writeToFile</a>(<span class="stringliteral">&quot;./out.dtr.xml&quot;</span>);</div><div class="line"> </div><div class="line"> <span class="keywordflow">return</span> 0;</div><div class="line">}</div><div class="line"></div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>In order to compile these codes, a CMakeLists.
<h2><a class="anchor" id="dtrPython"></a>
Python</h2>
<h3><a class="anchor" id="dtrParsePython"></a>
Parser</h3>
Analog integration part II. Analog place & route (slicing tree). * Change: In Hurricane::CellWidget, set the minimal size to 350 pixels to fit my normal DPI secondary screen... * Change: In Hurricane::Error(), reactivate the backtrace generation by default. Seriously slow down the program each time an Error is to be constructed. * Bug: In Analog::Device::preCreate(), check for NULL Technology before attempting to use it. * Change: In Hurricane/Analog, remove all '*Arguments*' classes and their Python interface. It was an obsoleted way of passing devices parameters to the Python layout generators (located in Oroshi). Now we just get them straight from the Device with the getParamter() method. * Change: In CRL::System CTOR, add Python pathes for Oroshi & Karakaze. * Change: In Oroshi/Python/WIP_*.py layout generator scripts, remove all uses of the "Arguments". Directly access the parameters through the device itself. Make the checkCoherency() with identical arguments as of layout(). * New: Bora tool that performs analog place & route. Based on a slicing tree representation. It is the thesis work of Eric Lao. Code beautyfication and some programming cleanup. * New: Karakaze tool, provide the Python base class AnalogDesign used to build an analog design. Create/configure devices and assemble them in a slicing tree. * Change: In Unicorn/cgt.py, display the stack trace in case of an ImportError exception as well as for other exceptions. Add Bora to the set for included tool engines.
2018-10-18 11:10:01 -05:00
<p>The following python script (<code>parseDtr.py</code>) is an example of how to parse a DTR file using python module. </p><div class="fragment"><div class="line"><span class="keyword">from</span> DTR <span class="keyword">import</span> *</div><div class="line"><span class="keyword">from</span> decimal <span class="keyword">import</span> Decimal</div><div class="line"></div><div class="line">techno = Techno.readFromFile(<span class="stringliteral">&quot;./example.dtr.xml&quot;</span>)</div><div class="line"></div><div class="line"><span class="keywordflow">print</span> <span class="stringliteral">&quot;+-----------------------------+&quot;</span></div><div class="line"><span class="keywordflow">print</span> <span class="stringliteral">&quot;| technology: &quot;</span>+techno.get) + <span class="stringliteral">&quot; |&quot;</span></div><div class="line"><span class="keywordflow">print</span> <span class="stringliteral">&quot;| units: &quot;</span>+techno.getUnit() +<span class="stringliteral">&quot; |&quot;</span></div><div class="line"><span class="keywordflow">print</span> <span class="stringliteral">&quot;| version: &quot;</span>+techno.getVersion()+<span class="stringliteral">&quot; |&quot;</span></div><div class="line"><span class="keywordflow">print</span> <span class="stringliteral">&quot;+-----------------------------+\n\n&quot;</span></div><div class="line"></div><div class="line"><span class="keywordflow">print</span> <span class="stringliteral">&quot;transistorMinL = %s&quot;</span>%techno.getValue(<span class="stringliteral">&quot;transistorMinL&quot;</span>)</div><div class="line"><span class="keywordflow">print</span> <span class="stringliteral">&quot;transistorMinW = %s&quot;</span>%Decimal(techno.getValueAsString(<span class="stringliteral">&quot;transistorMinW&quot;</span>))</div><div class="line"><span class="keywordflow">print</span> <span class="stringliteral">&quot;minWidth of metal1 = %s&quot;</span>%techno.getValue(<span class="stringliteral">&quot;minWidth&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>)</div><div class="line"><span class="keywordflow">print</span> <span class="stringliteral">&quot;minSpacing of metal1 = %s&quot;</span>%techno.getValue(<span class="stringliteral">&quot;minWidth&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>)</div><div class="line"><span class="keywordflow">print</span> <span class="stringliteral">&quot;minSpacing of active vs poly = %s&quot;</span>%techno.getValue(<span class="stringliteral">&quot;minSpacing&quot;</span>, <span class="stringliteral">&quot;active&quot;</span>, <span class="stringliteral">&quot;poly&quot;</span>)</div><div class="line"><span class="keywordflow">print</span> <span class="stringliteral">&quot;minExtension active over poly = %s&quot;</span>%techno.getValue(<span class="stringliteral">&quot;minExtension&quot;</span>, <span class="stringliteral">&quot;poly&quot;</span>, <span class="stringliteral">&quot;active&quot;</span>)</div><div class="line"><span class="keywordflow">print</span> <span class="stringliteral">&quot;minArea of metal1 = %s&quot;</span>%techno.getValue(<span class="stringliteral">&quot;minArea&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>)</div><div class="line"></div><div class="line"><span class="comment"># an example of why it is important to use Decimal in python:</span></div><div class="line"><span class="keywordflow">print</span> techno.getValue(<span class="stringliteral">&quot;minArea&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>)*3-0.3 <span class="comment"># returns 5.55111512313e-17</span></div><div class="line"><span class="keywordflow">print</span> Decimal(techno.getValueAsString(<span class="stringliteral">&quot;minArea&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>))*3-Decimal(<span class="stringliteral">&#39;0.3&#39;</span>) <span class="comment"># returns 0.000</span></div></div><!-- fragment -->
Driver</h3>
Analog integration part II. Analog place & route (slicing tree). * Change: In Hurricane::CellWidget, set the minimal size to 350 pixels to fit my normal DPI secondary screen... * Change: In Hurricane::Error(), reactivate the backtrace generation by default. Seriously slow down the program each time an Error is to be constructed. * Bug: In Analog::Device::preCreate(), check for NULL Technology before attempting to use it. * Change: In Hurricane/Analog, remove all '*Arguments*' classes and their Python interface. It was an obsoleted way of passing devices parameters to the Python layout generators (located in Oroshi). Now we just get them straight from the Device with the getParamter() method. * Change: In CRL::System CTOR, add Python pathes for Oroshi & Karakaze. * Change: In Oroshi/Python/WIP_*.py layout generator scripts, remove all uses of the "Arguments". Directly access the parameters through the device itself. Make the checkCoherency() with identical arguments as of layout(). * New: Bora tool that performs analog place & route. Based on a slicing tree representation. It is the thesis work of Eric Lao. Code beautyfication and some programming cleanup. * New: Karakaze tool, provide the Python base class AnalogDesign used to build an analog design. Create/configure devices and assemble them in a slicing tree. * Change: In Unicorn/cgt.py, display the stack trace in case of an ImportError exception as well as for other exceptions. Add Bora to the set for included tool engines.
2018-10-18 11:10:01 -05:00
<p>This python script (<code>driveDtr.py</code>) generates a out.dtr.xml file equivalent to the previous example.dtr.xml. </p><div class="fragment"><div class="line"><span class="keyword">from</span> DTR <span class="keyword">import</span> *</div><div class="line"></div><div class="line">techno = Techno(<span class="stringliteral">&quot;myTech&quot;</span>, <span class="stringliteral">&quot;micro&quot;</span>, <span class="stringliteral">&quot;rev.A&quot;</span>)</div><div class="line"></div><div class="line">techno.addRule (<span class="stringliteral">&quot;transistorMinL&quot;</span>, 0.1 , <span class="stringliteral">&quot;ref1&quot;</span>)</div><div class="line">techno.addRule (<span class="stringliteral">&quot;transistorMinW&quot;</span>, 0.2 , <span class="stringliteral">&quot;ref2&quot;</span>)</div><div class="line">techno.addRule (<span class="stringliteral">&quot;minWidth&quot;</span> , 0.15, <span class="stringliteral">&quot;ref3&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>)</div><div class="line">techno.addRule (<span class="stringliteral">&quot;minSpacing&quot;</span> , 0.2 , <span class="stringliteral">&quot;ref4&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>)</div><div class="line">techno.addRule (<span class="stringliteral">&quot;minSpacing&quot;</span> , 0.1 , <span class="stringliteral">&quot;ref5&quot;</span>, <span class="stringliteral">&quot;active&quot;</span>, <span class="stringliteral">&quot;poly&quot;</span>)</div><div class="line">techno.addARule(<span class="stringliteral">&quot;minExtension&quot;</span> , 0.2 , <span class="stringliteral">&quot;ref6&quot;</span>, <span class="stringliteral">&quot;poly&quot;</span>, <span class="stringliteral">&quot;active&quot;</span>)</div><div class="line"></div><div class="line">rule = techno.addRule(<span class="stringliteral">&quot;minArea&quot;</span>, 0.1, <span class="stringliteral">&quot;ref7&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>)</div><div class="line">rule.setType(<span class="stringliteral">&quot;area&quot;</span>)</div><div class="line"></div><div class="line">techno.writeToFile(<span class="stringliteral">&quot;./out.dtr.xml&quot;</span>)</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>In order to run these two scripts (<code>parseDtr.py</code> &amp; driveDtr.py), user must ensure that $PYTHONPATH variable points to the directory containing DTR.so module. </dd></dl>
</div></div><!-- contents -->
<br>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Nov 12 2020</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>
<table class="footer2">
<tr>
<td class="LFooter">VLSI SAPD Documentation</td>
<td class="RFooter"><small>Copyright &#169; 2010 - 2020 <a href="http://www.sorbonne-universite.fr">UPMC</a> All rights reserved</small></td>
</tr>
</table>
</body>
</html>