140 lines
8.0 KiB
TeX
140 lines
8.0 KiB
TeX
|
\hypertarget{agds_agdsPres}{}\section{Presentation}\label{agds_agdsPres}
|
||
|
The {\bfseries Ascii Graphic Database System (A\+G\+DS)} format is an ascii (text) version of the wellknown and industry standard G\+DS II binary format. This format hierarchicaly represents geometric shapes, labels and other layout informations (see \href{http://en.wikipedia.org/wiki/GDSII}{\tt http\+://en.\+wikipedia.\+org/wiki/\+G\+D\+S\+II} for more informations). ~\newline
|
||
|
The ascii format has several advantages versus binary format\+:
|
||
|
\begin{DoxyItemize}
|
||
|
\item human readable,
|
||
|
\item easy to edit manually or with dedicated tools,
|
||
|
\item easy to search or grep into,
|
||
|
\item easy to compare and understand differences between two files,
|
||
|
\item easy to convert.
|
||
|
\end{DoxyItemize}
|
||
|
|
||
|
The conversion from Ascii G\+DS to binary G\+DS and vice versa can be done with {\bfseries Owl\+Vision G\+D\+S\+II Viewer} available at \href{http://owlvision.org}{\tt http\+://owlvision.\+org}~\newline
|
||
|
Since it has been developped in java, it can be run on all platforms.\hypertarget{agds_agdsAutrhos}{}\subsection{Author}\label{agds_agdsAutrhos}
|
||
|
Damien Dupuis\+: damien.\+dupuis(at)lip6(.)fr\hypertarget{agds_agdsLimits}{}\subsection{Limitations}\label{agds_agdsLimits}
|
||
|
Currently the only supported shape in this driver is the rectangle.\hypertarget{agds_agdsDB}{}\section{Stand alone database structure}\label{agds_agdsDB}
|
||
|
The database conists in for simple objects \+:
|
||
|
\begin{DoxyItemize}
|
||
|
\item \mbox{\hyperlink{class_a_g_d_s_1_1_library}{A\+G\+D\+S\+::\+Library}} contains all A\+G\+DS library informations such as the name, the units used (user and physical) and the list of all Structures.
|
||
|
\item \mbox{\hyperlink{class_a_g_d_s_1_1_structure}{A\+G\+D\+S\+::\+Structure}} describes a G\+DS Structure with a name and a list of Elements.
|
||
|
\item \mbox{\hyperlink{class_a_g_d_s_1_1_element}{A\+G\+D\+S\+::\+Element}} is an abstract class from which derived the \mbox{\hyperlink{class_a_g_d_s_1_1_rectangle}{A\+G\+D\+S\+::\+Rectangle}}.
|
||
|
\item \mbox{\hyperlink{class_a_g_d_s_1_1_rectangle}{A\+G\+D\+S\+::\+Rectangle}} describes a rectangle element of a structure.
|
||
|
\end{DoxyItemize}\hypertarget{agds_agdsDriver}{}\subsection{Using the driver}\label{agds_agdsDriver}
|
||
|
To drive an A\+G\+DS file, user has to create one \mbox{\hyperlink{class_a_g_d_s_1_1_library}{A\+G\+D\+S\+::\+Library}} and add \mbox{\hyperlink{class_a_g_d_s_1_1_structure}{A\+G\+D\+S\+::\+Structure}} objects to it with the \mbox{\hyperlink{class_a_g_d_s_1_1_library_a93d333a20154e0b688ff3ff213039171}{A\+G\+D\+S\+::\+Library\+::add\+Structure()}} method. Each \mbox{\hyperlink{class_a_g_d_s_1_1_structure}{A\+G\+D\+S\+::\+Structure}} contains at least one \mbox{\hyperlink{class_a_g_d_s_1_1_element}{A\+G\+D\+S\+::\+Element}} added with \mbox{\hyperlink{class_a_g_d_s_1_1_structure_a2dd203e6770f7d15d6f706867c919a60}{A\+G\+D\+S\+::\+Structure\+::add\+Element()}} method.~\newline
|
||
|
All objects can be independently created as far as they are correctly added to their parent. ~\newline
|
||
|
Once the library is completely specified, simply call the \mbox{\hyperlink{class_a_g_d_s_1_1_library_a33b9d989b84857f46034085664ff3fa2}{A\+G\+D\+S\+::\+Library\+::write\+To\+File()}} method to drive the database to file.\hypertarget{agds_agdsExamples}{}\section{Examples}\label{agds_agdsExamples}
|
||
|
As said is the global presentation, V\+L\+SI S\+A\+PD project provides C++ libraries and Python modules for each supported format. In this section we present two simple code examples to drive a A\+G\+DS file using C++ or Python. These two examples drive the same file {\ttfamily transistor.\+agds\+:}
|
||
|
\begin{DoxyCodeInclude}
|
||
|
HEADER 5;
|
||
|
BGNLIB;
|
||
|
LASTMOD \{10-06-11 14:02:15\};
|
||
|
LASTACC \{10-06-11 14:02:15\};
|
||
|
LIBNAME myTestLib.DB;
|
||
|
UNITS;
|
||
|
USERUNITS 0.001;
|
||
|
PHYSUNITS 1.000000e-09;
|
||
|
|
||
|
BGNSTR;
|
||
|
CREATION \{10-06-11 14:02:15\};
|
||
|
LASTMOD \{10-06-11 14:02:15\};
|
||
|
STRNAME Transistor;
|
||
|
|
||
|
BOUNDARY;
|
||
|
LAYER 17;
|
||
|
DATATYPE 0;
|
||
|
XY 5;
|
||
|
X: 305; Y: 150;
|
||
|
X: 305; Y: 830;
|
||
|
X: 365; Y: 830;
|
||
|
X: 365; Y: 150;
|
||
|
X: 305; Y: 150;
|
||
|
ENDEL;
|
||
|
|
||
|
BOUNDARY;
|
||
|
LAYER 6;
|
||
|
DATATYPE 0;
|
||
|
XY 5;
|
||
|
X: 130; Y: 290;
|
||
|
X: 130; Y: 690;
|
||
|
X: 540; Y: 690;
|
||
|
X: 540; Y: 290;
|
||
|
X: 130; Y: 290;
|
||
|
ENDEL;
|
||
|
|
||
|
ENDSTR;
|
||
|
ENDLIB;
|
||
|
\end{DoxyCodeInclude}
|
||
|
|
||
|
|
||
|
|
||
|
\begin{DoxyImage}
|
||
|
\includegraphics[width=.25\linewidth]{transistorCif}
|
||
|
\doxyfigcaption{A\+G\+DS example layout }
|
||
|
\end{DoxyImage}
|
||
|
\hypertarget{agds_agdsC}{}\subsection{C++}\label{agds_agdsC}
|
||
|
Here is the C++ code ({\ttfamily drive\+Agds.\+cpp}) used to generate the transistor.\+agds file. (Source is available in examples directory).
|
||
|
\begin{DoxyCodeInclude}
|
||
|
\textcolor{preprocessor}{#include <string>}
|
||
|
\textcolor{keyword}{using namespace }\mbox{\hyperlink{namespacestd}{std}};
|
||
|
|
||
|
\textcolor{preprocessor}{#include "vlsisapd/agds/Library.h"}
|
||
|
\textcolor{preprocessor}{#include "vlsisapd/agds/Structure.h"}
|
||
|
\textcolor{preprocessor}{#include "vlsisapd/agds/Rectangle.h"}
|
||
|
|
||
|
\textcolor{keywordtype}{int} main(\textcolor{keywordtype}{int} argc, \textcolor{keywordtype}{char} * argv[]) \{
|
||
|
\mbox{\hyperlink{class_a_g_d_s_1_1_library}{AGDS::Library}}* lib = \textcolor{keyword}{new} \mbox{\hyperlink{class_a_g_d_s_1_1_library}{AGDS::Library}}(\textcolor{keywordtype}{string}(\textcolor{stringliteral}{"myTestLib"}));
|
||
|
|
||
|
lib->\mbox{\hyperlink{class_a_g_d_s_1_1_library_a0d0e972bb142f892c462bb8d7f04a50b}{setUserUnits}}(0.001);
|
||
|
lib->\mbox{\hyperlink{class_a_g_d_s_1_1_library_a938acb6eb8d14aade9dba7331c75ff0a}{setPhysUnits}}(1.0E-9);
|
||
|
|
||
|
\mbox{\hyperlink{class_a_g_d_s_1_1_rectangle}{AGDS::Rectangle}}* poly = \textcolor{keyword}{new} \mbox{\hyperlink{class_a_g_d_s_1_1_rectangle}{AGDS::Rectangle}}( 17, 305, 150, 365, 830 );
|
||
|
\mbox{\hyperlink{class_a_g_d_s_1_1_rectangle}{AGDS::Rectangle}}* active = \textcolor{keyword}{new} \mbox{\hyperlink{class_a_g_d_s_1_1_rectangle}{AGDS::Rectangle}}( 6, 130, 290, 540, 690 );
|
||
|
|
||
|
\mbox{\hyperlink{class_a_g_d_s_1_1_structure}{AGDS::Structure}}* str = \textcolor{keyword}{new} \mbox{\hyperlink{class_a_g_d_s_1_1_structure}{AGDS::Structure}}(\textcolor{stringliteral}{"Transistor"});
|
||
|
|
||
|
str->\mbox{\hyperlink{class_a_g_d_s_1_1_structure_a2dd203e6770f7d15d6f706867c919a60}{addElement}}(poly);
|
||
|
str->\mbox{\hyperlink{class_a_g_d_s_1_1_structure_a2dd203e6770f7d15d6f706867c919a60}{addElement}}(active);
|
||
|
|
||
|
lib->\mbox{\hyperlink{class_a_g_d_s_1_1_library_a93d333a20154e0b688ff3ff213039171}{addStructure}}(str);
|
||
|
|
||
|
lib->\mbox{\hyperlink{class_a_g_d_s_1_1_library_a33b9d989b84857f46034085664ff3fa2}{writeToFile}}(\textcolor{stringliteral}{"./transistor.agds"});
|
||
|
|
||
|
\textcolor{keywordflow}{return} 0;
|
||
|
\}
|
||
|
|
||
|
\end{DoxyCodeInclude}
|
||
|
|
||
|
|
||
|
\begin{DoxyNote}{Note}
|
||
|
In order to compile this code, a C\+Make\+Lists.\+txt file is provided. User must set the \$\+V\+L\+S\+I\+S\+A\+P\+D\+\_\+\+T\+OP variable before running these commands in the directory containing the C\+Make\+Lists.\+txt file\+:
|
||
|
\begin{DoxyCode}
|
||
|
%> mkdir build; cd build
|
||
|
%> cmake ..
|
||
|
%> make
|
||
|
\end{DoxyCode}
|
||
|
|
||
|
\end{DoxyNote}
|
||
|
\hypertarget{agds_agdsPython}{}\subsection{Python}\label{agds_agdsPython}
|
||
|
Here is the Python code ({\ttfamily drive\+Agds.\+py}) used to generate the transistor.\+agds file. (Source is available in examples directory).
|
||
|
\begin{DoxyCodeInclude}
|
||
|
\textcolor{keyword}{import} AGDS
|
||
|
lib = \mbox{\hyperlink{class_a_g_d_s_1_1_library}{AGDS.Library}}(\textcolor{stringliteral}{"myTestLib"})
|
||
|
lib.setUserUnits(0.001)
|
||
|
lib.setPhysUnits(1.0e-9)
|
||
|
|
||
|
active = \mbox{\hyperlink{class_a_g_d_s_1_1_rectangle}{AGDS.Rectangle}}( 6, 120, 290, 540, 690) \textcolor{comment}{# layer 6 corresponds to active}
|
||
|
poly = \mbox{\hyperlink{class_a_g_d_s_1_1_rectangle}{AGDS.Rectangle}}(17, 305, 150, 365, 830) \textcolor{comment}{# layer 17 corresponds to polysilicium}
|
||
|
|
||
|
str = \mbox{\hyperlink{class_a_g_d_s_1_1_structure}{AGDS.Structure}}(\textcolor{stringliteral}{"Transistor"})
|
||
|
str.addElement(active)
|
||
|
str.addElement(poly)
|
||
|
|
||
|
lib.addStructure(str)
|
||
|
lib.writeToFile(\textcolor{stringliteral}{"./transistor.agds"})
|
||
|
\end{DoxyCodeInclude}
|
||
|
|
||
|
|
||
|
\begin{DoxyNote}{Note}
|
||
|
In order to run the {\ttfamily drive\+Agds.\+py} script, user must ensure that \$\+P\+Y\+T\+H\+O\+N\+P\+A\+TH variable points to the directory containing A\+G\+D\+S.\+so module.
|
||
|
\end{DoxyNote}
|