coriolis/vlsisapd/doc/html/dtr.html

206 lines
26 KiB
HTML

<!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>
<!-- Generated by Doxygen 1.8.5 -->
</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>
<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>
<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>
<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;technology name=<span class="stringliteral">&quot;example&quot;</span> unit=<span class="stringliteral">&quot;micro&quot;</span> version=<span class="stringliteral">&quot;rev.A&quot;</span>&gt;</div>
<div class="line"> &lt;physical_rules&gt;</div>
<div class="line"> &lt;!-- transistor --&gt;</div>
<div class="line"> &lt;rule name=<span class="stringliteral">&quot;transistorMinL&quot;</span> value=<span class="stringliteral">&quot;0.10&quot;</span> ref=<span class="stringliteral">&quot;ref1&quot;</span>/&gt; </div>
<div class="line"> &lt;rule name=<span class="stringliteral">&quot;transistorMinW&quot;</span> value=<span class="stringliteral">&quot;0.20&quot;</span> ref=<span class="stringliteral">&quot;ref2&quot;</span>/&gt;</div>
<div class="line"></div>
<div class="line"> &lt;!-- minWidth --&gt;</div>
<div class="line"> &lt;rule name=<span class="stringliteral">&quot;minWidth&quot;</span> layer=<span class="stringliteral">&quot;metal1&quot;</span> value=<span class="stringliteral">&quot;0.15&quot;</span> ref=<span class="stringliteral">&quot;ref3&quot;</span>/&gt;</div>
<div class="line"></div>
<div class="line"> &lt;!-- minSpacing --&gt;</div>
<div class="line"> &lt;rule name=<span class="stringliteral">&quot;minSpacing&quot;</span> layer=<span class="stringliteral">&quot;metal1&quot;</span> value=<span class="stringliteral">&quot;0.20&quot;</span> ref=<span class="stringliteral">&quot;ref4&quot;</span>/&gt;</div>
<div class="line"> &lt;rule name=<span class="stringliteral">&quot;minSpacing&quot;</span> layer1=<span class="stringliteral">&quot;active&quot;</span> layer2=<span class="stringliteral">&quot;poly&quot;</span> value=<span class="stringliteral">&quot;0.10&quot;</span> ref=<span class="stringliteral">&quot;ref5&quot;</span>/&gt;</div>
<div class="line"></div>
<div class="line"> &lt;!-- minExtension --&gt;</div>
<div class="line"> &lt;arule name=<span class="stringliteral">&quot;minExtension&quot;</span> layer1=<span class="stringliteral">&quot;poly&quot;</span> layer2=<span class="stringliteral">&quot;active&quot;</span> value=<span class="stringliteral">&quot;0.20&quot;</span> ref=<span class="stringliteral">&quot;ref6&quot;</span>/&gt;</div>
<div class="line"></div>
<div class="line"> &lt;!-- minArea --&gt;</div>
<div class="line"> &lt;rule name=<span class="stringliteral">&quot;minArea&quot;</span> type=<span class="stringliteral">&quot;area&quot;</span> layer=<span class="stringliteral">&quot;metal1&quot;</span> value=<span class="stringliteral">&quot;0.100&quot;</span> ref=<span class="stringliteral">&quot;ref7&quot;</span>/&gt;</div>
<div class="line"> &lt;/physical_rules&gt;</div>
<div class="line">&lt;/technology&gt;</div>
<div class="line"></div>
</div><!-- fragment --><p>All source codes are available in the <code>examples</code> directory.</p>
<h2><a class="anchor" id="dtrC"></a>
C++</h2>
<h3><a class="anchor" id="dtrParseC"></a>
Parser</h3>
<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>std;</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#aef436e6e20d1dbf2eb78b089ca9d0794">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#a4a8ae82fc3348771d0b53d9a3b11652d">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; techno-&gt;<a class="code" href="class_d_t_r_1_1_techno.html#ac08e2e60dd16750551221ca908001057">getValue</a>(<span class="stringliteral">&quot;minExtension&quot;</span>, <span class="stringliteral">&quot;poly&quot;</span>, <span class="stringliteral">&quot;active&quot;</span>) &lt;&lt; endl</div>
<div class="line"> &lt;&lt; <span class="stringliteral">&quot;minArea 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;minArea&quot;</span>, <span class="stringliteral">&quot;metal1&quot;</span>) &lt;&lt; endl;</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 --><h3><a class="anchor" id="dtrDriveC"></a>
Driver</h3>
<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>std;</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.txt file is provided. User must set the $VLSISAPD_TOP variable before running these commands in the directory containing the CMakeLists.txt file: <div class="fragment"><div class="line">%&gt; mkdir build; cd build</div>
<div class="line">%&gt; cmake ..</div>
<div class="line">%&gt; make</div>
</div><!-- fragment --></dd></dl>
<h2><a class="anchor" id="dtrPython"></a>
Python</h2>
<h3><a class="anchor" id="dtrParsePython"></a>
Parser</h3>
<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"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="keyword">from</span> DTR <span class="keyword">import</span> *</div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="keyword">from</span> decimal <span class="keyword">import</span> Decimal</div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;</div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;techno = Techno.readFromFile(<span class="stringliteral">&quot;./example.dtr.xml&quot;</span>)</div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="keywordflow">print</span> <span class="stringliteral">&quot;+-----------------------------+&quot;</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="keywordflow">print</span> <span class="stringliteral">&quot;| technology: &quot;</span>+techno.get) + <span class="stringliteral">&quot; |&quot;</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="keywordflow">print</span> <span class="stringliteral">&quot;| units: &quot;</span>+techno.getUnit() +<span class="stringliteral">&quot; |&quot;</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="keywordflow">print</span> <span class="stringliteral">&quot;| version: &quot;</span>+techno.getVersion()+<span class="stringliteral">&quot; |&quot;</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="keywordflow">print</span> <span class="stringliteral">&quot;+-----------------------------+\n\n&quot;</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<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"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<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"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<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"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<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"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<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"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<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"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<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"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"># an example of why it is important to use Decimal in python:</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<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"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<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 --><h3><a class="anchor" id="dtrDrivePython"></a>
Driver</h3>
<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"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="keyword">from</span> DTR <span class="keyword">import</span> *</div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;</div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;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"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;techno.addRule (<span class="stringliteral">&quot;transistorMinL&quot;</span>, 0.1 , <span class="stringliteral">&quot;ref1&quot;</span>)</div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;techno.addRule (<span class="stringliteral">&quot;transistorMinW&quot;</span>, 0.2 , <span class="stringliteral">&quot;ref2&quot;</span>)</div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;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"><a name="l00008"></a><span class="lineno"> 8</span>&#160;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"><a name="l00009"></a><span class="lineno"> 9</span>&#160;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"><a name="l00010"></a><span class="lineno"> 10</span>&#160;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"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;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"><a name="l00013"></a><span class="lineno"> 13</span>&#160;rule.setType(<span class="stringliteral">&quot;area&quot;</span>)</div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;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.5 on Sat Aug 18 2018</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 - 2011 <a href="http://www.upmc.fr">UPMC</a> All rights reserved</small></td>
</tr>
</table>
</body>
</html>