2018-06-06 11:42:26 -05:00
<!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 >
2018-08-19 06:27:09 -05:00
<!-- Generated by Doxygen 1.8.5 -->
2018-06-06 11:42:26 -05:00
< / 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 >
2018-08-19 06:27:09 -05:00
< 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 >
2018-06-06 11:42:26 -05:00
< 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 >
2018-08-19 06:27:09 -05:00
< 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 / >
2018-06-06 11:42:26 -05:00
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 >
2018-08-19 06:27:09 -05:00
< p > The database conists in for simple objects :< / p >
< ul >
2018-06-06 11:42:26 -05:00
< 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 >
2018-08-19 06:27:09 -05:00
< 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 / >
2018-06-06 11:42:26 -05:00
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 >
2018-08-19 06:27:09 -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 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" >
2018-06-06 11:42:26 -05:00
< img src = "transistorCif.png" alt = "transistorCif.png" / >
< div class = "caption" >
AGDS example layout< / div > < / div >
< h2 > < a class = "anchor" id = "agdsC" > < / a >
C++< / h2 >
2018-08-19 06:27:09 -05:00
< 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 < string> < / span > < / div >
< div class = "line" > < span class = "keyword" > using namespace < / span > std;< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "preprocessor" > #include " vlsisapd/agds/Library.h" < / span > < / div >
< div class = "line" > < span class = "preprocessor" > #include " vlsisapd/agds/Structure.h" < / span > < / div >
< div class = "line" > < span class = "preprocessor" > #include " vlsisapd/agds/Rectangle.h" < / 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" > " myTestLib" < / span > ));< / div >
< div class = "line" > < / div >
< div class = "line" > lib-> < a class = "code" href = "class_a_g_d_s_1_1_library.html#a0d0e972bb142f892c462bb8d7f04a50b" > setUserUnits< / a > (0.001);< / div >
< div class = "line" > lib-> < 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" > " Transistor" < / span > );< / div >
< div class = "line" > < / div >
< div class = "line" > str-> < a class = "code" href = "class_a_g_d_s_1_1_structure.html#a2dd203e6770f7d15d6f706867c919a60" > addElement< / a > (poly);< / div >
< div class = "line" > str-> < 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-> < 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-> < a class = "code" href = "class_a_g_d_s_1_1_library.html#a33b9d989b84857f46034085664ff3fa2" > writeToFile< / a > (< span class = "stringliteral" > " ./transistor.agds" < / 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" > %> mkdir build; cd build< / div >
< div class = "line" > %> cmake ..< / div >
< div class = "line" > %> make< / div >
< / div > <!-- fragment --> < / dd > < / dl >
2018-06-06 11:42:26 -05:00
< h2 > < a class = "anchor" id = "agdsPython" > < / a >
Python< / h2 >
2018-08-19 06:27:09 -05:00
< 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" > < a name = "l00001" > < / a > < span class = "lineno" > 1< / span >   import AGDS< / div >
< div class = "line" > < a name = "l00002" > < / a > < span class = "lineno" > 2< / span >   lib = < a class = "code" href = "class_a_g_d_s_1_1_library.html" > AGDS.Library< / a > (< span class = "stringliteral" > " myTestLib" < / span > )< / div >
< div class = "line" > < a name = "l00003" > < / a > < span class = "lineno" > 3< / span >   lib.setUserUnits(0.001)< / div >
< div class = "line" > < a name = "l00004" > < / a > < span class = "lineno" > 4< / span >   lib.setPhysUnits(1.0e-9)< / div >
< div class = "line" > < a name = "l00005" > < / a > < span class = "lineno" > 5< / span >   < / div >
< div class = "line" > < a name = "l00006" > < / a > < span class = "lineno" > 6< / span >   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" > < a name = "l00007" > < / a > < span class = "lineno" > 7< / span >   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" > < a name = "l00008" > < / a > < span class = "lineno" > 8< / span >   < / div >
< div class = "line" > < a name = "l00009" > < / a > < span class = "lineno" > 9< / span >   str = < a class = "code" href = "class_a_g_d_s_1_1_structure.html" > AGDS.Structure< / a > (< span class = "stringliteral" > " Transistor" < / span > )< / div >
< div class = "line" > < a name = "l00010" > < / a > < span class = "lineno" > 10< / span >   str.addElement(active)< / div >
< div class = "line" > < a name = "l00011" > < / a > < span class = "lineno" > 11< / span >   str.addElement(poly)< / div >
< div class = "line" > < a name = "l00012" > < / a > < span class = "lineno" > 12< / span >   < / div >
< div class = "line" > < a name = "l00013" > < / a > < span class = "lineno" > 13< / span >   lib.addStructure(str)< / div >
< div class = "line" > < a name = "l00014" > < / a > < span class = "lineno" > 14< / span >   lib.writeToFile(< span class = "stringliteral" > " ./transistor.agds" < / 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 >
2018-06-06 11:42:26 -05:00
< / div > < / div > <!-- contents -->
< br >
< hr >
< table class = "footer1" >
< tr >
2018-10-01 09:52:17 -05:00
< td class = "LFooter" > < small > Generated by doxygen 1.8.5 on Mon Oct 1 2018< / small > < / td >
2018-06-06 11:42:26 -05:00
< 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 © 2010 - 2011 < a href = "http://www.upmc.fr" > UPMC< / a > All rights reserved< / small > < / td >
< / tr >
< / table >
< / body >
< / html >