<!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.14 -->
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">AGDS Format </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="agdsPres"></a>
Presentation</h1>
<p>The <b>Ascii Graphic Database System (AGDS)</b> format is an ascii (text) version of the wellknown and industry standard GDS II binary format. This format hierarchicaly represents geometric shapes, labels and other layout informations (see <a href="http://en.wikipedia.org/wiki/GDSII">http://en.wikipedia.org/wiki/GDSII</a> for more informations). <br />
The ascii format has several advantages versus binary format:</p><ul>
<li>human readable,</li>
<li>easy to edit manually or with dedicated tools,</li>
<li>easy to search or grep into,</li>
<li>easy to compare and understand differences between two files,</li>
<li>easy to convert.</li>
</ul>
<p>The conversion from Ascii GDS to binary GDS and vice versa can be done with <b>OwlVision GDSII Viewer</b> available at <a href="http://owlvision.org">http://owlvision.org</a><br />
Since it has been developped in java, it can be run on all platforms.</p>
<h2><a class="anchor" id="agdsAutrhos"></a>
Author</h2>
<p>Damien Dupuis: damien.dupuis(at)lip6(.)fr</p>
<h2><a class="anchor" id="agdsLimits"></a>
Limitations</h2>
<p>Currently the only supported shape in this driver is the rectangle.</p>
<h1><a class="anchor" id="agdsDB"></a>
Stand alone database structure</h1>
<p>The database conists in for simple objects :</p><ul>
<li><a class="el" href="class_a_g_d_s_1_1_library.html">AGDS::Library</a> contains all AGDS library informations such as the name, the units used (user and physical) and the list of all Structures.</li>
<li><a class="el" href="class_a_g_d_s_1_1_structure.html">AGDS::Structure</a> describes a GDS Structure with a name and a list of Elements.</li>
<li><a class="el" href="class_a_g_d_s_1_1_element.html">AGDS::Element</a> is an abstract class from which derived the <a class="el" href="class_a_g_d_s_1_1_rectangle.html">AGDS::Rectangle</a>.</li>
<li><a class="el" href="class_a_g_d_s_1_1_rectangle.html">AGDS::Rectangle</a> describes a rectangle element of a structure.</li>
</ul>
<h2><a class="anchor" id="agdsDriver"></a>
Using the driver</h2>
<p>To drive an AGDS file, user has to create one <a class="el" href="class_a_g_d_s_1_1_library.html">AGDS::Library</a> and add <a class="el" href="class_a_g_d_s_1_1_structure.html">AGDS::Structure</a> objects to it with the <a class="el" href="class_a_g_d_s_1_1_library.html#a93d333a20154e0b688ff3ff213039171" title="adds a Structure to the Library. ">AGDS::Library::addStructure()</a> method. Each <a class="el" href="class_a_g_d_s_1_1_structure.html">AGDS::Structure</a> contains at least one <a class="el" href="class_a_g_d_s_1_1_element.html">AGDS::Element</a> added with <a class="el" href="class_a_g_d_s_1_1_structure.html#a2dd203e6770f7d15d6f706867c919a60" title="adds an Element to the Structure. ">AGDS::Structure::addElement()</a> method.<br />
All objects can be independently created as far as they are correctly added to their parent. <br />
Once the library is completely specified, simply call the <a class="el" href="class_a_g_d_s_1_1_library.html#a33b9d989b84857f46034085664ff3fa2" title="writes the database to file. ">AGDS::Library::writeToFile()</a> method to drive the database to file.</p>
<h1><a class="anchor" id="agdsExamples"></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 two simple code examples to drive a AGDS file using C++ or Python. These two examples drive the same file <code>transistor.agds:</code> </p><div class="fragment"><div class="line">HEADER 5;</div><div class="line">BGNLIB;</div><div class="line">  LASTMOD {10-06-11  14:02:15};</div><div class="line">  LASTACC {10-06-11  14:02:15};</div><div class="line">LIBNAME myTestLib.DB;</div><div class="line">UNITS;</div><div class="line">  USERUNITS 0.001;</div><div class="line">  PHYSUNITS 1.000000e-09;</div><div class="line"></div><div class="line">BGNSTR;</div><div class="line">  CREATION {10-06-11  14:02:15};</div><div class="line">  LASTMOD  {10-06-11  14:02:15};</div><div class="line">STRNAME Transistor;</div><div class="line"></div><div class="line">BOUNDARY;</div><div class="line">LAYER 17;</div><div class="line">DATATYPE 0;</div><div class="line">XY 5;</div><div class="line">  X: 305;   Y: 150;</div><div class="line">  X: 305;   Y: 830;</div><div class="line">  X: 365;   Y: 830;</div><div class="line">  X: 365;   Y: 150;</div><div class="line">  X: 305;   Y: 150;</div><div class="line">ENDEL;</div><div class="line"></div><div class="line">BOUNDARY;</div><div class="line">LAYER 6;</div><div class="line">DATATYPE 0;</div><div class="line">XY 5;</div><div class="line">  X: 130;   Y: 290;</div><div class="line">  X: 130;   Y: 690;</div><div class="line">  X: 540;   Y: 690;</div><div class="line">  X: 540;   Y: 290;</div><div class="line">  X: 130;   Y: 290;</div><div class="line">ENDEL;</div><div class="line"></div><div class="line">ENDSTR;</div><div class="line">ENDLIB;</div></div><!-- fragment --><div class="image">
<img src="transistorCif.png" alt="transistorCif.png"/>
<div class="caption">
AGDS example layout</div></div>
 <h2><a class="anchor" id="agdsC"></a>
C++</h2>
<p>Here is the C++ code (<code>driveAgds.cpp</code>) used to generate the transistor.agds file. (Source is available in examples directory). </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/agds/Library.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;vlsisapd/agds/Structure.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;vlsisapd/agds/Rectangle.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_a_g_d_s_1_1_library.html">AGDS::Library</a>* lib = <span class="keyword">new</span> <a class="code" href="class_a_g_d_s_1_1_library.html">AGDS::Library</a>(<span class="keywordtype">string</span>(<span class="stringliteral">&quot;myTestLib&quot;</span>));</div><div class="line"></div><div class="line">    lib-&gt;<a class="code" href="class_a_g_d_s_1_1_library.html#a0d0e972bb142f892c462bb8d7f04a50b">setUserUnits</a>(0.001);</div><div class="line">    lib-&gt;<a class="code" href="class_a_g_d_s_1_1_library.html#a938acb6eb8d14aade9dba7331c75ff0a">setPhysUnits</a>(1.0E-9);</div><div class="line"></div><div class="line">    <a class="code" href="class_a_g_d_s_1_1_rectangle.html">AGDS::Rectangle</a>* poly   = <span class="keyword">new</span> <a class="code" href="class_a_g_d_s_1_1_rectangle.html">AGDS::Rectangle</a>( 17, 305, 150, 365, 830 );</div><div class="line">    <a class="code" href="class_a_g_d_s_1_1_rectangle.html">AGDS::Rectangle</a>* active = <span class="keyword">new</span> <a class="code" href="class_a_g_d_s_1_1_rectangle.html">AGDS::Rectangle</a>(  6, 130, 290, 540, 690 );</div><div class="line"></div><div class="line">    <a class="code" href="class_a_g_d_s_1_1_structure.html">AGDS::Structure</a>* str = <span class="keyword">new</span> <a class="code" href="class_a_g_d_s_1_1_structure.html">AGDS::Structure</a>(<span class="stringliteral">&quot;Transistor&quot;</span>);</div><div class="line"></div><div class="line">    str-&gt;<a class="code" href="class_a_g_d_s_1_1_structure.html#a2dd203e6770f7d15d6f706867c919a60">addElement</a>(poly);</div><div class="line">    str-&gt;<a class="code" href="class_a_g_d_s_1_1_structure.html#a2dd203e6770f7d15d6f706867c919a60">addElement</a>(active);</div><div class="line"></div><div class="line">    lib-&gt;<a class="code" href="class_a_g_d_s_1_1_library.html#a93d333a20154e0b688ff3ff213039171">addStructure</a>(str);</div><div class="line"></div><div class="line">    lib-&gt;<a class="code" href="class_a_g_d_s_1_1_library.html#a33b9d989b84857f46034085664ff3fa2">writeToFile</a>(<span class="stringliteral">&quot;./transistor.agds&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 this code, 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="agdsPython"></a>
Python</h2>
<p>Here is the Python code (<code>driveAgds.py</code>) used to generate the transistor.agds file. (Source is available in examples directory). </p><div class="fragment"><div class="line">import AGDS</div><div class="line">lib = <a class="code" href="class_a_g_d_s_1_1_library.html">AGDS.Library</a>(<span class="stringliteral">&quot;myTestLib&quot;</span>)</div><div class="line">lib.setUserUnits(0.001)</div><div class="line">lib.setPhysUnits(1.0e-9)</div><div class="line"></div><div class="line">active = <a class="code" href="class_a_g_d_s_1_1_rectangle.html">AGDS.Rectangle</a>( 6, 120, 290, 540, 690) <span class="comment"># layer  6 corresponds to active</span></div><div class="line">poly   = <a class="code" href="class_a_g_d_s_1_1_rectangle.html">AGDS.Rectangle</a>(17, 305, 150, 365, 830) <span class="comment"># layer 17 corresponds to polysilicium</span></div><div class="line"></div><div class="line">str = <a class="code" href="class_a_g_d_s_1_1_structure.html">AGDS.Structure</a>(<span class="stringliteral">&quot;Transistor&quot;</span>)</div><div class="line">str.addElement(active)</div><div class="line">str.addElement(poly)</div><div class="line"></div><div class="line">lib.addStructure(str)</div><div class="line">lib.writeToFile(<span class="stringliteral">&quot;./transistor.agds&quot;</span>)</div></div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>In order to run the <code>driveAgds.py</code> script, user must ensure that $PYTHONPATH variable points to the directory containing AGDS.so module. </dd></dl>
</div></div><!-- contents -->
    <br>
    <hr>
    <table class="footer1">
      <tr>
        <td class="LFooter"><small>Generated by doxygen 1.8.14 on Mon Apr 27 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 - 2011 <a href="http://www.upmc.fr">UPMC</a> All rights reserved</small></td>
      </tr>
    </table>
  </body>
</html>