\hypertarget{openchams_openChamsPres}{}\section{Presentation}\label{openchams_openChamsPres} The {\bfseries Open\+C\+H\+A\+MS} format was developped as a part of the Chams Project (\href{http://www-soc.lip6.fr/recherche/cian/chams/}{\tt http\+://www-\/soc.\+lip6.\+fr/recherche/cian/chams/}). It aims at offering a convenient way to describe analogic circuits\textquotesingle{} netlists and is based on X\+ML. Some C\+H\+A\+MS specific informations, such as schematic properties, layout properties or sizing procedure, can be described in this format.~\newline \hypertarget{openchams_openChamsAutrhos}{}\subsection{Author}\label{openchams_openChamsAutrhos} Damien Dupuis\+: damien.\+dupuis(at)lip6(.)fr\hypertarget{openchams_openChamsDB}{}\section{Stand alone database structure}\label{openchams_openChamsDB} The database has many objects that can be arranged in five categories\+: \begin{DoxyItemize} \item General \begin{DoxyItemize} \item Open\+Chams\+::\+Circuit \item Open\+Chams\+::\+Name \item Open\+Chams\+::\+Open\+Chams\+Exception \end{DoxyItemize} \item \mbox{\hyperlink{class_netlist}{Netlist}} \begin{DoxyItemize} \item Open\+Chams\+::\+Netlist \item Open\+Chams\+::\+Instance \item Open\+Chams\+::\+Device \item Open\+Chams\+::\+Transistor \item Open\+Chams\+::\+Parameters \item Open\+Chams\+::\+Net \end{DoxyItemize} \item \mbox{\hyperlink{class_sizing}{Sizing}} \begin{DoxyItemize} \item Open\+Chams\+::\+Sizing \item Open\+Chams\+::\+Operator \item Open\+Chams\+::\+Simul\+Model \end{DoxyItemize} \item \mbox{\hyperlink{class_schematic}{Schematic}} \begin{DoxyItemize} \item Open\+Chams\+::\+Schematic \item Open\+Chams\+::\+Port \item Open\+Chams\+::\+Wire \item Open\+Chams\+::\+Wire\+Point \item Open\+Chams\+::\+Instance\+Point \item Open\+Chams\+::\+Port\+Point \item Open\+Chams\+::\+Intermediate\+Point \end{DoxyItemize} \item \mbox{\hyperlink{class_layout}{Layout}} \begin{DoxyItemize} \item Open\+Chams\+::\+Layout \item Open\+Chams\+::\+Node \item Open\+Chams\+::\+Bloc \item Open\+Chams\+::\+Group \end{DoxyItemize} \end{DoxyItemize}\hypertarget{openchams_openChamsParser}{}\subsection{Using the parser}\label{openchams_openChamsParser} Simply load an O\+P\+E\+N\+C\+H\+A\+MS file using the static function Open\+Chams\+::\+Circuit\+::read\+From\+File() and then get the netlist object (Open\+Chams\+::\+Circuit\+::get\+Netlist()) or the sizing procedure (Open\+Chams\+::\+Circuit\+::get\+Sizing(), might be N\+U\+LL) or any other useful information (see Open\+Chams\+::\+Circuit).\hypertarget{openchams_openChamsDriver}{}\subsection{Using the driver}\label{openchams_openChamsDriver} Using the driver is very simple, user has to create an Open\+Chams\+::\+Circuit object and simply add Open\+Chams\+::\+Netlist (mandatory) and Open\+Chams\+::\+Sizing (optionnal) or Open\+Chams\+::\+Schematic (optionnal) or Open\+Chams\+::\+Layout (optinnal) to it. Finally use the Open\+Chams\+::\+Circuit\+::write\+To\+File() method to dump the database to file.\hypertarget{openchams_openChamsExamples}{}\section{Examples}\label{openchams_openChamsExamples} 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 simple code examples to parse and drive a O\+P\+E\+N\+C\+H\+A\+MS file using C++ or Python. The O\+P\+E\+N\+C\+H\+A\+MS files considered are the same for all examples\+: {\ttfamily inverter.\+xml} and {\ttfamily buffer.\+xml} \begin{DoxyCodeInclude} \end{DoxyCodeInclude} \begin{DoxyCodeInclude} \end{DoxyCodeInclude} All source codes are available in the {\ttfamily examples} directory.\hypertarget{openchams_openChamsC}{}\subsection{C++}\label{openchams_openChamsC} \hypertarget{openchams_openChamsParseC}{}\subsubsection{Parser}\label{openchams_openChamsParseC} The following code ({\ttfamily parse\+Open\+Chams.\+cpp}) is an example of how to parse a O\+P\+E\+N\+C\+H\+A\+MS file using C++ library. \begin{DoxyCodeInclude} \end{DoxyCodeInclude} \hypertarget{openchams_openChamsDriveC}{}\subsubsection{Driver}\label{openchams_openChamsDriveC} This C++ code ({\ttfamily drive\+Open\+Chams.\+cpp}) generates an inverter.\+xml file equivalent to the included one. \begin{DoxyCodeInclude} \end{DoxyCodeInclude} \begin{DoxyNote}{Note} In order to compile these codes, 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{openchams_openChamsPython}{}\subsection{Python}\label{openchams_openChamsPython} \hypertarget{openchams_openChamsParsePython}{}\subsubsection{Parser}\label{openchams_openChamsParsePython} The following python script ({\ttfamily parse\+Open\+Chams.\+py}) is an example of how to parse a O\+P\+E\+N\+C\+H\+A\+MS file using python module. \begin{DoxyCodeInclude} \end{DoxyCodeInclude} \hypertarget{openchams_openChamsDrivePython}{}\subsubsection{Driver}\label{openchams_openChamsDrivePython} This python script ({\ttfamily drive\+Open\+Chams.\+py}) generates an inverter.\+xml file equivalent to the included one. \begin{DoxyCodeInclude} \end{DoxyCodeInclude} \begin{DoxyNote}{Note} In order to run these two scripts ({\ttfamily parse\+Open\+Chams.\+py} \& drive\+Open\+Chams.\+py), user must ensure that \$\+P\+Y\+T\+H\+O\+N\+P\+A\+TH variable points to the directory containing O\+P\+E\+N\+C\+H\+A\+M\+S.\+so module. \end{DoxyNote}