diff --git a/vlsisapd/doc/agds/agds.dox b/vlsisapd/doc/agds/agds.dox index 6c88e557..bd362d02 100644 --- a/vlsisapd/doc/agds/agds.dox +++ b/vlsisapd/doc/agds/agds.dox @@ -41,6 +41,13 @@ Here is the C++ code (\c driveAgds.cpp) used to generate the transistor.agds file. (Source is available in examples directory). \include driveAgds.cpp + \note 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: + \code + %> mkdir build; cd build + %> cmake .. + %> make + \endcode + \subsection agdsPython Python Here is the Python code (\c driveAgds.py) used to generate the transistor.agds file. (Source is available in examples directory). \include driveAgds.py diff --git a/vlsisapd/doc/cif/cif.dox b/vlsisapd/doc/cif/cif.dox index 8a0f6c62..60a58197 100644 --- a/vlsisapd/doc/cif/cif.dox +++ b/vlsisapd/doc/cif/cif.dox @@ -29,6 +29,13 @@ Here is the C++ code (\c driveCif.cpp) used to generate the transistor.cif file. (Source is available in examples directory). \include driveCif.cpp + \note 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: + \code + %> mkdir build; cd build + %> cmake .. + %> make + \endcode + \subsection cifPython Python Here is the Python code (\c driveCif.py) used to generate the transistor.cif file. (Source is available in examples directory). \include driveCif.py diff --git a/vlsisapd/doc/doxyfile b/vlsisapd/doc/doxyfile index e3cf3f40..1232dfaa 100644 --- a/vlsisapd/doc/doxyfile +++ b/vlsisapd/doc/doxyfile @@ -179,11 +179,7 @@ TAB_SIZE = 4 # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. -ALIASES = "arguments=\b Arguments:\n"\ - "returns=\b Returns:\n" \ - "note=\b Note:\n" \ - "checks=\b Checks:\n" \ - "example=\b Example:\n" +ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. @@ -572,7 +568,7 @@ WARN_LOGFILE = # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = "." "../src/cif" "../src/agds" +INPUT = "." "../src/cif" "../src/agds" "../src/dtr" # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is diff --git a/vlsisapd/doc/dtr/Name.dox b/vlsisapd/doc/dtr/Name.dox new file mode 100644 index 00000000..027f5eec --- /dev/null +++ b/vlsisapd/doc/dtr/Name.dox @@ -0,0 +1,57 @@ +// -*- C++ -*- + +namespace DTR { +/*! \class Name + * + * This class provides an automatic management of shared name. + */ + +/*! \fn Name::Name(std::string str) + * \brief gets a shared Name, creates it if it does not exist. + * + * \param str the string associated to the name. + */ + +/*! \fn Name::Name(const char* cstr) + * \brief gets a shared Name, creates it if it does not exist. + * + * \param cstr the character string associated to the name. + * + * \note this method is not yet available in python + */ + +/*! \fn bool Name::operator==(const Name&) + * \brief redifines the '==' operator. + * + * \note this method is not yet available in python + */ + +/*! \fn bool Name::operator==(const std::string&) + * \brief redifines the '==' operator. + * + * \note this method is not yet available in python + */ + +/*! \fn bool Name::operator!=(const Name&) + * \brief redifines the '!=' operator. + * + * \note this method is not yet available in python + */ + +/*! \fn bool Name::operator!=(const std::string&) + * \brief redifines the '!=' operator. + * + * \note this method is not yet available in python + */ + +/*! \fn bool Name::operator<(const Name) const + * \brief redifines the '<' operator. + * + * \note this method is not yet available in python + */ + +/*! \fn inline const std::string& Name::getString() const + * \brief returns the string associated to the Name. + */ + +} diff --git a/vlsisapd/doc/dtr/Rule.dox b/vlsisapd/doc/dtr/Rule.dox new file mode 100644 index 00000000..cd6f58ff --- /dev/null +++ b/vlsisapd/doc/dtr/Rule.dox @@ -0,0 +1,85 @@ +// -*- C++ -*- + +namespace DTR { +/*! \class Rule + * + * This class describes a symmetrical rule. + * + * A symmetrical rule represents several type of rules: + * - a simple rule with only a name (e.g. transistorMinW: transistor minimum width) + * - a rule for a unique layer (e.g. minWidth.metal1: the minimum width for metal1 wire) + * - a rule associating two layers (e.g minSpace.poly.active: the minimum spacing between a poly shape and an active shape) + * In this last case the symmetrical characteristic is important since it implies that the value is the same if we invert the two layers : minSpacing poly vs active = minSpacing active vs poly. + * + * Typical rules using no layer are: + * transistorMinW, transsitorMaxW, transistorMinL transistorMaxL + * + * Typical rules using one layer are: + * minWidth, minSpacing, minArea, minGateSpacing, minStrapEnclosure + * + * Typical rules using two layers are: + * minSpacing + * + */ + +/*! \fn Rule::Rule(Name name, double value, Name ref, Name layer1, Name layer2) + * \brief creates a new rule. + * + * \param name the name of the rule. + * \param value the value of the rule. + * \param ref the reference of the rule (helpful to find rule in design kit). + * \param layer1 the first layer. + * \param layer2 the second layer. + */ + +/*! \fn inline Name Rule::getName() + * \brief returns the name of the rule. + */ + +/*! \fn inline Name Rule::getType() + * \brief returns the type of the rule. + * + * Rule's type allows to set a specific type for a rule especially the 'area' type to take into account that the value of the rule is to be considered in unit^2. + */ + +/*! \fn inline double Rule::getValue() + * \brief returns the value of the rule. + */ + +/*! \fn inline std::string Rule::getValueAsString() + * \brief returns the string corresponding to the value of the rule. + */ + +/*! \fn inline Name Rule::getRef() + * \brief returns the reference of the rule. + */ + +/*! \fn inline Name Rule::getLayer1() + * \brief returns the first layer of the rule. + */ + +/*! \fn inline Name Rule::getLayer2() + * \brief returns the second layer of the rule. + */ + +/*! \fn inline void Rule::setType(Name type) + * \brief sets the type of a rule. + * + * \param type the type of the rule. + * + * \note By default the type of a rule is Name(""). + */ + + /*! \class ARule + * + * This class describes an asymmetrical rule. + * + * An asymmetrical rule represents a two layers rule for which inverting layer1 and layer2 implies that the value of rule change. + * For example minimum enclosure rule is assymetrical. + * + * Typical arules are: + * minExtension, minEnclosure, minLengthEnclosure, minWidthEnclosure, lineExtension, minGateExtension, minGateEnclosure + * + */ + +} diff --git a/vlsisapd/doc/dtr/Techno.dox b/vlsisapd/doc/dtr/Techno.dox new file mode 100644 index 00000000..9c875c24 --- /dev/null +++ b/vlsisapd/doc/dtr/Techno.dox @@ -0,0 +1,100 @@ +// -*- C++ -*- + +namespace DTR { +/*! \class Techno + * + * This class contains generic informations such as the name of the technology and the unit used, and the list of all technologic rules. + */ + +/*! \fn Techno::Techno(Name name, Name unit) + * \brief creates a new technology + * + * \param name the name of the technology. + * \param unit the unit used for all values. + */ + +/*! \fn inline Name Techno::getName() + * \brief returns the name of the technology. + */ + +/*! \fn inline Name Techno::getUnit() + * \brief returns the unit. + */ + +/*! \fn inline std::vector& Techno::getRules() + * \brief returns a reference on the std::vector containing all technology's rules. + * + * \note this method is not yet available in python + */ + +/*! \fn Rule* Techno::addRule(Name name, double value, Name ref, Name layer1, Name layer2) + * \brief creates a new Rule and adds it the to Techno object. + * + * \param name the name of the rule. + * \param value the value of the rule. + * \param ref the reference of the rule (helpful to find the rule in design kit). + * \param layer1 the first layer. This is an optionnal argument, default value is Name(""). + * \param layer2 the second layer. This is an optionnal argument, default value is Name(""). + * + * \return the newly created Rule object. + */ + +/*! \fn Arule* Techno::addARule(Name name, double value, Name ref, Name layer1, Name layer2) + * \brief creates a new ARule and adds it to the Techno object. + * + * \param name the name of the rule. + * \param value the value of the rule. + * \param ref the reference of the rule (helpful to find the rule in design kit). + * \param layer1 the first layer. + * \param layer2 the second layer. + * + * \return the newly created ARule object. + */ + +/*! \fn Rule* Techno::getRule(Name name, Name layer1, Name layer2) + * \brief returns the rule uniquely identified by its name and layers. + * + * \param name the name of the rule. + * \param layer1 the first layer. This is an optionnal argument, default value is Name(""). + * \param layer2 the second layer. This is an optionnal argument, default value is Name(""). + * + * \return the rule. + */ + +/*! \fn double Techno::getValue(Name name, Name layer1, Name layer2) + * \brief returns the value of a rule uniquely identified by its name and layers. + * + * \param name the name of the rule. + * \param layer1 the first layer. This is an optionnal argument, default value is Name(""). + * \param layer2 the second layer. This is an optionnal argument, default value is Name(""). + * + * \return the value of the rule. + */ + +/*! \fn std::string Techno::getValueAsString(Name name, Name layer1, Name layer2) + * \brief returns a string corresponding to the value of a rule uniquely identified by its name and layers. + * + * \param name the name of the rule. + * \param layer1 the first layer. This is an optionnal argument, default value is Name(""). + * \param layer2 the second layer. This is an optionnal argument, default value is Name(""). + * + * \return the string corresponding to the value of the rule. + * + * \note this method is important for python module since to avoid rounding problems it is necessary to use Decimal object which is build based on a string. + */ + +/*! \fn bool Techno::writeToFile(std::string filename) + * \brief writes the database to file. + * + * \param filename the destination file name. + */ + +/*! \fn static Techno* Techno::readFromFile(const std::string filename) + * \brief creates and returns a Techno object based on a database source file. + * + * \param filename the source file name. + * + * \return the newly created Techno. + */ + +} diff --git a/vlsisapd/doc/dtr/dtr.dox b/vlsisapd/doc/dtr/dtr.dox new file mode 100644 index 00000000..f81eafe6 --- /dev/null +++ b/vlsisapd/doc/dtr/dtr.dox @@ -0,0 +1,58 @@ +/*! \page DTR DTR Format + + \section dtrPres Presentation + The Design Technology Rules (DTR) format was developped as a part of the Chams Project (http://www-soc.lip6.fr/recherche/cian/chams/). It aims at offering a generic description of layout design rules for CMOS technologies.\n + + \subsection dtrAutrhos Author + Damien Dupuis: damien.dupuis(at)lip6(.)fr + + \subsection dtrLimits Limitations + 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. + + \section dtrDB Stand alone database structure + The database contains four object : + - DTR::Techno contains generic informations such as the name of the technology and the unit used, and the list of all technologic rules. + - DTR::Rule & DTR::ARule respectively describe a symmetrical and an asymmetrical rule. + - DTR::Name provides an automatic management of shared name. + + \subsection dtrParser Using the parser + Simply load a technology with static function DTR::Techno::readFromFile() and then get rules (DTR::Techno::getRule()) or directly values (DTR::Techno::getValue()). + + \subsection dtrDriver Using the driver + Using the driver is very simple, user has to create a DTR::Techno object and simply add DTR::Rule or DTR::ARule to it. + The adding methods return the newly created Rule so user can set the rule type (DTR::Rule::setType()) if necessary. Finally use the DTR::Techno::writeToFile() method to dump the database to file. + + \section dtrExamples Examples + 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: \c example.dtr.xml + \include example.dtr.xml + + All source codes are available in the \c examples directory. + + \subsection dtrC C++ + \subsubsection dtrParseC Parser + The following code (\c parseDtr.cpp) is an example of how to parse a DTR file using C++ library. + \include parseDtr.cpp + + \subsubsection dtrDriveC Driver + This C++ code (\c driveDtr.cpp) generates a out.dtr.xml file equivalent to the previous example.dtr.xml. + \include driveDtr.cpp + + \note 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: + \code + %> mkdir build; cd build + %> cmake .. + %> make + \endcode + + \subsection dtrPython Python + \subsubsection dtrParsePython Parser + The following python script (\c parseDtr.py) is an example of how to parse a DTR file using python module. + \include parseDtr.py + + \subsubsection dtrDrivePython Driver + This python script (\c driveDtr.py) generates a out.dtr.xml file equivalent to the previous example.dtr.xml. + \include driveDtr.py + + \note In order to run these two scripts (\c parseDtr.py & driveDtr.py), user must ensure that $PYTHONPATH variable points to the directory containing pyDTR.so module. +*/ + diff --git a/vlsisapd/doc/header.html b/vlsisapd/doc/header.html index 30a1accb..e5892fee 100644 --- a/vlsisapd/doc/header.html +++ b/vlsisapd/doc/header.html @@ -10,8 +10,9 @@ - + +
PresentationCIF AGDSCIFDTR Links & Contact
diff --git a/vlsisapd/doc/mainPage.dox b/vlsisapd/doc/mainPage.dox index 58aff35a..5ac1b69b 100644 --- a/vlsisapd/doc/mainPage.dox +++ b/vlsisapd/doc/mainPage.dox @@ -10,17 +10,17 @@
Parser
Driver
- CIF + AGDS
x
- AGDS + CIF
x
DTR
x
- +
x
OPENCHAMS
x
@@ -31,7 +31,8 @@ To quickly access to documentation of a format, one can use the following links : - - \subpage CIF CIF Format - \subpage AGDS AGDS Format + - \subpage CIF CIF Format + - \subpage DTR DTR Format */ diff --git a/vlsisapd/doc/stylesheet.css b/vlsisapd/doc/stylesheet.css index e7faf646..8c3115fd 100644 --- a/vlsisapd/doc/stylesheet.css +++ b/vlsisapd/doc/stylesheet.css @@ -130,8 +130,7 @@ } tt { color: #3090FF; } - em { font-style: italic; - font-weight: bold; } + em { font-style: italic; } strong { font-weight: bold; } span.textit { font-style: italic; }