From 3f73b9d033d9c2b6b1fbcb25a84180e54141d53f Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Mon, 1 Oct 2018 16:52:17 +0200 Subject: [PATCH] Anlog integration part I. Atomic devices support (transistors). * Change: In boostrap, remove support for Chams. * New: In Hurricane::Technology, added support for DTR rules, UnitRule, PhysicalRule and TwoLayersPhysicalrule. Added devices descriptors and models descriptors (for Spice). Spice description is not used yet but kept anyway in case of future use. * New: Hurricane::Analog whole library and it's Python interface. This provides support for transistors, capacitors and resistors. Only transistor support is fully implemented as of now. * New: In CRL/python/coriolisInit.py, read configuration files for the Analog extension (analog.conf & devices.conf). Thoses are optionals and a simple warning is issued if not found. Added helpers/AnalogTechno.py DTR loading helper. Add analog configuration files for 180/scn6m_deep_09. * New: Oroshi tool that provides actual layout drawing for transistors. --- .gitignore | 1 + bootstrap/build.conf | 19 +- bootstrap/ccb.py | 4 - bootstrap/coriolisEnv.py | 1 - bootstrap/socInstaller.py | 6 +- .../doc/crlcore/html/AcmSigda_8h_source.html | 2 +- .../html/AllianceFramework_8h_source.html | 2 +- .../html/AllianceLibrary_8h_source.html | 2 +- .../doc/crlcore/html/Banner_8h_source.html | 2 +- .../doc/crlcore/html/Catalog_8h_source.html | 2 +- .../crlcore/html/Environment_8h_source.html | 2 +- .../html/GraphicToolEngine_8h_source.html | 2 +- .../crlcore/html/RoutingGauge_8h_source.html | 2 +- .../html/RoutingLayerGauge_8h_source.html | 2 +- .../crlcore/html/SearchPath_8h_source.html | 2 +- .../crlcore/html/ToolEngine_8h_source.html | 2 +- .../crlcore/html/ToolEngines_8h_source.html | 2 +- crlcore/doc/crlcore/html/annotated.html | 2 +- .../html/classCRL_1_1AcmSigda-members.html | 2 +- .../crlcore/html/classCRL_1_1AcmSigda.html | 2 +- ...classCRL_1_1AllianceFramework-members.html | 2 +- .../html/classCRL_1_1AllianceFramework.html | 2 +- .../classCRL_1_1AllianceLibrary-members.html | 2 +- .../html/classCRL_1_1AllianceLibrary.html | 2 +- .../html/classCRL_1_1Banner-members.html | 2 +- .../doc/crlcore/html/classCRL_1_1Banner.html | 2 +- .../html/classCRL_1_1Catalog-members.html | 2 +- .../doc/crlcore/html/classCRL_1_1Catalog.html | 2 +- .../classCRL_1_1CatalogExtension-members.html | 2 +- .../html/classCRL_1_1CatalogExtension.html | 2 +- .../classCRL_1_1Catalog_1_1State-members.html | 2 +- .../html/classCRL_1_1Catalog_1_1State.html | 2 +- .../html/classCRL_1_1Environment-members.html | 2 +- .../crlcore/html/classCRL_1_1Environment.html | 2 +- .../html/classCRL_1_1GraphicTool-members.html | 2 +- .../crlcore/html/classCRL_1_1GraphicTool.html | 2 +- .../classCRL_1_1RoutingGauge-members.html | 2 +- .../html/classCRL_1_1RoutingGauge.html | 2 +- ...classCRL_1_1RoutingLayerGauge-members.html | 2 +- .../html/classCRL_1_1RoutingLayerGauge.html | 2 +- .../html/classCRL_1_1SearchPath-members.html | 2 +- .../crlcore/html/classCRL_1_1SearchPath.html | 2 +- ...sCRL_1_1SearchPath_1_1Element-members.html | 2 +- .../classCRL_1_1SearchPath_1_1Element.html | 2 +- .../html/classCRL_1_1ToolEngine-members.html | 2 +- .../crlcore/html/classCRL_1_1ToolEngine.html | 2 +- crlcore/doc/crlcore/html/classes.html | 2 +- .../dir_1d3beb215ce2defdb52d6dee9d41bc7a.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- .../dir_d23e13494685c82fafa9ef5abb5746af.html | 2 +- crlcore/doc/crlcore/html/files.html | 2 +- crlcore/doc/crlcore/html/functions.html | 2 +- crlcore/doc/crlcore/html/functions_0x62.html | 2 +- crlcore/doc/crlcore/html/functions_0x63.html | 2 +- crlcore/doc/crlcore/html/functions_0x64.html | 2 +- crlcore/doc/crlcore/html/functions_0x65.html | 2 +- crlcore/doc/crlcore/html/functions_0x66.html | 2 +- crlcore/doc/crlcore/html/functions_0x67.html | 2 +- crlcore/doc/crlcore/html/functions_0x68.html | 2 +- crlcore/doc/crlcore/html/functions_0x69.html | 2 +- crlcore/doc/crlcore/html/functions_0x6c.html | 2 +- crlcore/doc/crlcore/html/functions_0x6d.html | 2 +- crlcore/doc/crlcore/html/functions_0x6f.html | 2 +- crlcore/doc/crlcore/html/functions_0x70.html | 2 +- crlcore/doc/crlcore/html/functions_0x72.html | 2 +- crlcore/doc/crlcore/html/functions_0x73.html | 2 +- crlcore/doc/crlcore/html/functions_0x76.html | 2 +- crlcore/doc/crlcore/html/functions_0x7e.html | 2 +- crlcore/doc/crlcore/html/functions_enum.html | 2 +- crlcore/doc/crlcore/html/functions_eval.html | 2 +- crlcore/doc/crlcore/html/functions_func.html | 2 +- crlcore/doc/crlcore/html/hierarchy.html | 2 +- crlcore/doc/crlcore/html/index.html | 2 +- crlcore/doc/crlcore/html/namespaceCRL.html | 2 +- .../doc/crlcore/html/namespaceConstant.html | 2 +- .../doc/crlcore/html/namespacemembers.html | 2 +- .../crlcore/html/namespacemembers_enum.html | 2 +- .../crlcore/html/namespacemembers_eval.html | 2 +- .../crlcore/html/namespacemembers_type.html | 2 +- crlcore/doc/crlcore/html/namespaces.html | 2 +- crlcore/doc/crlcore/html/pages.html | 2 +- crlcore/doc/crlcore/latex/refman.tex | 2 +- crlcore/etc/180/scn6m_deep_09/analog.conf | 6 + crlcore/etc/180/scn6m_deep_09/devices.conf | 6 + .../180/scn6m_deep_09/dtr_scn6m_deep_09.py | 164 ++ crlcore/etc/45/freepdk_45/analog.conf | 10 + crlcore/etc/common/analog.conf | 10 + crlcore/etc/common/devices.conf | 117 ++ crlcore/etc/symbolic/cmos/analog.conf | 10 + crlcore/python/CMakeLists.txt | 2 + crlcore/python/coriolisInit.py | 66 +- crlcore/python/helpers/AnalogTechno.py | 118 ++ crlcore/python/helpers/Devices.py | 102 ++ crlcore/python/helpers/__init__.py | 11 +- crlcore/src/ccore/Utilities.cpp | 4 +- documentation/Analog/Analog.rst | 11 + documentation/Oroshi/Oroshi.rst | 11 + documentation/PythonCpp/PythonCpp.pdf | Bin 173145 -> 173092 bytes .../PythonTutorial/PythonTutorial.pdf | Bin 208622 -> 208591 bytes documentation/RDS/RDS.pdf | Bin 116073 -> 116057 bytes documentation/Stratus/Stratus.pdf | Bin 560649 -> 560599 bytes documentation/UsersGuide/UsersGuide.pdf | Bin 633697 -> 633676 bytes .../_build/doctrees/Analog/Analog.doctree | Bin 0 -> 59925 bytes .../_build/doctrees/Contents.doctree | Bin 3616 -> 3614 bytes .../_build/doctrees/CrlCore/CrlCore.doctree | Bin 60531 -> 59861 bytes .../doctrees/Hurricane/Hurricane.doctree | Bin 60556 -> 59916 bytes .../doctrees/Katabatic/Katabatic.doctree | Bin 61279 -> 60629 bytes .../_build/doctrees/Kite/Kite.doctree | Bin 61291 -> 60610 bytes .../_build/doctrees/Oroshi/Oroshi.doctree | Bin 0 -> 59873 bytes .../doctrees/PythonCpp/Configuration.doctree | Bin 66750 -> 66070 bytes .../doctrees/PythonCpp/DBoHierarchy.doctree | Bin 113023 -> 112368 bytes .../doctrees/PythonCpp/DBoStandalone.doctree | Bin 133750 -> 133080 bytes .../_build/doctrees/PythonCpp/DbU.doctree | Bin 66537 -> 65857 bytes .../doctrees/PythonCpp/Introduction.doctree | Bin 92187 -> 91538 bytes .../_build/doctrees/PythonCpp/Name.doctree | Bin 59918 -> 59213 bytes .../_build/doctrees/PythonCpp/NonDBo.doctree | Bin 80940 -> 80270 bytes .../_build/doctrees/PythonCpp/index.doctree | Bin 61364 -> 60749 bytes .../PythonTutorial/AdvancedTopics.doctree | Bin 86808 -> 86148 bytes .../PythonTutorial/CellNetComponent.doctree | Bin 136237 -> 135562 bytes .../doctrees/PythonTutorial/CgtScript.doctree | Bin 95026 -> 94381 bytes .../PythonTutorial/Collections.doctree | Bin 96960 -> 96275 bytes .../PythonTutorial/Environment.doctree | Bin 99887 -> 99217 bytes .../PythonTutorial/Introduction.doctree | Bin 109199 -> 108514 bytes .../doctrees/PythonTutorial/Netlist.doctree | Bin 140037 -> 139351 bytes .../PythonTutorial/RealDesigns.doctree | Bin 92597 -> 91947 bytes .../PythonTutorial/ToolEngines.doctree | Bin 105639 -> 104949 bytes .../doctrees/PythonTutorial/index.doctree | Bin 62839 -> 62194 bytes .../doctrees/PythonTutorial/pdfHeader.doctree | Bin 86600 -> 85915 bytes .../_build/doctrees/RDS/RDSpage.doctree | Bin 170902 -> 170250 bytes .../_build/doctrees/RDS/index.doctree | Bin 61559 -> 60889 bytes .../_build/doctrees/Stratus/index.doctree | Bin 61665 -> 60964 bytes .../_build/doctrees/Unicorn/Unicorn.doctree | Bin 60533 -> 59858 bytes .../doctrees/UsersGuide/Configuration.doctree | Bin 172376 -> 171716 bytes .../doctrees/UsersGuide/Installation.doctree | Bin 114166 -> 113491 bytes .../UsersGuide/LicenseCredits.doctree | Bin 67589 -> 66946 bytes .../doctrees/UsersGuide/Releases.doctree | Bin 87044 -> 86389 bytes .../UsersGuide/ScriptsPlugins.doctree | Bin 138911 -> 138221 bytes .../doctrees/UsersGuide/ViewerTools.doctree | Bin 288459 -> 288062 bytes .../_build/doctrees/UsersGuide/index.doctree | Bin 61360 -> 60650 bytes .../_build/doctrees/Viewer/Viewer.doctree | Bin 60484 -> 59844 bytes .../_build/doctrees/defapi/defapi.doctree | Bin 61086 -> 60406 bytes .../_build/doctrees/environment.pickle | Bin 212274 -> 213708 bytes .../_build/doctrees/etc/definitions.doctree | Bin 59090 -> 58420 bytes documentation/_build/doctrees/index.doctree | Bin 6106 -> 6170 bytes .../_build/doctrees/lefapi/lefapi.doctree | Bin 69766 -> 69096 bytes .../_build/doctrees/lefdef/lefdef.doctree | Bin 61167 -> 60502 bytes documentation/_build/html/Contents.html | 4 +- .../_build/html/CrlCore/CrlCore.html | 4 +- .../_build/html/Hurricane/Hurricane.html | 4 +- .../_build/html/Katabatic/Katabatic.html | 4 +- documentation/_build/html/Kite/Kite.html | 4 +- .../_build/html/PythonCpp/Configuration.html | 4 +- .../_build/html/PythonCpp/DBoHierarchy.html | 4 +- .../_build/html/PythonCpp/DBoStandalone.html | 4 +- documentation/_build/html/PythonCpp/DbU.html | 4 +- .../_build/html/PythonCpp/Introduction.html | 4 +- documentation/_build/html/PythonCpp/Name.html | 4 +- .../_build/html/PythonCpp/NonDBo.html | 4 +- .../_build/html/PythonCpp/index.html | 4 +- .../html/PythonTutorial/AdvancedTopics.html | 4 +- .../html/PythonTutorial/CellNetComponent.html | 4 +- .../_build/html/PythonTutorial/CgtScript.html | 4 +- .../html/PythonTutorial/Collections.html | 4 +- .../html/PythonTutorial/Environment.html | 4 +- .../html/PythonTutorial/Introduction.html | 4 +- .../_build/html/PythonTutorial/Netlist.html | 4 +- .../html/PythonTutorial/RealDesigns.html | 4 +- .../html/PythonTutorial/ToolEngines.html | 4 +- .../html/PythonTutorial/definitions.html | 4 +- .../_build/html/PythonTutorial/index.html | 4 +- .../_build/html/PythonTutorial/pdfHeader.html | 4 +- documentation/_build/html/RDS/RDSpage.html | 8 +- documentation/_build/html/RDS/index.html | 4 +- .../_build/html/Unicorn/Unicorn.html | 4 +- .../_build/html/UsersGuide/Configuration.html | 4 +- .../_build/html/UsersGuide/Installation.html | 4 +- .../html/UsersGuide/LicenseCredits.html | 4 +- .../_build/html/UsersGuide/Releases.html | 4 +- .../html/UsersGuide/ScriptsPlugins.html | 4 +- .../_build/html/UsersGuide/ViewerTools.html | 4 +- .../_build/html/UsersGuide/index.html | 4 +- documentation/_build/html/Viewer/Viewer.html | 4 +- .../_build/html/_sources/etc/definitions.txt | 2 - documentation/_build/html/_sources/index.txt | 3 +- documentation/_build/html/defapi/defapi.html | 4 +- .../_build/html/etc/definitions.html | 4 +- documentation/_build/html/genindex.html | 4 +- documentation/_build/html/index.html | 6 +- documentation/_build/html/lefapi/lefapi.html | 8 +- documentation/_build/html/lefdef/lefdef.html | 4 +- documentation/_build/html/objects.inv | Bin 1617 -> 1650 bytes documentation/_build/html/search.html | 4 +- documentation/_build/html/searchindex.js | 2 +- documentation/etc/definitions.rst | 2 - documentation/examples/scripts/fulladder.ap | 16 + documentation/examples/scripts/fulladder.gds | Bin 0 -> 33134 bytes documentation/examples/scripts/fulladder.vst | 120 ++ documentation/examples/scripts/invertor.ap | 25 + documentation/examples/scripts/invertor.vst | 26 + documentation/index.rst | 3 +- hurricane/doc/CMakeLists.txt | 1 + hurricane/doc/analog/CMakeLists.txt | 20 + hurricane/doc/analog/MainPage.dox | 101 ++ hurricane/doc/analog/SoC.css | 872 +++++++++ hurricane/doc/analog/asimbook.cls | 798 +++++++++ hurricane/doc/analog/closed.png | Bin 0 -> 125 bytes hurricane/doc/analog/doxyfile | 1497 ++++++++++++++++ hurricane/doc/analog/footer.html | 16 + hurricane/doc/analog/header.html | 26 + hurricane/doc/analog/header.tex | 47 + .../doc/analog/images/device_schema_1_uml.pdf | Bin 0 -> 13595 bytes .../doc/analog/images/device_schema_1_uml.png | Bin 0 -> 32159 bytes .../analog/images/device_schema_1_uml.xfig | 287 +++ hurricane/doc/analog/open.png | Bin 0 -> 115 bytes hurricane/doc/analog/tabs.css | 558 ++++++ hurricane/doc/hurricane/DebugSession.dox | 18 +- .../hurricane/html/BasicLayer_8h_source.html | 4 +- .../doc/hurricane/html/Box_8h_source.html | 2 +- .../doc/hurricane/html/Boxes_8h_source.html | 2 +- .../doc/hurricane/html/Cell_8h_source.html | 2 +- .../doc/hurricane/html/Cells_8h_source.html | 2 +- .../hurricane/html/Collection_8h_source.html | 2 +- .../doc/hurricane/html/Commons_8h_source.html | 2 +- .../hurricane/html/Component_8h_source.html | 2 +- .../hurricane/html/Components_8h_source.html | 2 +- .../html/ContactLayer_8h_source.html | 4 +- .../doc/hurricane/html/Contact_8h_source.html | 2 +- .../hurricane/html/Contacts_8h_source.html | 2 +- .../doc/hurricane/html/DBo_8h_source.html | 2 +- .../doc/hurricane/html/DBos_8h_source.html | 2 +- .../hurricane/html/DataBase_8h_source.html | 4 +- .../doc/hurricane/html/DbU_8h_source.html | 2 +- .../html/DebugSession_8h_source.html | 2 +- .../hurricane/html/Diagonal_8h_source.html | 2 +- .../html/DiffusionLayer_8h_source.html | 4 +- .../hurricane/html/Entities_8h_source.html | 2 +- .../doc/hurricane/html/Entity_8h_source.html | 2 +- .../doc/hurricane/html/Error_8h_source.html | 2 +- .../hurricane/html/Exception_8h_source.html | 2 +- .../doc/hurricane/html/Filter_8h_source.html | 2 +- .../doc/hurricane/html/Go_8h_source.html | 2 +- .../doc/hurricane/html/Gos_8h_source.html | 2 +- .../doc/hurricane/html/Hook_8h_source.html | 2 +- .../doc/hurricane/html/Hooks_8h_source.html | 2 +- .../hurricane/html/Horizontal_8h_source.html | 2 +- .../hurricane/html/Horizontals_8h_source.html | 2 +- .../hurricane/html/HyperNet_8h_source.html | 2 +- .../hurricane/html/Initializer_8h_source.html | 2 +- .../hurricane/html/Instance_8h_source.html | 2 +- .../hurricane/html/Instances_8h_source.html | 2 +- .../html/Interruption_8h_source.html | 2 +- .../hurricane/html/Interval_8h_source.html | 2 +- .../hurricane/html/Intervals_8h_source.html | 2 +- .../hurricane/html/JsonObject_8h_source.html | 2 +- .../hurricane/html/JsonReader_8h_source.html | 2 +- .../doc/hurricane/html/Layer_8h_source.html | 4 +- .../doc/hurricane/html/Layers_8h_source.html | 2 +- .../hurricane/html/Libraries_8h_source.html | 2 +- .../doc/hurricane/html/Library_8h_source.html | 2 +- .../html/ListCollection_8h_source.html | 2 +- .../doc/hurricane/html/Locator_8h_source.html | 2 +- .../html/MapCollection_8h_source.html | 2 +- .../doc/hurricane/html/Name_8h_source.html | 2 +- .../doc/hurricane/html/Names_8h_source.html | 2 +- .../doc/hurricane/html/Net_8h_source.html | 2 +- .../doc/hurricane/html/Nets_8h_source.html | 2 +- .../hurricane/html/Occurrence_8h_source.html | 2 +- .../hurricane/html/Occurrences_8h_source.html | 2 +- .../doc/hurricane/html/Pad_8h_source.html | 2 +- .../doc/hurricane/html/Pads_8h_source.html | 2 +- .../doc/hurricane/html/Path_8h_source.html | 2 +- .../doc/hurricane/html/Pathes_8h_source.html | 2 +- .../doc/hurricane/html/Pin_8h_source.html | 2 +- .../doc/hurricane/html/Pins_8h_source.html | 2 +- .../doc/hurricane/html/Plug_8h_source.html | 2 +- .../doc/hurricane/html/Plugs_8h_source.html | 2 +- .../doc/hurricane/html/Point_8h_source.html | 2 +- .../doc/hurricane/html/Points_8h_source.html | 2 +- .../doc/hurricane/html/Polygon_8h_source.html | 2 +- .../hurricane/html/Properties_8h_source.html | 2 +- .../hurricane/html/Property_8h_source.html | 2 +- .../hurricane/html/QuadTree_8h_source.html | 2 +- .../doc/hurricane/html/Quark_8h_source.html | 2 +- .../doc/hurricane/html/Quarks_8h_source.html | 2 +- .../doc/hurricane/html/Query_8h_source.html | 2 +- .../html/RegularLayer_8h_source.html | 4 +- .../hurricane/html/Relation_8h_source.html | 2 +- .../hurricane/html/RoutingPad_8h_source.html | 2 +- .../doc/hurricane/html/Rubber_8h_source.html | 2 +- .../doc/hurricane/html/Rubbers_8h_source.html | 2 +- .../doc/hurricane/html/Segment_8h_source.html | 2 +- .../hurricane/html/Segments_8h_source.html | 2 +- .../html/SetCollection_8h_source.html | 2 +- .../doc/hurricane/html/Slice_8h_source.html | 2 +- .../doc/hurricane/html/Slices_8h_source.html | 2 +- .../hurricane/html/Tabulation_8h_source.html | 2 +- .../hurricane/html/Technology_8h_source.html | 366 ++-- .../html/Transformation_8h_source.html | 2 +- .../html/TransistorLayer_8h_source.html | 4 +- .../html/UpdateSession_8h_source.html | 2 +- .../html/VectorCollection_8h_source.html | 2 +- .../hurricane/html/Vertical_8h_source.html | 2 +- .../hurricane/html/Verticals_8h_source.html | 2 +- .../hurricane/html/ViaLayer_8h_source.html | 4 +- .../doc/hurricane/html/Warning_8h_source.html | 2 +- hurricane/doc/hurricane/html/annotated.html | 2 +- .../classHurricane_1_1BasicLayer-members.html | 2 +- .../html/classHurricane_1_1BasicLayer.html | 2 +- ...ane_1_1BasicLayer_1_1Material-members.html | 2 +- ...ssHurricane_1_1BasicLayer_1_1Material.html | 2 +- .../html/classHurricane_1_1Box-members.html | 2 +- .../hurricane/html/classHurricane_1_1Box.html | 2 +- .../html/classHurricane_1_1Cell-members.html | 2 +- .../html/classHurricane_1_1Cell.html | 2 +- .../classHurricane_1_1Collection-members.html | 2 +- .../html/classHurricane_1_1Collection.html | 2 +- .../classHurricane_1_1Component-members.html | 2 +- .../html/classHurricane_1_1Component.html | 2 +- ...cane_1_1Component_1_1BodyHook-members.html | 2 +- ...assHurricane_1_1Component_1_1BodyHook.html | 2 +- .../classHurricane_1_1Contact-members.html | 2 +- .../html/classHurricane_1_1Contact.html | 2 +- ...lassHurricane_1_1ContactLayer-members.html | 2 +- .../html/classHurricane_1_1ContactLayer.html | 2 +- ...cane_1_1Contact_1_1AnchorHook-members.html | 2 +- ...assHurricane_1_1Contact_1_1AnchorHook.html | 2 +- .../html/classHurricane_1_1DBo-members.html | 2 +- .../hurricane/html/classHurricane_1_1DBo.html | 2 +- .../classHurricane_1_1DataBase-members.html | 2 +- .../html/classHurricane_1_1DataBase.html | 2 +- .../html/classHurricane_1_1DbU-members.html | 2 +- .../hurricane/html/classHurricane_1_1DbU.html | 2 +- ...lassHurricane_1_1DebugSession-members.html | 2 +- .../html/classHurricane_1_1DebugSession.html | 26 +- .../classHurricane_1_1Diagonal-members.html | 2 +- .../html/classHurricane_1_1Diagonal.html | 2 +- ...ssHurricane_1_1DiffusionLayer-members.html | 2 +- .../classHurricane_1_1DiffusionLayer.html | 2 +- .../classHurricane_1_1Entity-members.html | 2 +- .../html/classHurricane_1_1Entity.html | 2 +- ...cane_1_1Entity_1_1CompareById-members.html | 2 +- .../html/classHurricane_1_1Error-members.html | 2 +- .../html/classHurricane_1_1Error.html | 2 +- .../classHurricane_1_1Exception-members.html | 2 +- .../html/classHurricane_1_1Exception.html | 2 +- .../classHurricane_1_1Filter-members.html | 2 +- .../html/classHurricane_1_1Filter.html | 2 +- ...urricane_1_1GenericCollection-members.html | 2 +- .../classHurricane_1_1GenericCollection.html | 2 +- ...assHurricane_1_1GenericFilter-members.html | 2 +- .../html/classHurricane_1_1GenericFilter.html | 2 +- ...ssHurricane_1_1GenericLocator-members.html | 2 +- .../classHurricane_1_1GenericLocator.html | 2 +- .../html/classHurricane_1_1Go-members.html | 2 +- .../hurricane/html/classHurricane_1_1Go.html | 2 +- .../html/classHurricane_1_1Hook-members.html | 2 +- .../html/classHurricane_1_1Hook.html | 2 +- .../classHurricane_1_1Horizontal-members.html | 2 +- .../html/classHurricane_1_1Horizontal.html | 2 +- .../classHurricane_1_1HyperNet-members.html | 2 +- .../html/classHurricane_1_1HyperNet.html | 2 +- ...classHurricane_1_1Initializer-members.html | 2 +- .../html/classHurricane_1_1Initializer.html | 2 +- .../classHurricane_1_1Instance-members.html | 2 +- .../html/classHurricane_1_1Instance.html | 2 +- ..._1Instance_1_1PlacementStatus-members.html | 2 +- ...ricane_1_1Instance_1_1PlacementStatus.html | 2 +- ...lassHurricane_1_1Interruption-members.html | 2 +- .../html/classHurricane_1_1Interruption.html | 2 +- .../classHurricane_1_1Interval-members.html | 2 +- .../html/classHurricane_1_1Interval.html | 2 +- .../classHurricane_1_1JsonObject-members.html | 2 +- .../html/classHurricane_1_1JsonObject.html | 2 +- .../classHurricane_1_1JsonStack-members.html | 2 +- .../html/classHurricane_1_1JsonStack.html | 2 +- .../html/classHurricane_1_1Layer-members.html | 2 +- .../html/classHurricane_1_1Layer.html | 2 +- .../classHurricane_1_1Library-members.html | 2 +- .../html/classHurricane_1_1Library.html | 2 +- ...ssHurricane_1_1ListCollection-members.html | 2 +- .../classHurricane_1_1ListCollection.html | 2 +- .../classHurricane_1_1Locator-members.html | 2 +- .../html/classHurricane_1_1Locator.html | 2 +- ...assHurricane_1_1MapCollection-members.html | 2 +- .../html/classHurricane_1_1MapCollection.html | 2 +- .../html/classHurricane_1_1Name-members.html | 2 +- .../html/classHurricane_1_1Name.html | 2 +- .../html/classHurricane_1_1Net-members.html | 2 +- .../hurricane/html/classHurricane_1_1Net.html | 2 +- ...Hurricane_1_1Net_1_1Direction-members.html | 2 +- .../classHurricane_1_1Net_1_1Direction.html | 2 +- ...classHurricane_1_1Net_1_1Type-members.html | 2 +- .../html/classHurricane_1_1Net_1_1Type.html | 2 +- .../classHurricane_1_1NotFilter-members.html | 2 +- .../html/classHurricane_1_1NotFilter.html | 2 +- .../classHurricane_1_1Occurrence-members.html | 2 +- .../html/classHurricane_1_1Occurrence.html | 2 +- .../html/classHurricane_1_1Pad-members.html | 2 +- .../hurricane/html/classHurricane_1_1Pad.html | 2 +- .../html/classHurricane_1_1Path-members.html | 2 +- .../html/classHurricane_1_1Path.html | 2 +- .../html/classHurricane_1_1Pin-members.html | 2 +- .../hurricane/html/classHurricane_1_1Pin.html | 2 +- .../html/classHurricane_1_1Plug-members.html | 2 +- .../html/classHurricane_1_1Plug.html | 2 +- .../html/classHurricane_1_1Point-members.html | 2 +- .../html/classHurricane_1_1Point.html | 2 +- .../classHurricane_1_1Polygon-members.html | 2 +- .../html/classHurricane_1_1Polygon.html | 2 +- ...sHurricane_1_1PrivateProperty-members.html | 2 +- .../classHurricane_1_1PrivateProperty.html | 2 +- .../classHurricane_1_1Property-members.html | 2 +- .../html/classHurricane_1_1Property.html | 2 +- .../classHurricane_1_1QuadTree-members.html | 2 +- .../html/classHurricane_1_1QuadTree.html | 2 +- .../html/classHurricane_1_1Quark-members.html | 2 +- .../html/classHurricane_1_1Quark.html | 2 +- .../html/classHurricane_1_1Query-members.html | 2 +- .../html/classHurricane_1_1Query.html | 2 +- ...lassHurricane_1_1RegularLayer-members.html | 2 +- .../html/classHurricane_1_1RegularLayer.html | 2 +- .../classHurricane_1_1Relation-members.html | 2 +- .../html/classHurricane_1_1Relation.html | 2 +- .../classHurricane_1_1RoutingPad-members.html | 2 +- .../html/classHurricane_1_1RoutingPad.html | 2 +- .../classHurricane_1_1Rubber-members.html | 2 +- .../html/classHurricane_1_1Rubber.html | 2 +- .../classHurricane_1_1Segment-members.html | 2 +- .../html/classHurricane_1_1Segment.html | 2 +- ...cane_1_1Segment_1_1SourceHook-members.html | 2 +- ...assHurricane_1_1Segment_1_1SourceHook.html | 2 +- ...cane_1_1Segment_1_1TargetHook-members.html | 2 +- ...assHurricane_1_1Segment_1_1TargetHook.html | 2 +- ...assHurricane_1_1SetCollection-members.html | 2 +- .../html/classHurricane_1_1SetCollection.html | 2 +- ...ssHurricane_1_1SharedProperty-members.html | 2 +- .../classHurricane_1_1SharedProperty.html | 2 +- .../html/classHurricane_1_1Slice-members.html | 2 +- .../html/classHurricane_1_1Slice.html | 2 +- ...ne_1_1StandardPrivateProperty-members.html | 2 +- ...sHurricane_1_1StandardPrivateProperty.html | 2 +- ...Hurricane_1_1StandardRelation-members.html | 2 +- .../classHurricane_1_1StandardRelation.html | 2 +- ...ane_1_1StandardSharedProperty-members.html | 2 +- ...ssHurricane_1_1StandardSharedProperty.html | 2 +- ...Hurricane_1_1SubSetCollection-members.html | 2 +- .../classHurricane_1_1SubSetCollection.html | 2 +- ...urricane_1_1SubTypeCollection-members.html | 2 +- .../classHurricane_1_1SubTypeCollection.html | 2 +- .../classHurricane_1_1Tabulation-members.html | 2 +- .../html/classHurricane_1_1Tabulation.html | 2 +- .../classHurricane_1_1Technology-members.html | 2 +- .../html/classHurricane_1_1Technology.html | 2 +- ...ssHurricane_1_1Transformation-members.html | 2 +- .../classHurricane_1_1Transformation.html | 2 +- ...Transformation_1_1Orientation-members.html | 2 +- ...cane_1_1Transformation_1_1Orientation.html | 2 +- ...sHurricane_1_1TransistorLayer-members.html | 2 +- .../classHurricane_1_1TransistorLayer.html | 2 +- ...assHurricane_1_1UpdateSession-members.html | 2 +- .../html/classHurricane_1_1UpdateSession.html | 2 +- ...Hurricane_1_1VectorCollection-members.html | 2 +- .../classHurricane_1_1VectorCollection.html | 2 +- .../classHurricane_1_1Vertical-members.html | 2 +- .../html/classHurricane_1_1Vertical.html | 2 +- .../classHurricane_1_1ViaLayer-members.html | 2 +- .../html/classHurricane_1_1ViaLayer.html | 2 +- .../classHurricane_1_1Warning-members.html | 2 +- .../html/classHurricane_1_1Warning.html | 2 +- hurricane/doc/hurricane/html/classes.html | 2 +- .../hurricane/html/clasststream-members.html | 2 +- .../doc/hurricane/html/clasststream.html | 2 +- .../dir_2450e9a649c497a3424377400b95054f.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- .../dir_84a91669594ac5e20f6d730a15331f7a.html | 2 +- hurricane/doc/hurricane/html/files.html | 2 +- hurricane/doc/hurricane/html/functions.html | 2 +- .../doc/hurricane/html/functions_0x62.html | 2 +- .../doc/hurricane/html/functions_0x63.html | 2 +- .../doc/hurricane/html/functions_0x64.html | 2 +- .../doc/hurricane/html/functions_0x65.html | 2 +- .../doc/hurricane/html/functions_0x66.html | 2 +- .../doc/hurricane/html/functions_0x67.html | 8 +- .../doc/hurricane/html/functions_0x68.html | 2 +- .../doc/hurricane/html/functions_0x69.html | 2 +- .../doc/hurricane/html/functions_0x6a.html | 2 +- .../doc/hurricane/html/functions_0x6b.html | 2 +- .../doc/hurricane/html/functions_0x6c.html | 2 +- .../doc/hurricane/html/functions_0x6d.html | 2 +- .../doc/hurricane/html/functions_0x6e.html | 2 +- .../doc/hurricane/html/functions_0x6f.html | 2 +- .../doc/hurricane/html/functions_0x70.html | 2 +- .../doc/hurricane/html/functions_0x71.html | 2 +- .../doc/hurricane/html/functions_0x72.html | 2 +- .../doc/hurricane/html/functions_0x73.html | 2 +- .../doc/hurricane/html/functions_0x74.html | 2 +- .../doc/hurricane/html/functions_0x75.html | 2 +- .../doc/hurricane/html/functions_0x76.html | 2 +- .../doc/hurricane/html/functions_0x77.html | 2 +- .../doc/hurricane/html/functions_0x7e.html | 2 +- .../doc/hurricane/html/functions_enum.html | 2 +- .../doc/hurricane/html/functions_eval.html | 2 +- .../doc/hurricane/html/functions_func.html | 2 +- .../hurricane/html/functions_func_0x62.html | 2 +- .../hurricane/html/functions_func_0x63.html | 2 +- .../hurricane/html/functions_func_0x64.html | 2 +- .../hurricane/html/functions_func_0x65.html | 2 +- .../hurricane/html/functions_func_0x66.html | 2 +- .../hurricane/html/functions_func_0x67.html | 2 +- .../hurricane/html/functions_func_0x68.html | 2 +- .../hurricane/html/functions_func_0x69.html | 2 +- .../hurricane/html/functions_func_0x6a.html | 2 +- .../hurricane/html/functions_func_0x6c.html | 2 +- .../hurricane/html/functions_func_0x6d.html | 2 +- .../hurricane/html/functions_func_0x6e.html | 2 +- .../hurricane/html/functions_func_0x6f.html | 2 +- .../hurricane/html/functions_func_0x70.html | 2 +- .../hurricane/html/functions_func_0x71.html | 2 +- .../hurricane/html/functions_func_0x72.html | 2 +- .../hurricane/html/functions_func_0x73.html | 2 +- .../hurricane/html/functions_func_0x74.html | 2 +- .../hurricane/html/functions_func_0x75.html | 2 +- .../hurricane/html/functions_func_0x76.html | 2 +- .../hurricane/html/functions_func_0x77.html | 2 +- .../hurricane/html/functions_func_0x7e.html | 2 +- .../doc/hurricane/html/functions_type.html | 2 +- .../doc/hurricane/html/graph_legend.html | 2 +- .../doc/hurricane/html/group__DbUGroup.html | 2 +- .../hurricane/html/group__Generalities.html | 2 +- .../hurricane/html/group__JsonSupport.html | 2 +- .../html/group__grpSynthHierarchy.html | 2 +- hurricane/doc/hurricane/html/hierarchy.html | 2 +- hurricane/doc/hurricane/html/index.html | 2 +- hurricane/doc/hurricane/html/modules.html | 2 +- .../hurricane/html/namespaceHurricane.html | 2 +- .../doc/hurricane/html/namespacemembers.html | 2 +- .../hurricane/html/namespacemembers_func.html | 2 +- .../hurricane/html/namespacemembers_type.html | 2 +- hurricane/doc/hurricane/html/namespaces.html | 2 +- ...uctHurricane_1_1Entity_1_1CompareById.html | 2 +- .../latex/classHurricane_1_1DebugSession.tex | 18 +- hurricane/doc/hurricane/latex/refman.tex | 2 +- .../doc/viewer/html/CellImage_8h_source.html | 2 +- .../viewer/html/CellPrinter_8h_source.html | 2 +- .../doc/viewer/html/CellViewer_8h_source.html | 2 +- .../doc/viewer/html/CellWidget_8h_source.html | 2 +- .../viewer/html/DisplayStyle_8h_source.html | 2 +- .../doc/viewer/html/Graphics_8h_source.html | 2 +- .../html/InspectorWidget_8h_source.html | 2 +- hurricane/doc/viewer/html/annotated.html | 2 +- .../classHurricane_1_1CellImage-members.html | 2 +- .../html/classHurricane_1_1CellImage.html | 2 +- ...classHurricane_1_1CellPrinter-members.html | 2 +- .../html/classHurricane_1_1CellPrinter.html | 2 +- .../classHurricane_1_1CellViewer-members.html | 2 +- .../html/classHurricane_1_1CellViewer.html | 2 +- .../classHurricane_1_1CellWidget-members.html | 2 +- .../html/classHurricane_1_1CellWidget.html | 2 +- ...lassHurricane_1_1DisplayStyle-members.html | 2 +- .../html/classHurricane_1_1DisplayStyle.html | 2 +- .../classHurricane_1_1Graphics-members.html | 2 +- .../html/classHurricane_1_1Graphics.html | 2 +- ...sHurricane_1_1InspectorWidget-members.html | 2 +- .../classHurricane_1_1InspectorWidget.html | 2 +- hurricane/doc/viewer/html/classes.html | 2 +- .../dir_8411fe88106249809ce887a3285ac2b5.html | 2 +- .../dir_d17b4bff01b823ea10853862cd33daf4.html | 2 +- .../dir_dadde0d0ee7514f4b9d838e8db4a8c39.html | 2 +- .../dir_e61ba495830392da74308d37dc1d0e01.html | 2 +- hurricane/doc/viewer/html/files.html | 2 +- hurricane/doc/viewer/html/functions.html | 2 +- hurricane/doc/viewer/html/functions_enum.html | 2 +- hurricane/doc/viewer/html/functions_eval.html | 2 +- hurricane/doc/viewer/html/functions_func.html | 2 +- hurricane/doc/viewer/html/graph_legend.html | 2 +- .../doc/viewer/html/group__graphicsGroup.html | 2 +- hurricane/doc/viewer/html/index.html | 2 +- hurricane/doc/viewer/html/modules.html | 2 +- hurricane/doc/viewer/html/pages.html | 2 +- hurricane/doc/viewer/latex/refman.tex | 2 +- hurricane/src/CMakeLists.txt | 1 + hurricane/src/analog/AnalogCellExtension.cpp | 97 + hurricane/src/analog/BJT.cpp | 112 ++ hurricane/src/analog/BJTArguments.cpp | 45 + hurricane/src/analog/BJTFamily.cpp | 34 + hurricane/src/analog/BJTFamilyNames.cpp | 28 + hurricane/src/analog/CMakeLists.txt | 161 ++ hurricane/src/analog/CapacitorArguments.cpp | 44 + hurricane/src/analog/CapacitorFamily.cpp | 49 + hurricane/src/analog/CapacitorFamilyNames.cpp | 28 + hurricane/src/analog/Cascode.cpp | 111 ++ hurricane/src/analog/ChoiceParameter.cpp | 43 + hurricane/src/analog/Choices.cpp | 58 + hurricane/src/analog/CommonDrain.cpp | 113 ++ hurricane/src/analog/CommonGatePair.cpp | 107 ++ hurricane/src/analog/CommonSourcePair.cpp | 248 +++ hurricane/src/analog/CrossCoupledPair.cpp | 102 ++ hurricane/src/analog/Device.cpp | 177 ++ hurricane/src/analog/DifferentialPair.cpp | 268 +++ hurricane/src/analog/LayoutGenerator.cpp | 470 +++++ hurricane/src/analog/LevelShifter.cpp | 105 ++ hurricane/src/analog/MIMCapacitor.cpp | 101 ++ hurricane/src/analog/MetaCapacitor.cpp | 53 + hurricane/src/analog/MetaTransistor.cpp | 77 + hurricane/src/analog/PyAnalog.cpp | 233 +++ hurricane/src/analog/PyBJTArguments.cpp | 86 + hurricane/src/analog/PyCapacitorArguments.cpp | 71 + hurricane/src/analog/PyCapacitorFamily.cpp | 115 ++ hurricane/src/analog/PyCapacitorParameter.cpp | 80 + hurricane/src/analog/PyCascode.cpp | 127 ++ hurricane/src/analog/PyChoiceParameter.cpp | 81 + hurricane/src/analog/PyCommonDrain.cpp | 130 ++ hurricane/src/analog/PyCommonGatePair.cpp | 130 ++ hurricane/src/analog/PyCommonSourcePair.cpp | 131 ++ hurricane/src/analog/PyCrossCoupledPair.cpp | 130 ++ hurricane/src/analog/PyDevice.cpp | 211 +++ hurricane/src/analog/PyDifferentialPair.cpp | 130 ++ .../src/analog/PyFormFactorParameter.cpp | 90 + hurricane/src/analog/PyLayoutGenerator.cpp | 377 ++++ hurricane/src/analog/PyLevelShifter.cpp | 130 ++ hurricane/src/analog/PyMCheckBoxParameter.cpp | 80 + hurricane/src/analog/PyMIMCapacitor.cpp | 139 ++ hurricane/src/analog/PyParameter.cpp | 127 ++ .../src/analog/PySimpleCurrentMirror.cpp | 130 ++ hurricane/src/analog/PySpinBoxParameter.cpp | 87 + hurricane/src/analog/PyStepParameter.cpp | 90 + hurricane/src/analog/PyTransistor.cpp | 130 ++ .../src/analog/PyTransistorArguments.cpp | 100 ++ hurricane/src/analog/PyTransistorFamily.cpp | 228 +++ .../src/analog/PyTransistorMultiArguments.cpp | 105 ++ hurricane/src/analog/PyTransistorPair.cpp | 82 + hurricane/src/analog/SimpleCurrentMirror.cpp | 155 ++ hurricane/src/analog/Transistor.cpp | 249 +++ hurricane/src/analog/TransistorArguments.cpp | 59 + hurricane/src/analog/TransistorFamily.cpp | 82 + .../src/analog/TransistorFamilyNames.cpp | 59 + .../src/analog/TransistorMultiArguments.cpp | 53 + hurricane/src/analog/TransistorPair.cpp | 58 + .../hurricane/analog/AnalogCellExtension.h | 120 ++ .../src/analog/hurricane/analog/Arguments.h | 35 + hurricane/src/analog/hurricane/analog/BJT.h | 52 + .../analog/hurricane/analog/BJTArguments.h | 57 + .../src/analog/hurricane/analog/BJTFamily.h | 56 + .../analog/hurricane/analog/BJTFamilyNames.h | 33 + .../hurricane/analog/CapacitorArguments.h | 53 + .../analog/hurricane/analog/CapacitorFamily.h | 97 + .../hurricane/analog/CapacitorFamilyNames.h | 35 + .../hurricane/analog/CapacitorParameter.h | 44 + .../src/analog/hurricane/analog/Cascode.h | 46 + .../analog/hurricane/analog/ChoiceParameter.h | 49 + .../src/analog/hurricane/analog/Choices.h | 47 + .../src/analog/hurricane/analog/CommonDrain.h | 47 + .../src/analog/hurricane/analog/CommonGate.h | 51 + .../analog/hurricane/analog/CommonGatePair.h | 45 + .../hurricane/analog/CommonSourcePair.h | 49 + .../hurricane/analog/CrossCoupledPair.h | 46 + .../src/analog/hurricane/analog/Device.h | 147 ++ .../hurricane/analog/DifferentialPair.h | 48 + .../hurricane/analog/FormFactorParameter.h | 58 + .../analog/hurricane/analog/LayoutGenerator.h | 156 ++ .../analog/hurricane/analog/LevelShifter.h | 44 + .../hurricane/analog/MCheckBoxParameter.h | 50 + .../analog/hurricane/analog/MIMCapacitor.h | 64 + .../analog/hurricane/analog/MetaCapacitor.h | 56 + .../analog/hurricane/analog/MetaTransistor.h | 130 ++ .../src/analog/hurricane/analog/Parameter.h | 54 + .../analog/hurricane/analog/PyBJTArguments.h | 56 + .../hurricane/analog/PyCapacitorArguments.h | 56 + .../hurricane/analog/PyCapacitorFamily.h | 56 + .../hurricane/analog/PyCapacitorParameter.h | 55 + .../src/analog/hurricane/analog/PyCascode.h | 55 + .../hurricane/analog/PyChoiceParameter.h | 55 + .../analog/hurricane/analog/PyCommonDrain.h | 55 + .../hurricane/analog/PyCommonGatePair.h | 55 + .../hurricane/analog/PyCommonSourcePair.h | 55 + .../hurricane/analog/PyCrossCoupledPair.h | 55 + .../src/analog/hurricane/analog/PyDevice.h | 56 + .../hurricane/analog/PyDifferentialPair.h | 55 + .../hurricane/analog/PyFormFactorParameter.h | 55 + .../hurricane/analog/PyLayoutGenerator.h | 57 + .../analog/hurricane/analog/PyLevelShifter.h | 55 + .../hurricane/analog/PyMCheckBoxParameter.h | 55 + .../analog/hurricane/analog/PyMIMCapacitor.h | 55 + .../src/analog/hurricane/analog/PyParameter.h | 59 + .../hurricane/analog/PySimpleCurrentMirror.h | 55 + .../hurricane/analog/PySpinBoxParameter.h | 55 + .../analog/hurricane/analog/PyStepParameter.h | 55 + .../analog/hurricane/analog/PyTransistor.h | 55 + .../hurricane/analog/PyTransistorArguments.h | 55 + .../hurricane/analog/PyTransistorFamily.h | 56 + .../analog/PyTransistorMultiArguments.h | 54 + .../hurricane/analog/PyTransistorPair.h | 55 + .../hurricane/analog/SimpleCurrentMirror.h | 47 + .../hurricane/analog/SpinBoxParameter.h | 50 + .../analog/hurricane/analog/StepParameter.h | 52 + .../src/analog/hurricane/analog/Transistor.h | 51 + .../hurricane/analog/TransistorArguments.h | 76 + .../hurricane/analog/TransistorFamily.h | 179 ++ .../hurricane/analog/TransistorFamilyNames.h | 66 + .../analog/TransistorMultiArguments.h | 54 + .../analog/hurricane/analog/TransistorPair.h | 48 + hurricane/src/hurricane/CMakeLists.txt | 11 + hurricane/src/hurricane/DeviceDescriptor.cpp | 47 + hurricane/src/hurricane/PhysicalRule.cpp | 39 + hurricane/src/hurricane/Rule.cpp | 41 + hurricane/src/hurricane/Technology.cpp | 1228 ++++++++----- .../src/hurricane/TwoLayersPhysicalRule.cpp | 38 + hurricane/src/hurricane/UnitRule.cpp | 39 + .../hurricane/hurricane/DeviceDescriptor.h | 64 + .../src/hurricane/hurricane/ModelDescriptor.h | 86 + .../src/hurricane/hurricane/PhysicalRule.h | 66 + hurricane/src/hurricane/hurricane/Rule.h | 56 + .../src/hurricane/hurricane/Technology.h | 206 ++- .../hurricane/TwoLayersPhysicalRule.h | 63 + hurricane/src/hurricane/hurricane/UnitRule.h | 65 + hurricane/src/isobar/CMakeLists.txt | 10 + hurricane/src/isobar/PyDeviceDescriptor.cpp | 138 ++ hurricane/src/isobar/PyHurricane.cpp | 308 ++-- hurricane/src/isobar/PyPhysicalRule.cpp | 80 + hurricane/src/isobar/PyRule.cpp | 100 ++ hurricane/src/isobar/PyTechnology.cpp | 286 ++- .../src/isobar/PyTwoLayersPhysicalRule.cpp | 80 + hurricane/src/isobar/PyUnitRule.cpp | 80 + .../hurricane/isobar/PyDeviceDescriptor.h | 56 + .../isobar/hurricane/isobar/PyPhysicalRule.h | 55 + .../src/isobar/hurricane/isobar/PyRule.h | 56 + .../isobar/PyTwoLayersPhysicalRule.h | 55 + .../src/isobar/hurricane/isobar/PyUnitRule.h | 55 + .../doc/html/AutoContactHTee_8h_source.html | 2 +- .../html/AutoContactTerminal_8h_source.html | 2 +- .../doc/html/AutoContactTurn_8h_source.html | 2 +- .../doc/html/AutoContactVTee_8h_source.html | 2 +- katabatic/doc/html/AutoContact_8h_source.html | 2 +- .../doc/html/AutoHorizontal_8h_source.html | 2 +- katabatic/doc/html/AutoSegment_8h_source.html | 2 +- .../doc/html/AutoSegments_8h_source.html | 2 +- .../doc/html/AutoVertical_8h_source.html | 2 +- katabatic/doc/html/ChipTools_8h_source.html | 2 +- katabatic/doc/html/Constants_8h_source.html | 2 +- katabatic/doc/html/GCellGrid_8h_source.html | 2 +- katabatic/doc/html/GCell_8h_source.html | 2 +- katabatic/doc/html/GCells_8h_source.html | 2 +- katabatic/doc/html/Grid_8h_source.html | 2 +- .../doc/html/KatabaticEngine_8h_source.html | 2 +- katabatic/doc/html/Observer_8h_source.html | 2 +- katabatic/doc/html/Session_8h_source.html | 2 +- katabatic/doc/html/annotated.html | 2 +- ...classKatabatic_1_1AutoContact-members.html | 2 +- .../html/classKatabatic_1_1AutoContact.html | 2 +- ...sKatabatic_1_1AutoContactHTee-members.html | 2 +- .../classKatabatic_1_1AutoContactHTee.html | 2 +- ...abatic_1_1AutoContactTerminal-members.html | 2 +- ...classKatabatic_1_1AutoContactTerminal.html | 2 +- ...sKatabatic_1_1AutoContactTurn-members.html | 2 +- .../classKatabatic_1_1AutoContactTurn.html | 2 +- ...sKatabatic_1_1AutoContactVTee-members.html | 2 +- .../classKatabatic_1_1AutoContactVTee.html | 2 +- ...ssKatabatic_1_1AutoHorizontal-members.html | 2 +- .../classKatabatic_1_1AutoHorizontal.html | 2 +- ...classKatabatic_1_1AutoSegment-members.html | 2 +- .../html/classKatabatic_1_1AutoSegment.html | 2 +- ...tic_1_1AutoSegments__Aligneds-members.html | 2 +- ...ssKatabatic_1_1AutoSegments__Aligneds.html | 2 +- ..._1AutoSegments__AnchorOnGCell-members.html | 2 +- ...abatic_1_1AutoSegments__AnchorOnGCell.html | 2 +- ..._1_1AutoSegments__InDirection-members.html | 2 +- ...atabatic_1_1AutoSegments__InDirection.html | 2 +- ..._1AutoSegments__IsAccountable-members.html | 2 +- ...abatic_1_1AutoSegments__IsAccountable.html | 2 +- ...ic_1_1AutoSegments__OnContact-members.html | 2 +- ...sKatabatic_1_1AutoSegments__OnContact.html | 2 +- ...1AutoSegments__Perpandiculars-members.html | 2 +- ...batic_1_1AutoSegments__Perpandiculars.html | 2 +- ...lassKatabatic_1_1AutoVertical-members.html | 2 +- .../html/classKatabatic_1_1AutoVertical.html | 2 +- .../classKatabatic_1_1BaseGrid-members.html | 2 +- .../doc/html/classKatabatic_1_1BaseGrid.html | 2 +- ...Katabatic_1_1BaseGrid_1_1Axis-members.html | 2 +- .../classKatabatic_1_1BaseGrid_1_1Axis.html | 2 +- ...lassKatabatic_1_1BaseObserver-members.html | 2 +- .../html/classKatabatic_1_1BaseObserver.html | 2 +- .../classKatabatic_1_1ChipTools-members.html | 2 +- .../doc/html/classKatabatic_1_1ChipTools.html | 2 +- .../html/classKatabatic_1_1GCell-members.html | 2 +- .../doc/html/classKatabatic_1_1GCell.html | 2 +- ...sKatabatic_1_1GCellDensitySet-members.html | 2 +- .../classKatabatic_1_1GCellDensitySet.html | 2 +- .../classKatabatic_1_1GCellGrid-members.html | 2 +- .../doc/html/classKatabatic_1_1GCellGrid.html | 2 +- ..._1_1GCell_1_1CompareByDensity-members.html | 2 +- ...atabatic_1_1GCell_1_1CompareByDensity.html | 2 +- ...ic_1_1GCell_1_1CompareByIndex-members.html | 2 +- ...sKatabatic_1_1GCell_1_1CompareByIndex.html | 2 +- ...lassKatabatic_1_1GCell_1_1Key-members.html | 2 +- .../html/classKatabatic_1_1GCell_1_1Key.html | 2 +- .../html/classKatabatic_1_1Grid-members.html | 2 +- .../doc/html/classKatabatic_1_1Grid.html | 2 +- ...sKatabatic_1_1KatabaticEngine-members.html | 2 +- .../classKatabatic_1_1KatabaticEngine.html | 2 +- ...assKatabatic_1_1LocatorHelper-members.html | 2 +- .../html/classKatabatic_1_1LocatorHelper.html | 2 +- .../classKatabatic_1_1Observable-members.html | 2 +- .../html/classKatabatic_1_1Observable.html | 2 +- .../classKatabatic_1_1Observer-members.html | 2 +- .../doc/html/classKatabatic_1_1Observer.html | 2 +- .../classKatabatic_1_1Session-members.html | 2 +- .../doc/html/classKatabatic_1_1Session.html | 2 +- ...yNet_8cpp_03_1_1GCellTopology-members.html | 2 +- ...2LoadGrByNet_8cpp_03_1_1GCellTopology.html | 2 +- katabatic/doc/html/classes.html | 2 +- .../dir_46a5d811a0c60e95b7acaa92d73c003a.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- katabatic/doc/html/files.html | 2 +- katabatic/doc/html/functions.html | 2 +- katabatic/doc/html/functions_0x61.html | 2 +- katabatic/doc/html/functions_0x62.html | 2 +- katabatic/doc/html/functions_0x63.html | 2 +- katabatic/doc/html/functions_0x64.html | 2 +- katabatic/doc/html/functions_0x65.html | 2 +- katabatic/doc/html/functions_0x66.html | 2 +- katabatic/doc/html/functions_0x67.html | 2 +- katabatic/doc/html/functions_0x68.html | 2 +- katabatic/doc/html/functions_0x69.html | 2 +- katabatic/doc/html/functions_0x6b.html | 2 +- katabatic/doc/html/functions_0x6c.html | 2 +- katabatic/doc/html/functions_0x6d.html | 2 +- katabatic/doc/html/functions_0x6e.html | 2 +- katabatic/doc/html/functions_0x6f.html | 2 +- katabatic/doc/html/functions_0x70.html | 2 +- katabatic/doc/html/functions_0x72.html | 2 +- katabatic/doc/html/functions_0x73.html | 2 +- katabatic/doc/html/functions_0x74.html | 2 +- katabatic/doc/html/functions_0x75.html | 2 +- katabatic/doc/html/functions_0x78.html | 2 +- katabatic/doc/html/functions_0x7e.html | 2 +- katabatic/doc/html/functions_enum.html | 2 +- katabatic/doc/html/functions_eval.html | 2 +- katabatic/doc/html/functions_func.html | 2 +- katabatic/doc/html/functions_func_0x61.html | 2 +- katabatic/doc/html/functions_func_0x62.html | 2 +- katabatic/doc/html/functions_func_0x63.html | 2 +- katabatic/doc/html/functions_func_0x64.html | 2 +- katabatic/doc/html/functions_func_0x65.html | 2 +- katabatic/doc/html/functions_func_0x66.html | 2 +- katabatic/doc/html/functions_func_0x67.html | 2 +- katabatic/doc/html/functions_func_0x68.html | 2 +- katabatic/doc/html/functions_func_0x69.html | 2 +- katabatic/doc/html/functions_func_0x6b.html | 2 +- katabatic/doc/html/functions_func_0x6c.html | 2 +- katabatic/doc/html/functions_func_0x6d.html | 2 +- katabatic/doc/html/functions_func_0x6e.html | 2 +- katabatic/doc/html/functions_func_0x6f.html | 2 +- katabatic/doc/html/functions_func_0x70.html | 2 +- katabatic/doc/html/functions_func_0x72.html | 2 +- katabatic/doc/html/functions_func_0x73.html | 2 +- katabatic/doc/html/functions_func_0x74.html | 2 +- katabatic/doc/html/functions_func_0x75.html | 2 +- katabatic/doc/html/functions_func_0x78.html | 2 +- katabatic/doc/html/functions_func_0x7e.html | 2 +- katabatic/doc/html/functions_type.html | 2 +- katabatic/doc/html/graph_legend.html | 2 +- .../doc/html/group__LoadGlobalRouting.html | 2 +- .../doc/html/group__grpSynthHierarchy.html | 2 +- katabatic/doc/html/hierarchy.html | 2 +- katabatic/doc/html/index.html | 2 +- katabatic/doc/html/modules.html | 2 +- katabatic/doc/html/namespaceKatabatic.html | 2 +- ...mous__namespace_02AutoSegment_8cpp_03.html | 2 +- ...nymous__namespace_02ChipTools_8cpp_03.html | 2 +- ...eanonymous__namespace_02GCell_8cpp_03.html | 2 +- ...__namespace_02KatabaticEngine_8cpp_03.html | 2 +- ...mous__namespace_02LoadGrByNet_8cpp_03.html | 2 +- ...nonymous__namespace_02Session_8cpp_03.html | 2 +- katabatic/doc/html/namespacemembers.html | 2 +- katabatic/doc/html/namespacemembers_enum.html | 2 +- katabatic/doc/html/namespacemembers_eval.html | 2 +- katabatic/doc/html/namespacemembers_func.html | 2 +- katabatic/doc/html/namespacemembers_type.html | 2 +- katabatic/doc/html/namespaces.html | 2 +- katabatic/doc/html/pages.html | 2 +- katabatic/doc/latex/refman.tex | 2 +- kite/doc/html/Constants_8h_source.html | 2 +- kite/doc/html/DataNegociate_8h_source.html | 2 +- kite/doc/html/HorizontalTrack_8h_source.html | 2 +- kite/doc/html/KiteEngine_8h_source.html | 2 +- kite/doc/html/Manipulator_8h_source.html | 2 +- kite/doc/html/NegociateWindow_8h_source.html | 2 +- .../html/RoutingEventHistory_8h_source.html | 2 +- kite/doc/html/RoutingEventLoop_8h_source.html | 2 +- .../doc/html/RoutingEventQueue_8h_source.html | 2 +- kite/doc/html/RoutingEvent_8h_source.html | 2 +- kite/doc/html/RoutingPlane_8h_source.html | 2 +- kite/doc/html/SegmentFsm_8h_source.html | 2 +- kite/doc/html/Session_8h_source.html | 2 +- kite/doc/html/TrackElement_8h_source.html | 2 +- .../doc/html/TrackFixedSegment_8h_source.html | 2 +- kite/doc/html/TrackMarker_8h_source.html | 2 +- kite/doc/html/TrackSegment_8h_source.html | 2 +- kite/doc/html/Track_8h_source.html | 2 +- kite/doc/html/VerticalTrack_8h_source.html | 2 +- kite/doc/html/annotated.html | 2 +- .../classKite_1_1DataNegociate-members.html | 2 +- kite/doc/html/classKite_1_1DataNegociate.html | 2 +- .../classKite_1_1HorizontalTrack-members.html | 2 +- .../html/classKite_1_1HorizontalTrack.html | 2 +- .../html/classKite_1_1KiteEngine-members.html | 2 +- kite/doc/html/classKite_1_1KiteEngine.html | 2 +- .../classKite_1_1Manipulator-members.html | 2 +- kite/doc/html/classKite_1_1Manipulator.html | 2 +- .../classKite_1_1NegociateWindow-members.html | 2 +- .../html/classKite_1_1NegociateWindow.html | 2 +- .../classKite_1_1RoutingEvent-members.html | 2 +- kite/doc/html/classKite_1_1RoutingEvent.html | 2 +- ...ssKite_1_1RoutingEventHistory-members.html | 2 +- .../classKite_1_1RoutingEventHistory.html | 2 +- ...classKite_1_1RoutingEventLoop-members.html | 2 +- .../html/classKite_1_1RoutingEventLoop.html | 2 +- ...lassKite_1_1RoutingEventQueue-members.html | 2 +- .../html/classKite_1_1RoutingEventQueue.html | 2 +- ...ssKite_1_1RoutingEvent_1_1Key-members.html | 2 +- .../classKite_1_1RoutingEvent_1_1Key.html | 2 +- .../classKite_1_1RoutingPlane-members.html | 2 +- kite/doc/html/classKite_1_1RoutingPlane.html | 2 +- .../classKite_1_1SegmentAction-members.html | 2 +- kite/doc/html/classKite_1_1SegmentAction.html | 2 +- .../html/classKite_1_1SegmentFsm-members.html | 2 +- kite/doc/html/classKite_1_1SegmentFsm.html | 2 +- .../classKite_1_1SegmentObserver-members.html | 2 +- .../html/classKite_1_1SegmentObserver.html | 2 +- .../html/classKite_1_1Session-members.html | 2 +- kite/doc/html/classKite_1_1Session.html | 2 +- kite/doc/html/classKite_1_1Track-members.html | 2 +- kite/doc/html/classKite_1_1Track.html | 2 +- .../classKite_1_1TrackElement-members.html | 2 +- kite/doc/html/classKite_1_1TrackElement.html | 2 +- ...lassKite_1_1TrackFixedSegment-members.html | 2 +- .../html/classKite_1_1TrackFixedSegment.html | 2 +- .../classKite_1_1TrackMarker-members.html | 2 +- kite/doc/html/classKite_1_1TrackMarker.html | 2 +- .../classKite_1_1TrackSegment-members.html | 2 +- kite/doc/html/classKite_1_1TrackSegment.html | 2 +- .../classKite_1_1VerticalTrack-members.html | 2 +- kite/doc/html/classKite_1_1VerticalTrack.html | 2 +- kite/doc/html/classes.html | 2 +- .../dir_2916ee297f5e79ec495d393dfe8ba769.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- kite/doc/html/files.html | 2 +- kite/doc/html/functions.html | 2 +- kite/doc/html/functions_0x61.html | 2 +- kite/doc/html/functions_0x62.html | 2 +- kite/doc/html/functions_0x63.html | 2 +- kite/doc/html/functions_0x64.html | 2 +- kite/doc/html/functions_0x65.html | 2 +- kite/doc/html/functions_0x66.html | 2 +- kite/doc/html/functions_0x67.html | 2 +- kite/doc/html/functions_0x68.html | 2 +- kite/doc/html/functions_0x69.html | 2 +- kite/doc/html/functions_0x6c.html | 2 +- kite/doc/html/functions_0x6d.html | 2 +- kite/doc/html/functions_0x6e.html | 2 +- kite/doc/html/functions_0x6f.html | 2 +- kite/doc/html/functions_0x70.html | 2 +- kite/doc/html/functions_0x72.html | 2 +- kite/doc/html/functions_0x73.html | 2 +- kite/doc/html/functions_0x74.html | 2 +- kite/doc/html/functions_0x75.html | 2 +- kite/doc/html/functions_0x7e.html | 2 +- kite/doc/html/functions_enum.html | 2 +- kite/doc/html/functions_eval.html | 2 +- kite/doc/html/functions_func.html | 2 +- kite/doc/html/functions_func_0x61.html | 2 +- kite/doc/html/functions_func_0x62.html | 2 +- kite/doc/html/functions_func_0x63.html | 2 +- kite/doc/html/functions_func_0x64.html | 2 +- kite/doc/html/functions_func_0x65.html | 2 +- kite/doc/html/functions_func_0x66.html | 2 +- kite/doc/html/functions_func_0x67.html | 2 +- kite/doc/html/functions_func_0x68.html | 2 +- kite/doc/html/functions_func_0x69.html | 2 +- kite/doc/html/functions_func_0x6c.html | 2 +- kite/doc/html/functions_func_0x6d.html | 2 +- kite/doc/html/functions_func_0x6e.html | 2 +- kite/doc/html/functions_func_0x6f.html | 2 +- kite/doc/html/functions_func_0x70.html | 2 +- kite/doc/html/functions_func_0x72.html | 2 +- kite/doc/html/functions_func_0x73.html | 2 +- kite/doc/html/functions_func_0x75.html | 2 +- kite/doc/html/functions_func_0x7e.html | 2 +- kite/doc/html/functions_vars.html | 2 +- kite/doc/html/graph_legend.html | 2 +- kite/doc/html/group__AlgorithmOverview.html | 2 +- kite/doc/html/group__grpSynthHierarchy.html | 2 +- kite/doc/html/hierarchy.html | 2 +- kite/doc/html/index.html | 2 +- kite/doc/html/modules.html | 2 +- kite/doc/html/namespaceKite.html | 2 +- ...mous__namespace_02AutoSegment_8cpp_03.html | 2 +- ...nymous__namespace_02ChipTools_8cpp_03.html | 2 +- ...eanonymous__namespace_02GCell_8cpp_03.html | 2 +- ...__namespace_02KatabaticEngine_8cpp_03.html | 2 +- ...mous__namespace_02LoadGrByNet_8cpp_03.html | 2 +- ...mous__namespace_02Manipulator_8cpp_03.html | 2 +- ...__namespace_02NegociateWindow_8cpp_03.html | 2 +- ...ous__namespace_02RoutingPlane_8cpp_03.html | 2 +- ...ymous__namespace_02SegmentFsm_8cpp_03.html | 2 +- ...nonymous__namespace_02Session_8cpp_03.html | 2 +- ...ous__namespace_02TrackElement_8cpp_03.html | 2 +- ...eanonymous__namespace_02Track_8cpp_03.html | 2 +- kite/doc/html/namespacemembers.html | 2 +- kite/doc/html/namespacemembers_enum.html | 2 +- kite/doc/html/namespacemembers_eval.html | 2 +- kite/doc/html/namespacemembers_func.html | 2 +- kite/doc/html/namespacemembers_type.html | 2 +- kite/doc/html/namespaces.html | 2 +- kite/doc/html/pageNotes.html | 2 +- kite/doc/html/pages.html | 2 +- kite/doc/latex/refman.tex | 2 +- oroshi/CMakeLists.txt | 28 + oroshi/doc/CMakeLists.txt | 20 + oroshi/doc/SoC.css | 872 +++++++++ oroshi/doc/asimbook.cls | 798 +++++++++ oroshi/doc/closed.png | Bin 0 -> 125 bytes oroshi/doc/doxyfile | 272 +++ oroshi/doc/footer.html | 16 + oroshi/doc/header.html | 26 + oroshi/doc/header.tex | 47 + oroshi/doc/images/active-side-width-1.fig | 221 +++ oroshi/doc/images/active-side-width-1.pdf | Bin 0 -> 15291 bytes oroshi/doc/images/active-side-width-1.png | Bin 0 -> 23941 bytes oroshi/doc/images/gate-pitch-1.fig | 323 ++++ oroshi/doc/images/gate-pitch-1.pdf | Bin 0 -> 16880 bytes oroshi/doc/images/gate-pitch-1.png | Bin 0 -> 27818 bytes oroshi/doc/images/htrack-distance-1.fig | 215 +++ oroshi/doc/images/htrack-distance-1.pdf | Bin 0 -> 15677 bytes oroshi/doc/images/htrack-distance-1.png | Bin 0 -> 23645 bytes oroshi/doc/images/stack-layout-1.fig | 263 +++ oroshi/doc/images/stack-layout-1.pdf | Bin 0 -> 12449 bytes oroshi/doc/images/stack-layout-1.png | Bin 0 -> 29291 bytes oroshi/doc/images/stack-layout-2.fig | 175 ++ oroshi/doc/images/stack-layout-2.pdf | Bin 0 -> 13084 bytes oroshi/doc/images/stack-layout-2.png | Bin 0 -> 21361 bytes oroshi/doc/images/stack-layout-3.fig | 279 +++ oroshi/doc/images/stack-layout-3.pdf | Bin 0 -> 16375 bytes oroshi/doc/images/stack-layout-3.png | Bin 0 -> 30751 bytes oroshi/doc/images/wiring-spec-1.fig | 37 + oroshi/doc/images/wiring-spec-1.pdf | Bin 0 -> 8410 bytes oroshi/doc/images/wiring-spec-1.png | Bin 0 -> 3658 bytes oroshi/doc/images/wiring-spec-2.fig | 172 ++ oroshi/doc/images/wiring-spec-2.pdf | Bin 0 -> 10558 bytes oroshi/doc/images/wiring-spec-2.png | Bin 0 -> 20561 bytes oroshi/doc/open.png | Bin 0 -> 115 bytes oroshi/doc/tabs.css | 558 ++++++ oroshi/python/CMakeLists.txt | 26 + oroshi/python/ParamsMatrix.py | 238 +++ oroshi/python/Rules.py | 62 + oroshi/python/Stack.py | 1575 +++++++++++++++++ oroshi/python/WIP_CSP.py | 96 + oroshi/python/WIP_DP.py | 99 ++ oroshi/python/WIP_Transistor.py | 76 + oroshi/python/__init__.py | 36 + .../unicorn/html/UnicornGui_8h_source.html | 2 +- unicorn/doc/unicorn/html/annotated.html | 2 +- .../classUnicorn_1_1UnicornGui-members.html | 2 +- .../html/classUnicorn_1_1UnicornGui.html | 2 +- unicorn/doc/unicorn/html/classes.html | 2 +- .../dir_4aa09a10ca668c28f3c8e57fb374580b.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- unicorn/doc/unicorn/html/files.html | 2 +- unicorn/doc/unicorn/html/functions.html | 2 +- unicorn/doc/unicorn/html/functions_func.html | 2 +- unicorn/doc/unicorn/html/hierarchy.html | 2 +- unicorn/doc/unicorn/html/index.html | 2 +- .../doc/unicorn/html/namespaceUnicorn.html | 2 +- unicorn/doc/unicorn/html/namespaces.html | 2 +- unicorn/doc/unicorn/html/pages.html | 2 +- unicorn/doc/unicorn/latex/refman.tex | 2 +- unicorn/src/coriolis.py | 2 +- vlsisapd/doc/html/agds.html | 2 +- vlsisapd/doc/html/annotated.html | 2 +- vlsisapd/doc/html/cif.html | 2 +- .../doc/html/class_a_g_d_s_1_1_element.html | 2 +- .../doc/html/class_a_g_d_s_1_1_library.html | 2 +- .../doc/html/class_a_g_d_s_1_1_rectangle.html | 2 +- .../doc/html/class_a_g_d_s_1_1_structure.html | 2 +- .../doc/html/class_c_i_f_1_1_circuit.html | 2 +- .../doc/html/class_c_i_f_1_1_polygon.html | 2 +- vlsisapd/doc/html/class_d_t_r_1_1_a_rule.html | 2 +- .../html/class_d_t_r_1_1_d_t_r_exception.html | 2 +- vlsisapd/doc/html/class_d_t_r_1_1_rule.html | 2 +- vlsisapd/doc/html/class_d_t_r_1_1_techno.html | 2 +- vlsisapd/doc/html/class_name.html | 2 +- .../doc/html/class_open_chams_1_1_bloc.html | 2 +- .../html/class_open_chams_1_1_circuit.html | 2 +- .../doc/html/class_open_chams_1_1_d_d_p.html | 2 +- .../class_open_chams_1_1_d_slicing_node.html | 2 +- ...lass_open_chams_1_1_designer_cstr_o_c.html | 2 +- .../doc/html/class_open_chams_1_1_device.html | 2 +- .../html/class_open_chams_1_1_equation.html | 2 +- .../doc/html/class_open_chams_1_1_group.html | 2 +- .../class_open_chams_1_1_h_slicing_node.html | 2 +- ...class_open_chams_1_1_h_v_slicing_node.html | 2 +- .../class_open_chams_1_1_high_level_cstr.html | 2 +- .../html/class_open_chams_1_1_instance.html | 2 +- .../class_open_chams_1_1_instance_point.html | 2 +- ...ass_open_chams_1_1_intermediate_point.html | 2 +- .../doc/html/class_open_chams_1_1_layout.html | 2 +- .../html/class_open_chams_1_1_n_r_c_cstr.html | 2 +- .../doc/html/class_open_chams_1_1_net.html | 2 +- ...ass_open_chams_1_1_net_1_1_connection.html | 2 +- .../html/class_open_chams_1_1_netlist.html | 2 +- .../doc/html/class_open_chams_1_1_node.html | 2 +- ...s_open_chams_1_1_open_chams_exception.html | 2 +- .../html/class_open_chams_1_1_operator.html | 2 +- ...pen_chams_1_1_operator_1_1_constraint.html | 2 +- .../html/class_open_chams_1_1_parameters.html | 2 +- .../doc/html/class_open_chams_1_1_port.html | 2 +- .../html/class_open_chams_1_1_port_point.html | 2 +- .../class_open_chams_1_1_r_slicing_node.html | 2 +- .../html/class_open_chams_1_1_schematic.html | 2 +- ...ss_open_chams_1_1_schematic_1_1_infos.html | 2 +- .../class_open_chams_1_1_simul_model.html | 2 +- .../doc/html/class_open_chams_1_1_sizing.html | 2 +- .../class_open_chams_1_1_slicing_node.html | 2 +- .../html/class_open_chams_1_1_transistor.html | 2 +- .../class_open_chams_1_1_v_slicing_node.html | 2 +- .../doc/html/class_open_chams_1_1_wire.html | 2 +- .../html/class_open_chams_1_1_wire_point.html | 2 +- .../html/class_s_p_i_c_e_1_1_capacitor.html | 2 +- .../doc/html/class_s_p_i_c_e_1_1_circuit.html | 2 +- .../doc/html/class_s_p_i_c_e_1_1_current.html | 2 +- .../html/class_s_p_i_c_e_1_1_instance.html | 2 +- .../doc/html/class_s_p_i_c_e_1_1_mosfet.html | 2 +- .../html/class_s_p_i_c_e_1_1_resistor.html | 2 +- .../doc/html/class_s_p_i_c_e_1_1_source.html | 2 +- .../class_s_p_i_c_e_1_1_spice_exception.html | 2 +- .../doc/html/class_s_p_i_c_e_1_1_subckt.html | 2 +- .../doc/html/class_s_p_i_c_e_1_1_value.html | 2 +- .../doc/html/class_s_p_i_c_e_1_1_voltage.html | 2 +- vlsisapd/doc/html/classes.html | 2 +- vlsisapd/doc/html/contact.html | 2 +- .../dir_16663e997a305b34a6de63a94b7c64a5.html | 2 +- .../dir_2e9643828817c97812213788475aab5c.html | 2 +- .../dir_44cf75b6f4d33f3b1de8b5b6d95c4767.html | 2 +- .../dir_4c2a900f04506337a917f3b1377e2113.html | 2 +- .../dir_4edc6cb509aee81bf131e74f57ae2ac2.html | 2 +- .../dir_5ae6c17f233c8279b5a5e75367c9c1fd.html | 2 +- .../dir_5ddae980bfca85f3a0fc4acc697df818.html | 2 +- .../dir_62a21cda08e84450be03057c75fe6c87.html | 2 +- .../dir_7f66ebb56c27e5e012a274d82b424fec.html | 2 +- .../dir_84965cd3b8bdf3f7096a0b1a38f3ff74.html | 2 +- .../dir_b0cebf84aafce3f1ce34a5b9287487be.html | 2 +- .../dir_cc47161e5a891225af1545e3c32d2b04.html | 2 +- .../dir_cfcd2a6b137fd73839de8493b8cf8e71.html | 2 +- .../dir_e2caf2e1baa789cd2ae3140760971ecd.html | 2 +- .../dir_eb55033f12c957f0b0d23cc4e1dc88bb.html | 2 +- .../dir_f10e074351c7de29d121422ddc53fdd9.html | 2 +- .../dir_f402dd818ece141eaa163f9b534afb62.html | 2 +- .../dir_f5f235c9d985a49201c6621a8b780fb2.html | 2 +- .../dir_f70a8257f58d0d2fd08ab2c7f39ed5b0.html | 2 +- .../dir_f96c5c2ea4407f1c5a4effd34e21f46e.html | 2 +- .../dir_f98d6d61d512f6cad4e8fb729014711e.html | 2 +- vlsisapd/doc/html/dtr.html | 2 +- vlsisapd/doc/html/functions.html | 2 +- vlsisapd/doc/html/functions_0x62.html | 2 +- vlsisapd/doc/html/functions_0x63.html | 2 +- vlsisapd/doc/html/functions_0x64.html | 2 +- vlsisapd/doc/html/functions_0x67.html | 2 +- vlsisapd/doc/html/functions_0x68.html | 2 +- vlsisapd/doc/html/functions_0x69.html | 2 +- vlsisapd/doc/html/functions_0x6c.html | 2 +- vlsisapd/doc/html/functions_0x6d.html | 2 +- vlsisapd/doc/html/functions_0x6e.html | 2 +- vlsisapd/doc/html/functions_0x6f.html | 2 +- vlsisapd/doc/html/functions_0x70.html | 2 +- vlsisapd/doc/html/functions_0x72.html | 2 +- vlsisapd/doc/html/functions_0x73.html | 2 +- vlsisapd/doc/html/functions_0x74.html | 2 +- vlsisapd/doc/html/functions_0x76.html | 2 +- vlsisapd/doc/html/functions_0x77.html | 2 +- vlsisapd/doc/html/functions_enum.html | 2 +- vlsisapd/doc/html/functions_func.html | 2 +- vlsisapd/doc/html/functions_func_0x62.html | 2 +- vlsisapd/doc/html/functions_func_0x63.html | 2 +- vlsisapd/doc/html/functions_func_0x64.html | 2 +- vlsisapd/doc/html/functions_func_0x67.html | 2 +- vlsisapd/doc/html/functions_func_0x68.html | 2 +- vlsisapd/doc/html/functions_func_0x69.html | 2 +- vlsisapd/doc/html/functions_func_0x6c.html | 2 +- vlsisapd/doc/html/functions_func_0x6d.html | 2 +- vlsisapd/doc/html/functions_func_0x6e.html | 2 +- vlsisapd/doc/html/functions_func_0x6f.html | 2 +- vlsisapd/doc/html/functions_func_0x70.html | 2 +- vlsisapd/doc/html/functions_func_0x72.html | 2 +- vlsisapd/doc/html/functions_func_0x73.html | 2 +- vlsisapd/doc/html/functions_func_0x74.html | 2 +- vlsisapd/doc/html/functions_func_0x76.html | 2 +- vlsisapd/doc/html/functions_func_0x77.html | 2 +- vlsisapd/doc/html/hierarchy.html | 2 +- vlsisapd/doc/html/index.html | 2 +- vlsisapd/doc/html/openchams.html | 2 +- vlsisapd/doc/html/pages.html | 2 +- vlsisapd/doc/html/spice.html | 2 +- .../html/struct_open_chams_1_1map__item.html | 2 +- .../html/struct_s_p_i_c_e_1_1map__item.html | 2 +- .../doc/latex/class_a_g_d_s_1_1_element.pdf | Bin 4910 -> 4910 bytes .../doc/latex/class_a_g_d_s_1_1_rectangle.pdf | Bin 4907 -> 4907 bytes vlsisapd/doc/latex/class_d_t_r_1_1_a_rule.pdf | Bin 4187 -> 4187 bytes vlsisapd/doc/latex/class_d_t_r_1_1_rule.pdf | Bin 4188 -> 4188 bytes .../doc/latex/class_open_chams_1_1_bloc.pdf | Bin 4405 -> 4405 bytes .../doc/latex/class_open_chams_1_1_d_d_p.pdf | Bin 4838 -> 4838 bytes .../class_open_chams_1_1_d_slicing_node.pdf | Bin 4886 -> 4886 bytes ...class_open_chams_1_1_designer_cstr_o_c.pdf | Bin 5478 -> 5478 bytes .../doc/latex/class_open_chams_1_1_device.pdf | Bin 4792 -> 4792 bytes .../latex/class_open_chams_1_1_equation.pdf | Bin 6354 -> 6354 bytes .../doc/latex/class_open_chams_1_1_group.pdf | Bin 4521 -> 4521 bytes .../class_open_chams_1_1_h_slicing_node.pdf | Bin 5080 -> 5080 bytes .../class_open_chams_1_1_h_v_slicing_node.pdf | Bin 5141 -> 5141 bytes .../class_open_chams_1_1_high_level_cstr.pdf | Bin 5710 -> 5710 bytes .../latex/class_open_chams_1_1_instance.pdf | Bin 4786 -> 4786 bytes .../class_open_chams_1_1_instance_point.pdf | Bin 4924 -> 4924 bytes ...lass_open_chams_1_1_intermediate_point.pdf | Bin 4979 -> 4979 bytes .../latex/class_open_chams_1_1_n_r_c_cstr.pdf | Bin 5222 -> 5222 bytes .../doc/latex/class_open_chams_1_1_node.pdf | Bin 4968 -> 4968 bytes .../latex/class_open_chams_1_1_port_point.pdf | Bin 4444 -> 4444 bytes .../class_open_chams_1_1_r_slicing_node.pdf | Bin 4881 -> 4881 bytes .../class_open_chams_1_1_slicing_node.pdf | Bin 5362 -> 5362 bytes .../class_open_chams_1_1_v_slicing_node.pdf | Bin 5079 -> 5079 bytes .../latex/class_open_chams_1_1_wire_point.pdf | Bin 5294 -> 5294 bytes .../latex/class_s_p_i_c_e_1_1_capacitor.pdf | Bin 4925 -> 4925 bytes .../doc/latex/class_s_p_i_c_e_1_1_current.pdf | Bin 4614 -> 4614 bytes .../latex/class_s_p_i_c_e_1_1_instance.pdf | Bin 5437 -> 5437 bytes .../doc/latex/class_s_p_i_c_e_1_1_mosfet.pdf | Bin 4749 -> 4749 bytes .../latex/class_s_p_i_c_e_1_1_resistor.pdf | Bin 4872 -> 4872 bytes .../doc/latex/class_s_p_i_c_e_1_1_source.pdf | Bin 5273 -> 5273 bytes .../doc/latex/class_s_p_i_c_e_1_1_voltage.pdf | Bin 4873 -> 4873 bytes vlsisapd/doc/latex/refman.tex | 6 +- 1236 files changed, 26246 insertions(+), 1902 deletions(-) create mode 100644 crlcore/etc/180/scn6m_deep_09/analog.conf create mode 100644 crlcore/etc/180/scn6m_deep_09/devices.conf create mode 100644 crlcore/etc/180/scn6m_deep_09/dtr_scn6m_deep_09.py create mode 100644 crlcore/etc/45/freepdk_45/analog.conf create mode 100644 crlcore/etc/common/analog.conf create mode 100644 crlcore/etc/common/devices.conf create mode 100644 crlcore/etc/symbolic/cmos/analog.conf create mode 100644 crlcore/python/helpers/AnalogTechno.py create mode 100644 crlcore/python/helpers/Devices.py create mode 100644 documentation/Analog/Analog.rst create mode 100644 documentation/Oroshi/Oroshi.rst create mode 100644 documentation/_build/doctrees/Analog/Analog.doctree create mode 100644 documentation/_build/doctrees/Oroshi/Oroshi.doctree create mode 100644 documentation/examples/scripts/fulladder.ap create mode 100644 documentation/examples/scripts/fulladder.gds create mode 100644 documentation/examples/scripts/fulladder.vst create mode 100644 documentation/examples/scripts/invertor.ap create mode 100644 documentation/examples/scripts/invertor.vst create mode 100644 hurricane/doc/analog/CMakeLists.txt create mode 100644 hurricane/doc/analog/MainPage.dox create mode 100644 hurricane/doc/analog/SoC.css create mode 100644 hurricane/doc/analog/asimbook.cls create mode 100644 hurricane/doc/analog/closed.png create mode 100644 hurricane/doc/analog/doxyfile create mode 100644 hurricane/doc/analog/footer.html create mode 100644 hurricane/doc/analog/header.html create mode 100644 hurricane/doc/analog/header.tex create mode 100644 hurricane/doc/analog/images/device_schema_1_uml.pdf create mode 100644 hurricane/doc/analog/images/device_schema_1_uml.png create mode 100644 hurricane/doc/analog/images/device_schema_1_uml.xfig create mode 100644 hurricane/doc/analog/open.png create mode 100644 hurricane/doc/analog/tabs.css create mode 100644 hurricane/src/analog/AnalogCellExtension.cpp create mode 100644 hurricane/src/analog/BJT.cpp create mode 100644 hurricane/src/analog/BJTArguments.cpp create mode 100644 hurricane/src/analog/BJTFamily.cpp create mode 100644 hurricane/src/analog/BJTFamilyNames.cpp create mode 100644 hurricane/src/analog/CMakeLists.txt create mode 100644 hurricane/src/analog/CapacitorArguments.cpp create mode 100644 hurricane/src/analog/CapacitorFamily.cpp create mode 100644 hurricane/src/analog/CapacitorFamilyNames.cpp create mode 100644 hurricane/src/analog/Cascode.cpp create mode 100644 hurricane/src/analog/ChoiceParameter.cpp create mode 100644 hurricane/src/analog/Choices.cpp create mode 100644 hurricane/src/analog/CommonDrain.cpp create mode 100644 hurricane/src/analog/CommonGatePair.cpp create mode 100644 hurricane/src/analog/CommonSourcePair.cpp create mode 100644 hurricane/src/analog/CrossCoupledPair.cpp create mode 100644 hurricane/src/analog/Device.cpp create mode 100644 hurricane/src/analog/DifferentialPair.cpp create mode 100644 hurricane/src/analog/LayoutGenerator.cpp create mode 100644 hurricane/src/analog/LevelShifter.cpp create mode 100644 hurricane/src/analog/MIMCapacitor.cpp create mode 100644 hurricane/src/analog/MetaCapacitor.cpp create mode 100644 hurricane/src/analog/MetaTransistor.cpp create mode 100644 hurricane/src/analog/PyAnalog.cpp create mode 100644 hurricane/src/analog/PyBJTArguments.cpp create mode 100644 hurricane/src/analog/PyCapacitorArguments.cpp create mode 100644 hurricane/src/analog/PyCapacitorFamily.cpp create mode 100644 hurricane/src/analog/PyCapacitorParameter.cpp create mode 100644 hurricane/src/analog/PyCascode.cpp create mode 100644 hurricane/src/analog/PyChoiceParameter.cpp create mode 100644 hurricane/src/analog/PyCommonDrain.cpp create mode 100644 hurricane/src/analog/PyCommonGatePair.cpp create mode 100644 hurricane/src/analog/PyCommonSourcePair.cpp create mode 100644 hurricane/src/analog/PyCrossCoupledPair.cpp create mode 100644 hurricane/src/analog/PyDevice.cpp create mode 100644 hurricane/src/analog/PyDifferentialPair.cpp create mode 100644 hurricane/src/analog/PyFormFactorParameter.cpp create mode 100644 hurricane/src/analog/PyLayoutGenerator.cpp create mode 100644 hurricane/src/analog/PyLevelShifter.cpp create mode 100644 hurricane/src/analog/PyMCheckBoxParameter.cpp create mode 100644 hurricane/src/analog/PyMIMCapacitor.cpp create mode 100644 hurricane/src/analog/PyParameter.cpp create mode 100644 hurricane/src/analog/PySimpleCurrentMirror.cpp create mode 100644 hurricane/src/analog/PySpinBoxParameter.cpp create mode 100644 hurricane/src/analog/PyStepParameter.cpp create mode 100644 hurricane/src/analog/PyTransistor.cpp create mode 100644 hurricane/src/analog/PyTransistorArguments.cpp create mode 100644 hurricane/src/analog/PyTransistorFamily.cpp create mode 100644 hurricane/src/analog/PyTransistorMultiArguments.cpp create mode 100644 hurricane/src/analog/PyTransistorPair.cpp create mode 100644 hurricane/src/analog/SimpleCurrentMirror.cpp create mode 100644 hurricane/src/analog/Transistor.cpp create mode 100644 hurricane/src/analog/TransistorArguments.cpp create mode 100644 hurricane/src/analog/TransistorFamily.cpp create mode 100644 hurricane/src/analog/TransistorFamilyNames.cpp create mode 100644 hurricane/src/analog/TransistorMultiArguments.cpp create mode 100644 hurricane/src/analog/TransistorPair.cpp create mode 100644 hurricane/src/analog/hurricane/analog/AnalogCellExtension.h create mode 100644 hurricane/src/analog/hurricane/analog/Arguments.h create mode 100644 hurricane/src/analog/hurricane/analog/BJT.h create mode 100644 hurricane/src/analog/hurricane/analog/BJTArguments.h create mode 100644 hurricane/src/analog/hurricane/analog/BJTFamily.h create mode 100644 hurricane/src/analog/hurricane/analog/BJTFamilyNames.h create mode 100644 hurricane/src/analog/hurricane/analog/CapacitorArguments.h create mode 100644 hurricane/src/analog/hurricane/analog/CapacitorFamily.h create mode 100644 hurricane/src/analog/hurricane/analog/CapacitorFamilyNames.h create mode 100644 hurricane/src/analog/hurricane/analog/CapacitorParameter.h create mode 100644 hurricane/src/analog/hurricane/analog/Cascode.h create mode 100644 hurricane/src/analog/hurricane/analog/ChoiceParameter.h create mode 100644 hurricane/src/analog/hurricane/analog/Choices.h create mode 100644 hurricane/src/analog/hurricane/analog/CommonDrain.h create mode 100644 hurricane/src/analog/hurricane/analog/CommonGate.h create mode 100644 hurricane/src/analog/hurricane/analog/CommonGatePair.h create mode 100644 hurricane/src/analog/hurricane/analog/CommonSourcePair.h create mode 100644 hurricane/src/analog/hurricane/analog/CrossCoupledPair.h create mode 100644 hurricane/src/analog/hurricane/analog/Device.h create mode 100644 hurricane/src/analog/hurricane/analog/DifferentialPair.h create mode 100644 hurricane/src/analog/hurricane/analog/FormFactorParameter.h create mode 100644 hurricane/src/analog/hurricane/analog/LayoutGenerator.h create mode 100644 hurricane/src/analog/hurricane/analog/LevelShifter.h create mode 100644 hurricane/src/analog/hurricane/analog/MCheckBoxParameter.h create mode 100644 hurricane/src/analog/hurricane/analog/MIMCapacitor.h create mode 100644 hurricane/src/analog/hurricane/analog/MetaCapacitor.h create mode 100644 hurricane/src/analog/hurricane/analog/MetaTransistor.h create mode 100644 hurricane/src/analog/hurricane/analog/Parameter.h create mode 100644 hurricane/src/analog/hurricane/analog/PyBJTArguments.h create mode 100644 hurricane/src/analog/hurricane/analog/PyCapacitorArguments.h create mode 100644 hurricane/src/analog/hurricane/analog/PyCapacitorFamily.h create mode 100644 hurricane/src/analog/hurricane/analog/PyCapacitorParameter.h create mode 100644 hurricane/src/analog/hurricane/analog/PyCascode.h create mode 100644 hurricane/src/analog/hurricane/analog/PyChoiceParameter.h create mode 100644 hurricane/src/analog/hurricane/analog/PyCommonDrain.h create mode 100644 hurricane/src/analog/hurricane/analog/PyCommonGatePair.h create mode 100644 hurricane/src/analog/hurricane/analog/PyCommonSourcePair.h create mode 100644 hurricane/src/analog/hurricane/analog/PyCrossCoupledPair.h create mode 100644 hurricane/src/analog/hurricane/analog/PyDevice.h create mode 100644 hurricane/src/analog/hurricane/analog/PyDifferentialPair.h create mode 100644 hurricane/src/analog/hurricane/analog/PyFormFactorParameter.h create mode 100644 hurricane/src/analog/hurricane/analog/PyLayoutGenerator.h create mode 100644 hurricane/src/analog/hurricane/analog/PyLevelShifter.h create mode 100644 hurricane/src/analog/hurricane/analog/PyMCheckBoxParameter.h create mode 100644 hurricane/src/analog/hurricane/analog/PyMIMCapacitor.h create mode 100644 hurricane/src/analog/hurricane/analog/PyParameter.h create mode 100644 hurricane/src/analog/hurricane/analog/PySimpleCurrentMirror.h create mode 100644 hurricane/src/analog/hurricane/analog/PySpinBoxParameter.h create mode 100644 hurricane/src/analog/hurricane/analog/PyStepParameter.h create mode 100644 hurricane/src/analog/hurricane/analog/PyTransistor.h create mode 100644 hurricane/src/analog/hurricane/analog/PyTransistorArguments.h create mode 100644 hurricane/src/analog/hurricane/analog/PyTransistorFamily.h create mode 100644 hurricane/src/analog/hurricane/analog/PyTransistorMultiArguments.h create mode 100644 hurricane/src/analog/hurricane/analog/PyTransistorPair.h create mode 100644 hurricane/src/analog/hurricane/analog/SimpleCurrentMirror.h create mode 100644 hurricane/src/analog/hurricane/analog/SpinBoxParameter.h create mode 100644 hurricane/src/analog/hurricane/analog/StepParameter.h create mode 100644 hurricane/src/analog/hurricane/analog/Transistor.h create mode 100644 hurricane/src/analog/hurricane/analog/TransistorArguments.h create mode 100644 hurricane/src/analog/hurricane/analog/TransistorFamily.h create mode 100644 hurricane/src/analog/hurricane/analog/TransistorFamilyNames.h create mode 100644 hurricane/src/analog/hurricane/analog/TransistorMultiArguments.h create mode 100644 hurricane/src/analog/hurricane/analog/TransistorPair.h create mode 100644 hurricane/src/hurricane/DeviceDescriptor.cpp create mode 100644 hurricane/src/hurricane/PhysicalRule.cpp create mode 100644 hurricane/src/hurricane/Rule.cpp create mode 100644 hurricane/src/hurricane/TwoLayersPhysicalRule.cpp create mode 100644 hurricane/src/hurricane/UnitRule.cpp create mode 100644 hurricane/src/hurricane/hurricane/DeviceDescriptor.h create mode 100644 hurricane/src/hurricane/hurricane/ModelDescriptor.h create mode 100644 hurricane/src/hurricane/hurricane/PhysicalRule.h create mode 100644 hurricane/src/hurricane/hurricane/Rule.h create mode 100644 hurricane/src/hurricane/hurricane/TwoLayersPhysicalRule.h create mode 100644 hurricane/src/hurricane/hurricane/UnitRule.h create mode 100644 hurricane/src/isobar/PyDeviceDescriptor.cpp create mode 100644 hurricane/src/isobar/PyPhysicalRule.cpp create mode 100644 hurricane/src/isobar/PyRule.cpp create mode 100644 hurricane/src/isobar/PyTwoLayersPhysicalRule.cpp create mode 100644 hurricane/src/isobar/PyUnitRule.cpp create mode 100644 hurricane/src/isobar/hurricane/isobar/PyDeviceDescriptor.h create mode 100644 hurricane/src/isobar/hurricane/isobar/PyPhysicalRule.h create mode 100644 hurricane/src/isobar/hurricane/isobar/PyRule.h create mode 100644 hurricane/src/isobar/hurricane/isobar/PyTwoLayersPhysicalRule.h create mode 100644 hurricane/src/isobar/hurricane/isobar/PyUnitRule.h create mode 100644 oroshi/CMakeLists.txt create mode 100644 oroshi/doc/CMakeLists.txt create mode 100644 oroshi/doc/SoC.css create mode 100644 oroshi/doc/asimbook.cls create mode 100644 oroshi/doc/closed.png create mode 100644 oroshi/doc/doxyfile create mode 100644 oroshi/doc/footer.html create mode 100644 oroshi/doc/header.html create mode 100644 oroshi/doc/header.tex create mode 100644 oroshi/doc/images/active-side-width-1.fig create mode 100644 oroshi/doc/images/active-side-width-1.pdf create mode 100644 oroshi/doc/images/active-side-width-1.png create mode 100644 oroshi/doc/images/gate-pitch-1.fig create mode 100644 oroshi/doc/images/gate-pitch-1.pdf create mode 100644 oroshi/doc/images/gate-pitch-1.png create mode 100644 oroshi/doc/images/htrack-distance-1.fig create mode 100644 oroshi/doc/images/htrack-distance-1.pdf create mode 100644 oroshi/doc/images/htrack-distance-1.png create mode 100644 oroshi/doc/images/stack-layout-1.fig create mode 100644 oroshi/doc/images/stack-layout-1.pdf create mode 100644 oroshi/doc/images/stack-layout-1.png create mode 100644 oroshi/doc/images/stack-layout-2.fig create mode 100644 oroshi/doc/images/stack-layout-2.pdf create mode 100644 oroshi/doc/images/stack-layout-2.png create mode 100644 oroshi/doc/images/stack-layout-3.fig create mode 100644 oroshi/doc/images/stack-layout-3.pdf create mode 100644 oroshi/doc/images/stack-layout-3.png create mode 100644 oroshi/doc/images/wiring-spec-1.fig create mode 100644 oroshi/doc/images/wiring-spec-1.pdf create mode 100644 oroshi/doc/images/wiring-spec-1.png create mode 100644 oroshi/doc/images/wiring-spec-2.fig create mode 100644 oroshi/doc/images/wiring-spec-2.pdf create mode 100644 oroshi/doc/images/wiring-spec-2.png create mode 100644 oroshi/doc/open.png create mode 100644 oroshi/doc/tabs.css create mode 100644 oroshi/python/CMakeLists.txt create mode 100644 oroshi/python/ParamsMatrix.py create mode 100644 oroshi/python/Rules.py create mode 100644 oroshi/python/Stack.py create mode 100644 oroshi/python/WIP_CSP.py create mode 100644 oroshi/python/WIP_DP.py create mode 100644 oroshi/python/WIP_Transistor.py create mode 100644 oroshi/python/__init__.py diff --git a/.gitignore b/.gitignore index fce9d34f..49569275 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ GRTAGS .dir-locals.el .projectile +lefdef/src/lef/lef/lef.tab.h man/ rtf/ diff --git a/bootstrap/build.conf b/bootstrap/build.conf index 88bf54f1..58401b91 100644 --- a/bootstrap/build.conf +++ b/bootstrap/build.conf @@ -17,9 +17,6 @@ projects = [ , "vlsisapd" , "hurricane" , "crlcore" - #, "nimbus" - #, "metis" - #, "mauka" , "anabatic" , "katana" , "knik" @@ -29,6 +26,7 @@ projects = [ , "etesian" , "equinox" , "solstice" + , "oroshi" , "unicorn" , "tutorial" #, "testbench" @@ -38,21 +36,6 @@ projects = [ , "documentation" ] , 'repository': 'ssh://asim-t/users/largo2/git/coriolis.git' } - - , { 'name' : "chams" - , 'tools' : [ "hurricaneAMS" - , "amsCore" - , "opSim" - #, "scribe" - , "graph" - , "pharos" - , "isis" - , "horus" - #, "schematic" - , "solver" - , "autoDTR" - ] - , 'repository':"ssh://melon-t/users/outil/chams/chams.git" } ] package = { 'name' : 'coriolis2' diff --git a/bootstrap/ccb.py b/bootstrap/ccb.py index b3e99667..45faceb8 100755 --- a/bootstrap/ccb.py +++ b/bootstrap/ccb.py @@ -159,12 +159,8 @@ def autoLocate (): locations = [ os.path.abspath(os.path.dirname(sys.argv[0])) , os.environ['HOME']+'/coriolis-2.x/src/coriolis/bootstrap' , os.environ['HOME']+'/coriolis/src/coriolis/bootstrap' - , os.environ['HOME']+'/chams-1.x/src/coriolis/bootstrap' - , os.environ['HOME']+'/chams/src/coriolis/bootstrap' , '/users/outil/coriolis/coriolis-2.x/src/coriolis/bootstrap' , os.environ['HOME']+'/coriolis-2.x/'+osType+'/Release.Shared/install/'+libDir+'/'+sitePackage - , os.environ['HOME']+'/chams-1.x/'+osType+'/Release.Shared/install/'+libDir+'/'+sitePackage - , os.environ['HOME']+'/chams/'+osType+'/Release.Shared/install/'+libDir+'/'+sitePackage , '/users/outil/coriolis/coriolis-2.x/'+osType+'/Release.Shared/install/'+libDir+'/'+sitePackage ] diff --git a/bootstrap/coriolisEnv.py b/bootstrap/coriolisEnv.py index 0a3c8502..037e09f0 100755 --- a/bootstrap/coriolisEnv.py +++ b/bootstrap/coriolisEnv.py @@ -185,7 +185,6 @@ if __name__ == "__main__": parser.add_option ( "--devel" , action="store_true" , dest="devel" ) parser.add_option ( "--static" , action="store_true" , dest="static" ) parser.add_option ( "--shared" , action="store_true" , dest="shared" ) - parser.add_option ( "--chams" , action="store_true" , dest="chams" ) parser.add_option ( "--no-python" , action="store_true" , dest="nopython" ) parser.add_option ( "--root" , action="store" , type="string", dest="rootDir" ) ( options, args ) = parser.parse_args () diff --git a/bootstrap/socInstaller.py b/bootstrap/socInstaller.py index 17aaedee..9ef2bbd3 100755 --- a/bootstrap/socInstaller.py +++ b/bootstrap/socInstaller.py @@ -220,7 +220,7 @@ class Configuration ( object ): PrimaryNames = \ [ 'sender' , 'receivers' - , 'coriolisRepo', 'chamsRepo' , 'benchsRepo', 'supportRepos' + , 'coriolisRepo', 'benchsRepo', 'supportRepos' , 'homeDir' , 'masterHost' , 'debugArg' , 'nightlyMode' , 'rmSource' , 'rmBuild', 'doGit', 'doBuild', 'doBenchs', 'doSendReport' @@ -235,7 +235,6 @@ class Configuration ( object ): self._receivers = [ 'Jean-Paul.Chaput@lip6.fr', 'Eric.Lao@lip6.fr' ] self._supportRepos = [ 'http://github.com/miloyip/rapidjson' ] self._coriolisRepo = 'https://www-soc.lip6.fr/git/coriolis.git' - self._chamsRepo = 'file:///users/outil/chams/chams.git' self._benchsRepo = 'https://www-soc.lip6.fr/git/alliance-check-toolkit.git' self._homeDir = os.environ['HOME'] self._debugArg = '' @@ -458,7 +457,6 @@ try: for supportRepo in conf.supportRepos: gitSupports.append( GitRepository( supportRepo, conf.srcDir+'/support' ) ) gitCoriolis = GitRepository( conf.coriolisRepo, conf.srcDir, conf.fds['build'] ) - gitChams = GitRepository( conf.chamsRepo , conf.srcDir, conf.fds['build'] ) gitBenchs = GitRepository( conf.benchsRepo , conf.srcDir, conf.fds['build'] ) if conf.doGit: @@ -492,7 +490,7 @@ try: , ' <%s>' % ccbBin ] ) - buildCommand = '%s --root=%s --project=support --project=coriolis --project=chams --make="-j%%d install" %%s' \ + buildCommand = '%s --root=%s --project=support --project=coriolis --make="-j%%d install" %%s' \ % (ccbBin,conf.rootDir) benchsCommand = 'cd %s/benchs && ./bin/go.sh clean && ./bin/go.sh lvx' \ % (gitBenchs.localRepoDir) diff --git a/crlcore/doc/crlcore/html/AcmSigda_8h_source.html b/crlcore/doc/crlcore/html/AcmSigda_8h_source.html index 3bd49a3f..53d871fa 100644 --- a/crlcore/doc/crlcore/html/AcmSigda_8h_source.html +++ b/crlcore/doc/crlcore/html/AcmSigda_8h_source.html @@ -100,7 +100,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/AllianceFramework_8h_source.html b/crlcore/doc/crlcore/html/AllianceFramework_8h_source.html index 4e85bf5d..30c9bd51 100644 --- a/crlcore/doc/crlcore/html/AllianceFramework_8h_source.html +++ b/crlcore/doc/crlcore/html/AllianceFramework_8h_source.html @@ -301,7 +301,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/AllianceLibrary_8h_source.html b/crlcore/doc/crlcore/html/AllianceLibrary_8h_source.html index c6dc3fc4..de27d217 100644 --- a/crlcore/doc/crlcore/html/AllianceLibrary_8h_source.html +++ b/crlcore/doc/crlcore/html/AllianceLibrary_8h_source.html @@ -159,7 +159,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/Banner_8h_source.html b/crlcore/doc/crlcore/html/Banner_8h_source.html index 7caa8beb..347a23d6 100644 --- a/crlcore/doc/crlcore/html/Banner_8h_source.html +++ b/crlcore/doc/crlcore/html/Banner_8h_source.html @@ -265,7 +265,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/Catalog_8h_source.html b/crlcore/doc/crlcore/html/Catalog_8h_source.html index 6916e19b..19fbb1a2 100644 --- a/crlcore/doc/crlcore/html/Catalog_8h_source.html +++ b/crlcore/doc/crlcore/html/Catalog_8h_source.html @@ -563,7 +563,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/Environment_8h_source.html b/crlcore/doc/crlcore/html/Environment_8h_source.html index 369d8ad6..8494fee2 100644 --- a/crlcore/doc/crlcore/html/Environment_8h_source.html +++ b/crlcore/doc/crlcore/html/Environment_8h_source.html @@ -267,7 +267,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/GraphicToolEngine_8h_source.html b/crlcore/doc/crlcore/html/GraphicToolEngine_8h_source.html index f5b6e8d4..9e8507ea 100644 --- a/crlcore/doc/crlcore/html/GraphicToolEngine_8h_source.html +++ b/crlcore/doc/crlcore/html/GraphicToolEngine_8h_source.html @@ -174,7 +174,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/RoutingGauge_8h_source.html b/crlcore/doc/crlcore/html/RoutingGauge_8h_source.html index 9f2c6dd4..f3c8e910 100644 --- a/crlcore/doc/crlcore/html/RoutingGauge_8h_source.html +++ b/crlcore/doc/crlcore/html/RoutingGauge_8h_source.html @@ -231,7 +231,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/RoutingLayerGauge_8h_source.html b/crlcore/doc/crlcore/html/RoutingLayerGauge_8h_source.html index 6be72a19..b4908cca 100644 --- a/crlcore/doc/crlcore/html/RoutingLayerGauge_8h_source.html +++ b/crlcore/doc/crlcore/html/RoutingLayerGauge_8h_source.html @@ -401,7 +401,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/SearchPath_8h_source.html b/crlcore/doc/crlcore/html/SearchPath_8h_source.html index 4fc3a0cd..af0a3e35 100644 --- a/crlcore/doc/crlcore/html/SearchPath_8h_source.html +++ b/crlcore/doc/crlcore/html/SearchPath_8h_source.html @@ -189,7 +189,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/ToolEngine_8h_source.html b/crlcore/doc/crlcore/html/ToolEngine_8h_source.html index b397897e..b3a16722 100644 --- a/crlcore/doc/crlcore/html/ToolEngine_8h_source.html +++ b/crlcore/doc/crlcore/html/ToolEngine_8h_source.html @@ -166,7 +166,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/ToolEngines_8h_source.html b/crlcore/doc/crlcore/html/ToolEngines_8h_source.html index bf4ea18f..fe24b17d 100644 --- a/crlcore/doc/crlcore/html/ToolEngines_8h_source.html +++ b/crlcore/doc/crlcore/html/ToolEngines_8h_source.html @@ -127,7 +127,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/annotated.html b/crlcore/doc/crlcore/html/annotated.html index 06ec7312..d04c5c25 100644 --- a/crlcore/doc/crlcore/html/annotated.html +++ b/crlcore/doc/crlcore/html/annotated.html @@ -73,7 +73,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda-members.html b/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda-members.html index fa9c75a4..c8a3d627 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda-members.html @@ -61,7 +61,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda.html b/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda.html index 2ee22b6a..0ef81255 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda.html @@ -125,7 +125,7 @@ Static Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework-members.html b/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework-members.html index f824b5ff..7cb36032 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework-members.html @@ -95,7 +95,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework.html b/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework.html index 92d6d1b1..5dfcb0ea 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework.html @@ -873,7 +873,7 @@ Static Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary-members.html b/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary-members.html index d7241d6f..74d42edf 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary-members.html @@ -64,7 +64,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary.html b/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary.html index 2f579928..585f9771 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary.html @@ -175,7 +175,7 @@ Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Banner-members.html b/crlcore/doc/crlcore/html/classCRL_1_1Banner-members.html index e1acb1b8..20e4c157 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Banner-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Banner-members.html @@ -75,7 +75,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Banner.html b/crlcore/doc/crlcore/html/classCRL_1_1Banner.html index e7c733a0..321a3e40 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Banner.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Banner.html @@ -474,7 +474,7 @@ Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Catalog-members.html b/crlcore/doc/crlcore/html/classCRL_1_1Catalog-members.html index 5cad9309..294dec67 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Catalog-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Catalog-members.html @@ -68,7 +68,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Catalog.html b/crlcore/doc/crlcore/html/classCRL_1_1Catalog.html index 4e0a6c6e..e6cd5042 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Catalog.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Catalog.html @@ -284,7 +284,7 @@ Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension-members.html b/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension-members.html index b72a375b..fdc31e02 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension-members.html @@ -79,7 +79,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension.html b/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension.html index 3f3daea7..53b7a26b 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension.html @@ -733,7 +733,7 @@ Static Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State-members.html b/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State-members.html index 7c4e6708..71c9e04a 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State-members.html @@ -94,7 +94,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State.html b/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State.html index 7fbfc264..7b6f0019 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State.html @@ -813,7 +813,7 @@ Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Environment-members.html b/crlcore/doc/crlcore/html/classCRL_1_1Environment-members.html index b4c6b527..96718cc7 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Environment-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Environment-members.html @@ -104,7 +104,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Environment.html b/crlcore/doc/crlcore/html/classCRL_1_1Environment.html index 83df9bd3..2fd758f2 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Environment.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Environment.html @@ -1075,7 +1075,7 @@ Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool-members.html b/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool-members.html index 0c2909fb..9b1f923b 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool-members.html @@ -62,7 +62,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool.html b/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool.html index bbb0bed2..0f5f3cbb 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool.html @@ -131,7 +131,7 @@ Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge-members.html b/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge-members.html index d84a8c43..c3c31c4e 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge-members.html @@ -76,7 +76,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge.html b/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge.html index fb7222f7..64da52cc 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge.html @@ -428,7 +428,7 @@ Static Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge-members.html b/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge-members.html index fd4dad9c..04e99f74 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge-members.html @@ -79,7 +79,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge.html b/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge.html index a7d8c4c9..a832a1c4 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge.html @@ -683,7 +683,7 @@ Static Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1SearchPath-members.html b/crlcore/doc/crlcore/html/classCRL_1_1SearchPath-members.html index 396594c8..dd09bc4a 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1SearchPath-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1SearchPath-members.html @@ -72,7 +72,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1SearchPath.html b/crlcore/doc/crlcore/html/classCRL_1_1SearchPath.html index 1fb2a310..2cc86886 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1SearchPath.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1SearchPath.html @@ -438,7 +438,7 @@ Static Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1SearchPath_1_1Element-members.html b/crlcore/doc/crlcore/html/classCRL_1_1SearchPath_1_1Element-members.html index 2d0354e8..37d14511 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1SearchPath_1_1Element-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1SearchPath_1_1Element-members.html @@ -64,7 +64,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1SearchPath_1_1Element.html b/crlcore/doc/crlcore/html/classCRL_1_1SearchPath_1_1Element.html index dcdeb706..d84874c4 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1SearchPath_1_1Element.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1SearchPath_1_1Element.html @@ -190,7 +190,7 @@ Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1ToolEngine-members.html b/crlcore/doc/crlcore/html/classCRL_1_1ToolEngine-members.html index a2f74418..fec3a8d8 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1ToolEngine-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1ToolEngine-members.html @@ -72,7 +72,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1ToolEngine.html b/crlcore/doc/crlcore/html/classCRL_1_1ToolEngine.html index fd99c10e..32a55332 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1ToolEngine.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1ToolEngine.html @@ -198,7 +198,7 @@ Static Public Member Functions
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classes.html b/crlcore/doc/crlcore/html/classes.html index 7d5e3a0d..fb0758da 100644 --- a/crlcore/doc/crlcore/html/classes.html +++ b/crlcore/doc/crlcore/html/classes.html @@ -81,7 +81,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/dir_1d3beb215ce2defdb52d6dee9d41bc7a.html b/crlcore/doc/crlcore/html/dir_1d3beb215ce2defdb52d6dee9d41bc7a.html index 952d9d6d..3729fbb7 100644 --- a/crlcore/doc/crlcore/html/dir_1d3beb215ce2defdb52d6dee9d41bc7a.html +++ b/crlcore/doc/crlcore/html/dir_1d3beb215ce2defdb52d6dee9d41bc7a.html @@ -55,7 +55,7 @@ Directories
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/crlcore/doc/crlcore/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index de9c6538..320be0c3 100644 --- a/crlcore/doc/crlcore/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/crlcore/doc/crlcore/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -55,7 +55,7 @@ Directories
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/dir_d23e13494685c82fafa9ef5abb5746af.html b/crlcore/doc/crlcore/html/dir_d23e13494685c82fafa9ef5abb5746af.html index e11d7ed4..010f6cdc 100644 --- a/crlcore/doc/crlcore/html/dir_d23e13494685c82fafa9ef5abb5746af.html +++ b/crlcore/doc/crlcore/html/dir_d23e13494685c82fafa9ef5abb5746af.html @@ -77,7 +77,7 @@ Files
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/files.html b/crlcore/doc/crlcore/html/files.html index a18f63ee..bfcb37ef 100644 --- a/crlcore/doc/crlcore/html/files.html +++ b/crlcore/doc/crlcore/html/files.html @@ -66,7 +66,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions.html b/crlcore/doc/crlcore/html/functions.html index 3f4a738a..4a31984c 100644 --- a/crlcore/doc/crlcore/html/functions.html +++ b/crlcore/doc/crlcore/html/functions.html @@ -109,7 +109,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x62.html b/crlcore/doc/crlcore/html/functions_0x62.html index c11d90da..437f5230 100644 --- a/crlcore/doc/crlcore/html/functions_0x62.html +++ b/crlcore/doc/crlcore/html/functions_0x62.html @@ -85,7 +85,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x63.html b/crlcore/doc/crlcore/html/functions_0x63.html index a8b7ae76..01d258d5 100644 --- a/crlcore/doc/crlcore/html/functions_0x63.html +++ b/crlcore/doc/crlcore/html/functions_0x63.html @@ -105,7 +105,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x64.html b/crlcore/doc/crlcore/html/functions_0x64.html index 47d8ef4c..ea151402 100644 --- a/crlcore/doc/crlcore/html/functions_0x64.html +++ b/crlcore/doc/crlcore/html/functions_0x64.html @@ -99,7 +99,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x65.html b/crlcore/doc/crlcore/html/functions_0x65.html index b9c55ef0..516a7cdb 100644 --- a/crlcore/doc/crlcore/html/functions_0x65.html +++ b/crlcore/doc/crlcore/html/functions_0x65.html @@ -94,7 +94,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x66.html b/crlcore/doc/crlcore/html/functions_0x66.html index 254376ad..02f6073f 100644 --- a/crlcore/doc/crlcore/html/functions_0x66.html +++ b/crlcore/doc/crlcore/html/functions_0x66.html @@ -91,7 +91,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x67.html b/crlcore/doc/crlcore/html/functions_0x67.html index 790f5d51..81b73517 100644 --- a/crlcore/doc/crlcore/html/functions_0x67.html +++ b/crlcore/doc/crlcore/html/functions_0x67.html @@ -298,7 +298,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x68.html b/crlcore/doc/crlcore/html/functions_0x68.html index 256562f9..584ce19f 100644 --- a/crlcore/doc/crlcore/html/functions_0x68.html +++ b/crlcore/doc/crlcore/html/functions_0x68.html @@ -91,7 +91,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x69.html b/crlcore/doc/crlcore/html/functions_0x69.html index 8d9665f8..2c514f6f 100644 --- a/crlcore/doc/crlcore/html/functions_0x69.html +++ b/crlcore/doc/crlcore/html/functions_0x69.html @@ -137,7 +137,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x6c.html b/crlcore/doc/crlcore/html/functions_0x6c.html index e6352522..76062544 100644 --- a/crlcore/doc/crlcore/html/functions_0x6c.html +++ b/crlcore/doc/crlcore/html/functions_0x6c.html @@ -100,7 +100,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x6d.html b/crlcore/doc/crlcore/html/functions_0x6d.html index 646858d5..b19c595c 100644 --- a/crlcore/doc/crlcore/html/functions_0x6d.html +++ b/crlcore/doc/crlcore/html/functions_0x6d.html @@ -88,7 +88,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x6f.html b/crlcore/doc/crlcore/html/functions_0x6f.html index 39418823..0edd787d 100644 --- a/crlcore/doc/crlcore/html/functions_0x6f.html +++ b/crlcore/doc/crlcore/html/functions_0x6f.html @@ -85,7 +85,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x70.html b/crlcore/doc/crlcore/html/functions_0x70.html index 682bb768..8c93d967 100644 --- a/crlcore/doc/crlcore/html/functions_0x70.html +++ b/crlcore/doc/crlcore/html/functions_0x70.html @@ -94,7 +94,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x72.html b/crlcore/doc/crlcore/html/functions_0x72.html index 3520a855..3afece67 100644 --- a/crlcore/doc/crlcore/html/functions_0x72.html +++ b/crlcore/doc/crlcore/html/functions_0x72.html @@ -94,7 +94,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x73.html b/crlcore/doc/crlcore/html/functions_0x73.html index 014a01b9..3200be29 100644 --- a/crlcore/doc/crlcore/html/functions_0x73.html +++ b/crlcore/doc/crlcore/html/functions_0x73.html @@ -191,7 +191,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x76.html b/crlcore/doc/crlcore/html/functions_0x76.html index 3f4157c3..56584345 100644 --- a/crlcore/doc/crlcore/html/functions_0x76.html +++ b/crlcore/doc/crlcore/html/functions_0x76.html @@ -88,7 +88,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_0x7e.html b/crlcore/doc/crlcore/html/functions_0x7e.html index c6339745..ab92d2ec 100644 --- a/crlcore/doc/crlcore/html/functions_0x7e.html +++ b/crlcore/doc/crlcore/html/functions_0x7e.html @@ -91,7 +91,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_enum.html b/crlcore/doc/crlcore/html/functions_enum.html index b8fdafc9..cd4addb2 100644 --- a/crlcore/doc/crlcore/html/functions_enum.html +++ b/crlcore/doc/crlcore/html/functions_enum.html @@ -71,7 +71,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_eval.html b/crlcore/doc/crlcore/html/functions_eval.html index fcdb5884..2629019a 100644 --- a/crlcore/doc/crlcore/html/functions_eval.html +++ b/crlcore/doc/crlcore/html/functions_eval.html @@ -107,7 +107,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/functions_func.html b/crlcore/doc/crlcore/html/functions_func.html index 03a64bf0..8d39d4b6 100644 --- a/crlcore/doc/crlcore/html/functions_func.html +++ b/crlcore/doc/crlcore/html/functions_func.html @@ -627,7 +627,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/hierarchy.html b/crlcore/doc/crlcore/html/hierarchy.html index 427a15f0..cb6658f9 100644 --- a/crlcore/doc/crlcore/html/hierarchy.html +++ b/crlcore/doc/crlcore/html/hierarchy.html @@ -72,7 +72,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/index.html b/crlcore/doc/crlcore/html/index.html index b8f04e38..ab6f8019 100644 --- a/crlcore/doc/crlcore/html/index.html +++ b/crlcore/doc/crlcore/html/index.html @@ -45,7 +45,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/namespaceCRL.html b/crlcore/doc/crlcore/html/namespaceCRL.html index 9eb44359..75d8e04a 100644 --- a/crlcore/doc/crlcore/html/namespaceCRL.html +++ b/crlcore/doc/crlcore/html/namespaceCRL.html @@ -158,7 +158,7 @@ Typedefs
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/namespaceConstant.html b/crlcore/doc/crlcore/html/namespaceConstant.html index 325b11d7..44e5091e 100644 --- a/crlcore/doc/crlcore/html/namespaceConstant.html +++ b/crlcore/doc/crlcore/html/namespaceConstant.html @@ -157,7 +157,7 @@ Enumerations
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/namespacemembers.html b/crlcore/doc/crlcore/html/namespacemembers.html index 66c08c57..2fe7d7ee 100644 --- a/crlcore/doc/crlcore/html/namespacemembers.html +++ b/crlcore/doc/crlcore/html/namespacemembers.html @@ -99,7 +99,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/namespacemembers_enum.html b/crlcore/doc/crlcore/html/namespacemembers_enum.html index 11ac0477..86cff800 100644 --- a/crlcore/doc/crlcore/html/namespacemembers_enum.html +++ b/crlcore/doc/crlcore/html/namespacemembers_enum.html @@ -66,7 +66,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/namespacemembers_eval.html b/crlcore/doc/crlcore/html/namespacemembers_eval.html index 71f59174..ec87817d 100644 --- a/crlcore/doc/crlcore/html/namespacemembers_eval.html +++ b/crlcore/doc/crlcore/html/namespacemembers_eval.html @@ -81,7 +81,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/namespacemembers_type.html b/crlcore/doc/crlcore/html/namespacemembers_type.html index affb05ec..12238dbb 100644 --- a/crlcore/doc/crlcore/html/namespacemembers_type.html +++ b/crlcore/doc/crlcore/html/namespacemembers_type.html @@ -66,7 +66,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/namespaces.html b/crlcore/doc/crlcore/html/namespaces.html index 54bc88fa..b29dc75d 100644 --- a/crlcore/doc/crlcore/html/namespaces.html +++ b/crlcore/doc/crlcore/html/namespaces.html @@ -57,7 +57,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/html/pages.html b/crlcore/doc/crlcore/html/pages.html index 96e8abed..45cd13c3 100644 --- a/crlcore/doc/crlcore/html/pages.html +++ b/crlcore/doc/crlcore/html/pages.html @@ -50,7 +50,7 @@
- +
Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
diff --git a/crlcore/doc/crlcore/latex/refman.tex b/crlcore/doc/crlcore/latex/refman.tex index 42ab9cde..438a22f0 100644 --- a/crlcore/doc/crlcore/latex/refman.tex +++ b/crlcore/doc/crlcore/latex/refman.tex @@ -34,7 +34,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.5}\\ \vspace*{0.5cm} - {\small Sat Aug 18 2018 22:39:38}\\ + {\small Mon Oct 1 2018 14:29:07}\\ \end{center} \end{titlepage} diff --git a/crlcore/etc/180/scn6m_deep_09/analog.conf b/crlcore/etc/180/scn6m_deep_09/analog.conf new file mode 100644 index 00000000..cad99757 --- /dev/null +++ b/crlcore/etc/180/scn6m_deep_09/analog.conf @@ -0,0 +1,6 @@ +# -*- Mode:Python; explicit-buffer-name: "analog.conf" -*- + +import helpers + + +execfile( helpers.ndaConfDir+'/common/analog.conf' ) diff --git a/crlcore/etc/180/scn6m_deep_09/devices.conf b/crlcore/etc/180/scn6m_deep_09/devices.conf new file mode 100644 index 00000000..f5e40c7e --- /dev/null +++ b/crlcore/etc/180/scn6m_deep_09/devices.conf @@ -0,0 +1,6 @@ +# -*- Mode:Python; explicit-buffer-name: "devices.conf" -*- + +import helpers + + +execfile( helpers.ndaConfDir+'/common/devices.conf' ) diff --git a/crlcore/etc/180/scn6m_deep_09/dtr_scn6m_deep_09.py b/crlcore/etc/180/scn6m_deep_09/dtr_scn6m_deep_09.py new file mode 100644 index 00000000..24f2ee9f --- /dev/null +++ b/crlcore/etc/180/scn6m_deep_09/dtr_scn6m_deep_09.py @@ -0,0 +1,164 @@ + +# Name: dtr_scn6m_deep_09.py -- mosis scalable CMOS SCN6M_DEEP General Purpose with MIM capacitor +# Unit: micro +# version: rev.LIP6-1 +# +# The MOSIS Scalable (SCMOS) design rules can be found here: +# https://www.mosis.com/files/scmos/scmos.pdf +# +# Used revision 8.00 of May 11, 2009. + +from Hurricane import DbU +from helpers.AnalogTechno import Length +from helpers.AnalogTechno import Area +from helpers.AnalogTechno import Asymmetric + + +analogTechnologyTable = \ + ( ('Header', 'scmos6m_deep_09', DbU.UnitPowerMicro, 'rev.LIP6-1') + # ------------------------------------------------------------------------------------ + # ( Rule name , [Layer1] , [Layer2] , Value, Rule flags , Reference ) + , ('physicalGrid' , 0.09 , Length , 'N/A') + , ('transistorMinL' , 0.18 , Length , '2l rule 3.1 p.26') + , ('transistorMaxL' , 18 , Length , '200l arbitrary') + , ('transistorMinW' , 0.27 , Length , '3l arbitrary') + , ('transistorMaxW' , 270 , Length , '300l arbitrary') + + , ('minWidth' , 'nWell' , 1.08 , Length , '12l rule 1.1 p.16') + , ('minSpacing' , 'nWell' , 1.62 , Length , '18l rule 1.2 p.16') + , ('minArea' , 'nWell' , 0 , Area , 'N/A') + , ('minWidth' , 'active' , 0.27 , Length , '3l rule 2.1 p.19') + , ('minSpacing' , 'active' , 0.27 , Length , '3l rule 2.2 p.19') + , ('minArea' , 'active' , 0 , Area , 'N/A') + , ('minEnclosure' , 'nWell' , 'active' , 0.54 , Length|Asymmetric, 'rule X.Y, p.Z') + , ('minEnclosure' , 'nImplant', 'nWell' , 0 , Length|Asymmetric, 'rule X.Y, p.Z') + , ('minWidth' , 'poly' , 0.18 , Length , '2l rule 3.1 p.26') + , ('minSpacing' , 'poly' , 0.27 , Length , '3l rule 3.2 p.26') + , ('minGateSpacing' , 'poly' , 0.36 , Length , '4l rule 3.2.a p.26') + , ('minArea' , 'poly' , 0 , Area , 'N/A') + , ('minGateExtension' , 'poly' , 'active' , 0.225, Length|Asymmetric, '2.5l rule 3.3 p.26') + , ('minGateExtension' , 'active' , 'poly' , 0.225, Length|Asymmetric, 'N/A') + , ('minExtension' , 'poly' , 'active' , 0.225, Length|Asymmetric, 'N/A') + , ('minExtension' , 'active' , 'poly' , 0.36 , Length|Asymmetric, '4l rule 3.4 p.26') + , ('minSpacing' , 'poly' , 'active' , 0.09 , Length , '1l rule 3.5 p.26') + + , ('minGateSpacing' , 'nImplant', 'poly' , 0.27 , Length , '3l rule 4.1 N+ p.29') + , ('minEnclosure' , 'nImplant', 'active' , 0.18 , Length|Asymmetric, '2l rule 4.2 N+ p.29') + , ('minExtension' , 'nImplant', 'active' , 0.18 , Length|Asymmetric, 'dup. 4.2 N+' ) + , ('minEnclosure' , 'nImplant', 'cut0' , 0.135, Length|Asymmetric, '1.5l rule 4.3 N+ p.29') + , ('minExtension' , 'nImplant', 'cut0' , 0.135, Length|Asymmetric, 'dup. 4.3 N+' ) + , ('minWidth' , 'nImplant' , 0.36 , Length , '4l rule 4.4 N+ p.29') + , ('minSpacing' , 'nImplant' , 0.36 , Length , '4l rule 4.4 N+ p.29') + , ('minArea' , 'nImplant' , 0 , Area , 'N/A') + , ('minSpacing' , 'nImplant', 'active' , 0 , Length , 'N/A') + , ('minEnclosure' , 'nImplant', 'poly' , 0 , Length|Asymmetric, 'N/A') + , ('minLengthEnclosure', 'nImplant', 'active' , 0 , Length|Asymmetric, 'N/A') + , ('minWidthEnclosure' , 'nImplant', 'poly' , 0 , Length|Asymmetric, 'N/A') + , ('minGateEnclosure' , 'nImplant', 'poly' , 0 , Length|Asymmetric, 'N/A') + , ('minStrapEnclosure' , 'nImplant' , 0.135, Length , 'N/A') + , ('minSpacing' , 'nImplant', 'pImplant', 0 , Length , 'N/A') + + , ('minGateSpacing' , 'pImplant', 'poly' , 0.27 , Length , '3l rule 4.1 P+ p.29') + , ('minEnclosure' , 'pImplant', 'active' , 0.18 , Length|Asymmetric, '2l rule 4.2 P+ p.29') + , ('minExtension' , 'pImplant', 'active' , 0.18 , Length|Asymmetric, 'dup. 4.2 P+' ) + , ('minEnclosure' , 'pImplant', 'cut0' , 0.135, Length|Asymmetric, '1.5l rule 4.3 P+ p.29') + , ('minExtension' , 'pImplant', 'cut0' , 0.135, Length|Asymmetric, 'dup. 4.3 P-' ) + , ('minWidth' , 'pImplant' , 0.36 , Length , '4l rule 4.4 P+ p.29') + , ('minSpacing' , 'pImplant' , 0.36 , Length , '4l rule 4.4 P+ p.29') + , ('minArea' , 'pImplant' , 0 , Area , 'N/A') + , ('minSpacing' , 'pImplant', 'active' , 0 , Length , 'N/A') + , ('minEnclosure' , 'pImplant', 'poly' , 0 , Length|Asymmetric, 'N/A') + , ('minLengthEnclosure', 'pImplant', 'active' , 0 , Length|Asymmetric, 'N/A') + , ('minWidthEnclosure' , 'pImplant', 'poly' , 0 , Length|Asymmetric, 'N/A') + , ('minGateEnclosure' , 'pImplant', 'poly' , 0 , Length|Asymmetric, 'N/A') + , ('minStrapEnclosure' , 'pImplant' , 0.135, Length , 'N/A') + + , ('minWidth' , 'cut0' , 0.18 , Length , '2l rule 5.1 p.35') + , ('minEnclosure' , 'poly' , 'cut0' , 0.135, Length|Asymmetric, '1.5l rule 5.2 p.35') + , ('minExtension' , 'poly' , 'cut0' , 0.135, Length|Asymmetric, 'dup. 5.2' ) + , ('minSpacing' , 'cut0' , 0.36 , Length , '4l rule 5.3 p.35') + , ('minGateSpacing' , 'cut0' , 'poly' , 0.18 , Length|Asymmetric, '2l rule 5.4 p.35') + , ('minSpacing' , 'cut0' , 'poly' , 0.18 , Length , 'dup. 5.4' ) + , ('minSpacing' , 'cut0' , 'active' , 0.18 , Length , 'dup. 5.4' ) + # Rule 6.1, 6.3 & 6.4 are the same as 5.1, 5.3 & 5.4. + , ('minEnclosure' , 'active' , 'cut0' , 0.135, Length|Asymmetric, '1.5l rule 6.2 p.37') + + , ('minWidth' , 'metal1' , 0.27 , Length , '3l rule 7.1 p.39') + , ('minSpacing' , 'metal1' , 0.27 , Length , '3l rule 7.2 p.39') + , ('minArea' , 'metal1' , 0 , Area , 'N/A') + , ('minEnclosure' , 'metal1' , 'cut0' , 0.09 , Length|Asymmetric, '1l rule 7.3 p.39') + , ('minExtension' , 'metal1' , 'cut0' , 0.09 , Length|Asymmetric, 'dup. 7.3' ) + + , ('minWidth' , 'cut1' , 0.27 , Length , '3l rule 8.1 p.40') + , ('minSpacing' , 'cut1' , 0.27 , Length , '3l rule 8.2 p.40') + , ('minEnclosure' , 'metal1' , 'cut1' , 0.09 , Length|Asymmetric, '1l rule 8.3 p.40') + , ('lineExtension' , 'metal1' , 'cut1' , 0.09 , Length|Asymmetric, 'N/A') + + , ('minWidth' , 'metal2' , 0.27 , Length , '3l rule 9.1 p.41') + , ('minSpacing' , 'metal2' , 0.36 , Length , '4l rule 9.2 p.41') + , ('minArea' , 'metal2' , 0 , Area , 'N/A') + , ('minExtension' , 'metal2' , 'cut1' , 0.09 , Length|Asymmetric, '1l rule 9.3 p.41') + , ('minEnclosure' , 'metal2' , 'cut1' , 0.09 , Length|Asymmetric, 'dup. 9.3' ) + + , ('minWidth' , 'cut2' , 0.27 , Length , '3l rule 14.1 p.42') + , ('minSpacing' , 'cut2' , 0.27 , Length , '3l rule 14.2 p.42') + , ('minEnclosure' , 'metal2' , 'cut2' , 0.09 , Length|Asymmetric, '1l rule 14.3 p.42') + + , ('minWidth' , 'metal3' , 0.27 , Length , '3l rule 15.1 p.43') + , ('minSpacing' , 'metal3' , 0.36 , Length , '4l rule 15.2 p.43') + , ('minArea' , 'metal3' , 0 , Area , 'N/A') + , ('minExtension' , 'metal3' , 'cut2' , 0.09 , Length|Asymmetric, '1l rule 15.3 p.43') + , ('minEnclosure' , 'metal3' , 'cut2' , 0.09 , Length|Asymmetric, 'dup. 15.3' ) + + , ('minWidth' , 'cut3' , 0.27 , Length , '3l rule 21.1 p.44') + , ('minSpacing' , 'cut3' , 0.27 , Length , '3l rule 21.2 p.44') + , ('minEnclosure' , 'metal3' , 'cut3' , 0.09 , Length|Asymmetric, '1l rule 21.3 p.44') + + , ('minWidth' , 'metal4' , 0.27 , Length , '3l rule 22.1 p.45') + , ('minSpacing' , 'metal4' , 0.36 , Length , '4l rule 22.2 p.45') + , ('minArea' , 'metal4' , 0 , Area , 'N/A') + , ('minExtension' , 'metal4' , 'cut3' , 0.09 , Length|Asymmetric, '1l rule 22.3 p.45') + , ('minEnclosure' , 'metal4' , 'cut3' , 0.09 , Length|Asymmetric, 'dup. 22.3' ) + + , ('minWidth' , 'cut4' , 0.27 , Length , '3l rule 25.1 p.49') + , ('minSpacing' , 'cut4' , 0.27 , Length , '3l rule 25.2 p.49') + , ('minEnclosure' , 'metal4' , 'cut4' , 0.09 , Length|Asymmetric, '1l rule 25.3 p.49') + + , ('minWidth' , 'metal5' , 0.27 , Length , '3l rule 26.1 p.50') + , ('minSpacing' , 'metal5' , 0.36 , Length , '4l rule 26.2 p.50') + , ('minArea' , 'metal5' , 0 , Area , 'N/A') + , ('minExtension' , 'metal5' , 'cut4' , 0.09 , Length|Asymmetric, '1l rule 26.3 p.50') + , ('minEnclosure' , 'metal5' , 'cut4' , 0.09 , Length|Asymmetric, 'dup. 26.3' ) + + , ('minWidth' , 'cut5' , 0.36 , Length , '4l rule 29.1 p.51') + , ('minSpacing' , 'cut5' , 0.36 , Length , '4l rule 29.2 p.51') + , ('minEnclosure' , 'metal5' , 'cut5' , 0.09 , Length|Asymmetric, '1l rule 29.3 p.51') + + , ('minWidth' , 'metal6' , 0.45 , Length , '5l rule 30.1 p.52') + , ('minSpacing' , 'metal6' , 0.45 , Length , '5l rule 30.2 p.52') + , ('minArea' , 'metal6' , 0 , Area , 'N/A') + , ('minExtension' , 'metal6' , 'cut5' , 0.18 , Length|Asymmetric, '2l rule 30.3 p.52') + , ('minEnclosure' , 'metal6' , 'cut5' , 0.18 , Length|Asymmetric, 'dup. 30.3' ) + + # MIM Rules (Metal In Metal Capacitor). + # In SCN6M_DEEP metbot is metal5 and metcap is *below* metal6. + # metbot can be accessed with cut4 (down) and via5 (up). + # metcap can only be accessed *from* up with cut5. + , ('minWidth' , 'metcap' , 4.05 , Length , '45l rule 28.1 p.46') + , ('minWidth' , 'metcapdum' , 0.45 , Length , '9l rule 28.8 p.47') + , ('maxWidth' , 'metcap' , 30.0 , Length , '30um rule 28.12 p.47') + , ('maxWidth' , 'metbot' , 35.0 , Length , '35um rule 28.13 p.47') + , ('minSpacing' , 'metcap' , 1.26 , Length , '14l rule 28.2 p.46') + , ('minSpacing' , 'metbot' , 0.81 , Length , '9l rule 28.9 p.47') + , ('minSpacing' , 'cut4' , 'metcap' , 0.45 , Length , '5l rule 28.5 D p.46') + , ('minSpacing' , 'cut5' , 'metcap' , 0.45 , Length , '5l rule 28.5 U p.46') + , ('minSpacingOnMetbot', 'cut5' , 4.05 , Length , '45l rule 28.11 p.47') + , ('minSpacingOnMetcap', 'cut5' , 2.07 , Length , '23l rule 28.10 p.47') + , ('minEnclosure' , 'metbot' , 'metcap' , 0.45 , Length|Asymmetric, '5l rule 28.3 p.46') + , ('minEnclosure' , 'metbot' , 'cut4' , 0.18 , Length|Asymmetric, '2l rule 28.6 D p.46') + , ('minEnclosure' , 'metbot' , 'cut5' , 0.18 , Length|Asymmetric, '2l rule 28.6 U p.46') + , ('minEnclosure' , 'metcap' , 'cut5' , 0.27 , Length|Asymmetric, '3l rule 28.4 p.46') + , ('minArea' , 'metcap' , 0 , Area , 'N/A') + , ('minAreaInMetcap' , 'cut5' , 0 , Area , 'N/A') + ) + diff --git a/crlcore/etc/45/freepdk_45/analog.conf b/crlcore/etc/45/freepdk_45/analog.conf new file mode 100644 index 00000000..33cdd8d7 --- /dev/null +++ b/crlcore/etc/45/freepdk_45/analog.conf @@ -0,0 +1,10 @@ +# -*- Mode:Python; explicit-buffer-name: "analog.conf" -*- + +import helpers + + +parametersTable = \ + ( ('analog.techno' , TypeString, 'Analog_technology_is_disabled', + { 'flags':Cfg.Parameter.Flags.NeedRestart|Cfg.Parameter.Flags.MustExist } ) + , ('analog.devices', TypeString, helpers.technoDir+'/devices.conf' ) + ) diff --git a/crlcore/etc/common/analog.conf b/crlcore/etc/common/analog.conf new file mode 100644 index 00000000..bb02b287 --- /dev/null +++ b/crlcore/etc/common/analog.conf @@ -0,0 +1,10 @@ +# -*- Mode:Python; explicit-buffer-name: "analog.conf" -*- + +import helpers + + +parametersTable = \ + ( ('analog.techno' , TypeString, 'Analog_technology_has_not_been_set', + { 'flags':Cfg.Parameter.Flags.NeedRestart|Cfg.Parameter.Flags.MustExist } ) + , ('analog.devices', TypeString, helpers.technoDir+'/devices.conf' ) + ) diff --git a/crlcore/etc/common/devices.conf b/crlcore/etc/common/devices.conf new file mode 100644 index 00000000..c9914576 --- /dev/null +++ b/crlcore/etc/common/devices.conf @@ -0,0 +1,117 @@ +# -*- Mode:Python; explicit-buffer-name: "devices.conf" -*- + +import helpers + + +analogDir = helpers.sysConfDir + '/share/coriolis2/analog' +spiceDir = analogDir + 'spice/' + + +devicesTable = \ + ( { 'name' : 'DifferentialPairBulkConnected' + , 'spice' : spiceDir+'DiffPairBulkConnected.spi' + , 'connectors' : ( 'D1', 'D2', 'G1', 'G2', 'S' ) + , 'layouts' : ( ('Horizontal M2' , 'DP_horizontalM2.py' ) + , ('Symmetrical' , 'DP_symmetrical.py' ) + , ('Common centroid', 'DP_2DCommonCentroid.py') + , ('Interdigitated' , 'DP_interdigitated.py' ) + , ('WIP DP' , 'WIP_DP.py' ) + ) + } + , { 'name' : 'DifferentialPairBulkUnconnected' + , 'spice' : spiceDir+'DiffPairBulkUnconnected.spi' + , 'connectors' : ( 'D1', 'D2', 'G1', 'G2', 'S', 'B' ) + , 'layouts' : ( ('Horizontal M2' , 'DP_horizontalM2.py' ) + , ('Symmetrical' , 'DP_symmetrical.py' ) + , ('Common centroid', 'DP_2DCommonCentroid.py') + , ('Interdigitated' , 'DP_interdigitated.py' ) + , ('WIP DP' , 'WIP_DP.py' ) + ) + } + , { 'name' : 'LevelShifterBulkUnconnected' + , 'spice' : spiceDir+'LevelShifterBulkUnconnected.spi' + , 'connectors' : ( 'D1', 'D2', 'S1', 'S2', 'B' ) + , 'layouts' : ( ('Horizontal M2' , 'LS_horizontalM2.py' ) + , ('Symmetrical' , 'LS_symmetrical.py' ) + , ('Common centroid', 'LS_2DCommonCentroid.py') + , ('Interdigitated' , 'LS_interdigitated.py' ) + ) + } + , { 'name' : 'TransistorBulkConnected' + , 'spice' : spiceDir+'TransistorBulkConnected.spi' + , 'connectors' : ( 'D', 'G', 'S' ) + , 'layouts' : ( ('Rotate transistor', 'Transistor_rotate.py' ) + , ('Common transistor', 'Transistor_common.py' ) + , ('WIP Transistor' , 'WIP_Transistor.py' ) + ) + } + , { 'name' : 'TransistorBulkUnconnected' + , 'spice' : spiceDir+'TransistorBulkUnconnected.spi' + , 'connectors' : ( 'D', 'G', 'S', 'B' ) + , 'layouts' : ( ('Rotate transistor', 'Transistor_rotate.py' ) + , ('Common transistor', 'Transistor_common.py' ) + , ('WIP Transistor' , 'WIP_Transistor.py' ) + ) + } + , { 'name' : 'CrossCoupledPairBulkConnected' + , 'spice' : spiceDir+'CCPairBulkConnected.spi' + , 'connectors' : ( 'D1', 'D2', 'S' ) + , 'layouts' : ( ('Horizontal M2' , 'CCP_horizontalM2.py' ) + , ('Symmetrical' , 'CCP_symmetrical.py' ) + , ('Common centroid', 'CCP_2DCommonCentroid.py') + , ('Interdigitated' , 'CCP_interdigitated.py' ) + ) + } + , { 'name' : 'CrossCoupledPairBulkUnconnected' + , 'spice' : spiceDir+'CCPairBulkUnconnected.spi' + , 'connectors' : ( 'D1', 'D2', 'S', 'B' ) + , 'layouts' : ( ('Horizontal M2' , 'CCP_horizontalM2.py' ) + , ('Symmetrical' , 'CCP_symmetrical.py' ) + , ('Common centroid', 'CCP_2DCommonCentroid.py') + , ('Interdigitated' , 'CCP_interdigitated.py' ) + ) + } + , { 'name' : 'CommonSourcePairBulkConnected' + , 'spice' : spiceDir+'CommonSourcePairBulkConnected.spi' + , 'connectors' : ( 'D1', 'D2', 'S', 'G' ) + , 'layouts' : ( ('Horizontal M2' , 'CSP_horizontalM2.py' ) + , ('Symmetrical' , 'CSP_symmetrical.py' ) + , ('Interdigitated' , 'CSP_interdigitated.py' ) + , ('WIP CSP' , 'WIP_CSP.py' ) + ) + } + , { 'name' : 'CommonSourcePairBulkUnconnected' + , 'spice' : spiceDir+'CommonSourcePairBulkUnconnected.spi' + , 'connectors' : ( 'D1', 'D2', 'S', 'G', 'B' ) + , 'layouts' : ( ('Horizontal M2' , 'CSP_horizontalM2.py' ) + , ('Symmetrical' , 'CSP_symmetrical.py' ) + , ('Interdigitated' , 'CSP_interdigitated.py' ) + , ('WIP CSP' , 'WIP_CSP.py' ) + ) + } + , { 'name' : 'SimpleCurrentMirrorBulkConnected' + , 'spice' : spiceDir+'CurrMirBulkConnected.spi' + , 'connectors' : ( 'D1', 'D2', 'S' ) + , 'layouts' : ( ('Horizontal M2' , 'SCM_horizontalM2.py' ) + , ('Symmetrical' , 'SCM_symmetrical.py' ) + , ('Common centroid', 'SCM_2DCommonCentroid.py') + , ('Interdigitated' , 'SCM_interdigitated.py' ) + ) + } + , { 'name' : 'SimpleCurrentMirrorBulkUnconnected' + , 'spice' : spiceDir+'CurrMirBulkUnconnected.spi' + , 'connectors' : ( 'D1', 'D2', 'S', 'B' ) + , 'layouts' : ( ('Horizontal M2' , 'SCM_horizontalM2.py' ) + , ('Symmetrical' , 'SCM_symmetrical.py' ) + , ('Common centroid', 'SCM_2DCommonCentroid.py') + , ('Interdigitated' , 'SCM_interdigitated.py' ) + ) + } + , { 'name' : 'MIMCapacitor' + , 'spice' : spiceDir+'MIMCapacitor.spi' + , 'connectors' : ( 'P1', 'P2' ) + , 'layouts' : ( ('SimpleMatrix' , 'MIM_simpleMatrix.py' ) + , + ) + } + ) diff --git a/crlcore/etc/symbolic/cmos/analog.conf b/crlcore/etc/symbolic/cmos/analog.conf new file mode 100644 index 00000000..33cdd8d7 --- /dev/null +++ b/crlcore/etc/symbolic/cmos/analog.conf @@ -0,0 +1,10 @@ +# -*- Mode:Python; explicit-buffer-name: "analog.conf" -*- + +import helpers + + +parametersTable = \ + ( ('analog.techno' , TypeString, 'Analog_technology_is_disabled', + { 'flags':Cfg.Parameter.Flags.NeedRestart|Cfg.Parameter.Flags.MustExist } ) + , ('analog.devices', TypeString, helpers.technoDir+'/devices.conf' ) + ) diff --git a/crlcore/python/CMakeLists.txt b/crlcore/python/CMakeLists.txt index 1d4681c6..6c7f86e1 100644 --- a/crlcore/python/CMakeLists.txt +++ b/crlcore/python/CMakeLists.txt @@ -7,3 +7,5 @@ install( FILES helpers/Patterns.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers ) install( FILES helpers/Technology.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers ) install( FILES helpers/Debug.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers ) + install( FILES helpers/Devices.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers ) + install( FILES helpers/AnalogTechno.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers ) diff --git a/crlcore/python/coriolisInit.py b/crlcore/python/coriolisInit.py index e6b91d25..1385e0f6 100644 --- a/crlcore/python/coriolisInit.py +++ b/crlcore/python/coriolisInit.py @@ -13,6 +13,7 @@ try: from helpers import Configuration from helpers import ErrorMessage from helpers import WarningMessage + #from helpers import Devices from helpers.Configuration import TypeBool from helpers.Configuration import TypeInt from helpers.Configuration import TypeEnumerate @@ -33,6 +34,8 @@ try: from helpers.Display import Drawing from helpers import Alliance from helpers import Technology + from helpers import AnalogTechno + from helpers import Devices import helpers.Display except ImportError, e: serror = str(e) @@ -106,11 +109,12 @@ def coriolisConfigure(): , (helpers.technoDir+'/kite.conf' , SystemFile|ConfigurationHelper|KiteHelper) , (helpers.technoDir+'/stratus1.conf' , SystemFile|ConfigurationHelper) , (helpers.technoDir+'/plugins.conf' , SystemFile|ConfigurationHelper) + , (helpers.technoDir+'/analog.conf' , SystemFile|ConfigurationHelper) ] if os.getenv('HOME'): confFiles += [ (os.getenv('HOME')+'/.coriolis2/settings.py', 0) ] else: - w = WarningMessage(['The environment variable is not defined, this is most unusual.' + w = WarningMessage(['The "HOME" environment variable is not defined, this is most unusual.' ,'It prevents the loading of ${HOME}/.coriolis2/settings.py']) print w @@ -123,11 +127,11 @@ def coriolisConfigure(): if not os.path.isfile(confFile): if confFlags & SystemFile: print '[ERROR] Missing mandatory Coriolis2 system file:' - print ' <%s>' % confFile + print ' "%s"' % helpers.truncPath(confFile) print ' Your installation may be broken. Trying to continue anyway...' continue - print ' - Loading \"%s\".' % helpers.truncPath(confFile) + print ' - Loading "%s".' % helpers.truncPath(confFile) execfile(confFile,moduleGlobals) except Exception, e: helpers.showPythonTrace( confFile, e ) @@ -139,8 +143,8 @@ def coriolisConfigure(): else: if confFlags & loaderFlags & HelpersMask: if confFlags & SystemFile and loaderFlags & SystemMandatory: - print '[ERROR] Mandatory symbol <%s> is missing in system configuration file:' % symbol - print ' <%s>' % confFile + print '[ERROR] Mandatory symbol "%s" is missing in system configuration file:' % symbol + print ' "%s"' % helpers.truncPath(confFile) print ' Trying to continue anyway...' if confFile.endswith('settings.py'): @@ -160,4 +164,56 @@ def coriolisConfigure(): parameter.setString( mappingFile ) parameter.flags = Cfg.Parameter.Flags.NeedRestart|Cfg.Parameter.Flags.MustExist + confFile = None + if Cfg.hasParameter('analog.techno'): + confFile = Cfg.getParamString('analog.techno').asString() + if confFile == 'Analog_technology_has_not_been_set': confFile = None + if confFile == 'Analog_technology_is_disabled': return + + if not confFile: + vendorTech = helpers.techno.split('/')[-1] + confFile = os.path.join( helpers.technoDir, 'dtr_%s.py'%vendorTech ) + Cfg.getParamString('analog.techno').setString( confFile ) + + if not os.path.isfile(confFile): + print '[WARNING] Analog technology file (aka DTR) has not been found:' + print ' "%s"' % helpers.truncPath(confFile) + print ' Use of Coriolis analog is disabled.' + return + + try: + if not helpers.quiet: print ' - Loading \"%s\".' % helpers.truncPath(confFile) + execfile(confFile,moduleGlobals) + except Exception, e: + showPythonTrace( confFile, e ) + + if moduleGlobals.has_key('analogTechnologyTable'): + AnalogTechno.loadAnalogTechno( moduleGlobals['analogTechnologyTable'], confFile ) + del moduleGlobals['analogTechnologyTable'] + else: + print '[ERROR] Mandatory symbol <%s> is missing in technology configuration file:' % 'analogTechnologyTable' + print ' "%s"' % helpers.truncPath(confFile) + sys.exit( 1 ) + + confFile = Cfg.getParamString('analog.devices').asString() + if not os.path.isfile(confFile): + print '[ERROR] Missing mandatory analog devices description file:' + print ' "%s"' % helpers.truncPath(confFile) + print ' Please look for the "analog.devices" parameter in configuration files.' + sys.exit( 1 ) + + try: + if not helpers.quiet: print ' - Loading \"%s\".' % helpers.truncPath(confFile) + execfile(confFile,moduleGlobals) + except Exception, e: + showPythonTrace( confFile, e ) + + if moduleGlobals.has_key('devicesTable'): + Devices.loadDevices( moduleGlobals['devicesTable'], confFile ) + del moduleGlobals['devicesTable'] + else: + print '[ERROR] Mandatory symbol "%s" is missing in technology configuration file:' % 'devicesTable' + print ' "%s"' % helpers.truncPath(confFile) + sys.exit( 1 ) + return diff --git a/crlcore/python/helpers/AnalogTechno.py b/crlcore/python/helpers/AnalogTechno.py new file mode 100644 index 00000000..bb14270c --- /dev/null +++ b/crlcore/python/helpers/AnalogTechno.py @@ -0,0 +1,118 @@ +# -*- Mode:Python; explicit-buffer-name: "AnalogTechno.py" -*- +# +# This file is part of the Coriolis Software. +# Copyright (c) UPMC 2015-2018, All Rights Reserved +# +# +-----------------------------------------------------------------+ +# | C O R I O L I S | +# | Alliance / Hurricane Interface | +# | | +# | Author : Jean-Paul CHAPUT | +# | E-mail : Jean-Paul.Chaput@lip6.fr | +# | =============================================================== | +# | Python : "./crlcore/python/helpers/AnalogTechno.py" | +# +-----------------------------------------------------------------+ + + +import os +import os.path +import sys +import Hurricane +from Hurricane import DbU +from Hurricane import DataBase +from Hurricane import Layer +from helpers import ErrorMessage +from helpers import Debug + + +technoFile = '' + + +Length = 0x0001 +Area = 0x0002 +Asymmetric = 0x0004 +Unit = 0x0008 + + +def valueToDbU ( value, unit, lengthType ): + length = DbU.fromPhysical( value, unit ) + if lengthType & Length: return length + + area = DbU.fromPhysical( float(length), unit ) + return area + + +def checkEntry ( entry, entryNo ): + if not isinstance(entry,tuple): + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'Not a tuple (a, b, c, ...) or (a,).' + , str(entry) + ] ) + if not len(entry) in (4, 5, 6): + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'Tuple must have *4*, *5* or *6* items only.' + , str(entry) + ] ) + if not entry[-2] in (Length, Length|Asymmetric, Area, Unit): + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'Beforelast item is neither Length, Length|Asymmetric nor Area.' + , str(entry) + ] ) + return + + +def _loadAnalogTechno ( techno, ruleTable ): + unit = None + entryNo = 0 + for entry in ruleTable: + entryNo += 1 + + try: + if entryNo > 1: + checkEntry( entry, entryNo ) + + if entry[0] == 'Header': + unit = entry[2] + techno.setName( entry[1] ) + continue + + # Zero-layer rule. + if len(entry) == 4: + if entry[2] & Unit: + techno.addUnitRule( entry[0], entry[1], entry[3] ) + else: + techno.addPhysicalRule( entry[0] + , valueToDbU( entry[1], unit, entry[2] ) + , entry[3] + ) + # One-layer rule. + if len(entry) == 5: + techno.addPhysicalRule( entry[0] + , entry[1] + , valueToDbU( entry[2], unit, entry[3] ) + , entry[4] + ) + # Two-layer rule. + if len(entry) == 6: + symmetric = True + if entry[4] & Asymmetric: symmetric = False + + techno.addPhysicalRule( entry[0] + , entry[1] + , entry[2] + , symmetric + , valueToDbU( entry[3], unit, entry[4] ) + , entry[5] + ) + except Exception, e: + ErrorMessage.wrapPrint(e,'In %s: at index %d.' % (technoFile,entryNo)) + return + + +def loadAnalogTechno ( table, fromFile ): + global technoFile + technoFile = fromFile + techno = DataBase.getDB().getTechnology() + + _loadAnalogTechno( techno, table ) + return diff --git a/crlcore/python/helpers/Devices.py b/crlcore/python/helpers/Devices.py new file mode 100644 index 00000000..d6b224f3 --- /dev/null +++ b/crlcore/python/helpers/Devices.py @@ -0,0 +1,102 @@ +# -*- Mode:Python; explicit-buffer-name: "Devices.py" -*- +# +# This file is part of the Coriolis Software. +# Copyright (c) UPMC 2015-2018, All Rights Reserved +# +# +-----------------------------------------------------------------+ +# | C O R I O L I S | +# | Alliance / Hurricane Interface | +# | | +# | Author : Jean-Paul CHAPUT | +# | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +# | =============================================================== | +# | Python : "./crlcore/python/helpers/Devices.py" | +# +-----------------------------------------------------------------+ + + +import os +import os.path +import sys +from Hurricane import DataBase +from helpers import ErrorMessage +from helpers import Debug + + +devicesFile = '' + + +def checkEntry ( entry, entryNo ): + if not isinstance(entry,dict): + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'Not a dictionnary { key1:value1, key2:value2 }.' + , str(entry) + ] ) + if not entry.has_key('name'): + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'Dictionnary is missing the key/value pair.' + , str(entry) + ] ) + if not entry.has_key('spice'): + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'Dictionnary is missing the key/value pair.' + , str(entry) + ] ) + if not entry.has_key('connectors'): + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'Dictionnary is missing the key/value pair.' + , str(entry) + ] ) + if not entry.has_key('layouts'): + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'Dictionnary is missing the key/value pair.' + , str(entry) + ] ) + if not isinstance(entry['connectors'],tuple): + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'The value is not a *tuple*.' + , str(entry) + ] ) + layouts = entry['layouts'] + if not isinstance(layouts,tuple): + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'The value is not a *tuple*.' + , str(entry) + ] ) + for layout in layouts: + if not isinstance(layout,tuple) or len(layout) != 2: + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'One item is not a two element *tuple*.' + , str(entry) + ] ) + return + + +def _loadDevices ( techno, ruleTable ): + unit = None + entryNo = 0 + for entry in ruleTable: + entryNo += 1 + + try: + checkEntry( entry, entryNo ) + + devDesc = techno.addDeviceDescriptor( entry['name'] ) + devDesc.setSpiceFilePath( entry['spice'] ) + + for connector in entry['connectors']: + devDesc.addConnector( connector ) + + for layout in entry['layouts']: + devDesc.addLayout( layout[0], layout[1] ) + except Exception, e: + ErrorMessage.wrapPrint(e,'In %s: at index %d.' % (devicesFile,entryNo)) + return + + +def loadDevices ( table, fromFile ): + global devicesFile + devicesFile = fromFile + techno = DataBase.getDB().getTechnology() + + _loadDevices( techno, table ) + return diff --git a/crlcore/python/helpers/__init__.py b/crlcore/python/helpers/__init__.py index 6df1e186..4a518f80 100644 --- a/crlcore/python/helpers/__init__.py +++ b/crlcore/python/helpers/__init__.py @@ -46,9 +46,16 @@ def isderived ( derived, base ): return False -def truncPath ( path, maxlength=70 ): +def truncPath ( path, maxlength=80 ): if len(path) < maxlength: return path - return '.../'+os.sep.join(path.split(os.sep)[-4:]) + components = path.split(os.sep) + trunc = '' + for i in range(-1,-len(components),-1): + if len(trunc)+len(components[i]) >= maxlength: break + if not len(trunc): trunc = components[i] + else: trunc = os.path.join( components[i], trunc ) + + return '...' + os.sep + trunc def showPythonTrace ( scriptPath=None, e=None, tryContinue=True ): diff --git a/crlcore/src/ccore/Utilities.cpp b/crlcore/src/ccore/Utilities.cpp index bfad2bbf..96adbf35 100644 --- a/crlcore/src/ccore/Utilities.cpp +++ b/crlcore/src/ccore/Utilities.cpp @@ -318,14 +318,14 @@ namespace CRL { Utilities::Path crlcoreDir = pythonSitePackages / "crlcore"; Utilities::Path stratusDir = pythonSitePackages / "stratus"; Utilities::Path cumulusDir = pythonSitePackages / "cumulus"; - Utilities::Path pharosDir = pythonSitePackages / "pharos"; + Utilities::Path oroshiDir = pythonSitePackages / "oroshi"; Isobar::Script::addPath ( sysConfDir.toString() ); Isobar::Script::addPath ( pythonSitePackages.toString() ); Isobar::Script::addPath ( crlcoreDir.toString() ); Isobar::Script::addPath ( stratusDir.toString() ); Isobar::Script::addPath ( cumulusDir.toString() ); - Isobar::Script::addPath ( pharosDir.toString() ); + Isobar::Script::addPath ( oroshiDir.toString() ); // Triggers Configuration singleton creation. Cfg::Configuration::get (); diff --git a/documentation/Analog/Analog.rst b/documentation/Analog/Analog.rst new file mode 100644 index 00000000..27927665 --- /dev/null +++ b/documentation/Analog/Analog.rst @@ -0,0 +1,11 @@ +.. -*- Mode: rst -*- + +.. include:: ../etc/definitions.rst + + +========================== +Hurricane/Analog Reference +========================== + +The Viewer C++ API reference is generated by Doxygen_ and is +available here: `Hurricane/Analog `_ diff --git a/documentation/Oroshi/Oroshi.rst b/documentation/Oroshi/Oroshi.rst new file mode 100644 index 00000000..f8edd57a --- /dev/null +++ b/documentation/Oroshi/Oroshi.rst @@ -0,0 +1,11 @@ +.. -*- Mode: rst -*- + +.. include:: ../etc/definitions.rst + + +================ +Oroshi Reference +================ + +The Oroshi Python API reference is generated by Doxygen_ and is +available here: `Oroshi `_ diff --git a/documentation/PythonCpp/PythonCpp.pdf b/documentation/PythonCpp/PythonCpp.pdf index 30896179157552553847a679731608a3c8e03a9d..fea97c8d9d4f44f4f3fffc9da258b700349b1f79 100644 GIT binary patch delta 49467 zcmV)YK&-#n$O@#$3b0%TlTjoof9+jMbDKyIzUx;^tlgAc6;0;-IATOB5*Zvon{qih zCAE8r57|rp{tg030|Gr_IhNLa(4&}9kNBAWx~IDt2>J&RbUnB#25;X9jw}{RNL2id zjK$0{q!q*5a8!Il_oHE&#px{0FUL&U(I06zzlo9}DB?76hZM1V^foNgf2%0F{8GGk z0+lC_JBeHxH{3$jXGUn<%O93w;YMBdAyjlo5?E_b40A71iu=qcDZ3A%V(?=?T^EAr z>O`c$l5+I*VQ~M2pl`12Jt9~tjeahAJ|ICAR<``zca#r44oD47`*R7F>&~V7XYMai zrLk5DDZ?=_%YQG)Jj>!Re@LPVF>+T-)5M*X9=bPPzN&^-WObUpQ0s(ozCKmPSBQDt z4Ay4VNn8p$niuXu1+xVf#QiViPSl;cduImy>rSG5EW37RBq^fQN!6m1I%dW-Su{2j zGewsZASv7x&nw9_92L+`Z1ts*WxVS}oG^D?DQjPOH==)4mDJvqe^+%MUy{U{%S}8Q za=1IK6&y*CT{1FCC-ZPIOa1@7{6zO-E#zv*u68N)6StdZ9{=3i0YAV8@H=XIi+j0s zCQdWo@GiP{(SO5SkA*WU%xW}tpH|A9_MdNBfrdcl47uLnM@VdiSoV1xXL+%3CMs)N z`!8`G&Vu-+@>aTFe_@7ghfS*;?fQ|wf9dUjAK(M{9kqRf*4?s9@JG|SIy$Yh4msMb zMeMTAtE+TgR9r4Dl^sRlG;yn~S#@YQP2(`i;o8Ib13rM?^Kh%dgqjm{nRzF-8pq;w zpNq5zr_rSLl%qVp?hT$WW?-g)CIUWy-wS4XjRmJ|hV5Ybe|~Of9l>mgxs?rWA9F@W z7eO9}6*s?*XLWXg7uh^4=8J%LeJDt31|N=t58m;x3WdADv^N;l1k2TET`_uvpgRA#Mk8&9jbsI`;+}>c>6h!K%&oSM6btM;)0jPB3GeG0%oXjVUpnL|J=p z7wOWC%i_PHf5|!!$_qyj!7NRp-o%(TFu_0p0iRP&%qWA)r2U#4)FW4!yfdL9h}dJ5 zX%0!u3}-=JSChQT^E8ZuV!7rlt0$sh5@nv7)3*Q>3>;`!U_d+IcfbPeR7i4Xnqvz| zZevBkG|URn8o&qeJ7HE14i42$3Kw`Y<*e<~VQ!;Paw6R4d0zp7&kfKKK9O(4A#YK6Q#Roqcy(ljoZ_ z`4A`9e|`8;Wk7#`UjRSA=Lz|l;YP@sE&~dCQM4mo#!sH2MK?urz2WBaX;9TRO_mIO zRaGEmcf0*vCJE>Rv;%&C&lbL=SlTw>?p?A^6jtKN`1T-I){g=>`J}boL=xOY`E3wJ z?hx(GA94dT3N#MzJL~)!!A7w?8LgMY#L>%Fe_3bwsu60le6>uF#Zm3)mG9y7u9+=s z7r53X?`7FU|NWnaQ>cuD%F!2IIm$8BwnY#8R~#O-bwTII!l+|s&M!);S*v=xY_u=; z%^~>>W*6`Q{La~}V^~{$4BnPU=k1+&>rUR@R>`UqgDD3p3HShhFPQSF`)*p4FHVE< zf9tSfV}n}nwsPWEY9&RK-9(e}CWgbEcLwtucmVJL{C=HBjloQ|XjGjBjf$N#x;6mY zXmpz|O|<|W0UZH+0KezuU}b*~3Cja-$CbPC?A2DI*-f0Rb{ajvgXM&Pet>=eet^&O zRt1<=ozvd6|4+=ns)v8&Ui`atLj+}Ee`F`G<*Gv0+i}(_((MmcGpO-|8d$*RS!;wD zCXHah;(5D!dz=!>j*SB3Gwd+CyEK>xFq+_00DgcE;IpL;O=)$a=HQUMbhlOlvC`I9YO2byohZpH5)4zys`1~f z7VYb9!Y%AQx6iw6Zrz9Z&&DJjD}RBtwL1!s+YtoK(_tU;-7je9)2B~mDd9t&h9%Ck z__kwYEwOGq{Aiz{)w`^9)fzH66<9SM21?sk>_1an0@9PE4JiULGLx}pD1WtDS(Dqw z5q{raL0PF3RTV;*3j_EK1i>XF5MT&!>5b(|`A{5JY^`If%JIKX_jJzy;9?KCl80Rk zhI4fHbboye;>GuicyWET?yp{NwOVA6PPAF{|5&71Bs00NiHuaL7X5dNFPAUdW7XDG z_i80gw)|6Doc3kY=Y7>S(0`T0nOeRs`gUC&UwzfTfd!M%f(lktCWYfKjW* zQj{vnq`lK^?iv-Bh+%+ z9;x?Gwuic;c3wNG%YS@xOC8&MU)5F4L(f&eqgKBw9a(hTa5B_@<5+y@2E@1hu5FO~ zmo(!=Jg1!^jo@7FOLoGfjuK=17+G#hBC;u%>Q#;#8JxLTDJi4WfEeLqGI+X4r@Wp> zadgxVo(73_CEzK|A3BYaB)!iI(uI!R5A=rrZmLbWq24vVJAbK5CtcV1E;jM$c&v)N z;hqb*s(HCe5Q0_d({j~8t~m*n7M*CysjHf6YBFJR+4Xs|p(&d&VRQykS_fZr1}wan zNc23lA`-$pL9C1tB_?(X+hic+yr)*xIpA7JWtO+?i8}ZBEj5~!hn>2T8o&GX?v$Bb-y}60ERi1Xl1*;UE1lYY{?$jmJ-cmWgZ{ z4s(}xw142bM6|+IfG&K=*X^mNX6U;u^CQp7uUis;GIE*oz?{cdd*)()%g?;)%OhHX z1395U2-(!nv|AXe0l>@sq0SLYlolTFuiYcxlQH42vm+ly)MeN4%w674U(v!EWnYpl znMe}n|C`f@RH5!C1Z?t zV{DILc@QTsuxxqgaLf){SPT!?lh9G7^>pv&pue;Dm=Pg%=Oc|+?%G31Jv})EX!)lH zGdPU4YWxC?AI|f(r~brlaE98<06Ha4`qV57CU&msnpXCB8?#;^C4{`OKWKvHn1LAo zd4G3=qy|fcqil~u1aTfB9|=}zF2osdn|aK}`hl-oT53VMGjlCi}awo~}Ug(29$FoZ;&-t$#~(3XZ+ zF~L6-X9K%J&MX7zPZ~txPToo?%3?ki#C#@{Ivh%ek}$8X-i~Zyq9TckViQ#4 z*WZ5le$I9+oKWzI?Qv!uA){o|{~d1L$?lPPQhClF4?hD}CW^BxXIp`W8H*H^niHziX$Ap=k<@5&KDW#`KZ zhyk?k)OAv93gfF0gFYt`msykJ(0^g)p6C(FeF?N}IzQQyd}cDvdBZ&pc;VTxWL7HH z%h#~o@mzH!1FalpzBzR~v)d8q&UsDFCk$lK9X(kD&|(qL%cXLO09>4~;wmX-mOBc6F zNhk#;403N~9WtKXtTgGPohi@cT~_(o;uiazY_F zHgbBnc#D=ZXnANpL*W1h@a74fSA9z%3%rj31zrbE5}&ar%o230T?vb}a6QB%kLtaN z#mmo5K9o|*m$8B=GZqaY*bR6=w}@R9WX-T#kvG)U7RBk<4a@DzynhMgGXlXdu0~iN z1$yDwhgr0vqwuWqrU8PXjdGZWA_O(N+~j>uDCFK)Bq~maA!DiIJJCS$(n-SUU3@_h zc6dUDSu>%C0*o+Oz=%CU=}d^AA&v;~{hD{I#$`P%qU17J*tW+#L0O3TwYUEmVl8^s zZFB7uQ2Q#!mT)0<$A18io4l?zG+>g!05mqgX%&%=zlu2xq=3*oF1FJxvt5Q z;B9;+@XClXoQrCCNmrno-KV1$ByWalR5%HV000wZz0eNz*u*DK$y7Vwby(XCatg@9 zhsi@>HOWXP;Td!i+Fn35W?V~rWe>N&u!NfjI*8m~C|tr8)ea`vp3@b&C_)#xqa0;a z?>p7K&kMPz=6}5@E4e2g>wwNFnRVS3Z$n~Pax!}K{>o7Wsj}ws5N22{hUA6}+aw&z zl|_iQl+Anz1BL;{)VDOU=b4y|R9)|`H1OSP4~{{~v5ylSGd?B!-Gkt;)gu`V7*3SN zA!;h#|M=q^USTdE?q8TqmI4_JSxWQ%=E|{_ySlxe{3n z*{*#m;Sx4P{>9x-Ki_?L|6z_qqavG4lW-u&F4e9*qUu22RdYaT^~fS1>wQGbBDPWB zdwutxIT=G*D$}RA2-))C?uS_pl#Fy5cqP^Av2si#ldS-`E=aEmE~cbul-gt-oT<_d z5LZ2@_J1!Lwp^7#XvSrAY&#{-l!FV>NDYqM-Nw10STVwekJD$khFmr^_VLhMg1aG>Mo+#Ua(4QpMQA|s>3Ob;yvfLOdo5)>DbUa2ZNU- z8Hjg{49j=_pRB0Ka{WLC0Y8D$ ze9Ja!#qu>r?-ZVgiWF@y$E;LYlxAXTE7SW{*o1$3F7OvWq&V+cd;7NJ@M3j5KWx@uvrVkz|obF1{bAt2Hfmte9t4uHnmP ztk-ly^@GwqGi1{=gkv(j#Ou=`tkR>!A#cC+^&fgVn8b#=sp4%vJMpd;p9jE}JAYq$ z%IV>bDL>8yy_>SDt{Zj<41X&PsUe$?dmE>an$pIG`forMfGhOUw{6XGv5+&`Fh6yv z5Do!YrL6sZ4|E$K2i)gx)aB~S{S=8V*MRL%XC?zNE zXzmL_qay`Q>JvU7^j}q42wTWR!ruephYuRk1tHnH1xXFVH2BK-Z_$P^GBQJ~8P9(v znT>=UC(m%oR<$o5`J4`Gm6N*$ts;(#LcxXwf zHI*e-a!!*uJ^#H6EI^SG?Kr)7MneEx?&aIXVzH*yFBY{fJLg5`?7|jSKy24`tm3`p z2ZRUQ@?1`YFRWs2z3slrCUKU;`Du?kLHFw{nvMo(5f*Wl!jgYW1JON;itKzaIsLhK z4Gi5HLjfFxm8>|Q`N-^VuMseLz&&e$tIpxW5eM`CA)W=QAyqz6rJBX3`nTO zDnlHfI80cx`_9{+sWpdpuPsU(*Ry_Cl=qg+T;c}uyOou9e&|pQ4y}X4Y|tcdxhpkc z+$GGhEsqNlaIb&T+EZ$n?+#3qp9`bEJsfBYof--Ai5IwrrVS^DIDu^lCV7D_8HW=+ ziZXCaoN8AUAO)9`Fwf%%C-k})D$l`ql=Y{HA z-%hSI-(jd3UByX)tcF?AH*b|!K-V5)Byb$mIUk~o0g!PZyO^et4E|i9)f28jv*f!9 zTo_m2O1-5^K$uo9Op=^7X;CqWkqKxccsER?xq@{wuxNr> zIwI(Pr2v256L2KJq0wA^XEc}VX!;M+coL_VxTNAr(p5;{y2cbn%Bs4aF6z0rt{$Ec zoLLlu3;Q^401orI@iy(6AhmiNSTi3)K#Xw>#W!IzJcSj{SaH11ASVddd+|P#NJxHY zo*bR)l_(pH;{?=H99+MiNExvmW>^$gaWrU=0|tLEx0(2QoCe)2jkE~46O_nlEW=bS z4fQ+YvYN4K41B0o$*ZR=hZ0U5Bkks9tiHc#;8fSHCm=O?UeJs+wMQxJv^HotCBEx_ z4%#Xmq=P;v%aCEH!V?B)y&S1L08eebpeFcWEuW6Z*`&azl=E8D$a!<~!@?7=a3RyK z{{(+5H#hhR__78JcO3$e*#sudiWYkzsZ%>J+*?5dCXBKd$D;;KXCF!-`$(Ut(3r&0 zn`<2Rv*~%#2vmJ!%Z2KL5EF-9jx>Zg%Pvg7Wz);yKKNQN^xy>dDl5zR{N~})IXn%}YI(cdZEnjg07Mv}ZEC?*3ywjmCyFmRUKnIE*q05b+O6^5tlY+* zlI88T+@A!mPkd+$!r8qclqgc?8=%6f~g%lpOdp`7Ws^6D@` zR`s09%riB8Z?!?yvCBh*=e ze3^mgJ$^A?ykD*tbD3n0P7zpCo~|-QO|!Ez{QleT|L)(nZN;Hs|Ho-BpwfSVmA|y5 zW0k6LJi>gf#?i+3d|b-3puYa&IT8P~1#ZRu8KK3U)^fHgce~{bCl95`WE<_C^4MBD zod`}YH;WyPmg~pOK^Bx*M`s1?K;b~Cqg8peSnWUwNEozIYp|X-<-ZJOavUWGVe;{B zgZ%L`VdC3uVUpjK+l97CzxjWwaq{n(@Ql!l59`_EazFTay*1s=TD;(V}o(i5v z6J!u#o7u8_G)U}fsI2O!l;Hnow7D-0Xyt#)<*K|j;b20qG)iqi_V%gR-8~b$ZAa!o z{F)4pA1u~$nadhs{6epjwo~yq)&0LEsWOiQqRPKUu1?o@3yer6`Hz1-rfR+B_zD)XZVyC12w?2SY7>nyE`4L(hb%_ ze2lX=E#!S%P716^(tH%>d2A?)A(p|a9+wMM1qclBtjUcc9Ij18TL|`JR3s`AUGze& zn44lq_ak&69fjlYJWd4SA|B+E@G2C4bJ*zvO6755_Uis7yC=YD1JonPtoJR1#gq=LPr&C6X%INSF`;KJBiA#=yxUk80+m zKLLy5<rp0hlg^4yWw%>3f93Ja&&rM>)NYy8q`R6p)3O)3aBnUmLS&dSz0#yu6yv(`pF3hV zjqobP4E3=s{ucY)m&MopuLuA8$K%5m6^0dyl4H=a=2@7T|+>f9j{S4@Pl)dZI(9)Y}%)~UI(|h zYTP7zbX_eX$|mHD`jygpx_lPF%Qw%7nS5Xh%9n}#1JO+ZKMG}TWOHFzZ?d6YkK&ky0f!6#j6o?k7rcF5U{$ z*56wMM6gE+Lxhh6Vcztn_2FmieTMIT^e_@qdB14M8;=u-WRO31?Io>0wXk(g^;0`b z<%j}FWsZmtjz|!Ae~J(kC~BbHttPAa)Zhoe8);6E4@O%Hh7a+lzs{yBBPh2774j+Z zIs_@sjr8vw`tnJI@Jdp{hu-aCHJPqHPP5r$HFM}Dm>?;FjjIK&SG_0H$4ET^{_xAt z-hIm~f*}?7J00?9(n)r8=TJxCvJ{b6=!o<>Okt#QYYZ;^f9=2Oac{|4$Gco)mc99E zPU}^g0I>%AVW(>c<9^@e2af0_6ux(;=@14}F=lO*M)E8jU22cH95H+t%vNrv`@UU6 zR__LDT1jeIqfmhi`*ob)3&wX;8Ym}Rcj$xA2MX(7&Ye+$<-NP(1gPSf~aKB@M9yu8Ps#;)oaAgl^)M@KtRjTiG3a3sgL{ZE%Z ziV@|dh3!a?#BP{^AnLQ%hWStfll%VOFa@RC731Y${xbi(`s&gNN)4Is12wPr;3&)lRh7ak( za^|KGUAkBW&2E)-jMUN16$!oxX&nVf3H>a22G%--fR-X6)OM!st=Lu0ppRB!Ux-EA zKR7i7e}p$Swyr2Jj4)M=)zv1hrS4J#shdcx*3~e=zR5?rB`C$k%e8kqd(WL^tFWbZ z-;n1Z7R|N|mxD0<7`r>9QY`ONqn1y1m8F$!@+``ycM$};` zxN+y~dc(5S35Qwsv3EV2)Rt&k4xR#kmCmi`R_Xmeo$pPOPi-80XaFT|%tBA^MmmHF zXlq}G+5^}GVEPQi_0&!!!csjG?Ke|9dogOKO$*PS>Ry=IanOj{UyRy$gB{7sQhP5x ze;>w!aNs6*7EaBr{n_{`ct$oB1jQEe*(5A(Q!C3cj;N^+6f3Cn!?Pp`z)JJCyS$_{`^xm z$sQbVAQq8e1>#=6npR{n&!j0S1E<~0RTUg0%-nV!W1 zeQ>K6^TICb`8fB2US1Oe-PC@Qo|%Er;c3G1LrSu@tNS6?#b|Z8%ZJBMe_0t~G%qsX zQYspqM$3xk?Oq3jgH4IB%YnW+^j6y#?X5tzkDX3{Eh43R`(O~}=ktD06Ft!63H}JB zOR3cR94q-2Knjz@xpv=XuboC;oQwxOoou9S5e&lcIJ9E%IL#y5RxSm6!YbPmqbQG+ z_;|do8&Q%bVgJP300w*>eK1p##HG$&MAgUw#f0l_219wYW>W=MB zyEeQvP`}Zl=V#!WC@PhMIl*(xpSkFb<27G)N$t|Wh121TLL1@layWnFa7j#HY$hO^ zwTHnXTVY(2gC4y&i=g4sg9R)dPP#h5XxFv^rXE1Mf%8MHa@ZJwQ>Xx;xjZ(U#W8Dh zQ*_j3c3-x;rZ%Z|e>brMuId2WG`V?yXaSA#-EuOW)l|TOd!m8SS(pyy5zzCxI|Hw?{BJXRGVJ!kM?vj+f9neN*9?5v;H9hen`jCN zMb^LLSR0O?dfwiu{~fVK!cqqYRGiq{gT zsBR?=@)#?D+IX)eFm5h3oyB6c*J9~Sf74CAEXT_Ynk*Kn5X)sqxB`C^5aiiPL4R{{ zw_GNZ@hr~vWpY5GN+um4!2}87DGB1&AO^F^&D}Hxm;@57d7Z1@Pge6U2f z15#J+u&X92!OF&lRNsFa-^OzFMqcjY+DKt?>9#dYiwp=TpWWYX+U=F5L%ev_=|{&ogGg3lD( z^Xqu2yttmrYcgA{$GJlb-z&}X<|?__g*q*E)YEn4Uvv#4sEkmkp>)H4>RL-EM%&K@ zX>o#51QJ*ZI}^)Y#5tHiT@dRQ?Se@RHmU9wh?miTLMospQPOO*p_0n&ns6o%75rf< z(}lX3S*1{0_04~}Y7(#gLGYJ~GZJzt`Wz_y7eeD~f;9?Y_HbC5b9ffX=eb>-lQ4hGS{}8Vy->Z3!m3C5;UIs0 zqIUM%S^onDqsq2xBY3XoVW!$2mMQT@HqFy&S1%(NMDltbbi1nk_xnC5lIx*H2@czN zpUw>wreuS%L>*}K_DfUPl(;}!oEPP7BZVeWz8Vh0PSB2g#ca|R=C>hI^7c*8^$l?a zzaq-B3v++nvc3A!`^s;_Ey5CA^n*@Y`LGlAqBKm|O?a$1@kAn!dhIGl6Oeyik#r`q z33bOST$U3ua2-Al2Zk($LPCVd_ZMy7B$y$`s}eJ^lVoib-Za6H;8bT-jpPctz?EVk z{fkjII2^PG7o!ucaj6E{fUOC%&)vH##H68B>AHV`-IV?B+Q>V0N+@Vi-9T}56f@}H ztHpQ{8(5sMkz*GnC#bY6Ejm0MRElu_FsN*K0ug764c@I%Dw9Ef41{MxR0`=^6h*@U zv3FS!`vVgW!XZ^0ogl{lt>fj)WS3TP>z%p;Ycx;|1Xa1~%_7cHC*x)7<=w=@eql%w zWkY}aVdBy%3|nM8{PIscS&!1M(3FbWC$b$bCyNDgxEe2iGpJSCD!WGWOy!fFI#5*| z`U+2dQpNpqwU8!s5e1WLDU# zO^gBL1omOam{>A>@8`+Xgo6=eW9Py5mN{Og{0{fq8Z2Cergu^oBQHHZP+``4V_JU> zgH@q6m2{sC9r=L*E?3!$*8BOFQCdyq^LOvm(5!!++Hu5#PFYpnzff(tqB@&5b=_Ja z0+Q?@N^BWrUWqbr84sdgd7MgoXqChT^}t5NV>@_*25%JZ^vy#PTJQ7nymc-k3^`aW zk3UUAsCFc?zb|Fx$(50fPTe?C=6!$ARP&$KpeTmU36N?h@)sI|f(bpzxmhk_n{^d@ z&vZ5k4TS*(f5FjYekAF@luq&vp0ai*0)$Wr?DyjAwA{uK$D|wpC@a`&xrbJdCb0Pc z*7GV;gfMbzj;rH{!@@@92x&V^@p1v9yLBmNrt|Z3NQN0BonE>@-=Nt65`r1U3ssBb z!S+0@9ZVA_oPur(tw!vBLV%dSlk`3*0XCPRhyp1oy;@sy+qw~c_pe~$GiT&ZgaE{i zm_BqUiH?}iq>f0%b(1q0$59fuj+1ad9e*jp(TlxFv-kXv(MTaC7>}BdQKC?+;z)`Z z(S%0Lhv>~{zgp&1k=F;~n5)q*)pT`~l}*~@RS8`JD>`~UZK_GOJovqN2?T{lkOD=@ z6IjmBdK+WnM)}K9#9-BS3??i#D58m z&c5uu`5i|e;M>axBQ9k0Z!_{s#E3vb>3J7Xz4zN5-YFb{8H%ZhWK5BYrDcW9Gb@;B zHFK?2RMql8jb5Z>{*P>Cds6r1uquk`AjYHPx0uF;`*zulU5^REaRQG7F~%MxL~$2g z34>KH&X@)W#z;`oj%g0YjK!m)Rc-BB^YnGrt4bu^M6jNibgbx2>j@1=%8ZrR=Nco$ zyRjrdjUy^~J7C!^pO@2OHFFd}oeC)t3u7o?adAg+aXbHZb#;DrdbviQ1Dli*NvsC8 zH)csPI-cj#xm{|p)T%Q2dY#WQZ#$+jt&SFx|3Dc9hx*A!N0S{v8A+pRwkk5C-m#EG z+h6HswL@Cbn2B~h@9RFyrTS-Ir$t)VhIQe?cODX3S$TdZG`eU?Y6e%q^@jdyL_Eyv&;>Ydg)88Ywc{l@^6< z7!lhURzM4YMAPB00p`t9N7V=uo)b4`vTE8D>bxDDmI299!jQn-!Ce36W_@)D#(?qY z>GWwp0%M9LA~+uEw@i<+dXY}E`=uQth3S^CLy*A{!|Xm`|Kd)6EllyiRlzw-HgI5r zHdh_(GI#z*|rloLIyY0d9e7Z~5mQ z;^w1!m@bx>wtGN-*Yo@fiDqBHYyRf>UP@6Cb89z@Z2DfMMCW^fmHHCZRMZm32!aM{4O8T2bS<}rcM+iz}kG87SfnDwW+*O4R;Ytijf-HqS~)BaFrj+53_-AYyzn#1&!*WdB$ z#Lt}g-BzrBJH}u^oDN0g#N2wXEN|upsr6ZMr^SV5mXB##XAbXmpa-iJZL`k0SkLt= z@+K|npc~tKZUQZZxJfXL*AO%J!5#~OAx-%GKnpvySa=6o`XJGqEJ7g_VQ_pB(IZ`R z`^S1W+9enf-_Wp+Ob>GKF&Hc7TP}xxzsvb9N!V6@Iw`W@jH3(&&gy`q;+P;2(=DIy z?r44U`Rj-4zy@?$f#na0i&97vl+@;qu#la+#7~nKQBvAu!;EBQ8QEb@uf#PZ}}!ErcT zlRxk5V6xK|BoCW{g^W84f`AG0!7k|ls7m_DK1>FG)r6G2F7e;7*^?CtTC{!dIHYn*sF?1_0eE?{(*l2u1 z^KE+ec+Ed4XT944(Kf}&0mGxdubJB|J1O`fflU|#4qF*A~)s?1gTq{ z81w7J?S&QM9mZvZnQYh=F!-vhJk{n-@#(gvT}(9yw?imF045|$f-td524Lk3F`__! z3V<8mA%n$J0&1Em^|HXJBnaK$y2~eNtuy6QR+uz|E_wZ{ZZJg0hYfv7F@M` zQQD>sbeJ5_q_aW&X-Cn8V2JTIYAyzU^B6%1(>?*L(*>4)38I36%-9=bwXRn@v?u#$ zgU9xecnsRO8+;%nFT*m}4z585D*mo4n)I18;5jTsIi!uo31SLo3a}7thYPV;w1E7{ z8x7%tWZTL4kR%2FKPW(lC@Hh38?@i28BglEn&xTK`t)D(BI_3MeK+7B2t_}CRT2ld z9%KND2bmsJ3sjirAEQG8baaWy(+$U2I@@-rcAoUtmxyi^eg>2U;+=M^*aDf9{Ay_4Oa8XKOdoKTTXADMjxeHR(|0O5gBwG4g){OO6#l zbXPTWN9f!2`Q<0OfxDO(hWA|sKEMZ@>7;iUe+}_L7}$bT0|~gQXJB6z=^Q;>5H-xU z8yr}P!xNwG{)hF)b6^yrXqaX5ymxajWo^+Pzg?c)oPWJEC=a#;BVJ^GWwy+x?>0s{ zOL_*O$+N+%K)PW4$sl!mQup3@7>nu!vSshTZSmP3(ceSax`}R0T#uK5xFYi|j|*`O z=Z~l{>jM{e5V2KThV3N@*yTph{lrV~$~-G|7@|A6Kr+CZ4&FP)HpITm{VK$JfVX1N z%S_yIvrs{r0dy$x@Pc%IHtVz4iDv%95_grXzydKi3wGZEw6A!VFG8Av%)cA6!y0#` zT(J(;HlaTnGYa9#hNhU!!UXno1FvLsoZIUU>~1p1XjL082R-((1h*F>#Hq`6dY2@% z{W{5tE*#ghD*JRXsUW=r8A?DA#QKuUyRUx8IS@DlPa_|!(X4QPoErZn+B6e7T+m~L zMFDVV%!Vl0g=(0(&{nr>&;$+Gv=!lEsbd1$=|_9;+NQEPQY6e}!G@lD&Z^SPj6vYq zG%V$w7B^wLBL*V0SB8vJdu6S=7cQ*_wHPJnK2t$8%%)AqiTUc+;L+y1cVA=c@;ebf z;TqdzrroW(CpGQ&K4S{t?AP|!?a$sSU6ho3{&@~~QrE`?I^^DZi_?vn1x zA+h0=e)gxs58V=o%SgwxuI!s~WnEJWM!XqQ*{OV#3a!A z(O-RdLz{L3zP%^*X2l_#HaG$CuNqpOJyieq+se+=ti*$V6`~C*>|jpcMcV%n_=STu z)tzi#S8g#8`cn%B9OL9M|7mIe%c5^SiEw}P;gFu`iV<;n#>!{uED zW@-i^_K3;|O^y8z58je6vlvPq2mv;eu}UeEU{VNwo?juPL*Z-{%XdmGHbAkJTAgiq zlH4q4h9F7ZG+SOe#n})H`|mrE)SE-+Wk5e9qNwxT@ww-YJYw(6!`{2C-D2zY9%o*N zxa7hsK6^okXh=OJDPjThicj9h!HYCY(n*r<_*8_0@6zF78qbQTNYWWhNgT4l>tT`Z z#@Wt)Z^e61C_4%nXk;P)b6VFS#l%W=%`(KnYAu5acWB~Bsg4>7f4EY2NC~dQx8h>! z&n*HX*dxtCM1TZg-s$Dm$KSB`3BJAeFcMOEe{0E0j}wVxSpDw8%eQ{n!d-B{^ZVdX zhC-?uPndC5kdCN8EEJsuNh{M;N5O1wMc+_=k3s=&WcWBXvBU?(SO*ctemYuA>iH-u z98vNqN0<@MCjqb{Fv?ygSzhRn`IL&mex-uQ!8rP0M@4F$yNhHps)lM1O(yo+*b41u zI}{J1`8>|@?$1;!@&b&o>d(ARWAJ@sh10#BJ~bFlqCD4l`3%d!%QUm|>2#`B48n7N zZ8IJv!>EY!nsoq@PY4QyFzbtk!#K~=EVpX}c%s?J45kZ6gEX_5F^z^=V`|?cqu;#b zi}`$##G^Wf9^okDyl+eGgo7H0WcJSdQm+l3)!KASfV&|IC6zj`3{l1F$WG2r%H#6x z&6~63YPh_(IK%?OpDX1E!3gsvF%6u5hnQ*hG)YiDU+*c|vFa1B%S7n;jG&qcH>=~- z`Kd9bx;}D{0o&Hn{4PEDeR;ZaEQSM3X~i$302(d*y+factRpqQvnxNc3wJ0dSRoP0 zHkkz8q+7PWTD=Z^0tyo2|HIjv<;7=*K1eR9ns~h0tm+%$cwC;{xLkvwP#xrdG@(47 z1Boe!_!c$&`Jc^}dSu@armDDF*V!YkORpn!xv ze1bud44_Kt6==b6ksX+9cK~2g?r0oGBZoyPq4bj;TYZV~VB0bht)=+3`P^oEKVhx9 zUZhUH9G9CS@Wc>^ZV0Z9FP9sC*h9Zn2>MkCQ-pEQhxy!xFBfp+GVqPf*&V(x!Za2(*=8`{vDB%(q{eV83)>$rR#21LmfffCbS_ zXw4g~)Rn(J4MT+K8nO?ioO(3gO_9AgKXFAUfWuY;rvKBUwAozw`}@y-LxsQP-~+Hd zE5c93zs=sarnZt0GK-Qv;{Q5W-*-SJx$Izjl=%pTMCO`j4J7mh{`_SAQK}oPRQJSGSiZ%hHUmKbz;* z;}TF`Ez2A8{`uMptRIhm(DoYa>jec){8I9M)hw5*+wyADF^50Dig~^Y5Eg+u)O}bS z+sGJ>ufws!d)(WK9(KEPI;(&=nw($#;og*pqR%Otrw{G&9sbv>=fJ`ZQ1p9|N>@dY zYICuX`5~^(&IjhWJWrEZQJ=(j(?wCAqU%Q1Y`9GXLYr* zr`P-F3o3Op=D-JfQr3W2A0yWEgOI|!V?en=hNx_+QI{)yR|6zlTJ}1bP}oi>t^R#T zMzNiZsy-@|gJhO3CiQgy%`^CBLtwX;QiFR;je7m-zw7t!!%``K6-TA@*r z&nMAA+tO~%7>XE?{akJDDSBb#C?M)7DdRJVO|Kjmi)>b{1^Us!hiI~h&9Lg5S(EXV zc%AXpte)#i9n7712xtr0?5_0zV{@0%TaBrN9U&837I1w}Qu$==Nwf#4eRk<&oh|Hh z211(AlvM|Rh_&m3$Vk;(tJF7KlayMnRnztAM^%dGnf;^~yG~&|KuiXX-Qj_&1*M=a zg}o@Q*>4I=Cm1kYUy_*FU0cnoFYe0^ADT~um0CZv=)L`mD~_u&e|SNj}rG+{+%SMhvQvlI^x!-yU}&_8%9OTd)dcZe(+Ga%Ev{3T19& zZ(?c+GBr3LlVDjB0yj02v1T%pr&%=z>YT%K`S_8O<5@j_hph9upQpWey8lc576gi# zKn4<-AAmY7>jTBa_NuF8h=bOm4<_6pi6bd%VkrEu68C`;th(>T`QE?x2z0?7DF@;Q z$S2IZ__X)_7wlcav$q~bzL4I3bk9#7CjyC3y?5hfdw<``eD5?nIM+Nise%PD&5We|{XBk$}Dsg@OttM>0euFUB&wK3~q4Uk?s0mW%mn@d5i7 zel9O5{kZhOD9(@5!3WH!9(`eU@&Ecziki+Y5fVa5yeax zpxdgNd`-{)xwu$4#=<2EC`ctpa&CJ6#UYOnQ0jYswO*62cHn1b+z#2Hk3>MKwD9qI z$xpY`^HB&AYqwvmQzN!j^8|m)msj@=aTJ=h^0A5Gb(w&A;7XB^q#u7PXu#1=2 zR`#>fe(bUzN~H|p-yD*<0fQ)u=0JXsf#i2H(B`hoK8j@U1oLjzOAL_o%d&s7u?EJo z;m|dIPyjDKd~~FQg-Bu;s&R_$c$`m9b;`LC>Fn&{evMDdoJ9^zs^rQJ*SFWJO@YzH z-xU~lo?F)=0~^oHT~!#xko>xk0HctX&U^jZbkA0c&*h6Sg}~c|nGMinjH7_~&DdXm zbXZFy3K`pgRgGca-mQ!YldsY8>TEJ!-Y@chFQ0E*NJvPC{BSoYTn8xi*u1hnO<$%j z58943IHPQCIpEbs-Tk}UUl+^OV(Boz=ZG=cvf!mlq;e^(4abEq-2l>>@;`@x#0}s< z&;W1^;#%l8N5)DCB^W-Qu(Y1A4R0_AFQY*lP2=VAEL*Iy)$;oG$~Dts#I{Q>QS;z` z{c8E;Vs*C!>31$ib_oUKWbN3Pl)JwDb$)YwX|8U+d^(3%==R-5^Z$9ioPSzCi0;kx z$2;4hz+QcEQJH}pSkS0u;Dkc(CW0*&t1rvjjSOgeO!c}lKp614G3wtO_TV1^E8hdj zWzt_QR%QZDE?vST_y#x9rON3yZ)|{n4=&FS?sdXFe>~$U2Ch#0$5Wo6dBuv`IZuI( zhfQw|=Bs&ce!p15AjDHB>*cvCLIEr^$i~^ZqK>D7D35wk7N4aq*HT1exJAI_24K|F zXFW#5J>`d>uvMbpO+`d&ZL@|ZRpUH3*ofF`R|#r{!eXbX(H%%w@)BOb{zjUA1?aTK z@BS|Fn|w8}d=}lW#b<)SxQfPXnHFTLw5W=+OcJ%cAh0Orn?bDUlf?~GoR;N8Gt1ro zC(+Cn#deUU7u%9Wb*P4Sai)^0ycW>~Ldm9Ai?!voQf>%H&#RCJ^=Gv4nq9CS`1WuYMKK8<;gB?gTa1>5VJGdqjr+N2pCnL6 zy48!#e_tPM#8Dm(%#B&54>=fAa%Apg>L{r1Lh}$*;)PnD&c*LoK)-#r@-GoMfX1 z8TBAj)xtsT4+n6MRtHp$5vtupxhYkj*=k8_{S?&`Ssw>=f$E5)ba6ct&6MFt68gZi zyga3v+VZID8(R{`{rUkRpa?4!I-`jEuter*R^Y*OKkOXolf%spl^E8f4?W79+BoK$ zJX*$?5uG;b-=qzHG*sZ#=ugxo?i|j>eVYaFP(OJWPlstVFn5N@&xNnxs;p{ThlF(a zzJRJSkK@s72(@D_^5e*=?8V2?yCj_&jVJcG%3s^jd1?qS*V^Q$R!7Zf3&cbj?Xtij z3ScEZIZj{-Yh{-HI~u0FqBPz`(aVfqZv|dDR3I_NT)=p=eCmoNTbxXhz+4v>^iX-UQ z2}xHY>%_KyJ{19Bv@?pvg9zBgsd;KDjCRtAs%V|saJL3UmH>g3GGt9osHSr&q^=G4 zD2f1joYq zIMU^>#xahIaJHA~7)Y|%Mh6HA5#=r3Zioa6WM>e61DP5n@1!A0_YNvFWRs7u>1`R^R9uZmNRZ+H4=D>CcA91dtHAJ1=xXR*n17 zB-7A6Fn8+g4KDk`D9b9}HA;&}X!D(5D>qU>|JYbEn+)`{Veh&Uj6oL2P3Q$RR87_e zdKs&K)nXLDxP7+wQ#vkaz}N*uq7DYzfg7!Vwd3M2$d|MYZfk)Ha7zT-0+;-LZt(07 z5_BIHK{h#6qp!fs+;Z;Ga{x8*yMY=GE6pYQaLiXB!i?7=j_MnmkEm6shl2L0psi7k zZ7t@r>DXLX8CMUJ05qvaoh3)(2wpK<$T4YufF@P~zpiR4SvM5DNN1{US%Vv{Eh>sp zNd29-fYFqKjk?i~veiNX@5h|Vw>*n(iNJP%syhQ>hEoWRO;5(w?Z?kzSFlu@o9 zggI=MFbOnL0y}(9VSb{ms$-8;9mVxe?%0~DYpfz8OZ8}Ery>=Z@xaQ*^;fy3dF8u* zSh^_-t@ojdHmU7l{jJ>eR9$BI6hK%#bZ8MU=-OJ?tpyev^}}_7)c~}EEW}BOXzSaZ zbzW=mr}a*2u-D!iGDa}+Ije)(Mn=Z4MwK?OaVM~`z~73IfmFZPgYcVs5WZapns#Jh zP&GBD`bTa81!!c}`+Th!Gp}Uk;!wYTmX2DQtNj%Y!H0K!9U#Y=rj7$$DMbgRY9{2w ztc!F*uas0n;Y#tuu>k>8DXh44?R4T1unY)5bP0210W?`HMw0uj6J2$n`zQ#*TAi^L zQ5r>Nhb6TuF}2yGchchNVLBaE>z88x47hFv^TUInyFPwZAF=>b+~M2T;+t1yslY+l z4}yIfD$+>^ZJZfE_Ey~>XKP1jb#$)!P-vC&7j}Q)TVL*BvBjJ&S^7dd!i;@+<(bA* z*MV}{$;pYzw=C@|rwx;dL$mbtcW=9?7KhWv3YrlBuo_I#7O{bd{TB-Fqj!^gWGMkO zlfeTif0a{BPvbBUz2{eq#2!)!%y{gv>to0UC<=8qb=5qJp>5;EyzML&5C&VuO z;q%pXF%Mao`FSiEbSgc~gFh>($xXP5gl0gfe8YUZ3*QbHEgSdj$JzpN$)r?-RW)z@4VOiGs3wGI zf3aMZp)sVX74tk>#8MWDpB=ox`PIc`Tgcj1o|WYu;agd8WG9>L)m0D4ukO!SOwFZm?)(G*yjyJ>Y^>{-`mcoqcx??V)NSu2WdA*Ad4{pVy|9 zv&Bef%fh1hW@~d^eTv}g{lj?w>|?E@|9=aiF%W+?(TFq5%nEPop}7Jm1y zP?KU|FCv<^A&1!uFp|dcw30@Z#_b7C}Jt=RiAqA_g|Ltq8t~C zgFa2v{@3O3WRg#-tSZVWbbkq~*#6|m6M=-%-(B_=d*AKht;`{qBg#ZiQic?jb}8~e?avP=-ha<#vts(jGO0YW zztwSWcLMV%qy!b3j%0{RUhidm@x$tDb^rSHr{ #wm#Cm8->Y$60B%o}D-^6I!8 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%0DbRjDo@&^EtTq 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 QE(0J5H8Tn&B}Gq03K9OnbpQYW delta 57601 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

X@JK5 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 K3MC~)Peuw5sJ+Di diff --git a/documentation/RDS/RDS.pdf b/documentation/RDS/RDS.pdf index e14edebd28d9a61ccce81b5ac0172c2b837f2e7d..866a21370d3f372f241961d15a02af6e545cc858 100644 GIT binary patch delta 17187 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 delta 17149 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 luAV8Hh%jo*+#)F8$0VNcDp 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

f!&YRSaDw-MoM%vA9d-ZCyO+KYOg66a`haiQ&Ms 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

    2)!E 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 AjsO4v diff --git a/documentation/UsersGuide/UsersGuide.pdf b/documentation/UsersGuide/UsersGuide.pdf index adc118d3eaba0c2e369c09bdeaea5e41becf59be..3e8d93d890cc5340e390f26caa63f97f4307872d 100644 GIT binary patch delta 83398 zcmV))K#ITN)+Wr>Ca~8Flfm*Sk_-fY+PW5<^DEq@ZQwgW)!Ww4B~IeTwNnty&22k6 z{qCKd4$hsNzklT?#@IjtX`6Hn0tDL|d0ARpTUy$p-hVynU5?(_(c23tJVT_G%CrCR z0zr){O(Dni8lFle|d}1#}Tc->Au%sxzmMm zC38jM%n%kRPX~g~pbsszXizbK?JJE>glye0l?^Iw`|cji`({Xej+p4tg#&r4VES^Q_B3d(Fzk8pj&S3uB_0VyDrThbr2ajz3 zxgQ69zz6so^|&L`pzYusNprL2*U=NP`U7+h*s_sPw5^*+yzGMxQzDLQF+v`hn@C)yMT;J z_vgDm)eC9oN4O@2n(nWE^gak*|K#KTFJ3+k{D2Sec}~YWjz$Pc7!wCO8uc6;4a=R4 zc7Fnn2FHOP@Buz>G{<%{^;DD09S$4~jsrj71AHFO(THO>nquDLQ=gE45ym(CTF15| zLCcry=O+&FHya9xT|PzLcA}R zadIA~mnF$Ii_HfLsJTG}K?4Imzz6v3P0)Hzf)>UUSvfdg zdd6WoyBaEbzznJ`sxI&Weh(kutqAH!)b`^1JkG~))39QHF&=$fR*`?65~}=inVv`U z^5e8ot@uRwtjKA^6eT`u%JgC~m12C-BX2Rp$VT4sRt(`F0*ZEmb^?4Jkw>@)hz{C3 z;vW*j(r|ViUhW;lssK+AEdclc9|Wm~GH^X{PZiCw>xP1tH|2Yr+N}KaqNnTT8^Tt- z$+O8+bN5<*i;h?41tg#?XHjbe)@*T-r=whT0<{>E!r)2q`SqU5ES0kcp)x1{_yM0E zjZe3eY$V}Y9IKNoB5ODJxfxD;oqj36L*xdL8}NBlksvpM@K)lQdS`_Pc41DVG%87@nlBL9 zg}n{S34cB zjpamtn{hO|O0y)ptQ65AN*u{;>jDJ~H4H5f_<*5W48;x`MVe*l`Q8-O1d`IUOfw+~ zUrqnA-ZWRrh~ZH3EDH-w+>lIJqGF<9KXVO*&xqvw;D)W6{o49ks!wFVb~V(kV?K&T z$xSpLRAWd*QCHBGfFJOAy1LjPApAjG+^>s&?a?=A!dJ=J4wp)(A*lo}r4n6bgmBli zlo1uF4{iXb1nMl>H1GpHzwcTJB?wcpvymCy+b>8W@;#N?exZo4vn*L`3$7(6fz$`Y z*1NmxJ_}Gi(R_gq@EN8*sfh`?^tbmA1@(#WgLV4Li7A|2Z?1*yCqmy{N)H)id=n>s z!+RV{jky)HVc-LNws0WN7dWU62kxD2mujMAN2Zrk)TwObxvI*IRWspf$zeBF@hnVw zw06eD@jTc=Yqv_bXruW>I2#nvNI@avg3Jxaf!{C>QbUYyx_f%>-4|@}U^QE%<0AdZ zZJijPkQP^I0_zxgsK5*zH*`#Z5AXqhJ`WZZm6W{B=jt9qn>y$WZT8JmDI!;U7Rh36 ziWjdhCVut5Dqcn3{;r(RmGYcKHi>I#C-<96kt6Ih`X7l*QF6xBb)g1Vx9i01C9JL6o49CGzEtcZ8g{%gzVIGJ>MMqdo(_C&mYP#8$0#{_vsEk(|Y8HEQ!nFA{vhOq(DtZO$9!{?-ygj{Z}lj zBK6GL{HAPWtFh%)Ye}+yMFpZcY5`gi@Bu!+=fTUARXYV(#p3Fa{%phIXIXY#XPgM= zID9vlEKw;`G&Dru1AKtry}H}SA?i1AV(TF81bl!G@VggP>*MsP!@Fp{ z$fZH2*?YGnjg{m-k-%UZ3J= zqcs2@;P-p6ZM9Icz9h1vzbooxUSJ3}+*6VW#k@bik3N5;-ZyvXy+?`CzV}aY;&)Fn zO|;1``^#I5K91hmQ737oGo`r6w^Cz_*IRCGCcu`oRj#b=a+p&e5&vH)B0lGd1`Am1(QVk zYpJ2TPwfA6t1B*(0Zz5~rjnTDQcK11&n&ha zEi$8#Q%o#>V0TeJTc+78T@8k)Z1g6ZTwf*ge4MA*-2J76rD!zCv-4y*xX<4@hq~dA zf1F2Bu?tuFTBCr4OUdaFm7_ByQ1c zl9QK-Cw+*yv5f&Bd2m3k32K}9YLPfxf0rBFDKiAGJpTvP^TRZ2;ayp(=cHSiqL&ygxhR( z)?i#D@Mg0!LT=-&O~3SbQhMa&@u_D3h+NplLy+0z-1m3~>11JP!z>GTVZbNg6Y%@1e=M(_!}6F+ zu9vIyCULP9jc<~An;Qfcr|tkcQ--j06Q*pyC*b$eDA7D;!}_GsbEH>`Sw)AZAI8PW zS`ZF~gb|Rh^}?dyVv~AU6n%1Bys@U#6R0o>ds7ZDZndvZYl}Lq-x(Z#&B@sXXOjeR$;G7k+e9abCUl}CMNG3v^M3MrdRlGs zs>thSGb)nlqiV5RXJwN%c~!zKi4!(GTQt=?+dliY`344*!GH`#WJ1GqcC0rP6W=SG zmLU$awtX<+k&!r3Dj0^s2bctX032#o|`lXo9~PhNkEC-33E zZzdQCsV4unJwHx3kw_-yxxY{9lfRr`PaKStoIqcA8osHX{0#T^?`=I11(^^68&y1{ zB4sF{%2RRsjN)l_o;RM5Z!ngw^&($nWu4hgbhGdM?h%X=BxN$0QGztlE!_m}XseJ= zM4GM&QPR;?Jex^6rT)8rC34>xXhBudlbN!}h!mN9`aY+2tOxMTrpUG*M;J^65?BNr zhOHCD?_1ZlDCSd;bAi{doTNOCaDxbiwC-rjEDu7ixI6CK@t?<3(8vkzIn)a0>1vzT zO`ewSau!*ENRYM)WFI}8^vr&v$fPrdB`D)$2FjDbuN@$^NdX3bq7zH*#mvnU5n@m~ zd5jFV(tEf-!hyErUT*JO*R~j*K27J_JS&`*JdH`56yOayxjYN>QO1N=Ax3W@#GT@g z8{ZkD6e%XWnu*p>MAeM4p_)-|NtC}9Ua=zFlCWXWfUOpac+ij}M+FTmu5=nDipI50j%nR( zrsJco5!8GTmT*TD5yROKY9;DUl^swzXWp36QIJd}Qd-@A>;E6DmEh^0vb2ONfzzD_ zj;Aq^fncADAUz_SD!QnpRm-usZpHwYF+g=Q26_X-IE`3=`(;>-B@IC4xcst719o%L zfFn#h!9P!%)DUZ))_(0KB?STGbWv?gZspZBU#^-D?!Sjo4dxJR>fyFpSaFze0tC)Q zB;#a1vE^cah!u69ry`aQ8``eJG}iv0U<-S?rRDi>>n^EOWIz-D&#pYrwyxPYCd+A) zZP&HCS6!G%CNnB2g4u`0);tg)n?^K%O9p>E4Lm{&Kta5b^a;Jf<+q&NO9hNCK-`&< z(+XzXx@J>VMeUlY+m*Rc`^=3jPf4UDjXA5C{XUIG7WXjnWM;qSS}V!alfAzK^{vVSj0zx)s0z44k9Vo9(IA?%2@Q>@*3iUACP@K z5iY{%%i~}X(M+MqJ?q1XXPz7{orPfKto>SUfZY2&jhqRcPBROijBw%Fv0WUfB;^Y;_i z*qX``1Q*~wBz1z#ks{srA3lBh>Cb0pAO7+2JM`U;-=iPi{_^SVCuqO__3S_Ieth@g z*Rw&{>cDL#h>|eCBCQ_Wy1uqwT!T1&k--GuzD&F*e0hyJhv{~Uss;o#To-(SjY1lB zHt252D|9$MmqVY^7A%LW5J>FBWRam5qAaXg;@C)r=khiq$#6~Z;qX!Li3#LPf>l)} z;|oHpb!%kWB5wQJi(wLa7H|-}6MAWmnxj*YwzNy`9Z=A_=Syc11a5sk*oJZ5dP^~&nc|W7=TyC*oY8+*|Q^eB16QW znYNpa-htI~AL7Bz%vl<9D=po1UY6FkU#3l7F5Q1Eh0F~f!~?y>UR`fpor4KB&rr=; zWrD`JiCS0H!e184YMVE!wU_6_MCHw@+AUYEL*Dq`+WiirQgg>er4foKffUuZjYf$= zS|o?L0t4}M>n32jy4u-)H7xw~0`}=zS9wu*f+WoP$p%J#TU@3va!8BpX6W^^A14S*eirr{IdEGmvV3MGd)=JiZaX|&a> zVCg)^22gP76NmuJx8BFY>bDoxth5O5GIu_v?NWiW7-F*c@@E`>kdyMum)CkW*Yk$u z^Vappd=4{V6Tivje7?tFeNwA)iz3-KL)TG70HDPBfU7JDm^kJ~lSPh_D7&g(t z$-uit_YYta#FvucM%iv-53UCV_{KbWVhZWPyu2k;olUIrZF9tG)tE)*PpWYe zyEcZ(y@H)*o2)!>8WaDW7 zV@LaJ)K@GN(7R3p#M3CI#Nzv`(o0XGdDb4z7<$-$R!>JDXrDAlz^SpJ`S=}!*$(!^ z=*$RGy$wJ5NFqhJ7YpxR-DHb&)9gC0W8;Bxxl5M;Tz(o&WorNyWEgHnPYxUBlkA@| zlY_bk;YW$=!+7ST*V-VLU|!L<6||=inM$498rRt)c0%%)*!pN6BHjbnmHR{7J9hA3r|qJ-_LEy{HU3o6H9A^SUza4tBI1;|IkI>je2<92HB3$D{}i zOk33akG>5wO}w+RJ!3fSurFB7(JSOy7)#MU}Epl3qI!GQ_ik19ps_$!k+ z;kn#fDZgUX=}4s*gvpTX>gvj*lIv<=h*spA$jl}MjOCG2%Zu%GYQX@h41l?F(ILnF z3%{b%rIP_r6O*B>nfv+r@ReuiComZkAkSix+Ki*xIJg`>JhVO4Cd%e_j`TyR!S6 z@A|Jnpq>a6AW^6kj`OnKamvD~>9K-HICWSx2@eP4XYV@~1>HO?2k={g`wY-(1kCaTH4!0|ktn zT89ggaf4Ukwzhd^@xq|!e`LATMA7VA^|??*RB9%=>zF7(xR`2BW0Ewk|j$45@|$fu*k%dnh0;qr^@GmG_8gW1IjMz-6kJYNR|quQVDlpBvUHD za+5b}8`ihC_}Om;3HuvP7kJHgRB(@w!L=vI0;w%&RA8 zSsJ({8{ndkK#!a#Ny^M)a9Os9RlI|@%)ffubk&G6kb0JMK(`p4?HJyS zzP`t2+iE>TVTlV4O$n37C>?*>91iKijq(PM>-x&U&&{nY1~gBh#!^0y=tF1A?gY3_ zEl_<`)&2dAq>sChagwIzxmrfeEK>E9Tic1O*m3Hwc~xI(NhmOcB{!hDnipWd|4ppUD-POB>u`UZF-Rl+H146E zD~Wy9)j-|SOwWnO|5KKivzUQ|6S5`e!9lyWtNM0-j}LGCWV?;PgE^MNM&JMb@1NuN zpkhpxeH)X*AQVS2A3nxl#tg}Xm~rDJ7c|tz@$Lg0;Nl@wgl}Do38t_e)@wo2#bt*N z^I=EhSQ1khz0AOwip_tc_nU)l3LDOcWAB`N#up`;Y3IHT7KK4sb^X3t9ReYMg}c1? zXTGkQH7+<7GI)l{!0Z}}o?Cuc)m4GBsABF)vuYcc1Kli85!-eC$~4?nkH(%?!xR5L zG0_O7&l1fSSNRv#?qb=%o)XwF@iLOT8D-?i@Go!7Lf)i-=v{w#3WRg#)t0Bk2=$!G zeH~HM5UEB*%e>E5V-6bW+RMo48X{OctJcd0Nu1*#>PTB{pI5alCzfpwz1;_#x{DPX zWSaw<$^((wSz8`$V=A!!T9Ky6*(psTir8ne1vkT;FZ zYoBP`Q@?eO<7EtYpe8?}6Qc>6vX`NeiX?YQ+Ua4xRdIwVP7F!@BH7LU!-&gCMjR%wJwz<4oPIq0YH91nD))=1%DD8<5mj z-vaG^iUof&D$W|yFK%!AdkkU30>Z1WfKzn%_2BI#3>1GG>3232q^t$VZr4v3=@c0JRFX%IV6=jR_{g+oBP zFlY37DhTo#l*^MYl>GYNr?BjJ8J5s}%D+z)=6`7w4hdBN&HRUWO>k6g9gBx82HlRF z-aUVDjMjZ(L6p!jY+4Tym~$^i5Boh7$0p3Y05*B$-_^PvMM2O=j4`%oaYdKE32V1) z8Ad}?K9oJN$8hiTM6h}~1-O!g%h5Id{bU3hDanp+8u4sNm5kbXJ^-pbAt;b|z!1r^b zl$g9uD|pou^`XS}Y}$vQir&s)WdU|NFGjInU%o$NZ*1g8fTJv#vVJ4GyVN82$BM2%1-OLeUJ!(iv`Z^*$W8z zj0igJjcspqBselyC?S#kgd&5PVMr^6dBl!*qRQ#yu)Ye?wXBR93JSg^jb!Th<|} zj{?YQTt;993spow19P~(^sp>HR*!N@MCG`8z|<(crf7Nt_)Y>VagHM<(J;c4>Rlrl zqZ%U-#KB6S&fBP7Kdg>349?^20UiLuM-Cx{U8FWh8JJ?sL&dpG8X`2J1Pv+J4E8C7 zesG+ls&8kBe;*Y2dNp9AKS`=Dars((9VhAH*bn`5mc&IeE%`KLOm6jz(?z`6`0+BH zyo-;Um1(7UTB^vG%Tj?F3^~z#GZ3bqudBn@G|T*O9&aizW($S`u_$Y3O&`LQm~hcJ zf9iGR+0;i88gfQ4l?sdk-jK%2{gSK-A9@gtv&17ke%&b95AG*wQFf z@=XfN!5P)2f85{S{yZA}{`K-2UtQiR{ON9V`|ZQ%;^yx1=IZk6h+)#AVjBQ85=T)G zxT+-_ED9re$h5(VFc<)RjMxp3R%&2aaoX4j++avQhDT)ji?uCgNtSsB3Wb(&2} zSGw<8f42B#lYCL6h4mlPO4o9oWqt*`ID(W%08j=@##DI(POuZ;NiZuuI zURmZvYI8@lO8LU?y;?68PwYvV0oOMP@8aS^$DXi0!WxJ%goI*%D5Y%b(@3(a{eh@} zm=cwg^isn(tvIwbntNONqx=7pbqWZQqM=vde^C=0gkr(LofOW`WIKzunG;kREVq80 z%;R@HkRRD(=$HKST@FB+yI)6jfmqd=hGl9`sZ!WPGGM%%#LIY`CEj|Ie7;OGAHREX za0aDAS3uMrAYFmH9~z67>GUT)!u#UyUp3^?`D$ZlzD(^_e2NJZVWsY{qQDV-kT-S| ze=*21Va3;v8dWG9nP*@c=Q*T?m!w~oj-B0poo8KO6`PXgzTxO|3HHt}TQW9OU@`LMi+62+|<&UkDJl$!zfB&y6Jtz~%LYnp{{sTFcG-0t9Mw`bub#6ct#vqw z(>kz&+X%cCo5CjZ2aR>tRo6B4P(uF3O}D=OYq*|KRb5;qGe|JF4^|hoH;rw#Vvfo* zG;I?dTN$X{x+x>1`#x_>5Mrt$HpC=sBm$Rco*z6;h11hh7am1EaYoBJOPrQiZ`=9r z+*%zyXzJQs4}*(5+s*Z%$NmCAIN6|+0Z#D;&xXS2FIPnR!#tX~758~`#vWJ1Gq4(lDoq!~4wmLU$awqr2i0VIx; z8o*Ha!xruxCD;x>N$ZnePY4Xb5$PBa8VSOp4_{8+{)nTG@a}blk&r6-!;SnBaUzj4 z_Wyp4s*}H+;Gu8?i3kA(6dy{5GGwUoq&&}VUQisT^G1I>+0xyDK$f@u5r4r=?4PCq zzHoF(G)P;wtWg$_5Ji%amVJ;r$1E-#=p5t@w=}Lx|G3H)S9#W8m;r{8$Y9fgg!CYg zFuWZwOX}1k)|aWD;<{YEY39D@UpXA0-ykEYv^Yi~qD2ez;locMjtEk`n=C7;I?3~N z>9l{!ndyILt;&_-be8rn&sSMK_ar36+>dK88q0Ll4a6RuQp^#S4CGCa5u%y63P{Qz z&DGw5Y778~lQ6B)pmAwp&;}zw{AxB!tLkEv=ePC=iD%{FD$7&<`e_HQkWj=)k1&CV z?0n|z#i^t*?M!DdkRZ`3bYwaGAd0N@j<8;aurPlDub+YyGE;>ZYv13NE6?y^Rn?x` zi!#qkE3Iq)CTpIj_SsD`t3gH_#{)@THgf7T>Hn|tzy6`s_z&&4(!Xi!()yNg0qB%4 z#6V|`w99e<<0&Qae9d1eb*61!Is3C0tIE2VedVk!D_;5MmU{aX$i+ojLkQRiLsT=Q zHHm*DgbpRv!w@sN3queC6zhV}5CM$VB7paDvJ(P^GenqdFkArBYT%YsD@3IMYA_BkcLRVn{iMKR$GP52&f$L%#iA5*6@Eq0*5rE=~qm<$vi;F-4J8u1L772VLGB4 zESz|!WLU>%Mc%kd=OTTG_AfTvio`{l&Z{O6OArm!<3MaZmkJf1r~Y@56syDqO?x-< zcuDOOt&Gp@ee=?j0TB6aETgf9iL7MG!I9u{4 zBLfa_PZ%8PDM=NQTHhHw4A(Tp_R;#W&^ZY|Y)3W$mQAj=82N?DDJP zO}tnYbMGxCewEdMv`8o0WPCv%|ZsQMQDKm1wvo6+9gK7eL2!Z z4OS}h#v)f;1z&oV7W1U2{p}MMtGA1KGJTt30tmwNVWK_|!-^VA6Ba>t zu>v|}oK6i)f@vfv^|F7N6|0*ztDBg;47m#MqsYKjRB+M8F`u@}AmNV(pzLZ%cPp>+ zEsifKNSQZ|uMglx-VZlyOALPjZlGwplN;jpO}-g!cIjq6)rfISUSsBYI`=y)$rgGb zKwx@r6e%CccZqj8MTcn|NTMK|5lPRRh4>TpEVSJR6)=-M0e)-l(Jj~3)N2X&arijQ zW--!ZWvHx}`~8$EG&e;;A0a3ns0<2anHnqOarih)84L+74pGNmHYI;=w(w#rXr}ko z3c1tOF%-@G8)9cl<_)ebj#8hri;Gc#a^zaRO#(8_L%;&zfr$5Tj=u&ygYv1KVQHgj zo+g#umzV4^S#}%Y%I#U$i+7mux-4_}m0N6&fYHe{+j}UPR(Vy<0@y-B4KAh>EjRZl z4{$A5l6>z12^pHPdy0RLW@roq%gBSS#5=)W%z};w3o^kTPa;@@=ZnWNwTs!k@iE$B zc^Ec^1!VipD&RJdSEZPeC7o!ppzG+7r7(-O#Sw}9=t7U+K-hikc}NF3s+^O>JOD-& zVteO9eFU$B+KT9h&4^ELUtMQ~ldi0l8dlw(pFlvz;1U1>u{ecIav{f16?k2rTGfsyYzEsY=++H!)RJp)V6m zVh8zM?d6B}NA7_VCP#10)Y-z%)r9EM!LxiZ^|7Ym^iFi-(imRZw*vr$Ch_3wXb=l-je`wypG+cJr7>&wzs zJ!DIV$wr&>pd#C=O?sBE=8ZY^?P4ajb;_3N&;S2url(~Q=ny8hv4`y4BK*qRwr@?| zL}La?toKICw+a4KYDCvRt~@JeeU1vsA($VIVM<-T7}}DJxP!l8ygko~y)0}8M4p}R zhR}CHWZr*})|+Y8zhGc638VJNX?j>%+rs(Ew_3f1g3s2^6Sj#N5qqBfa zr*g1`JYx@a?5(D%O}X}FUfxA10Rs|}PbD?A;YMB7i+ukz%XB~3i0l@E;KQ=RS75XV z2G)IwN5o(xxkLE%1PS-D`Eif9cGt}hJUYw1kZ6DY3m}aejTzDutd4?oVX`%P3_R+^ zqM#V%ISU#p*!O$OSQ82_v$(ub@Wx8eY^3%_s-v8$ls{ZxZ0+m zL8A5j+ESDF$;uwH&^UHI%)Z28%EZa&2CC`i>W3uDlk+?%1A##;U2$Fg{{HuWf7oQ6 ziQ&N%>*i@P_vqzC0G2an2rcRsk&aRAv7dhcfskO@5%W(!{r7VK1|vcz5O>OK3{z{8 zZuB33w@u(;NTo}*Nzr88S-F6;)*hb|#-BG4?!42Y-`!p#!Gn${*eZMu)ojP#+_u$A z9T%mowWVs#aM?%a=`2}Q{h74h8|>V>oC`_mlKhP4B{1UHu0OJlJdM$Dn`y z2w3f@dQ-F~gerXPdI;yEF=eI?&$Y$LEiBK+Ve?#5+f|U4pfr?P$~g8lR+*hf6ZBK zZ`;Tb{_bC)Cf9>poL2k7U6Kb}QA(n0rZlM&srZcKKG>3CJCP%uEH}-U`|X|OEMK!u zY%~QLASSsS&g{zSS{OFG(1|+n{s)I<6NG5vAyQ4S1)7}c+ zz3NdSmD~GNP~P<%rik+Ocbi^z^y?9ADo3&&V{ic1X=;ZH;&T_b@?sIif0HOVLG4t! z`tpplH((xU)x+<8jOJMm9|_ve@^FTCg_7Z#r*P$dKT5JZh-0&O8sg1te#~h<#J|5T zqAbe8478?>2ZFKw%f%dDC3$>t>`+uFe5v|r0xMcqsHXjO4{zotN4+-%ZywB|$=}3~ z6lA3?&?*YW|0ToC)ugSxe}`K3>ok6iN`aMWkmaRO3pFs}ONnZTrl`1!bb&WvGENss z4yP*~$LZM&Tx}G^QGS6-c>Ht}hi92N8myvrGz0ziw_u#(;^wfchr7Ga z|JbZ|A1;6X^Y6z4MQQ);!|HaAw}TyC{~Rv2``hj2_I|+0zlZnxwDs6@pDl{GHJ=yzgwSvJhf9e| zMVZmGBECEfr;sq5k_Ls%Qiyku_m&F&6h|Czj}gY5@8pXAf4vJn-#6N>cMrbz>C>md z{dP$w4N?X@pfa)@1*cE>;qPHN-fhkmp0I7B&>5p3m466se2Nf6f#R_CXYt`m6s zmQrOr5A*wzP3cg=UHP~rLAyqIWO%jR9_|kik;CQkitIic!wz=)?fdoe@JpEp1`Hyt z|CR~N&zwoZe|*t4aQ#)OWaL(TMZ5HOmmk)@ycoQ9knr~7{o!)6c~KA#+A`Gt^Ep=A zWht;c68rK1lu0_Ul7+LN@I_2Ju!3(OlZ5kWIzPk3 zz)oGcQU%MremXT0P7T9J7rJ>++Qz{mD_P_v9h!+je+hG(wnmb)AaeWJVm3?X#e*_i zb%7mTPr@WDw>LqO^C&;XmjPbN1H^F{BS{e=2FEx~Ul^w6hN&sqNNZvUmTQbuJmBlV z634>fgnIJHfsFV}A2kn7j9B20sk|AMk^$fHEA8?YkAMP3T9T^OfI8(= zwTwf6a5$W#a3lJEE&l#wf%H(`sFV#*uPi%(y@I|BO{uMMoF-ud{Z;VsY*7NaM#5cW z6+pKaV~ABEShbVY`d^3bc5}ZzaLb021WSs#e_MHK8HR!{3J>@W$@`J?^+?jI&okiN zZ0182oXt9YjFWU1cB0ju7lc ze>|5hhlX+vfqu1ZUqrXADiUNI7HPqiedt1STn9CL>GIIaI<8+z1240~PwCXwTqI+i zSpsOqqQYz-WgH|ZWMnoGjK^V?6};y>V7KBcy6FxJ zbf?~MoNxQ8(Nz#ruta`1tLSP$ zD5$io*249}t!=+P@jS2Lj;ubtWX*_WN)eAku7Sw)d~TamR8`{#Q+3Q{U*P_e@u@|v zof*bc^qO?Uy|k4NXi(}n8y4k*SK@0ru!N+Z)v7fShdbHk^^=Vkv|oxnfmaogf5H+) zpyoPcpWnkZrZZYc=O!zTDjSs95wTL(9Dsyb;r^ZK)4@Cg7ch_88AFt_nC3^VAs~^p z{TzGusw;Ozb9Z@vSnq9N>w^NT!CrkVJhQ_gK|q{9h7dl3^aaob^0$8C=rH;QAZ@5K znI-`wHj2%<8SEflbeXT4xeUpoe>M-+2e5!Eiy|}WyOG|@1%^750>wM+$RwNwi?|#L zbt~C4jmw!(+r5KPis4i@c=JV(HnT4#M_pT?-oLl0fSszd20(%J#%3u&xOmJ^!gVV{ zNzqRW-Mx;|MHXM+Qp0xegnEaY%68Jx)#)tC4aF2^cxN5@Ntuh%nNIG;e>wm}nb*$4 zP~*?g@(y+T&M|Z^I(9s-kKK&tVmAW|H6rj#PXyOTU?5ar&r#oYYf!sa6)kWs6T`mL zy;CKi*hcLsn0n!z)&$Op;NcYlR-g=~IQ499ujL?|3POedtp-Lk8yGBQfIp~m+bYEI z#M8hlXT}5#0Qih?UgdOOe;XYA@8IuaP}eYBt*;)gtt}ArNsM(O@`ZL)4}ijXm6L@h z!D2ygU?xn#g3c44<@{B3C1A63#;Cy^?Vh8j`|+8ge8! zdX7;wS&T#LtUYN?)63FgAX;nAY0_+Ce*Or~(h_8WU7iOBR4Ggqf0$^I#L+(s?Zg*l z^Q+7+2_g0j%Ak2w%n#s#Q`#Uqt=?J!8gQUrqk-kMtw1xE_(F71KEz{&oFgMY%3AWN z1ur;WGeG?Ud^qiH7!e7vWfe+TJ!j0u^JtdWyQ%awk4{d_j_O1r%?w7rUnCYy3^?q~ z<-F|?*Q={~De^C8E^3<#WXia=&?EGoF|4`-)*hg`*`+T_Bel$5`yI+&v;9pCY z?N>hOKxfUK^CMsR%V%vmU?l-DI~+pZ0A?F(g#L>@3pG;vPnmVk^T^mkf*_~il&(l$ ze&we-9mwbBKqs?wtb;XUJ&mALw>GW0L_; z6qDXr76CSsK`ttjA6f~2Y1*lL7eRRPk(u5cEzuSmT69DzK2Ot06-7-vu_IS7i3vgA0{i~$LbUg~M|&p+N7cdbSc+auWFS?q`mq-wn zieNiU>p7>)u4->9h=g71HIzvYB}u}tMTWzFisYViMsfK;S{?j!z+egOF~^9Ch+?9* zygvBud)j*i-+kMoL(|I;K(9%yG^64epS)ikO;SSwL=lrX;Chcx5$=rX z<$Arnef;?5{q39eJCng%Du2#fsE3jwv5>oJ!@pAh6&`LmCsOeayFMReBy60pOw&^< z%K0=o$}MkIfp7K(LMkvH4pzoUtdx1@yqG;fp+x=jteW5`v{Hd7A1^^jgm8L@TWmb1 zio!rx4vFWyJSL%&)Dd`Co{o2S_o*U?h?LRCRRQvoVdHC{@xYK5g?}M_QOwQ6Bzcxv zZVNM$P0K3Db2E8VnBzpoD2-4~&CIcm6ovidJ1!V8p@H~B(+U4|)9DHsVr3(&=Tztr z;bLU{1cM7(1~&0@tef;}hU`tB-H|x!<8C|~H-Y%}L z%m-tmdiZDKmps&lM}NB(_hFLT)zxZg$JV=BSHG?|Z@0b}jgk^pIDy$$YCnPekSC>08r6AW zr?P2kvu~B=c_)u_6wIiAFcaL{wk>VD9RyK3QJ?7!-<4c_rho4Wu+`Anbju0uU`%ib z!ScTsKD$1^NgO+($#iT(Y~0=$P!4r#rbXpD9N-Mf{7gGhmltJ~p6Xy@0xhI*&Slp~ z!C0nd`I(_IN_Fgm2^;&`Bu~<5I?G1pLlc?ohuM6D_@%73)QAH%6PVF8ppalJZ~z{X zD6$8j$>>RPl7CH43>}9M_nD?$AYxubEF=W$my=?ik8w=3%=Dzr;rmGpVjI9VXEV#? zOP`2CP;VDVLaH*1rb(^1cBqn!FeO^K@pgN=S=@p|Rk46&tj z-i81f&u>+Nf1YLI)Ut=ph2Lu3Dyv(e2#a@gJI|8}6n`fn9VGZbzdXZtAO$1IH1}{3 zhJ-2yFBU)Fu5Z`tE6sJ)MEg=jop49F4vpQ<@)M!JK*HE;dZmc89g!ddW`^gZ+Q(f zZjGT%502(pK5k+XmMaV*V&`BY&rYgIeqr7y=2bGTW71hST8yA>+_yL;0>T*rq zZQKZXHZ6Y-pPxgO9XRcMrSZ-e{-8nc7c?GdT0Ydo1PK~2{xMPRC-RWN`(ZbeBUmen zC(b$NXEija;oyT-AA&{@k2F^hSKUb-wL_+g+UsEZXrK8GEdk88%P|cZQ3Mb5->N-^YtHi~eP)`c#ng09@z{uYGL(!(nF8wYvM^d0p;dSiF$9RF&Le~j zSGUXI&1S7J{j1^PYWZUI?icd+?VCr-?VEpi6PF;o6}=D^?RR7c3KCNg?SS~B6fM7n ztvkgpVC$xV33{ruWs897=!;KZC{q9}X!wb-EV_@P{?oB6gqq`jZVe;9sNphA%?E9+ zIGE~+=WljRnd(9n^AH;e>;tBT*){8p*9TAGlTu?t0aBBeW1xRxh;oN`wfY77 zx!ct(-#>1EHH-&cr8e*aQc{wc@&R|ORf(slw7hXPPv+Cn#LOnP%@>1}1hUJs!DQ#Q z=7BJt+t`kG50h*(*~!+U#9b%VWl+|notDK?{X31ltm9TF$Vv^4$*Kke)E$ds7isp$ zOYF5Zpo>zuzX4*w=K6oTK7AAElanNK95hUq$%RLO5huJsjK2@b%fYt{ z1r&Hn#ND$mt}Yi_6Q!4Y^Uc>y(Ej4{qV^YGcaG-!DG=6A5F}ym@k^lk=TR-liy=Ag zNlqB!H9p=)#*#>SFNjb5zjumbZ=`A?F-c|1ctTM;{4fAMKR?HANLh@~*7EGkvva6O z*xVw2;?}|OY`1~i`5hS4D`C(o7wnI=S{nN&SQ+E*lkuVxlc!}C0ya69;lKwff8TT4 zHWGf-N-PMY# zZ26D2IPS{E=C*1Z=+ZP3%h!c%f7j*V>U;YJ1nQAM0TP8uVL31Bj#Cy!jh7Wf!m9lk z%H)hBNsJkZ;qaqQ+#P4s4PTUY@!NvI5Sp;K5tS0fMDpXu#ryAR@&UfRNhnd;B>(p# zKPHlCqBA$|m!w;~UC>}0N{mimEX;;~o+iIT|9Rgb7*Vl=G1#b)V=Hn&e==_7toRaa z=eMZLc%n9hDc$cfSZXTUkW@x<-W(5CoGyD`fZ#hyb(oe;By*C1$)o+am=i9DQCUBz zsce;l#wgucxHnC*Vv-Rf&#RiwmQ7c^^KMC2A|ojWe?NmAGo?^zkZnP2 zVHD^O1APlOAdFs~4wbd|qCg%#UqV!i@RL_7N#!zcHux>CcWq~}T{^Abm4{oqt(qGY zSk_%Rl}6_bpQa?E5k)fZM(O|WsG`si!M9|_E8Gyn*$9F(3^f!4=xo`BEuv>!)0^-i zO$>miG|yCICEPyDf7IetW6Q&JUW6z*h3By=H`ubL78|?LZre?FM+KjREUc1^R$=ZG zI=5zkP-=?1<2jSuK$M6U`ldbLf?Zi(!%S7QkQ1t=S7_I6j&<4L1|g1N9nCR{I0v+k z5%8b;`_F%T`|YoP{qf)XPc!yN0d4ijFLVd1)VH`w)yym)e-+_Fg#G!;=l^~F;nxo{ zq9tJI#OKWW{R?JW2`T~h(_lFLT*FBY$G@&!Lqt>g-gWMM>iQj|yDoodE>9WbDd7Vg zsQ`fw0-*-0WKRLFmtNKje_n}i|8p*I7-3vaa`#GV<-<0?f2y&e^_F33=(XM9S#++2XN3GIYcO?!44vu224=}RkI25rrB9;ooq!BmBkcU zKzuVDfcNdO!iHl$9e(MK#n!dVGVgn~A=hp2{rcDx4qLtt-+1nAj6TmtE zwpjkWWKC6*JJ&|*aG4&w>%P5E$Whjv{@Ho<1OpT7C z0Kb!gf1^;yST14(oc#$$?xEN_V~|a?w`_363KJmAb&1_QF~dM(GbP-v%dtrJM1Ry6 zTS99eDwE0aMB(cT8j&Gt0xW{)A?hc{5C6voaxO$PlM>;L5+V4LB4aQC(C#z_ z#=2@Yz&$!t5E+hJHc&L^n_!yj=-NR=_;QQAyJ}YzAwgxsYCvrvqM4qW%7chBz~fp- zskiuoo#}Gl0=HY&<)!K=M8dFb^gB!(`yE~*e?V&rAT~~A_bE;}KWA?F{l2cspqLF4 zf7Y!drB16lZ*GqH4QBad6;zq*Dlk|F6ftSuWvVf2u;Q_Fb&i&iNh%s1o99i^Ul5smVzmsyBG) zG0wHS;!y2v7s69G^zZgi*5Ow;Rn=jR{3+$l6qX@B-hcXOE>m$r2W5Or{ToV(m|P%X z@#QyOwRYF1te(=klodRXgEo>)jv2h}TZjj2dOU*XyUH(ex{@?-7%rvTMch6NfAYmU zJewAun`-8of@$U21DrBGTLiki)$b1%X^OB;Bns{YQO|DzDl-qbr)uN-=mQ6fL9w4o z_PmpIDGo|NDbhzv!=nQVyEK8WNfi`CXGJ9L3yYY;+^Twf-$SXKS(g#PW8w-oD-XmP zhgi#=Wsz_kT#+@PJL)}jBbw#Af6$770_|;CJ5t+&8c+^KjBwn__>c^@L$i)FM5gS~ zL3?={)L%Dk+NO*Z)3jjhZ0;fVvR)jYYH%oIcX3uQKJGGaisi}smEw9SfGa{ox)Oh4 zLt7TxrmfqX+YpNSi)u+A0OmrgxroD&U(xDSn{QAjA%jjr`D+qjwk38ye-Lw=LiS_N zMsvBm_DOMAS1xa=cOC^mg^^kOCr`m9gC7VZFb42p_0&KDfn8~xe=f7}+&!z3L;!Vu z!ZmB3LWkl8L@CI#k`u-_sxo&ACyAu&DHnQl{xUfm6~q0V>6yPI9T&DnwEiM8?EUwj z6Kov(@$vUEr<23yt}UF=A?j*Bv$9eC;`C`t>+8dp!T_=%kPbe|IqckHe*;lzSC^CV zq7$u=*W691mRLf7rJ$)RTW5Gm@gw}2umv0B?oEqQafZc+5I z-fVzP+$Jg7#o_+<8$Kja7L)i@;67|bOVrG8=EvbYv^cm9aBy~TQXL$hhAfCtC_)}o z9|9R88q**W6fwzy>V5FT;j3bn7vsD<8c-e|ep#gRNj9yLDt|Aga7*Br9UiAuagxoB zeyqL)g2ExlfFk1(*lAktC?*rXOV0!LJ7d zrr>}y3*i!R!h);YgCBmx!Fzc2ZGaIMQSiH-c^ia8AQ7wgJ_Y5$_XpTj4krO2uz)CZ zwL=+-X=FtCDu17ql~E0=lC$g`X7p&lC^-y|M0}W~qiHcN&MxhgY@DT9bA2UH6ml92 zhy>M3Lp&U1=DmEHS9vnd|5d9U?w!w$C_XIGthA=7O*AZ~_O%l=!?MoQ_@C-emd>ku zdZzVkshew|DGsw)`>3iVI4#EGLOs5KSFQB1YeF0%%74PzLOv^V#N%ed7&Jw234e%I z*;5t-(;yu4RSU9MwiaXr2@s~X;NEG301puf6o>LT8ZevbIfg_HpjH7fM?%OzNI)Q{ zO6%dc)_Gq8gcoyezA1 zV#irkJ&&U8q>)Mov7n-ZB3GQ_#pBiS)$;yk`RV3?9zQOwKHe?S)$;DcGuYZ#m_9Cm zM2P8b*xHeX##Sg1<$N#L;si<1PII_EgRSkjdVjIya&53RFPlK3bG}HB)QJ&r=s98F zsHVK0V^71gadDE2*Tw2~tMg;kUEY`f85NW4zsIPD*IzzAgVv43=_3tDU@mq;>y9)u zS{aCmUpo-POHLFNSY6h3dw_^kD`h zB7d?QQa2{yvA2$7MF5!%YRp}fS?RMgLz2-Af?j3j7#~jNI%$wi6tDig&4=~#VmiJw z&rK{3x85eRJUP)}vx?2*$j0XIXqrsys5mumHIJ$`0SU26t;EqFB<%37NjkDq+ZiBz zFyJ9#5u_mm#o&3g*cbVDY{;!hYi_1ZI)CG;Mu0_VytZo2=9+Y!-vHTDNJsSGq^L$K z%PKD?Cy#_+)0zNhCXH1yl~qwuSZA=40xh*W4M!;%WyuKSiD0dt@HnmE@0Pb zn5Y>f1g90+=hh*7rLoy$)yd?%*?*WSX)c<>!DB~oRfIMG8vrPng$DCM10n#)*MJ6J zg@#)^5#XknTZB6`Sz~Kyv0_XO?yf#_BU;O?2^W(?mol6HaC`9-K9oeO$ZGTKaB(91p z3Z29}GH2SS<@IMn`XA=oIpaO%Rq!E(RE|z8B z3WsYKgI?8slSeLT0-iH!H!|_D2c}{4gzE&#-xSHPEz`Kh9gqn8d)O~CnXT-G21;j9 zQ@L~0)u$>L!nm1QpH#5&kbmf%$3m*Y8FQm9N~xPw&AD@Q!~$VP);>CP0ZvgamCg-e zeGq8&mG5iXtfk)gAkYdXHQ#OWPNfWMmXA} z`d8M%*TIllm+_`~S(Qd~bquVt7QzvEnY({2n(i=nwQkNxh=^&laz;9*p1V~j#N*AG z*DXtUWRVOBDcnP^K5JIIHf%s5ysqD^8jE(T=+(f&hQqvG8`h_hz8WREF`+_Yd7h=Y zPpOc;(son7XwuXWcYigRH&!Mflt*tOa$~KlDG`(dmK8Z;7J&d)RhAf6(8FPs^Mzy(au;rv`P zKyJadXK+OVKTqOC(CkV>gGOSAKIuM6U`&QUGJdHUur<$K0Zik?W$Nt(th6bg#?p3D ztyHcomRzY;T7Lqs+o<);@$0H6#&4eO56CSf>q7-dME#!gW^mh)hK8Gf;8KXaz%9av zaQ0GvU~8U!xVcQ%D!8&8+XHLEce_>k;p?u_(Bp?g^H0O9(i2@F)%#mAZ1R?T3o0uKmRARF!BL^|wHl zQULHwU4KdcI9J8tOEXr-YS9xWRh2@*R2UsfZP8)>n1w(~X{+jpi-Dk=fp!W8s~oR%FxQJw zQrV@j+)um32JUM0FXe&LN$-)<6{j9uQ}85$i#G3nL8}t>MO!hy80G1xk6Fq=6HO6D*OdB5BB(8> zq<_VRdSSts>Nk$;u*92rqB0f4g72!yLmu;sFVUh?O>u|8zc0 z+dSS>^3-T*y9lt8AWYF8T{c!65ZJ^*(!MeKauNX%ZM2E9W84T=rnCIK^41J$iR(f` zHOtS=Y^7z`uQ)WNUe{>q0B$t_o4J_z%zvh8?2QM|J9Vr9>KfqWvz5ybJ^N&NO^@%!T5+h!tIAgMc7T<4|si)?S>2)tX=y2&T|M)K*t zk@8vD_&l4HzSa?qb(_(&j_Md!^|h3v5>lOCnHiZA0R|VdTz|s?KVq|S#nVN629Zs? zuZ9GRk%;-`4G9`yT>}=e=~yX&Yk$GZi75fYaAeh_f8_R>yiM}4{YFEmZcnUTvh{&N zH)l-M)T+rU4j9eP>jNF)EMX(r#CAhpKl{5O04^O)btqoT@J`0Xxsq1 zW#nt5s=TP#!p+HAuhy8Pu;;OR5ZYu=Yg1dc4iy?5_{!<(TOUp~`QH(B>f8C8frFzB zDI&Fh@_ph0ArIc@3m5GFKTII8^T`bsUaW`M4ZtH-=*7K; z!irQWZJeKbI7b}NC^lp*PG=nxtp48^93w`e?q?b1lML5t{{v}0j0cnPqA3D0GLw-+ zDSuj9bKAHTe)q3nCY!O`MlkLqGt&oJqAey8sZvzjOp_?BJw2I6mbph!K}u1l6Y?iV=-z5K4+z#DZ!T zyze|O%B&b>lcO#bap$L^Hyx#Ul~h@gLw}XTG3y-ns^TOqk3Lqf0Z=-C3=o-!U^tES zfns7?xx+HVVbr<}CftL>Q5ZTf6#lS+`#=d+%@5M*;BN;6n&5ymiiija!h)->2k$@P zU& zR_}6#LdkD>A(l+QI`qP>4AGqpV;-3Kp~B5be}H;5;3nEoK4FkiaUlZ>u4NY zLBgHUhE}xEbW)kpSi=|U-`lKjUwE_xq zEVRbJKHI#Sj_aY5iTRxj^q}Xtc|1vn=J|+YMPLc;!Exth_D0p#eTPF+sKCZBW&pDX z=9vHo5EKhxr&}YA%P71w`mv?~ZKlYw8Ndh}uT!dpMWMvoSTB887`Q=pz<&~T8|JZN z2s5U!x}Q-*DaW3WQ8=V~FiJ<8E(6F+aSBHr73tJ(RhZwC)cmGu+`njl_NG`RoC8iW(oEGKCJS3Kb5k^#mZGRHx1@xpW(qm8-cly)OiLFT!t#NN)o{Lk{LXlcmJo6a< zVkVc;8x&i#i%^8=J`8@QjfXVgbN&B?&x8yjT*KxppHwgz>m>|i?q{WOY*m!+mUEa9 z-Z=)s855+Z$#iJ#GKLkg_s+b~OCvK@*1x5FQCAr3q;FrF*$?q4bbsPgm%vg5`nLT5 zQf5isOE0Qo?3-R3k>&c3=5LJ}MXpw8vtGYV$}Bmld9G@byl)EGsrfa|hQetv&HKxS zONE8jWnE}WVk8?{A3rXxj_c6slNNaFgePTTwQko7ZvDFwxVwzQ0xi@s1(nnq=H~1D z;^CVagiyCVCn(}gJbzg{de(xjZDUL=P0LRYi?2RB8lxy`mh;c^+xz*$BT8Cow$KSC zAaB!SS4orEY_yp90J|hq^o`rp_#huqO5e$e|7SNkdUc3;+Y@HUaP=vxt)C3mfLlGzr8-Gj9?|!*?SloG#z*5e> zZ9CHE%g2i^^MCq~C|WjCYsH}(5)Pq;yz;?=MPS2B+Z2CVpKP|FczPSYZ|nWhJ569e zyE;p1GPH$kap7*^WxL_>Q|fwu`R%hWh;rC##=FDZJkD+&JU9#^PNmD0O;Bt5U_T+G zYReqJO;l4mh<}*34gbHH{{+Lfo`_cDc_NqZV4H@WuQqBRcY|B82OJ)7=diV&9{Nom z6PV@1>TeBjHNU-m^p7KeYs&-I4u;={A%8qP);&Klgd!<6pTt^2#2B%q zQ>U+QNGFY zvx{MNQYPg)fTP@jL+em-6V&A0q)JB)62nWR6&<__T8tQNqQZBa&LapgOD8@4dVBLT z3h>n(@Ft$goNzmR}4DP%?72Prp2V+hZ>V5aYor#O3`S2*tEAQiRbqDdhJsv=}Xn zy~G$7=V`fSi`i@sh_h0CyIa@faSx2%u;{&66@NpMCeUAa6#Y@ix#|B0{ld`4slNJB z_W<_OU3&b>b}+K-(BZBg!<^T4=yB-GWI+%X@itqWC|e|FDVRe_#~gqC`F3&jc#)9J zsDIO1Dj|}LOma*mWll^cPCb&i$&pRW+p6wo4nC&5Atw|?h(z16IBfTv5Q+HyIUy!G z=UFwdy6NOyqXwv#yiKy9`m}DfN~;P^h7*%H5SVvZF{<-?T;(jHwy(3%xG1Zn{!nj{ z1f!&UV>9hw&1wDdeNaqNTfH2I(bo6#^?$q?3uW7Nb!y%1c&DiQH#umoGJn0a z&CPS5rSb=}DlpdR4U+sUt+O_(#36`;atG#6mpOnwDzt=vukwg`JT0jjFage6T?E^Z zHX|zMy>w;!n~E>7&ybAdN-ouo>iIMaA$r+*<=c-hTrx}%p`;yKb;6AkVpLOw$vEw0 z$xuCDaA;*}^JJtZxhjHSIH~GhnSZSv7g^p^rlq}FpfKtdnu4k@nyUP)DkZ}zEpwO& zZ)@<=qBOl4c?tzL@$C{EPLZ{Y-3pVtCVXs*I4ujeBF=X2!9pvWb-~J}17TN?sKZQ! z;!D_>j@55u`2-aTRtE)@o>diYCR?=}C)L2--GI6CBB|@wI;MG57qfghihrI?R>YPO z?fnrIz0Wf>ZB^;S)+GIY+HZ2KHr%Imtaozl@T?@Xy?VVuzv^p+H}r;B+OK;W6-Ftr zVe8VN(s`kEq}=StXp0R^q@=y#`2w9u_-Kd-^LNlqG}=e=suP0XdE91I5HbmB}*1focwe39rG# zk?WSwQ24_N-3Lmr0zV1UlYgHO0KpC^1Q8w*ggJNfllQ-4X9Dkjbubdrb-rlGxx z(pTqZPIB_w3AW0?6(#v4P6&08@TB8XhJ5N)xh~FKwLK3G`I1VlStJLb#Wz-fADz@ z5Vj1yYeglek=Ed46bT`>u7`OIYJwOQIgI60Y11f+x-MwhNWiU@wJdf=`-he~NK&(E z#<%^r2cjAXWh=F9A-VOO5*Z0Lki7A8Jg^2J3{gR=2I%&ZH0U)$9Y9(N&n-nI7YMtB z7+34%-PL$Dn~oQE+12{%Z2GZIe{$lMWgm5;2srU&<660r?`r;9HN>QgysfkDLr;C= zd0r_Q)&&Qw1V11&illnmk3yBUO@sooCPIPRSH)4tYA!L!$_2F)JiNZRloWn*HcD_1 zp|qBbEetr*R>R=yk~NS<|ZEEuAc)f#`C%~uSy6ZmC~o#GUfsL z$-5*CZw*t{)nM18idg-OlF+f2Us>g)jznSA5SZEC(1QX`P-qBGP}U=4v>)NRk54s1qkv z9Gi7ubsMD3P99060$pMGlDP0diA~O8Z&|N4Oy#m}Q_-#;NaV`G|N8N$Xq3Jg_Pj1# zAxR5rH-mWCYt?mA0(nv%gQ^+D&9`-!C?bXagI--y17#6Wz+5Xtf5A;yXK#!ME$q|_ zm1l92%x#6G+*Q4d+BI%=GmM~n&>N;2_sxEinBEii;Uum}Is_8CU-)#nwc^D>zN0c2>fMz{% zY#9c8O;Ap4p7i~Le*^MnXi|ah@@rZIA3@`PFt*4B;wT2C?lpA~uw6fT~otL0*zEjB24c*qtLO*cPQUVVob zoy~v+uO!v^(`175LE;I-uz=&p<=mY9yM7}elsu=jy_H-SDeAHPL`~uYs;*b2x?cb9 zsLH~c*0%*If0qgljSq3bVIb4Ol&N9)h4dS79N8c|%i~74B02w*@UB72I|`>P%kW#u!PK$?7THIqFQw{q5O>bAH{)+ zUr*Qlu6?;L-$*DP;^4+?M_3>0+#aZG`d0k}+g7;Je-`ioO zf(2a0mEU5;>b*t^3Da=p_JWwezu<-uJ54J?hE^rsCT;@3oUKRRf%T zQWJ{qbK^8GsZnh2U^Miefr)r3$M7R2rl@ev*cu>zjHB9KVGbeLwKgNM5R7gV#}tj3$i zHQDQBE^_ff>S24lY&+%~(W(A@b>Z4)p?_J;Z4b%f*;dw2G!GBs)p!m( ztZXN^)3|P5r{j;a>_>b0T*&eIA-mfQ#+&JKr>{?+AF_V7x`Y0De4p7(f^ikdhLYS*X|;UZOc(d9)$}P-;%EdvPU)pgr#YqU6Nt1q zy|@%R8VeVX^9-^>RuPk$VZ$J;L!R6BX*_$(*5_}kZgkonuNASfc}T&o&Nlvjf1Z=g zcrh8TCZ{lF!R8<}rK9R?lX+-eeD_Rku6BOa;c-@=Ip#B0er37n7I2t*(zH< z&hopD#q7C?j2&tjd5C55w?%fYfBVb|Egpj@_K2^n`KRa7w*)A1)K{H5AvBl1rqMtg zlVkb}T>mY3dlv@vRMys0zMXWSmbxrH(~2;%ukIbQ7~GsV@6GMjXrzXyByOtG8+H3N zlwAP^kVlf1?ZIyMQ~Ab@edJa91NDJ?*J}R-MWI`03T19&b98cLVQmU!ll`IxlZv($ z0XUPPwk&^7+dvS#`&X<&t0WTM?6>1X4-f(h0!$qvS^)<)Y*I^!NgW5ozwg*<$Bt#G zP0Jzj?#|mcZ)P?#1T7Fj7uIQD4bBBeE*45i6wJ}k#mr^MQ4I4TN5M0C=pA|f#JieI z`!|a?o3j zTp>XfR&I80iKf<9i`0`dbU=Ztn93ATDlm0jq1<`^l<@cm_*2H}sT?%Rrx-WT(E zq&$C*0%c%|Y)Y{!Wf`F)1qxQd`&z^OzDFUajG{_76y9{S~rQ_7>!$gOBWVt}q%I2-p=p`-=JB1P)Zq|C1`XSgl`{Fw%xyfvD zKw9pu9VUN^C~gXxW+t=V0i>t^^dR^CHcKvL+5Nw~ z(o&G3!e(ciPhO;?`(J6;#?kyGS)J*46Q%EEf;)HS*zBGQW8daANgq*!1pW(L=f4AS@~^L;-TNX5*FU4#rjgpF|JQ#= zzcph2_%~Rd?|NEWiOj}(+}|rfb3PKNLVd2mJR=CaS+w8A^V{>2@uCxxV!0LqHaL?J!zq7RZFAx{ z68@fF;j6jXkgGu>$+9eO?M;;dC-E*|7MsncW~Qz@;AC7wAj`|_<=-?8&TPv=j5EhdZY<#;>QT$(6xqVIl8N=P@g^FEQ8$dw zn$+P>ZWbFZ@#T4vB24ZPY=z-(>Xnhx>p-jWFGC}Ge{xH;$Cj7|+q7-tQFo?B- zFeWdE^)!8$uUAE!mj+8+g4{~J=|GG9f#&?^0?~mMjmt;|;7Wg8Y+@^;5RLSffv2T2n4FLX94#A?+JRvigBm?kzx4DKAN z$a;xYvxJp^SWAB-DQ?>&j;va?lT6@M(WG47@YTO$H0a6@xNZ?CC_4#CL_I7Zy4<7+ zq-ndf@z!r&swdFphSzFYB!JvpgcKH1mRfa!xIGM8K~3|%{E*F%y(m9~4PDFA`N2*3 z;o*96mxsBF`!0a0`yAlc!o$Q=sSL47d&ig=q!DCOr`&%ND`|1qlW~_p6kg*z8us)t zdahZME6<$2K$EXj{66wKLwVL(xDb^D@Z6nB zJdR!Qr!arrh0PmkvJHYMRXt#2{Bi3{f^Ii1+gr&9lFO1nmPJ`K*-hz4@}T}1b9iqY zT#7I_S8rRu4h{A)B#8T>FzAyv$s|ay9r|E1tZ>4ntPyqqMM6V5GoWhRJsJvtTo>{r zYT4A@DmbR(JqLR4vr2xS)f9G7?`TF+bXaMnGBSTqwi{bMa}aU7XSDo|lH8JluXloy zL{WFcd7xAwO9bQfV%>B{4doTq{+J_pjWT^Z0dU@KofvqHKs61S-k@5o;-D>&`CtkY ziacyTN@3d=0*2X(Qn&_9CVB>40SiMhmr?o+sK*mg(*2VX7#Bxfy|ZtN}zN%-U{2>J#H zCXkGT@X7}aY>G4z+amO#;0%I*LgMO&5TZYXnB)OFqnJMd7&}9tz%YcoHkCT_wVAaW z2!o*yR6g_2LtP;9lY>sV0&(}1F2$=wKD&Je2WnqxaBL^Ca~GwZ3}FU4*bO{_sP})U z88BlcY~j498B{sx(W82$7j%Mif7DIN>AE}8_kqRl^1eOv1SVbR#kK>uRkT20v5x%G zL%~i#wk+IlL*KdBQU9hKu3(I*Nbx9mKz0~JT@ln56Z=1x`~;0XHUy+eFkmcJbFVFQ z7X2dza#swTtZ`n5ihAlwPlu#<2o zf=#OY(!T0^c#p>OMLwVAOZtA9tyX{tOLYHW$`|So#2BkPDL+AM3nQ$2HoY2#NfPwy zlyZybE^=I=fC*4x3pXB2n05nXa9R{garwTuL?(g{ZJbu;K(b}X9#n?2WA9I8HLGUl z%X$3~pW6dBa%I=QN54_?aI=3zUn5EtSTq>K^E+L{ z^Ti~erHco3RfV(Vc#+?)5HbQnes@1#th9(_4R$nQ06o>uOP}WYgxk|Bok{XqJYC;w zNSe;a-;zb9?YduN-}CueBh+F&L#HNRZ{`}&Zt`i?PfM@zS!sV70+d@#@ zv%-7jP2H=Tx-gW@Cd25x(hoBcQWY*Os~&se&XO;F{H4;nD>(?--I z2mf%{aejHb{Ge_%-tKs9I3npj@~JN$N%fYF2>@tw-Gqc?khr&1K?>Pr6D z5l3xFO1j~|pxJehi}^EE^Yh_T^A@mrM1{9APqW=q`yXpl!pxKLq7#$(!WRKHlM%x* ze{fM6a`64XhIdCD4ryzW|~Vgo%Yhd-^GgpWm<{t$w4+m0{i%O_uGYV z_ASHNX0|l5+jY*e66GT2nfWs-N<>SVNkI`SSZ2OvpXOJ3-{`jKZx)o7^J`rn?o?+g z)94N!30$)IZEf^Y?Qg!AcOXzC0vSkTf4l&7PS$6NN!XRDWhe)&aStZ>grpovnTVnA z!B*U7O0eBNQ)c$hjKCJ0k--sOAWm5J$M@N%FF5-O@7`q?aUrw++|KV=P6QIAJ@;4E z&wiibN5LUDN0f<7Qie(@y(vs7r`;?5_gm%{`^_x-W(!C?bchpF&;%LEeA72 zJ%mAckw}URKm!=zFIWstK6nQH-mW>x2!U|R+?u`+;09*df)=Rc0j?`+#hcu#0~Oq_ z@@=r-jWe^_ZJWAkJsyxfiBv);e*__a2-{dWLz0&da7z(71A0LSM`dZvg}9K?pB(JE z8e$_6mqfVOPBs3$u;&5nx#Bw)KuR-6lLzl{xsz z0%sY$=q!_{z~TkYzN-4B_KI6wt>CQes}C1z_YqUP*o95`{27K^H;@X|{TV*>Veg^n zLXsTy{`~+|t=iVvwP2J0e`y`sm4C4e$JO1=1d+}9O!P|i&88b?W2b|fdleR7Q>|7{ za-KZH``}^UK4qP~BnN3-*WZ3^}89BzlmI9YnT&pEBLq zt`DZ#D0oPs(U7k|gvD8LzD^R}AFm!Z7PX4xaJe-mg&7RQBJ_hBe^Jhz<>RI{A0UNp zAA5c5%R~y8T8M4-FbE)mZJT#nlC^uuFi^7l$~cLSZ=3HdTm20qz-b7GDi%@4B2nTe zgmN??a3louD*;Ur%U{H2SGw~F2YfWiX*m#0(jrfs1{5Dit%_9kW7^^jQ4s$Ej`l&W z-bX7cGp^*7r<0fle@nYRAs6RhF~XS%L{2U4BEeIMC@m8(0t4mSkocSJB~>s96EZ;m zR_pf@Ish6;@`nTLNK!h$zHVAGZ7qz#au|iHZZ+jSjMR7-9N${tdRsbgbUz^x#!ONS z&E8bYAJY=!6b5qn0*ZX)vGp0IF5zpZU_J~!oiZ@Vn&~hWe`0|6)ScB%clUQeL$&-d z}pqz3P=`8CHn+3eT^gljCq_e@kKx#V5$bv^#=lH0^f%4g~ATNlze5*q8_e6+i@*hpZX?KY^h5?{386 zp&3HUAZ20i32>VUH29(F>KNi=6g=y#s#p6D!?t)MbCmUQr}m9)$MN-{cg1{`#8X#W z4)NvWDL31Aqdi>|Kop0>$}PvyKqnKIjvVfBPr7s9Kl+vhV`s(rs zaXcPvjCx&L(As7acWQZrK7VG_at&D!xzz~J>_Xq+Xejc>{0g0#CDUy7F|W+MyWgu7xR0bCKSaL$|3OZoeHq06{$?D1f3+864+mJ#)%% z*Zf#PB%B)dP$nakBr#@2hQlAV;rBto35`KT=5G{F;rW>>JEX0o2~_F3Ynfu zw>Dq^V0+CN$(8cV$Gk!jm5dplf9Lyk=jGP53n2Jc6c|mmTZ1xC&I4Q`DelJD>g!!=Gl-on&(W zz_d9V6_`60@b2(T6?KNWbCcZl8UZwu_w^rt0d|3oCD3P)-##UN@UUCikQp#@o}wju zp6q-bW05FcGh;nTCqRK@IiJ@t$AO}e!~unpvr%F-%N!hcXYl~M0XUK$^MD&2r8wmuTAN7*Tx0593gz(8~)wRZfy zb-#a$MLdPFF-o&Vz1zcl7zt(qX0b=^3uLEjQQP5_et0;Q^OU4R3RY=Vg!exHjzDq0 zV)eU~G!2=`x-DR|>Q@vIm$NeTrw-6hE1j9_|u=x>~a6pzrd}~B+JYN zx4{T&nNy4(rc+l)CrR9#FG;5X=Z64OAk!EP;6|hEG@{&U^aGh;eeRE4+t-^0C%tGe ze>fC1WVyNpXlo~oOO#=;?FN_Y+=DOpFetk{9?+Igeri(bR`R0lBoyxX6UjV^#bEtDuxb>!ll)-Rao4wR4Bk#ga_5DYjt;jSxa*!Jh?j#?*vn%qI1R!XqnFyW^R541L_#;ygt0M6 z{`cSiiRqWY^*H;I_;RjZJT_8cAg<+@Dzr=9BN}?QC|+V&Wy}O>y=GA;7snuVe>{&E zPS}*p{wR+a7>*~5Dr+M;;~Glyn47=*R}5=`MmYO_ROVzU!tq;MfA(D&f)MVO=e{y? zGrNgF;gIsY-dLCfx$Y)r5kSuqt9OWzF7X2pR5X7DfRIaCF)RXi52M*NU_`{i5*W{~ zMjloVu9*boACZTha#)sW>`B02e}a@t43d+n+^E@QFRC+5xVcJa6Qm5#>wPR7#Qbt_ z32iu6V><>!anQyN3NQAlt)uq?NivbY+G&I4&ft+fz*fLWEW(v$%3YA-LW3rOd$)->MEOZGUEF|!7jl-PPv>mYvp<&87f0d*!BqC;k z%H)kVRTGsBve0CLZu0@^@|=+vWyL^*tLTr*gf4`{Gi!1hcUKQ*SaqwOPzTI;aq@J% zranea2Gbj=uRL1cKb*Vo;`1*BE6hLJvOsrkwBG?mI?CFU@uCy60sMuc0x~j_K`ttP zS#RS;5`Oou&?K3G1{iVrB-xKNMO#cL(j!uKyh)xCY+iP-$iD2~->R-^UTViyfW=}l z7_-^xqq>f-j;7fBz7d=Io7>^$^PSNfmzdPp&G7e4?h@tHCQDVKbG;dU+x)cswma2b zQ}-Wt%DU}$U3orM?NAJL*Fsk+oZfzaE{E>6I(__Q_#PHaXA5drQQI80^K1RAgyd24 zZFOQ`*Dyv%6Isb5SvFfn!GD3v{j8+G;WyQA^T&;ZAz~xPgV;Q=Qg43!dh^pSV)GmP z_WedAHqAEw_9MS;j7*c%;kH& zt*GbWgg;k3Xx&7_<=#7$fm}qo*-4o=YhR&3i$s7}FK94AF%8%%J5Y7xG`*_({Yz*DFd3Xt&y-SQ1GK5VsP>-HQpk)LJJF4ZNdXwg3N zGT;fTpfxM8@03ZL$lz&{9E9RY(a$Z=Fw}n|`TMol9Gb4!PrdYbQ7h26a`4hQd+BjV zme>pw6wx>lYP6TnA9tzRs?oDf!+=p%xXFLFDjiu%LCY-H`V?DBBv~rou-2#=I;QbS znvL$EKR-NlrvZV>fXpj4SbPx9tV}dZ6DLPfW8sEPtQ!Y36)k+%osPxOPoi8zA6CP; zqQ{!)a*|F~KG3ROfv|zH#a0GH$EZ$aqSEv)Qq66G*CTC1kPO}LA`);qkz!oz(~C~x z1mqFw8qIhIOX+Rm7yQ=$eIMhL@faFd)pZTHo;vtEaN}9FGGGvkK+zNr;4r1Zb7R9Y zvJfa4tHDsg*6Z#Z^urJG7KYRM;dCyC`IncX0j7U`Ey}Wb7>c&!O}jf9O>P7_bS&wC ztRr2r5i^#^K>;pRI>z=*T~=*hu^Hs(LFJNPqpLU;?0?#BSbC@#TW0?187;!M06Ke0 z-7xyOTYJUsZg?t)1(8^2;od~dvGqQ}G!~-0J%F^&RNO}hYP4$JmOdS2B?; zJ*)PA9k(M?>qMIom-`S=R3}#QG}}HM>hiGQo<$YmtU@nwqduaAkj{u8Ic$d9pK=o| z^X;zlu^|Yjsc#8KPqnuei%l;cdg&jkvW|anR7nU?Q}DYO@7sH((W&JtL~@|5GJ-0q$fgOvD3uVm|g%}+WbYm&{4hEX_qFc%$A_h zJpifz8njWryhUG za-a_DfAT0VN0g@*k9zQ&m9At!_@)j7cRVTv;Sv~W?OPxm(!q&aFGY`uQCA_+-HLt= zjIfxc)|pM;MvV;8Ks%8oOw9Wv>B7mPZ>`!(?+P*NJ%nfd5Ikn^r87TBXdnRso_SPH zQ}64?ux8C3JQk5Epx91@!vA7Os^fnlsZN}cb2(zDiPTaQH9AA8F#hZJ4K+^pH=Cb! zMuQr4K8?f~q-hJz1e~0EKulI0mNl0?zF{Y~XBSWTFBK~4eMnV(#R*#@t@Bj!W%HKC zBvz?w>^qzt=+rim*-8aJQ*>k$Mj6!LeA~z^stsg3UXhFEN ziOyHdqzj;kt=Lfvggn+>c@o%XiY@&~aCvg!+~y}HP3SeT{Y``Anm`g3WBiM^Uu^ia z`o{r01t2ZvI@Hawz~%&|eqw(|&xh)S2Es2`&jYYY$3ow0G2|}Ik_?oMB1s*IB;6QE zg6DnLG_?=L|16MH**uAP7cGn^`9Fjj$bKiN52y4&8XU1}IBs^c#Mr-jr-zLL3Kho^ zTw~Wve2-Q0%#5Q7FAT(VnG87fbS%~NxhhT}!~+OlUige9u%KZJoWXyxDI?M-n_1ne zUst%+F(VA*gsU8YY$LWW)Y8OKMczZMSqI9{8ofpOH-Socdc9(1d{myfnT%#)1(&Ty zxf-ry%x!W}^#bRS{uM=u_+*o0`MA~toyC*s6(#o(DZcu`BQ-IL!zbk#I0WT{JploD zR3y%^B1uyhzgQDCMxcL7L^gMnl9n&pqIn+b63Z$`1CjnhK$L@tiu~Go+KdSZVl@Xo z5G6a{zamJ@fxK~L8?!%1G_4s?H!#oNXoS=oLV3F?RnU3*h)2~BN9k8WEl?*pC2U=D zo&~f3R%F{oXn#O|BZN^$gO-fF1wC$S9`)3n`ih#vp=ha934(uLe~n}nC^#*qqs3vB zY6v~_|6_R=a`GuYL6DrY4wzLA=fFCJxJp9RDMaD~)}2Wdkg0zmjnBc0{`&RikDJ8$ANk?COzzwKfUeK=SGn2$^X3cun=b0LPI851 zOn^|GtuN{wz-qXt$F&j#=uP+ZVSydfvzrm*@9e>SV7`pb=9JgXD1d)3ahBf5%Oy>cPxo;pD^hh2tZ!;M;xu5Zin|4Xxp+qsExJr!!7M z5}M7BTSf@N`u%9YbW?+OcWj0_5f0;JkS-+H6Sm?#Fh?ON;IZx)9YwyaY7fqs0aK2F zjbqWWnbUvU4_te~H};Wb)3w|~Fi+)P|Gr$#`2s>%tf0s2dKzCt5G9tx*TWP#Wn=xz zZQCjoVKG+b2&$P~cb{jfVrH6v0j!huGDDj&SWLl5IRmfx4LXNLR*dsO_aXaZZOo?f zfMx7odVpy(#3ZSWgV!`@VG?xpGY^N~U!DSM6jOf~zAuL2w&*W2hLZPQIZHf%3kJW!s=B@``)CHt5VP zZt=X5=FoATUsmBeh5{moiLzT?CHQfcutTu3zDx6;mjKtaKNnp%htypA!cS8ToY5av z%nW}ay3dxmvW>H5WWX#YW4uU#0p6_|HO;^y^wft@>ap8bO;6#ZA5RufQwpY+Z>``s zAaY}tMQmbDIx;7l*Q24kul!XQbk}>Jl+_|-^Mr094LUq%V2>v{4FbR+kv)8FLxbuQ zZ@?(q(=Q7$iZIbD70<=%KHt~%wYTQWz*c{(FGQ^npTwscoPv$1mC3-dE(%&$u`{65 z{=OJmq3ogYh7_s7PRb#m5hU8v>q4YqUJ7vsW+8kdzg*xDwL|=+;Tg@ef7E!i0IzNB z6~@!AXz*T;{EkflC03QTg&m_7;>5}BX4e@Z!!CT9N>^p)hw20ZL$~a&hRNg>su_PQ zF02Ddd3or%o^KfjAE9G!UmmI>kGQSM;@tBK+rAi6LG0wum~dXj<4CP+&|>2jN{9pa z`B zW9@T}hnV-j5e-LA68lornnZ(tx#C?z(eU-`EIn|ERc>QcBBct&rORBvK<;~0Dj?#Y z!@7Cep2m|-G5>HZ)7`f(*RXv#=jjO<+IJ-tkRKvDjdH?zFDiEpE&ONMZhY zFIFG2wb1?pAdv*BmvPwv6qg#T0YZOo<2Vw2&#%yI&jM~>!saQ8kFu>Knw2HDB_|zp z&qL6Y&IXu1CdtfV|NRyZoo3|N3iiP;MN(B{9UrTT!ogjDgY%Plb@J|vvp^vpauHNt zf=D5%Xdpw1Sj2+r_u%8~O|eOfEG^%jQlVx)7mMvG$*Z_ZiyXQ_tk~?`qAGvp$>!~E z)vrJ>>=0x?k%=jEkhi*)^jl79!eZZ*&##Whc&rRlwdvmB&kmRJRvXz z2c+4Eh>##G`26+c<8L_l9makQFcP5*{$pl-4LAu=sPub(1m(&56YPXD{I4k!hLH+M zAb@m8Lrwb66BG)m%!IaO1_XZ&ku;Aq3=yvf-lbnfu>20}-Zz9#Ys#k`(ndvsbmX82 zlAH&EW9X_iv|4YgG(Wd0sxA`Sz*)RVw6g5uPn)+C&yv`q078uhP6n(|DCs z$wr%hNM}W!UF#N`rDwLsN*g+=VhyG%7D<-bk&C#rBXMp!lGVC$Z^!d(!mQOKHY?_FD$Kdbo@eFnL8URlgc=3ZF#wE zrOxJR*jO7;7VG#tHb!D*7xq6ki|QI~nwM3aFB13is#qqOYg^-6Y&T_knSd@hp0#4@ zISQDxs7=~A3Qb_SV}9~7&v*w*gEu2kqyD2^57E6=g3v!tj68p!Ygy!plT#Eq&d_aM z+}O#BIL`}5!R`_kYll+T4HWQIYQ$xz+un4w&J1@WSQyAa#v7PRjATxkqBH(BR5Pbf z!jS?5>Dzj;IV(0Rcwb?&EBMP3y^1USK-w+3U8rbwU2N^d)wZl`%dNYLH%^vO)OAf2 zBFY>8{e1W26S#jwim}dN;ByIpQce$Xh}`XLxlHxJ)o#MLF^ss)5K!J_V!KLcEp5{( z3>xdMseo%xhNu|GQlE>A%h@t5|7965=@{s4D=o&OSz_^}Ozc3MU;Bgxrve58b{j!A zKipnbcdrD|7W8~aEWoX5q?#q|x~?wL#f4jdRiAsgk`PWc76=e1q09nOk)spVoO zWrg-8-MmVx3p>pSOLyf-1#yED6%iqd1_-O|*|TMeWE&2kzaM>O0)khBbj*Z20|Td& zgNjI>@h|BrwINKo&*vR<{Ig2RR0BDqd{%DP>ta)t`iadnRxPdUmUdj@Y-yX#A=T3t z34t^fFIGC(2P1h$eHAY(nwHkT1rf8K96NAgyC|y!=xM^YT`wXWVhK#TQI%&Q97RO# z@ka_#*1jMwM4~n0OP7$a0V98iK>O-<`qOAh;B?W#yo~2rV&StVUxV1vsL{-}IH6y& zpjV^6?KFr9d%GS`vZM1vt4C|{0_Zt#hU0*PHJU>S<~T;wI$N==;(3~-l|csBS#KM0 z9%t8OeZ)52s~_x1Vvf>9wq4doZURnfjs|yNTW;O6&=RS(o4kH!-H$jTSMjxN)Dgfo zZhi36|B2pKmRwy7WYsYOw(v z0o9j>u>n0vy;N~_F@2R#i4l1vSx^}wHWUWeqPSisyR4a{W{Uvyod;oKxOiImx8hZMFP7km&vjLDmAWjVPQ862QA7r0JhapjJ=gK z#CFPP{oFvAn$Lh#{d?XWrdW_eMomIa1J{Wpj4SAjgR|F{D6;`90=|ToRpM*0LX&BpJ3|`=`0yMx2W7Y?nzrNjn`Tp>AdHe10{^`FXSaaMu{1(PS zI0Xht)<23O8-bW3#o&dQF8i~aKOS#K4C!FL9-ILhM2U$w^8zA!aRy8CKM80KrZHj% zltGf?3{qYsy7~m}E$gc(Xt-LbEpEE24e72n;J;iu5YeC@$t=k)6MF*(gH4&PY)Sg6 zWGxN>tmyivyL2*jzpIx}v;ihVYakL)7)inVh;;h}0O{#@Bs!A6*8=sOlP<;WlzWC1 zYz&$?=#Dk7o(HpICFldQ-VW&V26#BnT_7Wh!gx3h$X-I1xwHX727VjY*8|U&0kr`W ze<+Gn_$s(0FcMhwap~dvUr+bn?v@Ytf8UNIWk)W)P~XJQa23F&Urh19tgScU1b zagyoNH;uZhzJfFNh`J-KlJ+93w6k5Me`g3WCd+gA9plV|Mhka=rk{0Wr2o^E`-;b2 za@x+pHRUIW_VlHuXx^H8gR<^7E6-cp1SQq5LpX{iR_dqHF!qKq*zBuR>XmlgL81Qc z;pWG`?>|3|fYxyf@Ea@Uh|1{y9a9}CLND%hcQ6)H9n8~%c|e0tE$+XB$N=+pmlC!C zXA_MPgx&kYU0@rV^ONAC5!Kbzm6wdR0T~i{jX?{tU%_{uN_Uj@Kd^28u#@qk6Sv5= z0ns7?H87K*wkm&CO>f&U488kT2xt!pu&9!#59{b8PUFJ0v)DmUv^}j@FY95u?C+1V zY{!n>bZL4BLdfJJsYg;| zoy)X}Y8`(PBY^UnW)^Lyf=#0PxNMk2-VP>8P!q}n0|II#-XoGjOXL#EB&n55M@cv; z+mhfTFd7qVzWZSM>vmu5fujQXv%0to2AjNW5 z1pDbsf}Z57GS0kMu45;t$ucQ6Y4qSv_eq+1X&(Fks+;1K|0~w<(p$}Pf6`ULiKiUn z80?H=LQ454TH_?U_0zXVeN^=@u3~Wl2C|5^h@-2@X=WIvYCEaoqywYThox4i{U6pv-Za_M$%KZehiYg0@LKdat z`HoJh3tGD#Fb=_7_Sl{e@$TENByKVMoHc)<88n6}!*#t|DZCnq4+yWv%(r&WIjBi0 z86Q5gJt%=v`#`esWy#vkwxmbtl}vV)E(7^h#i-By&nxl5_BJ4o74`f5-i@jvU${w= zCYuq@Mp47`nXdI}d)zy{B@#!o=q`V5>Ek^MtipewGE^W6Wo~41baG{3Z3<;>WN(tA z1ed$q0Tu!>Gm}9sD1Y5s>5t>K75_eeg*Vw`JxHwODM}w@TjNnymK;mo$>bw4&8BX`L;0%Y~l>N=mHynnr z1rG<&S)#dI{N=}+ufAc6Z{gc#3zq2AEdFUn{yz zI9=83sH1D^6Ea3euZ11pPE~$>s@@kh@D9EAt$W_LU4I$QiZ@A@_{;YTY8-bri?8hW zkKYJ8z~9k~MTAmtwc<)(BrU|xXw>ee^Csit=dxz(RduN*e4)-oZn53w8pa}Z=eP;y}IGZgW z+Y@baUw=GOW8315KQwh)Y^kTWTuqJ6YLU_5Uf(L_XeX3`*T^n8?30CUfPAH5$>3iJ z?el|!H0ODC&Bo0cK-a&<}^5WfM(d$(`jR za<5`1^tvP_!aB+F+~3c}N*XMA@SPQ1Xw-!z zArLlCUD<_;SP5qLNBc}^`B#?<-~lTY9zZ~;MPg@{+`Cp2T17V-1lp(CA(ufbUNb_~s7gg<5*t1yEOwIiiGcfrQ%NaylSzG*3 zWHk_vED*eDNwL&zv$JXy+TAIl1~lk2nGQSPB5In|0L{u{NAr!0a^^8dHnx{*;Qyk8D~t7*2Pfb+w}gX>50@!ab|rHI64xxBGHX z=w!X5OgMN$6YaGx_wDf!4YvYa*Y<~FWvx8eackqDyQueV*HgQ$nzA_3cZ3yWaqtV- z)9z4i+)%V{ILzJ#b~LB`+Cmd(<3-?q#~qkjG_d>v0VUY_G~+KIp%{@6SGX@aTB18` zHf7h{o$C70A#kv+G7!S)nm}nMO2H=+C5my56ZVnBAtV()b)QoVrHNNl5qlfG{A-8k90S-TZSL!*u z5k&gf^%D?P7M-KXrrnp$7&|ax7xfe?_Xi?jaeSP8yKC#3c1^G;%-;3KYGY;iIU~E$ z2(!hrR(4L_LHvwmg5x`Pgtn<4=ZA@@MPrg&22_+q$fuGtEb?hY`D&p5Rm%5+sKchi zCb}Nvo*Zz;(3`S$)@E0ncBN+(qRSSUf%eMfvljWq)GX?U;&IFz=a&uR0T_QI3qe*h zCVsh0gba+oiik5@EguWBi0+7qARPU@+tcnovY<4H8Ib);7SvI8G6O%2)#t_A6dH71 zs{Vu9e2sQoiKX=2SCG)-d>m*Mn@tNgi5yS-?SW()am+;V!q|t( z$vwSNKm^n{Xyc;xo&CLq63~AfwD3e&BtU@TtVQpjHFs{5ML+PoEByS(;58r#d>i(w2F(2QP|#pa$`fT`)u6w^`v2|$1pR|Q?4aG(Iu>Hzw-Rd=YZ z>BNl`^ytc-8Wc63nHiG;!Gje6RCcIK3NG8TSO^C1UCfxlIkKQQAMPtpf&Hm-OBQ%R z*uV>tCdJ@>;kti7<;O6wN~BgZOw2B0;%q=V;MVK7kBO}1232>&aSFP5h$N-nBI7nW z!*Hi_mLZ8ZZ}k{-7xa1u zTRsJIiAqC|Rm6`44eg5lSLr*2RCv%l*92xi7w`_NP6)oDmZGW|sp!e!egV`0pFnw0wkP=lETFZzY<EYUwBjAM2K46n};E;VsiC$c? zaa-!?(l_sjOQcXP=MCQi>kHt;O>rnTlmVwL)6f0b=nbU8Ld&OJ@ZqK}`QZ6AHy!iA ztp$J5dY0a`9(Tx9#OfrHfxW$TjNgJBlA(d1-4qk`5AE0i9!Gx)7r5Cwi*|a$(#;@o5O_ib{WmaV|@Xbe128x!sYJMa~j4#IybwiIwR= z868yk170LIkTy|j9_5OMc|ePE^Blp)X`QpQ_hkP@jLQuEr>PuHeOB1?G%o{6WWv!l zq;;8$#+TLL)4zJ)aoV-<)rO9W(BLICmrO)(9WUlI;tGPUh8!*Onx2?)~8@5^f_NJ zo7V6!Lk?c%J@}G30d$ko3SVs1ik;Smjqr0*_MM-$=qC#ptY|q#GC(o~Q5~C;C=>Cq zEp=-=6iwebpqgPiYKDEN&V^zH_?&;ldojJZ**J6Q>Sc8JNkI=xDps*78Kp;Qm1nb7 z8$bD>t=rw>PH5wAlt8_puE{HX7%u<~b8LT$zF3o& zVW_ff(>8sv>D_@Gi3|o&9Pq>(u&pvH>Tc9^IyR$MbRBhHhIv^^t@o3DOvr_F$4bH~ zuTRH7>^uXFWNet3DLuq~BAjEAY%smg)>qklr_{zmxbtdbt{J!v3!dskC_Rs^19ye! zI##(zGgKQ-=a7K8xQ6Rc@~MAG*uvICN;iiM!%zJ=EfWod;2M+X&Ma)d`}NO%`{BE9 zfom9B9)9_5b^PfczkYXq8j+$mDE^I|oKpm*kV;)ck@KQ-k-}wVv(u0|(`Huln7ZJx zy{oodYi%+7Z&2YZ-w@WZ&LpTSOI&xFjA5R+>oO3&|PzIh|Pl5$aQ1;b( z7YemWU%zWCJUJbY)uw1%j{_<$?yQqss;RSWr&mZK2LcLWGpB#yb;hk_K4%9&Xp-p{ zbAyL{xR#?gv<~GF>pSfpoC(KnI=^R*nmTPXRi(qI=pAL*3#;f}c1LnB`_VgcLFCkx z?cymgNr>C?l*M#C1v_#HdNiMfcDL`VZs31kFWrSY&L9Zm5Xic`n^!{hgE&7~xSroC zEU-oBC|%Y88nAzflfNM*JXn>mXw%t1Aif~4oki9;eWRR-T$UA82H-3)D1|j}^7+4+ zxdt)CV@_u5%rYCm$L(!NgZN#~b~@RHNfgh2BTj+~Fg&)QHy@UDJ=zf#4%YtfRPZmO zX6h}l!&%);ysnHTDdSg4>DI@G`BEbCkCpQjheKKT7tepS0~^M?I&LHw5Or03>877W zR!J9Kt}s`gKA*bKD@)(F-2r9?wq0NPGmp?0`$IO3=~I5q-?4cdHSh{dr3DseBplG) z#VEK+6uZjEu=ro=F`==^(b%?BNbYfU~<M_+_peYk-LvvZjp9!5 zk)~*g4NYn#DsHyzgPVAhoF;MBcDvbszk>@YQi3Q^)Mj&zBMO8*0E59dgTat^^lpSl z)3eL+?1wAPMj_&oi&6Q{kqQwF=_rsCF~vsZ+tJVC=fxr|vUGWVK}9(Ju83FHNnS=} zTI5h9amdC$f5c^RnJmtKEq??+*#KmK$b^FC4Aw6c6IZL*EJGYxt?FRHJxCk{K?8=u zAJ%ZcP=a;!v!p!x*BOB-ctq-f2!#Y;qc@+vCBe?`z7A&4OitNuF~v`{4ytgbL! zEzT((S3(9@9NCiVq)Zk|GvKO+8^RgyU3 zk$|klPMHUV!c`6O!ZW=AVpvoaQrDj%&tB^*IgX<&OD49ooS9)3tLd!W?PjM4ricct zPq+B_e}$yuzj`_sBC_tB(LK{{TDrPnOSDMJwK8MOJ%9u;S_8Vl&fBwR%A#ypSOLtU zSBVB1T`;26T#POVL7@;9qnstS8Kt0^P*N)di9%eD@AnT+cgVN0DCnrHYRyeA65q&l zyL>}GTSx+luon4GASh|OECiy0wR_BGiDe6)f6`Ho6sraF>^y+UQSf;o+4wK#7o54W z?RlpP1&sHZ_UB%0CaqvbN4=9&rZ_hp&P*FupD zNle;8d6oej7tF$OLC2HiDq3ab(iXppvQ=U)r|GLCx0jbmR_MOm*q=mh2F<-I+so?~ ze=MtD?GK*$L?k(4q?W<=W^H`$5x7DM(?0UHvxp4fb93!ma#SE*lS-Myv%JWP>1*42 z5F+-dyU_Yq_vOu}`$r$JLL{tJE6OJxpbOw(qkwjDq+6$7vk$-d*AH9Ma-3vNC8p78 znm|_rM^|N5Bn$=WcT9D{?^lN@G}h%OAM4Tg>@ z2eEArLt$7^3IbG0tfX4z%2_+rWD|-4$S2kEaix-(|P|xqIkXq{nroZ6>Nk zN-5&7Vp@xol?%<~yO-*bvS`|%e|o7lI{^9=Wuil$dN;c!=3|&`#j{@(B#@>47u|i zLouGE(^;}CZK;`STVDB;rfyW)!kg4M8c=rWe!g0oEfSPm6$|TR64>YAe+|!j%N^0~ zRGP=xY6(8&ZnvaTvLW;02uDK%!#taT5JtgZiHU%ng0h5yl`l6L>)pru-)=u2R<%&ONv}6XhaO3VD52G!T}Ni56zx5+ zF5=_rmSrJba%uF=mPYo&F`2&G*d1%C!flcQ;8|hV4ED9NG@jW@6B$zBI4|t?tjMR9 z8gWg3*bv$zbzkzLw7=0iW?M8ZiixjLyK!FX{kEpT4wV})OBH_se}n)9AH;zJF^s}d zJ<;JwNKi*RVV||Zf{(XPe>~hi-7VnTeFys;*Ac(g(r~?RujmgaW`1KGnVxoRw2qaC zm&KYLQC%d~yHO8`Q5}jM$YJ|2_EH$eFd=f7-_{$$DueVX18gTSR)?FoD;E-KsW?ny zZ6~jP!2*AU|GWnkf2{!UB*~X)2_zU0OOg6Bx-{`RO-K4`Ije5e5q%qER#c6zTUA$c z>(_CHD5zD7y{?jEQqC4D7h}qb%g9BdmdRA}tczU&hWT8F2KBc|GB0PIffGeQHg$;Q zt7pXE7Sr16EejtAL1OI~e|p%>>e-OBWwRDmlF;@(n-Eb$f ze%Vc{$92NXsvO1@;NTlOl}Ad^$HuJzsNFi)yUA@X<_c7ll3`?g2*^G*=1_r3I>@2y zkFlGLc_2_A!ai(#!EvA+NRHL`Z_iD9U6<%Hm?+Jc_QrKlAA7((@Jg@KJj#~#>y85h zB0{7{&228ae>A^+>)W}9=G1L{2uLgwQwp1YqBf7?B7G*SM73Xst9*5RnJnDtVMxs$ z-MAz6c4R-+bWfGER1KxYRfXni!`SmAE&)yW9NBtn-)8=@s1B=&r8}-lbNiX-W`D9B zT6RP%hp3aIRt-Xiu?VH~p7k7_$4}adh&F%Q5+X5lP{oe*|;$9wWX2x<lRT5zP~I*$hS9+SkU zg8^FSpF|eaSyt0<;iAVn21hnhO)ghyrb8=1(8xMzc7hY6c*vp><91E&6~WKpJWjGK1Y3|{9jai*&1QnGlZ z<5XZW8l%wnW9>8OVja)d1(S5C1+q$)v+5UBV1F}ORy#i??<9_0Zdm;KoSSf1M>v1T ze@bzNLqkYBES^6U!z_B(7IPs^VSN~AF_yexeg5oaeU9vkmpd2_5a#q7o1bHa>9aqr z5p>v}{%vj>Am(BtgDlV?AbU*^1!Ibjx2EJMj1Dyd_YQ|nrQ@rL6*faPFmTyQ89dDG zs;6+ks4FS}2!_=#IvI#zCXfh3Bss+fe}NH&01LKs>dWY-9>xgz(O{zJ|p{)MLPRLUro|dpSkMGWptHjAJx>G z>WG`Gljgo080}6fb#R(^ZphFyUKI1SQEETf0XAiQ#Bj*+@ulW7Bv`-1d>7%vW~ +
  1. Hurricane/Analog Reference
  2. +
  3. Oroshi Reference
  4. LEF API Reference
    • Implementation Notes
      • Understanding Units
      • @@ -1117,7 +1119,7 @@ Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/CrlCore/CrlCore.html b/documentation/_build/html/CrlCore/CrlCore.html index 15bee972..794c90c1 100644 --- a/documentation/_build/html/CrlCore/CrlCore.html +++ b/documentation/_build/html/CrlCore/CrlCore.html @@ -449,6 +449,8 @@
    • +
    • Hurricane/Analog Reference
    • +
    • Oroshi Reference
    • LEF API Reference
      • Implementation Notes
        • Understanding Units
        • @@ -521,7 +523,7 @@ available here: Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/Hurricane/Hurricane.html b/documentation/_build/html/Hurricane/Hurricane.html index 8220e16a..b8df04eb 100644 --- a/documentation/_build/html/Hurricane/Hurricane.html +++ b/documentation/_build/html/Hurricane/Hurricane.html @@ -449,6 +449,8 @@
      • +
      • Hurricane/Analog Reference
      • +
      • Oroshi Reference
      • LEF API Reference
        • Implementation Notes
          • Understanding Units
          • @@ -521,7 +523,7 @@ available here: Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/Katabatic/Katabatic.html b/documentation/_build/html/Katabatic/Katabatic.html index ad58e2f4..6792a90e 100644 --- a/documentation/_build/html/Katabatic/Katabatic.html +++ b/documentation/_build/html/Katabatic/Katabatic.html @@ -449,6 +449,8 @@
        • +
        • Hurricane/Analog Reference
        • +
        • Oroshi Reference
        • LEF API Reference
          • Implementation Notes
            • Understanding Units
            • @@ -526,7 +528,7 @@ mixed signal conterpart Anabatic.

              Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/Kite/Kite.html b/documentation/_build/html/Kite/Kite.html index 384e0afc..fb06bb58 100644 --- a/documentation/_build/html/Kite/Kite.html +++ b/documentation/_build/html/Kite/Kite.html @@ -449,6 +449,8 @@
          • +
          • Hurricane/Analog Reference
          • +
          • Oroshi Reference
          • LEF API Reference
            • Implementation Notes
              • Understanding Units
              • @@ -526,7 +528,7 @@ mixed-signal conterpart Katana (Kit[e]-Ana[logic]).

                Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonCpp/Configuration.html b/documentation/_build/html/PythonCpp/Configuration.html index defb4e52..eaa8811b 100644 --- a/documentation/_build/html/PythonCpp/Configuration.html +++ b/documentation/_build/html/PythonCpp/Configuration.html @@ -450,6 +450,8 @@
            • +
            • Hurricane/Analog Reference
            • +
            • Oroshi Reference
            • LEF API Reference
              • Implementation Notes
                • Understanding Units
                • @@ -554,7 +556,7 @@ associated C++ namespace. Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonCpp/DBoHierarchy.html b/documentation/_build/html/PythonCpp/DBoHierarchy.html index 13c2a87f..edf13516 100644 --- a/documentation/_build/html/PythonCpp/DBoHierarchy.html +++ b/documentation/_build/html/PythonCpp/DBoHierarchy.html @@ -450,6 +450,8 @@
              • +
              • Hurricane/Analog Reference
              • +
              • Oroshi Reference
              • LEF API Reference
                • Implementation Notes
                  • Understanding Units
                  • @@ -926,7 +928,7 @@ terminal or not. Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonCpp/DBoStandalone.html b/documentation/_build/html/PythonCpp/DBoStandalone.html index 59fb7916..89ac9da2 100644 --- a/documentation/_build/html/PythonCpp/DBoStandalone.html +++ b/documentation/_build/html/PythonCpp/DBoStandalone.html @@ -450,6 +450,8 @@
                • +
                • Hurricane/Analog Reference
                • +
                • Oroshi Reference
                • LEF API Reference
                  • Implementation Notes
                    • Understanding Units
                    • @@ -856,7 +858,7 @@ the module itself. This allow to mimic closely the C++ syntax:

                      Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonCpp/DbU.html b/documentation/_build/html/PythonCpp/DbU.html index ae066e04..903d0ef3 100644 --- a/documentation/_build/html/PythonCpp/DbU.html +++ b/documentation/_build/html/PythonCpp/DbU.html @@ -450,6 +450,8 @@
                  • +
                  • Hurricane/Analog Reference
                  • +
                  • Oroshi Reference
                  • LEF API Reference
                    • Implementation Notes
                      • Understanding Units
                      • @@ -570,7 +572,7 @@ the DbU::Unit  Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonCpp/Introduction.html b/documentation/_build/html/PythonCpp/Introduction.html index b20c0fd9..daa120e0 100644 --- a/documentation/_build/html/PythonCpp/Introduction.html +++ b/documentation/_build/html/PythonCpp/Introduction.html @@ -450,6 +450,8 @@
                    • +
                    • Hurricane/Analog Reference
                    • +
                    • Oroshi Reference
                    • LEF API Reference
                      • Implementation Notes
                        • Understanding Units
                        • @@ -684,7 +686,7 @@ like in the code below:

                          Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonCpp/Name.html b/documentation/_build/html/PythonCpp/Name.html index 1af26333..a109d7ef 100644 --- a/documentation/_build/html/PythonCpp/Name.html +++ b/documentation/_build/html/PythonCpp/Name.html @@ -450,6 +450,8 @@
                      • +
                      • Hurricane/Analog Reference
                      • +
                      • Oroshi Reference
                      • LEF API Reference
                        • Implementation Notes
                          • Understanding Units
                          • @@ -523,7 +525,7 @@ Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonCpp/NonDBo.html b/documentation/_build/html/PythonCpp/NonDBo.html index b54518f5..e489aa0f 100644 --- a/documentation/_build/html/PythonCpp/NonDBo.html +++ b/documentation/_build/html/PythonCpp/NonDBo.html @@ -450,6 +450,8 @@
                        • +
                        • Hurricane/Analog Reference
                        • +
                        • Oroshi Reference
                        • LEF API Reference
                          • Implementation Notes
                            • Understanding Units
                            • @@ -673,7 +675,7 @@ a standalone DBo Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonCpp/index.html b/documentation/_build/html/PythonCpp/index.html index 4f801e70..9f631268 100644 --- a/documentation/_build/html/PythonCpp/index.html +++ b/documentation/_build/html/PythonCpp/index.html @@ -449,6 +449,8 @@
                          • +
                          • Hurricane/Analog Reference
                          • +
                          • Oroshi Reference
                          • LEF API Reference
                            • Implementation Notes
                              • Understanding Units
                              • @@ -555,7 +557,7 @@ Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonTutorial/AdvancedTopics.html b/documentation/_build/html/PythonTutorial/AdvancedTopics.html index b0d9125e..e2172130 100644 --- a/documentation/_build/html/PythonTutorial/AdvancedTopics.html +++ b/documentation/_build/html/PythonTutorial/AdvancedTopics.html @@ -450,6 +450,8 @@
                            • +
                            • Hurricane/Analog Reference
                            • +
                            • Oroshi Reference
                            • LEF API Reference
                              • Implementation Notes
                                • Understanding Units
                                • @@ -542,7 +544,7 @@ go through all the components of a trans-hierarchical net.

                                  Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonTutorial/CellNetComponent.html b/documentation/_build/html/PythonTutorial/CellNetComponent.html index 38d3fbd8..f0e48048 100644 --- a/documentation/_build/html/PythonTutorial/CellNetComponent.html +++ b/documentation/_build/html/PythonTutorial/CellNetComponent.html @@ -450,6 +450,8 @@
                              • +
                              • Hurricane/Analog Reference
                              • +
                              • Oroshi Reference
                              • LEF API Reference
                                • Implementation Notes
                                  • Understanding Units
                                  • @@ -833,7 +835,7 @@ explanation of that part of the code, refer to Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonTutorial/CgtScript.html b/documentation/_build/html/PythonTutorial/CgtScript.html index e74eabaa..e2f65ce1 100644 --- a/documentation/_build/html/PythonTutorial/CgtScript.html +++ b/documentation/_build/html/PythonTutorial/CgtScript.html @@ -450,6 +450,8 @@
                                • +
                                • Hurricane/Analog Reference
                                • +
                                • Oroshi Reference
                                • LEF API Reference
                                  • Implementation Notes
                                    • Understanding Units
                                    • @@ -592,7 +594,7 @@ The Breakpoint.stop() Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonTutorial/Collections.html b/documentation/_build/html/PythonTutorial/Collections.html index 999869a4..ad22aa00 100644 --- a/documentation/_build/html/PythonTutorial/Collections.html +++ b/documentation/_build/html/PythonTutorial/Collections.html @@ -450,6 +450,8 @@
                                  • +
                                  • Hurricane/Analog Reference
                                  • +
                                  • Oroshi Reference
                                  • LEF API Reference
                                    • Implementation Notes
                                      • Understanding Units
                                      • @@ -593,7 +595,7 @@ they may unexpectedly shadow cells from the libraries.

                                        Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonTutorial/Environment.html b/documentation/_build/html/PythonTutorial/Environment.html index 67f9e56b..caa290f8 100644 --- a/documentation/_build/html/PythonTutorial/Environment.html +++ b/documentation/_build/html/PythonTutorial/Environment.html @@ -450,6 +450,8 @@
                                    • +
                                    • Hurricane/Analog Reference
                                    • +
                                    • Oroshi Reference
                                    • LEF API Reference
                                      • Implementation Notes
                                        • Understanding Units
                                        • @@ -598,7 +600,7 @@ in CGT - The Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonTutorial/Introduction.html b/documentation/_build/html/PythonTutorial/Introduction.html index aa0f52e2..fac04da2 100644 --- a/documentation/_build/html/PythonTutorial/Introduction.html +++ b/documentation/_build/html/PythonTutorial/Introduction.html @@ -450,6 +450,8 @@
                                      • +
                                      • Hurricane/Analog Reference
                                      • +
                                      • Oroshi Reference
                                      • LEF API Reference
                                        • Implementation Notes
                                          • Understanding Units
                                          • @@ -655,7 +657,7 @@ to be explicitly deleted.

                                            Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonTutorial/Netlist.html b/documentation/_build/html/PythonTutorial/Netlist.html index 004c2510..015abd39 100644 --- a/documentation/_build/html/PythonTutorial/Netlist.html +++ b/documentation/_build/html/PythonTutorial/Netlist.html @@ -450,6 +450,8 @@
                                        • +
                                        • Hurricane/Analog Reference
                                        • +
                                        • Oroshi Reference
                                        • LEF API Reference
                                          • Implementation Notes
                                            • Understanding Units
                                            • @@ -881,7 +883,7 @@ directory (under the the root of the Coriolis installati Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonTutorial/RealDesigns.html b/documentation/_build/html/PythonTutorial/RealDesigns.html index a2a6f190..45497ca5 100644 --- a/documentation/_build/html/PythonTutorial/RealDesigns.html +++ b/documentation/_build/html/PythonTutorial/RealDesigns.html @@ -450,6 +450,8 @@
                                          • +
                                          • Hurricane/Analog Reference
                                          • +
                                          • Oroshi Reference
                                          • LEF API Reference
                                            • Implementation Notes
                                              • Understanding Units
                                              • @@ -559,7 +561,7 @@ the one of the FreePDK45, you must load it prior to calling the Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonTutorial/ToolEngines.html b/documentation/_build/html/PythonTutorial/ToolEngines.html index 26f290f7..fd37ca79 100644 --- a/documentation/_build/html/PythonTutorial/ToolEngines.html +++ b/documentation/_build/html/PythonTutorial/ToolEngines.html @@ -450,6 +450,8 @@
                                            • +
                                            • Hurricane/Analog Reference
                                            • +
                                            • Oroshi Reference
                                            • LEF API Reference
                                              • Implementation Notes
                                                • Understanding Units
                                                • @@ -722,7 +724,7 @@ case it is around 3% Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonTutorial/definitions.html b/documentation/_build/html/PythonTutorial/definitions.html index 106edb6b..7514ce01 100644 --- a/documentation/_build/html/PythonTutorial/definitions.html +++ b/documentation/_build/html/PythonTutorial/definitions.html @@ -447,6 +447,8 @@
                                              • +
                                              • Hurricane/Analog Reference
                                              • +
                                              • Oroshi Reference
                                              • LEF API Reference
                                                • Implementation Notes
                                                  • Understanding Units
                                                  • @@ -505,7 +507,7 @@ Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonTutorial/index.html b/documentation/_build/html/PythonTutorial/index.html index f48ffc8a..ea3e3f44 100644 --- a/documentation/_build/html/PythonTutorial/index.html +++ b/documentation/_build/html/PythonTutorial/index.html @@ -449,6 +449,8 @@
                                                • +
                                                • Hurricane/Analog Reference
                                                • +
                                                • Oroshi Reference
                                                • LEF API Reference
                                                  • Implementation Notes
                                                    • Understanding Units
                                                    • @@ -584,7 +586,7 @@ and hierarchical design.

                                                      Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/PythonTutorial/pdfHeader.html b/documentation/_build/html/PythonTutorial/pdfHeader.html index 1430c7de..a31646bc 100644 --- a/documentation/_build/html/PythonTutorial/pdfHeader.html +++ b/documentation/_build/html/PythonTutorial/pdfHeader.html @@ -447,6 +447,8 @@
                                                  • +
                                                  • Hurricane/Analog Reference
                                                  • +
                                                  • Oroshi Reference
                                                  • LEF API Reference
                                                    • Implementation Notes
                                                      • Understanding Units
                                                      • @@ -520,7 +522,7 @@ and hierarchical design.

                                                        Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/RDS/RDSpage.html b/documentation/_build/html/RDS/RDSpage.html index 1a9a46a9..344f2d36 100644 --- a/documentation/_build/html/RDS/RDSpage.html +++ b/documentation/_build/html/RDS/RDSpage.html @@ -35,7 +35,7 @@ - + @@ -450,6 +450,8 @@
                                                    • +
                                                    • Hurricane/Analog Reference
                                                    • +
                                                    • Oroshi Reference
                                                    • LEF API Reference
                                                      • Implementation Notes
                                                        • Understanding Units
                                                        • @@ -965,7 +967,7 @@ wire width and minimal spacing for the routers. They are patly redundant.

                                                      • +
                                                      • Hurricane/Analog Reference
                                                      • +
                                                      • Oroshi Reference
                                                      • LEF API Reference
                                                        • Implementation Notes
                                                          • Understanding Units
                                                          • @@ -539,7 +541,7 @@ Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/Unicorn/Unicorn.html b/documentation/_build/html/Unicorn/Unicorn.html index 8d2eda40..def7a2b6 100644 --- a/documentation/_build/html/Unicorn/Unicorn.html +++ b/documentation/_build/html/Unicorn/Unicorn.html @@ -449,6 +449,8 @@
                                                        • +
                                                        • Hurricane/Analog Reference
                                                        • +
                                                        • Oroshi Reference
                                                        • LEF API Reference
                                                          • Implementation Notes
                                                            • Understanding Units
                                                            • @@ -521,7 +523,7 @@ available here: Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/UsersGuide/Configuration.html b/documentation/_build/html/UsersGuide/Configuration.html index 4cefa0df..b6517553 100644 --- a/documentation/_build/html/UsersGuide/Configuration.html +++ b/documentation/_build/html/UsersGuide/Configuration.html @@ -450,6 +450,8 @@
                                                          • +
                                                          • Hurricane/Analog Reference
                                                          • +
                                                          • Oroshi Reference
                                                          • LEF API Reference
                                                            • Implementation Notes
                                                              • Understanding Units
                                                              • @@ -863,7 +865,7 @@ in <CWD>/.coriolis2/settings.py (that is, written Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/UsersGuide/Installation.html b/documentation/_build/html/UsersGuide/Installation.html index 801e4055..c6d39bed 100644 --- a/documentation/_build/html/UsersGuide/Installation.html +++ b/documentation/_build/html/UsersGuide/Installation.html @@ -450,6 +450,8 @@
                                                            • +
                                                            • Hurricane/Analog Reference
                                                            • +
                                                            • Oroshi Reference
                                                            • LEF API Reference
                                                              • Implementation Notes
                                                                • Understanding Units
                                                                • @@ -771,7 +773,7 @@ infinite loop if it’s called again in, say ~/.bashrc Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/UsersGuide/LicenseCredits.html b/documentation/_build/html/UsersGuide/LicenseCredits.html index 82be8e9d..50f31433 100644 --- a/documentation/_build/html/UsersGuide/LicenseCredits.html +++ b/documentation/_build/html/UsersGuide/LicenseCredits.html @@ -450,6 +450,8 @@
                                                              • +
                                                              • Hurricane/Analog Reference
                                                              • +
                                                              • Oroshi Reference
                                                              • LEF API Reference
                                                                • Implementation Notes
                                                                  • Understanding Units
                                                                  • @@ -548,7 +550,7 @@ copyright© Chris C. N. Chu from the Iowa State Universi Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/UsersGuide/Releases.html b/documentation/_build/html/UsersGuide/Releases.html index 83513427..462dbde7 100644 --- a/documentation/_build/html/UsersGuide/Releases.html +++ b/documentation/_build/html/UsersGuide/Releases.html @@ -450,6 +450,8 @@
                                                                • +
                                                                • Hurricane/Analog Reference
                                                                • +
                                                                • Oroshi Reference
                                                                • LEF API Reference
                                                                  • Implementation Notes
                                                                    • Understanding Units
                                                                    • @@ -605,7 +607,7 @@ whole design down and including the standard cells. Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/UsersGuide/ScriptsPlugins.html b/documentation/_build/html/UsersGuide/ScriptsPlugins.html index 703dd085..e23f13df 100644 --- a/documentation/_build/html/UsersGuide/ScriptsPlugins.html +++ b/documentation/_build/html/UsersGuide/ScriptsPlugins.html @@ -450,6 +450,8 @@
                                                                  • +
                                                                  • Hurricane/Analog Reference
                                                                  • +
                                                                  • Oroshi Reference
                                                                  • LEF API Reference
                                                                    • Implementation Notes
                                                                      • Understanding Units
                                                                      • @@ -903,7 +905,7 @@ then run the Python script doChip.py Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/UsersGuide/ViewerTools.html b/documentation/_build/html/UsersGuide/ViewerTools.html index 6ec8ab8d..636851c7 100644 --- a/documentation/_build/html/UsersGuide/ViewerTools.html +++ b/documentation/_build/html/UsersGuide/ViewerTools.html @@ -450,6 +450,8 @@
                                                                    • +
                                                                    • Hurricane/Analog Reference
                                                                    • +
                                                                    • Oroshi Reference
                                                                    • LEF API Reference
                                                                      • Implementation Notes
                                                                        • Understanding Units
                                                                        • @@ -1395,7 +1397,7 @@ is deleted, you will crash the application...

                                                                          Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/UsersGuide/index.html b/documentation/_build/html/UsersGuide/index.html index 048ab1ea..5d60fbbc 100644 --- a/documentation/_build/html/UsersGuide/index.html +++ b/documentation/_build/html/UsersGuide/index.html @@ -449,6 +449,8 @@
                                                                      • +
                                                                      • Hurricane/Analog Reference
                                                                      • +
                                                                      • Oroshi Reference
                                                                      • LEF API Reference
                                                                        • Implementation Notes
                                                                          • Understanding Units
                                                                          • @@ -560,7 +562,7 @@ Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/Viewer/Viewer.html b/documentation/_build/html/Viewer/Viewer.html index 6b62adf9..a6743e60 100644 --- a/documentation/_build/html/Viewer/Viewer.html +++ b/documentation/_build/html/Viewer/Viewer.html @@ -449,6 +449,8 @@
                                                                        • +
                                                                        • Hurricane/Analog Reference
                                                                        • +
                                                                        • Oroshi Reference
                                                                        • LEF API Reference
                                                                          • Implementation Notes
                                                                            • Understanding Units
                                                                            • @@ -521,7 +523,7 @@ available here: Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/_sources/etc/definitions.txt b/documentation/_build/html/_sources/etc/definitions.txt index f15293f2..013d3088 100644 --- a/documentation/_build/html/_sources/etc/definitions.txt +++ b/documentation/_build/html/_sources/etc/definitions.txt @@ -68,7 +68,6 @@ .. |MIPS| replace:: :sc:`mips` .. |Am2901| replace:: :sc:`Am2901` .. |Hurricane| replace:: :sc:`Hurricane` -.. |HurricaneAMS| replace:: :sc:`HurricaneAMS` .. |CRL| replace:: :sc:`crl` .. |Alliance| replace:: :sc:`Alliance` .. |Yosys| replace:: :sc:`Yosys` @@ -98,7 +97,6 @@ .. |cgt| replace:: :cb:`cgt` .. |Chams| replace:: :sc:`Chams` .. |OpenChams| replace:: :sc:`OpenChams` -.. |Pharos| replace:: :cb:`Pharos` .. |API| replace:: :sc:`api` .. |STL| replace:: :sc:`stl` .. |XML| replace:: :sc:`xml` diff --git a/documentation/_build/html/_sources/index.txt b/documentation/_build/html/_sources/index.txt index a690b796..dfb158f6 100644 --- a/documentation/_build/html/_sources/index.txt +++ b/documentation/_build/html/_sources/index.txt @@ -23,12 +23,13 @@ Contents: Unicorn/Unicorn.rst PythonCpp/index.rst RDS/index.rst + Analog/Analog.rst + Oroshi/Oroshi.rst lefapi/lefapi.rst defapi/defapi.rst lefdef/lefdef.rst - Indices and tables ================== diff --git a/documentation/_build/html/defapi/defapi.html b/documentation/_build/html/defapi/defapi.html index 87bd0ddc..38681ee6 100644 --- a/documentation/_build/html/defapi/defapi.html +++ b/documentation/_build/html/defapi/defapi.html @@ -449,6 +449,8 @@
                                                                          • +
                                                                          • Hurricane/Analog Reference
                                                                          • +
                                                                          • Oroshi Reference
                                                                          • LEF API Reference
                                                                            • Implementation Notes
                                                                              • Understanding Units
                                                                              • @@ -522,7 +524,7 @@ under the Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/etc/definitions.html b/documentation/_build/html/etc/definitions.html index acb22749..0b061fd4 100644 --- a/documentation/_build/html/etc/definitions.html +++ b/documentation/_build/html/etc/definitions.html @@ -447,6 +447,8 @@
                                                                            • +
                                                                            • Hurricane/Analog Reference
                                                                            • +
                                                                            • Oroshi Reference
                                                                            • LEF API Reference
                                                                              • Implementation Notes
                                                                                • Understanding Units
                                                                                • @@ -505,7 +507,7 @@ Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/genindex.html b/documentation/_build/html/genindex.html index 149878c1..f10b7b19 100644 --- a/documentation/_build/html/genindex.html +++ b/documentation/_build/html/genindex.html @@ -448,6 +448,8 @@
                                                                              • +
                                                                              • Hurricane/Analog Reference
                                                                              • +
                                                                              • Oroshi Reference
                                                                              • LEF API Reference
                                                                                • Implementation Notes
                                                                                  • Understanding Units
                                                                                  • @@ -512,7 +514,7 @@ Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/index.html b/documentation/_build/html/index.html index fce82475..12dfa7ec 100644 --- a/documentation/_build/html/index.html +++ b/documentation/_build/html/index.html @@ -448,6 +448,8 @@
                                                                                • +
                                                                                • Hurricane/Analog Reference
                                                                                • +
                                                                                • Oroshi Reference
                                                                                • LEF API Reference
                                                                                  • Implementation Notes
                                                                                    • Understanding Units
                                                                                    • @@ -496,7 +498,7 @@

                                                                                      Coriolis 2 documentation

                                                                                      - Documentation generated on Aug 19, 2018. + Documentation generated on Oct 01, 2018.

                                                                                      Documentation Topics

                                                                                      @@ -594,7 +596,7 @@ Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/lefapi/lefapi.html b/documentation/_build/html/lefapi/lefapi.html index 9930b1c1..1e3b0dbe 100644 --- a/documentation/_build/html/lefapi/lefapi.html +++ b/documentation/_build/html/lefapi/lefapi.html @@ -35,7 +35,7 @@ - + @@ -449,6 +449,8 @@
                                                                                  • +
                                                                                  • Hurricane/Analog Reference
                                                                                  • +
                                                                                  • Oroshi Reference
                                                                                  • LEF API Reference
                                                                                    • Implementation Notes
                                                                                      • Understanding Units
                                                                                      • @@ -541,7 +543,7 @@ and configured when the subsequent Next - Previous + Previous @@ -553,7 +555,7 @@ and configured when the subsequent Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/lefdef/lefdef.html b/documentation/_build/html/lefdef/lefdef.html index 4f84a75f..2ef2c4c9 100644 --- a/documentation/_build/html/lefdef/lefdef.html +++ b/documentation/_build/html/lefdef/lefdef.html @@ -448,6 +448,8 @@
                                                                                    • +
                                                                                    • Hurricane/Analog Reference
                                                                                    • +
                                                                                    • Oroshi Reference
                                                                                    • LEF API Reference
                                                                                      • Implementation Notes
                                                                                        • Understanding Units
                                                                                        • @@ -519,7 +521,7 @@ under the Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/objects.inv b/documentation/_build/html/objects.inv index 8ac628540c573bc880346c383c50aff80d44fb11..63cb1e71defc018ff1f00d159c51aca58bec5d3f 100644 GIT binary patch delta 1549 zcmV+o2J-pQ4Dt++cz>8tZ`(EyfZzQqI26cQw6c(N>$YGRkUD7^EbW5WX&(n#qHUry zDUeiJ|N9+vBt=P<8+Q+_ZQk8?$J6n6%IoPVF}6GxbjbwCPRZTQZj_u=Ret$a%`KHB z6-u({#%{$kUY?TIU@;Ta7;<5ZDmb;QB<~q5nI`YJU=ycMG=B=TRoI}y3KWj;*I=?1 zlOZN+Fi!~NY#7M@jljD;8@l#B-yD_C*Cd-SpC4@CJo~dmGx*H}9e`I7qm#`PLidvJI7Bi(;?ms)EuE+!LZ%L!r zM$rZszonQx;(y-864u|;(j~RL$m6$^wMUGsRy$#F%X0T$hY%LMofEev|7c}4JjajJ ztRp~Euhbg1&mFS6;_F&NKuV^V5fucUP03qoU<ur*{F3W&@;&@YS>snMiU zXYV=FR2Q4wes`$`di!NcX4EipMl#YGLur62xnvs3rGLbVXJ#@|(xbk5RS%~Jot=WS zg#U`Pim8v~!w7l#fV?+TawQ8|nOZ?%^5-yh|`?eq3 zi27#_#ecaA{o?M1ENZJXr@|A%&-|i%q)_DLLRGvlL;i>&di!Ha!ZN}2K7Pi8_{gkl zSFkH-4>;(n#tMTY;!1(~^k^twP$gMLZs|_dcHnbu=Y{6gL1#fHK8)rdQex0j*HSh; z)o!$^*Ber-hkle0tSPEPc}uk70sTNFuR@8t&3~9z1h#IlC4>YFl6fT`xmI#}IFE@| z>_2m68((z=8)76;>H9c*#P+HkI%m-UwkNnb6t~xijUYbujqhSm*CIZ8uibZZU$ zhOZAklSC^X^Uq2*{#AK^V)~7F&5?6A~B|Ah4yiF@OJxoD397eLuIpZs`m%07 z4`xp&chp*@yVcc~Atq|VL8ze-?!^tBKu6Gx=RBNQxc91N019zW9waZ6mbw2-fjto- zgI+tMx#&z2+xU<+rV}P=&7n#R>Dr$_SA(NQL4r4ZLb;K~QXvjGN>$KLx{|_fd4B=J zJez4&^6un6s^kOr7AM3@Q|dhv45o}RUJ(29g1=xKu`nAZYIs$eJ5fUe8)J2qd=cSk zhl_#f6)hN9DV@wHdCYq1?GtBTnRXp>%vGY{b8x+YF=_!<+qI?@-W1Vk${rMKU)C#z zPSvAZ?>&Wd1W52oZG}?bX5jrgjb_58#9qbXLu#X%+de*HVTIViHvE#NFXoY+BTkWzSK*9&?n18tQYA5&- z=9k^Sg3B+}&h9Gq{KXM}S%`qF1&|E5&C%lVXhHglP_|>mwdagJLr@k$nN?W?J^cXt zcyN9;?qY?Jc{Gsz2@X+sbBHE$=2zcXQ8$yT4`klrVT7L;<_5#A7hLmq56bV{CF2HP zc+rLt6$Wzs^vJ+2OYB^enSaHf4Ryr@q=#6#JdTQXnX_}$cZgZgWkZDrRKbgb`T=k> zjqIBU3wS|y06AH!_@y`PT<&wd-6$Sw9C-yQ-CxIlLr3)p5ORhm9qM} delta 1515 zcmV5sZ`(EyfZzQqI26cQw6c(N>$YGRkUD7+EG>fAX&(n#qHUry zDUeiF|N9+vBt=P<8+Q+_Bi-G1$K&yMdOJNO#+K)TE}0q^Nc{whJpOw2)ygFp=q88wWYk&Lv)u)Cm2E}4cM zFR|K~nT(XvsIOkdLFJ;eQ*f5>-;h=@^|5>$Auk`1_kV6mu4F+gQwzw2ToaHafLm#` zDj|KN=}$Efc{(NO%Y^ocZbw$?BxwEHlzdWT_WE^OnCIt>A#3C8Qk8U>*w1ZbNdDEQ z4vs9ikeM?|b^v!M;c{8BZ~L*0sDFG=oV(C3?r+JWwn}p}UuNWdVOSMrH#CAWw3m}tfRGiSE(RadYeMt>5OzK_F4Y_Hm(a~2I?d4iimaeIx} z2;#PHd>4bd7IEvncHhkdqvDbozCO4oiB>%3UzBeAaY;0Y$ySxDPhTh{uH>3ac8H#6 zA^rC$aqmbleHre{SA7R1TXD(1S5k=q&U5%z(RHU6C$Et(-))ylz$NO>yi*t~F1|z?cyy%_O|2qs=iQw1#I$i0 z4!eCJ1a~cL0yi_YwaG8p6BDYcx(ggiePH;WwC{g5AGo(TAzqqNADCb;WsLEH*q;}Cf`4(u z!fcqR;Z+1K+M9w3hf;cd#^H1k=o$ zhK>cFr|x+I_W`YVjz4K!9f9vNSAQRxd9V$P*<$S8>4^rH4YaE^p>Z+cZK!wnb27+# zqVa`^Lcv50?K$KfQVx2x8&H}&{4^1`6fsz1M}WY)!5Tpd>&Wq^XWa^-b?&khJ8p}C zR=8)q)h-JHBz(kx&0n#W;{sWf6$%<89
                                                                                      • +
                                                                                      • Hurricane/Analog Reference
                                                                                      • +
                                                                                      • Oroshi Reference
                                                                                      • LEF API Reference
                                                                                        • Implementation Notes
                                                                                          • Understanding Units
                                                                                          • @@ -515,7 +517,7 @@ Generated by Sphinx - using a RTD theme on Aug 19, 2018. + using a RTD theme on Oct 01, 2018. diff --git a/documentation/_build/html/searchindex.js b/documentation/_build/html/searchindex.js index d87ae880..fd166bf4 100644 --- a/documentation/_build/html/searchindex.js +++ b/documentation/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:49,filenames:["Contents","CrlCore/CrlCore","Hurricane/Hurricane","Katabatic/Katabatic","Kite/Kite","PythonCpp/Configuration","PythonCpp/DBoHierarchy","PythonCpp/DBoStandalone","PythonCpp/DbU","PythonCpp/Introduction","PythonCpp/Name","PythonCpp/NonDBo","PythonCpp/index","PythonTutorial/AdvancedTopics","PythonTutorial/CellNetComponent","PythonTutorial/CgtScript","PythonTutorial/Collections","PythonTutorial/Environment","PythonTutorial/Introduction","PythonTutorial/Netlist","PythonTutorial/RealDesigns","PythonTutorial/ToolEngines","PythonTutorial/definitions","PythonTutorial/index","PythonTutorial/pdfHeader","RDS/RDSpage","RDS/index","Stratus/Developper","Stratus/DpGen","Stratus/Language","Stratus/Patterns","Stratus/index","Unicorn/Unicorn","UsersGuide/Configuration","UsersGuide/Installation","UsersGuide/LicenseCredits","UsersGuide/Releases","UsersGuide/ScriptsPlugins","UsersGuide/ViewerTools","UsersGuide/index","Viewer/Viewer","defapi/defapi","etc/definitions","index","lefapi/lefapi","lefdef/lefdef"],objects:{},objnames:{},objtypes:{},terms:{"005\u00b5m":25,"01\u00b5m":44,"09\u00b5m":25,"0b0001":28,"0b000111":28,"0b0010":29,"0b0110":29,"0b10":29,"0b1001":29,"0b1010":28,"0b1100":28,"0b1110":29,"0b1111":28,"0x0000ffff":28,"0x14":29,"100k":38,"150k":38,"180nm":33,"18\u00b5m":25,"1\u00b5m":25,"2\u00b5m":25,"32b":34,"32x32":38,"45nm":[17,20],"64b":34,"abstract":6,"boolean":[0,7,27],"case":0,"catch":7,"char":7,"class":[0,5],"const":[28,29],"default":[6,17,25,27,28,29,30,33,34,37,38,44],"else":28,"export":[5,6,7,18,34,36,37],"final":[14,25,34,38],"float":[14,30,33],"function":[0,5,6,7,8,9,11],"goto":38,"import":[6,7,9,14,18,19,20,21,28,29,33,35,36,37,38],"int":11,"long":[8,18,38],"new":[6,7,11],"null":[6,7,8,9,11,28],"public":[18,36],"r\u00e9my":35,"return":[6,7,8,9,11,14,15,16,18,19,21,28,29,33,37,38],"short":9,"static":[6,7,8,9,11,18,20,28,34],"supp\u00e9rior":37,"transient":[14,44],"true":[14,15,17,19,21,25,27,28,29,33,37,38],"try":[14,29,33,38],"void":[6,7,11,18],"while":[8,14,16,18,19,38,44],__add__:27,__and__:27,__c:[6,7,9,11],__div__:27,__geslice__:27,__getitem__:27,__init__:27,__invert__:27,__le__:27,__main__:37,__mul__:27,__name__:37,__or__:27,__python_module:9,__python_module__:[6,9,11],__str__:18,__xor__:27,_add:27,_alia:27,_and:27,_ariti:27,_baseobject:6,_bl:37,_br:37,_buff:27,_chip:37,_clock:[33,37],_comp:27,_db:27,_direct:27,_div:27,_ext:27,_h_type:27,_hur_cel:27,_hur_inst:27,_hur_mastercel:27,_hur_net:27,_ind:27,_insref:27,_lib0:27,_map:27,_model:27,_mult:27,_mux:27,_name:[27,30],_nb_alims_vertical:27,_nb_inst:27,_nb_pin:27,_nb_vdd_pin:27,_nb_vss_pin:27,_not:27,_object:[6,7,8,11],_or:27,_param:27,_plac:27,_px:33,_pyobject:6,_real_model:27,_real_net:27,_reg:27,_shift:27,_st_cell:27,_st_ck:27,_st_inst:27,_st_mastercel:27,_st_merg:27,_st_port:27,_st_sig:27,_st_vdd:27,_st_vsss:27,_stim:29,_sym:27,_tab_nets_cat:27,_tab_nets_out:27,_tl:37,_to_cat:27,_to_merg:27,_tr:37,_type:27,_undercel:27,_xor:27,a2_1:[19,21],a2_2:[19,21],a2_x2:[19,21,29],abc:36,abil:29,abl:[9,15,18,20],about:[0,7],abov:[7,14,15,29,33,34,38],absolut:[11,14,30],abtument:29,abut:[14,19,21,29,37,38],abutmentbox:29,accept:[30,38],access:[6,16,19,29,30,34,36,38],access_class:6,access_object:6,accessor:7,accomod:37,accord:[25,33,37,38],accordingli:9,account:38,accross:9,accumul:30,accur:36,accuraci:38,achiev:36,acknowledg:28,across:[25,33,38],act:5,action:38,activ:[15,25,38],actual:[25,28,30,38],adapt:[17,37],add:[0,7,15,19],add_python_modul:[5,9],add_sub:28,addaccu:0,addd:29,added:36,adder:[28,29],adder_8:28,adding:7,addit:[17,28,29,33,38],addition:29,additionn:0,addmode:33,addpat:0,address:28,addtyp:[6,7],adjac:[13,37],adopt:14,adr:28,advis:38,adw:28,affect:0,affect_ani:0,affect_fix:0,affect_int:0,affili:36,after:[7,14,15,19,20,21,27,29,30,34,37,38],afterward:28,again:[6,7,17,20,34],against:[7,9,20,34,38],ago:9,aim:[18,36],alc_env:34,alexandr:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],algorithm:[16,36,38],alia:[17,27,29,34],alias:38,alim:29,alimconnector:29,aliment:[0,27],alimhorizontalrail:29,alimverticalrail:29,all:[7,9,13,14,16,18,19,21,25,27,29,30,33,34,35,36,37,38],allianc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25],alliance_top:33,allianceconfig:33,alliancetop:33,alloc:[7,18,38],allow:[7,13,14,16,19,25,28,29,30,33,38],almost:[6,17,33,37,38],alon:14,along:[11,38],alpha:36,alphanumer:29,alreadi:[9,16,23,24,29,33,38],also:[4,14,16,18,19,20,25,29,34,38],altern:[33,36,38],alternat:34,although:[25,36,38],alu1:[25,29],alu2:29,alu3:29,alu4:29,alu5:29,alu6:29,alu:29,alux:25,alwai:[7,9,19,28,29,30,38,44],am2901:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36],amd2901:37,amd2901_crl:37,amd2901_crl_chip:37,amd64:34,amend:33,among:14,amount:[28,44],amp:35,ana:4,anabat:[3,21],analog:21,analysi:38,analyt:[36,38],and2:[28,29],and2_8:28,and3:28,and3_16:28,and4:28,and4_2:28,anded:28,ani:[9,11,14,15,16,17,18,19,20,25,29,30,34,37,38],anneal:[36,37],anonym:16,anoth:[0,9,20,27],another:9,ansi:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],anti:38,any:38,anymor:25,anyth:[33,37,38],anywher:38,apach:[41,44,45],api:[0,1,2,3,4,5,6,7,8,9,10,11],appart:38,appear:[7,19,38],append:[16,29,33,37],appertur:38,appli:[9,19,25,28,29,30,33],applic:38,appropri:[7,29],approx:38,architectur:0,archiv:20,area:[19,21,25,33,38],arg0:[7,8,11],arg1:[7,11],arg:[6,7,8,9,11,29],argument:[0,6,7,8,14,15,19,27,28],arith:29,arithmet:[0,27,28],ariti:[27,29,30],army:38,around:[8,21,29,37,38],arrow:38,art:38,articul:[14,19],aside:[33,37],asign:30,asim:[29,34],asimut:29,ask:[19,25],aspect:[9,21,33,38],aspectratio:[21,33,38],assembl:33,assign:38,assignment:38,associ:[5,6,7,9,11,19,25,38],associat:[0,6],assum:[20,23,24,38],assume:19,asymetr:25,attempt:8,attribut:[0,6,11,18],author:29,autocmd:29,automat:[17,21,27,29,30,34,37,38],automaticali:29,autotool:34,auxsc35:38,avail:[1,2,3,4,9,14,17,29,32,33,34,36,40,41,44,45],avala:[36,38],avoid:[19,25,38,44],avot:30,awar:[19,25,28,34,38],axi:25,back:[29,36],background:38,backquot:17,bad:6,balanc:38,base:[0,3,4],bashrc:[17,34],basi:28,basic:0,basiclay:38,bdo:11,becaus:[6,15,21,25,34,36,38],becom:[6,18,29,37,38],bee:[29,38],been:[7,9,14,15,16,18,19,27,28,29,33,36,37,38],befor:[15,19,27,29,30,34,38,44],before:30,beforehand:38,begin:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,44,45],behav:28,behavior:[7,9,11,27,28,29],behaviour:38,belloeil:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45],belong:[14,29,33,44],below:[7,9,18,19,21,25,27,29,33,34,37,38],benchmark:38,bend:25,best:[11,38],better:19,between:[9,13,18,19,25,28,29,30,33,37,38],bewteen:19,big:[25,29,38],bigger:38,biggest:19,biggestarea:19,bigvia:25,biject:19,bin:[14,19,21,29,34],binari:[29,30,34,38],bind:33,bit:[25,27,28,29,38],black:[17,33],blif:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],blink:38,blob:36,block:[9,18,28,37],blockag:[25,33],blockage:33,bluntli:11,blur:38,boil:25,bood:29,boost:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],booth:29,bootstrap:34,borrow:9,botch:0,both:[14,21,25,27,29,33,34,37,38],bother:7,bottom:[25,29,37],bound:[33,38],bourn:17,box:9,brace:18,branch:0,breakpoint:14,bring:9,brows:[33,38],buf:29,buf_x2:37,buff_32:28,buffer:[0,27,28],bufnewfil:29,bufread:29,bug:[17,33,36,38],build:[0,5,7,9,14,19,25,33],buildfulladd:[19,21],buildinvertor:[14,15],bull:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],bunch:7,bundl:34,buri:13,buse:[27,29],buse_8:28,buss:28,button:38,bzip2:34,c2r:[17,34],c30:28,c31:28,c_temp:29,c_x_n:25,c_x_p:25,ca2:[29,30],cach:37,cad:29,cadenc:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],calcul:[29,30],call:[6,7,8,9,11,14,15,16,17,18,19,20,21,27,28,29,30,34,37,38,43],callback:43,calu1:29,calu2:29,calu3:29,calu4:29,calu5:29,calu6:29,calu:29,calux:25,camel:7,can:[6,9,13,14,15,16,17,18,19,20,21,25,28,29,30,33,34,36,37,38,44],candid:19,cannot:[9,14,18,19,25,28,38],capabl:[9,33,34,37,38],capac:38,capacitor:28,capit:7,captur:0,care:[9,21,29,37,38],carry_1:[19,21],carry_2:[19,21],cast:[6,7],cat:29,catal:33,catalog:[14,16,19,21,33],catchcor:[17,33,38],categori:38,caus:[17,34],cbug:38,ccb:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],cdebug:38,ceil:28,cell:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],cell_1:29,cellnet:16,cellstop:33,cellview:[15,38],center:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45],centerend:25,cerr:[6,7],certain:[11,30],cfg:33,cgt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ch_htree_bl_tl:37,cham:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],chang:[6,11,18,19,28,29,33,36,37,38],chaput:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],charact:[28,33],check:[20,28,29,38],checkbox:38,checker:25,checkout:34,chip:[0,29],chmod:29,choic:0,choos:[7,29,38],chosen:[27,29],chotin:30,chri:35,christian:35,christoph:35,chu:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],cif:25,cin:[19,21,29],cinfo:38,circuit:0,circular:29,circumv:38,ck_htree:37,ck_htree_bl:37,ck_htree_bl_bl:37,ckin:[27,29,30],ckok:28,clariti:[6,14],class_nam:29,classic:[9,17,33],clean:33,cleaner:19,cleanli:7,clear:[11,37,38],clearer:29,clement:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],click:38,clock:[0,27,28,29,33],clocktre:[33,37],clone:[17,34,38],close:[7,14,15,18,19,21,33,37,38],closer:29,clue:9,cluster:38,cmake:[0,1,2,3,4],cmd0:29,cmd1:29,cmd2:29,cmd:[28,29],cmo:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],cnchu:35,cobject:8,code:[6,7,9,11,14,17,18,19,33,36,37],coher:[18,38],collect:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],collector:18,coloquint:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],color:29,com:[34,41,44,45],combin:[19,34],come:38,command:[0,29,34,37],commit:34,common:[7,9,25,28,29,33,36,37,38],commpos:38,commun:[7,9,11],comp:6,compar:30,comparaison:29,comparison:[0,27],compat:34,compatibilti:36,compil:[9,34,38],complement:[28,30],complet:[5,7,9],completli:[9,14,36,38],complex:[9,25],compliant:34,compnent:38,compon:[0,6,9,13],compos:[19,38],compris:38,comput:[9,14,19,28,29,30,33,37,38],concaten:29,concept:[14,18,19,23,24],conceptor:[27,29],concret:[6,29],conditionn:28,conf:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],configur:0,confus:19,congest:38,conjunct:38,connect:[14,18],connectmap:29,connector:[0,14,25],connexion:[13,18,19,27,29],consecut:37,consequ:[6,19,25,36,44],consid:[5,19,25],consist:34,const_0x0000ffff:28,constant:[0,25,28],construct:[11,18,19,29],constructor:[7,9,11],constructorerror:[7,9,11],constval0:28,constval1:28,constval2:28,constval3:28,constval:28,cont_body_n:[25,29],cont_body_p:[25,29],cont_dif_n:[14,25,29],cont_dif_p:[14,25,29],cont_poly:[14,25,29],cont_turn1:29,cont_turn2:29,cont_turn3:29,cont_turn4:29,cont_turn5:29,cont_turn6:29,cont_via2:25,cont_via3:25,cont_via4:25,cont_via5:25,cont_via:25,cont_viax:25,contact1:19,contact2:19,contact:[6,9,14,19,25,29,38],contain:[5,9,14,15,16,17,18,20,25,29,30,33,34,36,37,38],contdifn:14,contdifp:14,conterpart:[3,4,25],contest:38,context:37,contpoli:14,contributor:35,control:[0,9,18,19,25,28,29],conveni:7,convent:[9,14],convers:[0,7,14,16],convert:[7,8,11,14,18,25,30],coodin:29,coordin:[14,18,19,25,27,29,38],copi:[11,18,29,34,38],copuupseg:29,copyright:[35,41,44,45],copyupseg:0,copyupsegmentseccopi:29,cordin:29,core:0,corioli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,29,31,32],coriolis2:[5,14,17,19,21,33,34,36,37],coriolis_install:17,coriolis_top:17,coriolisconfigur:33,coriolisenv:[0,17],coriolisinit:33,corner:[14,19,25,29],correct:[29,38],correctli:[21,29],correspond:[27,29,30,38],corrioli:34,cost:38,cougar:25,could:[16,18,29,33,37,38],count:[9,37,38],coupl:38,cours:18,cout:[16,19,21,29],cover:25,cpp:[5,7,9],craft:37,crash:[34,38],creat:[5,6,7,9,11],createcel:[14,15,19,21],creation:[0,14,18,19,21,27],credit:0,crl:0,crl_cata_lib:29,crlcore:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],crude:38,csh:34,ctrl:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],cumbersom:9,current:[14,21,29,30,33,34,37,38],cursor:38,cwd:33,cycl:30,cyclop:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],cygwin:34,damien:35,dangl:9,darwin:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],data:[0,28],databas:[7,9,14,16,18,19,27,36,38,44],database:44,datain0:28,datain1:28,datain:28,dataout:28,date:30,dbit:29,dbo:0,dbodeletemethod:[6,7],dbodestroyattribut:[6,7],dbolinkcreatemethod:[6,7,11],dbu:0,debian:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],debug:[15,34,38],decim:29,declar:[0,7,14],declar_interfac:0,decod:28,decor:38,decreas:38,dedic:[6,18,29],deep:36,deeper:6,deepli:[13,38],def:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40],defab:0,defaultstyl:[17,33],defaultvalu:33,defin:[5,6,7,9,11,14,25,27,28,29,30,33,36,37,38],define:25,definit:[5,6,7,17],degre:29,delet:[7,9,11,16,18,27,33,38],delta:[25,29],demot:25,denser:38,densiti:[33,38],depend:[5,25,29,34,36,37],deplib:5,depth:38,deriv:0,derivedobject:6,describ:[20,25,29,30,33,37],descript:[0,6],descrob:29,design:0,design_kit:38,desir:29,despit:33,destroi:[6,7,11,16,18],detail:[0,14,17,19,21,33,36],detector:28,deterior:29,determin:7,determinist:38,devel:0,develop:[21,34,38],developp:0,devic:38,devtoolset2:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],devtoolset:34,dff:37,dff_4:28,dfft_4:28,dialog:38,dict:[16,29],dictionari:[7,16],dictionnari:[7,15,27,29,37],did:[9,20,38],differ:[6,11,16,19,25,27,28,29,33,38],differenti:38,diffus:25,digit:[21,29],digitalinit:21,dimens:[25,29,38],direct:[6,7,9,11,25,27,29,30,33,38],directdeletemethod:11,directdestroymethod:11,directgetlongattribut:[6,8,11],directionn:11,directli:[9,15,18,20,21,30,37,38],directori:[0,14,17,19,20,21,29,33],directsetlongattribut:[8,11],disabl:[18,30,38],disambigu:25,disclaim:0,disconnect:19,discrep:20,diseappear:25,displac:38,displai:[7,19,33,38],display:38,distanc:[20,25,44],distinguish:[25,38],distribut:[34,36],disturb:37,ditch:38,divid:30,divis:29,dksdir:20,dl_export:[6,7],dobreak:[14,15,19,21],doc:[11,14,19,21,29,34],dochip:37,document:[9,12,13,18,19,23,26,29,31,33,34,36,37,38,39],docutil:34,doe:[7,29],doesn:[29,38],dogleg:38,don:[7,17,18,34,37],done:[7,14,29,33,38],dosometh:[18,37],dot:[36,38],dotfil:35,doubl:9,down:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45],download:38,doxygen:[1,2,3,4,32,34,37,40],dozen:38,dp_sxlib:33,dpgen:0,dpgenadsb2f:0,dpgenand2:0,dpgenand3:0,dpgenand4:0,dpgenbuff:0,dpgenbus:0,dpgenconst:0,dpgendff:0,dpgendfft:0,dpgenfifo:0,dpgeninv:0,dpgenmux2:0,dpgennand2:0,dpgennand2mask:0,dpgennand3:0,dpgennand4:0,dpgennbus:0,dpgennmux2:0,dpgennor2:0,dpgennor2mask:0,dpgennor3:0,dpgennor4:0,dpgennul:0,dpgenor2:0,dpgenor3:0,dpgenor4:0,dpgenram:0,dpgenrf1:0,dpgenrf1d:0,dpgenrf1dr0:28,dpgenrf1r0:28,dpgenrom2:0,dpgenrom4:0,dpgensff:0,dpgensfft:0,dpgenshift:0,dpgenshrot:0,dpgenxnor2:0,dpgenxnor2mask:0,dpgenxor2:0,dpi:38,drain:25,draw:[14,25,38],drawn:38,drc:25,drive:[28,37],driven:33,drop:[34,36],druc:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45],due:[33,38],dumb:33,dummi:[17,33,34,37],dump:[16,36,38],duplic:29,dupui:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],dure:[30,38],durole:35,dx1:29,dx2:29,dy1:29,dy2:29,dyld_framework_path:34,dyld_library_path:17,dynam:[9,18,28,34],dynamic_cast:6,each:[7,9,11,19,25,27,28,29,30,33,37,38],eas:[15,33],easi:29,easier:[25,27,29],easiest:34,easili:[18,33,38],east:[29,37],ec322005072076ef53984462fb4a1075c27c7dfd:34,edg:[25,37,38],editor:[0,14,15,19,21,25,27],edu:35,effect:[28,30,38],effort:[21,33,38],egin:30,ego:15,eight:29,either:[7,25,28,29,30,34,37,38],el7_64:34,electr:18,electric:25,element:[14,16,27,38],elif:29,els:[6,7,9,11,29,33],emit:7,empti:[28,38],emul:[7,34],enabl:[28,38],encapsul:[0,6,7],encompass:9,encount:[34,44],end:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,44,45],endif:[6,7,9,11],endl:[6,7,16],endswith:[16,33],enforc:19,eng:35,engin:21,engineloadgrbynet:21,enginenonetlayerassign:21,enough:[19,29,37],enrich:18,ent:6,enter:38,entir:9,entiti:6,entitycast:6,entri:[17,33,37,38],enumer:[29,33],env:29,envelop:29,envenli:38,environ:[0,14],eplac:38,eponym:38,equal:[28,29,38],equival:[18,19,29,38,44],eras:[37,38],error:[0,6,7,9,21,28],esc:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],escap:38,escassut:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],especi:14,essai:29,etc:[14,17,29,33,34,37],etesian:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],etesianengin:21,eval:[17,34],even:[19,25,28,36,37],evenli:38,event:[30,34,38],eventslimit:38,ever:16,everi:[7,27,29,33,38],everybodi:21,everyth:[7,33,38],evolv:34,exacltli:25,exact:[14,34,37],exactli:[15,25,34,37,38],exampl:[0,5,6,7,8],except:[7,14,27,29],excess:38,execut:0,exempl:[27,29,38],exist:[16,17,29,33,38,44],exit:[37,38],expand:25,expansion:29,expect:[8,19,33,37],expens:8,experi:38,explain:19,explan:[14,38],explanat:25,explanatori:[7,18],explicit:[8,14,19],explicitli:18,expor:38,expos:[7,9,16],exposur:9,express:[14,18,20,25,29,33,38,44],ext:25,extand:29,extend:[25,27,29],extens:[0,14,15],extent:[33,37,38],extern:[6,7,9,11,14,18,19,27,29,37],extra:[33,38],extract:[7,30],extractor:25,extreme:33,face:29,facil:0,fact:[6,9],factor:[36,38,44],fail:[6,7],failsaf:38,failur:38,fairli:38,fals:[6,7,17,27,28,29,33,38],familiar:[9,23,24],fanci:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],far:[9,26],fashion:9,fast:[33,34,38],fc13:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],fc_64:34,featur:38,fedora:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],feedthru:38,feel:18,fgr:38,fhs:34,field:[6,7,11,38],fifo:28,fifo_4_16:28,figur:[25,29,38],file:0,file_nam:29,filenam:[29,30,33],fillcel:0,filler:19,filler_1:19,filler_2:19,filter:[0,19],find:[19,29,33,34],fine:38,finger:38,finish:[14,27,29],first:[0,5,7],fit:[14,15,19,21,29,38],five:25,fix:[0,14,25,30],flag:[14,18,19,21,25,28,38],flatten:[13,37,38],flavor:[7,11],flip:28,flop:28,flow:[29,38],flute:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],fly:19,follow:[5,6,7,9,14,18,25,28,29,30,33,34,37,38],fonction:29,footprint:38,forc:[7,30,37,38],forget:17,forgotten:29,form:[29,33,38],format:[20,29,30,36,38],found:[9,14,19,21,29,33,34],founder:25,foundri:[14,25],four:[7,25,28,37,38],fourth:28,framework:[14,16,19,21,34,36],franck:25,free:[21,38],freebsd:34,freed:18,freedpk:17,freepdk45:20,freepdk:20,freepdk_45:17,from:[6,7,8,9,11,14,16,18],fromlambda:[14,18,19,21],full:28,fulladd:[19,21,29],fulli:[14,21],fuse:[14,18],futur:9,gabriel:35,gap:38,garbag:18,gate:[25,28,38],gaug:[25,33,38],gcell:38,gdb:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],gdsii:38,gener:[0,1,2,3,4],generic_method_head:[6,7,11],genlib:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],geometr:[25,29,37],get:[7,8,9,13],get_cata_lib:27,getcel:[6,7,16,19,21],getcompon:16,getdb:[14,19],getenv:33,getheight:6,getlay:[14,19],getmasternet:19,getnam:16,getnet:[6,16,19,21],getobjectid:[7,11],getplug:[19,21],getrefxy:0,getstr:[18,38],gettechnolog:[14,19],getwidth:6,getx:[6,8,11],gety:[6,11],ghdl:29,gigant:9,git:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],github:34,give:[5,6,14,25,27,28,29,36,38],given:[6,7,9,14,15,19,25,27,28,29,30,33,34,38],global:[0,7,19,25,33,36],globallengththreshold:38,globalripuplimit:38,gnu:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],goal:18,goe:9,good:[5,38],gouvin:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],gpl:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],graal:25,graphic:[0,17,33,34,36,37],great:37,greater:[29,36],grew:38,grid:[0,14],ground:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,31,32,33,34,35,36,37,38,39,40,41,42,44,45],group:[18,36],gscl45nm:20,guarded:28,gui:34,guid:0,hack:0,had:25,halfadd:29,hand:25,handl:[14,29],hard:[28,33],has_kei:[14,15,19,21,33,37],hasn:38,have:[6,7,9,11,14,16,18,19,21,25,27,28,29,30,33,34,36,37,38,44],haven:29,hcatch:[6,7,8,9,11],head:0,header:0,hecadecim:29,height:[6,9,25,29,38],help:[15,34],helper:[0,7,17],here:[1,2,3,4,7,9,19,20,25,30,32,33,34,38,40,41,44,45],herit:27,hesit:37,hexa:29,hexadecim:[29,30],hidden:36,hide:38,hierach:29,hierarchi:0,high:[21,33,38],highest:38,highlight:0,highlit:38,himself:[27,29],histor:25,hmeti:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],hoc:[36,38],hold:[6,9,14,38],holder:13,hole:25,home:[15,20,29,33,34,35],homedir:33,hook:[0,7],hope:9,horizont:[6,14,18,19,25,29,37,38],how:[0,13,14,16,18,19,25,28],howev:[33,38],hspace:37,html:[29,34],htracksreservedloc:38,htry:[6,7,8,9,11],http:[34,35,41,44,45],hugo:35,hundredth:14,hur_techno_name:29,hurrican:[0,1],hurricaneams:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],hurricaneerror:6,hurricaneplug:27,hwidth:37,hypernet:[1,2,3,4,5,6,7,8,9,10,11,12],i0_20:29,i386:34,iastat:35,ident:[6,29,33,38],identifi:[33,37,38],ifndef:[6,7,11],illegal:29,illustr:[14,19,20,37],imag:38,imcomplet:36,immediatli:38,implant:25,implement:[7,9,18,21,33,36,38,43],implemet:33,impli:[11,18],imposs:29,improv:38,in0:29,in1:[28,29],in2:[28,29],in3:[28,29],in4:28,in_lo:33,in_ph:33,includ:[5,6,7,9,11,18,29,34,36,38],include:34,inclus:38,incompat:29,incompatibilit:34,increas:[25,38],inde:38,indeed:[27,29],indent:18,index:[25,29,43],indic:[27,29],indirect:6,individu:[25,38],infinit:[17,34,38],info:[17,33,38],inform:[9,14,15,25,38,44],inherit:[7,27],init:[7,11],inithurrican:[6,7],initi:[6,7,30,33,38],initialis:[0,7,17,27,29,30],innov:36,inout:[27,29],input:[27,28,29,30,36],insert:[14,33,37],insid:[7,14,15,21,25,38],inspect:38,inspector:0,inst:[27,28,29],inst_adsb2f:28,inst_and2:28,inst_and3:28,inst_and4:28,inst_buff:28,inst_bus:28,inst_const:28,inst_dff:28,inst_dfft:28,inst_fifo:28,inst_inv:28,inst_mux2:28,inst_nand2:28,inst_nand2mask:28,inst_nand3:28,inst_nand4:28,inst_nbus:28,inst_nmux2:28,inst_nor2:28,inst_nor2mask:28,inst_nor3:28,inst_nor4:28,inst_nul:28,inst_or2:28,inst_or3:28,inst_or4:28,inst_ram:28,inst_rf1:28,inst_rf1d:28,inst_rom2:28,inst_rom4:28,inst_sff:28,inst_sfft:28,inst_shift:28,inst_shrot:28,inst_xnor2:28,inst_xnor2mask:28,inst_xor2:28,instal:[5,14,17,19,20,21,33,34,38],install:34,installat:0,instanc:[0,9,14,18],instanci:[0,6,27],instanciat:[0,27],instanti:0,instantiat:[27,29],instead:[6,9,11,17,20,29,34,38],instens:33,insti:28,insto:28,instop:28,instruct:[29,34,38],instshamt:28,insul:7,integ:[14,30,33],integer_word_length:30,integr:[7,37],intend:38,interact:15,interfac:[0,7,9,14,17,18,19,27,28,29,30,33,36],intermedi:0,intern:[27,29,30,37],interpret:[17,37],interrupt:7,intersect:25,intert:28,interv:29,introduc:[14,34,38],introduct:0,inv:29,inv_54:28,inv_x1:16,invalid:[6,7,9,11],inversor:29,invert:[25,28],inverter:28,invertor:[14,15],invok:29,iowa:35,isdir:33,isn:[29,30],isobar:[5,6,7,8,9,11],isobar_py_component_h:6,isobar_py_contact_h:6,isobar_py_entity_h:6,isobar_py_point_h:11,ispd:38,ispycompon:6,ispycontact:6,ispyentiti:6,ispyhorizont:6,ispylibrari:7,ispypoint:11,ispyvert:6,issu:[9,21],istself:5,ital:38,item:38,iter:[16,38],itself:[7,25],iwl:30,jean:35,json:36,just:[8,9,15,16,19,20,25,29,33,34,38],katabat:[1,2],katana:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],katanaengin:21,keep:[11,21],kei:[7,27,29,37,38],kept:25,keyword:15,kgr:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],kind:[14,16,17],kit:4,kite:[0,1,2,3],knife:38,knik:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37],know:[7,34,37],known:[19,38,44],kwarg:11,lambda:[0,14,20],lanch:17,languag:[0,29,30],larg:38,last:[7,30,33,34,38],lastli:[7,11],latch:28,later:[11,14,19,36,38],latest:[29,34],latex2html:34,latex:34,lauch:37,launch:[15,17,34,37],layer:0,layerassign:21,layout:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],layoutt:33,lbd:14,lcw:25,ld_library_path:17,lead:38,leaf:[13,37,38],least:[33,37],lef:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],lefconvertfactor:44,lefdef:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],lefimport:20,lefimporttmpcel:44,left:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,28,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45],legal:[29,30,36],leght:29,lenght:29,length:[14,25,30],lepka:[17,34,37],less:[9,25,38],let:[11,38],letter:29,level:[6,7,8,9,13,14,15,19,25,33,34,37,38],lex:34,lgpl:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],lib:[7,20,34,38],liberti:38,libisobar:9,librari:[0,5,6],libxml2:34,licens:0,life:[11,25],like:[6,7,9,15,16,17,18,21,27,28,29,33,34],limit:[18,19,38],line:[0,34,37],linear:38,linebreak:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],link:0,linker:9,linux:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],lip6:34,list:[0,5,16,19,27],listdir:33,littl:[15,25,38],live:[9,38],load:[0,14,15],loader:[20,36],loadglobalrout:21,local:[33,34,38],localripuplimit:38,locat:[29,37,38],lofig:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],log2:28,log:38,logic:[4,14,18,19,20,29,30,36,38],logicin:27,logicinout:27,logicout:27,logicunknown:27,logmod:[17,33,38],longer:[9,38],longglobalripuplimit:38,look:[0,7,11,14,20,33,34],loop:[16,17,28,29,34,38],lot:[19,44],low:38,lower:[14,19,28,29,33,38],lowercas:[7,14],lsb:[27,29],lybrari:7,maco:34,macos:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33],macport:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],macro:[5,6,7,9,11,28,38,44],made:[9,19,21,25,27,28,29,37,38],mai:[9,11,14,15,16,17,18,19,25,29,33,34,37,38],main:[18,34,36,38],mainli:[33,36,38],maintain:38,make:[7,13],makefil:34,manag:[9,14,18,20],mandatori:[7,14,17,27,28,29,33],mani:[9,18,25,29],manipul:8,manual:[0,9],map:[0,16,27,28],marek:35,margin:[21,33],mark:30,mask:28,masson:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],master:[9,19,21,27,34,38],mastercel:[27,29],masterlibrari:7,masternet:19,match:[16,29,33,38],materi:38,matrix:25,mauka:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],max:33,maxim:38,maximum:38,maxtracelevel:[33,38],mayb:29,mbk:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],mbk_:14,mbk_to_rds_bigvia_hole:0,mbk_to_rds_bigvia_metal:0,mbk_to_rds_segment:0,mbk_to_rds_via:0,mbk_wiresetting:0,mean:[9,16,18,20,25,29,33,34,38,44],meaning:[25,28,29],mechan:[7,9,11,13],medskip:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],member:36,memento:0,memori:[14,16,18,37,38],menu:[15,38],merg:27,messag:[14,15,19,38],metal1:[14,25],metal2:[19,25],metal3:19,metal5:38,metal:[25,38],meth_noargs:[6,7,11],meth_static:[6,7],meth_varargs:[6,7,11],method:[0,7,8,9,11,18,25],method_head:[6,7,11],micromet:[25,44],micron:20,microns:44,middl:29,migrat:36,million:38,miloyip:34,mimic:[7,33],min:33,minim:25,minimum:[37,38],minimumsid:37,minipag:35,minor:[33,38],mintracelevel:[33,38],minut:38,mip:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],mirror:37,misc:[17,33,38],miscellan:0,miss:38,mistak:[7,14,29],mistral:29,mix:[3,4,9,21,34],mkdir:34,mode:0,model:[0,14,18,19,25],modelnam:[28,29],modif:[14,16,29,37,38],modifi:[11,16,17,29,38],modul:[0,5],modular:9,modules_stratu:29,mofic:15,monolith:9,more:[6,14,16,18,25,29,33,36,38],moreov:9,mosi:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],most:[29,33,38],mostli:[5,18,38],mous:38,movabl:38,move:38,msb:[27,29],much:[9,27,29,33,38],multipl:[20,25,29,36,38,44],multiplex:28,multiplexor:[0,27],multipli:[25,29],must:[5,6,7,9,14,15,17,18,19,20,25,29,30,33,34,37,38],mutat:7,mux2_8:28,mux:[27,29],mx2:29,my_addaccu_:29,my_and2_4bit:29,my_dpgen_and2:29,my_inv:14,myclass:[27,29],myfunc:18,myinst1:29,myinst2:29,myinst3:29,myinst:29,mylib:33,mymap:27,mynet:29,myparam:27,myref:29,myself:13,na2:29,na3:29,na4:29,name:[0,5,6,7,9],namespac:[0,5,6],nand2:28,nand2_8:28,nand2mask_0x0000ffff:28,nand3:28,nand3_20:28,nand4:28,nand4_9:28,nand:28,narrow:38,navig:16,nbit:[28,29],nbit_cmd:28,nbsp:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],nbuse29:28,nck:33,ncsu:20,ndif:[14,25,29],nearest:37,need:[5,6,7,9,11,14,17,18,19,21,25,29,33,34,37,38],neg:29,neither:[7,29],nero:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],net8:29,net:[0,6,9,13],neta:29,netb:29,netc:29,netck:29,netcmd:29,netcout:29,netexternalcompon:[14,19],neti0:29,neti1:29,netin:29,netinput:27,netlist:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],netnam:29,neton:29,netout:29,netq:29,nets:29,netv:29,netvdd:29,netvss:29,never:16,nevertheless:29,newer:34,newli:[14,29],newnet:29,newpag:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],next:[29,30,34],nimbu:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],nmux2_5:28,nmx2:29,no2:29,no3:29,no4:29,noflag:21,noindent:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],non:[0,7,9],none:[14,15,19,21,27,33,37,38],nor2:28,nor2_8:28,nor2mask_000111:28,nor3:28,nor3_3:28,nor4:28,nor4_15:28,nor:[7,28,29],normal:[21,38],north:[29,37],nosym:[28,29],notat:[27,29,38],note:[0,6,7,25,28,29,34],now:[6,19,36,38],nterfac:30,ntie:[14,25,29],ntran:[14,29],ntrans:[14,25,29],nul:28,nul_4:28,number:[7,9,11,14,25,27,28,29,30,37,38],nutshel:34,nwell:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45],nword:[28,29],nxr2:29,nymous_:16,o2_1:[19,21],o2_x2:[19,21],ob_typ:[6,7,11],object:[6,7,8,9,11,14,15,16,18,19,25,29,33,38],observ:30,obsolet:36,obtain:[25,29,38],obviou:[11,38],obvious:[9,34,37],obviousli:[9,19,25,37],occur:[9,14,28,29],occurr:6,ocp:25,octal:30,odd:[25,37],off:[9,25,29],offset:[25,29],offsetx:29,offsety:29,often:[25,38],old:[9,21,36],older:[34,38],ommit:38,onc:[7,9,29],once:[14,37,38],one:[6,19,28,29,37,38],onli:[6,8,9,13,14,15,16,18,19,20,21,25,27,28,29,30,33,34,36,37,38],only:[7,27,28,29,34],open:[14,15,18,19,21,27,29,38],opencham:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],oper:[0,9,18,19,27,28],operand:28,operat:28,opt:34,optim:[28,34],option:[0,7,15,17,27,28,29,30],optional:[30,34],optionn:[28,29],or2:[28,29],or2_8:28,or3:28,or3_5:28,or4:28,or4_16:28,order:[16,19,27,28,29,33,34,38,43],ordere:37,ordinari:[19,33,37],ored:28,organ:[7,16],orient:25,orientat:19,origin:[9,25,38],osu_soc:20,other:[7,8,9,14,15,18,19,25,29,30,33,34,35,37,38],otherwis:[9,27,28,29,38],ouput:28,our:[7,9,18,33],out:[9,27,28,29],out_lo:33,out_ph:33,outad:34,outil:29,outlin:38,output:[27,28,29,30,36,38],outsid:[5,14,16],over:[8,16,19,21,25],overflow:28,overhang:25,overlap:[25,38],overload:[7,14],overloard:[27,29],overrid:17,overwritten:38,own:[6,29,33,34,38],owner:14,p_a0:37,p_a1:37,p_a2:37,p_a3:37,p_b0:37,p_b1:37,p_b2:37,p_b3:37,p_cin:[29,37],p_ck:37,p_cout:[29,37],p_d0:37,p_d1:37,p_d2:37,p_d3:37,p_f3:37,p_i0:37,p_i1:37,p_i2:37,p_i3:37,p_i4:37,p_i5:37,p_i6:37,p_i7:37,p_i8:37,p_ng:[29,37],p_noe:37,p_np:[29,37],p_ovr:37,p_q0:37,p_q3:37,p_r0:37,p_r3:37,p_vddeck0:[29,37],p_vddeck1:[29,37],p_vddick0:37,p_vsseck0:37,p_vsseck1:[29,37],p_vssick0:[29,37],p_y0:37,p_y1:37,p_y2:37,p_y3:37,p_y:29,p_zero:37,packag:0,pad:[0,14],pad_east:27,pad_north:27,pad_south:27,pad_west:27,padeast:29,padlib:33,padnorth:29,padsouth:29,padwest:29,page:[19,43],pair:[14,29,37],paper:38,para:29,paradigm:33,parallel:34,param:[0,27,28],paramet:[0,7,9,11,19,21],parameterst:[17,21,33],parametertyp:33,paramid:33,paranoid:[17,33],parent:7,pars:[6,29],parser:[25,36],part:[0,6],partial:[6,9,36],particular:[7,15,18],partit:37,paseast:29,pass:[9,19,37],paswest:29,pat:30,patamet:29,path:0,pathnam:29,patli:25,pattern:[0,27],pattern_begin:0,pattern_end:0,patwrit:0,paul:35,pck:37,pck_px:37,pdf:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],pdif:[14,25,29],peopl:9,per:29,percentag:33,perform:[7,28,29,33,34,37,38],perhap:38,peripheri:29,permit:[28,29],persist:9,pharo:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],phfig:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],phseg:25,phvia:25,physic:[0,14,18],physical:29,physical_grid:25,pictur:[29,38],piec:29,pin:[18,19,29,44],pitch:[25,29],pixel:38,pixmap:38,place:[0,9,13,14,18],placeandrout:21,placebottom:0,placecentr:0,placecontact:0,placed:19,placeglu:0,placeleft:0,placement:[0,19,21,27,29,33,36],placementstatu:19,placepin:0,placer:0,placeref:0,placerengin:37,placeright:0,placeseg:0,placetop:0,plain:8,plane:37,pleas:[14,29],plot:29,plu:29,plug:[13,14,18],plugin:0,point1:29,point2:29,point:[7,8,9,11,14,18,19,25,29,30,33,37,38],pointer:[6,7,9,11],poli:[14,25,29],polici:33,poly:[14,25,29],polysilicium:25,pop:28,popup:38,port:[27,29,30,34,36],posit:[14,25,29,37,38],possibl:[7,15,18,19,25,29,33,37,38],postfix:37,power:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],powerr:0,practic:[5,25],pre:38,preced:30,precis:[9,14,29,44],predic:7,prefix:[25,37,38],preliminari:36,prepend:33,prerequisit:34,presenc:6,present:[6,16,18,34,38],press:38,pretti:[20,33],previou:[25,29,33,38],previous:[6,7,21,37],price:38,print:[0,16,18,33],printabl:[12,23,26,31,39],printer:38,prior:[14,20,21,38],problem:34,proce:34,procedur:[29,30,31,38],process:[16,17,19,29,33,36,38],produc:30,profil:34,progess:18,program:[7,9,29],programm:28,progress:15,project:34,propag:[37,38],properti:[7,30],proprieti:30,protocol:16,provid:[0,7,8,9,14,17],proxyerror:8,ptie:[25,29],ptran:[14,29],ptrans:[14,25,29],pub:34,pull:34,pure:[17,18,33,38],purist:25,purpos:[15,29,38],push:28,pust:29,put:[7,9,11,25,29,33,37,38],pvddeck:37,pvddeck_px:37,pvddick:37,pvddick_px:37,pvsseck:37,pvsseck_px:37,pvssick:37,pvssick_px:37,pwell:[25,29],pxlib:33,py_incref:[6,7],py_initmodul:[6,7],py_library_h:7,py_return_none:[6,8],pyany_aslong:[8,11],pyarg_parsetupl:[7,8,9,11],pycel:[6,7],pycell_link:[6,7],pycfunct:[6,7,11],pycompon:[6,9],pycomponent:6,pycomponent_destroi:6,pycomponent_getnet:6,pycomponent_getx:6,pycomponent_gety:6,pycomponent_link:6,pycomponent_linkpytyp:6,pycomponent_method:6,pycomponent_o:[6,9],pycontact:6,pycontact_cr:[6,9],pycontact_destroi:6,pycontact_getheight:6,pycontact_getwidth:6,pycontact_link:[6,9],pycontact_linkpytyp:6,pycontact_method:6,pycontact_o:6,pycpp:5,pydatabas:7,pydatabase_o:7,pydatabse_o:7,pydbu_fromlong:8,pyentiti:6,pyentity:6,pyentity_destroi:6,pyentity_getcel:6,pyentity_link:6,pyentity_linkpytyp:6,pyentity_method:6,pyentity_new:6,pyentity_o:6,pyerr_clear:9,pyerr_setstr:[6,7,8,9,11],pyhorizont:6,pyhorizontal_link:6,pyhorizontal_o:6,pyhurrican:[5,6,7,11],pyhurricane_method:[6,7],pyinclud:5,pyinstanc:9,pyinstance_link:9,pylay:9,pylayer_o:9,pylibrari:[5,7,9],pylibrary:7,pylibrary_cr:7,pylibrary_dealloc:7,pylibrary_destroi:7,pylibrary_getcel:7,pylibrary_link:7,pylibrary_linkpytyp:7,pylibrary_method:7,pylibrary_o:7,pymethoddef:[6,7,11],pymodule_addobject:[6,7],pynet:[6,9],pynet_link:6,pynet_o:9,pyobject:[6,7,8,9,11],pyobject_head:[6,7,11],pyobject_new:11,pypoint:[8,11],pypoint_dealloc:11,pypoint_getx:[8,11],pypoint_gety:11,pypoint_init:11,pypoint_link:11,pypoint_linkpytyp:11,pypoint_method:11,pypoint_new:11,pypoint_o:11,pypoint_setx:[8,11],pypoint_sety:11,pyseg:6,pystring_asstr:7,python27:34,python2:34,python:[0,1,2,3,4,5],pythoncpp:12,pythonpath:[17,38],pythontutori:23,pytype_ready:[6,7],pytype_ready_sub:6,pytypecompon:[6,9],pytypecontact:6,pytypeent:6,pytypeinheritedobjectdefinit:6,pytypelay:9,pytypelibrari:[5,7],pytypenet:9,pytypeobject:[6,7,11],pytypeobjectdefinit:[7,11],pytypeobjectlinkpytyp:[6,7],pytypeobjectlinkpytypenewinit:11,pytypepoint:11,pytyperootobjectdefinit:6,pyvert:6,pyvertical_link:6,pyvertical_o:6,qt5:34,quadri:37,quadruplet:33,quadtre:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],qualiti:38,quarter:37,queri:14,quit:[27,38],rail:0,ram:[28,37],ram_32_32:28,ram_clock:37,ramlib:33,rang:[29,30],rapidjson:34,rather:38,ratio:[21,33,38],rcw:25,rds:0,rds_activ:25,rds_alu1:25,rds_alu2:25,rds_alu3:25,rds_alu4:25,rds_alu5:25,rds_alu6:25,rds_cont:25,rds_gate:25,rds_ndif:25,rds_nimp:25,rds_pdif:25,rds_pimp:25,rds_poly:25,rds_via1:25,rds_via2:25,rds_via3:25,rds_via4:25,rds_via5:25,reach:[9,38],reachabl:38,read:[7,28,33,36,44],readabl:38,readi:14,real:[0,7,14,16],realli:38,reason:25,recent:[25,29],recommand:38,recommended:30,record:38,rectang:25,rectangl:25,recurs:0,red:38,redefin:[6,33],redefinit:6,redhat:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],redirect:38,redraw:38,redund:25,ref:28,refer:0,refin:7,reflect:38,refnam:29,refresh:[27,29,38],reg:[27,29],regard:[18,29],regexp:33,regist:[0,5,7,27,28],regnumb:28,rel:[14,25,29,30,34],relat:[6,11,19,30,33,38],releas:[0,34,35],relev:[6,7,37],reli:[9,25,34,38],reload:38,remain:[6,7,11,16,38],remark:[6,33,38],rememb:6,remind:13,remov:[16,37,38],ren:28,renam:[37,44],render:38,reopen:15,reorganis:37,repeatedli:38,replac:[18,33,36,38],replic:7,repositori:[34,36],repres:[19,25,29,30,38,44],represent:38,request:[16,28,37],requir:[0,9,27,33],reserv:38,reset:[7,28,38],resizeab:0,resolut:[18,38],respect:[9,33,38],respons:[7,38],rest:[15,21],restart:[37,38],restructuredtext:34,result:[7,9,15,16,18,19,28,33,38],retain:9,retir:37,revers:[6,9],rewrit:[9,36],rewritten:36,rf1_4_16:28,rf1d_4_16:28,rf2lib:33,rflib:33,rhel6:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],rhel7:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],right:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,28,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45],ring:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45],rip:38,ripup:38,ripupcost:38,rise:[25,29],risk:25,rok:28,rom2_0b1010_0b1100:28,rom4_0b1010_0b1100_0b1111_0b0001:28,rom:28,romlib:33,root:[7,9,14,19,21,33,34],roselyn:30,rot_m:29,rot_p:29,rotat:[19,28,29],rotop:28,rout:[0,18,21,25,27],routabl:38,routag:38,routageck:29,routeck:0,router:[0,14],routingdriven:[33,38],row:19,rowend_x0:19,rp1:19,rp2:19,rpm:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],rsave:0,rubber:38,rule:[25,37,38],ruler:38,run:[14,15,17,20,21,29,33,34,37,38],runglobalrout:21,runnabl:14,runnegoci:21,runtim:38,s2r:25,safeti:38,sai:[9,17,19,34,37],said:14,sake:[6,14],same:[5,6,9,14,16,19,25,27,29,30,33,38],sarri:28,satur:38,saturateratio:38,saturaterp:38,save:[0,6,7],savecel:[14,19,21],scan:28,scarri:38,scheme:[37,38],scientif:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],scin:28,scn6m_deep_09:33,scope:18,scout:28,screen:38,script:[0,14],scriptmain:[14,15,19,21,37,38],scrub:7,search:[16,33,43],second:[0,9,14,19,25,28,29],section:[33,34,44],secur:33,see:[7,9,14,15,18,19,25,27,29,30,33,34,37,38],seem:[25,29,34,44],seen:[7,21],sefl:29,segment:[0,14,19],sel0:28,sel1:28,sel:28,select:[0,19,28],self:[6,7,8,11,18,27,28,29,30,33],selr:28,selram:28,selw:28,semant:18,send:25,sensit:29,sentinel:[6,7,11],separ:[7,9,25,27,34,37,38],sequenc:[21,29,38],sequenti:33,serv:[3,4],set:[0,5,7,8],setabutmentbox:[14,15,19],setadd:29,setand:29,setbuff:29,setcel:[14,15,19,21],setcomp:29,setdiv:29,seteditor:37,setextern:[14,19,21],setglob:[14,19,21],setmult:29,setmux:29,setnet:[19,21],setnot:29,setor:29,setplacementstatu:19,setrefin:0,setreg:29,setshift:29,settermin:[14,15],settransform:19,setup:[7,14,17,21,33,34],setx:[8,11],setxor:29,sety:11,seven:38,sever:[9,27,29,38],sff2:29,sff3:29,sff:29,sff_4:28,sfft_4:28,shadow:16,shamt:28,shape:[21,25],share:[0,5,6],she:6,shelf:9,shell:[17,29,34],shellsuccess:37,shift:[27,28,29,38],shifter:[0,27,28],shifter_4:28,ship:36,shortcut:0,should:[9,11,17,29,30,34,38],shouldn:25,show:[9,14,16,25,33,38],shown:[7,25,29,33,37],shrot_4:28,si2:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],side:[25,29,37,38],sig:27,sign:[28,29,33],signal:[0,3,4,19,27,28],signalin:[28,29,30],signalinout:[28,29,30],signalout:[28,29,30],signalunknown:29,signatur:[6,7,9],silli:25,similar:[6,38],similarli:30,simpl:[0,20,25,33],simplest:[14,33],simpli:[14,16,25,29],simplif:[19,34],simplifi:[17,29,34],simul:[29,30,36,37],sinc:16,singl:38,site:33,size:[25,28,29,30,37,38],skip:16,slanski:29,slice:29,slight:18,sligthli:34,slot:38,slow:38,slsoc6x:34,slsoc6x_64:34,small:[21,23,24,25,29,33,37,38],smallest:[28,44],smallskip:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],snapshot:0,snx:20,soc:[33,34],socket:38,softwar:0,sole:15,solut:38,solv:38,some:[0,9,14,16,18,25,27],someth:[14,18],sometim:19,somewhat:19,soon:37,sophi:[27,28,29,35],sourc:[14,25,29,34,36,38],sout:[19,21,29],sout_1:[19,21],south:[29,37],space:[21,25,29,33,37,38],spacemargin:[21,33,38],span:11,spec:34,special:[7,17,18],specif:[7,18,33,37,38],specifi:[28,29,38],speed:38,speedup:36,spl1:29,split:[9,37,38],spread:[21,38],squar:[21,25],src:34,sroka:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],st_config:29,stabl:34,stack:7,stage:0,stai:25,stamp:30,stand:38,standalon:0,standard:[7,9,11],standard_instances_list:27,standart:37,standpoint:25,start:[18,25,29,38],starter:13,state:[14,16,18,19,21,35,38],statement:44,static_cast:[6,8],statu:19,stechno:37,step:[6,7,25,29,33,34,37,38,44],still:[6,11,26,34,36,38],stimuli:0,stimulu:30,stl:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],stop:[14,15,19,21,37,38],storag:44,store:[7,8,14,18,28,38],straightforward:20,straigthforward:19,strap:38,strapripuplimit:38,strategi:37,stratu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26],stratus1:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],stratus2:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],stratus:29,stratus_mapping_name:29,stream:38,strict:[19,25],string:[7,14,18,28,29,30,33],stroke:38,strongli:38,strongly:30,struct:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],structur:0,stuck:[25,28],stuff:27,style:[7,38],sub:[17,29,30,37],subject:38,subsequ:44,substract:[28,29],substractor:28,subtli:16,success:37,successful:38,successfulli:[34,38],suffer:38,suffic:[19,38],suffix:37,suit:38,summar:18,summari:37,superpos:38,supli:28,suppl:37,suppli:[7,14],support:[5,7,9,11,18,21,30,34,36,38],suppress:38,sure:37,svn:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],swig:9,swiss:38,sxlib:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45],sy_rm:29,sy_rp:29,sym:29,sym_x:29,sym_y:29,symbol:[0,7,14,17,20],symetr:29,symetri:[27,29],symmetri:19,symxy:29,sync:38,synch:38,synonym:21,synopsi:0,syntact:33,syntax:[0,7,18],synthesi:[0,20],synthet:[0,20,36,37],system:[19,29,33,34],system_library:33,tab:[0,19,27,29,33],table:25,tailor:7,take:[7,14,15,21,29,30,38],taken:[9,29,30],talu1:29,talu2:29,talu3:29,talu4:29,talu5:29,talu6:29,talux:25,target:[14,25],task:[6,17,34],taxonomi:33,team:34,technic:0,technolog:[0,14,17,19,20,29],tediou:[17,19,34],tee:38,tell:[7,14,17,25,27,28,33,34,37],temp:29,temp_ext:29,tempext:29,templat:9,temporari:[38,44],ten:9,term:[29,35],termin:0,terminolog:14,test:[0,27],testbench:29,text:[29,37,38],textwidth:35,than:[9,25,29,36,38],thank:[9,27,29,37,38],thei:[7,9,14,16,17,18,25,27,29,33,36,37,38],them:[7,9,18,21,25,34,37,38],therefor:[19,28],thesi:38,thi:[6,7,9,11,12,13,14,16,17,18,19,21,23,24,25,26,27,28,29,30,31,33,34,36,37,38,39,44],thing:30,third:[19,25,28,34],thispagestyl:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],those:[6,7,16,17,19,25,27,28,29,33,34,37,38],though:9,three:[5,7,19,25,28,38],through:[7,9,13,14],througout:25,thu:[7,18,33,38],tie:25,tie_x0:19,time:[6,9,29,30,38],tmp:18,todai:14,todbu:[14,15,19,21],togeth:[28,36],toggl:38,tolambda:14,too:[9,21,25,29,38],tool:[0,9,15,17,18],toolchain:38,toolengin:21,top:[29,34,37,38],topolog:38,toproutinglay:38,total:38,toward:[9,17,29],tp_compar:7,tp_dealloc:7,tp_hash:7,tp_init:11,tp_method:7,tp_new:11,tp_repr:7,tp_str:7,trace:[7,38],track:38,track_spacing_alu1:25,track_spacing_alu2:25,track_spacing_alu3:25,track_spacing_alu4:25,track_spacing_alu5:25,track_spacing_alu6:25,track_spacing_alu7:25,track_spacing_alu8:25,track_width_alu1:25,track_width_alu2:25,track_width_alu3:25,track_width_alu4:25,track_width_alu5:25,track_width_alu6:25,track_width_alu7:25,track_width_alu8:25,transform:[7,18],transistor:25,transit:30,translat:[19,25],transmiss:9,transpar:25,tree:[0,6,9,29],tricki:9,trigger:[33,38],tristat:[27,28,29,30],tristate:27,trough:37,trought:33,truli:33,trunk:33,tty:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],tupl:33,turn:[14,19,38],tutori:0,tweak:38,twenti:29,twentu:29,twice:[9,16,29],two:[6,9,13,14,15,17,18,19,21,25,27,28,29,30,33,34,36,37,38],type:[0,5,6],typebool:[17,21,33,38],typedef:[6,7,8,11],typedoubl:33,typeenumer:[21,33],typeint:[33,37,38],typeopt:33,typepercentag:[21,33,38],typerul:33,typestr:[33,37,38],typetab:33,typetitl:33,typic:[7,33,37],ubuntu:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],uint64_t:8,unabl:34,unbound:8,uncheck:19,undef:[6,29],undefined:29,under:[0,7,9,14,15,17,19,20,21,25,33],underli:9,underscor:29,understand:[9,34,43],uneed:19,unexpectedli:16,unicorn:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31],unifi:38,uniform:[21,33],uniformdens:[21,33,38],uniquif:38,unit:[8,9],units:44,univers:35,unknown:27,unlik:34,unlike:[13,14,36],unlink:33,unmov:38,unplaced:27,unpredict:16,unrout:38,unselect:38,unsign:28,unsupport:38,until:[19,21,38],unzoom:38,updat:7,updatesess:[14,15,18,19,21],upmc:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],upon:[9,29,31],upper:[14,25,28,29,38],uppercas:14,usabl:[11,14,25],usage:[25,38],use:[17,29,30,34],used:[28,38],useful:[0,27],user:0,usersguid:39,using:14,usr:[14,19,21,29],usual:[6,7,14,18],utf:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],val0:28,val1:28,val2:28,val3:28,valid:[7,9,28,37],valu:[0,6,7,11,17],variabl:[7,14,17,25,29,33],variant:28,variou:[7,9,14],vbe:[27,38],vdd:[14,19,21,27,28,29,30,33],vdde:37,vddi:37,vddin:[27,28,29,30],vector:[16,29,30],verbos:38,verboselevel1:[17,33,38],verboselevel2:[17,33,38],veri:[21,33,37,38],version:[5,12,23,26,31,34,38,39,41,44,45],vertic:[6,14,19,25,29,37,38],vertiv:29,vhdl:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45],via12:[19,29],via1:29,via23:[19,29],via24:29,via25:29,via26:29,via2:29,via34:29,via35:29,via36:29,via3:29,via45:29,via46:29,via4:29,via56:29,via5:29,via:25,view:[7,14,16,18],viewer:[0,14,15,19,33,36,37],vim:29,vimrc:29,violet:38,virtual:[0,13],visibl:[14,38],visual:[25,38],visualis:14,vlsi:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45],vlsisapd:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],vspace:37,vss:[14,19,21,27,28,29,30,33],vsse:37,vssi:37,vssin:[27,28,29,30],vst:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45],vtracksreservedloc:38,vwidth:37,w7_64:34,w8_64:34,wai:[7,8,9,14,18,21,25,29,34,37,38],walk:38,walkthrough:16,wallac:29,want:[6,7,9,14,15,16,17,19,27,29,33,34,38],warn:9,weak:38,weakli:14,weari:16,weekli:19,well:[13,14,16,19,25,27,29,37,38],wen:28,were:38,west:[29,37],wether:29,what:[7,9,15,19,25,29,38],whatev:[33,34,38],when:[8,9,17,25,27,28,29,33,34,37,38,44],where:[5,19,20,30,33,38],whether:[6,16,37,38],which:[5,6,7,11,14,15,17,18,19,25,27,29,30,33,34,35,36,37,38,44],white:38,whitespac:38,whithout:[33,37],whitout:38,whole:[6,25,28,36,37,38,44],whose:[18,33],why:[7,9],wich:29,wide:33,wider:38,width:[6,9,14,25,28,29,38],width_vdd:25,width_vss:25,wil:16,window:[33,34,38],wirelength:38,witch:15,within:[29,38],without:[14,15,25,27,28,29,38],wok:28,won:9,word:[28,29,30],word_length:30,work:[7,14,15,18],work_dir:14,work_lib:16,workhors:13,working_library:33,worklib:33,world:14,wors:38,would:[8,9,16,29,33],wrap:[5,7,9],wrapper:[7,9,21,33],write:[9,13,16,28,29,30,33,37,38],written:[7,9,10,11,14,16,18,33],wrong:29,www:[34,41,44,45],wysiwyg:38,x_grid:25,xml:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45],xnor2:28,xnor2_8:28,xnor2mask_0b000111:28,xnor:28,xor2:[28,29],xor2_8:28,xor:28,xored:28,xoring:28,xr2:29,xr2_1:[19,21],xr2_2:[19,21],xr2_x1:[19,21],xr2_x2:[19,21],xxxx:34,y_grid:25,y_slice:25,yacc:34,year:[9,38],yet:[6,29,34,38],yield:29,yifei:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,44,45],yosi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],you:[9,14,15,16,17,18,19,20,21,23,24,25,28,29,30,33,34,37,38],your:[0,9,14,15,17,20],zero:[9,25,28,29],zoom:38},titles:["Comprenhensive Table of Contents","CRL Core Reference","Hurricane Reference","Katabatic Reference","Kite Reference","2. Basic File Structure and CMake configuration","4. Case 2 - Hierarchy of DBo Derived Classes","3. Case 1 - DBo Derived, Standalone","6. Encapsulating DbU","1. Introduction","7. No C++ Hurricane::Name encapsulation","5. Case 3 - Non-DBo Standalone Classe","Hurricane Python/C++ API Tutorial","9. Advanced Topics","3. Making a Standard Cell – Layout","5. Make a script runnable through cgt","4. Manipulating Cells, Nets and Components","2. Setting up the Environment","1. Introduction","6. Making a hierarchical Cell – Netlist","7. Working in real mode","8. Tool Engines (CRL Core)","<no title>","Hurricane+Python Tutorial","Hurricane+Python Tutorial","Symbolic Layout","RDS – Symbolic to Real Conversion in Alliance","Stratus Developper’s Guide","DpGen generators manual","Stratus User’s Guide","Patterns module User’s Guide","Stratus : Netlist Capture Language","Unicorn Reference","Coriolis Configuration & Initialisation","Installation","Credits & License","Release Notes","Python Interface for Hurricane / Coriolis","CGT - The Graphical Interface","Coriolis User’s Guide","Viewer Reference","DEF API Reference","<no title>","Welcome to Coriolis’s documentation!","LEF API Reference","LEF/DEF Language Reference"],titleterms:{"boolean":29,"case":[6,7,11,19],"class":[6,7,11,27],"function":[13,29],"new":14,about:[9,16],abutment:14,add:29,addaccu:29,adding:14,additionn:34,addpat:30,advanc:13,affect:29,affect_ani:30,affect_fix:30,affect_int:30,aliment:29,allianc:[26,33,34,38],allianceframework:[14,16],am2901:37,anoth:29,api:[12,41,44],architectur:33,argument:29,arithmet:29,associat:7,attribut:27,base:[6,38],basic:5,blif:20,botch:9,box:14,branch:34,breakpoint:15,buffer:29,build:34,call:44,callback:44,captur:[31,38],cell:[14,16,19,29],cgt:[15,38],chip:37,choic:9,circuit:29,clock:37,cmake:5,collect:16,command:38,comparison:29,complet:[14,19,21],compon:[14,16,25],comprenhens:0,configur:[5,17,29,33,38],connect:19,connector:29,constant:29,constructor:18,content:[0,24],control:38,convers:26,copyupseg:29,core:[1,14,21],corioli:[33,34,37,39,43],coriolisenv:34,creat:[14,19],creation:29,credit:35,crl:[1,14,21],data:[29,38],dbo:[6,7,11],dbu:[8,14],declar:30,declar_interfac:30,def:[41,45],defab:29,deriv:[6,7],descript:[27,29,30],design:[9,38],detail:38,devel:34,developp:27,directori:34,disclaim:9,disk:14,document:43,dpgen:[28,29],dpgenadsb2f:28,dpgenand2:28,dpgenand3:28,dpgenand4:28,dpgenbuff:28,dpgenbus:28,dpgenconst:28,dpgendff:28,dpgendfft:28,dpgenfifo:28,dpgeninv:28,dpgenmux2:28,dpgennand2:28,dpgennand2mask:28,dpgennand3:28,dpgennand4:28,dpgennbus:28,dpgennmux2:28,dpgennor2:28,dpgennor2mask:28,dpgennor3:28,dpgennor4:28,dpgennul:28,dpgenor2:28,dpgenor3:28,dpgenor4:28,dpgenram:28,dpgenrf1:28,dpgenrf1d:28,dpgenrom2:28,dpgenrom4:28,dpgensff:28,dpgensfft:28,dpgenshift:28,dpgenshrot:28,dpgenxnor2:28,dpgenxnor2mask:28,dpgenxor2:28,editor:29,encapsul:[8,10],engine:21,environ:[17,34],error:29,etesian:[21,38],exampl:[14,19,21,29,30,37],execut:[29,38],extens:29,facil:29,file:[5,6,7,11,14,17,19,20,25,29,33],fillcel:29,filter:38,first:[9,33],fix:34,from:19,gener:[18,28,29,33],get:14,getrefxy:29,global:38,graphic:38,grid:25,guid:[27,29,30,39],hack:33,head:7,header:[6,7,11],helper:33,hierarch:[13,19],hierarchi:6,highlight:29,hook:34,how:29,hurrican:[2,10,12,14,16,23,24,37,38],hypernet:13,implement:44,indice:43,initialis:33,inspector:38,installat:34,instanc:[19,27,29],instanci:29,instanciat:29,instanti:29,interfac:[37,38],intermedi:6,introduct:[9,18,29],katabat:3,katana:21,kind:18,kite:[4,38],knik:38,lambda:25,languag:[31,45],layer:[14,38],layout:[14,25,29],lef:[20,44,45],librari:[7,29],licens:35,line:38,link:[7,29],list:29,load:[16,20,33,38],look:38,macos:34,make:[14,15,19],manipul:16,manual:28,map:29,mbk_to_rds_bigvia_hole:25,mbk_to_rds_bigvia_metal:25,mbk_to_rds_segment:25,mbk_to_rds_via:25,mbk_wiresetting:25,measur:14,mechan:14,memento:38,method:[27,29,30],miscella:13,miscellan:38,mode:[20,38],model:27,modul:[6,7,29,30],multiplexor:29,name:[10,29],namespac:7,net:[14,16,19,27,29],netlist:[19,29,31,38],non:11,note:[36,44],occurrenc:13,oper:29,option:38,order:44,packag:[29,34],pad:29,param:29,paramet:[27,29,30,38],part:[7,30],path:[17,29],pattern:[29,30],pattern_begin:30,pattern_end:30,patwrit:30,physic:[19,25],place:[19,29],placebottom:29,placecentr:29,placecontact:29,placeglu:29,placeleft:29,placement:37,placepin:29,placer:[21,38],placeref:29,placeright:29,placeseg:29,placetop:29,plug:19,plugin:37,power:19,powerr:29,print:38,provid:29,python:[6,7,12,23,24,37,38],rail:29,rds:[25,26],real:[20,26],recurs:37,refer:[1,2,3,4,32,40,41,44,45],regist:29,regular:19,releas:36,requir:34,resizeab:29,restrict:16,rout:29,routeck:29,router:[21,38],routingpad:[13,19],rsave:37,runnabl:15,save:[14,37],script:[15,38],second:33,segment:25,select:[33,38],session:14,set:[14,17,34,38],setrefin:29,share:7,shifter:29,shortcut:38,signal:29,simpl:37,snapshot:38,softwar:33,some:29,special:19,stage:33,standalon:[7,11],standard:14,stimuli:29,stratu:[27,29,31,38],structur:5,suppli:19,symbol:[25,26],synopsi:[27,29],syntax:[29,30],synthesi:38,synthet:38,tab:38,tabl:[0,25,43],technic:9,techno:17,technolog:33,termin:6,terminolog:18,test:29,through:15,tool:[21,33,38],topic:13,tran:13,transform:19,tree:[34,37],tutori:[12,23,24],type:7,under:[34,38],understand:44,unicorn:32,unit:[14,44],useful:29,user:[17,29,30,39],using:15,valu:[25,29],variou:18,view:19,viewer:[38,40],virtual:29,welcom:43,wire:19,work:20,yosi:[20,38],your:29}}) \ No newline at end of file +Search.setIndex({envversion:49,filenames:["Analog/Analog","Contents","CrlCore/CrlCore","Hurricane/Hurricane","Katabatic/Katabatic","Kite/Kite","Oroshi/Oroshi","PythonCpp/Configuration","PythonCpp/DBoHierarchy","PythonCpp/DBoStandalone","PythonCpp/DbU","PythonCpp/Introduction","PythonCpp/Name","PythonCpp/NonDBo","PythonCpp/index","PythonTutorial/AdvancedTopics","PythonTutorial/CellNetComponent","PythonTutorial/CgtScript","PythonTutorial/Collections","PythonTutorial/Environment","PythonTutorial/Introduction","PythonTutorial/Netlist","PythonTutorial/RealDesigns","PythonTutorial/ToolEngines","PythonTutorial/definitions","PythonTutorial/index","PythonTutorial/pdfHeader","RDS/RDSpage","RDS/index","Stratus/Developper","Stratus/DpGen","Stratus/Language","Stratus/Patterns","Stratus/index","Unicorn/Unicorn","UsersGuide/Configuration","UsersGuide/Installation","UsersGuide/LicenseCredits","UsersGuide/Releases","UsersGuide/ScriptsPlugins","UsersGuide/ViewerTools","UsersGuide/index","Viewer/Viewer","defapi/defapi","etc/definitions","index","lefapi/lefapi","lefdef/lefdef"],objects:{},objnames:{},objtypes:{},terms:{"005\u00b5m":27,"01\u00b5m":46,"09\u00b5m":27,"0b0001":30,"0b000111":30,"0b0010":31,"0b0110":31,"0b10":31,"0b1001":31,"0b1010":30,"0b1100":30,"0b1110":31,"0b1111":30,"0x0000ffff":30,"0x14":31,"100k":40,"150k":40,"180nm":35,"18\u00b5m":27,"1\u00b5m":27,"2\u00b5m":27,"32b":36,"32x32":40,"45nm":[19,22],"64b":36,"abstract":8,"boolean":[1,9,29],"case":1,"catch":9,"char":9,"class":[1,7],"const":[30,31],"default":[8,19,27,29,30,31,32,35,36,39,40,46],"else":30,"export":[7,8,9,20,36,38,39],"final":[16,27,36,40],"float":[16,32,35],"function":[1,7,8,9,10,11,13],"goto":40,"import":[8,9,11,16,20,21,22,23,30,31,35,37,38,39,40],"int":13,"long":[10,20,40],"new":[8,9,13],"null":[8,9,10,11,13,30],"public":[20,38],"r\u00e9my":37,"return":[8,9,10,11,13,16,17,18,20,21,23,30,31,35,39,40],"short":11,"static":[8,9,10,11,13,20,22,30,36],"supp\u00e9rior":39,"transient":[16,46],"true":[16,17,19,21,23,27,29,30,31,35,39,40],"try":[16,31,35,40],"void":[8,9,13,20],"while":[10,16,18,20,21,40,46],__add__:29,__and__:29,__c:[8,9,11,13],__div__:29,__geslice__:29,__getitem__:29,__init__:29,__invert__:29,__le__:29,__main__:39,__mul__:29,__name__:39,__or__:29,__python_module:11,__python_module__:[8,11,13],__str__:20,__xor__:29,_add:29,_alia:29,_and:29,_ariti:29,_baseobject:8,_bl:39,_br:39,_buff:29,_chip:39,_clock:[35,39],_comp:29,_db:29,_direct:29,_div:29,_ext:29,_h_type:29,_hur_cel:29,_hur_inst:29,_hur_mastercel:29,_hur_net:29,_ind:29,_insref:29,_lib0:29,_map:29,_model:29,_mult:29,_mux:29,_name:[29,32],_nb_alims_vertical:29,_nb_inst:29,_nb_pin:29,_nb_vdd_pin:29,_nb_vss_pin:29,_not:29,_object:[8,9,10,13],_or:29,_param:29,_plac:29,_px:35,_pyobject:8,_real_model:29,_real_net:29,_reg:29,_shift:29,_st_cell:29,_st_ck:29,_st_inst:29,_st_mastercel:29,_st_merg:29,_st_port:29,_st_sig:29,_st_vdd:29,_st_vsss:29,_stim:31,_sym:29,_tab_nets_cat:29,_tab_nets_out:29,_tl:39,_to_cat:29,_to_merg:29,_tr:39,_type:29,_undercel:29,_xor:29,a2_1:[21,23],a2_2:[21,23],a2_x2:[21,23,31],abc:38,abil:31,abl:[11,17,20,22],about:[1,9],abov:[9,16,17,31,35,36,40],absolut:[13,16,32],abtument:31,abut:[16,21,23,31,39,40],abutmentbox:31,accept:[32,40],access:[8,18,21,31,32,36,38,40],access_class:8,access_object:8,accessor:9,accomod:39,accord:[27,35,39,40],accordingli:11,account:40,accross:11,accumul:32,accur:38,accuraci:40,achiev:38,acknowledg:30,across:[27,35,40],act:7,action:40,activ:[17,27,40],actual:[27,30,32,40],adapt:[19,39],add:[1,9,17,21],add_python_modul:[7,11],add_sub:30,addaccu:1,addd:31,added:38,adder:[30,31],adder_8:30,adding:9,addit:[19,30,31,35,40],addition:31,additionn:1,addmode:35,addpat:1,address:30,addtyp:[8,9],adjac:[15,39],adopt:16,adr:30,advis:40,adw:30,affect:1,affect_ani:1,affect_fix:1,affect_int:1,affili:38,after:[9,16,17,21,22,23,29,31,32,36,39,40],afterward:30,again:[8,9,19,22,36],against:[9,11,22,36,40],ago:11,aim:[20,38],alc_env:36,alexandr:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],algorithm:[18,38,40],alia:[19,29,31,36],alias:40,alim:31,alimconnector:31,aliment:[1,29],alimhorizontalrail:31,alimverticalrail:31,all:[9,11,15,16,18,20,21,23,27,29,31,32,35,36,37,38,39,40],allianc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27],alliance_top:35,allianceconfig:35,alliancetop:35,alloc:[9,20,40],allow:[9,15,16,18,21,27,30,31,32,35,40],almost:[8,19,35,39,40],alon:16,along:[13,40],alpha:38,alphanumer:31,alreadi:[11,18,25,26,31,35,40],also:[5,16,18,20,21,22,27,31,36,40],altern:[35,38,40],alternat:36,although:[27,38,40],alu1:[27,31],alu2:31,alu3:31,alu4:31,alu5:31,alu6:31,alu:31,alux:27,alwai:[9,11,21,30,31,32,40,46],am2901:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38],amd2901:39,amd2901_crl:39,amd2901_crl_chip:39,amd64:36,amend:35,among:16,amount:[30,46],amp:37,ana:5,anabat:[4,23],analysi:40,analyt:[38,40],and2:[30,31],and2_8:30,and3:30,and3_16:30,and4:30,and4_2:30,anded:30,ani:[11,13,16,17,18,19,20,21,22,27,31,32,36,39,40],anneal:[38,39],anonym:18,anoth:[1,11,22,29],another:11,ansi:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],anti:40,any:40,anymor:27,anyth:[35,39,40],anywher:40,apach:[43,46,47],api:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],appart:40,appear:[9,21,40],append:[18,31,35,39],appertur:40,appli:[11,21,27,30,31,32,35],applic:40,appropri:[9,31],approx:40,architectur:1,archiv:22,area:[21,23,27,35,40],arg0:[9,10,13],arg1:[9,13],arg:[8,9,10,11,13,31],argument:[1,8,9,10,16,17,21,29,30],arith:31,arithmet:[1,29,30],ariti:[29,31,32],army:40,around:[10,23,31,39,40],arrow:40,art:40,articul:[16,21],aside:[35,39],asign:32,asim:[31,36],asimut:31,ask:[21,27],aspect:[11,23,35,40],aspectratio:[23,35,40],assembl:35,assign:40,assignment:40,associ:[7,8,9,11,13,21,27,40],associat:[1,8],assum:[22,25,26,40],assume:21,asymetr:27,attempt:10,attribut:[1,8,13,20],author:31,autocmd:31,automat:[19,23,29,31,32,36,39,40],automaticali:31,autotool:36,auxsc35:40,avail:[0,2,3,4,5,6,11,16,19,31,34,35,36,38,42,43,46,47],avala:[38,40],avoid:[21,27,40,46],avot:32,awar:[21,27,30,36,40],axi:27,back:[31,38],background:40,backquot:19,bad:8,balanc:40,base:[1,4,5],bashrc:[19,36],basi:30,basic:1,basiclay:40,bdo:13,becaus:[8,17,23,27,36,38,40],becom:[8,20,31,39,40],bee:[31,40],been:[9,11,16,17,18,20,21,29,30,31,35,38,39,40],befor:[17,21,29,31,32,36,40,46],before:32,beforehand:40,begin:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47],behav:30,behavior:[9,11,13,29,30,31],behaviour:40,belloeil:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,29,30,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],belong:[16,31,35,46],below:[9,11,20,21,23,27,29,31,35,36,39,40],benchmark:40,bend:27,best:[13,40],better:21,between:[11,15,20,21,27,30,31,32,35,39,40],bewteen:21,big:[27,31,40],bigger:40,biggest:21,biggestarea:21,bigvia:27,biject:21,bin:[16,21,23,31,36],binari:[31,32,36,40],bind:35,bit:[27,29,30,31,40],black:[19,35],blif:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],blink:40,blob:38,block:[11,20,30,39],blockag:[27,35],blockage:35,bluntli:13,blur:40,boil:27,bood:31,boost:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],booth:31,bootstrap:36,borrow:11,botch:1,both:[16,23,27,29,31,35,36,39,40],bother:9,bottom:[27,31,39],bound:[35,40],bourn:19,box:11,brace:20,branch:1,breakpoint:16,bring:11,brows:[35,40],buf:31,buf_x2:39,buff_32:30,buffer:[1,29,30],bufnewfil:31,bufread:31,bug:[19,35,38,40],build:[1,7,9,11,16,21,27,35],buildfulladd:[21,23],buildinvertor:[16,17],bull:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],bunch:9,bundl:36,buri:15,buse:[29,31],buse_8:30,buss:30,button:40,bzip2:36,c2r:[19,36],c30:30,c31:30,c_temp:31,c_x_n:27,c_x_p:27,ca2:[31,32],cach:39,cad:31,cadenc:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],calcul:[31,32],call:[8,9,10,11,13,16,17,18,19,20,21,22,23,29,30,31,32,36,39,40,45],callback:45,calu1:31,calu2:31,calu3:31,calu4:31,calu5:31,calu6:31,calu:31,calux:27,camel:9,can:[8,11,15,16,17,18,19,20,21,22,23,27,30,31,32,35,36,38,39,40,46],candid:21,cannot:[11,16,20,21,27,30,40],capabl:[11,35,36,39,40],capac:40,capacitor:30,capit:9,captur:1,care:[11,23,31,39,40],carry_1:[21,23],carry_2:[21,23],cast:[8,9],cat:31,catal:35,catalog:[16,18,21,23,35],catchcor:[19,35,40],categori:40,caus:[19,36],cbug:40,ccb:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],cdebug:40,ceil:30,cell:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cell_1:31,cellnet:18,cellstop:35,cellview:[17,40],center:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],centerend:27,cerr:[8,9],certain:[13,32],cfg:35,cgt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],ch_htree_bl_tl:39,cham:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],chang:[8,13,20,21,30,31,35,38,39,40],chaput:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],charact:[30,35],check:[22,30,31,40],checkbox:40,checker:27,checkout:36,chip:[1,31],chmod:31,choic:1,choos:[9,31,40],chosen:[29,31],chotin:32,chri:37,christian:37,christoph:37,chu:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],cif:27,cin:[21,23,31],cinfo:40,circuit:1,circular:31,circumv:40,ck_htree:39,ck_htree_bl:39,ck_htree_bl_bl:39,ckin:[29,31,32],ckok:30,clariti:[8,16],class_nam:31,classic:[11,19,35],clean:35,cleaner:21,cleanli:9,clear:[13,39,40],clearer:31,clement:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],click:40,clock:[1,29,30,31,35],clocktre:[35,39],clone:[19,36,40],close:[9,16,17,20,21,23,35,39,40],closer:31,clue:11,cluster:40,cmake:[0,1,2,3,4,5,6],cmd0:31,cmd1:31,cmd2:31,cmd:[30,31],cmo:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],cnchu:37,cobject:10,code:[8,9,11,13,16,19,20,21,35,38,39],coher:[20,40],collect:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],collector:20,coloquint:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],color:31,com:[36,43,46,47],combin:[21,36],come:40,command:[1,31,36,39],commit:36,common:[9,11,27,30,31,35,38,39,40],commpos:40,commun:[9,11,13],comp:8,compar:32,comparaison:31,comparison:[1,29],compat:36,compatibilti:38,compil:[11,36,40],complement:[30,32],complet:[7,9,11],completli:[11,16,38,40],complex:[11,27],compliant:36,compnent:40,compon:[1,8,11,15],compos:[21,40],compris:40,comput:[11,16,21,30,31,32,35,39,40],concaten:31,concept:[16,20,21,25,26],conceptor:[29,31],concret:[8,31],conditionn:30,conf:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],configur:1,confus:21,congest:40,conjunct:40,connect:[16,20],connectmap:31,connector:[1,16,27],connexion:[15,20,21,29,31],consecut:39,consequ:[8,21,27,38,46],consid:[7,21,27],consist:36,const_0x0000ffff:30,constant:[1,27,30],construct:[13,20,21,31],constructor:[9,11,13],constructorerror:[9,11,13],constval0:30,constval1:30,constval2:30,constval3:30,constval:30,cont_body_n:[27,31],cont_body_p:[27,31],cont_dif_n:[16,27,31],cont_dif_p:[16,27,31],cont_poly:[16,27,31],cont_turn1:31,cont_turn2:31,cont_turn3:31,cont_turn4:31,cont_turn5:31,cont_turn6:31,cont_via2:27,cont_via3:27,cont_via4:27,cont_via5:27,cont_via:27,cont_viax:27,contact1:21,contact2:21,contact:[8,11,16,21,27,31,40],contain:[7,11,16,17,18,19,20,22,27,31,32,35,36,38,39,40],contdifn:16,contdifp:16,conterpart:[4,5,27],contest:40,context:39,contpoli:16,contributor:37,control:[1,11,20,21,27,30,31],conveni:9,convent:[11,16],convers:[1,9,16,18],convert:[9,10,13,16,20,27,32],coodin:31,coordin:[16,20,21,27,29,31,40],copi:[13,20,31,36,40],copuupseg:31,copyright:[37,43,46,47],copyupseg:1,copyupsegmentseccopi:31,cordin:31,core:1,corioli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34],coriolis2:[7,16,19,21,23,35,36,38,39],coriolis_install:19,coriolis_top:19,coriolisconfigur:35,coriolisenv:[1,19],coriolisinit:35,corner:[16,21,27,31],correct:[31,40],correctli:[23,31],correspond:[29,31,32,40],corrioli:36,cost:40,cougar:27,could:[18,20,31,35,39,40],count:[11,39,40],coupl:40,cours:20,cout:[18,21,23,31],cover:27,cpp:[7,9,11],craft:39,crash:[36,40],creat:[7,8,9,11,13],createcel:[16,17,21,23],creation:[1,16,20,21,23,29],credit:1,crl:[0,1],crl_cata_lib:31,crlcore:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],crude:40,csh:36,ctrl:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],cumbersom:11,current:[16,23,31,32,35,36,39,40],cursor:40,cwd:35,cycl:32,cyclop:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],cygwin:36,damien:37,dangl:11,darwin:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],data:[1,30],databas:[9,11,16,18,20,21,29,38,40,46],database:46,datain0:30,datain1:30,datain:30,dataout:30,date:32,dbit:31,dbo:1,dbodeletemethod:[8,9],dbodestroyattribut:[8,9],dbolinkcreatemethod:[8,9,13],dbu:1,debian:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],debug:[17,36,40],decim:31,declar:[1,9,16],declar_interfac:1,decod:30,decor:40,decreas:40,dedic:[8,20,31],deep:38,deeper:8,deepli:[15,40],def:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,30,31,32,33,34,35,36,37,38,39,40,41,42],defab:1,defaultstyl:[19,35],defaultvalu:35,defin:[7,8,9,11,13,16,27,29,30,31,32,35,38,39,40],define:27,definit:[7,8,9,19],degre:31,delet:[9,11,13,18,20,29,35,40],delta:[27,31],demot:27,denser:40,densiti:[35,40],depend:[7,27,31,36,38,39],deplib:7,depth:40,deriv:1,derivedobject:8,describ:[22,27,31,32,35,39],descript:[1,8],descrob:31,design:1,design_kit:40,desir:31,despit:35,destroi:[8,9,13,18,20],detail:[1,16,19,21,23,35,38],detector:30,deterior:31,determin:9,determinist:40,devel:1,develop:[23,36,40],developp:1,devic:40,devtoolset2:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],devtoolset:36,dff:39,dff_4:30,dfft_4:30,dialog:40,dict:[18,31],dictionari:[9,18],dictionnari:[9,17,29,31,39],did:[11,22,40],differ:[8,13,18,21,27,29,30,31,35,40],differenti:40,diffus:27,digit:[23,31],digitalinit:23,dimens:[27,31,40],direct:[8,9,11,13,27,29,31,32,35,40],directdeletemethod:13,directdestroymethod:13,directgetlongattribut:[8,10,13],directionn:13,directli:[11,17,20,22,23,32,39,40],directori:[1,16,19,21,22,23,31,35],directsetlongattribut:[10,13],disabl:[20,32,40],disambigu:27,disclaim:1,disconnect:21,discrep:22,diseappear:27,displac:40,displai:[9,21,35,40],display:40,distanc:[22,27,46],distinguish:[27,40],distribut:[36,38],disturb:39,ditch:40,divid:32,divis:31,dksdir:22,dl_export:[8,9],dobreak:[16,17,21,23],doc:[13,16,21,23,31,36],dochip:39,document:[11,14,15,20,21,25,28,31,33,35,36,38,39,40,41],docutil:36,doe:[9,31],doesn:[31,40],dogleg:40,don:[9,19,20,36,39],done:[9,16,31,35,40],dosometh:[20,39],dot:[38,40],dotfil:37,doubl:11,down:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],download:40,doxygen:[0,2,3,4,5,6,34,36,39,42],dozen:40,dp_sxlib:35,dpgen:1,dpgenadsb2f:1,dpgenand2:1,dpgenand3:1,dpgenand4:1,dpgenbuff:1,dpgenbus:1,dpgenconst:1,dpgendff:1,dpgendfft:1,dpgenfifo:1,dpgeninv:1,dpgenmux2:1,dpgennand2:1,dpgennand2mask:1,dpgennand3:1,dpgennand4:1,dpgennbus:1,dpgennmux2:1,dpgennor2:1,dpgennor2mask:1,dpgennor3:1,dpgennor4:1,dpgennul:1,dpgenor2:1,dpgenor3:1,dpgenor4:1,dpgenram:1,dpgenrf1:1,dpgenrf1d:1,dpgenrf1dr0:30,dpgenrf1r0:30,dpgenrom2:1,dpgenrom4:1,dpgensff:1,dpgensfft:1,dpgenshift:1,dpgenshrot:1,dpgenxnor2:1,dpgenxnor2mask:1,dpgenxor2:1,dpi:40,drain:27,draw:[16,27,40],drawn:40,drc:27,drive:[30,39],driven:35,drop:[36,38],druc:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],due:[35,40],dumb:35,dummi:[19,35,36,39],dump:[18,38,40],duplic:31,dupui:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],dure:[32,40],durole:37,dx1:31,dx2:31,dy1:31,dy2:31,dyld_framework_path:36,dyld_library_path:19,dynam:[11,20,30,36],dynamic_cast:8,each:[9,11,13,21,27,29,30,31,32,35,39,40],eas:[17,35],easi:31,easier:[27,29,31],easiest:36,easili:[20,35,40],east:[31,39],ec322005072076ef53984462fb4a1075c27c7dfd:36,edg:[27,39,40],editor:[1,16,17,21,23,27,29],edu:37,effect:[30,32,40],effort:[23,35,40],egin:32,ego:17,eight:31,either:[9,27,30,31,32,36,39,40],el7_64:36,electr:20,electric:27,element:[16,18,29,40],elif:31,els:[8,9,11,13,31,35],emit:9,empti:[30,40],emul:[9,36],enabl:[30,40],encapsul:[1,8,9],encompass:11,encount:[36,46],end:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47],endif:[8,9,11,13],endl:[8,9,18],endswith:[18,35],enforc:21,eng:37,engin:23,engineloadgrbynet:23,enginenonetlayerassign:23,enough:[21,31,39],enrich:20,ent:8,enter:40,entir:11,entiti:8,entitycast:8,entri:[19,35,39,40],enumer:[31,35],env:31,envelop:31,envenli:40,environ:[1,16],eplac:40,eponym:40,equal:[30,31,40],equival:[20,21,31,40,46],eras:[39,40],error:[1,8,9,11,23,30],esc:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],escap:40,escassut:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],especi:16,essai:31,etc:[16,19,31,35,36,39],etesian:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],etesianengin:23,eval:[19,36],even:[21,27,30,38,39],evenli:40,event:[32,36,40],eventslimit:40,ever:18,everi:[9,29,31,35,40],everybodi:23,everyth:[9,35,40],evolv:36,exacltli:27,exact:[16,36,39],exactli:[17,27,36,39,40],exampl:[1,7,8,9,10],except:[9,16,29,31],excess:40,execut:1,exempl:[29,31,40],exist:[18,19,31,35,40,46],exit:[39,40],expand:27,expansion:31,expect:[10,21,35,39],expens:10,experi:40,explain:21,explan:[16,40],explanat:27,explanatori:[9,20],explicit:[10,16,21],explicitli:20,expor:40,expos:[9,11,18],exposur:11,express:[16,20,22,27,31,35,40,46],ext:27,extand:31,extend:[27,29,31],extens:[1,16,17],extent:[35,39,40],extern:[8,9,11,13,16,20,21,29,31,39],extra:[35,40],extract:[9,32],extractor:27,extreme:35,face:31,facil:1,fact:[8,11],factor:[38,40,46],fail:[8,9],failsaf:40,failur:40,fairli:40,fals:[8,9,19,29,30,31,35,40],familiar:[11,25,26],fanci:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],far:[11,28],fashion:11,fast:[35,36,40],fc13:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],fc_64:36,featur:40,fedora:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],feedthru:40,feel:20,fgr:40,fhs:36,field:[8,9,13,40],fifo:30,fifo_4_16:30,figur:[27,31,40],file:1,file_nam:31,filenam:[31,32,35],fillcel:1,filler:21,filler_1:21,filler_2:21,filter:[1,21],find:[21,31,35,36],fine:40,finger:40,finish:[16,29,31],first:[1,7,9],fit:[16,17,21,23,31,40],five:27,fix:[1,16,27,32],flag:[16,20,21,23,27,30,40],flatten:[15,39,40],flavor:[9,13],flip:30,flop:30,flow:[31,40],flute:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],fly:21,follow:[7,8,9,11,16,20,27,30,31,32,35,36,39,40],fonction:31,footprint:40,forc:[9,32,39,40],forget:19,forgotten:31,form:[31,35,40],format:[22,31,32,38,40],found:[11,16,21,23,31,35,36],founder:27,foundri:[16,27],four:[9,27,30,39,40],fourth:30,framework:[16,18,21,23,36,38],franck:27,free:[23,40],freebsd:36,freed:20,freedpk:19,freepdk45:22,freepdk:22,freepdk_45:19,from:[8,9,10,11,13,16,18,20],fromlambda:[16,20,21,23],full:30,fulladd:[21,23,31],fulli:[16,23],fuse:[16,20],futur:11,gabriel:37,gap:40,garbag:20,gate:[27,30,40],gaug:[27,35,40],gcell:40,gdb:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],gdsii:40,gener:[0,1,2,3,4,5,6],generic_method_head:[8,9,13],genlib:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],geometr:[27,31,39],get:[9,10,11,15],get_cata_lib:29,getcel:[8,9,18,21,23],getcompon:18,getdb:[16,21],getenv:35,getheight:8,getlay:[16,21],getmasternet:21,getnam:18,getnet:[8,18,21,23],getobjectid:[9,13],getplug:[21,23],getrefxy:1,getstr:[20,40],gettechnolog:[16,21],getwidth:8,getx:[8,10,13],gety:[8,13],ghdl:31,gigant:11,git:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],github:36,give:[7,8,16,27,29,30,31,38,40],given:[8,9,11,16,17,21,27,29,30,31,32,35,36,40],global:[1,9,21,27,35,38],globallengththreshold:40,globalripuplimit:40,gnu:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],goal:20,goe:11,good:[7,40],gouvin:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],gpl:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],graal:27,graphic:[1,19,35,36,38,39],great:39,greater:[31,38],grew:40,grid:[1,16],ground:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,29,30,33,34,35,36,37,38,39,40,41,42,43,44,46,47],group:[20,38],gscl45nm:22,guarded:30,gui:36,guid:1,hack:1,had:27,halfadd:31,hand:27,handl:[16,31],hard:[30,35],has_kei:[16,17,21,23,35,39],hasn:40,have:[8,9,11,13,16,18,20,21,23,27,29,30,31,32,35,36,38,39,40,46],haven:31,hcatch:[8,9,10,11,13],head:1,header:1,hecadecim:31,height:[8,11,27,31,40],help:[17,36],helper:[1,9,19],here:[0,2,3,4,5,6,9,11,21,22,27,32,34,35,36,40,42,43,46,47],herit:29,hesit:39,hexa:31,hexadecim:[31,32],hidden:38,hide:40,hierach:31,hierarchi:1,high:[23,35,40],highest:40,highlight:1,highlit:40,himself:[29,31],histor:27,hmeti:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],hoc:[38,40],hold:[8,11,16,40],holder:15,hole:27,home:[17,22,31,35,36,37],homedir:35,hook:[1,9],hope:11,horizont:[8,16,20,21,27,31,39,40],how:[1,15,16,18,20,21,27,30],howev:[35,40],hspace:39,html:[31,36],htracksreservedloc:40,htry:[8,9,10,11,13],http:[36,37,43,46,47],hugo:37,hundredth:16,hur_techno_name:31,hurricaneerror:8,hurricaneplug:29,hwidth:39,hypernet:[0,2,3,4,5,6,7,8,9,10,11,12,13,14],i0_20:31,i386:36,iastat:37,ident:[8,31,35,40],identifi:[35,39,40],ifndef:[8,9,13],illegal:31,illustr:[16,21,22,39],imag:40,imcomplet:38,immediatli:40,implant:27,implement:[9,11,20,23,35,38,40,45],implemet:35,impli:[13,20],imposs:31,improv:40,in0:31,in1:[30,31],in2:[30,31],in3:[30,31],in4:30,in_lo:35,in_ph:35,includ:[7,8,9,11,13,20,31,36,38,40],include:36,inclus:40,incompat:31,incompatibilit:36,increas:[27,40],inde:40,indeed:[29,31],indent:20,index:[27,31,45],indic:[29,31],indirect:8,individu:[27,40],infinit:[19,36,40],info:[19,35,40],inform:[11,16,17,27,40,46],inherit:[9,29],init:[9,13],inithurrican:[8,9],initi:[8,9,32,35,40],initialis:[1,9,19,29,31,32],innov:38,inout:[29,31],input:[29,30,31,32,38],insert:[16,35,39],insid:[9,16,17,23,27,40],inspect:40,inspector:1,inst:[29,30,31],inst_adsb2f:30,inst_and2:30,inst_and3:30,inst_and4:30,inst_buff:30,inst_bus:30,inst_const:30,inst_dff:30,inst_dfft:30,inst_fifo:30,inst_inv:30,inst_mux2:30,inst_nand2:30,inst_nand2mask:30,inst_nand3:30,inst_nand4:30,inst_nbus:30,inst_nmux2:30,inst_nor2:30,inst_nor2mask:30,inst_nor3:30,inst_nor4:30,inst_nul:30,inst_or2:30,inst_or3:30,inst_or4:30,inst_ram:30,inst_rf1:30,inst_rf1d:30,inst_rom2:30,inst_rom4:30,inst_sff:30,inst_sfft:30,inst_shift:30,inst_shrot:30,inst_xnor2:30,inst_xnor2mask:30,inst_xor2:30,instal:[7,16,19,21,22,23,35,36,40],install:36,installat:1,instanc:[1,11,16,20],instanci:[1,8,29],instanciat:[1,29],instanti:1,instantiat:[29,31],instead:[8,11,13,19,22,31,36,40],instens:35,insti:30,insto:30,instop:30,instruct:[31,36,40],instshamt:30,insul:9,integ:[16,32,35],integer_word_length:32,integr:[9,39],intend:40,interact:17,interfac:[1,9,11,16,19,20,21,29,30,31,32,35,38],intermedi:1,intern:[29,31,32,39],interpret:[19,39],interrupt:9,intersect:27,intert:30,interv:31,introduc:[16,36,40],introduct:1,inv:31,inv_54:30,inv_x1:18,invalid:[8,9,11,13],inversor:31,invert:[27,30],inverter:30,invertor:[16,17],invok:31,iowa:37,isdir:35,isn:[31,32],isobar:[7,8,9,10,11,13],isobar_py_component_h:8,isobar_py_contact_h:8,isobar_py_entity_h:8,isobar_py_point_h:13,ispd:40,ispycompon:8,ispycontact:8,ispyentiti:8,ispyhorizont:8,ispylibrari:9,ispypoint:13,ispyvert:8,issu:[11,23],istself:7,ital:40,item:40,iter:[18,40],itself:[9,27],iwl:32,jean:37,json:38,just:[10,11,17,18,21,22,27,31,35,36,40],katabat:[0,2,3],katana:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],katanaengin:23,keep:[13,23],kei:[9,29,31,39,40],kept:27,keyword:17,kgr:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],kind:[16,18,19],kit:5,kite:[0,1,2,3,4],knife:40,knik:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39],know:[9,36,39],known:[21,40,46],kwarg:13,lambda:[1,16,22],lanch:19,languag:[1,31,32],larg:40,last:[9,32,35,36,40],lastli:[9,13],latch:30,later:[13,16,21,38,40],latest:[31,36],latex2html:36,latex:36,lauch:39,launch:[17,19,36,39],layer:1,layerassign:23,layout:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],layoutt:35,lbd:16,lcw:27,ld_library_path:19,lead:40,leaf:[15,39,40],least:[35,39],lef:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],lefconvertfactor:46,lefdef:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],lefimport:22,lefimporttmpcel:46,left:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,30,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],legal:[31,32,38],leght:31,lenght:31,length:[16,27,32],lepka:[19,36,39],less:[11,27,40],let:[13,40],letter:31,level:[8,9,10,11,15,16,17,21,27,35,36,39,40],lex:36,lgpl:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],lib:[9,22,36,40],liberti:40,libisobar:11,librari:[1,7,8],libxml2:36,licens:1,life:[13,27],like:[8,9,11,17,18,19,20,23,29,30,31,35,36],limit:[20,21,40],line:[1,36,39],linear:40,linebreak:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],link:1,linker:11,linux:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],lip6:36,list:[1,7,18,21,29],listdir:35,littl:[17,27,40],live:[11,40],load:[1,16,17],loader:[22,38],loadglobalrout:23,local:[35,36,40],localripuplimit:40,locat:[31,39,40],lofig:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],log2:30,log:40,logic:[5,16,20,21,22,31,32,38,40],logicin:29,logicinout:29,logicout:29,logicunknown:29,logmod:[19,35,40],longer:[11,40],longglobalripuplimit:40,look:[1,9,13,16,22,35,36],loop:[18,19,30,31,36,40],lot:[21,46],low:40,lower:[16,21,30,31,35,40],lowercas:[9,16],lsb:[29,31],lybrari:9,maco:36,macos:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35],macport:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],macro:[7,8,9,11,13,30,40,46],made:[11,21,23,27,29,30,31,39,40],mai:[11,13,16,17,18,19,20,21,27,31,35,36,39,40],main:[20,36,38,40],mainli:[35,38,40],maintain:40,make:[9,15],makefil:36,manag:[11,16,20,22],mandatori:[9,16,19,29,30,31,35],mani:[11,20,27,31],manipul:10,manual:[1,11],map:[1,18,29,30],marek:37,margin:[23,35],mark:32,mask:30,masson:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],master:[11,21,23,29,36,40],mastercel:[29,31],masterlibrari:9,masternet:21,match:[18,31,35,40],materi:40,matrix:27,mauka:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],max:35,maxim:40,maximum:40,maxtracelevel:[35,40],mayb:31,mbk:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],mbk_:16,mbk_to_rds_bigvia_hole:1,mbk_to_rds_bigvia_metal:1,mbk_to_rds_segment:1,mbk_to_rds_via:1,mbk_wiresetting:1,mean:[11,18,20,22,27,31,35,36,40,46],meaning:[27,30,31],mechan:[9,11,13,15],medskip:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],member:38,memento:1,memori:[16,18,20,39,40],menu:[17,40],merg:29,messag:[16,17,21,40],metal1:[16,27],metal2:[21,27],metal3:21,metal5:40,metal:[27,40],meth_noargs:[8,9,13],meth_static:[8,9],meth_varargs:[8,9,13],method:[1,9,10,11,13,20,27],method_head:[8,9,13],micromet:[27,46],micron:22,microns:46,middl:31,migrat:38,million:40,miloyip:36,mimic:[9,35],min:35,minim:27,minimum:[39,40],minimumsid:39,minipag:37,minor:[35,40],mintracelevel:[35,40],minut:40,mip:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],mirror:39,misc:[19,35,40],miscellan:1,miss:40,mistak:[9,16,31],mistral:31,mix:[4,5,11,23,36],mkdir:36,mode:1,model:[1,16,20,21,27],modelnam:[30,31],modif:[16,18,31,39,40],modifi:[13,18,19,31,40],modul:[1,7],modular:11,modules_stratu:31,mofic:17,monolith:11,more:[8,16,18,20,27,31,35,38,40],moreov:11,mosi:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],most:[31,35,40],mostli:[7,20,40],mous:40,movabl:40,move:40,msb:[29,31],much:[11,29,31,35,40],multipl:[22,27,31,38,40,46],multiplex:30,multiplexor:[1,29],multipli:[27,31],must:[7,8,9,11,16,17,19,20,21,22,27,31,32,35,36,39,40],mutat:9,mux2_8:30,mux:[29,31],mx2:31,my_addaccu_:31,my_and2_4bit:31,my_dpgen_and2:31,my_inv:16,myclass:[29,31],myfunc:20,myinst1:31,myinst2:31,myinst3:31,myinst:31,mylib:35,mymap:29,mynet:31,myparam:29,myref:31,myself:15,na2:31,na3:31,na4:31,name:[1,7,8,9,11],namespac:[1,7,8],nand2:30,nand2_8:30,nand2mask_0x0000ffff:30,nand3:30,nand3_20:30,nand4:30,nand4_9:30,nand:30,narrow:40,navig:18,nbit:[30,31],nbit_cmd:30,nbsp:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],nbuse29:30,nck:35,ncsu:22,ndif:[16,27,31],nearest:39,need:[7,8,9,11,13,16,19,20,21,23,27,31,35,36,39,40],neg:31,neither:[9,31],nero:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],net8:31,net:[1,8,11,15],neta:31,netb:31,netc:31,netck:31,netcmd:31,netcout:31,netexternalcompon:[16,21],neti0:31,neti1:31,netin:31,netinput:29,netlist:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],netnam:31,neton:31,netout:31,netq:31,nets:31,netv:31,netvdd:31,netvss:31,never:18,nevertheless:31,newer:36,newli:[16,31],newnet:31,newpag:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],next:[31,32,36],nimbu:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],nmux2_5:30,nmx2:31,no2:31,no3:31,no4:31,noflag:23,noindent:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],non:[1,9,11],none:[16,17,21,23,29,35,39,40],nor2:30,nor2_8:30,nor2mask_000111:30,nor3:30,nor3_3:30,nor4:30,nor4_15:30,nor:[9,30,31],normal:[23,40],north:[31,39],nosym:[30,31],notat:[29,31,40],note:[1,8,9,27,30,31,36],now:[8,21,38,40],nterfac:32,ntie:[16,27,31],ntran:[16,31],ntrans:[16,27,31],nul:30,nul_4:30,number:[9,11,13,16,27,29,30,31,32,39,40],nutshel:36,nwell:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],nword:[30,31],nxr2:31,nymous_:18,o2_1:[21,23],o2_x2:[21,23],ob_typ:[8,9,13],object:[8,9,10,11,13,16,17,18,20,21,27,31,35,40],observ:32,obsolet:38,obtain:[27,31,40],obviou:[13,40],obvious:[11,36,39],obviousli:[11,21,27,39],occur:[11,16,30,31],occurr:8,ocp:27,octal:32,odd:[27,39],off:[11,27,31],offset:[27,31],offsetx:31,offsety:31,often:[27,40],old:[11,23,38],older:[36,40],ommit:40,onc:[9,11,31],once:[16,39,40],one:[8,21,30,31,39,40],onli:[8,10,11,15,16,17,18,20,21,22,23,27,29,30,31,32,35,36,38,39,40],only:[9,29,30,31,36],open:[16,17,20,21,23,29,31,40],opencham:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],oper:[1,11,20,21,29,30],operand:30,operat:30,opt:36,optim:[30,36],option:[1,9,17,19,29,30,31,32],optional:[32,36],optionn:[30,31],or2:[30,31],or2_8:30,or3:30,or3_5:30,or4:30,or4_16:30,order:[18,21,29,30,31,35,36,40,45],ordere:39,ordinari:[21,35,39],ored:30,organ:[9,18],orient:27,orientat:21,origin:[11,27,40],osu_soc:22,other:[9,10,11,16,17,20,21,27,31,32,35,36,37,39,40],otherwis:[11,29,30,31,40],ouput:30,our:[9,11,20,35],out:[11,29,30,31],out_lo:35,out_ph:35,outad:36,outil:31,outlin:40,output:[29,30,31,32,38,40],outsid:[7,16,18],over:[10,18,21,23,27],overflow:30,overhang:27,overlap:[27,40],overload:[9,16],overloard:[29,31],overrid:19,overwritten:40,own:[8,31,35,36,40],owner:16,p_a0:39,p_a1:39,p_a2:39,p_a3:39,p_b0:39,p_b1:39,p_b2:39,p_b3:39,p_cin:[31,39],p_ck:39,p_cout:[31,39],p_d0:39,p_d1:39,p_d2:39,p_d3:39,p_f3:39,p_i0:39,p_i1:39,p_i2:39,p_i3:39,p_i4:39,p_i5:39,p_i6:39,p_i7:39,p_i8:39,p_ng:[31,39],p_noe:39,p_np:[31,39],p_ovr:39,p_q0:39,p_q3:39,p_r0:39,p_r3:39,p_vddeck0:[31,39],p_vddeck1:[31,39],p_vddick0:39,p_vsseck0:39,p_vsseck1:[31,39],p_vssick0:[31,39],p_y0:39,p_y1:39,p_y2:39,p_y3:39,p_y:31,p_zero:39,packag:1,pad:[1,16],pad_east:29,pad_north:29,pad_south:29,pad_west:29,padeast:31,padlib:35,padnorth:31,padsouth:31,padwest:31,page:[21,45],pair:[16,31,39],paper:40,para:31,paradigm:35,parallel:36,param:[1,29,30],paramet:[1,9,11,13,21,23],parameterst:[19,23,35],parametertyp:35,paramid:35,paranoid:[19,35],parent:9,pars:[8,31],parser:[27,38],part:[1,8],partial:[8,11,38],particular:[9,17,20],partit:39,paseast:31,pass:[11,21,39],paswest:31,pat:32,patamet:31,path:1,pathnam:31,patli:27,pattern:[1,29],pattern_begin:1,pattern_end:1,patwrit:1,paul:37,pck:39,pck_px:39,pdf:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],pdif:[16,27,31],peopl:11,per:31,percentag:35,perform:[9,30,31,35,36,39,40],perhap:40,peripheri:31,permit:[30,31],persist:11,phfig:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],phseg:27,phvia:27,physic:[1,16,20],physical:31,physical_grid:27,pictur:[31,40],piec:31,pin:[20,21,31,46],pitch:[27,31],pixel:40,pixmap:40,place:[1,11,15,16,20],placeandrout:23,placebottom:1,placecentr:1,placecontact:1,placed:21,placeglu:1,placeleft:1,placement:[1,21,23,29,31,35,38],placementstatu:21,placepin:1,placer:1,placeref:1,placerengin:39,placeright:1,placeseg:1,placetop:1,plain:10,plane:39,pleas:[16,31],plot:31,plu:31,plug:[15,16,20],plugin:1,point1:31,point2:31,point:[9,10,11,13,16,20,21,27,31,32,35,39,40],pointer:[8,9,11,13],poli:[16,27,31],polici:35,poly:[16,27,31],polysilicium:27,pop:30,popup:40,port:[29,31,32,36,38],posit:[16,27,31,39,40],possibl:[9,17,20,21,27,31,35,39,40],postfix:39,power:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],powerr:1,practic:[7,27],pre:40,preced:32,precis:[11,16,31,46],predic:9,prefix:[27,39,40],preliminari:38,prepend:35,prerequisit:36,presenc:8,present:[8,18,20,36,40],press:40,pretti:[22,35],previou:[27,31,35,40],previous:[8,9,23,39],price:40,print:[1,18,20,35],printabl:[14,25,28,33,41],printer:40,prior:[16,22,23,40],problem:36,proce:36,procedur:[31,32,33,40],process:[18,19,21,31,35,38,40],produc:32,profil:36,progess:20,program:[9,11,31],programm:30,progress:17,project:36,propag:[39,40],properti:[9,32],proprieti:32,protocol:18,provid:[1,9,10,11,16,19],proxyerror:10,ptie:[27,31],ptran:[16,31],ptrans:[16,27,31],pub:36,pull:36,pure:[19,20,35,40],purist:27,purpos:[17,31,40],push:30,pust:31,put:[9,11,13,27,31,35,39,40],pvddeck:39,pvddeck_px:39,pvddick:39,pvddick_px:39,pvsseck:39,pvsseck_px:39,pvssick:39,pvssick_px:39,pwell:[27,31],pxlib:35,py_incref:[8,9],py_initmodul:[8,9],py_library_h:9,py_return_none:[8,10],pyany_aslong:[10,13],pyarg_parsetupl:[9,10,11,13],pycel:[8,9],pycell_link:[8,9],pycfunct:[8,9,13],pycompon:[8,11],pycomponent:8,pycomponent_destroi:8,pycomponent_getnet:8,pycomponent_getx:8,pycomponent_gety:8,pycomponent_link:8,pycomponent_linkpytyp:8,pycomponent_method:8,pycomponent_o:[8,11],pycontact:8,pycontact_cr:[8,11],pycontact_destroi:8,pycontact_getheight:8,pycontact_getwidth:8,pycontact_link:[8,11],pycontact_linkpytyp:8,pycontact_method:8,pycontact_o:8,pycpp:7,pydatabas:9,pydatabase_o:9,pydatabse_o:9,pydbu_fromlong:10,pyentiti:8,pyentity:8,pyentity_destroi:8,pyentity_getcel:8,pyentity_link:8,pyentity_linkpytyp:8,pyentity_method:8,pyentity_new:8,pyentity_o:8,pyerr_clear:11,pyerr_setstr:[8,9,10,11,13],pyhorizont:8,pyhorizontal_link:8,pyhorizontal_o:8,pyhurrican:[7,8,9,13],pyhurricane_method:[8,9],pyinclud:7,pyinstanc:11,pyinstance_link:11,pylay:11,pylayer_o:11,pylibrari:[7,9,11],pylibrary:9,pylibrary_cr:9,pylibrary_dealloc:9,pylibrary_destroi:9,pylibrary_getcel:9,pylibrary_link:9,pylibrary_linkpytyp:9,pylibrary_method:9,pylibrary_o:9,pymethoddef:[8,9,13],pymodule_addobject:[8,9],pynet:[8,11],pynet_link:8,pynet_o:11,pyobject:[8,9,10,11,13],pyobject_head:[8,9,13],pyobject_new:13,pypoint:[10,13],pypoint_dealloc:13,pypoint_getx:[10,13],pypoint_gety:13,pypoint_init:13,pypoint_link:13,pypoint_linkpytyp:13,pypoint_method:13,pypoint_new:13,pypoint_o:13,pypoint_setx:[10,13],pypoint_sety:13,pyseg:8,pystring_asstr:9,python27:36,python2:36,python:[0,1,2,3,4,5,6,7],pythoncpp:14,pythonpath:[19,40],pythontutori:25,pytype_ready:[8,9],pytype_ready_sub:8,pytypecompon:[8,11],pytypecontact:8,pytypeent:8,pytypeinheritedobjectdefinit:8,pytypelay:11,pytypelibrari:[7,9],pytypenet:11,pytypeobject:[8,9,13],pytypeobjectdefinit:[9,13],pytypeobjectlinkpytyp:[8,9],pytypeobjectlinkpytypenewinit:13,pytypepoint:13,pytyperootobjectdefinit:8,pyvert:8,pyvertical_link:8,pyvertical_o:8,qt5:36,quadri:39,quadruplet:35,quadtre:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],qualiti:40,quarter:39,queri:16,quit:[29,40],rail:1,ram:[30,39],ram_32_32:30,ram_clock:39,ramlib:35,rang:[31,32],rapidjson:36,rather:40,ratio:[23,35,40],rcw:27,rds:1,rds_activ:27,rds_alu1:27,rds_alu2:27,rds_alu3:27,rds_alu4:27,rds_alu5:27,rds_alu6:27,rds_cont:27,rds_gate:27,rds_ndif:27,rds_nimp:27,rds_pdif:27,rds_pimp:27,rds_poly:27,rds_via1:27,rds_via2:27,rds_via3:27,rds_via4:27,rds_via5:27,reach:[11,40],reachabl:40,read:[9,30,35,38,46],readabl:40,readi:16,real:[1,9,16,18],realli:40,reason:27,recent:[27,31],recommand:40,recommended:32,record:40,rectang:27,rectangl:27,recurs:1,red:40,redefin:[8,35],redefinit:8,redhat:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],redirect:40,redraw:40,redund:27,ref:30,refin:9,reflect:40,refnam:31,refresh:[29,31,40],reg:[29,31],regard:[20,31],regexp:35,regist:[1,7,9,29,30],regnumb:30,rel:[16,27,31,32,36],relat:[8,13,21,32,35,40],releas:[1,36,37],relev:[8,9,39],reli:[11,27,36,40],reload:40,remain:[8,9,13,18,40],remark:[8,35,40],rememb:8,remind:15,remov:[18,39,40],ren:30,renam:[39,46],render:40,reopen:17,reorganis:39,repeatedli:40,replac:[20,35,38,40],replic:9,repositori:[36,38],repres:[21,27,31,32,40,46],represent:40,request:[18,30,39],requir:[1,11,29,35],reserv:40,reset:[9,30,40],resizeab:1,resolut:[20,40],respect:[11,35,40],respons:[9,40],rest:[17,23],restart:[39,40],restructuredtext:36,result:[9,11,17,18,20,21,30,35,40],retain:11,retir:39,revers:[8,11],rewrit:[11,38],rewritten:38,rf1_4_16:30,rf1d_4_16:30,rf2lib:35,rflib:35,rhel6:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],rhel7:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],right:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,30,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],ring:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],rip:40,ripup:40,ripupcost:40,rise:[27,31],risk:27,rok:30,rom2_0b1010_0b1100:30,rom4_0b1010_0b1100_0b1111_0b0001:30,rom:30,romlib:35,root:[9,11,16,21,23,35,36],roselyn:32,rot_m:31,rot_p:31,rotat:[21,30,31],rotop:30,rout:[1,20,23,27,29],routabl:40,routag:40,routageck:31,routeck:1,router:[1,16],routingdriven:[35,40],row:21,rowend_x0:21,rp1:21,rp2:21,rpm:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],rsave:1,rubber:40,rule:[27,39,40],ruler:40,run:[16,17,19,22,23,31,35,36,39,40],runglobalrout:23,runnabl:16,runnegoci:23,runtim:40,s2r:27,safeti:40,sai:[11,19,21,36,39],said:16,sake:[8,16],same:[7,8,11,16,18,21,27,29,31,32,35,40],sarri:30,satur:40,saturateratio:40,saturaterp:40,save:[1,8,9],savecel:[16,21,23],scan:30,scarri:40,scheme:[39,40],scientif:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],scin:30,scn6m_deep_09:35,scope:20,scout:30,screen:40,script:[1,16],scriptmain:[16,17,21,23,39,40],scrub:9,search:[18,35,45],second:[1,11,16,21,27,30,31],section:[35,36,46],secur:35,see:[9,11,16,17,20,21,27,29,31,32,35,36,39,40],seem:[27,31,36,46],seen:[9,23],sefl:31,segment:[1,16,21],sel0:30,sel1:30,sel:30,select:[1,21,30],self:[8,9,10,13,20,29,30,31,32,35],selr:30,selram:30,selw:30,semant:20,send:27,sensit:31,sentinel:[8,9,13],separ:[9,11,27,29,36,39,40],sequenc:[23,31,40],sequenti:35,serv:[4,5],set:[1,7,9,10],setabutmentbox:[16,17,21],setadd:31,setand:31,setbuff:31,setcel:[16,17,21,23],setcomp:31,setdiv:31,seteditor:39,setextern:[16,21,23],setglob:[16,21,23],setmult:31,setmux:31,setnet:[21,23],setnot:31,setor:31,setplacementstatu:21,setrefin:1,setreg:31,setshift:31,settermin:[16,17],settransform:21,setup:[9,16,19,23,35,36],setx:[10,13],setxor:31,sety:13,seven:40,sever:[11,29,31,40],sff2:31,sff3:31,sff:31,sff_4:30,sfft_4:30,shadow:18,shamt:30,shape:[23,27],share:[1,7,8],she:8,shelf:11,shell:[19,31,36],shellsuccess:39,shift:[29,30,31,40],shifter:[1,29,30],shifter_4:30,ship:38,shortcut:1,should:[11,13,19,31,32,36,40],shouldn:27,show:[11,16,18,27,35,40],shown:[9,27,31,35,39],shrot_4:30,si2:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],side:[27,31,39,40],sig:29,sign:[30,31,35],signal:[1,4,5,21,29,30],signalin:[30,31,32],signalinout:[30,31,32],signalout:[30,31,32],signalunknown:31,signatur:[8,9,11],silli:27,similar:[8,40],similarli:32,simpl:[1,22,27,35],simplest:[16,35],simpli:[16,18,27,31],simplif:[21,36],simplifi:[19,31,36],simul:[31,32,38,39],sinc:18,singl:40,site:35,size:[27,30,31,32,39,40],skip:18,slanski:31,slice:31,slight:20,sligthli:36,slot:40,slow:40,slsoc6x:36,slsoc6x_64:36,small:[23,25,26,27,31,35,39,40],smallest:[30,46],smallskip:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],snapshot:1,snx:22,soc:[35,36],socket:40,softwar:1,sole:17,solut:40,solv:40,some:[1,11,16,18,20,27,29],someth:[16,20],sometim:21,somewhat:21,soon:39,sophi:[29,30,31,37],sourc:[16,27,31,36,38,40],sout:[21,23,31],sout_1:[21,23],south:[31,39],space:[23,27,31,35,39,40],spacemargin:[23,35,40],span:13,spec:36,special:[9,19,20],specif:[9,20,35,39,40],specifi:[30,31,40],speed:40,speedup:38,spl1:31,split:[11,39,40],spread:[23,40],squar:[23,27],src:36,sroka:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],st_config:31,stabl:36,stack:9,stage:1,stai:27,stamp:32,stand:40,standalon:1,standard:[9,11,13],standard_instances_list:29,standart:39,standpoint:27,start:[20,27,31,40],starter:15,state:[16,18,20,21,23,37,40],statement:46,static_cast:[8,10],statu:21,stechno:39,step:[8,9,27,31,35,36,39,40,46],still:[8,13,28,36,38,40],stimuli:1,stimulu:32,stl:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],stop:[16,17,21,23,39,40],storag:46,store:[9,10,16,20,30,40],straightforward:22,straigthforward:21,strap:40,strapripuplimit:40,strategi:39,stratu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28],stratus1:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],stratus2:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],stratus:31,stratus_mapping_name:31,stream:40,strict:[21,27],string:[9,16,20,30,31,32,35],stroke:40,strongli:40,strongly:32,struct:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],structur:1,stuck:[27,30],stuff:29,style:[9,40],sub:[19,31,32,39],subject:40,subsequ:46,substract:[30,31],substractor:30,subtli:18,success:39,successful:40,successfulli:[36,40],suffer:40,suffic:[21,40],suffix:39,suit:40,summar:20,summari:39,superpos:40,supli:30,suppl:39,suppli:[9,16],support:[7,9,11,13,20,23,32,36,38,40],suppress:40,sure:39,svn:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],swig:11,swiss:40,sxlib:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],sy_rm:31,sy_rp:31,sym:31,sym_x:31,sym_y:31,symbol:[1,9,16,19,22],symetr:31,symetri:[29,31],symmetri:21,symxy:31,sync:40,synch:40,synonym:23,synopsi:1,syntact:35,syntax:[1,9,20],synthesi:[1,22],synthet:[1,22,38,39],system:[21,31,35,36],system_library:35,tab:[1,21,29,31,35],table:27,tailor:9,take:[9,16,17,23,31,32,40],taken:[11,31,32],talu1:31,talu2:31,talu3:31,talu4:31,talu5:31,talu6:31,talux:27,target:[16,27],task:[8,19,36],taxonomi:35,team:36,technic:1,technolog:[1,16,19,21,22,31],tediou:[19,21,36],tee:40,tell:[9,16,19,27,29,30,35,36,39],temp:31,temp_ext:31,tempext:31,templat:11,temporari:[40,46],ten:11,term:[31,37],termin:1,terminolog:16,test:[1,29],testbench:31,text:[31,39,40],textwidth:37,than:[11,27,31,38,40],thank:[11,29,31,39,40],thei:[9,11,16,18,19,20,27,29,31,35,38,39,40],them:[9,11,20,23,27,36,39,40],therefor:[21,30],thesi:40,thi:[8,9,11,13,14,15,16,18,19,20,21,23,25,26,27,28,29,30,31,32,33,35,36,38,39,40,41,46],thing:32,third:[21,27,30,36],thispagestyl:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],those:[8,9,18,19,21,27,29,30,31,35,36,39,40],though:11,three:[7,9,21,27,30,40],through:[9,11,15,16],througout:27,thu:[9,20,35,40],tie:27,tie_x0:21,time:[8,11,31,32,40],tmp:20,todai:16,todbu:[16,17,21,23],togeth:[30,38],toggl:40,tolambda:16,too:[11,23,27,31,40],tool:[1,11,17,19,20],toolchain:40,toolengin:23,top:[31,36,39,40],topolog:40,toproutinglay:40,total:40,toward:[11,19,31],tp_compar:9,tp_dealloc:9,tp_hash:9,tp_init:13,tp_method:9,tp_new:13,tp_repr:9,tp_str:9,trace:[9,40],track:40,track_spacing_alu1:27,track_spacing_alu2:27,track_spacing_alu3:27,track_spacing_alu4:27,track_spacing_alu5:27,track_spacing_alu6:27,track_spacing_alu7:27,track_spacing_alu8:27,track_width_alu1:27,track_width_alu2:27,track_width_alu3:27,track_width_alu4:27,track_width_alu5:27,track_width_alu6:27,track_width_alu7:27,track_width_alu8:27,transform:[9,20],transistor:27,transit:32,translat:[21,27],transmiss:11,transpar:27,tree:[1,8,11,31],tricki:11,trigger:[35,40],tristat:[29,30,31,32],tristate:29,trough:39,trought:35,truli:35,trunk:35,tty:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],tupl:35,turn:[16,21,40],tutori:1,tweak:40,twenti:31,twentu:31,twice:[11,18,31],two:[8,11,15,16,17,19,20,21,23,27,29,30,31,32,35,36,38,39,40],type:[1,7,8],typebool:[19,23,35,40],typedef:[8,9,10,13],typedoubl:35,typeenumer:[23,35],typeint:[35,39,40],typeopt:35,typepercentag:[23,35,40],typerul:35,typestr:[35,39,40],typetab:35,typetitl:35,typic:[9,35,39],ubuntu:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],uint64_t:10,unabl:36,unbound:10,uncheck:21,undef:[8,31],undefined:31,under:[1,9,11,16,17,19,21,22,23,27,35],underli:11,underscor:31,understand:[11,36,45],uneed:21,unexpectedli:18,unicorn:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33],unifi:40,uniform:[23,35],uniformdens:[23,35,40],uniquif:40,unit:[10,11],units:46,univers:37,unknown:29,unlik:36,unlike:[15,16,38],unlink:35,unmov:40,unplaced:29,unpredict:18,unrout:40,unselect:40,unsign:30,unsupport:40,until:[21,23,40],unzoom:40,updat:9,updatesess:[16,17,20,21,23],upmc:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],upon:[11,31,33],upper:[16,27,30,31,40],uppercas:16,usabl:[13,16,27],usage:[27,40],use:[19,31,32,36],used:[30,40],useful:[1,29],user:1,usersguid:41,using:16,usr:[16,21,23,31],usual:[8,9,16,20],utf:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],val0:30,val1:30,val2:30,val3:30,valid:[9,11,30,39],valu:[1,8,9,13,19],variabl:[9,16,19,27,31,35],variant:30,variou:[9,11,16],vbe:[29,40],vdd:[16,21,23,29,30,31,32,35],vdde:39,vddi:39,vddin:[29,30,31,32],vector:[18,31,32],verbos:40,verboselevel1:[19,35,40],verboselevel2:[19,35,40],veri:[23,35,39,40],version:[7,14,25,28,33,36,40,41,43,46,47],vertic:[8,16,21,27,31,39,40],vertiv:31,vhdl:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],via12:[21,31],via1:31,via23:[21,31],via24:31,via25:31,via26:31,via2:31,via34:31,via35:31,via36:31,via3:31,via45:31,via46:31,via4:31,via56:31,via5:31,via:27,view:[9,16,18,20],viewer:[0,1,16,17,21,35,38,39],vim:31,vimrc:31,violet:40,virtual:[1,15],visibl:[16,40],visual:[27,40],visualis:16,vlsi:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],vlsisapd:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],vspace:39,vss:[16,21,23,29,30,31,32,35],vsse:39,vssi:39,vssin:[29,30,31,32],vst:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],vtracksreservedloc:40,vwidth:39,w7_64:36,w8_64:36,wai:[9,10,11,16,20,23,27,31,36,39,40],walk:40,walkthrough:18,wallac:31,want:[8,9,11,16,17,18,19,21,29,31,35,36,40],warn:11,weak:40,weakli:16,weari:18,weekli:21,well:[15,16,18,21,27,29,31,39,40],wen:30,were:40,west:[31,39],wether:31,what:[9,11,17,21,27,31,40],whatev:[35,36,40],when:[10,11,19,27,29,30,31,35,36,39,40,46],where:[7,21,22,32,35,40],whether:[8,18,39,40],which:[7,8,9,13,16,17,19,20,21,27,29,31,32,35,36,37,38,39,40,46],white:40,whitespac:40,whithout:[35,39],whitout:40,whole:[8,27,30,38,39,40,46],whose:[20,35],why:[9,11],wich:31,wide:35,wider:40,width:[8,11,16,27,30,31,40],width_vdd:27,width_vss:27,wil:18,window:[35,36,40],wirelength:40,witch:17,within:[31,40],without:[16,17,27,29,30,31,40],wok:30,won:11,word:[30,31,32],word_length:32,work:[9,16,17,20],work_dir:16,work_lib:18,workhors:15,working_library:35,worklib:35,world:16,wors:40,would:[10,11,18,31,35],wrap:[7,9,11],wrapper:[9,11,23,35],write:[11,15,18,30,31,32,35,39,40],written:[9,11,12,13,16,18,20,35],wrong:31,www:[36,43,46,47],wysiwyg:40,x_grid:27,xml:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],xnor2:30,xnor2_8:30,xnor2mask_0b000111:30,xnor:30,xor2:[30,31],xor2_8:30,xor:30,xored:30,xoring:30,xr2:31,xr2_1:[21,23],xr2_2:[21,23],xr2_x1:[21,23],xr2_x2:[21,23],xxxx:36,y_grid:27,y_slice:27,yacc:36,year:[11,40],yet:[8,31,36,40],yield:31,yifei:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],yosi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],you:[11,16,17,18,19,20,21,22,23,25,26,27,30,31,32,35,36,39,40],your:[1,11,16,17,19,22],zero:[11,27,30,31],zoom:40},titles:["Hurricane/Analog Reference","Comprenhensive Table of Contents","CRL Core Reference","Hurricane Reference","Katabatic Reference","Kite Reference","Oroshi Reference","2. Basic File Structure and CMake configuration","4. Case 2 - Hierarchy of DBo Derived Classes","3. Case 1 - DBo Derived, Standalone","6. Encapsulating DbU","1. Introduction","7. No C++ Hurricane::Name encapsulation","5. Case 3 - Non-DBo Standalone Classe","Hurricane Python/C++ API Tutorial","9. Advanced Topics","3. Making a Standard Cell – Layout","5. Make a script runnable through cgt","4. Manipulating Cells, Nets and Components","2. Setting up the Environment","1. Introduction","6. Making a hierarchical Cell – Netlist","7. Working in real mode","8. Tool Engines (CRL Core)","<no title>","Hurricane+Python Tutorial","Hurricane+Python Tutorial","Symbolic Layout","RDS – Symbolic to Real Conversion in Alliance","Stratus Developper’s Guide","DpGen generators manual","Stratus User’s Guide","Patterns module User’s Guide","Stratus : Netlist Capture Language","Unicorn Reference","Coriolis Configuration & Initialisation","Installation","Credits & License","Release Notes","Python Interface for Hurricane / Coriolis","CGT - The Graphical Interface","Coriolis User’s Guide","Viewer Reference","DEF API Reference","<no title>","Welcome to Coriolis’s documentation!","LEF API Reference","LEF/DEF Language Reference"],titleterms:{"boolean":31,"case":[8,9,13,21],"class":[8,9,13,29],"function":[15,31],"new":16,about:[11,18],abutment:16,add:31,addaccu:31,adding:16,additionn:36,addpat:32,advanc:15,affect:31,affect_ani:32,affect_fix:32,affect_int:32,aliment:31,allianc:[28,35,36,40],allianceframework:[16,18],am2901:39,analog:0,anoth:31,api:[14,43,46],architectur:35,argument:31,arithmet:31,associat:9,attribut:29,base:[8,40],basic:7,blif:22,botch:11,box:16,branch:36,breakpoint:17,buffer:31,build:36,call:46,callback:46,captur:[33,40],cell:[16,18,21,31],cgt:[17,40],chip:39,choic:11,circuit:31,clock:39,cmake:7,collect:18,command:40,comparison:31,complet:[16,21,23],compon:[16,18,27],comprenhens:1,configur:[7,19,31,35,40],connect:21,connector:31,constant:31,constructor:20,content:[1,26],control:40,convers:28,copyupseg:31,core:[2,16,23],corioli:[35,36,39,41,45],coriolisenv:36,creat:[16,21],creation:31,credit:37,crl:[2,16,23],data:[31,40],dbo:[8,9,13],dbu:[10,16],declar:32,declar_interfac:32,def:[43,47],defab:31,deriv:[8,9],descript:[29,31,32],design:[11,40],detail:40,devel:36,developp:29,directori:36,disclaim:11,disk:16,document:45,dpgen:[30,31],dpgenadsb2f:30,dpgenand2:30,dpgenand3:30,dpgenand4:30,dpgenbuff:30,dpgenbus:30,dpgenconst:30,dpgendff:30,dpgendfft:30,dpgenfifo:30,dpgeninv:30,dpgenmux2:30,dpgennand2:30,dpgennand2mask:30,dpgennand3:30,dpgennand4:30,dpgennbus:30,dpgennmux2:30,dpgennor2:30,dpgennor2mask:30,dpgennor3:30,dpgennor4:30,dpgennul:30,dpgenor2:30,dpgenor3:30,dpgenor4:30,dpgenram:30,dpgenrf1:30,dpgenrf1d:30,dpgenrom2:30,dpgenrom4:30,dpgensff:30,dpgensfft:30,dpgenshift:30,dpgenshrot:30,dpgenxnor2:30,dpgenxnor2mask:30,dpgenxor2:30,editor:31,encapsul:[10,12],engine:23,environ:[19,36],error:31,etesian:[23,40],exampl:[16,21,23,31,32,39],execut:[31,40],extens:31,facil:31,file:[7,8,9,13,16,19,21,22,27,31,35],fillcel:31,filter:40,first:[11,35],fix:36,from:21,gener:[20,30,31,35],get:16,getrefxy:31,global:40,graphic:40,grid:27,guid:[29,31,32,41],hack:35,head:9,header:[8,9,13],helper:35,hierarch:[15,21],hierarchi:8,highlight:31,hook:36,how:31,hurrican:[0,3,12,14,16,18,25,26,39,40],hypernet:15,implement:46,indice:45,initialis:35,inspector:40,installat:36,instanc:[21,29,31],instanci:31,instanciat:31,instanti:31,interfac:[39,40],intermedi:8,introduct:[11,20,31],katabat:4,katana:23,kind:20,kite:[5,40],knik:40,lambda:27,languag:[33,47],layer:[16,40],layout:[16,27,31],lef:[22,46,47],librari:[9,31],licens:37,line:40,link:[9,31],list:31,load:[18,22,35,40],look:40,macos:36,make:[16,17,21],manipul:18,manual:30,map:31,mbk_to_rds_bigvia_hole:27,mbk_to_rds_bigvia_metal:27,mbk_to_rds_segment:27,mbk_to_rds_via:27,mbk_wiresetting:27,measur:16,mechan:16,memento:40,method:[29,31,32],miscella:15,miscellan:40,mode:[22,40],model:29,modul:[8,9,31,32],multiplexor:31,name:[12,31],namespac:9,net:[16,18,21,29,31],netlist:[21,31,33,40],non:13,note:[38,46],occurrenc:15,oper:31,option:40,order:46,oroshi:6,packag:[31,36],pad:31,param:31,paramet:[29,31,32,40],part:[9,32],path:[19,31],pattern:[31,32],pattern_begin:32,pattern_end:32,patwrit:32,physic:[21,27],place:[21,31],placebottom:31,placecentr:31,placecontact:31,placeglu:31,placeleft:31,placement:39,placepin:31,placer:[23,40],placeref:31,placeright:31,placeseg:31,placetop:31,plug:21,plugin:39,power:21,powerr:31,print:40,provid:31,python:[8,9,14,25,26,39,40],rail:31,rds:[27,28],real:[22,28],recurs:39,refer:[0,2,3,4,5,6,34,42,43,46,47],regist:31,regular:21,releas:38,requir:36,resizeab:31,restrict:18,rout:31,routeck:31,router:[23,40],routingpad:[15,21],rsave:39,runnabl:17,save:[16,39],script:[17,40],second:35,segment:27,select:[35,40],session:16,set:[16,19,36,40],setrefin:31,share:9,shifter:31,shortcut:40,signal:31,simpl:39,snapshot:40,softwar:35,some:31,special:21,stage:35,standalon:[9,13],standard:16,stimuli:31,stratu:[29,31,33,40],structur:7,suppli:21,symbol:[27,28],synopsi:[29,31],syntax:[31,32],synthesi:40,synthet:40,tab:40,tabl:[1,27,45],technic:11,techno:19,technolog:35,termin:8,terminolog:20,test:31,through:17,tool:[23,35,40],topic:15,tran:15,transform:21,tree:[36,39],tutori:[14,25,26],type:9,under:[36,40],understand:46,unicorn:34,unit:[16,46],useful:31,user:[19,31,32,41],using:17,valu:[27,31],variou:20,view:21,viewer:[40,42],virtual:31,welcom:45,wire:21,work:22,yosi:[22,40],your:31}}) \ No newline at end of file diff --git a/documentation/etc/definitions.rst b/documentation/etc/definitions.rst index f15293f2..013d3088 100644 --- a/documentation/etc/definitions.rst +++ b/documentation/etc/definitions.rst @@ -68,7 +68,6 @@ .. |MIPS| replace:: :sc:`mips` .. |Am2901| replace:: :sc:`Am2901` .. |Hurricane| replace:: :sc:`Hurricane` -.. |HurricaneAMS| replace:: :sc:`HurricaneAMS` .. |CRL| replace:: :sc:`crl` .. |Alliance| replace:: :sc:`Alliance` .. |Yosys| replace:: :sc:`Yosys` @@ -98,7 +97,6 @@ .. |cgt| replace:: :cb:`cgt` .. |Chams| replace:: :sc:`Chams` .. |OpenChams| replace:: :sc:`OpenChams` -.. |Pharos| replace:: :cb:`Pharos` .. |API| replace:: :sc:`api` .. |STL| replace:: :sc:`stl` .. |XML| replace:: :sc:`xml` diff --git a/documentation/examples/scripts/fulladder.ap b/documentation/examples/scripts/fulladder.ap new file mode 100644 index 00000000..164a59e9 --- /dev/null +++ b/documentation/examples/scripts/fulladder.ap @@ -0,0 +1,16 @@ +V ALLIANCE : 6 +H fulladder,P,11/7/2018,100 +A 0,0,9000,10000 +I 6000,0,rowend_x0,filler_2,NOSYM +I 5000,0,tie_x0,filler_1,NOSYM +I 6500,0,o2_x2,o2_1,NOSYM +I 4500,5000,xr2_x1,xr2_2,SYM_Y +I 0,5000,xr2_x1,xr2_1,SYM_Y +I 2500,0,a2_x2,a2_2,NOSYM +I 0,0,a2_x2,a2_1,NOSYM +S 1000,3500,1000,6000,200,a,UP,ALU3 +S 500,3500,1000,3500,200,a,RIGHT,ALU2 +V 1000,3500,CONT_VIA2,a +V 500,3500,CONT_VIA,a +V 1000,6000,CONT_VIA,a +EOF diff --git a/documentation/examples/scripts/fulladder.gds b/documentation/examples/scripts/fulladder.gds new file mode 100644 index 0000000000000000000000000000000000000000..3a519c55412adf400a6c0a3072c1ecb95d9b6d9d GIT binary patch literal 33134 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 literal 0 HcmV?d00001 diff --git a/documentation/examples/scripts/fulladder.vst b/documentation/examples/scripts/fulladder.vst new file mode 100644 index 00000000..2b1fdde6 --- /dev/null +++ b/documentation/examples/scripts/fulladder.vst @@ -0,0 +1,120 @@ + +-- ======================================================================= +-- Coriolis Structural VHDL Driver +-- Generated on Jul 11, 2018, 11:23 +-- +-- To be interoperable with Alliance, it uses it's special VHDL subset. +-- ("man vhdl" under Alliance for more informations) +-- ======================================================================= + +entity fulladder is + port ( a : linkage bit + ; b : linkage bit + ; cin : linkage bit + ; cout : linkage bit + ; sout : linkage bit + ; vdd : linkage bit + ; vss : linkage bit + ); +end fulladder; + +architecture structural of fulladder is + + component xr2_x1 + port ( i0 : in bit + ; i1 : in bit + ; q : out bit + ; vdd : in bit + ; vss : in bit + ); + end component; + + component a2_x2 + port ( i0 : in bit + ; i1 : in bit + ; q : out bit + ; vdd : in bit + ; vss : in bit + ); + end component; + + component o2_x2 + port ( i0 : in bit + ; i1 : in bit + ; q : out bit + ; vdd : in bit + ; vss : in bit + ); + end component; + + component tie_x0 + port ( vdd : in bit + ; vss : in bit + ); + end component; + + component rowend_x0 + port ( vdd : in bit + ; vss : in bit + ); + end component; + + signal carry_1 : bit; + signal carry_2 : bit; + signal sout_1 : bit; + + +begin + + filler_2 : rowend_x0 + port map ( vdd => vdd + , vss => vss + ); + + filler_1 : tie_x0 + port map ( vdd => vdd + , vss => vss + ); + + o2_1 : o2_x2 + port map ( i0 => carry_2 + , i1 => carry_1 + , q => cout + , vdd => vdd + , vss => vss + ); + + xr2_2 : xr2_x1 + port map ( i0 => cin + , i1 => sout_1 + , q => sout + , vdd => vdd + , vss => vss + ); + + xr2_1 : xr2_x1 + port map ( i0 => a + , i1 => b + , q => sout_1 + , vdd => vdd + , vss => vss + ); + + a2_2 : a2_x2 + port map ( i0 => cin + , i1 => sout_1 + , q => carry_2 + , vdd => vdd + , vss => vss + ); + + a2_1 : a2_x2 + port map ( i0 => a + , i1 => b + , q => carry_1 + , vdd => vdd + , vss => vss + ); + +end structural; + diff --git a/documentation/examples/scripts/invertor.ap b/documentation/examples/scripts/invertor.ap new file mode 100644 index 00000000..edb0a1fb --- /dev/null +++ b/documentation/examples/scripts/invertor.ap @@ -0,0 +1,25 @@ +V ALLIANCE : 6 +H invertor,P,11/7/2018,100 +A 0,0,1500,5000 +S 1000,800,1000,1200,300,nq,UP,NDIF +S 1000,2800,1000,3700,300,nq,UP,PDIF +S 1000,1000,1000,4000,200,nq,UP,CALU1 +S 400,2000,700,2000,300,i,RIGHT,POLY +S 700,1400,700,2600,100,i,UP,POLY +S 700,600,700,1400,100,i,UP,NTRANS +S 700,2600,700,3900,100,i,UP,PTRANS +S 500,1000,500,4000,200,i,UP,CALU1 +S 350,400,350,1200,400,vss,UP,NDIF +S 0,300,1500,300,600,vss,RIGHT,CALU1 +S 1000,4300,1000,4800,300,vdd,UP,NTIE +S 350,2800,350,4600,400,vdd,UP,PDIF +S 0,4700,1500,4700,600,vdd,RIGHT,CALU1 +S 750,2700,750,5100,1500,nwell,UP,NWELL +V 1000,1000,CONT_DIF_N,nq +V 1000,3050,CONT_DIF_P,nq +V 1000,3500,CONT_DIF_P,nq +V 500,2000,CONT_POLY,i +V 400,500,CONT_DIF_N,vss +V 400,4500,CONT_DIF_P,vdd +V 1000,4700,CONT_DIF_N,vdd +EOF diff --git a/documentation/examples/scripts/invertor.vst b/documentation/examples/scripts/invertor.vst new file mode 100644 index 00000000..29e592f2 --- /dev/null +++ b/documentation/examples/scripts/invertor.vst @@ -0,0 +1,26 @@ + +-- ======================================================================= +-- Coriolis Structural VHDL Driver +-- Generated on Jul 11, 2018, 16:03 +-- +-- To be interoperable with Alliance, it uses it's special VHDL subset. +-- ("man vhdl" under Alliance for more informations) +-- ======================================================================= + +entity invertor is + port ( i : linkage bit + ; nq : linkage bit + ; vdd : linkage bit + ; vss : linkage bit + ); +end invertor; + +architecture structural of invertor is + + signal nwell : bit; + + +begin + +end structural; + diff --git a/documentation/index.rst b/documentation/index.rst index a690b796..dfb158f6 100644 --- a/documentation/index.rst +++ b/documentation/index.rst @@ -23,12 +23,13 @@ Contents: Unicorn/Unicorn.rst PythonCpp/index.rst RDS/index.rst + Analog/Analog.rst + Oroshi/Oroshi.rst lefapi/lefapi.rst defapi/defapi.rst lefdef/lefdef.rst - Indices and tables ================== diff --git a/hurricane/doc/CMakeLists.txt b/hurricane/doc/CMakeLists.txt index 7bcc2744..5f5417a9 100644 --- a/hurricane/doc/CMakeLists.txt +++ b/hurricane/doc/CMakeLists.txt @@ -1,2 +1,3 @@ add_subdirectory(hurricane) add_subdirectory(viewer) +add_subdirectory(analog) diff --git a/hurricane/doc/analog/CMakeLists.txt b/hurricane/doc/analog/CMakeLists.txt new file mode 100644 index 00000000..3481667f --- /dev/null +++ b/hurricane/doc/analog/CMakeLists.txt @@ -0,0 +1,20 @@ +# -*- mode: CMAKE; explicit-buffer-name: "CMakeLists.txt" -*- + + set ( htmlInstallDir share/doc/coriolis2/en/html/analog ) + set ( latexInstallDir share/doc/coriolis2/en/latex/analog ) + set ( doxExtras closed.png + open.png + tabs.css + ) + + if(BUILD_DOC AND DOXYGEN_FOUND) + add_custom_target ( analogDoc ALL + cd ${HURRICANE_SOURCE_DIR}/doc/analog + && ${DOXYGEN_EXECUTABLE} doxyfile + && cp -f ${doxExtras} html + ) + endif() + + install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} ) + install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} ) + install ( FILES asimbook.cls DESTINATION ${latexInstallDir} ) diff --git a/hurricane/doc/analog/MainPage.dox b/hurricane/doc/analog/MainPage.dox new file mode 100644 index 00000000..1d3d8ba1 --- /dev/null +++ b/hurricane/doc/analog/MainPage.dox @@ -0,0 +1,101 @@ +// -*- C++ -*- + +/*! \mainpage + * + * \section secMainDoc Software Architecture + * + * + * \subsection ssecUniqueInstance Unique Instance-Cell Relationship + * + * MetaTransistor and Device are derived classes of Cell and are the + * building blocks of all analogic designs. + * - MetaTransistor(s) are used to build the Devices, and \e only them. + * - Device(s) are then assembled into more complex design. + * + * The important point to remember is that Device and MetaTransistor + * \b are Cell(s). + * + * \note An analogy can be made between the Devices and the Standard Cells + * in the numeric world. + * + * In Analog designs, Devices and MetaTransistors are all parametriseds + * in such a way that each one become effectively unique. So any + * Device or MetaTransistor is only instanciated once with it's specific + * set of parameter's values, thus there is a \b unique relationship between + * a Device and it's instance. We can keep tab of only one of the two. + * As the Cell contains more information, this is the one we choose. + * But we still need the Instance to perform (store) the placement + * informations. So, how to get the Instance from one Device. + * + * Method 1: name matching. + * + * For the sake of clarity, we impose that the Device name must be identical + * to the instance name. This way we can lookup for an Instance in the + * top device with the same name as the current model. We assume that we + * indeed have the containing Cell in handy: + * +\code +Instance* instance = parentCell->getInstance( cell->getName() ); +\endcode + * + * Method 2: Slave instance. + * + * In the Hurricane data structure, every Device (Cell) keep track of the + * Instances pointing to it. Since there should be only one in analogic, + * we can do the following: + * +\code +Instance* instance = cell->getSlaveInstances().getFirst(); +\endcode + * + * + * \subsection ssecWhyMetaTrans Why Meta-Transistor + * + * The Hurricane database does not have true support for transistor + * as Cell(s), only a dedicated layer for Segment. Hence the + * implementation of the MetaTransistor in Hurricane/Analog. It provides + * a Cell derived class with four connectors (\c G , \c S , \c D , + * \c B ) and a comprenhensive set of electrical parameters. + * + * It is meant to represent a complete transistor, not a finger + * of a larger one, it \b is the larger one... + * + * + * \subsection ssecClassOrg Class Organization + * + * Almost UML schema of the Device related classes. + * + * \image html device_schema_1_uml.png + * + * For the Transistor device: + * + * -# The netlist is fixed and generated (in C++) in the Transistor, by + * instanciating one MetaTransistor. + * -# The layout is generated on the fly by calling the relevant + * python sceript. + * -# The parameters, which are commons to all the Transistor based + * devices are created in TransistorFamily. The parameters are created + * through the Device parameter factory and stored at the Device level. + * A pointer to the concrete type of Parameter is also kept at the + * TransistorFamily level. + * -# The Device::getParameters() method is implemented at this level + * and returns a TransistorArguments pointer. + * -# Parameters are used to set up the Device characteristics, either + * programmatically or through the Pharos graphical + * interface. + * -# Arguments, on the other hand, are mostly used to + * transmit the setting of a Device (i.e. it's Parameters values) + * to the Python script in charge of the layout generation. + * Arguments have Python wrapper PyArguments, and it is copies of + * the values that are transmitted. + * + * + * \subsection ssecOpenQuestions Open questions + * + * -# As Arguments are used to transmit parameters, why not simply + * encapsulate Parameters in a Python wrapper? Thus completly + * suppressing Arguments. And by the way, using pointers to + * to make the relationship bi-directionnal (event if it's not + * needed now). + */ + diff --git a/hurricane/doc/analog/SoC.css b/hurricane/doc/analog/SoC.css new file mode 100644 index 00000000..44bae898 --- /dev/null +++ b/hurricane/doc/analog/SoC.css @@ -0,0 +1,872 @@ + + +/* + * +-----------------------------------------------------------------+ + * | HTML Standart Tags | + * +-----------------------------------------------------------------+ + */ + + html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 { + font-size: 11pt; + /* The Open Sans font family is supplied by TexLive. */ + font-family: "Open Sans", Verdana, sans-serif;; + } + + html { + background: #dddddd; + } + + body { + color: black; + background: white; + background-color: white; + background-position: top left; + background-attachment: fixed; + background-repeat: no-repeat; + margin-top: 2em; + width: 600pt; + margin-right: auto; + margin-left: auto; + padding: 30pt; + /* + margin-right: 12%; + margin-left: 12%; + */ + } + + hr { + height: 1px; + border: 0; + color: #004400; + background-color: #004400; + } + + + h1, h2, h3, h4, h5, h6 { + /*font-family: "URW Bookman L", "Liberation Serif", sans-serif;*/ + font-family: "URW Bookman L"; + } + + h1.header { text-align: center; } + h1 { text-align: left; } + h2, h3, h4, h5, h6 { text-align: left; + padding-top: 11pt; + } + h1, h2, h3 { /*font-family: "Liberation Serif", sans-serif; */ + /*color: #09550B;*/ + } + h1 { font-weight: bold; font-size: 170%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ } + h2 { font-weight: bold; font-size: 140%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ } + h3 { font-weight: bold; font-size: 118%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ } + h4 { font-weight: bold; font-size: 100%; } + h5 { font-style: italic; font-size: 100%; } + h6 { font-variant: small-caps; font-size: 100%; } + + h2.classHierarchy { + /*border: 1px none #008500;*/ + border: 1px none #000000; + border-top-width: 1px; + border-top-style: dotted; + padding-top: 1em; + } + + + .hide { + display: none; + color: white; + } + + + p { + margin-top: 0.6em; + margin-bottom: 0.6em; + margin-left: 0.0em; + margin-right: 0.0em; + } + + + address { + text-align: right; + font-weight: bold; + font-style: italic; + font-size: 80%; + } + + + caption { font-weight: bold } + + + blockquote { + margin-left: 4em; + margin-right: 4em; + margin-top: 0.8em; + margin-bottom: 0.8em; + font-style: italic; + color: #003300; + } + + blockquote p { + margin-bottom: 0; + } + + blockquote address { + margin: 0; + } + + + table { + border-collapse: collapse; + } + + dt, dd { margin-top: 0; margin-bottom: 0; } + dt { font-weight: bold; } + + + pre, tt, code { + /*font-family: "andale mono", monospace;*/ + font-size: 100%; + white-space: pre; + } + + pre { + font-size: 80%; + /*border: dashed;*/ + border-width: thin; + border-color: #003300; + /*background-color: #EEEEEE;*/ + background-color: #FCFCE1; + padding: 0.5em; + margin-left: 2em; + margin-right: 2em + } + +/* + tt { color: green; } + */ + em { font-style: italic; + font-weight: normal; } + strong { font-weight: bold; } + + span.textit { font-style: italic; } + span.textbf { font-weight: bold; } + + .small { font-size: 90%; } + .white { color: #FFFFFF; } + + + ul.toc { + list-style: disc; + list-style: none; + } + + + a:link img, a:visited img { border-style: none; } + a img { color: white; } + + a { + color: black; + border-bottom: 1px solid black; + text-decoration: none; + } + + a:link, a:active, a:visited { + /*color: #09550B;*/ + /*text-decoration: none;*/ + } + + a:hover, a:focus { + /*color: #FF9900; */ + border-bottom: 2px solid black; + } + + +/* + * +-----------------------------------------------------------------+ + * | Doxygen Specific Classes | + * +-----------------------------------------------------------------+ + */ + + +/* ------------------------------------------------------------------- + * Header & Footer Classes (customized top page navigation bar). + */ + + h1.header { + font-size: 200%; + /*font-family: times, verdana, sans-serif;*/ + } + + h2.memtitle { + display: none; + } + + center.header { + background-color: #CCE6CA; + } + + table.header { + /*width: 100%;*/ + /*background-color: #EEEEEE;*/ + background-color: #CCE6CA; + } + + div.header { + text-align: center; + margin: 14pt 0pt 0pt 0pt; + } + + div.summary { + color: white; + background-color: black; + border: 4px solid black; + } + + div.summary a { + font-size: 90%; + color: white; + padding: 2px 0px; + text-align: center; + background-color: black; + border-bottom: none; + } + + table.header td { + padding: 2px 14px; + text-align: center; + font-weight: bold; + /*font-family: verdana, sans-serif;*/ + font-size: 110%; + } + + table.UserDefined { + border: 1px solid; + } + + table.UserDefined th { + border: 1px solid; + } + + table.UserDefined td { + padding: 0px 5px; + } + + table.DoxUser td, table.DoxUser th { + padding: 0px 5px; + border: 0px; + } + + table.DoxUser th { + background-color: #CCE6CA; + } + + table.footer1, table.footer2 { width: 100%; } + td.LFooter { text-align: left; } + td.RFooter { text-align: right; } + td.CFooter { text-align: center;} + table.footer2 td.RFooter { font-weight: bold; width: 35% } + table.footer2 td.CFooter { width: 30% } + table.footer2 td.LFooter { font-weight: bold; width: 35%; /*font-family: time;*/ } + + table.classHierarchy { + border-collapse: separate; + border-spacing: 5px; + font-size: 110%; + } + + table.classHierarchy a { + border-style: none; + border-bottom: none; + } + + table.classHierarchy tr { + border: 1px solid blue; + } + + table.classHierarchy td.normal { + border: 1px solid #dddddd; + width: 140pt; + text-align: center; + font-weight: bold; + background-color: #dddddd; + } + + table.classHierarchy td.virtual { + border: 1px solid black; + width: 140pt; + text-align: center; + font-weight: bold; + } + + table.classHierarchy td.wnormal { + border: 1px solid #dddddd; + width: 240pt; + text-align: center; + font-weight: bold; + background-color: #dddddd; + } + + table.classHierarchy td.wvirtual { + border: 1px solid black; + width: 240pt; + text-align: center; + font-weight: bold; + } + + div.ah, span.ah { + font-family: Times; + font-size: 300%; + font-weight: bold; + padding: 20px; + } + + div.title { + text-align: center; + font-size: 200%; + font-weight: bold; + padding: 20px; + border: 2px solid black; + } + + div.center, div.image { + text-align: center; + } + + +/* ------------------------------------------------------------------- + * Top navigation lists. + */ + + span.mlabels { + font-size: 90%; + font-style: italic; + padding-left: 10pt; + margin: 10pt; + border-left: 1px solid black + } + + div.contents { + padding-top: 20pt; + } + + div.tabs { + border-top: 1px solid black; + } + + div.tabs, div.tabs1, div.tabs2, div.tabs3, div.tabs4 { + border-left: 1px solid black; + } + + ul.tablist { + /* + padding: 5pt; + background-color: red; + */ + margin: 0pt; + padding: 0pt; + border-top: none; + border-bottom: none; + border-left: none; + border-right: none; + } + + ul.tablist li { + /* + margin-left: auto; + margin-right: auto; + overflow: auto; + display: inline; + background-color: yellow; + */ + font-size: 90%; + border-top: none; + border-bottom: 1px solid black; + border-left: none; + border-right: 1px solid black; + display: table-cell; + text-align: center; + padding: 2pt; + width: 5%; + } + + ul.tablist li:hover { + background-color: black; + color: white; + } + + ul.tablist li:hover a { + background-color: black; + color: white; + } + + ul.tablist * a { border-bottom: none; } + + ul.tablist * a:link img, ul.tablist * a:visited img { border-style: none; border-bottom: none; } + + ul.tablist * a:link, ul.tablist * a:visited { + color: black; + text-decoration: none; + } + + ul.tablist * a:hover, ul.tablist * a:focus, ul.tablist * a:active { + color: white; + text-decoration: underline; + } + + div.navpath { + padding: 5pt 0pt 0pt 0pt; + } + + .navpath ul { + text-align: center; + } + + .navpath ul li { + display: inline; + list-style-type: none; + padding-left: 20px; + padding-right: 10px; + background-image: url('closed.png'); + background-repeat: no-repeat; + background-position: left; + color: #364D7C; + } + + .navpath ul li a { + border: 2px solid black; + padding-left: 10px; + padding-right: 10px; + font-weight: bold; + color: black; + } + + +/* ------------------------------------------------------------------- + * Quick Index Class (top page navigation bar). + */ + + div.qindex, div.nav { + width: 100%-4px; + /*background-color: #DADAEF;*/ + /*background-color: #eeeeff;*/ + background-color: #cccccc; + /*background-color: #CCE6CA;*/ + border: 0px solid #003300; + text-align: center; + margin: 0px; + padding: 2px; + line-height: 140%; + } + + a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef { + text-decoration: none; + /*font-family: Courier;*/ + font-weight: normal; + /*font-size: 110%;*/ + } + + a.qindex, a.qindex:visited { + /*color: #09550B;*/ + color: black; + border: 2px solid #cccccc; + padding: 2px 2px; + border-bottom: none; + } + + a.qindex:hover { + /*background-color: #ddddff;*/ + font-weight: bold; + padding: 2px 2px; + border: 2px solid black; + } + + a.qindexHL, a.qindexHL:hover, a.qindexHL:visited { + background-color: #0c780c; + color: #ffffff; + border: 1px double #9295C2; + } + + a.code:link, a.code:visited, a.codeRef:link, a.codeRef:visited { + text-decoration: none; + font-weight: normal; + color: #0000ff; + } + + .indexkey { + background-color: #eeeeff; + border: 1px solid #b0b0b0; + padding: 2px 15px; + } + + .indexkey, .indexvalue { + background-color: #eeeeff; + border: 1px solid #b0b0b0; + padding: 2px 15px; + } + + .indexkey { + width: 40%; + } + + .indexvalue { + width: 80%; + } + + h3 a[name="index__"], + h3 a[name="index_a"], + h3 a[name="index_b"], + h3 a[name="index_c"], + h3 a[name="index_d"], + h3 a[name="index_e"], + h3 a[name="index_f"], + h3 a[name="index_g"], + h3 a[name="index_h"], + h3 a[name="index_i"], + h3 a[name="index_j"], + h3 a[name="index_k"], + h3 a[name="index_l"], + h3 a[name="index_m"], + h3 a[name="index_n"], + h3 a[name="index_o"], + h3 a[name="index_p"], + h3 a[name="index_q"], + h3 a[name="index_r"], + h3 a[name="index_s"], + h3 a[name="index_t"], + h3 a[name="index_u"], + h3 a[name="index_v"], + h3 a[name="index_w"], + h3 a[name="index_x"], + h3 a[name="index_y"], + h3 a[name="index_z"], + h3 a[name="index_0"], + h3 a[name="index_1"], + h3 a[name="index_2"], + h3 a[name="index_3"], + h3 a[name="index_4"], + h3 a[name="index_5"], + h3 a[name="index_6"], + h3 a[name="index_7"], + h3 a[name="index_8"], + h3 a[name="index_9"] + h3 a[id="index__"], + h3 a#index_a, + h3 a#index_b, + h3 a#index_c, + h3 a#index_d, + h3 a#index_e, + h3 a#index_f, + h3 a#index_g, + h3 a#index_h, + h3 a#index_i, + h3 a#index_j, + h3 a#index_k, + h3 a#index_l, + h3 a#index_m, + h3 a#index_n, + h3 a#index_o, + h3 a#index_p, + h3 a#index_q, + h3 a#index_r, + h3 a#index_s, + h3 a#index_t, + h3 a#index_u, + h3 a#index_v, + h3 a#index_w, + h3 a#index_x, + h3 a#index_y, + h3 a#index_z, + h3 a#index_0, + h3 a#index_1, + h3 a#index_2, + h3 a#index_3, + h3 a#index_4, + h3 a#index_5, + h3 a#index_6, + h3 a#index_7, + h3 a#index_8, + h3 a#index_9, + h3 a#index_0x7e + { + font-family: time; + font-size: 250%; + text-align: center; + } + + +/* ------------------------------------------------------------------- + * Verbatim Source Code / Examples. + */ + + div.fragment { + font-family: "Monospace"; + font-size: 80%; + border: none; + /*border-width: thin; */ + /*border-color: #003300;*/ + /*background-color: #FCFCE1;*/ + background-color: #fefefe; + padding: 0.5em; + margin-left: 5%; + margin-right: 5% + } + + div.line { + white-space: pre; + padding: 0pt; + margin: 0pt; + } + + span.keyword { color: #008000 } + span.keywordtype { color: #604020 } + span.keywordflow { color: #e08000 } + span.comment { color: #800000 } + span.preprocessor { color: #806020 } + span.stringliteral { color: #002080 } + span.charliteral { color: #008080 } + span.red { color: red } + + +/* ------------------------------------------------------------------- + * Attributes Listing. + */ + + a.el, a.elRef { + font-family: Courier; + font-weight: bold; + font-size: 110%; + color: black; + border-bottom: none; + } + + p.formulaDsp { + text-align: center; + } + + .mdTable { + /*border: 1px solid #868686;*/ + /*background-color: #DADAEF;*/ + /*background-color: #F4F4FB;*/ + border: 1px none #008500; + border-left-width: 1px; + border-left-style: solid; + /*background-color: #B8E6B8;*/ + /*background-color: #CCE6CA;*/ + margin-top: 25px; + font-size: 105%; + } + + .mdRow { + padding: 5px 10px; + } + + /* This Mozilla/Firefox bug has been corrected from v1.5. + * .mdname1 { + * padding: 3px 0px 0px 0px; + * } + */ + + .mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + font-size: 11px; + font-style: italic; + /*background-color: #FAFAFA;*/ + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; + } + + .memitem { + margin-bottom: 30px; + border: 1px none #008500; + } + + .memproto { + /*background-color: #CCE6CA;*/ + background-color: #cccccc; + border-left-width: 4px; + border-left-style: solid; + /*border-color: #008500;*/ + border-color: black; + } + + .memname { + white-space: nowrap; + padding-left: 5px; + font-size: 105%; + } + + table.memname * { + font-family: "Monospace"; + } + + + .memdoc{ + padding-left: 5px; + /*margin-top: -8px;*/ + border-left-width: 1px; + border-left-style: solid; + /*border-color: #008500;*/ + border-color: black; + } + + div.contents * table tr { + padding: 3px 3px 3px 8px; + } + + .memSeparator { + font-size: 1pt; + } + + .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight { + vertical-align: top; + /*padding: 1px 0px 0px 8px;*/ + padding: 3px 3px 3px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + /* + border-top-color: #0c0c0c; + border-right-color: #0c0c0c; + border-bottom-color: #0c0c0c; + border-left-color: #0c0c0c; + */ + border-top-style: none; + border-right-style: none; +/* + border-bottom-style: dotted; +*/ + border-left-style: none; + /*background-color: #DADAEF;*/ + /*background-color: #eeeeff;*/ + /*background-color: #EEEEEE;*/ + /*background-color: #CCE6CA;*/ + font-family: "Monospace"; + } + + .memTemplItemLeft, .memTemplItemRight { + border-bottom-width: 2px; + border-bottom-style: solid; + font-weight: bold; + } + + .memItemLeft { font-size: 11px; width: 35%; } + .memItemRight { font-size: 12px; } + .memTemplItemLeft { font-size: 11px; } + .memTemplItemRight { font-size: 12px; } + + .memTemplParams { + color: #FFFFFF; + background-color: #000000; + font-size: 11px; + font-weight: bold; + } + + .groupText, .groupHeader { + color: #09550B; + font-size: 130%; + font-weight: bold; + margin-top: 15px; + } + + .groupHeader { + margin-bottom: -30pt; + } + + .inherit { + display: none; + } + + +/* ------------------------------------------------------------------- + * General Classes Index. + */ + + span.icona { + margin-right: 10pt; + } + + div.toc li.level1 { + margin-left: 0px; + } + + div.toc li.level2 { + margin-left: 15px; + display: none; + } + + div.toc li.level3 { + margin-left: 30px; + display: none; + } + + div.toc li.level4 { + margin-left: 45px; + display: none; + } + + .directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; + } + + .directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; + } + + + div.directory { + margin: 10px 0px; + border-top: 2px solid black; + border-bottom: 2px solid black; + width: 100%; + } + + .directory table { + border-collapse: collapse; + } + + .directory td { + margin: 0px; + padding: 0px; + vertical-align: top; + } + + .directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; + } + + .directory td.entry a { + outline: none; + } + + .directory td.entry a img { + border: none; + } + + .directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); + } + + .directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; + } + + .directory img { + vertical-align: -30%; + } diff --git a/hurricane/doc/analog/asimbook.cls b/hurricane/doc/analog/asimbook.cls new file mode 100644 index 00000000..54270780 --- /dev/null +++ b/hurricane/doc/analog/asimbook.cls @@ -0,0 +1,798 @@ +%% +%% This is file `book.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% classes.dtx (with options: `book') +%% +%% This is a generated file. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file was generated from file(s) of the LaTeX base system. +%% -------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.2 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% This file may only be distributed together with a copy of the LaTeX +%% base system. You may however distribute the LaTeX base system without +%% such generated files. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{asimbook} + [2005/11/21 v1.0 + ASIM LaTeX document class] +\newcommand\@ptsize{} +\newif\if@restonecol +\newif\if@titlepage +\@titlepagetrue +\newif\if@openright +\newif\if@mainmatter \@mainmattertrue +\if@compatibility\else +\DeclareOption{a4paper} + {\setlength\paperheight {297mm}% + \setlength\paperwidth {210mm}} +\DeclareOption{a5paper} + {\setlength\paperheight {210mm}% + \setlength\paperwidth {148mm}} +\DeclareOption{b5paper} + {\setlength\paperheight {250mm}% + \setlength\paperwidth {176mm}} +\DeclareOption{letterpaper} + {\setlength\paperheight {11in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{legalpaper} + {\setlength\paperheight {14in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{executivepaper} + {\setlength\paperheight {10.5in}% + \setlength\paperwidth {7.25in}} +\DeclareOption{landscape} + {\setlength\@tempdima {\paperheight}% + \setlength\paperheight {\paperwidth}% + \setlength\paperwidth {\@tempdima}} +\fi +\if@compatibility + \renewcommand\@ptsize{0} +\else +\DeclareOption{10pt}{\renewcommand\@ptsize{0}} +\fi +\DeclareOption{11pt}{\renewcommand\@ptsize{1}} +\DeclareOption{12pt}{\renewcommand\@ptsize{2}} +\if@compatibility\else +\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse} +\fi +\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\if@compatibility\else +\DeclareOption{final}{\setlength\overfullrule{0pt}} +\fi +\DeclareOption{titlepage}{\@titlepagetrue} +\if@compatibility\else +\DeclareOption{notitlepage}{\@titlepagefalse} +\fi +\if@compatibility +\@openrighttrue +\else +\DeclareOption{openright}{\@openrighttrue} +\DeclareOption{openany}{\@openrightfalse} +\fi +\if@compatibility\else +\DeclareOption{onecolumn}{\@twocolumnfalse} +\fi +\DeclareOption{twocolumn}{\@twocolumntrue} +\DeclareOption{leqno}{\input{leqno.clo}} +\DeclareOption{fleqn}{\input{fleqn.clo}} +\DeclareOption{openbib}{% + \AtEndOfPackage{% + \renewcommand\@openbib@code{% + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + }% + \renewcommand\newblock{\par}}% +} +\ExecuteOptions{letterpaper,10pt,twoside,onecolumn,final,openright} +\ProcessOptions +\input{bk1\@ptsize.clo} +\setlength\lineskip{1\p@} +\setlength\normallineskip{1\p@} +\renewcommand\baselinestretch{} +\setlength\parskip{0\p@ \@plus \p@} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +\setcounter{topnumber}{2} +\renewcommand\topfraction{.7} +\setcounter{bottomnumber}{1} +\renewcommand\bottomfraction{.3} +\setcounter{totalnumber}{3} +\renewcommand\textfraction{.2} +\renewcommand\floatpagefraction{.5} +\setcounter{dbltopnumber}{2} +\renewcommand\dbltopfraction{.7} +\renewcommand\dblfloatpagefraction{.5} +%%%% Select Chapter font. +\newcommand \textchapter [1] {\textsf{\textbf{#1}}} +\newcommand \fontchapter {\sffamily \bfseries} +\if@twoside + \def\ps@headings{% + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\thepage\hfil\slshape\leftmark}% + \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% + \let\@mkboth\markboth + \def\chaptermark##1{% + \markboth {\MakeUppercase{% + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \@chapapp\ \thechapter. \ % + \fi + \fi + ##1}}{}}% + \def\sectionmark##1{% + \markright {\MakeUppercase{% + \ifnum \c@secnumdepth >\z@ + \thesection. \ % + \fi + ##1}}}} +\else + \def\ps@headings{% + \let\@oddfoot\@empty + \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% + \let\@mkboth\markboth + \def\chaptermark##1{% + \markright {\MakeUppercase{% + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \@chapapp\ \thechapter. \ % + \fi + \fi + ##1}}}} +\fi +\def\ps@myheadings{% + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\thepage\hfil\slshape\leftmark}% + \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% + \let\@mkboth\@gobbletwo + \let\chaptermark\@gobble + \let\sectionmark\@gobble + } + \if@titlepage + \newcommand\maketitle{\begin{titlepage}% + \let\footnotesize\small + \let\footnoterule\relax + \let \footnote \thanks + \null\vfil + \vskip 60\p@ + \begin{center}% + {\LARGE \@title \par}% + \vskip 3em% + {\large + \lineskip .75em% + \begin{tabular}[t]{c}% + \@author + \end{tabular}\par}% + \vskip 1.5em% + {\large \@date \par}% % Set date in \large size. + \end{center}\par + \@thanks + \vfil\null + \end{titlepage}% + \setcounter{footnote}{0}% + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\@title\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax +} +\else +\newcommand\maketitle{\par + \begingroup + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}% + \long\def\@makefntext##1{\parindent 1em\noindent + \hb@xt@1.8em{% + \hss\@textsuperscript{\normalfont\@thefnmark}}##1}% + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else + \newpage + \global\@topnum\z@ % Prevents figures from going at top of page. + \@maketitle + \fi + \thispagestyle{plain}\@thanks + \endgroup + \setcounter{footnote}{0}% + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\@title\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax +} +\def\@maketitle{% + \newpage + \null + \vskip 2em% + \begin{center}% + \let \footnote \thanks + {\LARGE \@title \par}% + \vskip 1.5em% + {\large + \lineskip .5em% + \begin{tabular}[t]{c}% + \@author + \end{tabular}\par}% + \vskip 1em% + {\large \@date}% + \end{center}% + \par + \vskip 1.5em} +\fi +\newcommand*\chaptermark[1]{} +\setcounter{secnumdepth}{2} +\newcounter {part} +\newcounter {chapter} +\newcounter {section}[chapter] +\newcounter {subsection}[section] +\newcounter {subsubsection}[subsection] +\newcounter {paragraph}[subsubsection] +\newcounter {subparagraph}[paragraph] +\renewcommand \thepart {\@Roman\c@part} +\renewcommand \thechapter {\@arabic\c@chapter} +\renewcommand \thesection {\thechapter.\@arabic\c@section} +\renewcommand\thesubsection {\thesection.\@arabic\c@subsection} +\renewcommand\thesubsubsection{\thesubsection .\@arabic\c@subsubsection} +\renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph} +\renewcommand\thesubparagraph {\theparagraph.\@arabic\c@subparagraph} +\newcommand\@chapapp{\chaptername} +\newcommand\frontmatter{% + \cleardoublepage + \@mainmatterfalse + \pagenumbering{roman}} +\newcommand\mainmatter{% + \cleardoublepage + \@mainmattertrue + \pagenumbering{arabic}} +\newcommand\backmatter{% + \if@openright + \cleardoublepage + \else + \clearpage + \fi + \@mainmatterfalse} +\newcommand\part{% + \if@openright + \cleardoublepage + \else + \clearpage + \fi + \thispagestyle{plain}% + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi + \null\vfil + \secdef\@part\@spart} + +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi + \markboth{}{}% + {\centering + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >-2\relax + \huge\bfseries \partname\nobreakspace\thepart + \par + \vskip 20\p@ + \fi + \Huge \bfseries #2\par}% + \@endpart} +\def\@spart#1{% + {\centering + \interlinepenalty \@M + \normalfont + \Huge \bfseries #1\par}% + \@endpart} +\def\@endpart{\vfil\newpage + \if@twoside + \if@openright + \null + \thispagestyle{empty}% + \newpage + \fi + \fi + \if@tempswa + \twocolumn + \fi} +\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi + \thispagestyle{plain}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} +\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +%%%%\def\@makechapterhead#1{% +%%%% \vspace*{50\p@}% +%%%% {\parindent \z@ \raggedright \normalfont +%%%% \ifnum \c@secnumdepth >\m@ne +%%%% \if@mainmatter +%%%% \huge\bfseries \@chapapp\space \thechapter +%%%% \par\nobreak +%%%% \vskip 20\p@ +%%%% \fi +%%%% \fi +%%%% \interlinepenalty\@M +%%%% \Huge \bfseries #1\par\nobreak +%%%% \vskip 40\p@ +%%%% }} + \newlength \titlewidth + \setlength \titlewidth {\textwidth} + \addtolength \titlewidth {\marginparwidth} + \addtolength \titlewidth {\marginparsep} + \def\@makechapterhead#1{% + \vspace*{50\p@}% + {\parindent \z@ \raggedleft \fontchapter + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \huge \@chapapp\space \thechapter + \par\nobreak + \vskip 20\p@ + \fi + \fi + \interlinepenalty\@M + \hsize=\titlewidth + \Huge #1 \par\nobreak + \hsize=\textwidth + \vskip 40\p@ + }} +\def\@schapter#1{\if@twocolumn + \@topnewpage[\@makeschapterhead{#1}]% + \else + \@makeschapterhead{#1}% + \@afterheading + \fi} +%%%%\def\@makeschapterhead#1{% +%%%% \vspace*{50\p@}% +%%%% {\parindent \z@ \raggedright +%%%% \normalfont +%%%% \interlinepenalty\@M +%%%% \Huge \bfseries #1\par\nobreak +%%%% \vskip 40\p@ +%%%% }} + \def\@makeschapterhead#1{% + \vspace*{50\p@}% + {\parindent \z@ \raggedright + \normalfont + \interlinepenalty\@M + \hsize=\titlewidth + \flushright + \Huge \bfseries #1\par\nobreak + \hsize=\textwidth + \vskip 40\p@ + }} +\newcommand\section{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\normalfont\Large\bfseries}} +\newcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\large\bfseries}} +\newcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\normalsize\bfseries}} +\newcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} +\newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} +\if@twocolumn + \setlength\leftmargini {2em} +\else + \setlength\leftmargini {2.5em} +\fi +\leftmargin \leftmargini +\setlength\leftmarginii {2.2em} +\setlength\leftmarginiii {1.87em} +\setlength\leftmarginiv {1.7em} +\if@twocolumn + \setlength\leftmarginv {.5em} + \setlength\leftmarginvi {.5em} +\else + \setlength\leftmarginv {1em} + \setlength\leftmarginvi {1em} +\fi +\setlength \labelsep {.5em} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +\renewcommand\theenumi{\@arabic\c@enumi} +\renewcommand\theenumii{\@alph\c@enumii} +\renewcommand\theenumiii{\@roman\c@enumiii} +\renewcommand\theenumiv{\@Alph\c@enumiv} +\newcommand\labelenumi{\theenumi.} +\newcommand\labelenumii{(\theenumii)} +\newcommand\labelenumiii{\theenumiii.} +\newcommand\labelenumiv{\theenumiv.} +\renewcommand\p@enumii{\theenumi} +\renewcommand\p@enumiii{\theenumi(\theenumii)} +\renewcommand\p@enumiv{\p@enumiii\theenumiii} +\newcommand\labelitemi{\textbullet} +\newcommand\labelitemii{\normalfont\bfseries \textendash} +\newcommand\labelitemiii{\textasteriskcentered} +\newcommand\labelitemiv{\textperiodcentered} +\newenvironment{description} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +\newcommand*\descriptionlabel[1]{\hspace\labelsep + \normalfont\bfseries #1} +\newenvironment{verse} + {\let\\\@centercr + \list{}{\itemsep \z@ + \itemindent -1.5em% + \listparindent\itemindent + \rightmargin \leftmargin + \advance\leftmargin 1.5em}% + \item\relax} + {\endlist} +\newenvironment{quotation} + {\list{}{\listparindent 1.5em% + \itemindent \listparindent + \rightmargin \leftmargin + \parsep \z@ \@plus\p@}% + \item\relax} + {\endlist} +\newenvironment{quote} + {\list{}{\rightmargin\leftmargin}% + \item\relax} + {\endlist} +\if@compatibility +\newenvironment{titlepage} + {% + \cleardoublepage + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse\newpage + \fi + \thispagestyle{empty}% + \setcounter{page}\z@ + }% + {\if@restonecol\twocolumn \else \newpage \fi + } +\else +\newenvironment{titlepage} + {% + \cleardoublepage + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse\newpage + \fi + \thispagestyle{empty}% + \setcounter{page}\@ne + }% + {\if@restonecol\twocolumn \else \newpage \fi + \if@twoside\else + \setcounter{page}\@ne + \fi + } +\fi +\newcommand\appendix{\par + \setcounter{chapter}{0}% + \setcounter{section}{0}% + \gdef\@chapapp{\appendixname}% + \gdef\thechapter{\@Alph\c@chapter}} +\setlength\arraycolsep{5\p@} +\setlength\tabcolsep{6\p@} +\setlength\arrayrulewidth{.4\p@} +\setlength\doublerulesep{2\p@} +\setlength\tabbingsep{\labelsep} +\skip\@mpfootins = \skip\footins +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} +\@addtoreset {equation}{chapter} +\renewcommand\theequation + {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@equation} +\newcounter{figure}[chapter] +\renewcommand \thefigure + {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@figure} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename\nobreakspace\thefigure} +\newenvironment{figure} + {\@float{figure}} + {\end@float} +\newenvironment{figure*} + {\@dblfloat{figure}} + {\end@dblfloat} +\newcounter{table}[chapter] +\renewcommand \thetable + {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@table} +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename\nobreakspace\thetable} +\newenvironment{table} + {\@float{table}} + {\end@float} +\newenvironment{table*} + {\@dblfloat{table}} + {\end@dblfloat} +\newlength\abovecaptionskip +\newlength\belowcaptionskip +\setlength\abovecaptionskip{10\p@} +\setlength\belowcaptionskip{0\p@} +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip + \sbox\@tempboxa{#1: #2}% + \ifdim \wd\@tempboxa >\hsize + #1: #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} +\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} +\newcommand\@pnumwidth{1.55em} +\newcommand\@tocrmarg{2.55em} +\newcommand\@dotsep{4.5} +\setcounter{tocdepth}{2} +\newcommand\tableofcontents{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\contentsname + \@mkboth{% + \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}% + \@starttoc{toc}% + \if@restonecol\twocolumn\fi + } +\newcommand*\l@part[2]{% + \ifnum \c@tocdepth >-2\relax + \addpenalty{-\@highpenalty}% + \addvspace{2.25em \@plus\p@}% + \setlength\@tempdima{3em}% + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth + {\leavevmode + \large \bfseries #1\hfil \hb@xt@\@pnumwidth{\hss #2}}\par + \nobreak + \global\@nobreaktrue + \everypar{\global\@nobreakfalse\everypar{}}% + \endgroup + \fi} +%%%%\newcommand*\l@chapter[2]{% +%%%% \ifnum \c@tocdepth >\m@ne +%%%% \addpenalty{-\@highpenalty}% +%%%% \vskip 1.0em \@plus\p@ +%%%% \setlength\@tempdima{1.5em}% +%%%% \begingroup +%%%% \parindent \z@ \rightskip \@pnumwidth +%%%% \parfillskip -\@pnumwidth +%%%% \leavevmode \bfseries +%%%% \advance\leftskip\@tempdima +%%%% \hskip -\leftskip +%%%% #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par +%%%% \penalty\@highpenalty +%%%% \endgroup +%%%% \fi} +\newcommand\l@chapter[2]{% + \ifnum \c@tocdepth >\m@ne + \addpenalty{-\@highpenalty}% + \vskip 1.0em \@plus\p@ + \setlength\@tempdima{1.5em}% + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth + \leavevmode \fontchapter + \advance\leftskip\@tempdima + \hskip -\leftskip + #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par + \penalty\@highpenalty + \endgroup + \fi} +\newcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}} +\newcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}} +\newcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}} +\newcommand*\l@paragraph{\@dottedtocline{4}{10em}{5em}} +\newcommand*\l@subparagraph{\@dottedtocline{5}{12em}{6em}} +\newcommand\listoffigures{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\listfigurename}% + \@mkboth{\MakeUppercase\listfigurename}% + {\MakeUppercase\listfigurename}% + \@starttoc{lof}% + \if@restonecol\twocolumn\fi + } +\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}} +\newcommand\listoftables{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\listtablename}% + \@mkboth{% + \MakeUppercase\listtablename}% + {\MakeUppercase\listtablename}% + \@starttoc{lot}% + \if@restonecol\twocolumn\fi + } +\let\l@table\l@figure +\newdimen\bibindent +\setlength\bibindent{1.5em} +\newenvironment{thebibliography}[1] + {\chapter*{\bibname}% + \@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}% + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \@openbib@code + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \sloppy + \clubpenalty4000 + \@clubpenalty \clubpenalty + \widowpenalty4000% + \sfcode`\.\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} +\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em} +\let\@openbib@code\@empty +\newenvironment{theindex} + {\if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \columnseprule \z@ + \columnsep 35\p@ + \twocolumn[\@makeschapterhead{\indexname}]% + \@mkboth{\MakeUppercase\indexname}% + {\MakeUppercase\indexname}% + \thispagestyle{plain}\parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\@idxitem} + {\if@restonecol\onecolumn\else\clearpage\fi} +\newcommand\@idxitem{\par\hangindent 40\p@} +\newcommand\subitem{\@idxitem \hspace*{20\p@}} +\newcommand\subsubitem{\@idxitem \hspace*{30\p@}} +\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} +\renewcommand\footnoterule{% + \kern-3\p@ + \hrule\@width.4\columnwidth + \kern2.6\p@} +\@addtoreset{footnote}{chapter} +\newcommand\@makefntext[1]{% + \parindent 1em% + \noindent + \hb@xt@1.8em{\hss\@makefnmark}#1} +\newcommand\contentsname{Contents} +\newcommand\listfigurename{List of Figures} +\newcommand\listtablename{List of Tables} +\newcommand\bibname{Bibliography} +\newcommand\indexname{Index} +\newcommand\figurename{Figure} +\newcommand\tablename{Table} +\newcommand\partname{Part} +\newcommand\chaptername{Chapter} +\newcommand\appendixname{Appendix} +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +\setlength\columnsep{10\p@} +\setlength\columnseprule{0\p@} +\pagestyle{headings} +\pagenumbering{arabic} +\if@twoside +\else + \raggedbottom +\fi +\if@twocolumn + \twocolumn + \sloppy + \flushbottom +\else + \onecolumn +\fi +\endinput +%% +%% End of file `book.cls'. diff --git a/hurricane/doc/analog/closed.png b/hurricane/doc/analog/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..e4e2b25adb14b76c58d22aa1e4122e0c3338d4ac GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VE}kxqAr*{o=U(JwP~dQh&wG{9 z7bU@>l`1S#9&h*6jlsikGp7o-gD)%l1R2KAyPsb#-E|=@%i8tlX|Z2rRtJQ;8nPKn XltlO!^KID#G>^g4)z4*}Q$iB}Y*r*7 literal 0 HcmV?d00001 diff --git a/hurricane/doc/analog/doxyfile b/hurricane/doc/analog/doxyfile new file mode 100644 index 00000000..4a85a94f --- /dev/null +++ b/hurricane/doc/analog/doxyfile @@ -0,0 +1,1497 @@ +# Doxyfile 1.5.7.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +MARKDOWN_SUPPORT = NO + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "Hurricane Analog" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 3.0 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = . + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, +# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, +# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, +# Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = NO + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 2 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# 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 = "function=\fn " \ + "important=\par Important:\n " \ + "caution=\par Caution:\n " \ + "remark=\par Remark:\n " \ + "sample=\par Sample:\n " \ + "Return=Returns: " \ + "unsigned=\c unsigned " \ + "POD=\c POD " \ + "True=\b True " \ + "true=\b true " \ + "False=\b False " \ + "false=\b false " \ + "public=\c public " \ + "protected=\c protected " \ + "private=\c private " \ + "static=\c static " \ + "virtual=\c virtual " \ + "this=\c this " \ + "VERTICAL=\b VERTICAL " \ + "HORIZONTAL=\b HORIZONTAL " \ + "NULL=\c NULL " \ + "stream=\c stream " \ + "iostream=\c iostream " \ + "stdin=\c stdin " \ + "stdout=\c stdout " \ + "stderr=\c stderr " \ + "string=\c string " \ + "vector=\c vector " \ + "list=\c list " \ + "map=\c map " \ + "set=\c set " \ + "STL=STL " + +# 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. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penality. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will rougly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +#SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 1 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +#SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by +# doxygen. The layout file controls the global structure of the generated output files +# in an output format independent way. The create the layout file that represents +# doxygen's defaults, run doxygen with the -l option. You can optionally specify a +# file name after the option, if omitted DoxygenLayout.xml will be used as the name +# of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = NO + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = doxygen.warn.log + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = MainPage.dox + +# 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 +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = *.h \ + *.cpp \ + *.dox + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = . + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = images + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = YES + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 2 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = header.html + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = footer.html + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +#HTML_EXTRA_STYLESHEET = SoC.css +HTML_STYLESHEET = SoC.css + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +#HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER +# are set, an additional index file will be generated that can be used as input for +# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated +# HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# Qt Help Project / Namespace. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# Qt Help Project / Virtual Folders. + +QHP_VIRTUAL_FOLDER = doc + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file . + +QHG_LOCATION = + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 1 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to FRAME, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. Other possible values +# for this tag are: HIERARCHIES, which will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list; +# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which +# disables this behavior completely. For backwards compatibility with previous +# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE +# respectively. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = header.tex + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = __DOXYGEN_PROCESSOR__ + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = html/hurricane.tag + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +#DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = NO + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = NO + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/hurricane/doc/analog/footer.html b/hurricane/doc/analog/footer.html new file mode 100644 index 00000000..d1f33d69 --- /dev/null +++ b/hurricane/doc/analog/footer.html @@ -0,0 +1,16 @@ +
                                                                                            +


                                                                                            + + + + + +
                                                                                            Generated by doxygen $doxygenversion on $dateReturn to top of page
                                                                                            + + + + + +
                                                                                            Hurricane VLSI DatabaseCopyright © 2000-2016 Bull S.A. All rights reserved
                                                                                            + + diff --git a/hurricane/doc/analog/header.html b/hurricane/doc/analog/header.html new file mode 100644 index 00000000..96993947 --- /dev/null +++ b/hurricane/doc/analog/header.html @@ -0,0 +1,26 @@ + + + + + Hurricane Documentation + + + + + +

                                                                                            Hurricane VLSI Database

                                                                                            + +
                                                                                            + diff --git a/hurricane/doc/analog/header.tex b/hurricane/doc/analog/header.tex new file mode 100644 index 00000000..ec779312 --- /dev/null +++ b/hurricane/doc/analog/header.tex @@ -0,0 +1,47 @@ + + + \documentclass[a4paper]{asimbook} + + \usepackage{a4wide} + \usepackage{makeidx} + \usepackage{fancyhdr} + \usepackage{graphicx} + \usepackage{multicol} + \usepackage{float} + \usepackage{textcomp} + \usepackage{alltt} + \usepackage{times} + \ifx\pdfoutput\undefined + \usepackage[ps2pdf,pagebackref=true,colorlinks=true,linkcolor=blue]{hyperref} + \usepackage{pspicture} + \else + \usepackage[pdftex,pagebackref=true,colorlinks=true,linkcolor=blue]{hyperref} + \fi + \usepackage{doxygen} + + \makeindex + \setcounter{tocdepth}{1} + \renewcommand{\footrulewidth}{0.4pt} + \raggedbottom + + + \begin{document} + + \begin{titlepage} + \vspace*{7cm} + \begin{center} + {\Large $projectname Reference Manual\\[1ex]\large $projectnumber }\\ + \vspace*{1cm} + {\large Generated by Doxygen $doxygenversion}\\ + \vspace*{0.5cm} + {\small $datetime}\\ + \end{center} + \end{titlepage} + + \clearemptydoublepage + \pagenumbering{roman} + + \tableofcontents + \clearemptydoublepage + + \pagenumbering{arabic} diff --git a/hurricane/doc/analog/images/device_schema_1_uml.pdf b/hurricane/doc/analog/images/device_schema_1_uml.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0814350286023e29f83deaa08bcd620df21ade19 GIT binary patch literal 13595 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 literal 0 HcmV?d00001 diff --git a/hurricane/doc/analog/images/device_schema_1_uml.xfig b/hurricane/doc/analog/images/device_schema_1_uml.xfig new file mode 100644 index 00000000..757ba5fc --- /dev/null +++ b/hurricane/doc/analog/images/device_schema_1_uml.xfig @@ -0,0 +1,287 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Metric +A4 +110.00 +Single +-2 +1200 2 +0 32 #ffeb6b +6 2700 2475 4590 3150 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2745 2700 4545 2700 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2745 2790 4545 2790 +2 2 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 2745 2475 4545 2475 4545 3150 2745 3150 2745 2475 +4 1 0 50 -1 18 10 0.0000 4 150 1485 3645 2655 map\001 +-6 +6 -450 2475 2250 3150 +2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 3 + 2025 2475 2025 2700 2250 2700 +2 1 0 1 0 30 60 -1 20 0.000 0 0 8 0 0 6 + -450 3150 -450 2475 2025 2475 2250 2700 2250 3150 -450 3150 +4 0 0 50 -1 12 8 0.0000 4 105 975 -405 3060 Python script\001 +4 0 0 50 -1 14 8 0.0000 4 120 1050 -405 2610 Map to layout:\001 +4 0 0 50 -1 12 8 0.0000 4 105 2325 -405 2790 The map from a layout type name\001 +4 0 0 50 -1 12 8 0.0000 4 105 2025 -405 2925 to a path of the associated\001 +-6 +6 6255 4950 8280 5625 +2 1 0 1 0 0 50 -1 20 0.000 0 0 -1 0 0 5 + 8100 5535 8190 5490 8280 5535 8190 5580 8100 5535 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6300 5175 8100 5175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6300 5400 8100 5400 +2 2 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 6300 4950 8100 4950 8100 5625 6300 5625 6300 4950 +4 1 0 50 -1 18 10 0.0000 4 120 810 7200 5130 Transistor\001 +-6 +6 855 4950 2745 6300 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 900 5175 2700 5175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 900 6075 2700 6075 +2 2 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 900 4950 2700 4950 2700 6300 900 6300 900 4950 +4 0 0 50 -1 12 10 0.0000 4 105 315 945 5355 -_w\001 +4 0 0 50 -1 12 10 0.0000 4 135 315 945 5580 -_l\001 +4 0 0 50 -1 12 10 0.0000 4 135 1365 945 6030 -_sourceFirst\001 +4 0 0 50 -1 12 10 0.0000 4 105 315 945 5805 -_m\001 +4 1 0 50 -1 18 10 0.0000 4 150 1185 1845 5130 TransistorArgs\001 +-6 +6 855 6750 2745 7425 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 900 6975 2700 6975 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 900 7200 2700 7200 +2 2 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 900 6750 2700 6750 2700 7425 900 7425 900 6750 +4 0 0 50 -1 12 10 0.0000 4 135 630 945 7155 -_mint\001 +4 1 0 50 -1 18 10 0.0000 4 150 1575 1845 6930 TransistorMultiArgs\001 +-6 +6 3555 6750 5580 7425 +2 1 0 1 0 0 50 -1 20 0.000 0 0 -1 0 0 5 + 5400 7335 5490 7290 5580 7335 5490 7380 5400 7335 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 7200 5400 7200 +2 4 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 5400 7425 3600 7425 3600 6750 5400 6750 5400 7425 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 6975 5400 6975 +4 1 0 50 -1 18 10 0.0000 4 120 1110 4500 6930 TransistorPair\001 +-6 +6 5625 6075 8325 6750 +2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 3 + 8100 6075 8100 6300 8325 6300 +2 1 0 1 0 30 60 -1 20 0.000 0 0 8 0 0 6 + 5625 6750 5625 6075 8100 6075 8325 6300 8325 6750 5625 6750 +4 0 0 50 -1 14 8 0.0000 4 120 1575 5670 6210 Unique cell-instance:\001 +4 0 0 50 -1 12 8 0.0000 4 75 2100 5670 6390 One Instance of the MetaT is\001 +4 0 0 50 -1 12 8 0.0000 4 90 2475 5670 6525 created in the Transistor, but no\001 +4 0 0 50 -1 12 8 0.0000 4 105 2400 5670 6660 pointer is kept (through _metaT)\001 +-6 +6 3555 8325 5445 8775 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 8550 5400 8550 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 8640 5400 8640 +2 2 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 3600 8325 5400 8325 5400 8775 3600 8775 3600 8325 +4 1 0 50 -1 18 10 0.0000 4 120 1170 4500 8505 DifferentialPair\001 +-6 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 0 1.00 90.00 180.00 + 7200 450 7200 -450 +2 1 0 1 0 0 50 -1 -1 4.000 0 0 -1 0 0 4 + 5895 810 5625 810 5625 -990 3150 -990 +2 1 0 1 0 0 50 -1 -1 4.000 0 0 -1 0 0 4 + 6120 3735 5400 3735 5400 810 4500 810 +2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 6 + 6120 3960 5175 3960 5175 1800 2475 1800 2475 810 1800 810 +2 1 1 1 0 0 50 -1 -1 4.000 0 0 -1 0 0 4 + 900 675 900 225 3600 225 3600 675 +2 1 1 1 0 0 50 -1 -1 4.000 0 0 -1 1 0 2 + 1 0 1.00 90.00 180.00 + 2250 225 2250 -225 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 0 900 1800 900 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 0 1800 1800 1800 +2 1 0 1 0 0 50 -1 20 0.000 0 0 -1 0 0 5 + 5895 810 5985 765 6075 810 5985 855 5895 810 +2 1 0 1 0 0 60 -1 -1 0.000 0 0 -1 0 0 4 + 8280 3735 9000 3735 9000 5085 9900 5085 +2 1 0 1 0 0 60 -1 -1 0.000 0 0 -1 0 0 3 + 10800 4275 10800 0 7200 0 +2 2 0 0 0 0 55 -1 0 2.000 0 0 -1 0 0 5 + 8460 -225 8640 -225 8640 225 8460 225 8460 -225 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1350 -450 3150 -450 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1350 -900 3150 -900 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2700 900 4500 900 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2700 1350 4500 1350 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6075 675 8325 675 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6075 900 8325 900 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6300 -675 8100 -675 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6300 -585 8100 -585 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 9900 4500 11700 4500 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 9900 8100 11700 8100 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 9000 -675 10800 -675 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 9000 -585 10800 -585 +2 2 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 6300 -900 8100 -900 8100 -450 6300 -450 6300 -900 +2 2 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 9000 -900 10800 -900 10800 -450 9000 -450 9000 -900 +2 2 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 2700 675 4500 675 4500 1575 2700 1575 2700 675 +2 4 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 3150 -225 1350 -225 1350 -1125 3150 -1125 3150 -225 +2 2 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 0 675 1800 675 1800 2025 0 2025 0 675 +2 2 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 9900 4275 11700 4275 11700 8325 9900 8325 9900 4275 +2 1 0 1 0 0 60 -1 20 0.000 0 0 -1 0 0 2 + 8280 5535 9900 5535 +2 1 1 1 0 0 50 -1 -1 4.000 0 0 -1 0 0 2 + 9045 5085 9045 5535 +2 1 0 1 0 0 50 -1 -1 4.000 0 0 -1 0 0 4 + 8100 5085 8550 5085 8550 -765 9000 -765 +2 2 0 0 0 0 55 -1 0 2.000 0 0 -1 0 0 5 + 8460 3465 8640 3465 8640 3915 8460 3915 8460 3465 +2 1 0 1 0 0 50 -1 20 0.000 0 0 -1 0 0 5 + 5895 1035 5985 990 6075 1035 5985 1080 5895 1035 +2 1 0 1 0 32 60 -1 -1 0.000 0 0 -1 0 0 4 + 5895 1035 5625 1035 5625 2610 4545 2610 +2 2 0 0 0 0 55 -1 0 2.000 0 0 -1 0 0 5 + 5310 2385 5490 2385 5490 2835 5310 2835 5310 2385 +2 2 0 0 0 0 55 -1 0 2.000 0 0 -1 0 0 5 + 5085 2385 5265 2385 5265 2835 5085 2835 5085 2385 +2 1 1 1 0 0 50 -1 -1 4.000 0 0 -1 0 0 2 + 6525 5625 6525 6075 +2 1 1 1 0 32 50 -1 -1 4.000 0 0 -1 0 0 2 + 2250 2835 2745 2835 +2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 5 + 6120 3735 6210 3690 6300 3735 6210 3780 6120 3735 +2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 5 + 6120 3960 6210 3915 6300 3960 6210 4005 6120 3960 +2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 5 + 8100 3735 8190 3690 8280 3735 8190 3780 8100 3735 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6300 3600 8100 3600 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6300 3690 8100 3690 +2 4 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 8325 1575 6075 1575 6075 450 8325 450 8325 1575 +2 4 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 8100 4050 6300 4050 6300 3375 8100 3375 8100 4050 +2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2 + 1 0 1.00 90.00 180.00 + 7200 3375 7200 1575 +2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2 + 1 0 1.00 90.00 180.00 + 7200 4950 7200 4050 +2 1 1 1 0 32 50 -1 -1 4.000 0 0 -1 0 0 2 + 9135 5085 9135 7335 +2 1 1 1 0 32 50 -1 -1 4.000 0 0 -1 0 0 3 + 4500 6750 4500 4500 7200 4500 +2 1 0 1 0 0 60 -1 -1 0.000 0 0 -1 0 0 2 + 2700 5085 6300 5085 +2 2 0 0 0 0 55 -1 0 2.000 0 0 -1 0 0 5 + 4410 4860 4590 4860 4590 5310 4410 5310 4410 4860 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + -450 3825 1350 3825 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + -450 3915 1350 3915 +2 1 1 1 0 0 50 -1 -1 4.000 0 0 -1 1 0 4 + 1 0 1.00 90.00 180.00 + 1800 4950 1800 4500 450 4500 450 4185 +2 4 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 1350 4185 -450 4185 -450 3600 1350 3600 1350 4185 +2 1 0 1 0 32 50 -1 -1 4.000 0 0 -1 1 0 2 + 1 0 1.00 90.00 180.00 + 1800 6750 1800 6300 +2 1 1 1 0 32 50 -1 -1 4.000 0 0 -1 1 0 2 + 1 0 1.00 90.00 180.00 + 4500 8325 4500 7425 +2 1 0 1 0 32 60 -1 -1 0.000 0 0 -1 0 0 2 + 5580 7335 9900 7335 +2 1 0 1 0 32 50 -1 -1 4.000 0 0 -1 0 0 2 + 2700 6930 3600 6930 +2 2 0 0 0 0 55 -1 0 2.000 0 0 -1 0 0 5 + 8460 5310 8640 5310 8640 5760 8460 5760 8460 5310 +2 2 0 0 0 0 55 -1 0 2.000 0 0 -1 0 0 5 + 8460 7110 8640 7110 8640 7560 8460 7560 8460 7110 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1125 8550 2925 8550 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1125 8640 2925 8640 +2 2 0 1 0 32 60 -1 20 4.000 0 0 8 0 0 5 + 1125 8325 2925 8325 2925 8775 1125 8775 1125 8325 +2 1 1 1 0 32 50 -1 -1 4.000 0 0 -1 0 0 3 + 2025 8325 2025 7875 4500 7875 +2 1 0 1 0 32 50 -1 -1 4.000 0 0 -1 0 0 3 + 5400 8460 5625 8460 5625 9000 +2 1 0 1 0 32 50 -1 -1 4.000 0 0 -1 0 0 5 + 2925 8415 3150 8415 3150 9000 8550 9000 8550 5085 +4 0 0 50 -1 12 8 0.0000 4 105 975 3240 -1080 _parameterSet\001 +4 0 0 50 -1 12 8 0.0000 4 90 600 1845 765 _w,_l,_m\001 +4 0 0 50 -1 12 8 0.0000 4 90 900 4545 765 _sourceFirst\001 +4 0 0 50 -1 12 10 0.0000 4 135 525 45 1080 -_min\001 +4 0 0 50 -1 12 10 0.0000 4 105 525 45 1305 -_max\001 +4 0 0 50 -1 12 10 0.0000 4 120 630 45 1530 -_step\001 +4 0 0 50 -1 12 10 0.0000 4 135 735 45 1755 -_value\001 +4 0 0 50 -1 12 10 0.0000 4 105 630 1395 -720 -_name\001 +4 0 0 50 -1 12 10 0.0000 4 135 735 1395 -495 -_index\001 +4 1 0 50 -1 18 10 0.0000 4 120 795 2250 -945 Parameter\001 +4 0 0 50 -1 12 10 0.0000 4 135 735 2745 1305 -_value\001 +4 0 0 50 -1 12 10 0.0000 4 135 945 2745 1080 -_choices\001 +4 0 0 50 -1 12 10 0.0000 4 135 2205 6120 1080 +getParameter(string)\001 +4 0 0 50 -1 12 10 0.0000 4 135 1680 6120 1305 +getParameters()\001 +4 0 0 50 -1 12 10 0.0000 4 135 1575 6120 1530 +getArguments()\001 +4 1 0 50 -1 18 10 0.0000 4 120 300 7200 -720 Cell\001 +4 1 0 50 -1 18 10 0.0000 4 120 525 7200 630 Device\001 +4 1 0 50 -1 18 10 0.0000 4 120 1440 3600 855 MCheckBoxParam\001 +4 1 0 50 -1 18 10 0.0000 4 150 1155 900 855 StepParameter\001 +4 0 0 50 -1 12 10 0.0000 4 105 315 9990 4680 -_m\001 +4 0 0 50 -1 12 10 0.0000 4 135 420 9990 5085 -_le\001 +4 0 0 50 -1 12 10 0.0000 4 135 525 9990 5310 -_ids\001 +4 0 0 50 -1 12 10 0.0000 4 105 525 9990 5535 -_vgs\001 +4 0 0 50 -1 12 10 0.0000 4 135 525 9990 5760 -_vds\001 +4 0 0 50 -1 12 10 0.0000 4 135 525 9990 5985 -_vbs\001 +4 0 0 50 -1 12 10 0.0000 4 105 420 9990 6210 -_vg\001 +4 0 0 50 -1 12 10 0.0000 4 135 420 9990 6435 -_vd\001 +4 0 0 50 -1 12 10 0.0000 4 105 420 9990 6660 -_vs\001 +4 0 0 50 -1 12 10 0.0000 4 105 525 9990 7110 -_veg\001 +4 0 0 50 -1 12 10 0.0000 4 135 525 9990 7335 -_vth\001 +4 0 0 50 -1 12 10 0.0000 4 105 630 9990 7785 -_vmax\001 +4 0 0 50 -1 12 10 0.0000 4 135 630 9990 7560 -_vmin\001 +4 0 0 50 -1 12 10 0.0000 4 135 420 9990 6885 -_vb\001 +4 0 0 50 -1 12 10 0.0000 4 135 735 9990 8010 -_nfing\001 +4 0 0 50 -1 12 10 0.0000 4 105 420 9990 4860 -_we\001 +4 1 0 50 -1 18 10 0.0000 4 120 1185 10800 4455 MetaTransistor\001 +4 1 0 50 -1 18 10 0.0000 4 120 675 9900 -720 Instance\001 +4 0 0 50 -1 12 8 0.0000 4 90 450 9405 5670 _metaT\001 +4 0 0 50 -1 12 8 0.0000 4 90 675 9180 5040 _refTrans\001 +4 1 0 50 -1 18 10 0.0000 4 150 1335 7200 3555 TransistorFamily\001 +4 0 0 50 -1 12 8 0.0000 4 90 375 9225 5310 {ref}\001 +4 0 0 50 -1 12 10 0.0000 4 135 1680 -405 4095 +_setM(unsigned)\001 +4 1 0 50 -1 18 10 0.0000 4 150 885 450 3780 Arguments\001 +4 0 0 50 -1 12 8 0.0000 4 105 525 9315 7470 _m1,_m2\001 +4 2 0 50 -1 14 8 0.0000 4 90 75 9855 7290 2\001 +4 2 0 50 -1 14 8 0.0000 4 90 75 9855 5490 1\001 +4 2 0 50 -1 14 8 0.0000 4 90 75 8325 5490 1\001 +4 2 0 50 -1 14 8 0.0000 4 90 75 5625 7290 1\001 +4 1 0 50 -1 18 10 0.0000 4 120 945 2025 8505 LevelShifter\001 diff --git a/hurricane/doc/analog/open.png b/hurricane/doc/analog/open.png new file mode 100644 index 0000000000000000000000000000000000000000..7e740cc4fde70b626427871d6f7f48ef75107378 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VR-P`7Ar*{o?>cfFFyLT0aB==G zqxrWkIO(aLv^?JED*lDDVD^i5?0%b8F_qn`J;zXA{BLU5(Z{V<`li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6 +{ + margin:0; + padding:0 +} +.sm ul +{ + display:none +} + +.sm li,.sm a +{ + position:relative +} +.sm a +{ + display:block +} +.sm a.disabled +{ + cursor:not-allowed +} +.sm:after +{ + content:"\00a0"; + display:block; + height:0; + font:0/0 serif; + clear:both; + visibility:hidden; + overflow:hidden +} +.sm,.sm *,.sm *:before,.sm *:after +{ + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box +} +#doc-content +{ + overflow:auto; + display:block; + padding:0; + margin:0; + -webkit-overflow-scrolling:touch +} +/* +.sm-dox +{ + background-image:url("tab_b.png") +} +*/ +/* +.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active +{ + padding:0 12px; + padding-right:43px; + font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif; + font-size:13px; + font-weight:bold; + line-height:36px; + text-decoration:none; + text-shadow:0 1px 1px rgba(255,255,255,0.9); + color:#283a5d; + outline:0 +} +*/ +/* +.sm-dox a:hover +{ + background-image:url("tab_a.png"); + background-repeat:repeat-x; + color:white; + text-shadow:0 1px 1px black +} +*/ +.sm-dox a.current +{ + color:#d23600 +} +.sm-dox a.disabled +{ + color:#bbb +} +.sm-dox a span.sub-arrow +{ + position:absolute; + top:50%; + margin-top:-14px; + left:auto; + right:3px; + width:28px; + height:28px; + overflow:hidden; + font:bold 12px/28px monospace!important; + text-align:center; + text-shadow:none; + background:rgba(255,255,255,0.5); + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px +} +.sm-dox a.highlighted span.sub-arrow:before +{ + display:block; + content:'-' +} +/* +.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a +{ + -moz-border-radius:5px 5px 0 0; + -webkit-border-radius:5px; + border-radius:5px 5px 0 0 +} +.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul +{ + -moz-border-radius:0 0 5px 5px; + -webkit-border-radius:0; + border-radius:0 0 5px 5px +} +.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted +{ + -moz-border-radius:0; + -webkit-border-radius:0; + border-radius:0 +} +*/ +/* +.sm-dox ul +{ + background:rgba(162,162,162,0.1) +} +*/ +/* +.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active +{ + font-size:12px; + border-left:8px solid transparent; + line-height:36px; + text-shadow:none; + background-color:white; + background-image:none +} +*/ +/* +.sm-dox ul a:hover +{ + background-image:url("tab_a.png"); + background-repeat:repeat-x; + color:white; + text-shadow:0 1px 1px black +} +*/ + + +.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active +{ + border-left:16px solid transparent +} +.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active +{ + border-left:24px solid transparent +} +.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active +{ + border-left:32px solid transparent +} +.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active +{ + border-left:40px solid transparent +} + +.sm-dox ul +{ + position:absolute; + width:12em +} +/* +.sm-dox li +{ + float:left +} +.sm-dox.sm-rtl li +{ + float:right +} +.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li +{ + float:none +} +*/ +.sm-dox a +{ + white-space:nowrap +} +.sm-dox ul a,.sm-dox.sm-vertical a +{ + white-space:normal +} +.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a +{ + white-space:nowrap +} + +/* +.sm-dox +{ + padding:0 10px; + background-image:url("tab_b.png"); + line-height:36px +} +*/ + +.sm-dox a span.sub-arrow +{ + top:50%; + margin-top:-2px; + right:12px; + width:0; + height:0; + border-width:4px; + border-style:solid dashed dashed dashed; + border-color:#283a5d transparent transparent transparent; + background:transparent; + -moz-border-radius:0; + -webkit-border-radius:0; + border-radius:0 +} +/* +.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted +{ + padding:0 12px; + background-image:url("tab_s.png"); + background-repeat:no-repeat; + background-position:right; + -moz-border-radius:0!important; + -webkit-border-radius:0; + border-radius:0!important +} +.sm-dox a:hover +{ + background-image:url("tab_a.png"); + background-repeat:repeat-x; + color:white; + text-shadow:0 1px 1px black +} +*/ +.sm-dox a:hover span.sub-arrow +{ + border-color:white transparent transparent transparent +} +.sm-dox a.has-submenu +{ + padding-right:24px +} +.sm-dox li +{ + border-top:0 +} +.sm-dox>li>ul:before,.sm-dox>li>ul:after +{ + content:''; + position:absolute; + top:-18px; + left:30px; + width:0; + height:0; + overflow:hidden; + border-width:9px; + border-style:dashed dashed solid dashed; + border-color:transparent transparent #bbb transparent +} +.sm-dox>li>ul:after +{ + top:-16px; + left:31px; + border-width:8px; + border-color:transparent transparent #fff transparent +} +.sm-dox ul +{ + border:1px solid #bbb; + padding:5px 0; + background:#fff; +/* + -moz-border-radius:5px!important; + -webkit-border-radius:5px; + border-radius:5px!important; +*/ + -moz-box-shadow:0 5px 9px rgba(0,0,0,0.2); + -webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2); + box-shadow:0 5px 9px rgba(0,0,0,0.2) +} +.sm-dox ul a span.sub-arrow +{ + right:8px; + top:50%; + margin-top:-5px; + border-width:5px; + border-color:transparent transparent transparent #555; + border-style:dashed dashed dashed solid +} +.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted +{ + color:#555; + background-image:none; + border:0!important; + color:#555; + background-image:none +} +/* +.sm-dox ul a:hover +{ + background-image:url("tab_a.png"); + background-repeat:repeat-x; + color:white; + text-shadow:0 1px 1px black +} +*/ +.sm-dox ul a:hover span.sub-arrow +{ + border-color:transparent transparent transparent white +} +.sm-dox span.scroll-up,.sm-dox span.scroll-down +{ + position:absolute; + display:none; + visibility:hidden; + overflow:hidden; + background:#fff; + height:36px +} +.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover +{ + background:#eee +} +.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow +{ + border-color:transparent transparent #d23600 transparent +} +.sm-dox span.scroll-down:hover span.scroll-down-arrow +{ + border-color:#d23600 transparent transparent transparent +} +.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow +{ + position:absolute; + top:0; + left:50%; + margin-left:-6px; + width:0; + height:0; + overflow:hidden; + border-width:6px; + border-style:dashed dashed solid dashed; + border-color:transparent transparent #555 transparent +} +.sm-dox span.scroll-down-arrow +{ + top:8px; + border-style:solid dashed dashed dashed; + border-color:#555 transparent transparent transparent +} +.sm-dox.sm-rtl a.has-submenu +{ + padding-right:12px; + padding-left:24px +} +.sm-dox.sm-rtl a span.sub-arrow +{ + right:auto; + left:12px +} +.sm-dox.sm-rtl.sm-vertical a.has-submenu +{ + padding:10px 20px +} +.sm-dox.sm-rtl.sm-vertical a span.sub-arrow +{ + right:auto; + left:8px; + border-style:dashed solid dashed dashed; + border-color:transparent #555 transparent transparent +} +.sm-dox.sm-rtl>li>ul:before +{ + left:auto; + right:30px +} +.sm-dox.sm-rtl>li>ul:after +{ + left:auto; + right:31px +} +.sm-dox.sm-rtl ul a.has-submenu +{ + padding:10px 20px!important +} +.sm-dox.sm-rtl ul a span.sub-arrow +{ + right:auto; + left:8px; + border-style:dashed solid dashed dashed; + border-color:transparent #555 transparent transparent +} +.sm-dox.sm-vertical +{ + padding:10px 0; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px +} +.sm-dox.sm-vertical a +{ + padding:10px 20px +} +.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted +{ + background:#fff +} +.sm-dox.sm-vertical a.disabled +{ + background-image:url("tab_b.png") +} +.sm-dox.sm-vertical a span.sub-arrow +{ + right:8px; + top:50%; + margin-top:-5px; + border-width:5px; + border-style:dashed dashed dashed solid; + border-color:transparent transparent transparent #555 +} +.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after +{ + display:none +} +.sm-dox.sm-vertical ul a +{ + padding:10px 20px +} +.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted +{ + background:#eee +} +.sm-dox.sm-vertical ul a.disabled +{ + background:#fff +} + +/* SoC Customisation. */ + +div#main-nav { + margin: 0pt; + border: 0pt; + padding: 0pt; +} + +div ul#main-menu { + margin: 0pt; + border: 0pt; + padding: 0pt; +} + +/* +.sm ul { + visibility: hidden; + overflow: hidden; + height: 0; + width: 0; +} +*/ + +.sm li { + list-style: none; +} + +ul#main-menu { + display: table; + width: 100%; +} + +ul#main-menu > li { + display: table-cell; + text-align: center; +/*width: 20%;*/ + border-top: 1px solid black; + border-bottom: 1px solid black; + border-left: none; + border-right: 1px solid black; + padding: 2pt; + font-size: 90%; +} + +ul#main-menu > li:first-child { + border-left: 1px solid black; +} + +ul#main-menu > li > a { + border-bottom: none; +} + +ul#main-menu > li:hover, ul#main-menu > li:hover > a, ul#main-menu > li > a:hover { + background-color: black; + color: white; +} + +/* +.sm li { + margin: 0pt; + list-style: none; + font-size: 90%; + border-top: 1px solid black; + border-bottom: 1px solid black; + border-left: none; + border-right: 1px solid black; + display: table-cell; + text-align: center; + padding: 2pt; + width: 5%; +} +.sm li:first-child { + border-left: 1px solid black; +} +.sm li a { + border-style: none; + border-bottom: none; +} + +.sm li:hover, .sm li:hover a, .sm li a:hover { + background-color: black; + color: white; +} +*/ + + diff --git a/hurricane/doc/hurricane/DebugSession.dox b/hurricane/doc/hurricane/DebugSession.dox index f6a2e1ee..799c31ff 100644 --- a/hurricane/doc/hurricane/DebugSession.dox +++ b/hurricane/doc/hurricane/DebugSession.dox @@ -50,13 +50,10 @@ * Solstice \c 160 \c 170 * Equinox \c 170 \c 180 * Unicorn \c 180 \c 190 - * \b C++ / CHAMS + * \b C++ / Analog * \b Tool/Library \b Minimum \b Maximum - * HurricaneAMS \c 500 \c 510 - * amsCore \c 510 \c 520 - * Pharos \c 520 \c 530 - * Isis \c 530 \c 540 - * Horus \c 530 \c 540 + * Analog \c 500 \c 510 + * oroshi \c 510 \c 520 * \b Python Wrappers / Coriolis * \b Tool/Library \b Minimum \b Maximum * Isobar \c 20 \c 30 @@ -69,13 +66,10 @@ * Solstice/Python \c 42 \c 44 * Equinox/Python \c 44 \c 46 * Unicorn/Python \c 46 \c 48 - * \b Python Wrappers / CHAMS + * \b Python Wrappers / Analog * \b Tool/Library \b Minimum \b Maximum - * isobarAMS \c 48 \c 50 - * amsCore \c 50 \c 51 - * Pharos/Python \c 52 \c 60 - * Isis/Python \c 60 \c 61 - * Horus/Python \c 61 \c 62 + * Analog \c 48 \c 50 + oroshi/ÿthon \c 50 \c 51 * \b Special levels * Determinim check \c 9000 \c 9001 * JSON parsers/drivers\c 19 \c 20 diff --git a/hurricane/doc/hurricane/html/BasicLayer_8h_source.html b/hurricane/doc/hurricane/html/BasicLayer_8h_source.html index 5b96342b..cae0baf3 100644 --- a/hurricane/doc/hurricane/html/BasicLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/BasicLayer_8h_source.html @@ -277,13 +277,13 @@
                                                                                            Definition: BasicLayer.h:60
                                                                                            void setBlockageLayer(BasicLayer *layer)
                                                                                            Definition: BasicLayer.h:143
                                                                                            Definition: BasicLayer.h:57
                                                                                            -
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:58
                                                                                            +
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:66


                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Box_8h_source.html b/hurricane/doc/hurricane/html/Box_8h_source.html index 05e03059..ed371358 100644 --- a/hurricane/doc/hurricane/html/Box_8h_source.html +++ b/hurricane/doc/hurricane/html/Box_8h_source.html @@ -240,7 +240,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Boxes_8h_source.html b/hurricane/doc/hurricane/html/Boxes_8h_source.html index 6e2b0ce9..8c3ee047 100644 --- a/hurricane/doc/hurricane/html/Boxes_8h_source.html +++ b/hurricane/doc/hurricane/html/Boxes_8h_source.html @@ -129,7 +129,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Cell_8h_source.html b/hurricane/doc/hurricane/html/Cell_8h_source.html index 6cb9b788..507c9aa2 100644 --- a/hurricane/doc/hurricane/html/Cell_8h_source.html +++ b/hurricane/doc/hurricane/html/Cell_8h_source.html @@ -713,7 +713,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Cells_8h_source.html b/hurricane/doc/hurricane/html/Cells_8h_source.html index eb543558..65831a27 100644 --- a/hurricane/doc/hurricane/html/Cells_8h_source.html +++ b/hurricane/doc/hurricane/html/Cells_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Collection_8h_source.html b/hurricane/doc/hurricane/html/Collection_8h_source.html index 2d50352c..71306916 100644 --- a/hurricane/doc/hurricane/html/Collection_8h_source.html +++ b/hurricane/doc/hurricane/html/Collection_8h_source.html @@ -1218,7 +1218,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Commons_8h_source.html b/hurricane/doc/hurricane/html/Commons_8h_source.html index e0afdc05..2f72e43e 100644 --- a/hurricane/doc/hurricane/html/Commons_8h_source.html +++ b/hurricane/doc/hurricane/html/Commons_8h_source.html @@ -1144,7 +1144,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Component_8h_source.html b/hurricane/doc/hurricane/html/Component_8h_source.html index 7179e5a9..077a1bda 100644 --- a/hurricane/doc/hurricane/html/Component_8h_source.html +++ b/hurricane/doc/hurricane/html/Component_8h_source.html @@ -264,7 +264,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Components_8h_source.html b/hurricane/doc/hurricane/html/Components_8h_source.html index 7c0c734a..23664df0 100644 --- a/hurricane/doc/hurricane/html/Components_8h_source.html +++ b/hurricane/doc/hurricane/html/Components_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/ContactLayer_8h_source.html b/hurricane/doc/hurricane/html/ContactLayer_8h_source.html index 4896025c..9c7bf19b 100644 --- a/hurricane/doc/hurricane/html/ContactLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/ContactLayer_8h_source.html @@ -168,13 +168,13 @@
                                                                                            DataBase object root class (API).
                                                                                            Definition: DBo.h:46
                                                                                            JSON Parser Stack.
                                                                                            Definition: JsonObject.h:249
                                                                                            Layer description (API)
                                                                                            Definition: Layer.h:52
                                                                                            -
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:58
                                                                                            +
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:66


                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Contact_8h_source.html b/hurricane/doc/hurricane/html/Contact_8h_source.html index ea0fc053..619b59e3 100644 --- a/hurricane/doc/hurricane/html/Contact_8h_source.html +++ b/hurricane/doc/hurricane/html/Contact_8h_source.html @@ -259,7 +259,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Contacts_8h_source.html b/hurricane/doc/hurricane/html/Contacts_8h_source.html index 56bbba05..9de854da 100644 --- a/hurricane/doc/hurricane/html/Contacts_8h_source.html +++ b/hurricane/doc/hurricane/html/Contacts_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/DBo_8h_source.html b/hurricane/doc/hurricane/html/DBo_8h_source.html index 0f343f48..98f1907a 100644 --- a/hurricane/doc/hurricane/html/DBo_8h_source.html +++ b/hurricane/doc/hurricane/html/DBo_8h_source.html @@ -175,7 +175,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/DBos_8h_source.html b/hurricane/doc/hurricane/html/DBos_8h_source.html index 27174101..7e4fcdb7 100644 --- a/hurricane/doc/hurricane/html/DBos_8h_source.html +++ b/hurricane/doc/hurricane/html/DBos_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/DataBase_8h_source.html b/hurricane/doc/hurricane/html/DataBase_8h_source.html index ed85ddea..a2e6c99c 100644 --- a/hurricane/doc/hurricane/html/DataBase_8h_source.html +++ b/hurricane/doc/hurricane/html/DataBase_8h_source.html @@ -179,13 +179,13 @@
                                                                                            The whole DataBase (API).
                                                                                            Definition: DataBase.h:40
                                                                                            static DataBase * getDB()
                                                                                            Technology * getTechnology() const
                                                                                            Definition: DataBase.h:85
                                                                                            -
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:58
                                                                                            +
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:66


                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/DbU_8h_source.html b/hurricane/doc/hurricane/html/DbU_8h_source.html index 75159a4b..02d6d0b4 100644 --- a/hurricane/doc/hurricane/html/DbU_8h_source.html +++ b/hurricane/doc/hurricane/html/DbU_8h_source.html @@ -362,7 +362,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/DebugSession_8h_source.html b/hurricane/doc/hurricane/html/DebugSession_8h_source.html index 8aaaedd6..c93281b2 100644 --- a/hurricane/doc/hurricane/html/DebugSession_8h_source.html +++ b/hurricane/doc/hurricane/html/DebugSession_8h_source.html @@ -224,7 +224,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Diagonal_8h_source.html b/hurricane/doc/hurricane/html/Diagonal_8h_source.html index aff50ba7..bd66cede 100644 --- a/hurricane/doc/hurricane/html/Diagonal_8h_source.html +++ b/hurricane/doc/hurricane/html/Diagonal_8h_source.html @@ -175,7 +175,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/DiffusionLayer_8h_source.html b/hurricane/doc/hurricane/html/DiffusionLayer_8h_source.html index 9eb02d0c..e8311947 100644 --- a/hurricane/doc/hurricane/html/DiffusionLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/DiffusionLayer_8h_source.html @@ -169,13 +169,13 @@
                                                                                            JSON Parser Stack.
                                                                                            Definition: JsonObject.h:249
                                                                                            Layer description (API)
                                                                                            Definition: Layer.h:52
                                                                                            static DiffusionLayer * create(Technology *technology, const Name &name, BasicLayer *activeLayer, BasicLayer *diffusionLayer, BasicLayer *wellLayer)
                                                                                            -
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:58
                                                                                            +
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:66


                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Entities_8h_source.html b/hurricane/doc/hurricane/html/Entities_8h_source.html index 0dc2c771..77a04969 100644 --- a/hurricane/doc/hurricane/html/Entities_8h_source.html +++ b/hurricane/doc/hurricane/html/Entities_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Entity_8h_source.html b/hurricane/doc/hurricane/html/Entity_8h_source.html index ff68b5cf..bf1c86fa 100644 --- a/hurricane/doc/hurricane/html/Entity_8h_source.html +++ b/hurricane/doc/hurricane/html/Entity_8h_source.html @@ -192,7 +192,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Error_8h_source.html b/hurricane/doc/hurricane/html/Error_8h_source.html index ae31ad85..727f103a 100644 --- a/hurricane/doc/hurricane/html/Error_8h_source.html +++ b/hurricane/doc/hurricane/html/Error_8h_source.html @@ -142,7 +142,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Exception_8h_source.html b/hurricane/doc/hurricane/html/Exception_8h_source.html index 717dfd2b..9340c3d2 100644 --- a/hurricane/doc/hurricane/html/Exception_8h_source.html +++ b/hurricane/doc/hurricane/html/Exception_8h_source.html @@ -145,7 +145,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Filter_8h_source.html b/hurricane/doc/hurricane/html/Filter_8h_source.html index 0eb05197..04a46651 100644 --- a/hurricane/doc/hurricane/html/Filter_8h_source.html +++ b/hurricane/doc/hurricane/html/Filter_8h_source.html @@ -376,7 +376,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Go_8h_source.html b/hurricane/doc/hurricane/html/Go_8h_source.html index 3963c480..1859eb92 100644 --- a/hurricane/doc/hurricane/html/Go_8h_source.html +++ b/hurricane/doc/hurricane/html/Go_8h_source.html @@ -175,7 +175,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Gos_8h_source.html b/hurricane/doc/hurricane/html/Gos_8h_source.html index a472d214..202a9324 100644 --- a/hurricane/doc/hurricane/html/Gos_8h_source.html +++ b/hurricane/doc/hurricane/html/Gos_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Hook_8h_source.html b/hurricane/doc/hurricane/html/Hook_8h_source.html index 68fd2f45..50801080 100644 --- a/hurricane/doc/hurricane/html/Hook_8h_source.html +++ b/hurricane/doc/hurricane/html/Hook_8h_source.html @@ -193,7 +193,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Hooks_8h_source.html b/hurricane/doc/hurricane/html/Hooks_8h_source.html index f3cbb48d..b3aaaf71 100644 --- a/hurricane/doc/hurricane/html/Hooks_8h_source.html +++ b/hurricane/doc/hurricane/html/Hooks_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Horizontal_8h_source.html b/hurricane/doc/hurricane/html/Horizontal_8h_source.html index 4ffa6ffb..c8af131d 100644 --- a/hurricane/doc/hurricane/html/Horizontal_8h_source.html +++ b/hurricane/doc/hurricane/html/Horizontal_8h_source.html @@ -206,7 +206,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Horizontals_8h_source.html b/hurricane/doc/hurricane/html/Horizontals_8h_source.html index e9e3dbe9..f9ca651b 100644 --- a/hurricane/doc/hurricane/html/Horizontals_8h_source.html +++ b/hurricane/doc/hurricane/html/Horizontals_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/HyperNet_8h_source.html b/hurricane/doc/hurricane/html/HyperNet_8h_source.html index dfa87920..c8420292 100644 --- a/hurricane/doc/hurricane/html/HyperNet_8h_source.html +++ b/hurricane/doc/hurricane/html/HyperNet_8h_source.html @@ -168,7 +168,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Initializer_8h_source.html b/hurricane/doc/hurricane/html/Initializer_8h_source.html index 9d8d7708..31609fa3 100644 --- a/hurricane/doc/hurricane/html/Initializer_8h_source.html +++ b/hurricane/doc/hurricane/html/Initializer_8h_source.html @@ -128,7 +128,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Instance_8h_source.html b/hurricane/doc/hurricane/html/Instance_8h_source.html index dc8d1912..3c68f52b 100644 --- a/hurricane/doc/hurricane/html/Instance_8h_source.html +++ b/hurricane/doc/hurricane/html/Instance_8h_source.html @@ -362,7 +362,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Instances_8h_source.html b/hurricane/doc/hurricane/html/Instances_8h_source.html index 1062d6de..8d184f55 100644 --- a/hurricane/doc/hurricane/html/Instances_8h_source.html +++ b/hurricane/doc/hurricane/html/Instances_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Interruption_8h_source.html b/hurricane/doc/hurricane/html/Interruption_8h_source.html index 3bbaae7e..a360f325 100644 --- a/hurricane/doc/hurricane/html/Interruption_8h_source.html +++ b/hurricane/doc/hurricane/html/Interruption_8h_source.html @@ -141,7 +141,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Interval_8h_source.html b/hurricane/doc/hurricane/html/Interval_8h_source.html index 7581aea8..2bc2ae56 100644 --- a/hurricane/doc/hurricane/html/Interval_8h_source.html +++ b/hurricane/doc/hurricane/html/Interval_8h_source.html @@ -213,7 +213,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Intervals_8h_source.html b/hurricane/doc/hurricane/html/Intervals_8h_source.html index 0b146635..b4e70c67 100644 --- a/hurricane/doc/hurricane/html/Intervals_8h_source.html +++ b/hurricane/doc/hurricane/html/Intervals_8h_source.html @@ -129,7 +129,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/JsonObject_8h_source.html b/hurricane/doc/hurricane/html/JsonObject_8h_source.html index e000eb86..b2b3a6c3 100644 --- a/hurricane/doc/hurricane/html/JsonObject_8h_source.html +++ b/hurricane/doc/hurricane/html/JsonObject_8h_source.html @@ -519,7 +519,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/JsonReader_8h_source.html b/hurricane/doc/hurricane/html/JsonReader_8h_source.html index baebda1a..2a773083 100644 --- a/hurricane/doc/hurricane/html/JsonReader_8h_source.html +++ b/hurricane/doc/hurricane/html/JsonReader_8h_source.html @@ -140,7 +140,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Layer_8h_source.html b/hurricane/doc/hurricane/html/Layer_8h_source.html index 21888be6..3840b60d 100644 --- a/hurricane/doc/hurricane/html/Layer_8h_source.html +++ b/hurricane/doc/hurricane/html/Layer_8h_source.html @@ -259,14 +259,14 @@
                                                                                            virtual const Layer * getBottom() const
                                                                                            bool above(const Layer *layer) const
                                                                                            Definition: Layer.h:146
                                                                                            virtual void setExtentionCap(const BasicLayer *layer, DbU::Unit)
                                                                                            -
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:58
                                                                                            +
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:66
                                                                                            virtual const Layer * getTop() const


                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Layers_8h_source.html b/hurricane/doc/hurricane/html/Layers_8h_source.html index ec6aed23..4e393c88 100644 --- a/hurricane/doc/hurricane/html/Layers_8h_source.html +++ b/hurricane/doc/hurricane/html/Layers_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Libraries_8h_source.html b/hurricane/doc/hurricane/html/Libraries_8h_source.html index e8f8e0e7..41a218ad 100644 --- a/hurricane/doc/hurricane/html/Libraries_8h_source.html +++ b/hurricane/doc/hurricane/html/Libraries_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Library_8h_source.html b/hurricane/doc/hurricane/html/Library_8h_source.html index 426b9cbe..778d9222 100644 --- a/hurricane/doc/hurricane/html/Library_8h_source.html +++ b/hurricane/doc/hurricane/html/Library_8h_source.html @@ -222,7 +222,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/ListCollection_8h_source.html b/hurricane/doc/hurricane/html/ListCollection_8h_source.html index 0e8db736..cb317e22 100644 --- a/hurricane/doc/hurricane/html/ListCollection_8h_source.html +++ b/hurricane/doc/hurricane/html/ListCollection_8h_source.html @@ -277,7 +277,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Locator_8h_source.html b/hurricane/doc/hurricane/html/Locator_8h_source.html index f06e392d..a80ad700 100644 --- a/hurricane/doc/hurricane/html/Locator_8h_source.html +++ b/hurricane/doc/hurricane/html/Locator_8h_source.html @@ -335,7 +335,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/MapCollection_8h_source.html b/hurricane/doc/hurricane/html/MapCollection_8h_source.html index 04822bef..55c916b9 100644 --- a/hurricane/doc/hurricane/html/MapCollection_8h_source.html +++ b/hurricane/doc/hurricane/html/MapCollection_8h_source.html @@ -275,7 +275,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Name_8h_source.html b/hurricane/doc/hurricane/html/Name_8h_source.html index 704ca6ba..c8e5e854 100644 --- a/hurricane/doc/hurricane/html/Name_8h_source.html +++ b/hurricane/doc/hurricane/html/Name_8h_source.html @@ -176,7 +176,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Names_8h_source.html b/hurricane/doc/hurricane/html/Names_8h_source.html index d409a6c2..55188f39 100644 --- a/hurricane/doc/hurricane/html/Names_8h_source.html +++ b/hurricane/doc/hurricane/html/Names_8h_source.html @@ -127,7 +127,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Net_8h_source.html b/hurricane/doc/hurricane/html/Net_8h_source.html index e65e8c14..6ef1657f 100644 --- a/hurricane/doc/hurricane/html/Net_8h_source.html +++ b/hurricane/doc/hurricane/html/Net_8h_source.html @@ -579,7 +579,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Nets_8h_source.html b/hurricane/doc/hurricane/html/Nets_8h_source.html index d12df043..9f5becf3 100644 --- a/hurricane/doc/hurricane/html/Nets_8h_source.html +++ b/hurricane/doc/hurricane/html/Nets_8h_source.html @@ -140,7 +140,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Occurrence_8h_source.html b/hurricane/doc/hurricane/html/Occurrence_8h_source.html index 7f407240..a55fc573 100644 --- a/hurricane/doc/hurricane/html/Occurrence_8h_source.html +++ b/hurricane/doc/hurricane/html/Occurrence_8h_source.html @@ -214,7 +214,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Occurrences_8h_source.html b/hurricane/doc/hurricane/html/Occurrences_8h_source.html index 9cc038ce..009e56c7 100644 --- a/hurricane/doc/hurricane/html/Occurrences_8h_source.html +++ b/hurricane/doc/hurricane/html/Occurrences_8h_source.html @@ -145,7 +145,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Pad_8h_source.html b/hurricane/doc/hurricane/html/Pad_8h_source.html index e3e6e80a..327132d7 100644 --- a/hurricane/doc/hurricane/html/Pad_8h_source.html +++ b/hurricane/doc/hurricane/html/Pad_8h_source.html @@ -170,7 +170,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Pads_8h_source.html b/hurricane/doc/hurricane/html/Pads_8h_source.html index a5f76088..dd7d4c6d 100644 --- a/hurricane/doc/hurricane/html/Pads_8h_source.html +++ b/hurricane/doc/hurricane/html/Pads_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Path_8h_source.html b/hurricane/doc/hurricane/html/Path_8h_source.html index 3f1b99b7..2730959e 100644 --- a/hurricane/doc/hurricane/html/Path_8h_source.html +++ b/hurricane/doc/hurricane/html/Path_8h_source.html @@ -200,7 +200,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Pathes_8h_source.html b/hurricane/doc/hurricane/html/Pathes_8h_source.html index 15edc909..f307b952 100644 --- a/hurricane/doc/hurricane/html/Pathes_8h_source.html +++ b/hurricane/doc/hurricane/html/Pathes_8h_source.html @@ -135,7 +135,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Pin_8h_source.html b/hurricane/doc/hurricane/html/Pin_8h_source.html index d7ef2cfe..31e04c5e 100644 --- a/hurricane/doc/hurricane/html/Pin_8h_source.html +++ b/hurricane/doc/hurricane/html/Pin_8h_source.html @@ -228,7 +228,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Pins_8h_source.html b/hurricane/doc/hurricane/html/Pins_8h_source.html index 5a48120d..535aa7a6 100644 --- a/hurricane/doc/hurricane/html/Pins_8h_source.html +++ b/hurricane/doc/hurricane/html/Pins_8h_source.html @@ -129,7 +129,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Plug_8h_source.html b/hurricane/doc/hurricane/html/Plug_8h_source.html index bbe2d630..60e8ed0e 100644 --- a/hurricane/doc/hurricane/html/Plug_8h_source.html +++ b/hurricane/doc/hurricane/html/Plug_8h_source.html @@ -223,7 +223,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Plugs_8h_source.html b/hurricane/doc/hurricane/html/Plugs_8h_source.html index 0b128161..60fdb9f6 100644 --- a/hurricane/doc/hurricane/html/Plugs_8h_source.html +++ b/hurricane/doc/hurricane/html/Plugs_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Point_8h_source.html b/hurricane/doc/hurricane/html/Point_8h_source.html index 0c246dc5..a07b0c9e 100644 --- a/hurricane/doc/hurricane/html/Point_8h_source.html +++ b/hurricane/doc/hurricane/html/Point_8h_source.html @@ -174,7 +174,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Points_8h_source.html b/hurricane/doc/hurricane/html/Points_8h_source.html index fd14c292..475edf0b 100644 --- a/hurricane/doc/hurricane/html/Points_8h_source.html +++ b/hurricane/doc/hurricane/html/Points_8h_source.html @@ -113,7 +113,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Polygon_8h_source.html b/hurricane/doc/hurricane/html/Polygon_8h_source.html index 5f437738..7af80710 100644 --- a/hurricane/doc/hurricane/html/Polygon_8h_source.html +++ b/hurricane/doc/hurricane/html/Polygon_8h_source.html @@ -255,7 +255,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Properties_8h_source.html b/hurricane/doc/hurricane/html/Properties_8h_source.html index d215b519..40e2a976 100644 --- a/hurricane/doc/hurricane/html/Properties_8h_source.html +++ b/hurricane/doc/hurricane/html/Properties_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Property_8h_source.html b/hurricane/doc/hurricane/html/Property_8h_source.html index 19692934..e04e1942 100644 --- a/hurricane/doc/hurricane/html/Property_8h_source.html +++ b/hurricane/doc/hurricane/html/Property_8h_source.html @@ -672,7 +672,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/QuadTree_8h_source.html b/hurricane/doc/hurricane/html/QuadTree_8h_source.html index 17c807c3..8b70125b 100644 --- a/hurricane/doc/hurricane/html/QuadTree_8h_source.html +++ b/hurricane/doc/hurricane/html/QuadTree_8h_source.html @@ -204,7 +204,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Quark_8h_source.html b/hurricane/doc/hurricane/html/Quark_8h_source.html index 9c71c471..292eac8c 100644 --- a/hurricane/doc/hurricane/html/Quark_8h_source.html +++ b/hurricane/doc/hurricane/html/Quark_8h_source.html @@ -146,7 +146,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Quarks_8h_source.html b/hurricane/doc/hurricane/html/Quarks_8h_source.html index 6571dab1..bd7cabfc 100644 --- a/hurricane/doc/hurricane/html/Quarks_8h_source.html +++ b/hurricane/doc/hurricane/html/Quarks_8h_source.html @@ -130,7 +130,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Query_8h_source.html b/hurricane/doc/hurricane/html/Query_8h_source.html index 91436e3d..ba0103fc 100644 --- a/hurricane/doc/hurricane/html/Query_8h_source.html +++ b/hurricane/doc/hurricane/html/Query_8h_source.html @@ -485,7 +485,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/RegularLayer_8h_source.html b/hurricane/doc/hurricane/html/RegularLayer_8h_source.html index b257ead4..d91e03e6 100644 --- a/hurricane/doc/hurricane/html/RegularLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/RegularLayer_8h_source.html @@ -174,13 +174,13 @@
                                                                                            static RegularLayer * create(Technology *technology, const Name &name)
                                                                                            Layer description (API)
                                                                                            Definition: Layer.h:52
                                                                                            BasicLayer * getBasicLayer() const
                                                                                            Definition: RegularLayer.h:95
                                                                                            -
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:58
                                                                                            +
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:66


                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Relation_8h_source.html b/hurricane/doc/hurricane/html/Relation_8h_source.html index fb47f39d..3bb47dfb 100644 --- a/hurricane/doc/hurricane/html/Relation_8h_source.html +++ b/hurricane/doc/hurricane/html/Relation_8h_source.html @@ -183,7 +183,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/RoutingPad_8h_source.html b/hurricane/doc/hurricane/html/RoutingPad_8h_source.html index 945af2a4..6cf6815e 100644 --- a/hurricane/doc/hurricane/html/RoutingPad_8h_source.html +++ b/hurricane/doc/hurricane/html/RoutingPad_8h_source.html @@ -217,7 +217,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Rubber_8h_source.html b/hurricane/doc/hurricane/html/Rubber_8h_source.html index 921b9e09..e892d6ca 100644 --- a/hurricane/doc/hurricane/html/Rubber_8h_source.html +++ b/hurricane/doc/hurricane/html/Rubber_8h_source.html @@ -188,7 +188,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Rubbers_8h_source.html b/hurricane/doc/hurricane/html/Rubbers_8h_source.html index aa1646a3..3edc08b3 100644 --- a/hurricane/doc/hurricane/html/Rubbers_8h_source.html +++ b/hurricane/doc/hurricane/html/Rubbers_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Segment_8h_source.html b/hurricane/doc/hurricane/html/Segment_8h_source.html index 4a7190a4..d7a3c99f 100644 --- a/hurricane/doc/hurricane/html/Segment_8h_source.html +++ b/hurricane/doc/hurricane/html/Segment_8h_source.html @@ -246,7 +246,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Segments_8h_source.html b/hurricane/doc/hurricane/html/Segments_8h_source.html index b342f2fe..7004143f 100644 --- a/hurricane/doc/hurricane/html/Segments_8h_source.html +++ b/hurricane/doc/hurricane/html/Segments_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/SetCollection_8h_source.html b/hurricane/doc/hurricane/html/SetCollection_8h_source.html index 9a07592a..d7cbf763 100644 --- a/hurricane/doc/hurricane/html/SetCollection_8h_source.html +++ b/hurricane/doc/hurricane/html/SetCollection_8h_source.html @@ -285,7 +285,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Slice_8h_source.html b/hurricane/doc/hurricane/html/Slice_8h_source.html index b57d0004..f6032635 100644 --- a/hurricane/doc/hurricane/html/Slice_8h_source.html +++ b/hurricane/doc/hurricane/html/Slice_8h_source.html @@ -186,7 +186,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Slices_8h_source.html b/hurricane/doc/hurricane/html/Slices_8h_source.html index c8f5d160..ff316a02 100644 --- a/hurricane/doc/hurricane/html/Slices_8h_source.html +++ b/hurricane/doc/hurricane/html/Slices_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Tabulation_8h_source.html b/hurricane/doc/hurricane/html/Tabulation_8h_source.html index c599853b..d486d6e8 100644 --- a/hurricane/doc/hurricane/html/Tabulation_8h_source.html +++ b/hurricane/doc/hurricane/html/Tabulation_8h_source.html @@ -163,7 +163,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Technology_8h_source.html b/hurricane/doc/hurricane/html/Technology_8h_source.html index 410d8912..c7855729 100644 --- a/hurricane/doc/hurricane/html/Technology_8h_source.html +++ b/hurricane/doc/hurricane/html/Technology_8h_source.html @@ -83,144 +83,222 @@
                                                                                            32 #ifndef HURRICANE_TECHNOLOGY_H
                                                                                            33 #define HURRICANE_TECHNOLOGY_H
                                                                                            34 
                                                                                            -
                                                                                            35 #include <map>
                                                                                            -
                                                                                            36 #include "hurricane/Mask.h"
                                                                                            -
                                                                                            37 #include "hurricane/DBo.h"
                                                                                            -
                                                                                            38 #include "hurricane/Layer.h"
                                                                                            -
                                                                                            39 #include "hurricane/BasicLayers.h"
                                                                                            -
                                                                                            40 #include "hurricane/RegularLayers.h"
                                                                                            -
                                                                                            41 #include "hurricane/ViaLayers.h"
                                                                                            -
                                                                                            42 #include "hurricane/IntrusiveMap.h"
                                                                                            -
                                                                                            43 
                                                                                            -
                                                                                            44 
                                                                                            -
                                                                                            45 namespace Hurricane {
                                                                                            -
                                                                                            46 
                                                                                            -
                                                                                            47  using std::multimap;
                                                                                            +
                                                                                            35 #include <set>
                                                                                            +
                                                                                            36 #include <map>
                                                                                            +
                                                                                            37 #include "hurricane/Mask.h"
                                                                                            +
                                                                                            38 #include "hurricane/DBo.h"
                                                                                            +
                                                                                            39 #include "hurricane/Layer.h"
                                                                                            +
                                                                                            40 #include "hurricane/BasicLayers.h"
                                                                                            +
                                                                                            41 #include "hurricane/RegularLayers.h"
                                                                                            +
                                                                                            42 #include "hurricane/ViaLayers.h"
                                                                                            +
                                                                                            43 #include "hurricane/IntrusiveMap.h"
                                                                                            +
                                                                                            44 #include "hurricane/DeviceDescriptor.h"
                                                                                            +
                                                                                            45 #include "hurricane/ModelDescriptor.h"
                                                                                            +
                                                                                            46 #include "hurricane/Rule.h"
                                                                                            +
                                                                                            47 
                                                                                            48 
                                                                                            -
                                                                                            49  class DataBase;
                                                                                            -
                                                                                            50  class BasicLayer;
                                                                                            -
                                                                                            51  class RegularLayer;
                                                                                            -
                                                                                            52  class ViaLayer;
                                                                                            +
                                                                                            49 namespace Hurricane {
                                                                                            +
                                                                                            50 
                                                                                            +
                                                                                            51  using std::set;
                                                                                            +
                                                                                            52  using std::multimap;
                                                                                            53 
                                                                                            -
                                                                                            54 
                                                                                            -
                                                                                            55 // -------------------------------------------------------------------
                                                                                            -
                                                                                            56 // Class : "Hurricane::Technology".
                                                                                            -
                                                                                            57 
                                                                                            -
                                                                                            58  class Technology : public DBo {
                                                                                            -
                                                                                            59 
                                                                                            -
                                                                                            60  public:
                                                                                            -
                                                                                            61  typedef DBo Inherit;
                                                                                            -
                                                                                            62  typedef multimap<Layer::Mask,Layer*> LayerMaskMap;
                                                                                            -
                                                                                            63 
                                                                                            -
                                                                                            64  public:
                                                                                            -
                                                                                            65  // Sub-class : LayerMap.
                                                                                            -
                                                                                            66  class LayerMap : public IntrusiveMap<Name,Layer> {
                                                                                            -
                                                                                            67  public:
                                                                                            -
                                                                                            68  typedef IntrusiveMap<Name,Layer> Inherit;
                                                                                            -
                                                                                            69  public:
                                                                                            -
                                                                                            70  LayerMap ();
                                                                                            -
                                                                                            71  virtual Name _getKey ( Layer* ) const;
                                                                                            -
                                                                                            72  virtual unsigned _getHashValue ( Name ) const;
                                                                                            -
                                                                                            73  virtual Layer* _getNextElement ( Layer* ) const;
                                                                                            -
                                                                                            74  virtual void _setNextElement ( Layer* , Layer* nextLayer) const;
                                                                                            -
                                                                                            75  };
                                                                                            -
                                                                                            76 
                                                                                            -
                                                                                            77  public:
                                                                                            -
                                                                                            78  // Constructor.
                                                                                            -
                                                                                            79  static Technology* create ( DataBase* , const Name& );
                                                                                            -
                                                                                            80  // Accessors.
                                                                                            -
                                                                                            81  inline bool isMetal ( const Layer* ) const;
                                                                                            -
                                                                                            82  inline DataBase* getDataBase () const;
                                                                                            -
                                                                                            83  inline const Name& getName () const;
                                                                                            -
                                                                                            84  inline Layer* getLayer ( const Name& ) const;
                                                                                            -
                                                                                            85  BasicLayer* getBasicLayer ( const Name& ) const;
                                                                                            -
                                                                                            86  RegularLayer* getRegularLayer ( const Name& ) const;
                                                                                            -
                                                                                            87  ViaLayer* getViaLayer ( const Name& ) const;
                                                                                            -
                                                                                            88  inline Layers getLayers () const;
                                                                                            -
                                                                                            89  BasicLayers getBasicLayers () const;
                                                                                            -
                                                                                            90  BasicLayers getBasicLayers ( const Layer::Mask& ) const;
                                                                                            -
                                                                                            91  RegularLayers getRegularLayers () const;
                                                                                            -
                                                                                            92  ViaLayers getViaLayers () const;
                                                                                            -
                                                                                            93  Layer* getLayer ( const Layer::Mask&, bool useSymbolic=true ) const;
                                                                                            -
                                                                                            94  Layer* getMetalAbove ( const Layer*, bool useSymbolic=true ) const;
                                                                                            -
                                                                                            95  Layer* getMetalBelow ( const Layer*, bool useSymbolic=true ) const;
                                                                                            -
                                                                                            96  Layer* getCutAbove ( const Layer*, bool useSymbolic=true ) const;
                                                                                            -
                                                                                            97  Layer* getCutBelow ( const Layer*, bool useSymbolic=true ) const;
                                                                                            -
                                                                                            98  Layer* getViaBetween ( const Layer*, const Layer*, bool useSymbolic=true ) const;
                                                                                            -
                                                                                            99  Layer* getNthMetal ( int ) const;
                                                                                            -
                                                                                            100  Layer* getNthCut ( int ) const;
                                                                                            -
                                                                                            101  // Updators.
                                                                                            -
                                                                                            102  void setName ( const Name& );
                                                                                            -
                                                                                            103  bool setSymbolicLayer ( const Name& );
                                                                                            -
                                                                                            104  bool setSymbolicLayer ( const Layer* );
                                                                                            -
                                                                                            105  // Others.
                                                                                            -
                                                                                            106  inline LayerMap& _getLayerMap ();
                                                                                            -
                                                                                            107  inline LayerMaskMap& _getLayerMaskMap ();
                                                                                            -
                                                                                            108  void _insertInLayerMaskMap ( Layer* );
                                                                                            -
                                                                                            109  void _removeFromLayerMaskMap ( Layer* );
                                                                                            -
                                                                                            110  inline Layer::Mask& _getCutMask ();
                                                                                            -
                                                                                            111  inline Layer::Mask& _getMetalMask ();
                                                                                            -
                                                                                            112  void _onDbuChange ( float scale );
                                                                                            -
                                                                                            113  // Hurricane Managment.
                                                                                            -
                                                                                            114  virtual void _toJson ( JsonWriter* ) const;
                                                                                            -
                                                                                            115  virtual void _toJsonCollections ( JsonWriter* ) const;
                                                                                            -
                                                                                            116  virtual string _getTypeName () const;
                                                                                            -
                                                                                            117  virtual string _getString () const;
                                                                                            -
                                                                                            118  virtual Record* _getRecord () const;
                                                                                            -
                                                                                            119 
                                                                                            -
                                                                                            120  private:
                                                                                            -
                                                                                            121  // Internal: Attributes.
                                                                                            -
                                                                                            122  DataBase* _dataBase;
                                                                                            -
                                                                                            123  Name _name;
                                                                                            -
                                                                                            124  LayerMap _layerMap;
                                                                                            -
                                                                                            125  LayerMaskMap _layerMaskMap;
                                                                                            -
                                                                                            126  Layer::Mask _cutMask;
                                                                                            -
                                                                                            127  Layer::Mask _metalMask;
                                                                                            -
                                                                                            128 
                                                                                            -
                                                                                            129  protected:
                                                                                            -
                                                                                            130  // Constructors & Destructors.
                                                                                            -
                                                                                            131  Technology ( DataBase* , const Name& );
                                                                                            -
                                                                                            132  virtual void _postCreate ();
                                                                                            -
                                                                                            133  virtual void _preDestroy ();
                                                                                            -
                                                                                            134  };
                                                                                            -
                                                                                            135 
                                                                                            -
                                                                                            136 
                                                                                            -
                                                                                            137 // Inline Functions.
                                                                                            -
                                                                                            138  inline bool Technology::isMetal ( const Layer* layer ) const { return _metalMask.contains(layer->getMask()); }
                                                                                            -
                                                                                            139  inline DataBase* Technology::getDataBase () const { return _dataBase; }
                                                                                            -
                                                                                            140  inline const Name& Technology::getName () const { return _name; }
                                                                                            -
                                                                                            141  inline Layer* Technology::getLayer ( const Name& name ) const { return _layerMap.getElement(name); }
                                                                                            -
                                                                                            142  inline Layers Technology::getLayers () const { return getCollection(&_layerMaskMap); }
                                                                                            -
                                                                                            143  inline Technology::LayerMap& Technology::_getLayerMap () { return _layerMap; }
                                                                                            -
                                                                                            144  inline Technology::LayerMaskMap& Technology::_getLayerMaskMap () { return _layerMaskMap; }
                                                                                            -
                                                                                            145  inline Layer::Mask& Technology::_getCutMask () { return _cutMask; }
                                                                                            -
                                                                                            146  inline Layer::Mask& Technology::_getMetalMask () { return _metalMask; }
                                                                                            -
                                                                                            147 
                                                                                            -
                                                                                            148 
                                                                                            -
                                                                                            149 // -------------------------------------------------------------------
                                                                                            -
                                                                                            150 // Class : "Hurricane::JsonTechnology".
                                                                                            -
                                                                                            151 
                                                                                            -
                                                                                            152  class JsonTechnology : public JsonDBo {
                                                                                            -
                                                                                            153  public:
                                                                                            -
                                                                                            154  static void initialize ();
                                                                                            -
                                                                                            155  JsonTechnology ( unsigned long flags );
                                                                                            -
                                                                                            156  virtual ~JsonTechnology ();
                                                                                            -
                                                                                            157  virtual string getTypeName () const;
                                                                                            -
                                                                                            158  virtual JsonTechnology* clone ( unsigned long ) const;
                                                                                            -
                                                                                            159  virtual void toData ( JsonStack& );
                                                                                            -
                                                                                            160  void addBlockageRef ( const std::string&, BasicLayer* );
                                                                                            -
                                                                                            161  private:
                                                                                            -
                                                                                            162  std::map< string, vector<BasicLayer*> > _blockagesMap;
                                                                                            -
                                                                                            163  };
                                                                                            -
                                                                                            164 
                                                                                            -
                                                                                            165 
                                                                                            -
                                                                                            166 } // Hurricane namespace.
                                                                                            -
                                                                                            167 
                                                                                            -
                                                                                            168 
                                                                                            -
                                                                                            169 INSPECTOR_P_SUPPORT(Hurricane::Technology);
                                                                                            -
                                                                                            170 
                                                                                            -
                                                                                            171 
                                                                                            -
                                                                                            172 #endif // HURRICANE_TECHNOLOGY_H
                                                                                            +
                                                                                            54  class DataBase;
                                                                                            +
                                                                                            55  class BasicLayer;
                                                                                            +
                                                                                            56  class RegularLayer;
                                                                                            +
                                                                                            57  class ViaLayer;
                                                                                            +
                                                                                            58  class UnitRule;
                                                                                            +
                                                                                            59  class PhysicalRule;
                                                                                            +
                                                                                            60  class TwoLayersPhysicalRule;
                                                                                            +
                                                                                            61 
                                                                                            +
                                                                                            62 
                                                                                            +
                                                                                            63 // -------------------------------------------------------------------
                                                                                            +
                                                                                            64 // Class : "Hurricane::Technology".
                                                                                            +
                                                                                            65 
                                                                                            +
                                                                                            66  class Technology : public DBo {
                                                                                            +
                                                                                            67 
                                                                                            +
                                                                                            68  public:
                                                                                            +
                                                                                            69  typedef DBo Super;
                                                                                            +
                                                                                            70  typedef multimap<Layer::Mask,Layer*> LayerMaskMap;
                                                                                            +
                                                                                            71  typedef set<DeviceDescriptor*, DeviceDescriptor::DeviceDescriptorComp> DeviceDescriptors;
                                                                                            +
                                                                                            72  typedef set<ModelDescriptor* , ModelDescriptor::ModelDescriptorComp> ModelDescriptors;
                                                                                            +
                                                                                            73  public:
                                                                                            +
                                                                                            74  struct RuleNameCompare:
                                                                                            +
                                                                                            75  public std::binary_function<const Rule*, const Rule*, bool> {
                                                                                            +
                                                                                            76  bool operator() ( const Rule* rule1, const Rule* rule2 ) const
                                                                                            +
                                                                                            77  { return rule1->getName() < rule2->getName(); }
                                                                                            +
                                                                                            78  };
                                                                                            +
                                                                                            79  public:
                                                                                            +
                                                                                            80  typedef std::pair<const Hurricane::Layer*, const Hurricane::Layer*> LayerPair;
                                                                                            +
                                                                                            81  typedef std::set<UnitRule* , RuleNameCompare> UnitRules;
                                                                                            +
                                                                                            82  typedef std::set<PhysicalRule* , RuleNameCompare> PhysicalRules;
                                                                                            +
                                                                                            83  typedef std::set<TwoLayersPhysicalRule* , RuleNameCompare> TwoLayersRulesSet;
                                                                                            +
                                                                                            84  typedef std::map<const Hurricane::Layer* , PhysicalRules> OneLayerRules;
                                                                                            +
                                                                                            85  typedef std::map<LayerPair , TwoLayersRulesSet> TwoLayersRules;
                                                                                            +
                                                                                            86 
                                                                                            +
                                                                                            87  public:
                                                                                            +
                                                                                            88  // Sub-class : LayerMap.
                                                                                            +
                                                                                            89  class LayerMap : public IntrusiveMap<Name,Layer> {
                                                                                            +
                                                                                            90  public:
                                                                                            +
                                                                                            91  typedef IntrusiveMap<Name,Layer> Super;
                                                                                            +
                                                                                            92  public:
                                                                                            +
                                                                                            93  LayerMap ();
                                                                                            +
                                                                                            94  virtual Name _getKey ( Layer* ) const;
                                                                                            +
                                                                                            95  virtual unsigned _getHashValue ( Name ) const;
                                                                                            +
                                                                                            96  virtual Layer* _getNextElement ( Layer* ) const;
                                                                                            +
                                                                                            97  virtual void _setNextElement ( Layer* , Layer* nextLayer) const;
                                                                                            +
                                                                                            98  };
                                                                                            +
                                                                                            99 
                                                                                            +
                                                                                            100  public:
                                                                                            +
                                                                                            101  // Constructor.
                                                                                            +
                                                                                            102  static Technology* create ( DataBase* , const Name& );
                                                                                            +
                                                                                            103  // Accessors.
                                                                                            +
                                                                                            104  inline bool isMetal ( const Layer* ) const;
                                                                                            +
                                                                                            105  inline DataBase* getDataBase () const;
                                                                                            +
                                                                                            106  inline const Name& getName () const;
                                                                                            +
                                                                                            107  inline Layer* getLayer ( const Name& ) const;
                                                                                            +
                                                                                            108  BasicLayer* getBasicLayer ( const Name& ) const;
                                                                                            +
                                                                                            109  RegularLayer* getRegularLayer ( const Name& ) const;
                                                                                            +
                                                                                            110  ViaLayer* getViaLayer ( const Name& ) const;
                                                                                            +
                                                                                            111  inline Layers getLayers () const;
                                                                                            +
                                                                                            112  BasicLayers getBasicLayers () const;
                                                                                            +
                                                                                            113  BasicLayers getBasicLayers ( const Layer::Mask& ) const;
                                                                                            +
                                                                                            114  RegularLayers getRegularLayers () const;
                                                                                            +
                                                                                            115  ViaLayers getViaLayers () const;
                                                                                            +
                                                                                            116  Layer* getLayer ( const Layer::Mask&, bool useSymbolic=true ) const;
                                                                                            +
                                                                                            117  Layer* getMetalAbove ( const Layer*, bool useSymbolic=true ) const;
                                                                                            +
                                                                                            118  Layer* getMetalBelow ( const Layer*, bool useSymbolic=true ) const;
                                                                                            +
                                                                                            119  Layer* getCutAbove ( const Layer*, bool useSymbolic=true ) const;
                                                                                            +
                                                                                            120  Layer* getCutBelow ( const Layer*, bool useSymbolic=true ) const;
                                                                                            +
                                                                                            121  Layer* getViaBetween ( const Layer*, const Layer*, bool useSymbolic=true ) const;
                                                                                            +
                                                                                            122  Layer* getNthMetal ( int ) const;
                                                                                            +
                                                                                            123  Layer* getNthCut ( int ) const;
                                                                                            +
                                                                                            124  DeviceDescriptor* getDeviceDescriptor ( const Name& );
                                                                                            +
                                                                                            125  ModelDescriptor* getModelDescriptor (const Name& );
                                                                                            +
                                                                                            126  inline ModelDescriptors& getModelDescriptors ();
                                                                                            +
                                                                                            127  UnitRule getUnitRule ( const std::string& ruleName ) const;
                                                                                            +
                                                                                            128  PhysicalRule getPhysicalRule ( const std::string& ruleName ) const;
                                                                                            +
                                                                                            129  PhysicalRule getPhysicalRule ( const std::string& ruleName
                                                                                            +
                                                                                            130  , const std::string& layerName ) const;
                                                                                            +
                                                                                            131  PhysicalRule getPhysicalRule ( const std::string& ruleName
                                                                                            +
                                                                                            132  , const std::string& layer1Name
                                                                                            +
                                                                                            133  , const std::string& layer2Name ) const;
                                                                                            +
                                                                                            134  inline const UnitRules& getUnitRules () const;
                                                                                            +
                                                                                            135  inline const PhysicalRules& getNoLayerRules () const;
                                                                                            +
                                                                                            136  inline const OneLayerRules& getOneLayerRules () const;
                                                                                            +
                                                                                            137  inline const TwoLayersRules& getTwoLayersRules () const;
                                                                                            +
                                                                                            138  void toDtr ( std::ostream& );
                                                                                            +
                                                                                            139  inline void setName ( const std::string& name );
                                                                                            +
                                                                                            140  // Updators.
                                                                                            +
                                                                                            141  void setName ( const Name& );
                                                                                            +
                                                                                            142  bool setSymbolicLayer ( const Name& );
                                                                                            +
                                                                                            143  bool setSymbolicLayer ( const Layer* );
                                                                                            +
                                                                                            144  DeviceDescriptor* addDeviceDescriptor ( const Name& );
                                                                                            +
                                                                                            145  ModelDescriptor* addModelDescriptor ( const Name& name
                                                                                            +
                                                                                            146  , const Name& simul
                                                                                            +
                                                                                            147  , const Name& model
                                                                                            +
                                                                                            148  , std::string netlist
                                                                                            +
                                                                                            149  , const Name& name_n
                                                                                            +
                                                                                            150  , const Name& name_p
                                                                                            +
                                                                                            151  , bool precise );
                                                                                            +
                                                                                            152  void addUnitRule ( const std::string& ruleName
                                                                                            +
                                                                                            153  , double value
                                                                                            +
                                                                                            154  , const std::string& reference );
                                                                                            +
                                                                                            155  void addPhysicalRule ( const std::string& ruleName
                                                                                            +
                                                                                            156  , DbU::Unit value
                                                                                            +
                                                                                            157  , const std::string& reference );
                                                                                            +
                                                                                            158  void addPhysicalRule ( const std::string& ruleName
                                                                                            +
                                                                                            159  , const std::string& layerName
                                                                                            +
                                                                                            160  , DbU::Unit value
                                                                                            +
                                                                                            161  , const std::string& reference);
                                                                                            +
                                                                                            162  void addPhysicalRule ( const std::string& ruleName
                                                                                            +
                                                                                            163  , const std::string& layer1Name
                                                                                            +
                                                                                            164  , const std::string& layer2Name
                                                                                            +
                                                                                            165  , bool symetric
                                                                                            +
                                                                                            166  , DbU::Unit value
                                                                                            +
                                                                                            167  , const std::string& reference );
                                                                                            +
                                                                                            168  // Others.
                                                                                            +
                                                                                            169  inline LayerMap& _getLayerMap ();
                                                                                            +
                                                                                            170  inline LayerMaskMap& _getLayerMaskMap ();
                                                                                            +
                                                                                            171  void _insertInLayerMaskMap ( Layer* );
                                                                                            +
                                                                                            172  void _removeFromLayerMaskMap ( Layer* );
                                                                                            +
                                                                                            173  inline Layer::Mask& _getCutMask ();
                                                                                            +
                                                                                            174  inline Layer::Mask& _getMetalMask ();
                                                                                            +
                                                                                            175  void _onDbuChange ( float scale );
                                                                                            +
                                                                                            176  // Hurricane Managment.
                                                                                            +
                                                                                            177  virtual void _toJson ( JsonWriter* ) const;
                                                                                            +
                                                                                            178  virtual void _toJsonCollections ( JsonWriter* ) const;
                                                                                            +
                                                                                            179  virtual string _getTypeName () const;
                                                                                            +
                                                                                            180  virtual string _getString () const;
                                                                                            +
                                                                                            181  virtual Record* _getRecord () const;
                                                                                            +
                                                                                            182 
                                                                                            +
                                                                                            183  private:
                                                                                            +
                                                                                            184  // Internal: Attributes.
                                                                                            +
                                                                                            185  DataBase* _dataBase;
                                                                                            +
                                                                                            186  Name _name;
                                                                                            +
                                                                                            187  LayerMap _layerMap;
                                                                                            +
                                                                                            188  LayerMaskMap _layerMaskMap;
                                                                                            +
                                                                                            189  Layer::Mask _cutMask;
                                                                                            +
                                                                                            190  Layer::Mask _metalMask;
                                                                                            +
                                                                                            191  DeviceDescriptors _deviceDescriptors;
                                                                                            +
                                                                                            192  ModelDescriptors _modelDescriptors;
                                                                                            +
                                                                                            193  UnitRules _unitRules;
                                                                                            +
                                                                                            194  PhysicalRules _noLayerRules;
                                                                                            +
                                                                                            195  OneLayerRules _oneLayerRules;
                                                                                            +
                                                                                            196  TwoLayersRules _twoLayersRules;
                                                                                            +
                                                                                            197 
                                                                                            +
                                                                                            198  protected:
                                                                                            +
                                                                                            199  // Constructors & Destructors.
                                                                                            +
                                                                                            200  Technology ( DataBase* , const Name& );
                                                                                            +
                                                                                            201  virtual void _postCreate ();
                                                                                            +
                                                                                            202  virtual void _preDestroy ();
                                                                                            +
                                                                                            203  };
                                                                                            +
                                                                                            204 
                                                                                            +
                                                                                            205 
                                                                                            +
                                                                                            206 // Inline Functions.
                                                                                            +
                                                                                            207  inline bool Technology::isMetal ( const Layer* layer ) const { return _metalMask.contains(layer->getMask()); }
                                                                                            +
                                                                                            208  inline DataBase* Technology::getDataBase () const { return _dataBase; }
                                                                                            +
                                                                                            209  inline const Name& Technology::getName () const { return _name; }
                                                                                            +
                                                                                            210  inline Layer* Technology::getLayer ( const Name& name ) const { return _layerMap.getElement(name); }
                                                                                            +
                                                                                            211  inline Layers Technology::getLayers () const { return getCollection(&_layerMaskMap); }
                                                                                            +
                                                                                            212  inline Technology::ModelDescriptors& Technology::getModelDescriptors () { return _modelDescriptors; }
                                                                                            +
                                                                                            213  inline Technology::LayerMap& Technology::_getLayerMap () { return _layerMap; }
                                                                                            +
                                                                                            214  inline Technology::LayerMaskMap& Technology::_getLayerMaskMap () { return _layerMaskMap; }
                                                                                            +
                                                                                            215  inline Layer::Mask& Technology::_getCutMask () { return _cutMask; }
                                                                                            +
                                                                                            216  inline Layer::Mask& Technology::_getMetalMask () { return _metalMask; }
                                                                                            +
                                                                                            217 
                                                                                            +
                                                                                            218 
                                                                                            +
                                                                                            219 // -------------------------------------------------------------------
                                                                                            +
                                                                                            220 // Class : "Hurricane::JsonTechnology".
                                                                                            +
                                                                                            221 
                                                                                            +
                                                                                            222  class JsonTechnology : public JsonDBo {
                                                                                            +
                                                                                            223  public:
                                                                                            +
                                                                                            224  static void initialize ();
                                                                                            +
                                                                                            225  JsonTechnology ( unsigned long flags );
                                                                                            +
                                                                                            226  virtual ~JsonTechnology ();
                                                                                            +
                                                                                            227  virtual string getTypeName () const;
                                                                                            +
                                                                                            228  virtual JsonTechnology* clone ( unsigned long ) const;
                                                                                            +
                                                                                            229  virtual void toData ( JsonStack& );
                                                                                            +
                                                                                            230  void addBlockageRef ( const std::string&, BasicLayer* );
                                                                                            +
                                                                                            231  private:
                                                                                            +
                                                                                            232  std::map< string, vector<BasicLayer*> > _blockagesMap;
                                                                                            +
                                                                                            233  };
                                                                                            +
                                                                                            234 
                                                                                            +
                                                                                            235 
                                                                                            +
                                                                                            236 } // Hurricane namespace.
                                                                                            +
                                                                                            237 
                                                                                            +
                                                                                            238 
                                                                                            +
                                                                                            239 // -------------------------------------------------------------------
                                                                                            +
                                                                                            240 // Inspector Support for : Hurricane::Technology::LayerPair".
                                                                                            +
                                                                                            241 
                                                                                            +
                                                                                            242 template<>
                                                                                            +
                                                                                            243 inline std::string getString<Hurricane::Technology::LayerPair>( Hurricane::Technology::LayerPair lp )
                                                                                            +
                                                                                            244 { return "<LayerPair layer1=" + getString(lp.first) + ", layer2=" + getString(lp.second) + ">"; }
                                                                                            +
                                                                                            245 
                                                                                            +
                                                                                            246 
                                                                                            +
                                                                                            247 INSPECTOR_P_SUPPORT(Hurricane::Technology);
                                                                                            +
                                                                                            248 
                                                                                            +
                                                                                            249 
                                                                                            +
                                                                                            250 #endif // HURRICANE_TECHNOLOGY_H
                                                                                            Layer * getMetalAbove(const Layer *, bool useSymbolic=true) const
                                                                                            RegularLayer description (API)
                                                                                            Definition: RegularLayer.h:45
                                                                                            Layer * getNthMetal(int) const
                                                                                            @@ -229,34 +307,34 @@
                                                                                            BasicLayers getBasicLayers() const
                                                                                            const Mask & getMask() const
                                                                                            Definition: Layer.h:150
                                                                                            Name description (API)
                                                                                            Definition: Name.h:36
                                                                                            +
                                                                                            std::int64_t Unit
                                                                                            Definition: DbU.h:70
                                                                                            Layer * getMetalBelow(const Layer *, bool useSymbolic=true) const
                                                                                            -
                                                                                            const Name & getName() const
                                                                                            Definition: Technology.h:140
                                                                                            +
                                                                                            const Name & getName() const
                                                                                            Definition: Technology.h:209
                                                                                            DataBase object root class (API).
                                                                                            Definition: DBo.h:46
                                                                                            ViaLayers getViaLayers() const
                                                                                            Hurricane::Mask< unsigned long long > Mask
                                                                                            Definition: Layer.h:65
                                                                                            Layer * getCutAbove(const Layer *, bool useSymbolic=true) const
                                                                                            -
                                                                                            Layer * getLayer(const Name &) const
                                                                                            Definition: Technology.h:141
                                                                                            +
                                                                                            Layer * getLayer(const Name &) const
                                                                                            Definition: Technology.h:210
                                                                                            Generic Collection auto-pointer.
                                                                                            Definition: Collection.h:28
                                                                                            Layer * getCutBelow(const Layer *, bool useSymbolic=true) const
                                                                                            -
                                                                                            Layers getLayers() const
                                                                                            Definition: Technology.h:142
                                                                                            +
                                                                                            Layers getLayers() const
                                                                                            Definition: Technology.h:211
                                                                                            BasicLayer * getBasicLayer(const Name &) const
                                                                                            static Technology * create(DataBase *, const Name &)
                                                                                            The whole DataBase (API).
                                                                                            Definition: DataBase.h:40
                                                                                            Layer description (API)
                                                                                            Definition: Layer.h:52
                                                                                            ViaLayer * getViaLayer(const Name &) const
                                                                                            -
                                                                                            void setName(const Name &)
                                                                                            Layer * getViaBetween(const Layer *, const Layer *, bool useSymbolic=true) const
                                                                                            -
                                                                                            DataBase * getDataBase() const
                                                                                            Definition: Technology.h:139
                                                                                            -
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:58
                                                                                            +
                                                                                            DataBase * getDataBase() const
                                                                                            Definition: Technology.h:208
                                                                                            +
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:66
                                                                                            RegularLayer * getRegularLayer(const Name &) const
                                                                                            ViaLayer description (API)
                                                                                            Definition: ViaLayer.h:46
                                                                                            -
                                                                                            bool isMetal(const Layer *) const
                                                                                            Definition: Technology.h:138
                                                                                            +
                                                                                            bool isMetal(const Layer *) const
                                                                                            Definition: Technology.h:207


                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Transformation_8h_source.html b/hurricane/doc/hurricane/html/Transformation_8h_source.html index cee8ea8a..682b8953 100644 --- a/hurricane/doc/hurricane/html/Transformation_8h_source.html +++ b/hurricane/doc/hurricane/html/Transformation_8h_source.html @@ -298,7 +298,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/TransistorLayer_8h_source.html b/hurricane/doc/hurricane/html/TransistorLayer_8h_source.html index c3daf978..afca9566 100644 --- a/hurricane/doc/hurricane/html/TransistorLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/TransistorLayer_8h_source.html @@ -172,13 +172,13 @@
                                                                                            JSON Parser Stack.
                                                                                            Definition: JsonObject.h:249
                                                                                            static TransistorLayer * create(Technology *technology, const Name &name, BasicLayer *gateLayer, BasicLayer *activeLayer, BasicLayer *diffusionLayer, BasicLayer *wellLayer)
                                                                                            Layer description (API)
                                                                                            Definition: Layer.h:52
                                                                                            -
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:58
                                                                                            +
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:66


                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/UpdateSession_8h_source.html b/hurricane/doc/hurricane/html/UpdateSession_8h_source.html index 5d539967..4ce9672c 100644 --- a/hurricane/doc/hurricane/html/UpdateSession_8h_source.html +++ b/hurricane/doc/hurricane/html/UpdateSession_8h_source.html @@ -159,7 +159,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/VectorCollection_8h_source.html b/hurricane/doc/hurricane/html/VectorCollection_8h_source.html index 3d0d03eb..0c8944a5 100644 --- a/hurricane/doc/hurricane/html/VectorCollection_8h_source.html +++ b/hurricane/doc/hurricane/html/VectorCollection_8h_source.html @@ -275,7 +275,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Vertical_8h_source.html b/hurricane/doc/hurricane/html/Vertical_8h_source.html index bd314aae..4b238048 100644 --- a/hurricane/doc/hurricane/html/Vertical_8h_source.html +++ b/hurricane/doc/hurricane/html/Vertical_8h_source.html @@ -207,7 +207,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Verticals_8h_source.html b/hurricane/doc/hurricane/html/Verticals_8h_source.html index 64261d23..2fd22986 100644 --- a/hurricane/doc/hurricane/html/Verticals_8h_source.html +++ b/hurricane/doc/hurricane/html/Verticals_8h_source.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/ViaLayer_8h_source.html b/hurricane/doc/hurricane/html/ViaLayer_8h_source.html index 46a7a049..d9db9d93 100644 --- a/hurricane/doc/hurricane/html/ViaLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/ViaLayer_8h_source.html @@ -168,7 +168,7 @@
                                                                                            DataBase object root class (API).
                                                                                            Definition: DBo.h:46
                                                                                            JSON Parser Stack.
                                                                                            Definition: JsonObject.h:249
                                                                                            Layer description (API)
                                                                                            Definition: Layer.h:52
                                                                                            -
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:58
                                                                                            +
                                                                                            Technological rules description (API).
                                                                                            Definition: Technology.h:66
                                                                                            ViaLayer description (API)
                                                                                            Definition: ViaLayer.h:46
                                                                                            static ViaLayer * create(Technology *technology, const Name &name, BasicLayer *bottomLayer, BasicLayer *cutLayer, BasicLayer *topLayer)
                                                                                            @@ -176,7 +176,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/Warning_8h_source.html b/hurricane/doc/hurricane/html/Warning_8h_source.html index 4e612ae9..347960b3 100644 --- a/hurricane/doc/hurricane/html/Warning_8h_source.html +++ b/hurricane/doc/hurricane/html/Warning_8h_source.html @@ -140,7 +140,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/annotated.html b/hurricane/doc/hurricane/html/annotated.html index 58d72127..0d6a16a9 100644 --- a/hurricane/doc/hurricane/html/annotated.html +++ b/hurricane/doc/hurricane/html/annotated.html @@ -141,7 +141,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer-members.html index 31ebf22a..d134be4e 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer-members.html @@ -97,7 +97,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer.html b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer.html index 18b79228..7d1fa7c4 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer.html @@ -339,7 +339,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material-members.html index 498b8f93..fa1d805d 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material-members.html @@ -71,7 +71,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material.html b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material.html index c8617c63..85c8ba46 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material.html @@ -139,7 +139,7 @@ Public Types
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Box-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Box-members.html index 7c133d70..e0011c25 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Box-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Box-members.html @@ -99,7 +99,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Box.html b/hurricane/doc/hurricane/html/classHurricane_1_1Box.html index 53f361c4..221dffeb 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Box.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Box.html @@ -1041,7 +1041,7 @@ Remark on Modifiers
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Cell-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Cell-members.html index 0623a1df..621ffc79 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Cell-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Cell-members.html @@ -104,7 +104,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Cell.html b/hurricane/doc/hurricane/html/classHurricane_1_1Cell.html index 825aec03..e5e050ac 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Cell.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Cell.html @@ -878,7 +878,7 @@ Static Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Collection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Collection-members.html index b4f9d0be..03236533 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Collection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Collection-members.html @@ -68,7 +68,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Collection.html b/hurricane/doc/hurricane/html/classHurricane_1_1Collection.html index 124eb10d..592e0e17 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Collection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Collection.html @@ -463,7 +463,7 @@ template<class SubType >
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Component-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Component-members.html index cda644a7..5a618024 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Component-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Component-members.html @@ -87,7 +87,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Component.html b/hurricane/doc/hurricane/html/classHurricane_1_1Component.html index 77683c93..3d38cc52 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Component.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Component.html @@ -497,7 +497,7 @@ Predefined filters
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook-members.html index 7f2e85c7..bd7eb31a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook-members.html @@ -71,7 +71,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook.html b/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook.html index e5627d24..20acf4b3 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook.html @@ -98,7 +98,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Contact-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Contact-members.html index a41eecb9..00e73c17 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Contact-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Contact-members.html @@ -101,7 +101,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Contact.html b/hurricane/doc/hurricane/html/classHurricane_1_1Contact.html index da90d586..570367f2 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Contact.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Contact.html @@ -730,7 +730,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer-members.html index 1896d00a..eeff8f86 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer-members.html @@ -92,7 +92,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer.html b/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer.html index 4e1d60a0..a4420c4d 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer.html @@ -231,7 +231,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook-members.html index 10145832..8cb00ad0 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook-members.html @@ -71,7 +71,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook.html b/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook.html index a0272524..ad023329 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook.html @@ -99,7 +99,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DBo-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1DBo-members.html index ac98b84b..64dd3e97 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DBo-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DBo-members.html @@ -68,7 +68,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DBo.html b/hurricane/doc/hurricane/html/classHurricane_1_1DBo.html index 7a61880a..aded3902 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DBo.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DBo.html @@ -374,7 +374,7 @@ Remark
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DataBase-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1DataBase-members.html index 3001b3c2..eda5281b 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DataBase-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DataBase-members.html @@ -72,7 +72,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DataBase.html b/hurricane/doc/hurricane/html/classHurricane_1_1DataBase.html index ef373395..00e43ccc 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DataBase.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DataBase.html @@ -212,7 +212,7 @@ Static Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DbU-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1DbU-members.html index a7106f5f..eb6fe240 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DbU-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DbU-members.html @@ -106,7 +106,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DbU.html b/hurricane/doc/hurricane/html/classHurricane_1_1DbU.html index 78e105f6..f1f560ab 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DbU.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DbU.html @@ -176,7 +176,7 @@ Static Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession-members.html index 3a63d90a..0a3495a3 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession-members.html @@ -66,7 +66,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession.html b/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession.html index c897de58..d0fec020 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession.html @@ -112,19 +112,13 @@ Trace Levels Unicorn 180 190 -C++ / CHAMS +C++ / Analog Tool/Library Minimum Maximum -HurricaneAMS 500 510 +Analog 500 510 -amsCore 510 520 - -Pharos 520 530 - -Isis 530 540 - -Horus 530 540 +oroshi 510 520 Python Wrappers / Coriolis @@ -150,19 +144,13 @@ Trace Levels Unicorn/Python 46 48 -Python Wrappers / CHAMS +Python Wrappers / Analog Tool/Library Minimum Maximum -isobarAMS 48 50 +Analog 48 50 -amsCore 50 51 - -Pharos/Python 52 60 - -Isis/Python 60 61 - -Horus/Python 61 62 +oroshi/ÿthon 50 51 Special levels @@ -386,7 +374,7 @@ Trace Levels
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal-members.html index cac9b8ca..37fa2d39 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal-members.html @@ -84,7 +84,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal.html b/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal.html index 1b403ffb..dacbe8e3 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal.html @@ -214,7 +214,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer-members.html index 1edf2a2c..fddde8a0 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer-members.html @@ -91,7 +91,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer.html b/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer.html index 56cdb3b2..119bf736 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer.html @@ -217,7 +217,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Entity-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Entity-members.html index 65cedc42..a9cb8801 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Entity-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Entity-members.html @@ -71,7 +71,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Entity.html b/hurricane/doc/hurricane/html/classHurricane_1_1Entity.html index ae0630f1..c846ad5a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Entity.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Entity.html @@ -194,7 +194,7 @@ Unique Identifier
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Entity_1_1CompareById-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Entity_1_1CompareById-members.html index d9bb36b7..fac3cdcb 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Entity_1_1CompareById-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Entity_1_1CompareById-members.html @@ -60,7 +60,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Error-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Error-members.html index 182d55c0..9d85fcf7 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Error-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Error-members.html @@ -74,7 +74,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Error.html b/hurricane/doc/hurricane/html/classHurricane_1_1Error.html index 57fd4821..5e4f0253 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Error.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Error.html @@ -364,7 +364,7 @@ Printing format
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Exception-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Exception-members.html index 9f4a387a..5404d909 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Exception-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Exception-members.html @@ -65,7 +65,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Exception.html b/hurricane/doc/hurricane/html/classHurricane_1_1Exception.html index 5f152589..4ac99e6b 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Exception.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Exception.html @@ -243,7 +243,7 @@ Example
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Filter-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Filter-members.html index 65e015a3..956fefa5 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Filter-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Filter-members.html @@ -63,7 +63,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Filter.html b/hurricane/doc/hurricane/html/classHurricane_1_1Filter.html index 435e91ed..c6b12a80 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Filter.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Filter.html @@ -268,7 +268,7 @@ template<class Type>
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection-members.html index 42428384..3e12d258 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection-members.html @@ -68,7 +68,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection.html index 8f621766..534cc526 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection.html @@ -189,7 +189,7 @@ template<class Type>
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter-members.html index 798219bc..9815fb14 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter-members.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter.html b/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter.html index 3615309d..c369bc3c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter.html @@ -179,7 +179,7 @@ template<class Type >
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator-members.html index 8094b7c6..60cb2c2a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator-members.html @@ -63,7 +63,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator.html b/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator.html index e9a8159a..5f41a125 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator.html @@ -176,7 +176,7 @@ template<class Type>
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Go-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Go-members.html index 9d0e9c69..1844faa4 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Go-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Go-members.html @@ -79,7 +79,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Go.html b/hurricane/doc/hurricane/html/classHurricane_1_1Go.html index 83737eb2..ea73f497 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Go.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Go.html @@ -430,7 +430,7 @@ Construction and destruction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Hook-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Hook-members.html index 68eb6479..cfa66bb4 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Hook-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Hook-members.html @@ -73,7 +73,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Hook.html b/hurricane/doc/hurricane/html/classHurricane_1_1Hook.html index 44eee9b6..a759f5fb 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Hook.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Hook.html @@ -399,7 +399,7 @@ Constructor and Destructor
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal-members.html index 4ad66195..6b1ee18e 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal-members.html @@ -101,7 +101,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal.html b/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal.html index f18426de..beb15a72 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal.html @@ -411,7 +411,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet-members.html index 1b6815ed..229ea07a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet-members.html @@ -66,7 +66,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet.html b/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet.html index 54db454a..eebc77fb 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet.html @@ -268,7 +268,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Initializer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Initializer-members.html index bedf169e..04988d56 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Initializer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Initializer-members.html @@ -61,7 +61,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Initializer.html b/hurricane/doc/hurricane/html/classHurricane_1_1Initializer.html index 2273692b..2f49938e 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Initializer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Initializer.html @@ -111,7 +111,7 @@ template<typename T >
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Instance-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Instance-members.html index 15aacba6..a07b11df 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Instance-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Instance-members.html @@ -91,7 +91,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Instance.html b/hurricane/doc/hurricane/html/classHurricane_1_1Instance.html index 7a763d07..3e044624 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Instance.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Instance.html @@ -619,7 +619,7 @@ Instance Destruction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus-members.html index ac2e03f3..c5a39fba 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus-members.html @@ -68,7 +68,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus.html b/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus.html index abcd1c73..ac244de2 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus.html @@ -211,7 +211,7 @@ Instance Placement Status
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Interruption-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Interruption-members.html index c19343b1..bacf492b 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Interruption-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Interruption-members.html @@ -69,7 +69,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Interruption.html b/hurricane/doc/hurricane/html/classHurricane_1_1Interruption.html index 6340dfa6..166d1f7c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Interruption.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Interruption.html @@ -187,7 +187,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Interval-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Interval-members.html index fe64e3f7..a634b08f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Interval-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Interval-members.html @@ -87,7 +87,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Interval.html b/hurricane/doc/hurricane/html/classHurricane_1_1Interval.html index 71b3c19b..cd52e1be 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Interval.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Interval.html @@ -686,7 +686,7 @@ Remark
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject-members.html index d4ff81ac..5b31be8d 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject-members.html @@ -84,7 +84,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject.html b/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject.html index 11ee5be3..de77c53d 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject.html @@ -881,7 +881,7 @@ template<typename T >
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack-members.html index 1a18c5ad..33ee199c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack-members.html @@ -73,7 +73,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack.html b/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack.html index d15ddf6b..82bd9626 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack.html @@ -511,7 +511,7 @@ template<typename T >
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Layer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Layer-members.html index 7f6f65c7..4fefd2c4 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Layer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Layer-members.html @@ -93,7 +93,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Layer.html b/hurricane/doc/hurricane/html/classHurricane_1_1Layer.html index adce6e0c..2fd453aa 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Layer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Layer.html @@ -788,7 +788,7 @@ Looking Up a Layer from a Mask
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Library-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Library-members.html index 4b67d7f4..0597a479 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Library-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Library-members.html @@ -79,7 +79,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Library.html b/hurricane/doc/hurricane/html/classHurricane_1_1Library.html index ac0d3954..aa06f46a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Library.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Library.html @@ -406,7 +406,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection-members.html index 9aff7521..902ff4c1 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection-members.html @@ -66,7 +66,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection.html index 9ea039ad..6dc51caf 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection.html @@ -114,7 +114,7 @@ template<class Element >
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Locator-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Locator-members.html index 65270bed..73a18811 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Locator-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Locator-members.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Locator.html b/hurricane/doc/hurricane/html/classHurricane_1_1Locator.html index 7f07edaf..d761387e 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Locator.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Locator.html @@ -250,7 +250,7 @@ template<class Type>
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection-members.html index 1209064f..72da5b28 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection-members.html @@ -66,7 +66,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection.html index 16c56ad6..585054b8 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection.html @@ -114,7 +114,7 @@ template<class Key , class Element , class Compare = less<Key>> - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Name-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Name-members.html index 5a2daa86..d558b901 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Name-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Name-members.html @@ -74,7 +74,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Name.html b/hurricane/doc/hurricane/html/classHurricane_1_1Name.html index 2e4b7030..b451776c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Name.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Name.html @@ -369,7 +369,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Net-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Net-members.html index b005171d..6c218ede 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net-members.html @@ -112,7 +112,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Net.html b/hurricane/doc/hurricane/html/classHurricane_1_1Net.html index e00993ba..e1a041e6 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net.html @@ -1090,7 +1090,7 @@ Predefined filters
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction-members.html index 1506aa04..8d119650 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction-members.html @@ -74,7 +74,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction.html b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction.html index ea79ba38..a46b524d 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction.html @@ -154,7 +154,7 @@ Public Types
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type-members.html index 0e9a8be7..23d593a9 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type-members.html @@ -66,7 +66,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type.html b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type.html index 748c26ab..a4189c1c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type.html @@ -114,7 +114,7 @@ Public Types
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter-members.html index 2e240987..c15316b9 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter-members.html @@ -63,7 +63,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter.html b/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter.html index 96ac188c..2e68ffa8 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter.html @@ -149,7 +149,7 @@ template<class Type>
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence-members.html index d6c92f65..99bdf956 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence-members.html @@ -80,7 +80,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence.html b/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence.html index 1b263cce..57de375f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence.html @@ -506,7 +506,7 @@ Remarks
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Pad-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Pad-members.html index d2fd9fb9..b59c8109 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Pad-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Pad-members.html @@ -83,7 +83,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Pad.html b/hurricane/doc/hurricane/html/classHurricane_1_1Pad.html index c9bc31ce..2c842841 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Pad.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Pad.html @@ -201,7 +201,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Path-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Path-members.html index e9315564..6445751f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Path-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Path-members.html @@ -83,7 +83,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Path.html b/hurricane/doc/hurricane/html/classHurricane_1_1Path.html index 169a7357..68fbd1e1 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Path.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Path.html @@ -567,7 +567,7 @@ Remarks
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Pin-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Pin-members.html index 8f034166..f5f1d45f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Pin-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Pin-members.html @@ -100,7 +100,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Pin.html b/hurricane/doc/hurricane/html/classHurricane_1_1Pin.html index 448f0181..3e4dcb49 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Pin.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Pin.html @@ -172,7 +172,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Plug-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Plug-members.html index 6bde64a7..9c359700 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Plug-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Plug-members.html @@ -86,7 +86,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Plug.html b/hurricane/doc/hurricane/html/classHurricane_1_1Plug.html index f8351da0..76bef146 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Plug.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Plug.html @@ -320,7 +320,7 @@ Predefined filters
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Point-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Point-members.html index ab8ac932..ee862e76 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Point-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Point-members.html @@ -69,7 +69,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Point.html b/hurricane/doc/hurricane/html/classHurricane_1_1Point.html index 191eecd3..7ad36e0f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Point.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Point.html @@ -281,7 +281,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Polygon-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Polygon-members.html index 04e0fc0a..ad59f896 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Polygon-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Polygon-members.html @@ -84,7 +84,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Polygon.html b/hurricane/doc/hurricane/html/classHurricane_1_1Polygon.html index 3d74601a..cdfc388f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Polygon.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Polygon.html @@ -202,7 +202,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty-members.html index 93a9d479..4ed9d1d1 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty-members.html @@ -63,7 +63,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty.html b/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty.html index ca1b06c5..cb15ad70 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty.html @@ -125,7 +125,7 @@ Destruction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Property-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Property-members.html index e11fdf5f..af1f40fb 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Property-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Property-members.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Property.html b/hurricane/doc/hurricane/html/classHurricane_1_1Property.html index 2431135b..9272dcf7 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Property.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Property.html @@ -306,7 +306,7 @@ Remarks
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree-members.html index 7eac9831..365473db 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree-members.html @@ -68,7 +68,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree.html b/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree.html index 43810af7..7c1b9e31 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree.html @@ -242,7 +242,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Quark-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Quark-members.html index bc70befd..c0ba12c0 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Quark-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Quark-members.html @@ -69,7 +69,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Quark.html b/hurricane/doc/hurricane/html/classHurricane_1_1Quark.html index 9c8aede3..27866b24 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Quark.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Quark.html @@ -152,7 +152,7 @@ Example
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Query-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Query-members.html index 314ae22c..6665fbde 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Query-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Query-members.html @@ -99,7 +99,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Query.html b/hurricane/doc/hurricane/html/classHurricane_1_1Query.html index f90010d7..8941a251 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Query.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Query.html @@ -1003,7 +1003,7 @@ secQueryParameters
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer-members.html index f1357727..6a16ebd7 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer-members.html @@ -89,7 +89,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer.html b/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer.html index e21bf870..23c3071b 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer.html @@ -222,7 +222,7 @@ RegularLayer::getOpposite()
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Relation-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Relation-members.html index e7681ef7..cf25cd69 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Relation-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Relation-members.html @@ -62,7 +62,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Relation.html b/hurricane/doc/hurricane/html/classHurricane_1_1Relation.html index 6c040268..92ec4171 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Relation.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Relation.html @@ -83,7 +83,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad-members.html index e97eed96..a7983103 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad-members.html @@ -107,7 +107,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad.html b/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad.html index 8e9e947a..4d15718f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad.html @@ -689,7 +689,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Rubber-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Rubber-members.html index db6f043d..62f3631e 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Rubber-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Rubber-members.html @@ -78,7 +78,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Rubber.html b/hurricane/doc/hurricane/html/classHurricane_1_1Rubber.html index fbd56b75..45695f6d 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Rubber.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Rubber.html @@ -253,7 +253,7 @@ Constructors & Destructors
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Segment-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Segment-members.html index fa2a7911..a4fdc45d 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment-members.html @@ -102,7 +102,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Segment.html b/hurricane/doc/hurricane/html/classHurricane_1_1Segment.html index 6b87965b..87d803fa 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment.html @@ -609,7 +609,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook-members.html index f3362286..9b09e7d7 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook-members.html @@ -71,7 +71,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook.html b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook.html index f185a556..f9a545e4 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook.html @@ -98,7 +98,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook-members.html index e2da8d00..c140e8db 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook-members.html @@ -71,7 +71,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook.html b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook.html index 73d10f86..365084cf 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook.html @@ -98,7 +98,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection-members.html index b57cb6e9..8c24e5c3 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection-members.html @@ -66,7 +66,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection.html index 72ceedfb..dd10b0f2 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection.html @@ -114,7 +114,7 @@ template<class Element , class Compare = less<Element>>
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty-members.html index 334df79b..d149c141 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty-members.html @@ -62,7 +62,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty.html b/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty.html index 576babb7..aa5fa9cc 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty.html @@ -92,7 +92,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Slice-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Slice-members.html index 2113accc..004c3970 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Slice-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Slice-members.html @@ -66,7 +66,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Slice.html b/hurricane/doc/hurricane/html/classHurricane_1_1Slice.html index 04996d56..a0ffdc77 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Slice.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Slice.html @@ -245,7 +245,7 @@ Example
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty-members.html index c27b3325..f8bed33c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty-members.html @@ -62,7 +62,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty.html b/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty.html index d04498c0..3e4a46eb 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty.html @@ -90,7 +90,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation-members.html index 56f347d0..2cfc2ea8 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation-members.html @@ -61,7 +61,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation.html b/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation.html index da106eba..9119a8b2 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation.html @@ -81,7 +81,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty-members.html index 46213644..38806e52 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty-members.html @@ -61,7 +61,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty.html b/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty.html index 9e1b98f1..48f18d5c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty.html @@ -87,7 +87,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection-members.html index 37fc4a9f..046ccb6f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection-members.html @@ -68,7 +68,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection.html index 390e2ae8..e6b8e266 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection.html @@ -168,7 +168,7 @@ template<class Type >
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection-members.html index 2c794e45..c99dd082 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection-members.html @@ -69,7 +69,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection.html index 106ed6b0..2b797e2a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection.html @@ -172,7 +172,7 @@ template<class Type , class SubType >
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation-members.html index 8cf6a45a..96c7cefc 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation-members.html @@ -68,7 +68,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation.html b/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation.html index eac246b1..ef60f3f3 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation.html @@ -292,7 +292,7 @@ Remark
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Technology-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Technology-members.html index 2ad43a1b..681b12dd 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Technology-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Technology-members.html @@ -89,7 +89,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Technology.html b/hurricane/doc/hurricane/html/classHurricane_1_1Technology.html index 97788d05..ae03dc3b 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Technology.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Technology.html @@ -627,7 +627,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation-members.html index a7996673..bdf70b96 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation-members.html @@ -89,7 +89,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation.html b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation.html index 53087e68..cdaf4f25 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation.html @@ -791,7 +791,7 @@ Transformers
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation-members.html index 0a951db7..f4b270e2 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation-members.html @@ -60,7 +60,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation.html b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation.html index d9cbfe9d..fe82f496 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation.html @@ -114,7 +114,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer-members.html index 2c54d33d..fdad6459 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer-members.html @@ -91,7 +91,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer.html b/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer.html index 9c09f8ba..0d1bc5c8 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer.html @@ -223,7 +223,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession-members.html index 409c262e..f373d9e3 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession-members.html @@ -60,7 +60,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession.html b/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession.html index 65cc3d26..667e383d 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession.html @@ -94,7 +94,7 @@ Update Session Mechanism
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection-members.html index 80bd50d4..bb1a48ba 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection-members.html @@ -66,7 +66,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection.html index 2cfe5906..016b9154 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection.html @@ -114,7 +114,7 @@ template<class Element >
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Vertical-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Vertical-members.html index ff36fa4d..20244cb6 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Vertical-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Vertical-members.html @@ -101,7 +101,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Vertical.html b/hurricane/doc/hurricane/html/classHurricane_1_1Vertical.html index 6ae66bd8..a96d0d37 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Vertical.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Vertical.html @@ -412,7 +412,7 @@ Introduction
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer-members.html index c2576ae7..b411bca6 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer-members.html @@ -89,7 +89,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer.html b/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer.html index 286c2859..8363cdcb 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer.html @@ -213,7 +213,7 @@ ViaLayer::getOpposite()
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Warning-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Warning-members.html index 12b1e350..9a5e458a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Warning-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Warning-members.html @@ -73,7 +73,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Warning.html b/hurricane/doc/hurricane/html/classHurricane_1_1Warning.html index 17ce749b..83b5209c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Warning.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Warning.html @@ -316,7 +316,7 @@ Remark
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/classes.html b/hurricane/doc/hurricane/html/classes.html index 2a64e3f5..52a21185 100644 --- a/hurricane/doc/hurricane/html/classes.html +++ b/hurricane/doc/hurricane/html/classes.html @@ -144,7 +144,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/clasststream-members.html b/hurricane/doc/hurricane/html/clasststream-members.html index b4a00f03..397766a1 100644 --- a/hurricane/doc/hurricane/html/clasststream-members.html +++ b/hurricane/doc/hurricane/html/clasststream-members.html @@ -66,7 +66,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/clasststream.html b/hurricane/doc/hurricane/html/clasststream.html index 7dc9d377..27cab1cb 100644 --- a/hurricane/doc/hurricane/html/clasststream.html +++ b/hurricane/doc/hurricane/html/clasststream.html @@ -393,7 +393,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/dir_2450e9a649c497a3424377400b95054f.html b/hurricane/doc/hurricane/html/dir_2450e9a649c497a3424377400b95054f.html index 6bbcbda2..1b4edd81 100644 --- a/hurricane/doc/hurricane/html/dir_2450e9a649c497a3424377400b95054f.html +++ b/hurricane/doc/hurricane/html/dir_2450e9a649c497a3424377400b95054f.html @@ -238,7 +238,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/hurricane/doc/hurricane/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index a70ae3b2..1e18a7b7 100644 --- a/hurricane/doc/hurricane/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/hurricane/doc/hurricane/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -62,7 +62,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/dir_84a91669594ac5e20f6d730a15331f7a.html b/hurricane/doc/hurricane/html/dir_84a91669594ac5e20f6d730a15331f7a.html index 4d06e173..092296f4 100644 --- a/hurricane/doc/hurricane/html/dir_84a91669594ac5e20f6d730a15331f7a.html +++ b/hurricane/doc/hurricane/html/dir_84a91669594ac5e20f6d730a15331f7a.html @@ -62,7 +62,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/files.html b/hurricane/doc/hurricane/html/files.html index a750a85d..4fc33b02 100644 --- a/hurricane/doc/hurricane/html/files.html +++ b/hurricane/doc/hurricane/html/files.html @@ -143,7 +143,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions.html b/hurricane/doc/hurricane/html/functions.html index a5af9944..3802fda9 100644 --- a/hurricane/doc/hurricane/html/functions.html +++ b/hurricane/doc/hurricane/html/functions.html @@ -123,7 +123,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x62.html b/hurricane/doc/hurricane/html/functions_0x62.html index 3992feb1..c73c1340 100644 --- a/hurricane/doc/hurricane/html/functions_0x62.html +++ b/hurricane/doc/hurricane/html/functions_0x62.html @@ -105,7 +105,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x63.html b/hurricane/doc/hurricane/html/functions_0x63.html index 9ea4c222..9b87a3ef 100644 --- a/hurricane/doc/hurricane/html/functions_0x63.html +++ b/hurricane/doc/hurricane/html/functions_0x63.html @@ -163,7 +163,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x64.html b/hurricane/doc/hurricane/html/functions_0x64.html index 1eeaff77..33da606e 100644 --- a/hurricane/doc/hurricane/html/functions_0x64.html +++ b/hurricane/doc/hurricane/html/functions_0x64.html @@ -139,7 +139,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x65.html b/hurricane/doc/hurricane/html/functions_0x65.html index 8e1d53b1..e0412847 100644 --- a/hurricane/doc/hurricane/html/functions_0x65.html +++ b/hurricane/doc/hurricane/html/functions_0x65.html @@ -102,7 +102,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x66.html b/hurricane/doc/hurricane/html/functions_0x66.html index 87443565..0f0940bd 100644 --- a/hurricane/doc/hurricane/html/functions_0x66.html +++ b/hurricane/doc/hurricane/html/functions_0x66.html @@ -108,7 +108,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x67.html b/hurricane/doc/hurricane/html/functions_0x67.html index e338b3c5..f947b0a1 100644 --- a/hurricane/doc/hurricane/html/functions_0x67.html +++ b/hurricane/doc/hurricane/html/functions_0x67.html @@ -775,12 +775,12 @@
                                                                                          • goCallback() : Hurricane::Query
                                                                                          • -
                                                                                          • Grid -: Hurricane::DbU -
                                                                                          • grid() : Hurricane::DbU
                                                                                          • +
                                                                                          • Grid +: Hurricane::DbU +
                                                                                          • GROUND : Hurricane::Net::Type
                                                                                          • @@ -790,7 +790,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x68.html b/hurricane/doc/hurricane/html/functions_0x68.html index eab15a28..785b2470 100644 --- a/hurricane/doc/hurricane/html/functions_0x68.html +++ b/hurricane/doc/hurricane/html/functions_0x68.html @@ -124,7 +124,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x69.html b/hurricane/doc/hurricane/html/functions_0x69.html index 75486945..c30a9b4e 100644 --- a/hurricane/doc/hurricane/html/functions_0x69.html +++ b/hurricane/doc/hurricane/html/functions_0x69.html @@ -226,7 +226,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x6a.html b/hurricane/doc/hurricane/html/functions_0x6a.html index a8f5abd3..13e9d30a 100644 --- a/hurricane/doc/hurricane/html/functions_0x6a.html +++ b/hurricane/doc/hurricane/html/functions_0x6a.html @@ -99,7 +99,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x6b.html b/hurricane/doc/hurricane/html/functions_0x6b.html index 731a79e6..86535e7b 100644 --- a/hurricane/doc/hurricane/html/functions_0x6b.html +++ b/hurricane/doc/hurricane/html/functions_0x6b.html @@ -93,7 +93,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x6c.html b/hurricane/doc/hurricane/html/functions_0x6c.html index 622dfa48..b2e6a953 100644 --- a/hurricane/doc/hurricane/html/functions_0x6c.html +++ b/hurricane/doc/hurricane/html/functions_0x6c.html @@ -105,7 +105,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x6d.html b/hurricane/doc/hurricane/html/functions_0x6d.html index c9b93042..a96cb96f 100644 --- a/hurricane/doc/hurricane/html/functions_0x6d.html +++ b/hurricane/doc/hurricane/html/functions_0x6d.html @@ -129,7 +129,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x6e.html b/hurricane/doc/hurricane/html/functions_0x6e.html index 4a256601..b2fb9b10 100644 --- a/hurricane/doc/hurricane/html/functions_0x6e.html +++ b/hurricane/doc/hurricane/html/functions_0x6e.html @@ -108,7 +108,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x6f.html b/hurricane/doc/hurricane/html/functions_0x6f.html index 76b8f01f..469c73ad 100644 --- a/hurricane/doc/hurricane/html/functions_0x6f.html +++ b/hurricane/doc/hurricane/html/functions_0x6f.html @@ -167,7 +167,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x70.html b/hurricane/doc/hurricane/html/functions_0x70.html index eeb38c8f..d7bfc842 100644 --- a/hurricane/doc/hurricane/html/functions_0x70.html +++ b/hurricane/doc/hurricane/html/functions_0x70.html @@ -142,7 +142,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x71.html b/hurricane/doc/hurricane/html/functions_0x71.html index 82e80a97..c9c9838b 100644 --- a/hurricane/doc/hurricane/html/functions_0x71.html +++ b/hurricane/doc/hurricane/html/functions_0x71.html @@ -99,7 +99,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x72.html b/hurricane/doc/hurricane/html/functions_0x72.html index c1c44ffe..d5945468 100644 --- a/hurricane/doc/hurricane/html/functions_0x72.html +++ b/hurricane/doc/hurricane/html/functions_0x72.html @@ -112,7 +112,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x73.html b/hurricane/doc/hurricane/html/functions_0x73.html index b93d25cc..77128643 100644 --- a/hurricane/doc/hurricane/html/functions_0x73.html +++ b/hurricane/doc/hurricane/html/functions_0x73.html @@ -288,7 +288,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x74.html b/hurricane/doc/hurricane/html/functions_0x74.html index 91dde968..b7a701b0 100644 --- a/hurricane/doc/hurricane/html/functions_0x74.html +++ b/hurricane/doc/hurricane/html/functions_0x74.html @@ -135,7 +135,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x75.html b/hurricane/doc/hurricane/html/functions_0x75.html index 0563886f..df0c1ca5 100644 --- a/hurricane/doc/hurricane/html/functions_0x75.html +++ b/hurricane/doc/hurricane/html/functions_0x75.html @@ -118,7 +118,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x76.html b/hurricane/doc/hurricane/html/functions_0x76.html index 4bb6a75e..19e30b31 100644 --- a/hurricane/doc/hurricane/html/functions_0x76.html +++ b/hurricane/doc/hurricane/html/functions_0x76.html @@ -93,7 +93,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x77.html b/hurricane/doc/hurricane/html/functions_0x77.html index 20555e29..50cacca1 100644 --- a/hurricane/doc/hurricane/html/functions_0x77.html +++ b/hurricane/doc/hurricane/html/functions_0x77.html @@ -102,7 +102,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_0x7e.html b/hurricane/doc/hurricane/html/functions_0x7e.html index ed31e623..b7a85647 100644 --- a/hurricane/doc/hurricane/html/functions_0x7e.html +++ b/hurricane/doc/hurricane/html/functions_0x7e.html @@ -108,7 +108,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_enum.html b/hurricane/doc/hurricane/html/functions_enum.html index cf9d2b87..07bea0fc 100644 --- a/hurricane/doc/hurricane/html/functions_enum.html +++ b/hurricane/doc/hurricane/html/functions_enum.html @@ -81,7 +81,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_eval.html b/hurricane/doc/hurricane/html/functions_eval.html index 9bc9194e..ffc4cefe 100644 --- a/hurricane/doc/hurricane/html/functions_eval.html +++ b/hurricane/doc/hurricane/html/functions_eval.html @@ -315,7 +315,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func.html b/hurricane/doc/hurricane/html/functions_func.html index dcb0f677..61a464ed 100644 --- a/hurricane/doc/hurricane/html/functions_func.html +++ b/hurricane/doc/hurricane/html/functions_func.html @@ -116,7 +116,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x62.html b/hurricane/doc/hurricane/html/functions_func_0x62.html index 2492cc3a..fd37c554 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x62.html +++ b/hurricane/doc/hurricane/html/functions_func_0x62.html @@ -98,7 +98,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x63.html b/hurricane/doc/hurricane/html/functions_func_0x63.html index 8fe78b2e..887d866b 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x63.html +++ b/hurricane/doc/hurricane/html/functions_func_0x63.html @@ -139,7 +139,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x64.html b/hurricane/doc/hurricane/html/functions_func_0x64.html index 6ae04dba..bd69dd12 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x64.html +++ b/hurricane/doc/hurricane/html/functions_func_0x64.html @@ -105,7 +105,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x65.html b/hurricane/doc/hurricane/html/functions_func_0x65.html index 8170e2d1..828f4cd6 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x65.html +++ b/hurricane/doc/hurricane/html/functions_func_0x65.html @@ -101,7 +101,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x66.html b/hurricane/doc/hurricane/html/functions_func_0x66.html index a11c40cb..a58b7300 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x66.html +++ b/hurricane/doc/hurricane/html/functions_func_0x66.html @@ -101,7 +101,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x67.html b/hurricane/doc/hurricane/html/functions_func_0x67.html index 8b900804..257a85cf 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x67.html +++ b/hurricane/doc/hurricane/html/functions_func_0x67.html @@ -782,7 +782,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x68.html b/hurricane/doc/hurricane/html/functions_func_0x68.html index aab67ae9..b9d02f0e 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x68.html +++ b/hurricane/doc/hurricane/html/functions_func_0x68.html @@ -120,7 +120,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x69.html b/hurricane/doc/hurricane/html/functions_func_0x69.html index d5fdc094..d1796c72 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x69.html +++ b/hurricane/doc/hurricane/html/functions_func_0x69.html @@ -202,7 +202,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x6a.html b/hurricane/doc/hurricane/html/functions_func_0x6a.html index 08431191..afcfbbe2 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x6a.html +++ b/hurricane/doc/hurricane/html/functions_func_0x6a.html @@ -98,7 +98,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x6c.html b/hurricane/doc/hurricane/html/functions_func_0x6c.html index db9f1536..5e9f2d75 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x6c.html +++ b/hurricane/doc/hurricane/html/functions_func_0x6c.html @@ -98,7 +98,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x6d.html b/hurricane/doc/hurricane/html/functions_func_0x6d.html index 3d2c199b..34906065 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x6d.html +++ b/hurricane/doc/hurricane/html/functions_func_0x6d.html @@ -115,7 +115,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x6e.html b/hurricane/doc/hurricane/html/functions_func_0x6e.html index 8b5c39b5..a57f529d 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x6e.html +++ b/hurricane/doc/hurricane/html/functions_func_0x6e.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x6f.html b/hurricane/doc/hurricane/html/functions_func_0x6f.html index fde1f732..a23310c7 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x6f.html +++ b/hurricane/doc/hurricane/html/functions_func_0x6f.html @@ -160,7 +160,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x70.html b/hurricane/doc/hurricane/html/functions_func_0x70.html index e85941dc..2d1edc7f 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x70.html +++ b/hurricane/doc/hurricane/html/functions_func_0x70.html @@ -123,7 +123,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x71.html b/hurricane/doc/hurricane/html/functions_func_0x71.html index bd58ecad..bb021eb3 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x71.html +++ b/hurricane/doc/hurricane/html/functions_func_0x71.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x72.html b/hurricane/doc/hurricane/html/functions_func_0x72.html index 6f16ba02..493bc204 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x72.html +++ b/hurricane/doc/hurricane/html/functions_func_0x72.html @@ -111,7 +111,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x73.html b/hurricane/doc/hurricane/html/functions_func_0x73.html index e8d9f6a8..5f359a6d 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x73.html +++ b/hurricane/doc/hurricane/html/functions_func_0x73.html @@ -268,7 +268,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x74.html b/hurricane/doc/hurricane/html/functions_func_0x74.html index 35f41c55..6d6145fb 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x74.html +++ b/hurricane/doc/hurricane/html/functions_func_0x74.html @@ -128,7 +128,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x75.html b/hurricane/doc/hurricane/html/functions_func_0x75.html index 3cc78ecb..8d227d5f 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x75.html +++ b/hurricane/doc/hurricane/html/functions_func_0x75.html @@ -101,7 +101,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x76.html b/hurricane/doc/hurricane/html/functions_func_0x76.html index 529f8411..c86b118f 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x76.html +++ b/hurricane/doc/hurricane/html/functions_func_0x76.html @@ -92,7 +92,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x77.html b/hurricane/doc/hurricane/html/functions_func_0x77.html index 94826abd..5e268276 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x77.html +++ b/hurricane/doc/hurricane/html/functions_func_0x77.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_func_0x7e.html b/hurricane/doc/hurricane/html/functions_func_0x7e.html index 09b6f046..2890d79e 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x7e.html +++ b/hurricane/doc/hurricane/html/functions_func_0x7e.html @@ -107,7 +107,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/functions_type.html b/hurricane/doc/hurricane/html/functions_type.html index f180ad3a..9276b88d 100644 --- a/hurricane/doc/hurricane/html/functions_type.html +++ b/hurricane/doc/hurricane/html/functions_type.html @@ -88,7 +88,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/graph_legend.html b/hurricane/doc/hurricane/html/graph_legend.html index 0128afb7..2639d7cd 100644 --- a/hurricane/doc/hurricane/html/graph_legend.html +++ b/hurricane/doc/hurricane/html/graph_legend.html @@ -109,7 +109,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/group__DbUGroup.html b/hurricane/doc/hurricane/html/group__DbUGroup.html index 84c954fb..233b4169 100644 --- a/hurricane/doc/hurricane/html/group__DbUGroup.html +++ b/hurricane/doc/hurricane/html/group__DbUGroup.html @@ -1242,7 +1242,7 @@ Translators
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/group__Generalities.html b/hurricane/doc/hurricane/html/group__Generalities.html index c9c2ec3f..d3130a49 100644 --- a/hurricane/doc/hurricane/html/group__Generalities.html +++ b/hurricane/doc/hurricane/html/group__Generalities.html @@ -193,7 +193,7 @@ Remarks
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/group__JsonSupport.html b/hurricane/doc/hurricane/html/group__JsonSupport.html index 7ccee5dc..c60487c2 100644 --- a/hurricane/doc/hurricane/html/group__JsonSupport.html +++ b/hurricane/doc/hurricane/html/group__JsonSupport.html @@ -230,7 +230,7 @@ JsonObject Life Cycle
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/group__grpSynthHierarchy.html b/hurricane/doc/hurricane/html/group__grpSynthHierarchy.html index 105b7765..fe501632 100644 --- a/hurricane/doc/hurricane/html/group__grpSynthHierarchy.html +++ b/hurricane/doc/hurricane/html/group__grpSynthHierarchy.html @@ -236,7 +236,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/hierarchy.html b/hurricane/doc/hurricane/html/hierarchy.html index 8994731e..195b9f82 100644 --- a/hurricane/doc/hurricane/html/hierarchy.html +++ b/hurricane/doc/hurricane/html/hierarchy.html @@ -151,7 +151,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/index.html b/hurricane/doc/hurricane/html/index.html index cf26df51..fca25cd4 100644 --- a/hurricane/doc/hurricane/html/index.html +++ b/hurricane/doc/hurricane/html/index.html @@ -49,7 +49,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/modules.html b/hurricane/doc/hurricane/html/modules.html index b46e13e4..ede73dc7 100644 --- a/hurricane/doc/hurricane/html/modules.html +++ b/hurricane/doc/hurricane/html/modules.html @@ -53,7 +53,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/namespaceHurricane.html b/hurricane/doc/hurricane/html/namespaceHurricane.html index 43eb1ee8..d16ef27b 100644 --- a/hurricane/doc/hurricane/html/namespaceHurricane.html +++ b/hurricane/doc/hurricane/html/namespaceHurricane.html @@ -1279,7 +1279,7 @@ Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/namespacemembers.html b/hurricane/doc/hurricane/html/namespacemembers.html index 8ae1f8f7..7191253d 100644 --- a/hurricane/doc/hurricane/html/namespacemembers.html +++ b/hurricane/doc/hurricane/html/namespacemembers.html @@ -315,7 +315,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/namespacemembers_func.html b/hurricane/doc/hurricane/html/namespacemembers_func.html index 7f53f484..717b3905 100644 --- a/hurricane/doc/hurricane/html/namespacemembers_func.html +++ b/hurricane/doc/hurricane/html/namespacemembers_func.html @@ -59,7 +59,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/namespacemembers_type.html b/hurricane/doc/hurricane/html/namespacemembers_type.html index 17dfef96..4f0c8533 100644 --- a/hurricane/doc/hurricane/html/namespacemembers_type.html +++ b/hurricane/doc/hurricane/html/namespacemembers_type.html @@ -312,7 +312,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/namespaces.html b/hurricane/doc/hurricane/html/namespaces.html index 18e8cc45..f8ac1087 100644 --- a/hurricane/doc/hurricane/html/namespaces.html +++ b/hurricane/doc/hurricane/html/namespaces.html @@ -56,7 +56,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/html/structHurricane_1_1Entity_1_1CompareById.html b/hurricane/doc/hurricane/html/structHurricane_1_1Entity_1_1CompareById.html index 12f9e421..0cd3b78e 100644 --- a/hurricane/doc/hurricane/html/structHurricane_1_1Entity_1_1CompareById.html +++ b/hurricane/doc/hurricane/html/structHurricane_1_1Entity_1_1CompareById.html @@ -83,7 +83,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1DebugSession.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1DebugSession.tex index a8e73d95..ea1966b7 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1DebugSession.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1DebugSession.tex @@ -47,13 +47,10 @@ Kite &{\ttfamily 150} &{\ttfamily 160} \\\cline{1-3} Solstice &{\ttfamily 160} &{\ttfamily 170} \\\cline{1-3} Equinox &{\ttfamily 170} &{\ttfamily 180} \\\cline{1-3} Unicorn &{\ttfamily 180} &{\ttfamily 190} \\\cline{1-3} -\rowcolor{lightgray}\multicolumn{3}{|p{(\linewidth-\tabcolsep*3-\arrayrulewidth*1)*3/3}|}{\cellcolor{lightgray}{\bf {\bfseries C++} / C\-H\-A\-M\-S }}\\\cline{1-3} +\rowcolor{lightgray}\multicolumn{3}{|p{(\linewidth-\tabcolsep*3-\arrayrulewidth*1)*3/3}|}{\cellcolor{lightgray}{\bf {\bfseries C++} / Analog }}\\\cline{1-3} \rowcolor{lightgray}{\bf {\bfseries Tool/\-Library} }&{\bf {\bfseries Minimum} }&{\bf {\bfseries Maximum} }\\\cline{1-3} -Hurricane\-A\-M\-S &{\ttfamily 500} &{\ttfamily 510} \\\cline{1-3} -ams\-Core &{\ttfamily 510} &{\ttfamily 520} \\\cline{1-3} -Pharos &{\ttfamily 520} &{\ttfamily 530} \\\cline{1-3} -Isis &{\ttfamily 530} &{\ttfamily 540} \\\cline{1-3} -Horus &{\ttfamily 530} &{\ttfamily 540} \\\cline{1-3} +Analog &{\ttfamily 500} &{\ttfamily 510} \\\cline{1-3} +oroshi &{\ttfamily 510} &{\ttfamily 520} \\\cline{1-3} \rowcolor{lightgray}\multicolumn{3}{|p{(\linewidth-\tabcolsep*3-\arrayrulewidth*1)*3/3}|}{\cellcolor{lightgray}{\bf {\bfseries Python} Wrappers / Coriolis }}\\\cline{1-3} \rowcolor{lightgray}{\bf {\bfseries Tool/\-Library} }&{\bf {\bfseries Minimum} }&{\bf {\bfseries Maximum} }\\\cline{1-3} Isobar &{\ttfamily 20} &{\ttfamily 30} \\\cline{1-3} @@ -66,13 +63,10 @@ Kite/\-Python &{\ttfamily 40} &{\ttfamily 42} \\\cline{1-3} Solstice/\-Python &{\ttfamily 42} &{\ttfamily 44} \\\cline{1-3} Equinox/\-Python &{\ttfamily 44} &{\ttfamily 46} \\\cline{1-3} Unicorn/\-Python &{\ttfamily 46} &{\ttfamily 48} \\\cline{1-3} -\rowcolor{lightgray}\multicolumn{3}{|p{(\linewidth-\tabcolsep*3-\arrayrulewidth*1)*3/3}|}{\cellcolor{lightgray}{\bf {\bfseries Python} Wrappers / C\-H\-A\-M\-S }}\\\cline{1-3} +\rowcolor{lightgray}\multicolumn{3}{|p{(\linewidth-\tabcolsep*3-\arrayrulewidth*1)*3/3}|}{\cellcolor{lightgray}{\bf {\bfseries Python} Wrappers / Analog }}\\\cline{1-3} \rowcolor{lightgray}{\bf {\bfseries Tool/\-Library} }&{\bf {\bfseries Minimum} }&{\bf {\bfseries Maximum} }\\\cline{1-3} -isobar\-A\-M\-S &{\ttfamily 48} &{\ttfamily 50} \\\cline{1-3} -ams\-Core &{\ttfamily 50} &{\ttfamily 51} \\\cline{1-3} -Pharos/\-Python &{\ttfamily 52} &{\ttfamily 60} \\\cline{1-3} -Isis/\-Python &{\ttfamily 60} &{\ttfamily 61} \\\cline{1-3} -Horus/\-Python &{\ttfamily 61} &{\ttfamily 62} \\\cline{1-3} +Analog &{\ttfamily 48} &{\ttfamily 50} \\\cline{1-3} +oroshi/ÿthon &{\ttfamily 50} &{\ttfamily 51} \\\cline{1-3} \rowcolor{lightgray}\multicolumn{3}{|p{(\linewidth-\tabcolsep*3-\arrayrulewidth*1)*3/3}|}{\cellcolor{lightgray}{\bf {\bfseries Special} levels }}\\\cline{1-3} Determinim check &{\ttfamily 9000} &{\ttfamily 9001} \\\cline{1-3} J\-S\-O\-N parsers/drivers&{\ttfamily 19} &{\ttfamily 20} \\\cline{1-3} diff --git a/hurricane/doc/hurricane/latex/refman.tex b/hurricane/doc/hurricane/latex/refman.tex index 7f14233a..c7fd53e5 100644 --- a/hurricane/doc/hurricane/latex/refman.tex +++ b/hurricane/doc/hurricane/latex/refman.tex @@ -34,7 +34,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.5}\\ \vspace*{0.5cm} - {\small Sat Aug 18 2018 22:39:36}\\ + {\small Mon Oct 1 2018 14:29:05}\\ \end{center} \end{titlepage} diff --git a/hurricane/doc/viewer/html/CellImage_8h_source.html b/hurricane/doc/viewer/html/CellImage_8h_source.html index 30a1bade..c0cf5ab7 100644 --- a/hurricane/doc/viewer/html/CellImage_8h_source.html +++ b/hurricane/doc/viewer/html/CellImage_8h_source.html @@ -150,7 +150,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/CellPrinter_8h_source.html b/hurricane/doc/viewer/html/CellPrinter_8h_source.html index 2c8f77cc..d7849f4a 100644 --- a/hurricane/doc/viewer/html/CellPrinter_8h_source.html +++ b/hurricane/doc/viewer/html/CellPrinter_8h_source.html @@ -174,7 +174,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/CellViewer_8h_source.html b/hurricane/doc/viewer/html/CellViewer_8h_source.html index eaa8295b..ea49a00d 100644 --- a/hurricane/doc/viewer/html/CellViewer_8h_source.html +++ b/hurricane/doc/viewer/html/CellViewer_8h_source.html @@ -301,7 +301,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/CellWidget_8h_source.html b/hurricane/doc/viewer/html/CellWidget_8h_source.html index 15331dd6..7a685e53 100644 --- a/hurricane/doc/viewer/html/CellWidget_8h_source.html +++ b/hurricane/doc/viewer/html/CellWidget_8h_source.html @@ -1536,7 +1536,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/DisplayStyle_8h_source.html b/hurricane/doc/viewer/html/DisplayStyle_8h_source.html index 3a3f1499..ad0f3a0e 100644 --- a/hurricane/doc/viewer/html/DisplayStyle_8h_source.html +++ b/hurricane/doc/viewer/html/DisplayStyle_8h_source.html @@ -417,7 +417,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/Graphics_8h_source.html b/hurricane/doc/viewer/html/Graphics_8h_source.html index d763a206..1140219f 100644 --- a/hurricane/doc/viewer/html/Graphics_8h_source.html +++ b/hurricane/doc/viewer/html/Graphics_8h_source.html @@ -269,7 +269,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/InspectorWidget_8h_source.html b/hurricane/doc/viewer/html/InspectorWidget_8h_source.html index cb27ded2..590d86b5 100644 --- a/hurricane/doc/viewer/html/InspectorWidget_8h_source.html +++ b/hurricane/doc/viewer/html/InspectorWidget_8h_source.html @@ -163,7 +163,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/annotated.html b/hurricane/doc/viewer/html/annotated.html index 40df3443..bc398c21 100644 --- a/hurricane/doc/viewer/html/annotated.html +++ b/hurricane/doc/viewer/html/annotated.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellImage-members.html b/hurricane/doc/viewer/html/classHurricane_1_1CellImage-members.html index e5ba9a3f..ca718275 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellImage-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellImage-members.html @@ -66,7 +66,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellImage.html b/hurricane/doc/viewer/html/classHurricane_1_1CellImage.html index d7b5db71..adf2b499 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellImage.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellImage.html @@ -287,7 +287,7 @@ ShowScale: display a false color scale at the bottom of the image. Useful if you
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter-members.html b/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter-members.html index 5f2ed93c..31bd8101 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter-members.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter.html b/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter.html index ced68586..ffbdd223 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter.html @@ -263,7 +263,7 @@ Implementation details
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellViewer-members.html b/hurricane/doc/viewer/html/classHurricane_1_1CellViewer-members.html index 1511e198..98531231 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellViewer-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellViewer-members.html @@ -76,7 +76,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellViewer.html b/hurricane/doc/viewer/html/classHurricane_1_1CellViewer.html index 51090026..4182c8e6 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellViewer.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellViewer.html @@ -484,7 +484,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellWidget-members.html b/hurricane/doc/viewer/html/classHurricane_1_1CellWidget-members.html index b8112e86..e33e170c 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellWidget-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellWidget-members.html @@ -62,7 +62,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellWidget.html b/hurricane/doc/viewer/html/classHurricane_1_1CellWidget.html index bb72bf93..c4499894 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellWidget.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellWidget.html @@ -104,7 +104,7 @@ Public Types
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle-members.html b/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle-members.html index ad3a0af2..acf6421a 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle-members.html @@ -78,7 +78,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle.html b/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle.html index 2429ac71..1fd58623 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle.html @@ -590,7 +590,7 @@ Static Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1Graphics-members.html b/hurricane/doc/viewer/html/classHurricane_1_1Graphics-members.html index 9d526d7b..87dda62d 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1Graphics-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1Graphics-members.html @@ -78,7 +78,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1Graphics.html b/hurricane/doc/viewer/html/classHurricane_1_1Graphics.html index 167cb833..ae413aad 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1Graphics.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1Graphics.html @@ -643,7 +643,7 @@ Static Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget-members.html b/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget-members.html index ed7e5058..470643e2 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget-members.html @@ -62,7 +62,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget.html b/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget.html index c7cff23b..34b1dc92 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget.html @@ -141,7 +141,7 @@ Inspector Memory Management
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/classes.html b/hurricane/doc/viewer/html/classes.html index 8e2dfd05..48182393 100644 --- a/hurricane/doc/viewer/html/classes.html +++ b/hurricane/doc/viewer/html/classes.html @@ -70,7 +70,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/dir_8411fe88106249809ce887a3285ac2b5.html b/hurricane/doc/viewer/html/dir_8411fe88106249809ce887a3285ac2b5.html index 55d78ee4..caae1231 100644 --- a/hurricane/doc/viewer/html/dir_8411fe88106249809ce887a3285ac2b5.html +++ b/hurricane/doc/viewer/html/dir_8411fe88106249809ce887a3285ac2b5.html @@ -62,7 +62,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/dir_d17b4bff01b823ea10853862cd33daf4.html b/hurricane/doc/viewer/html/dir_d17b4bff01b823ea10853862cd33daf4.html index 4f541353..622d5fad 100644 --- a/hurricane/doc/viewer/html/dir_d17b4bff01b823ea10853862cd33daf4.html +++ b/hurricane/doc/viewer/html/dir_d17b4bff01b823ea10853862cd33daf4.html @@ -62,7 +62,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/dir_dadde0d0ee7514f4b9d838e8db4a8c39.html b/hurricane/doc/viewer/html/dir_dadde0d0ee7514f4b9d838e8db4a8c39.html index 8f6b545b..f7f12560 100644 --- a/hurricane/doc/viewer/html/dir_dadde0d0ee7514f4b9d838e8db4a8c39.html +++ b/hurricane/doc/viewer/html/dir_dadde0d0ee7514f4b9d838e8db4a8c39.html @@ -62,7 +62,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/dir_e61ba495830392da74308d37dc1d0e01.html b/hurricane/doc/viewer/html/dir_e61ba495830392da74308d37dc1d0e01.html index 81dfc485..1541fccb 100644 --- a/hurricane/doc/viewer/html/dir_e61ba495830392da74308d37dc1d0e01.html +++ b/hurricane/doc/viewer/html/dir_e61ba495830392da74308d37dc1d0e01.html @@ -74,7 +74,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/files.html b/hurricane/doc/viewer/html/files.html index 2edc25ea..837ede8b 100644 --- a/hurricane/doc/viewer/html/files.html +++ b/hurricane/doc/viewer/html/files.html @@ -61,7 +61,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/functions.html b/hurricane/doc/viewer/html/functions.html index 5bf2a84c..8be4d3ad 100644 --- a/hurricane/doc/viewer/html/functions.html +++ b/hurricane/doc/viewer/html/functions.html @@ -318,7 +318,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/functions_enum.html b/hurricane/doc/viewer/html/functions_enum.html index ffa7cf7d..3fdfad6c 100644 --- a/hurricane/doc/viewer/html/functions_enum.html +++ b/hurricane/doc/viewer/html/functions_enum.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/functions_eval.html b/hurricane/doc/viewer/html/functions_eval.html index ddc319cb..b5c31fcd 100644 --- a/hurricane/doc/viewer/html/functions_eval.html +++ b/hurricane/doc/viewer/html/functions_eval.html @@ -67,7 +67,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/functions_func.html b/hurricane/doc/viewer/html/functions_func.html index 9edfdb52..8b48933e 100644 --- a/hurricane/doc/viewer/html/functions_func.html +++ b/hurricane/doc/viewer/html/functions_func.html @@ -303,7 +303,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/graph_legend.html b/hurricane/doc/viewer/html/graph_legend.html index 038806aa..4c163ab1 100644 --- a/hurricane/doc/viewer/html/graph_legend.html +++ b/hurricane/doc/viewer/html/graph_legend.html @@ -109,7 +109,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/group__graphicsGroup.html b/hurricane/doc/viewer/html/group__graphicsGroup.html index 28067fde..3f72f6aa 100644 --- a/hurricane/doc/viewer/html/group__graphicsGroup.html +++ b/hurricane/doc/viewer/html/group__graphicsGroup.html @@ -99,7 +99,7 @@ General Structure of the Graphics Object
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/index.html b/hurricane/doc/viewer/html/index.html index c7fdf71b..554d196d 100644 --- a/hurricane/doc/viewer/html/index.html +++ b/hurricane/doc/viewer/html/index.html @@ -45,7 +45,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/modules.html b/hurricane/doc/viewer/html/modules.html index 99d0a38a..d184b366 100644 --- a/hurricane/doc/viewer/html/modules.html +++ b/hurricane/doc/viewer/html/modules.html @@ -54,7 +54,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/html/pages.html b/hurricane/doc/viewer/html/pages.html index 36dd6cd0..3ebb6415 100644 --- a/hurricane/doc/viewer/html/pages.html +++ b/hurricane/doc/viewer/html/pages.html @@ -50,7 +50,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/hurricane/doc/viewer/latex/refman.tex b/hurricane/doc/viewer/latex/refman.tex index 97736790..f036076d 100644 --- a/hurricane/doc/viewer/latex/refman.tex +++ b/hurricane/doc/viewer/latex/refman.tex @@ -34,7 +34,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.5}\\ \vspace*{0.5cm} - {\small Sat Aug 18 2018 22:39:36}\\ + {\small Mon Oct 1 2018 14:29:05}\\ \end{center} \end{titlepage} diff --git a/hurricane/src/CMakeLists.txt b/hurricane/src/CMakeLists.txt index 908d9884..4b45f584 100644 --- a/hurricane/src/CMakeLists.txt +++ b/hurricane/src/CMakeLists.txt @@ -1,3 +1,4 @@ add_subdirectory(hurricane) add_subdirectory(viewer) add_subdirectory(isobar) +add_subdirectory(analog) diff --git a/hurricane/src/analog/AnalogCellExtension.cpp b/hurricane/src/analog/AnalogCellExtension.cpp new file mode 100644 index 00000000..8a463f08 --- /dev/null +++ b/hurricane/src/analog/AnalogCellExtension.cpp @@ -0,0 +1,97 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2010-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis, Eric Lao | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./AnalogCellExtension.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/Net.h" +#include "hurricane/Technology.h" +#include "hurricane/DataBase.h" +#include "hurricane/RegularLayer.h" +#include "hurricane/Horizontal.h" +#include "hurricane/Name.h" +#include "hurricane/Cell.h" +#include "hurricane/analog/AnalogCellExtension.h" + + +namespace Analog { + + using namespace std; + using namespace Hurricane; + + + AnalogData::~AnalogData () + { } + + + Record* AnalogData::_getRecord () const + { + Record* record = new Record ( getString(this) ); + return record; + } + + + template<> + Name StandardPrivateProperty::_name = "Analog::CellExtension"; + + + AnalogCellExtensionDatas::AnalogCellExtensionDatas () + : _params() + , _datas () + { } + + + AnalogCellExtensionDatas::~AnalogCellExtensionDatas () + { + for ( AnalogData* data : _datas ) delete data; + } + + + void AnalogCellExtension::addParameter ( Cell* cell, const Name& name, boost::any value ) + { + Extension* extension = Extension::get(cell); + if (not extension) { + extension = Extension::create(); + cell->put( extension ); + } + extension->getValue()._params[ name ] = value; + } + + + boost::any& AnalogCellExtension::getParameter ( const Cell* cell, const Name& name, bool& found ) + { + static boost::any empty; + + found = false; + + Extension* extension = Extension::get( cell ); + if (not extension) return empty; + + map::iterator it = extension->getValue()._params.find( name ); + if (it == extension->getValue()._params.end()) return empty; + + found = true; + return (*it).second; + } + + + map* AnalogCellExtension::getParameters ( const Cell* cell ) + { + Extension* extension = Extension::get( cell ); + if (not extension) return NULL; + + return &(extension->getValue()._params); + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/BJT.cpp b/hurricane/src/analog/BJT.cpp new file mode 100644 index 00000000..b996afdb --- /dev/null +++ b/hurricane/src/analog/BJT.cpp @@ -0,0 +1,112 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Stephanie Youssef | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./BJT.cpp" | +// +-----------------------------------------------------------------+ + +#include +#include +#include "hurricane/Library.h" +#include "hurricane/Name.h" +#include "hurricane/UpdateSession.h" +#include "hurricane/analog/BJT.h" +#include "hurricane/analog/BJTArguments.h" + + +namespace Analog { + + using namespace Hurricane; + + + const Name BJT::_bjt ( "BJT" ); + + + BJT::BJT ( Library* library, const Name& name, const Type& type ) + : Super(library,name,type) + , _n (NULL) + , _m (NULL) + , _externalDummy(NULL) + { } + + + BJT* BJT::create ( Library* library, const Name& name, const Type& type ) + { + preCreate( name ); + UpdateSession::open(); + BJT* bjt = new BJT( library, name, type ); + bjt->_postCreate( name ); + bjt->createConnections(); + UpdateSession::close(); + return bjt; + } + + + void BJT::_postCreate ( const Name& deviceName ) + { + Super::_postCreate( deviceName ); + + Choices externalDummy; + externalDummy << ""; + _externalDummy = addMCheckBoxParameter( "External Dummy", externalDummy ); + + _m = addFormFactorParameter( "M", 1, 10 ); + _n = addFormFactorParameter( "N", 1, 10 ); + } + + + void BJT::createConnections () + { + Net* e = Net::create( this, Name("E") ); + e->setExternal( true ); + + Net* b = Net::create( this, Name("B") ); + b->setExternal( true ); + + Net* c = Net::create( this, Name("C") ); + c->setExternal( true ); + } + + + Name BJT::getDeviceName () const + { return _bjt; } + + + Arguments* BJT::getArguments () + { + bool isNPN = (getType() == BJTFamily::NPN); + bool isExternalDummy = (_externalDummy->getValue() == 1); + + BJTArguments* bjtArgs = new BJTArguments( isNPN, isExternalDummy, _m->getValue(), _n->getValue() ); + return bjtArgs; + } + + + unsigned int BJT::getM () const + { return _m->getValue(); } + + + unsigned int BJT::getN () const + { return _n->getValue(); } + + + void BJT::setExternalDummy ( const bool externalDummy ) + { + if (externalDummy) _externalDummy->setValue(1); + else _externalDummy->setValue(0); + } + + + bool BJT::getExternalDummy () const + { return (_externalDummy->getValue() == 1); } + + +} // Analog namespace. diff --git a/hurricane/src/analog/BJTArguments.cpp b/hurricane/src/analog/BJTArguments.cpp new file mode 100644 index 00000000..1ed6fe01 --- /dev/null +++ b/hurricane/src/analog/BJTArguments.cpp @@ -0,0 +1,45 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Stephanie Youssef | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./BJTArguments.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/BJTArguments.h" + + +namespace Analog { + + + BJTArguments::BJTArguments ( bool isNPN, bool isExternalDummy, unsigned m, unsigned n ) + : Super() + , _isNPN (isNPN) + , _isExternalDummy(isExternalDummy) + , _m (m) + , _n (n) + { } + + + BJTArguments::BJTArguments ( const BJTArguments& bjtArgs ) + : Super() + , _isNPN (bjtArgs.isNPN()) + , _isExternalDummy(bjtArgs.isExternalDummy()) + , _m (bjtArgs.getM()) + , _n (bjtArgs.getN()) + { } + + + BJTArguments* BJTArguments::getClone () + { return new BJTArguments( *this ); } + + +} // Analog namespace. diff --git a/hurricane/src/analog/BJTFamily.cpp b/hurricane/src/analog/BJTFamily.cpp new file mode 100644 index 00000000..ed3e4bd1 --- /dev/null +++ b/hurricane/src/analog/BJTFamily.cpp @@ -0,0 +1,34 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Stephanie Youssef | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./BJTFamily.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/Library.h" +#include "hurricane/Name.h" +#include "hurricane/analog/BJTFamily.h" + + +namespace Analog { + + using namespace Hurricane; + + + BJTFamily::BJTFamily ( Library* library, const Name& name, const Type& type ) + : Super(library,name) + , _type (type) + , _operatorIndex(0) + { } + + +} // Analog namespace. diff --git a/hurricane/src/analog/BJTFamilyNames.cpp b/hurricane/src/analog/BJTFamilyNames.cpp new file mode 100644 index 00000000..954d5395 --- /dev/null +++ b/hurricane/src/analog/BJTFamilyNames.cpp @@ -0,0 +1,28 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Stephanie Youssef | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./BJTFamilyNames.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/BJTFamilyNames.h" + + +namespace Analog { + + + const char* BJTFamilyNames::NPNBJT( "NPN BJT" ); + const char* BJTFamilyNames::PNPBJT( "PNP BJT" ); + + +} // Analog namespace. + diff --git a/hurricane/src/analog/CMakeLists.txt b/hurricane/src/analog/CMakeLists.txt new file mode 100644 index 00000000..dcfcfda5 --- /dev/null +++ b/hurricane/src/analog/CMakeLists.txt @@ -0,0 +1,161 @@ +# -*- mode: CMAKE explicit-buffer-name: "CMakeLists.txt" -*- + +# include ( ${QT_USE_FILE} ) + + include_directories ( ${HURRICANE_SOURCE_DIR}/src/hurricane + ${HURRICANE_SOURCE_DIR}/src/isobar + ${HURRICANE_SOURCE_DIR}/src/viewer + ${HURRICANE_SOURCE_DIR}/src/analog + ${CONFIGURATION_INCLUDE_DIR} + ${QtX_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} + ${PYTHON_INCLUDE_PATH} + ) + + set( cpps AnalogCellExtension.cpp + BJTArguments.cpp + BJT.cpp + BJTFamily.cpp + BJTFamilyNames.cpp + CapacitorArguments.cpp + CapacitorFamily.cpp + CapacitorFamilyNames.cpp + Cascode.cpp + ChoiceParameter.cpp + Choices.cpp + CommonDrain.cpp + CommonGatePair.cpp + CommonSourcePair.cpp + CrossCoupledPair.cpp + Device.cpp + DifferentialPair.cpp + LayoutGenerator.cpp + LevelShifter.cpp + MetaCapacitor.cpp + MetaTransistor.cpp + MIMCapacitor.cpp + SimpleCurrentMirror.cpp + TransistorArguments.cpp + Transistor.cpp + TransistorFamily.cpp + TransistorFamilyNames.cpp + TransistorMultiArguments.cpp + TransistorPair.cpp + ) + set( pyCpps PyAnalog.cpp + PyBJTArguments.cpp + PyCapacitorArguments.cpp + PyCapacitorFamily.cpp + PyCapacitorParameter.cpp + PyCascode.cpp + PyChoiceParameter.cpp + PyCommonDrain.cpp + PyCommonGatePair.cpp + PyCommonSourcePair.cpp + PyCrossCoupledPair.cpp + PyDevice.cpp + PyDifferentialPair.cpp + PyFormFactorParameter.cpp + PyLayoutGenerator.cpp + PyLevelShifter.cpp + PyMCheckBoxParameter.cpp + PyMIMCapacitor.cpp + PyParameter.cpp + PySimpleCurrentMirror.cpp + PySpinBoxParameter.cpp + PyStepParameter.cpp + PyTransistorArguments.cpp + PyTransistor.cpp + PyTransistorFamily.cpp + PyTransistorMultiArguments.cpp + PyTransistorPair.cpp + ) + set( includes hurricane/analog/AnalogCellExtension.h + hurricane/analog/Arguments.h + hurricane/analog/BJTArguments.h + hurricane/analog/BJTFamily.h + hurricane/analog/BJTFamilyNames.h + hurricane/analog/BJT.h + hurricane/analog/CapacitorArguments.h + hurricane/analog/CapacitorFamily.h + hurricane/analog/CapacitorFamilyNames.h + hurricane/analog/CapacitorParameter.h + hurricane/analog/Cascode.h + hurricane/analog/ChoiceParameter.h + hurricane/analog/Choices.h + hurricane/analog/CommonDrain.h + hurricane/analog/CommonGate.h + hurricane/analog/CommonGatePair.h + hurricane/analog/CommonSourcePair.h + hurricane/analog/CrossCoupledPair.h + hurricane/analog/Device.h + hurricane/analog/DifferentialPair.h + hurricane/analog/FormFactorParameter.h + hurricane/analog/LayoutGenerator.h + hurricane/analog/LevelShifter.h + hurricane/analog/MCheckBoxParameter.h + hurricane/analog/MetaCapacitor.h + hurricane/analog/MetaTransistor.h + hurricane/analog/MIMCapacitor.h + hurricane/analog/Parameter.h + hurricane/analog/SimpleCurrentMirror.h + hurricane/analog/SpinBoxParameter.h + hurricane/analog/StepParameter.h + hurricane/analog/TransistorArguments.h + hurricane/analog/TransistorFamily.h + hurricane/analog/TransistorFamilyNames.h + hurricane/analog/Transistor.h + hurricane/analog/TransistorMultiArguments.h + hurricane/analog/TransistorPair.h + ) + set( pyIncludes hurricane/analog/PyBJTArguments.h + hurricane/analog/PyCapacitorArguments.h + hurricane/analog/PyCapacitorFamily.h + hurricane/analog/PyCapacitorParameter.h + hurricane/analog/PyCascode.h + hurricane/analog/PyChoiceParameter.h + hurricane/analog/PyCommonDrain.h + hurricane/analog/PyCommonGatePair.h + hurricane/analog/PyCommonSourcePair.h + hurricane/analog/PyCrossCoupledPair.h + hurricane/analog/PyDevice.h + hurricane/analog/PyDifferentialPair.h + hurricane/analog/PyFormFactorParameter.h + hurricane/analog/PyLayoutGenerator.h + hurricane/analog/PyLevelShifter.h + hurricane/analog/PyMCheckBoxParameter.h + hurricane/analog/PyMIMCapacitor.h + hurricane/analog/PyParameter.h + hurricane/analog/PySimpleCurrentMirror.h + hurricane/analog/PySpinBoxParameter.h + hurricane/analog/PyStepParameter.h + hurricane/analog/PyTransistorArguments.h + hurricane/analog/PyTransistorFamily.h + hurricane/analog/PyTransistor.h + hurricane/analog/PyTransistorMultiArguments.h + hurricane/analog/PyTransistorPair.h + ) + + set( depLibs viewer + isobar + hurricane + ${UTILITIES_LIBRARY} + ${CONFIGURATION_LIBRARY} + ${Boost_LIBRARIES} + ${QtX_LIBRARIES} + ) + + add_library( analog ${cpps} ${pyCpps} ) + set_target_properties( analog PROPERTIES VERSION 1.0 SOVERSION 1 ) + target_link_libraries( analog ${depLibs} ) + + add_python_module( "${pyCpps}" + "${pyIncludes}" + "Do_not_generate_C_library" + Analog + "analog;${depLibs}" + include/coriolis2/hurricane/analog + ) + + install( FILES ${includes} DESTINATION include/coriolis2/hurricane/analog ) + install( TARGETS analog DESTINATION lib${LIB_SUFFIX} ) diff --git a/hurricane/src/analog/CapacitorArguments.cpp b/hurricane/src/analog/CapacitorArguments.cpp new file mode 100644 index 00000000..d2766074 --- /dev/null +++ b/hurricane/src/analog/CapacitorArguments.cpp @@ -0,0 +1,44 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./CapacitorArguments.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/CapacitorArguments.h" + +namespace Analog { + + + CapacitorArguments::CapacitorArguments ( bool isMIM, bool isPIP, bool isMOM, double c ) + : Super() + , _isMIM(isMIM) + , _isPIP(isPIP) + , _isMOM(isMOM) + , _c (c) + { } + + + CapacitorArguments::CapacitorArguments(const CapacitorArguments &cArgs) + : Super() + , _isMIM(cArgs.isMIM()) + , _isPIP(cArgs.isPIP()) + , _isMOM(cArgs.isMOM()) + , _c (cArgs.getC()) + { } + + + CapacitorArguments* CapacitorArguments::getClone () + { return new CapacitorArguments( *this ); } + + +} // Analog namespace. diff --git a/hurricane/src/analog/CapacitorFamily.cpp b/hurricane/src/analog/CapacitorFamily.cpp new file mode 100644 index 00000000..c8cc0c6f --- /dev/null +++ b/hurricane/src/analog/CapacitorFamily.cpp @@ -0,0 +1,49 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./CapacitorFamily.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/MetaCapacitor.h" +#include "hurricane/analog/CapacitorFamily.h" + +namespace Analog { + + + CapacitorFamily::CapacitorFamily ( Library* library, const Name& name, const CapacitorFamily::Type& type ) + : Super(library,name) + , _type (type) + , _referenceCapacitor(NULL) + , _operatorIndex (0) + , _row (0) + { } + + + void CapacitorFamily::setReferenceCapacitor ( const Name& referenceCapacitorName ) + { + Instance* instance = getInstance( referenceCapacitorName ); + if (not instance) + throw Error( "CapacitorFamily::setReferenceCapacitor(): No reference instance \"%s\"." + , getString(referenceCapacitorName).c_str() ); + + Cell* cell = instance->getMasterCell(); + MetaCapacitor* metaCapacitor = dynamic_cast( cell ); + if (not metaCapacitor) + throw Error( "CapacitorFamily::setReferenceCapacitor(): Bad type for reference capacitor \"%s\"." + , getString(referenceCapacitorName).c_str() ); + + _referenceCapacitor = metaCapacitor; + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/CapacitorFamilyNames.cpp b/hurricane/src/analog/CapacitorFamilyNames.cpp new file mode 100644 index 00000000..ece28285 --- /dev/null +++ b/hurricane/src/analog/CapacitorFamilyNames.cpp @@ -0,0 +1,28 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./CapacitorFamilyNames.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/CapacitorFamilyNames.h" + + +namespace Analog { + + + const char* CapacitorFamilyNames::PIPCapacitor ( "PIP Capacitor" ); + const char* CapacitorFamilyNames::MIMCapacitor ( "MIM Capacitor" ); + const char* CapacitorFamilyNames::MOMCapacitor ( "MOM Capacitor" ); + + +} // Analog namespace. diff --git a/hurricane/src/analog/Cascode.cpp b/hurricane/src/analog/Cascode.cpp new file mode 100644 index 00000000..b562339f --- /dev/null +++ b/hurricane/src/analog/Cascode.cpp @@ -0,0 +1,111 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./Cascode.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include "hurricane/UpdateSession.h" +#include "hurricane/analog/Cascode.h" + +namespace Analog { + + using namespace std; + + const Name Cascode::_cBulkConnectedName ("CascodeBulkConnected"); + const Name Cascode::_cBulkUnconnectedName ("CascodeBulkUnconnected"); + + + Cascode::Cascode ( Library* library, const Name& name, const Type& type ) + : Super(library,name,type) + { } + + + Cascode* Cascode::create ( Library* library, const Name& name, const Type& type, bool bulkConnected ) + { + Name deviceName = (bulkConnected) ? _cBulkConnectedName : _cBulkUnconnectedName; + preCreate(deviceName); + + UpdateSession::open(); + Cascode* dp = new Cascode(library,name,type); + dp->_postCreate (deviceName); + dp->createConnections(bulkConnected); + dp->setTerminal( true ); + UpdateSession::close(); + return dp; + } + + + void Cascode::createConnections ( bool bulkConnected ) + { + Net* d1 = Net::create(this, Name("D1")); + d1->setExternal(true); + + Net* d2 = Net::create(this, Name("D2")); + d2->setExternal(true); + + Net* g1 = Net::create(this, Name("G1")); + g1->setExternal(true); + + Net* g2 = Net::create(this, Name("G2")); + g2->setExternal(true); + + Net* s1 = Net::create(this, Name("S1")); + s1->setExternal(true); + + Net* s2 = Net::create(this, Name("S2")); + s2->setExternal(true); + + _m1 = MetaTransistor::create(getSubDevicesLibrary(), Name("M1")); + Instance* m1Ins = Instance::create(this, Name("M1Instance"), _m1); + _m2 = MetaTransistor::create(getSubDevicesLibrary(), Name("M2")); + Instance* m2Ins = Instance::create(this, Name("M2Instance"), _m2); + + Plug* mt1SPlug = m1Ins->getPlug(_m1->getSource()); + mt1SPlug->setNet(s1); + Plug* mt2SPlug = m2Ins->getPlug(_m2->getSource()); + mt2SPlug->setNet(s2); + Plug* mt1DPlug = m1Ins->getPlug(_m1->getDrain()); + mt1DPlug->setNet(d1); + Plug* mt2DPlug = m2Ins->getPlug(_m2->getDrain()); + mt2DPlug->setNet(d2); + Plug* mt1GPlug = m1Ins->getPlug(_m1->getGate()); + mt1GPlug->setNet(g1); + Plug* mt2GPlug = m2Ins->getPlug(_m2->getGate()); + mt2GPlug->setNet(g2); + + if (!bulkConnected) { + Net* b = Net::create(this, Name("B")); + b->setExternal(true); + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(b); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(b); + } else { + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(s1); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(s2); + } + + setReferenceTransistor(_m1); + } + + + Name Cascode::getDeviceName () const + { + return (isBulkConnected()) ? _cBulkConnectedName : _cBulkUnconnectedName; + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/ChoiceParameter.cpp b/hurricane/src/analog/ChoiceParameter.cpp new file mode 100644 index 00000000..b413285d --- /dev/null +++ b/hurricane/src/analog/ChoiceParameter.cpp @@ -0,0 +1,43 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./ChoiceParameter.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include "hurricane/analog/ChoiceParameter.h" + + +namespace Analog { + + using namespace std; + + + void ChoiceParameter::setValue ( const string& value ) + { + unsigned index = _choices.findIndexFor( value ); + _value = index; + } + + + string ChoiceParameter::getValue () const + { + if (_value >= _choices._values.size()) { + cerr << "[WARNING] ChoiceParameter::getValue(): \"value\" is out of choices size." << endl; + return ""; + } + return _choices._values[ _value ]; + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/Choices.cpp b/hurricane/src/analog/Choices.cpp new file mode 100644 index 00000000..28af6b5d --- /dev/null +++ b/hurricane/src/analog/Choices.cpp @@ -0,0 +1,58 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./Choices.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include "hurricane/Error.h" +#include "hurricane/analog/Choices.h" + + +namespace Analog { + + using namespace Hurricane; + + + Choices::Choices () + : _values() + { } + + + Choices::Choices ( const Choices& choices ) + : _values(choices._values) + { } + + + Choices& Choices::operator<< ( const string& choice ) + { + Values::iterator it = find( _values.begin(), _values.end(), choice ); + if (it == _values.end()) _values.push_back(choice); + else + throw Error ( "Choices::operator<<(): The choice \"%s\" is already a member of choices." + , choice.c_str() ); + return *this; + } + + + unsigned int Choices::findIndexFor ( const string& choice ) const + { + Values::const_iterator it = find( _values.begin(), _values.end(), choice ); + if (it != _values.end()) return it - _values.begin(); + + throw Error( "Choices::findIndexFor(): Entry \"%s\" doesn\'t exists in choices." + , choice.c_str() ); + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/CommonDrain.cpp b/hurricane/src/analog/CommonDrain.cpp new file mode 100644 index 00000000..d3056aed --- /dev/null +++ b/hurricane/src/analog/CommonDrain.cpp @@ -0,0 +1,113 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./CommonDrain.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include "hurricane/UpdateSession.h" +#include "hurricane/analog/CommonDrain.h" + +namespace Analog { + + using namespace std; + + + const Name CommonDrain::_cdBulkConnectedName ("CommonDrainBulkConnected"); + const Name CommonDrain::_cdBulkUnconnectedName("CommonDrainBulkUnconnected"); + + + CommonDrain::CommonDrain ( Library* library, const Name& name, const Type& type ) + : Super(library,name,type) + { } + + + CommonDrain* CommonDrain::create ( Library* library + , const Name& name + , const Type& type + , bool bulkConnected ) + { + Name deviceName = (bulkConnected) ? _cdBulkConnectedName : _cdBulkUnconnectedName; + preCreate(deviceName); + + UpdateSession::open(); + CommonDrain* dp = new CommonDrain(library,name,type); + dp->_postCreate (deviceName); + dp->createConnections(bulkConnected); + dp->setTerminal( true ); + UpdateSession::close(); + return dp; + } + + + void CommonDrain::createConnections ( bool bulkConnected ) + { + Net* d12 = Net::create(this, Name("D12")); + d12->setExternal(true); + + Net* g1 = Net::create(this, Name("G1")); + g1->setExternal(true); + + Net* g2 = Net::create(this, Name("G2")); + g2->setExternal(true); + + Net* s1 = Net::create(this, Name("S1")); + s1->setExternal(true); + + Net* s2 = Net::create(this, Name("S2")); + s2->setExternal(true); + + + _m1 = MetaTransistor::create(getSubDevicesLibrary(), Name("M1")); + Instance* m1Ins = Instance::create(this, Name("M1Instance"), _m1); + _m2 = MetaTransistor::create(getSubDevicesLibrary(), Name("M2")); + Instance* m2Ins = Instance::create(this, Name("M2Instance"), _m2); + + Plug* mt1SPlug = m1Ins->getPlug(_m1->getSource()); + mt1SPlug->setNet(s1); + Plug* mt2SPlug = m2Ins->getPlug(_m2->getSource()); + mt2SPlug->setNet(s2); + Plug* mt1DPlug = m1Ins->getPlug(_m1->getDrain()); + mt1DPlug->setNet(d12); + Plug* mt2DPlug = m2Ins->getPlug(_m2->getDrain()); + mt2DPlug->setNet(d12); + Plug* mt1GPlug = m1Ins->getPlug(_m1->getGate()); + mt1GPlug->setNet(g1); + Plug* mt2GPlug = m2Ins->getPlug(_m2->getGate()); + mt2GPlug->setNet(g2); + + if (!bulkConnected) { + Net* b = Net::create(this, Name("B")); + b->setExternal(true); + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(b); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(b); + } else { + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(s1); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(s2); + } + + setReferenceTransistor(_m1); + } + + + Name CommonDrain::getDeviceName () const + { + return (isBulkConnected()) ? _cdBulkConnectedName : _cdBulkUnconnectedName; + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/CommonGatePair.cpp b/hurricane/src/analog/CommonGatePair.cpp new file mode 100644 index 00000000..caefbcb0 --- /dev/null +++ b/hurricane/src/analog/CommonGatePair.cpp @@ -0,0 +1,107 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./CommonGatePair.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include "hurricane/UpdateSession.h" +#include "hurricane/analog/CommonGatePair.h" + +namespace Analog { + + + const Name CommonGatePair::_cgBulkConnectedName ("CommonGatePairBulkConnected"); + const Name CommonGatePair::_cgBulkUnconnectedName ("CommonGatePairBulkUnconnected"); + + CommonGatePair::CommonGatePair ( Library* library, const Name& name, const Type& type ) + : Super(library,name,type) + { } + + + CommonGatePair* CommonGatePair::create ( Library* library + , const Name& name + , const Type& type + , bool bulkConnected ) + { + Name deviceName = (bulkConnected) ? _cgBulkConnectedName : _cgBulkUnconnectedName; + preCreate(deviceName); + + UpdateSession::open(); + CommonGatePair* cg = new CommonGatePair(library,name,type); + cg->_postCreate (deviceName); + cg->createConnections(bulkConnected); + cg->setTerminal( true ); + UpdateSession::close(); + return cg; + } + + + void CommonGatePair::createConnections ( bool bulkConnected ) + { + Net* s1 = Net::create(this, Name("S1")); + s1->setExternal(true); + + Net* s2 = Net::create(this, Name("S2")); + s2->setExternal(true); + + Net* d1 = Net::create(this, Name("D1")); + d1->setExternal(true); + + Net* d2 = Net::create(this, Name("D2")); + d2->setExternal(true); + + Net* g12 = Net::create(this, Name("G12")); + g12->setExternal(true); + + _m1 = MetaTransistor::create(getSubDevicesLibrary(), Name("M1")); + Instance* m1Ins = Instance::create(this, Name("M1Instance"), _m1); + _m2 = MetaTransistor::create(getSubDevicesLibrary(), Name("M2")); + Instance* m2Ins = Instance::create(this, Name("M2Instance"), _m2); + + setReferenceTransistor(_m1); + + Plug* mt1SPlug = m1Ins->getPlug(_m1->getSource()); + mt1SPlug->setNet(s1); + Plug* mt2SPlug = m2Ins->getPlug(_m2->getSource()); + mt2SPlug->setNet(s2); + Plug* mt1DPlug = m1Ins->getPlug(_m1->getDrain()); + mt1DPlug->setNet(d1); + Plug* mt2DPlug = m2Ins->getPlug(_m2->getDrain()); + mt2DPlug->setNet(d2); + Plug* mt1GPlug = m1Ins->getPlug(_m1->getGate()); + mt1GPlug->setNet(g12); + Plug* mt2GPlug = m2Ins->getPlug(_m2->getGate()); + mt2GPlug->setNet(g12); + + if (not bulkConnected) { + Net* b = Net::create(this, Name("B")); + b->setExternal(true); + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(b); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(b); + } else { + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(s1); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(s2); + } + } + + + Name CommonGatePair::getDeviceName () const + { return (isBulkConnected()) ? _cgBulkConnectedName : _cgBulkUnconnectedName; } + + +} // Analog namespace. diff --git a/hurricane/src/analog/CommonSourcePair.cpp b/hurricane/src/analog/CommonSourcePair.cpp new file mode 100644 index 00000000..3fb7c3ff --- /dev/null +++ b/hurricane/src/analog/CommonSourcePair.cpp @@ -0,0 +1,248 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./CommonSourcePair.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include "hurricane/Warning.h" +#include "hurricane/UpdateSession.h" +#include "hurricane/analog/CommonSourcePair.h" + +namespace Analog { + + using Hurricane::Warning; + + + const Name CommonSourcePair::_cspBulkConnectedName ("CommonSourcePairBulkConnected"); + const Name CommonSourcePair::_cspBulkUnconnectedName("CommonSourcePairBulkUnconnected"); + + + CommonSourcePair::CommonSourcePair ( Library* library, const Name& name, const Type& type ) + : Super(library,name,type) + { } + + + CommonSourcePair* CommonSourcePair::create ( Library* library + , const Name& name + , const Type& type + , bool bulkConnected ) + { + Name deviceName = (bulkConnected) ? _cspBulkConnectedName : _cspBulkUnconnectedName; + preCreate(deviceName); + + UpdateSession::open(); + CommonSourcePair* csp = new CommonSourcePair(library,name,type); + csp->_postCreate (deviceName); + csp->createConnections(bulkConnected); + + csp->addStepParameter("B.w" , 1, 1, 1); + csp->addStepParameter("D1.w", 1, 1, 1); + csp->addStepParameter("D2.w", 1, 1, 1); + csp->addStepParameter("G.w" , 1, 1, 1); + csp->addStepParameter("S.w" , 1, 1, 1); + csp->setTerminal( true ); + UpdateSession::close(); + return csp; + } + + + void CommonSourcePair::createConnections ( bool bulkConnected ) + { + Net* s = Net::create(this, Name("S")); + s->setExternal(true); + + Net* g = Net::create(this, Name("G")); + g->setExternal(true); + + Net* d1 = Net::create(this, Name("D1")); + d1->setExternal(true); + + Net* d2 = Net::create(this, Name("D2")); + d2->setExternal(true); + + _m1 = MetaTransistor::create(getSubDevicesLibrary(), Name("M1")); + Instance* m1Ins = Instance::create(this, Name("M1Instance"), _m1); + _m2 = MetaTransistor::create(getSubDevicesLibrary(), Name("M2")); + Instance* m2Ins = Instance::create(this, Name("M2Instance"), _m2); + + Plug* mt1SPlug = m1Ins->getPlug(_m1->getSource()); + mt1SPlug->setNet(s); + Plug* mt2SPlug = m2Ins->getPlug(_m2->getSource()); + mt2SPlug->setNet(s); + Plug* mt1DPlug = m1Ins->getPlug(_m1->getDrain()); + mt1DPlug->setNet(d1); + Plug* mt2DPlug = m2Ins->getPlug(_m2->getDrain()); + mt2DPlug->setNet(d2); + Plug* mt1GPlug = m1Ins->getPlug(_m1->getGate()); + mt1GPlug->setNet(g); + Plug* mt2GPlug = m2Ins->getPlug(_m2->getGate()); + mt2GPlug->setNet(g); + + if (!bulkConnected) { + Net* b = Net::create(this, Name("B")); + b->setExternal(true); + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(b); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(b); + } else { + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(s); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(s); + } + + setReferenceTransistor(_m1); + } + + + Name CommonSourcePair::getDeviceName () const + { + return (isBulkConnected()) ? _cspBulkConnectedName : _cspBulkUnconnectedName; + } + + + unsigned int CommonSourcePair::getRestriction ( Hurricane::Net* net ) const + { + Name netName = net->getName(); + Name nameS = Name(string("S" )); + Name nameD1 = Name(string("D1")); + Name nameD2 = Name(string("D2")); + Name nameG = Name(string("G" )); + + unsigned int ok = 0x1; + unsigned int yes = 0x2; + + unsigned int west = 0; + unsigned int east = 2; + unsigned int south = 4; + unsigned int north = 6; + + int nfing = this->getNfing(); + unsigned int rule = 0; + + if (netName == nameS){ + if (nfing == 1){ + rule |= (ok << north) | (ok << south); + } else if (nfing%2 == 0){ + rule |= (ok << north) | (yes << south) | (yes << east) | (yes << west); + } else { + rule |= (ok << north) | (yes << south) | (ok << east) | (ok << west); + } + } else if (netName == nameD1){ + if (nfing == 1){ + rule |= (ok << north) | (ok << south) | (yes << west); + } else if (nfing == 2){ + rule |= (ok << north) | (ok << south); + } else if (nfing%2 == 1){ + rule |= (ok << north) | (yes << south) | (ok << east) | (yes << west); + } else { + rule |= (ok << north) | (yes << south) | (ok << east) | (ok << west); + } + } else if (netName == nameD2){ + if (nfing == 1){ + rule |= (ok << north) | (ok << south) | (yes << east); + } else if (nfing == 2){ + rule |= (ok << north) | (ok << south); + } else if (nfing%2 == 1){ + rule |= (yes << north) | (ok << south) | (yes << east) | (ok << west); + } else { + rule |= (yes << north) | (ok << south) | (ok << east) | (ok << west); + } + } else if (netName == nameG){ + rule |= (yes << north) | (ok << east) | (ok << west); + } else { + cerr << "Error(unsigned int getRestrictionsRules( Device* device, Net* net )): Unknown net name." << endl; + } + return rule; + } + + + bool CommonSourcePair::isSame ( CommonSourcePair* csp ) + { + StepParameter* w1 = dynamic_cast(this->getParameter("W")); + StepParameter* l1 = dynamic_cast(this->getParameter("L")); + FormFactorParameter* m1 = dynamic_cast(this->getParameter("M")); + ChoiceParameter* ls1 = dynamic_cast(this->getParameter("Layout Styles")); + StepParameter* nerc1 = dynamic_cast(this->getParameter("NERC")); + StepParameter* nirc1 = dynamic_cast(this->getParameter("NIRC")); + StepParameter* b1 = dynamic_cast(this->getParameter("B.w" )); + StepParameter* g1 = dynamic_cast(this->getParameter("G.w")); + StepParameter* d11 = dynamic_cast(this->getParameter("D1.w")); + StepParameter* d21 = dynamic_cast(this->getParameter("D2.w")); + StepParameter* s1 = dynamic_cast(this->getParameter("S.w" )); + + StepParameter* w2 = dynamic_cast(csp->getParameter("W")); + StepParameter* l2 = dynamic_cast(csp->getParameter("L")); + FormFactorParameter* m2 = dynamic_cast(csp->getParameter("M")); + ChoiceParameter* ls2 = dynamic_cast(csp->getParameter("Layout Styles")); + StepParameter* nerc2 = dynamic_cast(csp->getParameter("NERC")); + StepParameter* nirc2 = dynamic_cast(csp->getParameter("NIRC")); + StepParameter* b2 = dynamic_cast(csp->getParameter("B.w" )); + StepParameter* g2 = dynamic_cast(csp->getParameter("G.w")); + StepParameter* d12 = dynamic_cast(csp->getParameter("D1.w")); + StepParameter* d22 = dynamic_cast(csp->getParameter("D2.w")); + StepParameter* s2 = dynamic_cast(csp->getParameter("S.w" )); + + if (w1->getValue() != w2->getValue()){ + cerr << Warning( "CommonSourcePair::isSame(): W are different \"%s\" vs \"s\"." + , getString(this).c_str(), getString(csp).c_str() ); + return false; + } if (l1->getValue() != l2->getValue()){ + cerr << Warning( "CommonSourcePair::isSame(): L are different \"%s\" vs \"s\"." + , getString(this).c_str(), getString(csp).c_str() ); + return false; + } if (m1->getValue() != m2->getValue()){ + cerr << Warning( "CommonSourcePair::isSame(): M are different \"%s\" vs \"s\"." + , getString(this).c_str(), getString(csp).c_str() ); + return false; + } if (ls1->getValue() != ls2->getValue()){ + cerr << Warning( "CommonSourcePair::isSame(): Layout styles are different \"%s\" vs \"s\"." + , getString(this).c_str(), getString(csp).c_str() ); + return false; + } if (nerc1->getValue() != nerc2->getValue()){ + cerr << Warning( "CommonSourcePair::isSame(): NERC are different \"%s\" vs \"s\"." + , getString(this).c_str(), getString(csp).c_str() ); + return false; + } if (nirc1->getValue() != nirc2->getValue()){ + cerr << Warning( "CommonSourcePair::isSame(): NIRC are different \"%s\" vs \"s\"." + , getString(this).c_str(), getString(csp).c_str() ); + return false; + } if (b1->getValue() != b2->getValue()){ + cerr << Warning( "CommonSourcePair::isSame(): B.w are different \"%s\" vs \"s\"." + , getString(this).c_str(), getString(csp).c_str() ); + return false; + } if (g1->getValue() != g2->getValue()){ + cerr << Warning( "CommonSourcePair::isSame(): G.w are different \"%s\" vs \"s\"." + , getString(this).c_str(), getString(csp).c_str() ); + return false; + } if (d11->getValue() != d12->getValue()){ + cerr << Warning( "CommonSourcePair::isSame(): D1.w are different \"%s\" vs \"s\"." + , getString(this).c_str(), getString(csp).c_str() ); + return false; + } if (d21->getValue() != d22->getValue()){ + cerr << Warning( "CommonSourcePair::isSame(): D2.w are different \"%s\" vs \"s\"." + , getString(this).c_str(), getString(csp).c_str() ); + return false; + } if (s1->getValue() != s2->getValue()) { + cerr << Warning( "CommonSourcePair::isSame(): S.w are different \"%s\" vs \"s\"." + , getString(this).c_str(), getString(csp).c_str() ); + return false; + } + + return true; + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/CrossCoupledPair.cpp b/hurricane/src/analog/CrossCoupledPair.cpp new file mode 100644 index 00000000..fe852617 --- /dev/null +++ b/hurricane/src/analog/CrossCoupledPair.cpp @@ -0,0 +1,102 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./CrossCoupledPair.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include "hurricane/UpdateSession.h" +#include "hurricane/analog/CrossCoupledPair.h" + +namespace Analog { + + + const Name CrossCoupledPair::_ccpBulkConnectedName ("CrossCoupledPairBulkConnected"); + const Name CrossCoupledPair::_ccpBulkUnconnectedName ("CrossCoupledPairBulkUnconnected"); + + + CrossCoupledPair::CrossCoupledPair ( Library* library, const Name& name, const Type& type ) + : Super(library,name,type) + { } + + + CrossCoupledPair* CrossCoupledPair::create ( Library* library + , const Name& name + , const Type& type + , bool bulkConnected ) + { + Name deviceName = (bulkConnected) ? _ccpBulkConnectedName : _ccpBulkUnconnectedName; + preCreate(deviceName); + + UpdateSession::open(); + CrossCoupledPair* ccp = new CrossCoupledPair(library,name,type); + ccp->_postCreate(deviceName); + ccp->createConnections(bulkConnected); + ccp->setTerminal( true ); + UpdateSession::close(); + return ccp; + } + + + void CrossCoupledPair::createConnections ( bool bulkConnected ) + { + Net* s = Net::create(this, Name("S")); + s->setExternal(true); + + Net* d1 = Net::create(this, Name("D1")); + d1->setExternal(true); + + Net* d2 = Net::create(this, Name("D2")); + d2->setExternal(true); + + _m1 = MetaTransistor::create(getSubDevicesLibrary(), Name("M1")); + Instance* m1Ins = Instance::create(this, Name("M1Instance"), _m1); + _m2 = MetaTransistor::create(getSubDevicesLibrary(), Name("M2")); + Instance* m2Ins = Instance::create(this, Name("M2Instance"), _m2); + + Plug* mt1SPlug = m1Ins->getPlug(_m1->getSource()); + mt1SPlug->setNet(s); + Plug* mt2SPlug = m2Ins->getPlug(_m2->getSource()); + mt2SPlug->setNet(s); + Plug* mt1DPlug = m1Ins->getPlug(_m1->getDrain()); + mt1DPlug->setNet(d1); + Plug* mt2DPlug = m2Ins->getPlug(_m2->getDrain()); + mt2DPlug->setNet(d2); + Plug* mt1GPlug = m1Ins->getPlug(_m1->getGate()); + mt1GPlug->setNet(d2); + Plug* mt2GPlug = m2Ins->getPlug(_m2->getGate()); + mt2GPlug->setNet(d1); + + if (not bulkConnected) { + Net* b = Net::create(this, Name("B")); + b->setExternal(true); + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(b); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(b); + } else { + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(s); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(s); + } + + setReferenceTransistor(_m1); + } + + + Name CrossCoupledPair::getDeviceName () const + { return (isBulkConnected()) ? _ccpBulkConnectedName : _ccpBulkUnconnectedName; } + + +} // Analog namespace. diff --git a/hurricane/src/analog/Device.cpp b/hurricane/src/analog/Device.cpp new file mode 100644 index 00000000..ab73cd8b --- /dev/null +++ b/hurricane/src/analog/Device.cpp @@ -0,0 +1,177 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre, Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./Device.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include "hurricane/Warning.h" +#include "hurricane/DataBase.h" +#include "hurricane/Technology.h" +#include "hurricane/Pad.h" +#include "hurricane/Vertical.h" +#include "hurricane/Horizontal.h" +#include "hurricane/Library.h" +#include "hurricane/UpdateSession.h" +#include "hurricane/Reference.h" +#include "hurricane/analog/Device.h" + + +namespace { + + using namespace Hurricane; + + + static Name anonymousNetName( "anonymous" ); + +} // anonymous namespace. + + +namespace Analog { + + using namespace Hurricane; + + + Device::Device ( Library* library, const Name& name ) + : Cell (library, name) + , _temperature (0.0) + , _parameterSet () + , _layoutStyles (NULL) + , _subDevicesLibrary(NULL) + , _anonymous (NULL) + , _layouts () + , _netRestrictions () + { } + + + void Device::preCreate ( const Name& deviceName ) + { + Technology* tech = DataBase::getDB()->getTechnology(); + DeviceDescriptor* dd = tech->getDeviceDescriptor( deviceName ); + if (not dd) + throw Error( "Device::preCreate(): No DeviceDescriptor for \"%s\"." + , getString(deviceName).c_str() ); + } + + + void Device::_postCreate ( const Name& deviceName ) + { + Super::_postCreate(); + setTerminal( true ); + + _subDevicesLibrary = Library::create( getLibrary(), getName() ); + _anonymous = Net::create( this, anonymousNetName ); + _anonymous->setAutomatic( true ); + Technology* tech = DataBase::getDB()->getTechnology(); + DeviceDescriptor* dd = tech->getDeviceDescriptor( deviceName ); + DeviceDescriptor::Layouts ddLayouts = dd->getLayouts(); + + for ( auto ddLayout : ddLayouts ) _layouts.insert( ddLayout ); + + Choices layouts; + for ( auto layout : _layouts ) layouts << getString(layout.first); + _layoutStyles = addChoiceParameter( "Layout Styles", layouts ); + } + + + void Device::_preDestroy () + { + for ( Parameter* parameter : _parameterSet ) delete parameter; + _subDevicesLibrary->destroy(); + Super::_preDestroy(); + } + + + Parameter* Device::getParameter ( const string& parameterId ) + { + for ( Parameter* parameter : _parameterSet) { + if (parameter->getName() == parameterId) + return parameter; + } + return NULL; + } + + + const string Device::getLayoutScript () + { + Name layoutName = Name( _layoutStyles->getValue() ); + Layouts::iterator findLayout = _layouts.find( layoutName ); + + if (findLayout != _layouts.end()) return (*findLayout).second; + return NULL; + } + + + void Device::destroyLayout () + { + UpdateSession::open(); + + // size_t icomp = 0; + // for ( Component* component : getComponents() ) { + // cerr << setw(4) << icomp << " | " << component << endl; + // } + + while ( not getComponents().isEmpty() ) getComponents().getFirst()->destroy(); + while ( not getReferences().isEmpty() ) getReferences().getFirst()->destroy(); + + for ( Net* net : getNets() ) { + Rubbers rubbers = net->getRubbers(); + while ( rubbers.getFirst() ) rubbers.getFirst()->_destroy(); + } + + UpdateSession::close(); + } + + + unsigned int Device::getRestriction( Hurricane::Net* net ) const + { return 0xAA; } + + + unsigned int Device::getRestrictions2 ( Hurricane::Net* net ) const + { + map::const_iterator inet = _netRestrictions.find( net ); + if (inet == _netRestrictions.end()) return AllBlocked; + return (*inet).second; + } + + + void Device::setRestrictions2 ( Hurricane::Net* net, unsigned int flags ) + { + if (not net) return; + if (net->getCell() != this) { + cerr << Hurricane::Warning( "Device::setRestrictions2(): Net \"%s\" (of Device \"%s\")" + " do not belong to \"%s\"." + , getString(net->getName()).c_str() + , getString(net->getCell()->getName()).c_str() + , getString(getName()).c_str() + ) << endl; + return; + } + + _netRestrictions[ net ] = flags; + } + + + Hurricane::Record* Device::_getRecord () const + { + Record* record = Super::_getRecord(); + if (record) { + record->add( getSlot("_subDevicesLibrary", _subDevicesLibrary) ); + record->add( getSlot("_netRestrictions" , &_netRestrictions ) ); + } + + return record; + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/DifferentialPair.cpp b/hurricane/src/analog/DifferentialPair.cpp new file mode 100644 index 00000000..b43cde71 --- /dev/null +++ b/hurricane/src/analog/DifferentialPair.cpp @@ -0,0 +1,268 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./DifferentialPair.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include "hurricane/Warning.h" +#include "hurricane/UpdateSession.h" +#include "hurricane/analog/DifferentialPair.h" + +namespace Analog { + + using namespace std; + using namespace Hurricane; + + + const Name DifferentialPair::_dpBulkConnectedName ("DifferentialPairBulkConnected"); + const Name DifferentialPair::_dpBulkUnconnectedName ("DifferentialPairBulkUnconnected"); + + + DifferentialPair::DifferentialPair ( Library* library, const Name& name, const Type& type ) + : Super(library,name,type) + { } + + + DifferentialPair* DifferentialPair::create ( Library* library + , const Name& name + , const Type& type + , bool bulkConnected ) + { + Name deviceName = (bulkConnected) ? _dpBulkConnectedName : _dpBulkUnconnectedName; + preCreate(deviceName); + + UpdateSession::open(); + DifferentialPair* dp = new DifferentialPair( library, name, type ); + dp->_postCreate ( deviceName ); + dp->createConnections( bulkConnected ); + + dp->addStepParameter( "B.w" , 1, 1, 1 ); + dp->addStepParameter( "D1.w", 1, 1, 1 ); + dp->addStepParameter( "D2.w", 1, 1, 1 ); + dp->addStepParameter( "G1.w", 1, 1, 1 ); + dp->addStepParameter( "G2.w", 1, 1, 1 ); + dp->addStepParameter( "S.w" , 1, 1, 1 ); + dp->setTerminal( true ); + UpdateSession::close(); + return dp; + } + + + void DifferentialPair::createConnections ( bool bulkConnected ) + { + Net* s = Net::create(this, Name("S")); + s->setExternal(true); + + Net* g1 = Net::create(this, Name("G1")); + g1->setExternal(true); + + Net* g2 = Net::create(this, Name("G2")); + g2->setExternal(true); + + Net* d1 = Net::create(this, Name("D1")); + d1->setExternal(true); + + Net* d2 = Net::create(this, Name("D2")); + d2->setExternal(true); + + _m1 = MetaTransistor::create(getSubDevicesLibrary(), Name("M1")); + Instance* m1Ins = Instance::create(this, Name("M1Instance"), _m1); + _m2 = MetaTransistor::create(getSubDevicesLibrary(), Name("M2")); + Instance* m2Ins = Instance::create(this, Name("M2Instance"), _m2); + + Plug* mt1SPlug = m1Ins->getPlug(_m1->getSource()); + mt1SPlug->setNet(s); + Plug* mt2SPlug = m2Ins->getPlug(_m2->getSource()); + mt2SPlug->setNet(s); + Plug* mt1DPlug = m1Ins->getPlug(_m1->getDrain()); + mt1DPlug->setNet(d1); + Plug* mt2DPlug = m2Ins->getPlug(_m2->getDrain()); + mt2DPlug->setNet(d2); + Plug* mt1GPlug = m1Ins->getPlug(_m1->getGate()); + mt1GPlug->setNet(g1); + Plug* mt2GPlug = m2Ins->getPlug(_m2->getGate()); + mt2GPlug->setNet(g2); + + if (!bulkConnected) { + Net* b = Net::create(this, Name("B")); + b->setExternal(true); + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(b); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(b); + } else { + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(s); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(s); + } + + setReferenceTransistor(_m1); + } + + + Name DifferentialPair::getDeviceName() const + { return (isBulkConnected()) ? _dpBulkConnectedName : _dpBulkUnconnectedName; } + + + unsigned int DifferentialPair::getRestriction ( Hurricane::Net* net ) const + { + Name netName = net->getName(); + Name nameS = Name(string("S" )); + Name nameD1 = Name(string("D1")); + Name nameD2 = Name(string("D2")); + Name nameG1 = Name(string("G1")); + Name nameG2 = Name(string("G2")); + + unsigned int ok = 0x1; + unsigned int yes = 0x2; + + unsigned int west = 0; + unsigned int east = 2; + unsigned int south = 4; + unsigned int north = 6; + + int nfing = this->getNfing(); + unsigned int rule = 0; + + if (netName == nameS){ + if (nfing == 1){ + rule |= (ok << north) | (ok << south); + } else if (nfing%2 == 0){ + rule |= (yes << north) | (yes << south) | (yes << east) | (yes<< west); + } else { + rule |= (yes << north) | (yes << south) | (ok << east) | (ok << west); + } + } else if (netName == nameD1){ + if (nfing == 1){ + rule |= (ok << north) | (ok << south); + } else if (nfing == 2){ + rule |= (ok << north) | (ok << south); + } else if (nfing%2 == 1){ + rule |= (yes << north) | (ok << south) | (ok << east) | (yes << west); + } else { + rule |= (yes << north) | (ok << south) | (ok << east) | (ok << west); + } + } else if (netName == nameD2){ + if (nfing == 1){ + rule |= (ok << north) | (ok << south) | (yes << east); + } else if (nfing == 2){ + rule |= (ok << north) | (ok << south); + } else if (nfing%2 == 1){ + rule |= (ok << north) | (yes << south) | (yes << east) | (ok << west); + } else { + rule |= (ok << north) | (yes << south) | (ok << east) | (ok << west); + } + } else if (netName == nameG1){ + if (nfing == 1){ + rule |= (ok << north) | (ok << east) | (ok << west); + } else { + rule |= (yes << north) | (ok << east) | (ok << west); + } + } else if (netName == nameG2){ + if (nfing == 1){ + rule |= (ok << south) | (ok << east) | (ok << west); + } else { + rule |= (yes << south) | (ok << east) | (ok << west); + } + } else { + cerr << "Error(unsigned int getRestrictionsRules( Device* device, Net* net )): Unknown net name." << endl; + } + return rule; + } + + + bool DifferentialPair::isSame ( DifferentialPair* dp ) + { + StepParameter* w1 = dynamic_cast(this->getParameter("W")); + StepParameter* l1 = dynamic_cast(this->getParameter("L")); + FormFactorParameter* m1 = dynamic_cast(this->getParameter("M")); + ChoiceParameter* ls1 = dynamic_cast(this->getParameter("Layout Styles")); + StepParameter* nerc1 = dynamic_cast(this->getParameter("NERC")); + StepParameter* nirc1 = dynamic_cast(this->getParameter("NIRC")); + StepParameter* b1 = dynamic_cast(this->getParameter("B.w" )); + StepParameter* g11 = dynamic_cast(this->getParameter("G1.w")); + StepParameter* g21 = dynamic_cast(this->getParameter("G2.w")); + StepParameter* d11 = dynamic_cast(this->getParameter("D1.w")); + StepParameter* d21 = dynamic_cast(this->getParameter("D2.w")); + StepParameter* s1 = dynamic_cast(this->getParameter("S.w" )); + + StepParameter* w2 = dynamic_cast(dp->getParameter("W")); + StepParameter* l2 = dynamic_cast(dp->getParameter("L")); + FormFactorParameter* m2 = dynamic_cast(dp->getParameter("M")); + ChoiceParameter* ls2 = dynamic_cast(dp->getParameter("Layout Styles")); + StepParameter* nerc2 = dynamic_cast(dp->getParameter("NERC")); + StepParameter* nirc2 = dynamic_cast(dp->getParameter("NIRC")); + StepParameter* b2 = dynamic_cast(dp->getParameter("B.w" )); + StepParameter* g12 = dynamic_cast(dp->getParameter("G1.w")); + StepParameter* g22 = dynamic_cast(dp->getParameter("G2.w")); + StepParameter* d12 = dynamic_cast(dp->getParameter("D1.w")); + StepParameter* d22 = dynamic_cast(dp->getParameter("D2.w")); + StepParameter* s2 = dynamic_cast(dp->getParameter("S.w" )); + + if (w1->getValue() != w2->getValue()){ + cerr << Warning( "DifferentialPair::isSame(): W are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(dp).c_str() ); + return false; + } if (l1->getValue() != l2->getValue()){ + cerr << Warning( "DifferentialPair::isSame(): L are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(dp).c_str() ); + return false; + } if (m1->getValue() != m2->getValue()){ + cerr << Warning( "DifferentialPair::isSame(): M are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(dp).c_str() ); + return false; + } if (ls1->getValue() != ls2->getValue()){ + cerr << Warning( "DifferentialPair::isSame(): Layout styles are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(dp).c_str() ); + return false; + } if (nerc1->getValue() != nerc2->getValue()){ + cerr << Warning( "DifferentialPair::isSame(): NERC are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(dp).c_str() ); + return false; + } if (nirc1->getValue() != nirc2->getValue()){ + cerr << Warning( "DifferentialPair::isSame(): NIRC are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(dp).c_str() ); + return false; + } if (b1->getValue() != b2->getValue()){ + cerr << Warning( "DifferentialPair::isSame(): B.w are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(dp).c_str() ); + return false; + } if (g11->getValue() != g12->getValue()){ + cerr << Warning( "DifferentialPair::isSame(): G1.w are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(dp).c_str() ); + return false; + } if (g21->getValue() != g22->getValue()){ + cerr << Warning( "DifferentialPair::isSame(): G2.w are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(dp).c_str() ); + return false; + } if (d11->getValue() != d12->getValue()){ + cerr << Warning( "DifferentialPair::isSame(): D1.w are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(dp).c_str() ); + return false; + } if (d21->getValue() != d22->getValue()){ + cerr << Warning( "DifferentialPair::isSame(): D2.w are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(dp).c_str() ); + return false; + } if (s1->getValue() != s2->getValue()) { + cerr << Warning( "DifferentialPair::isSame(): S.w are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(dp).c_str() ); + return false; + } + + return true; + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/LayoutGenerator.cpp b/hurricane/src/analog/LayoutGenerator.cpp new file mode 100644 index 00000000..70730ba4 --- /dev/null +++ b/hurricane/src/analog/LayoutGenerator.cpp @@ -0,0 +1,470 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./LayoutGenerator.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include +#include +#include +#include +#include +#include "hurricane/Warning.h" +#include "hurricane/isobar/PyBox.h" +#include "hurricane/viewer/Script.h" +#include "hurricane/analog/Device.h" +#include "hurricane/analog/TransistorArguments.h" +#include "hurricane/analog/TransistorMultiArguments.h" +#include "hurricane/analog/CapacitorArguments.h" +#include "hurricane/analog/PyDevice.h" +#include "hurricane/analog/PyTransistorArguments.h" +#include "hurricane/analog/PyTransistorMultiArguments.h" +#include "hurricane/analog/PyBJTArguments.h" +#include "hurricane/analog/BJTArguments.h" +#include "hurricane/analog/PyCapacitorArguments.h" +#include "hurricane/analog/LayoutGenerator.h" + + +namespace Analog { + + using namespace std; + using namespace Hurricane; + using namespace Isobar; + + +// ------------------------------------------------------------------- +// Class : "::LayoutGenerator::Logger". + + LayoutGenerator::Logger::Logger ( LayoutGenerator* generator ) + : _generator(generator) + { } + + + LayoutGenerator::Logger::~Logger () + { } + + + void LayoutGenerator::Logger::popStatus ( const string& text ) + { + if (_generator->getVerboseLevel() >= LayoutGenerator::Verbose) + cerr << text << endl; + } + + + void LayoutGenerator::Logger::popError ( const string& text ) + { + string error = "! " + text; + cerr << error << endl; + } + + + void LayoutGenerator::Logger::popScriptError () + { + string scriptError = "! An error occured while creating layout. Please check the python console for more information."; + cerr << scriptError << endl; + } + + +// ------------------------------------------------------------------- +// Class : "::LayoutGenerator". + + int LayoutGenerator::_verboseLevel = LayoutGenerator::Debug; + + + LayoutGenerator::LayoutGenerator () + : _logger (NULL) + , _device (NULL) + , _box (NULL) + , _activeBox(NULL) + , _matrix () + , _script (NULL) + { + _activeBox = new Hurricane::Box(); + _script = Script::create(); + setLogger ( new Logger(this) ); + } + + + LayoutGenerator::~LayoutGenerator () + { + if (_script) _script->destroy(); + if (_logger) delete _logger; + } + + + bool LayoutGenerator::checkScript() + { + if (not _device) { + popError( "Try to check for script but device does not exist." ); + return false; + } + + FILE* fs = fopen( _device->getLayoutScript().c_str(), "r" ); + if (not fs) { + perror( NULL ); + popError( "Cannot load script : file does not exist or bad access rights." ); + return false; + } + + fclose( fs ); + popStatus( _device->getLayoutScript()+" found." ); + return true; + } + + + bool LayoutGenerator::checkFunctions() + { + if (not _script->getFunction("checkCoherency")) { + cerr << Error( "LayoutGenerator::drawLayout(): Module <%s> miss checkCoherency()." + , _script->getUserModuleName().c_str() ) << endl; + finalize( ShowTimeTag ); + return false; + } + + if (not _script->getFunction("layout")) { + cerr << Error( "LayoutGenerator::drawLayout(): Module <%s> miss layout()." + , _script->getUserModuleName().c_str() ) << endl; + finalize( ShowTimeTag ); + return false; + } + + return true; + } + + + bool LayoutGenerator::drawLayout () + { + if (_device == NULL) return false; + + //checkScript(); + + cdebug_log(500,0) << "LayoutGenerator::drawLayout() " << _device->getDeviceName() << endl; + + _device->destroyLayout(); + + initialize(); + + if (not _script->getUserModule()) { + finalize( ShowTimeTag ); + cerr << Error( "LayoutGenerator::drawLayout(): Couldn't load module <%s>" + , _script->getUserModuleName().c_str() ) << endl; + return false; + } + + checkFunctions(); + + PyObject* pyArgsCheck = NULL; + PyObject* pyArgsLayout = NULL; + if (not toPyArguments(_device->getArguments(),pyArgsCheck,pyArgsLayout,NoFlags)) { + finalize( ShowTimeTag ); + return false; + } + + if (not callCheckCoherency(pyArgsCheck,ShowError)) { + return false; + } + + if (not callLayout(pyArgsLayout)) { + cerr << "Layout failed" << endl; cerr.flush(); + return false; + } + + // Eric passed by here + //cerr << "Python driven Layout successfully drawn." << endl; + + finalize( ShowTimeTag|StatusOk ); + + _device->setAbutmentBox( getDeviceBox() ); + + //string message = _device->checkLayoutOnPhysicalGrid(); + //if (not message.empty()) + // popError( message.c_str() ); + + // Eric passed by here + //popStatus( "Layout done." ); + + return true; + } + + + bool LayoutGenerator::initialize () + { + string moduleFullPath = _device->getLayoutScript(); + size_t slash = moduleFullPath.rfind( '/' ); + + slash = (slash!=string::npos) ? slash+1 : 0; + string moduleName = moduleFullPath.substr( slash ); + string modulePath = moduleFullPath.substr( 0, slash-1 ); + size_t dot = moduleName.rfind( '.' ); + + dot = (dot!=string::npos) ? dot : moduleName.size(); + moduleName = moduleName.substr( 0, dot ); + + // Eric passed by here + //cerr << "Path: " << modulePath << endl; + //cerr << "Name: " << moduleName << endl; + + _script->setUserModuleName( moduleName ); + return _script->initialize( Script::NoThrow ); + } + + + void LayoutGenerator::finalize ( unsigned int flags ) + { + if (flags & ShowTimeTag) { + string code = ""; + // Eric passed by here + //if (flags & StatusOk) code = "import time; print ' -- Script SUCCESS2 --', time.strftime('%H:%M:%S',time.localtime())\n"; + if (flags & StatusOk) code = ""; + else code = "import time; print ' -- Script FAILED --' , time.strftime('%H:%M:%S',time.localtime())\n"; + PyRun_SimpleString( code.c_str() ); + } + _script->finalize(); + } + + + bool LayoutGenerator::toPyArguments ( Arguments* args, PyObject*& pyArgsCheck, PyObject*& pyArgsLayout, unsigned int flags ) + { + PyObject* pyArgs = NULL; + + if (dynamic_cast(args)) { + TransistorMultiArguments* tmArgs = static_cast(args); + PyTransistorMultiArguments* pyTmArgs = PyObject_NEW( PyTransistorMultiArguments, &PyTypeTransistorMultiArguments ); + pyTmArgs->_object = tmArgs; + pyArgs = (PyObject*)pyTmArgs; + } else if (dynamic_cast(args)) { + TransistorArguments* tArgs = static_cast(args); + PyTransistorArguments* pyTArgs = PyObject_NEW( PyTransistorArguments, &PyTypeTransistorArguments ); + pyTArgs->_object = tArgs; + pyArgs = (PyObject*)pyTArgs; + } else if (dynamic_cast(args)) { + CapacitorArguments* cArgs = static_cast(args); + PyCapacitorArguments* pyCArgs = PyObject_NEW( PyCapacitorArguments, &PyTypeCapacitorArguments ); + pyCArgs->_object = cArgs; + pyArgs = (PyObject*)pyCArgs; + } else { + popError( "Bad arguments" ); + return false; + } + + PyObject* pyDevice = PyDevice_Link( _device ); + + pyArgsCheck = PyTuple_New( 1 ); + PyTuple_SetItem( pyArgsCheck , 0, (PyObject*)pyArgs ); + + pyArgsLayout = PyTuple_New( 3 ); + PyTuple_SetItem( pyArgsLayout, 0, pyDevice ); + PyTuple_SetItem( pyArgsLayout, 1, (PyObject*)pyArgs ); + PyTuple_SetItem( pyArgsLayout, 2, (flags & ComputeBbOnly) ? Py_True : Py_False ); + + return true; + } + + + void LayoutGenerator::pyTransistorArguments ( TransistorArguments* tArgs + , unsigned m + , PyObject*& pArgsCheck + , PyObject*& pArgsLayout + , unsigned int flags + ) + { + pArgsCheck = PyTuple_New( 1 ); + pArgsLayout = PyTuple_New( 3 ); + + PyObject* pyDevice = PyDevice_Link( _device ); + PyTuple_SetItem( pArgsLayout, 0, pyDevice ); + + tArgs->setM( m ); + + PyTransistorArguments* pyTArgs = PyObject_NEW( PyTransistorArguments, &PyTypeTransistorArguments ); + pyTArgs->_object = tArgs; + PyTuple_SetItem( pArgsCheck , 0, (PyObject*)pyTArgs ); + PyTuple_SetItem( pArgsLayout, 1, (PyObject*)pyTArgs ); + PyTuple_SetItem( pArgsLayout, 2, (flags & ComputeBbOnly) ? Py_True : Py_False ); + } + + + void LayoutGenerator::pyTransistorMultiArguments ( TransistorMultiArguments* dpArgs + , unsigned m + , PyObject*& pArgsCheck + , PyObject*& pArgsLayout + , unsigned int flags + ) + { + pArgsCheck = PyTuple_New( 1 ); + pArgsLayout = PyTuple_New( 3 ); + + PyObject* pyDevice = PyDevice_Link( _device ); + PyTuple_SetItem( pArgsLayout, 0, pyDevice ); + + dpArgs->setM( m ); + + PyTransistorMultiArguments* pyTArgs = PyObject_NEW( PyTransistorMultiArguments, &PyTypeTransistorMultiArguments ); + pyTArgs->_object = dpArgs; + PyTuple_SetItem( pArgsCheck , 0, (PyObject*)pyTArgs ); + PyTuple_SetItem( pArgsLayout, 1, (PyObject*)pyTArgs ); + PyTuple_SetItem( pArgsLayout, 2, (flags & ComputeBbOnly) ? Py_True : Py_False ); + } + + + void LayoutGenerator::pyCapacitorArguments ( CapacitorArguments* cArgs + , PyObject*& pArgsCheck + , PyObject*& pArgsLayout + , unsigned int flags + ) + { + pArgsCheck = PyTuple_New( 1 ); + pArgsLayout = PyTuple_New( 3 ); + + PyObject* pyDevice = PyDevice_Link( _device ); + PyTuple_SetItem( pArgsLayout, 0, pyDevice ); + + PyCapacitorArguments* pyCArgs = PyObject_NEW( PyCapacitorArguments, &PyTypeCapacitorArguments ); + pyCArgs->_object = cArgs; + PyTuple_SetItem( pArgsCheck , 0, (PyObject*)pyCArgs ); + PyTuple_SetItem( pArgsLayout, 1, (PyObject*)pyCArgs ); + PyTuple_SetItem( pArgsLayout, 2, (flags & ComputeBbOnly) ? Py_True : Py_False ); + } + + + bool LayoutGenerator::callCheckCoherency ( PyObject* pArgsCheck, unsigned int flags ) + { + PyObject* pTupleCheck = _script->callFunction( "checkCoherency", pArgsCheck ); + + if (not pTupleCheck) { + string code = "print ' -- Script FAILED --', time.strftime('%H:%M:%S',time.localtime())\n"; + PyRun_SimpleString( code.c_str() ); + finalize( NoFlags ); + popScriptError(); + return false; + } + if ( not PyTuple_Check(pTupleCheck) or (PyTuple_Size(pTupleCheck) != 2) ) { + popError( "checkCoherency function must return a tuple: (bool,errorMessage)" ); + return false; + } + PyObject* pCheckOk = PyTuple_GetItem( pTupleCheck, 0 ); + if (pCheckOk == Py_False) { + if (flags & ShowError) + popError( string(PyString_AsString(PyTuple_GetItem(pTupleCheck,1))) ); + return false; + } + return true; + } + + + bool LayoutGenerator::callLayout ( PyObject* pArgsLayout ) + { + _matrix = _script->callFunction( "layout", pArgsLayout ); + if ((not _matrix) or (IsPyCapacitorArguments(pArgsLayout))) { + string code = "print ' -- Script FAILED --', time.strftime('%H:%M:%S',time.localtime())"; + PyRun_SimpleString( code.c_str() ); + finalize( NoFlags ); + popScriptError(); + cerr << "There was a problem running layout function" << endl; + return false; + } + return true; + } + + + unsigned LayoutGenerator::getNumberTransistor () + { + PyObject* row = getRow(0); + if (row and PyList_Check(row) == 1) + return PyList_Size(row) - 1; // -1 because of the first column for global params + return 0; // else return 0; + } + + + unsigned LayoutGenerator::getNumberStack () + { + if (_matrix and PyList_Check(_matrix) == 1) + return PyList_Size(_matrix) - 1; // -1 because of the first row for global params + return 0; + } + + + Box LayoutGenerator::getDeviceBox () + { + PyObject* pBox = getParamValue(getDic(getRow(0), 0), "box"); + if (pBox == NULL) { + finalize( NoFlags ); + popError("Layout function did not returned a valid device box 2!"); + return Box(); + } + + if (pBox->ob_type != &PyTypeBox) { + finalize( NoFlags ); + popError("Layout function did not returned a valid device box!"); + } + return *((PyBox*)pBox)->_object; //get the hurricane box + } + + + Box LayoutGenerator::getActiveBox () + { + PyObject* pBox = getParamValue(getDic(getRow(0), 0), "globalActiveBox"); + if (!pBox) { + finalize( NoFlags ); + popError("Layout function did not returned a valid active box 2!"); + return Box(); + } + + if (pBox->ob_type != &PyTypeBox) { + finalize( NoFlags ); + popError("Layout function did not returned a valid active box!"); + } + return *((PyBox*)pBox)->_object; //get the hurricane box + } + + + double LayoutGenerator::getParameterValue ( unsigned i, unsigned j, string paramName, bool& ok ) + { + PyObject* pValue = getParamValue(getDic(getRow(i),j), paramName); + if (pValue == NULL){ + ok = false; + return 0.0; + } + ok = true; + return (PyFloat_AsDouble(pValue)); + } + + + PyObject* LayoutGenerator::getRow ( unsigned i ) + { + if (_matrix and PyList_Check(_matrix) == 1 and ((int)i < PyList_Size(_matrix))){ + return PyList_GetItem(_matrix, i); + } + return NULL; + } + + + PyObject* LayoutGenerator::getDic ( PyObject* row, unsigned j ) + { + if (row and PyList_Check(row) == 1 and ((int)j < PyList_Size(row))){ + return PyList_GetItem(row, j); + } + return NULL; + } + + + PyObject* LayoutGenerator::getParamValue ( PyObject* dic, string paramName ) + { + if (dic and (PyDict_Check(dic) == 1) and (PyDict_Contains(dic,PyString_FromString(paramName.c_str())))) + return PyDict_GetItemString(dic,paramName.c_str()); + return NULL; + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/LevelShifter.cpp b/hurricane/src/analog/LevelShifter.cpp new file mode 100644 index 00000000..73d105fb --- /dev/null +++ b/hurricane/src/analog/LevelShifter.cpp @@ -0,0 +1,105 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./LevelShifter.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include "hurricane/UpdateSession.h" +#include "hurricane/analog/LevelShifter.h" + +namespace Analog { + + + const Name LevelShifter::_lsBulkConnectedName ("LevelShifterBulkConnected"); + const Name LevelShifter::_lsBulkUnconnectedName ("LevelShifterBulkUnconnected"); + + + LevelShifter::LevelShifter ( Library* library, const Name& name, const Type& type ) + : Super(library,name,type) + { } + + + LevelShifter* LevelShifter::create ( Library* library + , const Name& name + , const Type& type + , bool bulkConnected ) + { + Name deviceName = (bulkConnected) ? _lsBulkConnectedName : _lsBulkUnconnectedName; + preCreate(deviceName); + + UpdateSession::open(); + LevelShifter* ls = new LevelShifter( library, name, type ); + ls->_postCreate( deviceName ); + ls->createConnections( bulkConnected ); + ls->setTerminal( true ); + UpdateSession::close(); + return ls; + } + + + void LevelShifter::createConnections ( bool bulkConnected ) + { + Net* s1 = Net::create(this, Name("S1")); + s1->setExternal(true); + + Net* s2 = Net::create(this, Name("S2")); + s2->setExternal(true); + + Net* d1 = Net::create(this, Name("D1")); + d1->setExternal(true); + + Net* d2 = Net::create(this, Name("D2")); + d2->setExternal(true); + + _m1 = MetaTransistor::create(getSubDevicesLibrary(), Name("M1")); + Instance* m1Ins = Instance::create(this, Name("M1Instance"), _m1); + _m2 = MetaTransistor::create(getSubDevicesLibrary(), Name("M2")); + Instance* m2Ins = Instance::create(this, Name("M2Instance"), _m2); + + setReferenceTransistor(_m1); + + Plug* mt1SPlug = m1Ins->getPlug(_m1->getSource()); + mt1SPlug->setNet(s1); + Plug* mt2SPlug = m2Ins->getPlug(_m2->getSource()); + mt2SPlug->setNet(s2); + Plug* mt1DPlug = m1Ins->getPlug(_m1->getDrain()); + mt1DPlug->setNet(d1); + Plug* mt2DPlug = m2Ins->getPlug(_m2->getDrain()); + mt2DPlug->setNet(d2); + Plug* mt1GPlug = m1Ins->getPlug(_m1->getGate()); + mt1GPlug->setNet(d1); + Plug* mt2GPlug = m2Ins->getPlug(_m2->getGate()); + mt2GPlug->setNet(d1); + + if (not bulkConnected) { + Net* b = Net::create(this, Name("B")); + b->setExternal(true); + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(b); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(b); + } else { + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(s1); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(s2); + } + } + + + Name LevelShifter::getDeviceName () const + { return (isBulkConnected()) ? _lsBulkConnectedName : _lsBulkUnconnectedName; } + + +} // Analog namespace. diff --git a/hurricane/src/analog/MIMCapacitor.cpp b/hurricane/src/analog/MIMCapacitor.cpp new file mode 100644 index 00000000..663a6d84 --- /dev/null +++ b/hurricane/src/analog/MIMCapacitor.cpp @@ -0,0 +1,101 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./MIMCapacitor.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/UpdateSession.h" +#include "hurricane/analog/MetaCapacitor.h" +#include "hurricane/analog/MIMCapacitor.h" +#include "hurricane/analog/CapacitorArguments.h" + +namespace Analog { + + using namespace Hurricane; + + + const Name MIMCapacitor::_capacitorName ("MIMCapacitor"); + + + MIMCapacitor::MIMCapacitor ( Library* library, const Name& name, const CapacitorFamily::Type& type ) + : Super(library, name, type) + , _metaCapacitor(NULL) + , _cDraw (0.0) + , _cBorder (0.0) + , _cParasite (0.0) + , _c (NULL) + { } + + + MIMCapacitor* MIMCapacitor::create ( Library* library, const Name& name, const CapacitorFamily::Type& type ) + { + preCreate( _capacitorName ); + UpdateSession::open(); + MIMCapacitor* cp = new MIMCapacitor( library, name, type ); + cp->_postCreate( _capacitorName ); + cp->createConnections(); + cp->setTerminal( true ); + UpdateSession::close(); + return cp; + } + + + void MIMCapacitor::_postCreate ( const Name& deviceName ) + { + Super::_postCreate(deviceName); + + // get minimum and maximum value from technology + //AnalogEnv* aenv = AnalogEnv::get(); + //AnalogTechnology* atechno = aenv->getAnalogTechnology(); + //DbU::Unit capacitorMinL = atechno->getPhysicalRule("capacitorMinL").getValue(); + //DbU::Unit capacitorMaxL = atechno->getPhysicalRule("capacitorMaxL").getValue(); + //DbU::Unit capacitorMinW = atechno->getPhysicalRule("capacitorMinW").getValue(); + //DbU::Unit capacitorMaxW = atechno->getPhysicalRule("capacitorMaxW").getValue(); + // For now define arbitrary values: + //DbU::Unit capacitorMinC = DbU::physicalToDbu(0.25, DbU::Micro); + //DbU::Unit capacitorMaxC = DbU::physicalToDbu(25 , DbU::Micro); + _c = addCapacitorParameter( "C", 0.0 ); + } + + + void MIMCapacitor::createConnections () + { + Net* p1 = Net::create( this, Name("P1") ); + p1->setExternal( true ); + + Net* p2 = Net::create( this, Name("P2") ); + p2->setExternal( true ); + + _metaCapacitor = MetaCapacitor::create( getSubDevicesLibrary(), Name("C1") ); + Instance* metaCapacitorIns = Instance::create( this, Name("C1Instance"), _metaCapacitor ); + setReferenceCapacitor( _metaCapacitor ); + + Plug* mcC1Plug = metaCapacitorIns->getPlug( _metaCapacitor->getPlate1() ); + mcC1Plug->setNet( p1 ); + Plug* mcC2Plug = metaCapacitorIns->getPlug( _metaCapacitor->getPlate2() ); + mcC2Plug->setNet( p2 ); + } + + + Name MIMCapacitor::getDeviceName () const + { return _capacitorName; } + + + Arguments* MIMCapacitor::getArguments () + { + CapacitorArguments* cArgs = new CapacitorArguments( isMIM(), isPIP(), isMOM(), _c->getValue() ); + return cArgs; + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/MetaCapacitor.cpp b/hurricane/src/analog/MetaCapacitor.cpp new file mode 100644 index 00000000..27dbc1a2 --- /dev/null +++ b/hurricane/src/analog/MetaCapacitor.cpp @@ -0,0 +1,53 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./MetaCapacitor.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/MetaCapacitor.h" + + +namespace Analog { + + + MetaCapacitor::MetaCapacitor ( Library* library, const Name& name ) + : Super(library,name) + , _plate1(NULL) + , _plate2(NULL) + , _ce (0.0) + { } + + + MetaCapacitor* MetaCapacitor::create ( Library* library, const Name& name ) + { + MetaCapacitor* mCapacitor = new MetaCapacitor( library, name ); + mCapacitor->_postCreate(); + + return mCapacitor; + } + + + void MetaCapacitor::_postCreate () + { + Super::_postCreate(); + + _plate1 = Net::create(this, "P1"); + _plate1->setExternal(true); + _plate2 = Net::create(this, "P2"); + _plate2->setExternal(true); + + setTerminal( false ); + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/MetaTransistor.cpp b/hurricane/src/analog/MetaTransistor.cpp new file mode 100644 index 00000000..8fcd1d80 --- /dev/null +++ b/hurricane/src/analog/MetaTransistor.cpp @@ -0,0 +1,77 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./MetaTransistor.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/MetaTransistor.h" + + +namespace Analog { + + + MetaTransistor::MetaTransistor ( Library* library, const Name& name ) + : Super(library, name) + , _drain (NULL) + , _source (NULL) + , _gate (NULL) + , _bulk (NULL) + , _anonymous(NULL) + , _m (0) + , _we (0.0) + , _le (0.0) + , _ids (0.0) + , _vgs (0.0) + , _vds (0.0) + , _vbs (0.0) + , _vg (0.0) + , _vd (0.0) + , _vb (0.0) + , _vs (0.0) + , _veg (0.0) + , _vth (0.0) + , _wmin (0.0) + , _wmax (0.0) + , _nfing (1) + { } + + + MetaTransistor* MetaTransistor::create ( Library* library, const Name& name ) + { + MetaTransistor* mTransistor = new MetaTransistor( library, name ); + mTransistor->_postCreate(); + + return mTransistor; + } + + + void MetaTransistor::_postCreate () + { + Super::_postCreate(); + + _drain = Net::create(this, "D"); + _drain->setExternal(true); + _source = Net::create(this, "S"); + _source->setExternal(true); + _gate = Net::create(this, "G"); + _gate->setExternal(true); + _bulk = Net::create(this, "B"); + _bulk->setExternal(true); + _anonymous = Net::create(this, "Anonymous"); + _anonymous->setAutomatic( true ); + + setTerminal(false); + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/PyAnalog.cpp b/hurricane/src/analog/PyAnalog.cpp new file mode 100644 index 00000000..47b43ccc --- /dev/null +++ b/hurricane/src/analog/PyAnalog.cpp @@ -0,0 +1,233 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2010-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyAnalog.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyHurricane.h" +#include "hurricane/analog/PyDevice.h" +#include "hurricane/analog/PyTransistorFamily.h" +#include "hurricane/analog/PyTransistor.h" +#include "hurricane/analog/PyTransistorPair.h" +#include "hurricane/analog/PyCommonDrain.h" +#include "hurricane/analog/PyCommonGatePair.h" +#include "hurricane/analog/PyCommonSourcePair.h" +#include "hurricane/analog/PyCrossCoupledPair.h" +#include "hurricane/analog/PyDifferentialPair.h" +#include "hurricane/analog/PyLevelShifter.h" +#include "hurricane/analog/PySimpleCurrentMirror.h" +#include "hurricane/analog/PyCascode.h" + +#include "hurricane/analog/PyCapacitorFamily.h" +#include "hurricane/analog/PyMIMCapacitor.h" + +#include "hurricane/analog/PyTransistorArguments.h" +#include "hurricane/analog/PyTransistorMultiArguments.h" +#include "hurricane/analog/PyCapacitorArguments.h" +#include "hurricane/analog/PyParameter.h" +#include "hurricane/analog/PyCapacitorParameter.h" +#include "hurricane/analog/PyChoiceParameter.h" +#include "hurricane/analog/PyFormFactorParameter.h" +#include "hurricane/analog/PyMCheckBoxParameter.h" +#include "hurricane/analog/PySpinBoxParameter.h" +#include "hurricane/analog/PyStepParameter.h" +#include "hurricane/analog/PyLayoutGenerator.h" + + +namespace Isobar { + + +#if !defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyHurricane" Shared Library Code Part | +// +=================================================================+ + +#else + +extern "C" { + + + static PyMethodDef PyAnalog_Methods[] = + { { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // --------------------------------------------------------------- + // Module Initialization : "initAnalog ()" + + DL_EXPORT(void) initAnalog () { + //trace_on(); + cdebug.log(49) << "initAnalog()" << endl; + + PyDevice_LinkPyType(); + PyTransistorFamily_LinkPyType(); + PyTransistor_LinkPyType(); + PyTransistorPair_LinkPyType(); + PyCommonDrain_LinkPyType(); + PyCommonGatePair_LinkPyType(); + PyCommonSourcePair_LinkPyType(); + PyCrossCoupledPair_LinkPyType(); + PyDifferentialPair_LinkPyType(); + PyLevelShifter_LinkPyType(); + PySimpleCurrentMirror_LinkPyType(); + PyCascode_LinkPyType(); + PyMIMCapacitor_LinkPyType(); + + PyTransistorArguments_LinkPyType(); + PyTransistorMultiArguments_LinkPyType(); + PyCapacitorArguments_LinkPyType(); + PyParameter_LinkPyType(); + PyCapacitorParameter_LinkPyType(); + PyChoiceParameter_LinkPyType(); + PyFormFactorParameter_LinkPyType(); + PyMCheckBoxParameter_LinkPyType(); + PySpinBoxParameter_LinkPyType(); + PyStepParameter_LinkPyType(); + PyCapacitorFamily_LinkPyType(); + PyLayoutGenerator_LinkPyType(); + + PYTYPE_READY( TransistorArguments ) + PYTYPE_READY( TransistorMultiArguments ) + PYTYPE_READY( CapacitorArguments ) + PYTYPE_READY( Parameter ) + PYTYPE_READY( LayoutGenerator ) + + PYTYPE_READY_SUB( Device , Cell ) + PYTYPE_READY_SUB( TransistorFamily , Device ) + PYTYPE_READY_SUB( Transistor , TransistorFamily ) + PYTYPE_READY_SUB( TransistorPair , TransistorFamily ) + PYTYPE_READY_SUB( CommonDrain , TransistorPair ) + PYTYPE_READY_SUB( CommonGatePair , TransistorPair ) + PYTYPE_READY_SUB( CommonSourcePair , TransistorPair ) + PYTYPE_READY_SUB( CrossCoupledPair , TransistorPair ) + PYTYPE_READY_SUB( DifferentialPair , TransistorPair ) + PYTYPE_READY_SUB( LevelShifter , TransistorPair ) + PYTYPE_READY_SUB( SimpleCurrentMirror , TransistorPair ) + PYTYPE_READY_SUB( Cascode , TransistorPair ) + + PYTYPE_READY_SUB( CapacitorFamily , Device ) + PYTYPE_READY_SUB( MIMCapacitor , CapacitorFamily ) + + PYTYPE_READY_SUB( CapacitorParameter , Parameter ) + PYTYPE_READY_SUB( ChoiceParameter , Parameter ) + PYTYPE_READY_SUB( FormFactorParameter , Parameter ) + PYTYPE_READY_SUB( MCheckBoxParameter , Parameter ) + PYTYPE_READY_SUB( SpinBoxParameter , Parameter ) + PYTYPE_READY_SUB( StepParameter , Parameter ) + + // Identifier string can take up to 10 characters ! + __cs.addType( "device" , &PyTypeDevice , "" , false, "cell" ); + __cs.addType( "tfamily" , &PyTypeTransistorFamily , "" , false, "device" ); + __cs.addType( "transis" , &PyTypeTransistor , "" , false, "tfamily" ); + __cs.addType( "transpair", &PyTypeTransistorPair , "" , false, "tfamily" ); + __cs.addType( "cdrnpair" , &PyTypeCommonDrain , "" , false, "transpair" ); + __cs.addType( "cgatepair", &PyTypeCommonGatePair , "" , false, "transpair" ); + __cs.addType( "csrcpair" , &PyTypeCommonSourcePair , "" , false, "transpair" ); + __cs.addType( "ccpair" , &PyTypeCrossCoupledPair , "" , false, "transpair" ); + __cs.addType( "diffpair" , &PyTypeDifferentialPair , "" , false, "transpair" ); + __cs.addType( "levshift" , &PyTypeLevelShifter , "" , false, "transpair" ); + __cs.addType( "scurmirr" , &PyTypeSimpleCurrentMirror , "" , false, "transpair" ); + __cs.addType( "cascode" , &PyTypeCascode , "" , false, "transpair" ); + + __cs.addType( "cfamily" , &PyTypeCapacitorFamily , "" , false, "device" ); + __cs.addType( "mimcapa" , &PyTypeMIMCapacitor , "" , false, "cfamily" ); + + __cs.addType( "transarg" , &PyTypeTransistorArguments , "" , false ); + __cs.addType( "transmarg", &PyTypeTransistorMultiArguments, "", false ); + __cs.addType( "capaarg" , &PyTypeCapacitorArguments , "" , false ); + __cs.addType( "parameter", &PyTypeParameter , "" , false ); + __cs.addType( "capapar" , &PyTypeCapacitorParameter , "" , false, "parameter" ); + __cs.addType( "choicepar", &PyTypeChoiceParameter , "" , false, "parameter" ); + __cs.addType( "ffpar" , &PyTypeFormFactorParameter , "" , false, "parameter" ); + __cs.addType( "mcboxpar" , &PyTypeMCheckBoxParameter , "" , false, "parameter" ); + __cs.addType( "sboxpar" , &PyTypeSpinBoxParameter , "" , false, "parameter" ); + __cs.addType( "steppar" , &PyTypeStepParameter , "" , false, "parameter" ); + __cs.addType( "laygen" , &PyTypeLayoutGenerator , "" , false ); + + + PyObject* module = Py_InitModule( "Analog", PyAnalog_Methods ); + if (module == NULL) { + cerr << "[ERROR]\n" + << " Failed to initialize Analog module." << endl; + return; + } + + Py_INCREF( &PyTypeTransistorFamily ); + PyModule_AddObject( module, "Device" , (PyObject*)&PyTypeDevice ); + Py_INCREF( &PyTypeDevice ); + PyModule_AddObject( module, "TransistorFamily" , (PyObject*)&PyTypeTransistorFamily ); + Py_INCREF( &PyTypeTransistor ); + PyModule_AddObject( module, "Transistor" , (PyObject*)&PyTypeTransistor ); + Py_INCREF( &PyTypeTransistorPair ); + PyModule_AddObject( module, "TransistorPair" , (PyObject*)&PyTypeTransistorPair ); + Py_INCREF( &PyTypeCommonDrain ); + PyModule_AddObject( module, "CommonDrain" , (PyObject*)&PyTypeCommonDrain ); + Py_INCREF( &PyTypeCommonGatePair ); + PyModule_AddObject( module, "CommonGatePair" , (PyObject*)&PyTypeCommonGatePair ); + Py_INCREF( &PyTypeCommonSourcePair ); + PyModule_AddObject( module, "CommonSourcePair" , (PyObject*)&PyTypeCommonSourcePair ); + Py_INCREF( &PyTypeCrossCoupledPair ); + PyModule_AddObject( module, "CrossCoupledPair" , (PyObject*)&PyTypeCrossCoupledPair ); + Py_INCREF( &PyTypeDifferentialPair ); + PyModule_AddObject( module, "DifferentialPair" , (PyObject*)&PyTypeDifferentialPair ); + Py_INCREF( &PyTypeLevelShifter ); + PyModule_AddObject( module, "LevelShifter" , (PyObject*)&PyTypeLevelShifter ); + Py_INCREF( &PyTypeSimpleCurrentMirror ); + PyModule_AddObject( module, "SimpleCurrentMirror", (PyObject*)&PyTypeSimpleCurrentMirror ); + Py_INCREF( &PyTypeCascode ); + PyModule_AddObject( module, "Cascode" , (PyObject*)&PyTypeCascode ); + + Py_INCREF( &PyTypeCapacitorFamily ); + PyModule_AddObject( module, "CapacitorFamily" , (PyObject*)&PyTypeCapacitorFamily ); + Py_INCREF( &PyTypeMIMCapacitor ); + PyModule_AddObject( module, "MIMCapacitor" , (PyObject*)&PyTypeMIMCapacitor ); + + Py_INCREF( &PyTypeParameter ); + PyModule_AddObject( module, "Parameter" , (PyObject*)&PyTypeParameter ); + Py_INCREF( &PyTypeCapacitorParameter ); + PyModule_AddObject( module, "CapacitorParameter" , (PyObject*)&PyTypeCapacitorParameter ); + Py_INCREF( &PyTypeChoiceParameter ); + PyModule_AddObject( module, "ChoiceParameter" , (PyObject*)&PyTypeChoiceParameter ); + Py_INCREF( &PyTypeFormFactorParameter ); + PyModule_AddObject( module, "FormFactorParameter", (PyObject*)&PyTypeFormFactorParameter ); + Py_INCREF( &PyTypeMCheckBoxParameter ); + PyModule_AddObject( module, "MCheckBoxParameter" , (PyObject*)&PyTypeMCheckBoxParameter ); + Py_INCREF( &PyTypeSpinBoxParameter ); + PyModule_AddObject( module, "SpinBoxParameter" , (PyObject*)&PyTypeSpinBoxParameter ); + Py_INCREF( &PyTypeStepParameter ); + PyModule_AddObject( module, "StepParameter" , (PyObject*)&PyTypeStepParameter ); + Py_INCREF( &PyTypeLayoutGenerator ); + PyModule_AddObject( module, "LayoutGenerator" , (PyObject*)&PyTypeLayoutGenerator ); + + PyDevice_postModuleInit(); + PyTransistorFamily_postModuleInit(); + PyCapacitorFamily_postModuleInit(); + PyParameter_postModuleInit(); + PyLayoutGenerator_postModuleInit(); + + //Py_INCREF( &PyTypeDevice ); + //PyModule_AddObject( module, "Device" , (PyObject*)&PyTypeDevice ); + //Py_INCREF( &PyTypeTransistorArguments ); + //PyModule_AddObject( module, "TransistorArguments", (PyObject*)&PyTypeTransistorArguments ); + + //PyObject* dictionnary = PyModule_GetDict ( module ); + //trace_off(); + } + + +} // extern "C". + +#endif // End of Python Module Code Part. + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyBJTArguments.cpp b/hurricane/src/analog/PyBJTArguments.cpp new file mode 100644 index 00000000..37e00d66 --- /dev/null +++ b/hurricane/src/analog/PyBJTArguments.cpp @@ -0,0 +1,86 @@ +// -*- C++ -*- +// +// This file is part of the Coriols Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyBJTArguments.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyHurricane.h" +#include "hurricane/analog/PyBJTArguments.h" +#include "hurricane/analog/PyDevice.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(BJTArguments,argument,function) + +// +=================================================================+ +// | "PyBJTArguments" Python Module Code Part | +// +=================================================================+ + +#if defined(__PYTHON_MODULE__) + + // +-------------------------------------------------------------+ + // | "PyBJTArguments" Attribute Methods | + // +-------------------------------------------------------------+ + + // --------------------------------------------------------------- + // Standart Destroy (Attribute). + DirectDestroyAttribute(PyBJTArguments_destroy, PyBJTArguments) + + + // Standart Accessors (Attributes). + DirectGetBoolAttribute(PyBJTArguments_isNPN , isNPN , PyBJTArguments, BJTArguments) + DirectGetBoolAttribute(PyBJTArguments_isExternalDummy, isExternalDummy , PyBJTArguments, BJTArguments) + DirectGetUIntAttribute(PyBJTArguments_getM , getM , PyBJTArguments, BJTArguments) + DirectGetUIntAttribute(PyBJTArguments_getN , getN , PyBJTArguments, BJTArguments) + + + // --------------------------------------------------------------- + // PyBJTArguments Attribute Method table. + + PyMethodDef PyBJTArguments_Methods[] = + { { "isNPN" , (PyCFunction)PyBJTArguments_isNPN , METH_NOARGS , "Returns true if NPN, false for PNP." } + , { "isExternalDummy" , (PyCFunction)PyBJTArguments_isExternalDummy , METH_NOARGS , "Returns true if there sre external dummies." } + , { "getM" , (PyCFunction)PyBJTArguments_getM , METH_NOARGS , "Returns m value." } + , { "getN" , (PyCFunction)PyBJTArguments_getN , METH_NOARGS , "Returns n value." } + , { "destroy" , (PyCFunction)PyBJTArguments_destroy , METH_NOARGS , "Destroy associated hurricane object, the python object remains." } + , {NULL, NULL, 0, NULL} /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyBJTArguments" Object Methods | + // +-------------------------------------------------------------+ + + DirectDeleteMethod(PyBJTArguments_DeAlloc,PyBJTArguments) + PyTypeObjectLinkPyType(BJTArguments) + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyBJTArguments" Shared Library Code Part | +// +=================================================================+ + + PyTypeObjectDefinitions(BJTArguments) + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyCapacitorArguments.cpp b/hurricane/src/analog/PyCapacitorArguments.cpp new file mode 100644 index 00000000..e8b23548 --- /dev/null +++ b/hurricane/src/analog/PyCapacitorArguments.cpp @@ -0,0 +1,71 @@ +// -*- C++ -*- +// +// This file is part of the Coriols Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyCapacitorArguments.h" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyHurricane.h" +#include "hurricane/analog/PyCapacitorArguments.h" +#include "hurricane/analog/PyDevice.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(CapacitorArguments,argument,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyCapacitorArguments" Python Module Code Part | +// +=================================================================+ + + DirectDestroyAttribute(PyCapacitorArguments_destroy, PyCapacitorArguments) + DirectGetDoubleAttribute(PyCapacitorArguments_getC, getC, PyCapacitorArguments, CapacitorArguments) + + + // --------------------------------------------------------------- + // PyCapacitorArguments Attribute Method table. + + PyMethodDef PyCapacitorArguments_Methods[] = + { { "getC" , (PyCFunction)PyCapacitorArguments_getC , METH_NOARGS , "Returns C value." } + , { "destroy" , (PyCFunction)PyCapacitorArguments_destroy, METH_NOARGS , "Destroy associated hurricane object, the python object remains." } + , {NULL, NULL, 0, NULL} /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyCapacitorArguments" Object Methods | + // +-------------------------------------------------------------+ + + DirectDeleteMethod(PyCapacitorArguments_DeAlloc,PyCapacitorArguments) + PyTypeObjectLinkPyType(CapacitorArguments) + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyCapacitorArguments" Shared Library Code Part | +// +=================================================================+ + + PyTypeObjectDefinitions(CapacitorArguments) + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyCapacitorFamily.cpp b/hurricane/src/analog/PyCapacitorFamily.cpp new file mode 100644 index 00000000..cb7956f5 --- /dev/null +++ b/hurricane/src/analog/PyCapacitorFamily.cpp @@ -0,0 +1,115 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyCapacitorFamily.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/PyCapacitorFamily.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(CapacitorFamily,family,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyCapacitorFamily" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyCapacitorFamily_getType ( PyCapacitorFamily* self ) + { + CapacitorFamily::Type type = CapacitorFamily::MIM; + + HTRY + METHOD_HEAD ( "CapacitorFamily.getType()" ) + type = family->getType(); + HCATCH + + return Py_BuildValue( "i", (int)type ); + } + + + DirectGetBoolAttribute (PyCapacitorFamily_isPIP ,isPIP ,PyCapacitorFamily,CapacitorFamily) + DirectGetBoolAttribute (PyCapacitorFamily_isMIM ,isMIM ,PyCapacitorFamily,CapacitorFamily) + DirectGetBoolAttribute (PyCapacitorFamily_isMOM ,isMOM ,PyCapacitorFamily,CapacitorFamily) + DirectGetIntAttribute (PyCapacitorFamily_getRow,getRow,PyCapacitorFamily,CapacitorFamily) + + DirectGetDoubleAttribute(PyCapacitorFamily_getCE ,getCE ,PyCapacitorFamily,CapacitorFamily) + DirectSetDoubleAttribute(PyCapacitorFamily_setCE ,setCE ,PyCapacitorFamily,CapacitorFamily) + + + // --------------------------------------------------------------- + // PyCapacitorFamily Attribute Method table. + + PyMethodDef PyCapacitorFamily_Methods[] = + { { "getType" , (PyCFunction)PyCapacitorFamily_getType , METH_NOARGS + , "Returns the type of the transistor (as a numric constant)." } + , { "isPIP" , (PyCFunction)PyCapacitorFamily_isPIP , METH_NOARGS + , "Returns True if it is a PIP capacitor." } + , { "isMIM" , (PyCFunction)PyCapacitorFamily_isMIM , METH_NOARGS + , "Returns True if it is a MIM capacitor." } + , { "isMOM" , (PyCFunction)PyCapacitorFamily_isMOM , METH_NOARGS + , "Returns True if it is a MOM capacitor." } + , { "getCE" , (PyCFunction)PyCapacitorFamily_getCE , METH_NOARGS + , "Capacitor value C (requested)." } + , { "setCE" , (PyCFunction)PyCapacitorFamily_setCE , METH_VARARGS + , "Capacitor value C (requested)." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyCapacitorFamily" Object Methods | + // +-------------------------------------------------------------+ + + DBoDeleteMethod(CapacitorFamily) + PyTypeObjectLinkPyType(CapacitorFamily) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyCapacitorFamily" Shared Library Code Part | +// +=================================================================+ + + DBoLinkCreateMethod(CapacitorFamily) + PyTypeInheritedObjectDefinitions(CapacitorFamily, Device) + + + extern void PyCapacitorFamily_postModuleInit () + { + PyObject* constant; + + LoadObjectConstant(PyTypeCapacitorFamily.tp_dict,CapacitorFamily::PIP,"PIP"); + LoadObjectConstant(PyTypeCapacitorFamily.tp_dict,CapacitorFamily::MIM,"MIM"); + LoadObjectConstant(PyTypeCapacitorFamily.tp_dict,CapacitorFamily::MOM,"MOM"); + } + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyCapacitorParameter.cpp b/hurricane/src/analog/PyCapacitorParameter.cpp new file mode 100644 index 00000000..bdadd79e --- /dev/null +++ b/hurricane/src/analog/PyCapacitorParameter.cpp @@ -0,0 +1,80 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyCapacitorParameter.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/PyCapacitorParameter.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(CapacitorParameter,capacitorParameter,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyCapacitorParameter" Python Module Code Part | +// +=================================================================+ + + + DirectGetDoubleAttribute(PyCapacitorParameter_getValue, getValue, PyCapacitorParameter, CapacitorParameter) + DirectSetDoubleAttribute(PyCapacitorParameter_setValue, setValue, PyCapacitorParameter, CapacitorParameter) + + // --------------------------------------------------------------- + // PyCapacitorParameter Attribute Method table. + + PyMethodDef PyCapacitorParameter_Methods[] = + { { "getValue" , (PyCFunction)PyCapacitorParameter_getValue, METH_NOARGS + , "Self explanatory." } + , { "setValue" , (PyCFunction)PyCapacitorParameter_setValue, METH_VARARGS + , "Self explanatory." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyCapacitorParameter" Object Methods | + // +-------------------------------------------------------------+ + + + PythonOnlyDeleteMethod(CapacitorParameter) + PyTypeObjectLinkPyType(CapacitorParameter) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyCapacitorParameter" Shared Library Code Part | +// +=================================================================+ + + + LinkCreateMethod(CapacitorParameter) + PyTypeInheritedObjectDefinitions(CapacitorParameter, Parameter) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyCascode.cpp b/hurricane/src/analog/PyCascode.cpp new file mode 100644 index 00000000..961703aa --- /dev/null +++ b/hurricane/src/analog/PyCascode.cpp @@ -0,0 +1,127 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyCascode.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyLibrary.h" +#include "hurricane/analog/PyCascode.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._baseObject._baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject._baseObject._baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Cascode,transistor,function) + +#if defined(__PYTHON_MODULE__) + + +// +=================================================================+ +// | "PyCascode" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyCascode_create ( PyObject*, PyObject* args ) + { + cdebug.log(49) << "PyCascode_create()" << endl; + + Cascode* transistor = NULL; + + HTRY + PyObject* pyLibrary = NULL; + char* name = NULL; + long pyType = 0; + PyObject* pyBulkConnected = NULL; + + if (PyArg_ParseTuple( args + , "OslO:Cascode.create" + , &pyLibrary + , &name + , &pyType + , &pyBulkConnected + )) { + if (not IsPyLibrary(pyLibrary)) { + PyErr_SetString ( ConstructorError, "Cascode.create(): First argument is not of type Library." ); + return NULL; + } + switch ( pyType ) { + case Cascode::NMOS: + case Cascode::PMOS: break; + default: + PyErr_SetString ( ConstructorError, "Cascode.create(): Type argument is neither NMOS nor PMOS." ); + return NULL; + } + + transistor = Cascode::create( PYLIBRARY_O(pyLibrary) + , Name(name) + , (Cascode::Type)pyType + , PyObject_IsTrue(pyBulkConnected) + ); + } else { + PyErr_SetString ( ConstructorError, "Bad parameters given to Cascode.create()." ); + return NULL; + } + HCATCH + + return PyCascode_Link(transistor); + } + + + DBoDestroyAttribute(PyCascode_destroy, PyCascode) + + + // --------------------------------------------------------------- + // PyCascode Attribute Method table. + + PyMethodDef PyCascode_Methods[] = + { { "create" , (PyCFunction)PyCascode_create , METH_VARARGS|METH_STATIC + , "Create an anlogic device made of one transistor." } + , { "destroy" , (PyCFunction)PyCascode_destroy , METH_NOARGS + , "Destroys associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyCascode" Object Methods | + // +-------------------------------------------------------------+ + + DBoDeleteMethod(Cascode) + PyTypeObjectLinkPyType(Cascode) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyCascode" Shared Library Code Part | +// +=================================================================+ + + + DBoLinkCreateMethod(Cascode) + PyTypeInheritedObjectDefinitions(Cascode, TransistorPair) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyChoiceParameter.cpp b/hurricane/src/analog/PyChoiceParameter.cpp new file mode 100644 index 00000000..beec92a9 --- /dev/null +++ b/hurricane/src/analog/PyChoiceParameter.cpp @@ -0,0 +1,81 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyChoiceParameter.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/PyChoiceParameter.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(ChoiceParameter,choiceParameter,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyChoiceParameter" Python Module Code Part | +// +=================================================================+ + + + DirectGetStringAttribute (PyChoiceParameter_getValue, getValue, PyChoiceParameter, ChoiceParameter) + DirectSetCStringAttribute(PyChoiceParameter_setValue, setValue, PyChoiceParameter, ChoiceParameter) + + + // --------------------------------------------------------------- + // PyChoiceParameter Attribute Method table. + + PyMethodDef PyChoiceParameter_Methods[] = + { { "getValue" , (PyCFunction)PyChoiceParameter_getValue, METH_NOARGS + , "Self explanatory." } + , { "setValue" , (PyCFunction)PyChoiceParameter_setValue, METH_VARARGS + , "Self explanatory." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyChoiceParameter" Object Methods | + // +-------------------------------------------------------------+ + + + PythonOnlyDeleteMethod(ChoiceParameter) + PyTypeObjectLinkPyType(ChoiceParameter) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyChoiceParameter" Shared Library Code Part | +// +=================================================================+ + + + LinkCreateMethod(ChoiceParameter) + PyTypeInheritedObjectDefinitions(ChoiceParameter, Parameter) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyCommonDrain.cpp b/hurricane/src/analog/PyCommonDrain.cpp new file mode 100644 index 00000000..53699746 --- /dev/null +++ b/hurricane/src/analog/PyCommonDrain.cpp @@ -0,0 +1,130 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyCommonDrain.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyLibrary.h" +#include "hurricane/analog/PyCommonDrain.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._baseObject._baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject._baseObject._baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(CommonDrain,transistor,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyCommonDrain" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyCommonDrain_create ( PyObject*, PyObject* args ) + { + cdebug.log(49) << "PyCommonDrain_create()" << endl; + + CommonDrain* transistor = NULL; + + HTRY + PyObject* pyLibrary = NULL; + char* name = NULL; + long pyType = 0; + PyObject* pyBulkConnected = NULL; + + if (PyArg_ParseTuple( args + , "OslO:CommonDrain.create" + , &pyLibrary + , &name + , &pyType + , &pyBulkConnected + )) { + if (not IsPyLibrary(pyLibrary)) { + PyErr_SetString ( ConstructorError, "CommonDrain.create(): First argument is not of type Library." ); + return NULL; + } + switch ( pyType ) { + case CommonDrain::NMOS: + case CommonDrain::PMOS: break; + default: + PyErr_SetString ( ConstructorError, "CommonDrain.create(): Type argument is neither NMOS nor PMOS." ); + return NULL; + } + + transistor = CommonDrain::create( PYLIBRARY_O(pyLibrary) + , Name(name) + , (CommonDrain::Type)pyType + , PyObject_IsTrue(pyBulkConnected) + ); + } else { + PyErr_SetString ( ConstructorError, "Bad parameters given to CommonDrain.create()." ); + return NULL; + } + HCATCH + + return PyCommonDrain_Link(transistor); + } + + + // Standart Destroy (Attribute). + DBoDestroyAttribute(PyCommonDrain_destroy, PyCommonDrain) + + //GetNameMethod(CommonDrain, device) + + + // --------------------------------------------------------------- + // PyCommonDrain Attribute Method table. + + PyMethodDef PyCommonDrain_Methods[] = + { { "create" , (PyCFunction)PyCommonDrain_create , METH_VARARGS|METH_STATIC + , "Create an anlogic device made of one transistor." } + , { "destroy" , (PyCFunction)PyCommonDrain_destroy , METH_NOARGS + , "Destroys associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyCommonDrain" Object Methods | + // +-------------------------------------------------------------+ + + + DBoDeleteMethod(CommonDrain) + PyTypeObjectLinkPyType(CommonDrain) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyCommonDrain" Shared Library Code Part | +// +=================================================================+ + + + DBoLinkCreateMethod(CommonDrain) + PyTypeInheritedObjectDefinitions(CommonDrain, TransistorPair) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyCommonGatePair.cpp b/hurricane/src/analog/PyCommonGatePair.cpp new file mode 100644 index 00000000..15c9e773 --- /dev/null +++ b/hurricane/src/analog/PyCommonGatePair.cpp @@ -0,0 +1,130 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyCommonGatePair.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyLibrary.h" +#include "hurricane/analog/PyCommonGatePair.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._baseObject._baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject._baseObject._baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(CommonGatePair,transistor,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyCommonGatePair" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyCommonGatePair_create ( PyObject*, PyObject* args ) + { + cdebug.log(49) << "PyCommonGatePair_create()" << endl; + + CommonGatePair* transistor = NULL; + + HTRY + PyObject* pyLibrary = NULL; + char* name = NULL; + long pyType = 0; + PyObject* pyBulkConnected = NULL; + + if (PyArg_ParseTuple( args + , "OslO:CommonGatePair.create" + , &pyLibrary + , &name + , &pyType + , &pyBulkConnected + )) { + if (not IsPyLibrary(pyLibrary)) { + PyErr_SetString ( ConstructorError, "CommonGatePair.create(): First argument is not of type Library." ); + return NULL; + } + switch ( pyType ) { + case CommonGatePair::NMOS: + case CommonGatePair::PMOS: break; + default: + PyErr_SetString ( ConstructorError, "CommonGatePair.create(): Type argument is neither NMOS nor PMOS." ); + return NULL; + } + + transistor = CommonGatePair::create( PYLIBRARY_O(pyLibrary) + , Name(name) + , (CommonGatePair::Type)pyType + , PyObject_IsTrue(pyBulkConnected) + ); + } else { + PyErr_SetString ( ConstructorError, "Bad parameters given to CommonGatePair.create()." ); + return NULL; + } + HCATCH + + return PyCommonGatePair_Link(transistor); + } + + + // Standart Destroy (Attribute). + DBoDestroyAttribute(PyCommonGatePair_destroy, PyCommonGatePair) + + //GetNameMethod(CommonGatePair, device) + + + // --------------------------------------------------------------- + // PyCommonGatePair Attribute Method table. + + PyMethodDef PyCommonGatePair_Methods[] = + { { "create" , (PyCFunction)PyCommonGatePair_create , METH_VARARGS|METH_STATIC + , "Create an anlogic device made of one transistor." } + , { "destroy" , (PyCFunction)PyCommonGatePair_destroy , METH_NOARGS + , "Destroys associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyCommonGatePair" Object Methods | + // +-------------------------------------------------------------+ + + + DBoDeleteMethod(CommonGatePair) + PyTypeObjectLinkPyType(CommonGatePair) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyCommonGatePair" Shared Library Code Part | +// +=================================================================+ + + + DBoLinkCreateMethod(CommonGatePair) + PyTypeInheritedObjectDefinitions(CommonGatePair, TransistorPair) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyCommonSourcePair.cpp b/hurricane/src/analog/PyCommonSourcePair.cpp new file mode 100644 index 00000000..52d77aad --- /dev/null +++ b/hurricane/src/analog/PyCommonSourcePair.cpp @@ -0,0 +1,131 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyCommonSourcePair.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyLibrary.h" +#include "hurricane/analog/PyCommonSourcePair.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._baseObject._baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject._baseObject._baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(CommonSourcePair,transistor,function) + +#if defined(__PYTHON_MODULE__) + + +// +=================================================================+ +// | "PyCommonSourcePair" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyCommonSourcePair_create ( PyObject*, PyObject* args ) + { + cdebug.log(49) << "PyCommonSourcePair_create()" << endl; + + CommonSourcePair* transistor = NULL; + + HTRY + PyObject* pyLibrary = NULL; + char* name = NULL; + long pyType = 0; + PyObject* pyBulkConnected = NULL; + + if (PyArg_ParseTuple( args + , "OslO:CommonSourcePair.create" + , &pyLibrary + , &name + , &pyType + , &pyBulkConnected + )) { + if (not IsPyLibrary(pyLibrary)) { + PyErr_SetString ( ConstructorError, "CommonSourcePair.create(): First argument is not of type Library." ); + return NULL; + } + switch ( pyType ) { + case CommonSourcePair::NMOS: + case CommonSourcePair::PMOS: break; + default: + PyErr_SetString ( ConstructorError, "CommonSourcePair.create(): Type argument is neither NMOS nor PMOS." ); + return NULL; + } + + transistor = CommonSourcePair::create( PYLIBRARY_O(pyLibrary) + , Name(name) + , (CommonSourcePair::Type)pyType + , PyObject_IsTrue(pyBulkConnected) + ); + } else { + PyErr_SetString ( ConstructorError, "Bad parameters given to CommonSourcePair.create()." ); + return NULL; + } + HCATCH + + return PyCommonSourcePair_Link(transistor); + } + + + // Standart Destroy (Attribute). + DBoDestroyAttribute(PyCommonSourcePair_destroy, PyCommonSourcePair) + + //GetNameMethod(CommonSourcePair, device) + + + // --------------------------------------------------------------- + // PyCommonSourcePair Attribute Method table. + + PyMethodDef PyCommonSourcePair_Methods[] = + { { "create" , (PyCFunction)PyCommonSourcePair_create , METH_VARARGS|METH_STATIC + , "Create an anlogic device made of one transistor." } + , { "destroy" , (PyCFunction)PyCommonSourcePair_destroy , METH_NOARGS + , "Destroys associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyCommonSourcePair" Object Methods | + // +-------------------------------------------------------------+ + + + DBoDeleteMethod(CommonSourcePair) + PyTypeObjectLinkPyType(CommonSourcePair) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyCommonSourcePair" Shared Library Code Part | +// +=================================================================+ + + + DBoLinkCreateMethod(CommonSourcePair) + PyTypeInheritedObjectDefinitions(CommonSourcePair, TransistorPair) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyCrossCoupledPair.cpp b/hurricane/src/analog/PyCrossCoupledPair.cpp new file mode 100644 index 00000000..9531ebbe --- /dev/null +++ b/hurricane/src/analog/PyCrossCoupledPair.cpp @@ -0,0 +1,130 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyCrossCoupledPair.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyLibrary.h" +#include "hurricane/analog/PyCrossCoupledPair.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._baseObject._baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject._baseObject._baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(CrossCoupledPair,transistor,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyCrossCoupledPair" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyCrossCoupledPair_create ( PyObject*, PyObject* args ) + { + cdebug.log(49) << "PyCrossCoupledPair_create()" << endl; + + CrossCoupledPair* transistor = NULL; + + HTRY + PyObject* pyLibrary = NULL; + char* name = NULL; + long pyType = 0; + PyObject* pyBulkConnected = NULL; + + if (PyArg_ParseTuple( args + , "OslO:CrossCoupledPair.create" + , &pyLibrary + , &name + , &pyType + , &pyBulkConnected + )) { + if (not IsPyLibrary(pyLibrary)) { + PyErr_SetString ( ConstructorError, "CrossCoupledPair.create(): First argument is not of type Library." ); + return NULL; + } + switch ( pyType ) { + case CrossCoupledPair::NMOS: + case CrossCoupledPair::PMOS: break; + default: + PyErr_SetString ( ConstructorError, "CrossCoupledPair.create(): Type argument is neither NMOS nor PMOS." ); + return NULL; + } + + transistor = CrossCoupledPair::create( PYLIBRARY_O(pyLibrary) + , Name(name) + , (CrossCoupledPair::Type)pyType + , PyObject_IsTrue(pyBulkConnected) + ); + } else { + PyErr_SetString ( ConstructorError, "Bad parameters given to CrossCoupledPair.create()." ); + return NULL; + } + HCATCH + + return PyCrossCoupledPair_Link(transistor); + } + + + // Standart Destroy (Attribute). + DBoDestroyAttribute(PyCrossCoupledPair_destroy, PyCrossCoupledPair) + + //GetNameMethod(CrossCoupledPair, device) + + + // --------------------------------------------------------------- + // PyCrossCoupledPair Attribute Method table. + + PyMethodDef PyCrossCoupledPair_Methods[] = + { { "create" , (PyCFunction)PyCrossCoupledPair_create , METH_VARARGS|METH_STATIC + , "Create an anlogic device made of one transistor." } + , { "destroy" , (PyCFunction)PyCrossCoupledPair_destroy , METH_NOARGS + , "Destroys associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyCrossCoupledPair" Object Methods | + // +-------------------------------------------------------------+ + + + DBoDeleteMethod(CrossCoupledPair) + PyTypeObjectLinkPyType(CrossCoupledPair) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyCrossCoupledPair" Shared Library Code Part | +// +=================================================================+ + + + DBoLinkCreateMethod(CrossCoupledPair) + PyTypeInheritedObjectDefinitions(CrossCoupledPair, TransistorPair) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyDevice.cpp b/hurricane/src/analog/PyDevice.cpp new file mode 100644 index 00000000..da5b3aa6 --- /dev/null +++ b/hurricane/src/analog/PyDevice.cpp @@ -0,0 +1,211 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2010-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyDevice.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyHurricane.h" +#include "hurricane/isobar/PyLayer.h" +#include "hurricane/isobar/PyBox.h" +#include "hurricane/isobar/PyNet.h" +#include "hurricane/isobar/PyVertical.h" +#include "hurricane/isobar/PyHorizontal.h" +#include "hurricane/isobar/PyPad.h" +#include "hurricane/isobar/PyContact.h" +#include "hurricane/isobar/PyPoint.h" +#include "hurricane/isobar/PyReference.h" +#include "hurricane/analog/PyDevice.h" +#include "hurricane/analog/PyParameter.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Device,device,function) + + +// +=================================================================+ +// | "PyDevice" Python Module Code Part | +// +=================================================================+ + +#if defined(__PYTHON_MODULE__) + + + // +-------------------------------------------------------------+ + // | "PyDevice" Attribute Methods | + // +-------------------------------------------------------------+ + + + static PyObject* PyDevice_getParameter ( PyDevice* self, PyObject* args ) + { + cdebug.log(49) << "PyDevice_getParameter()" << endl; + + Parameter* parameter = NULL; + + HTRY + METHOD_HEAD ( "Device.getParameter()" ) + + char* id = NULL; + + if (PyArg_ParseTuple( args, "s:Device.getParameter", &id )) { + parameter = device->getParameter( id ); + } else { + PyErr_SetString ( ConstructorError, "Bad parameters given to Device.getParameter()." ); + return NULL; + } + HCATCH + + return PyParameter_LinkDerived(parameter); + } + + + static PyObject* PyDevice_setRestrictions ( PyDevice* self, PyObject* args ) + { + cdebug.log(49) << "PyDevice_setRestrictions()" << endl; + + PyObject* pyNet = NULL; + unsigned int flags = 0; + + HTRY + METHOD_HEAD ( "Device.setRestrictions()" ) + + if (PyArg_ParseTuple( args, "OI:Device.setRestrictions", &pyNet, &flags )) { + if (not IsPyNet(pyNet)) { + PyErr_SetString ( ConstructorError, "Device.setRestrictions(): First argument is not of type Net." ); + return NULL; + } + device->setRestrictions2( PYNET_O(pyNet), (unsigned int)flags ); + } else { + PyErr_SetString ( ConstructorError, "Bad parameters number or type given to Device.setRestrictions()." ); + return NULL; + } + HCATCH + + Py_RETURN_NONE; + } + + + static PyObject* PyDevice_getRestrictions ( PyDevice* self, PyObject* args ) + { + cdebug.log(49) << "PyDevice_getRestrictions()" << endl; + + PyObject* pyNet = NULL; + unsigned int flags = 0; + + HTRY + METHOD_HEAD ( "Device.getRestrictions()" ) + + if (PyArg_ParseTuple( args, "O:Device.getRestrictions", &pyNet )) { + if (not IsPyNet(pyNet)) { + PyErr_SetString ( ConstructorError, "Device.getRestrictions(): First argument is not of type Net." ); + return NULL; + } + flags = device->getRestrictions2( PYNET_O(pyNet) ); + } else { + PyErr_SetString ( ConstructorError, "Bad parameters number or type given to Device.setRestrictions()." ); + return NULL; + } + HCATCH + + return Py_BuildValue( "I", flags ); + } + + + // Standart Accessors (Attributes). + DirectGetNameAttribute (PyDevice_getDeviceName ,getDeviceName ,PyDevice,Device) + DirectGetStringAttribute(PyDevice_getLayoutScript ,getLayoutScript ,PyDevice,Device) +//DirectGetStringAttribute(PyDevice_checkLayoutOnPhysicalGrid,checkLayoutOnPhysicalGrid,PyDevice,Device) + DirectGetDoubleAttribute(PyDevice_getTemperature ,getTemperature ,PyDevice,Device) + DirectSetDoubleAttribute(PyDevice_setTemperature ,setTemperature ,PyDevice,Device) + + DirectVoidMethod(Device,device,destroyLayout) + + // Standart Destroy (Attribute). + DBoDestroyAttribute(PyDevice_destroy, PyDevice) + + + // --------------------------------------------------------------- + // PyDevice Attribute Method table. + + PyMethodDef PyDevice_Methods[] = + { { "getDeviceName" , (PyCFunction)PyDevice_getDeviceName , METH_NOARGS + , "Returns the name of the electrical circuit implemented by the device." } + , { "getLayoutScript" , (PyCFunction)PyDevice_getLayoutScript , METH_NOARGS + , "Returns the name of the Python script actually used to generate the layout." } + //, { "checkLayoutOnPhysicalGrid" + // , (PyCFunction)PyDevice_checkLayoutOnPhysicalGrid, METH_NOARGS + // , "Return a list of all the components (rectangles) not on foundry grid." } + , { "destroyLayout" , (PyCFunction)PyDevice_destroyLayout , METH_NOARGS + , "Remove the layout (the netlist ." } + , { "getParameter" , (PyCFunction)PyDevice_getParameter , METH_VARARGS + , "Get a parameter by it's id." } + , { "getTemperature" , (PyCFunction)PyDevice_getTemperature , METH_NOARGS + , "Returns the temperature." } + , { "setTemperature" , (PyCFunction)PyDevice_setTemperature , METH_VARARGS + , "Sets the temperature." } + , { "setRestrictions" , (PyCFunction)PyDevice_setRestrictions , METH_VARARGS + , "Sets the access restrictions for the given net." } + , { "getRestrictions" , (PyCFunction)PyDevice_getRestrictions , METH_VARARGS + , "Returns the access restrictions for the given Net." } + , { "destroy" , (PyCFunction)PyDevice_destroy , METH_NOARGS + , "Destroys associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyDevice" Object Methods | + // +-------------------------------------------------------------+ + + + DBoDeleteMethod(Device) + PyTypeObjectLinkPyType(Device) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyDevice" Shared Library Code Part | +// +=================================================================+ + + + DBoLinkCreateMethod(Device) + PyTypeInheritedObjectDefinitions(Device, Cell) + + + extern void PyDevice_postModuleInit () + { + PyObject* constant; + + LoadObjectConstant(PyTypeDevice.tp_dict,Device::NorthBlocked,"NorthBlocked"); + LoadObjectConstant(PyTypeDevice.tp_dict,Device::SouthBlocked,"SouthBlocked"); + LoadObjectConstant(PyTypeDevice.tp_dict,Device::EastBlocked ,"EastBlocked" ); + LoadObjectConstant(PyTypeDevice.tp_dict,Device::WestBlocked ,"WestBlocked" ); + LoadObjectConstant(PyTypeDevice.tp_dict,Device::AllBlocked ,"AllBlocked" ); + } + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyDifferentialPair.cpp b/hurricane/src/analog/PyDifferentialPair.cpp new file mode 100644 index 00000000..9dfe99df --- /dev/null +++ b/hurricane/src/analog/PyDifferentialPair.cpp @@ -0,0 +1,130 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyDifferentialPair.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyLibrary.h" +#include "hurricane/analog/PyDifferentialPair.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._baseObject._baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject._baseObject._baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(DifferentialPair,transistor,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyDifferentialPair" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyDifferentialPair_create ( PyObject*, PyObject* args ) + { + cdebug.log(49) << "PyDifferentialPair_create()" << endl; + + DifferentialPair* transistor = NULL; + + HTRY + PyObject* pyLibrary = NULL; + char* name = NULL; + long pyType = 0; + PyObject* pyBulkConnected = NULL; + + if (PyArg_ParseTuple( args + , "OslO:DifferentialPair.create" + , &pyLibrary + , &name + , &pyType + , &pyBulkConnected + )) { + if (not IsPyLibrary(pyLibrary)) { + PyErr_SetString ( ConstructorError, "DifferentialPair.create(): First argument is not of type Library." ); + return NULL; + } + switch ( pyType ) { + case DifferentialPair::NMOS: + case DifferentialPair::PMOS: break; + default: + PyErr_SetString ( ConstructorError, "DifferentialPair.create(): Type argument is neither NMOS nor PMOS." ); + return NULL; + } + + transistor = DifferentialPair::create( PYLIBRARY_O(pyLibrary) + , Name(name) + , (DifferentialPair::Type)pyType + , PyObject_IsTrue(pyBulkConnected) + ); + } else { + PyErr_SetString ( ConstructorError, "Bad parameters given to DifferentialPair.create()." ); + return NULL; + } + HCATCH + + return PyDifferentialPair_Link(transistor); + } + + + // Standart Destroy (Attribute). + DBoDestroyAttribute(PyDifferentialPair_destroy, PyDifferentialPair) + + //GetNameMethod(DifferentialPair, device) + + + // --------------------------------------------------------------- + // PyDifferentialPair Attribute Method table. + + PyMethodDef PyDifferentialPair_Methods[] = + { { "create" , (PyCFunction)PyDifferentialPair_create , METH_VARARGS|METH_STATIC + , "Create an anlogic device made of one transistor." } + , { "destroy" , (PyCFunction)PyDifferentialPair_destroy , METH_NOARGS + , "Destroys associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyDifferentialPair" Object Methods | + // +-------------------------------------------------------------+ + + + DBoDeleteMethod(DifferentialPair) + PyTypeObjectLinkPyType(DifferentialPair) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyDifferentialPair" Shared Library Code Part | +// +=================================================================+ + + + DBoLinkCreateMethod(DifferentialPair) + PyTypeInheritedObjectDefinitions(DifferentialPair, TransistorPair) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyFormFactorParameter.cpp b/hurricane/src/analog/PyFormFactorParameter.cpp new file mode 100644 index 00000000..39f79099 --- /dev/null +++ b/hurricane/src/analog/PyFormFactorParameter.cpp @@ -0,0 +1,90 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyFormFactorParameter.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/PyFormFactorParameter.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(FormFactorParameter,ffParameter,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyFormFactorParameter" Python Module Code Part | +// +=================================================================+ + + + DirectGetLongAttribute(PyFormFactorParameter_getMin , getMin , PyFormFactorParameter, FormFactorParameter) + DirectGetLongAttribute(PyFormFactorParameter_getMax , getMax , PyFormFactorParameter, FormFactorParameter) + DirectGetLongAttribute(PyFormFactorParameter_getValue, getValue, PyFormFactorParameter, FormFactorParameter) + DirectSetLongAttribute(PyFormFactorParameter_setMax , setMax , PyFormFactorParameter, FormFactorParameter) + DirectSetLongAttribute(PyFormFactorParameter_setValue, setValue, PyFormFactorParameter, FormFactorParameter) + + + // --------------------------------------------------------------- + // PyFormFactorParameter Attribute Method table. + + PyMethodDef PyFormFactorParameter_Methods[] = + { { "getMin" , (PyCFunction)PyFormFactorParameter_getMin , METH_NOARGS + , "Self explanatory." } + , { "getMax" , (PyCFunction)PyFormFactorParameter_getMax , METH_NOARGS + , "Self explanatory." } + , { "getValue" , (PyCFunction)PyFormFactorParameter_getValue, METH_NOARGS + , "Self explanatory." } + , { "setMax" , (PyCFunction)PyFormFactorParameter_setMax , METH_NOARGS + , "Self explanatory." } + , { "setValue" , (PyCFunction)PyFormFactorParameter_setValue, METH_VARARGS + , "Self explanatory." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyFormFactorParameter" Object Methods | + // +-------------------------------------------------------------+ + + + PythonOnlyDeleteMethod(FormFactorParameter) + PyTypeObjectLinkPyType(FormFactorParameter) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyFormFactorParameter" Shared Library Code Part | +// +=================================================================+ + + + LinkCreateMethod(FormFactorParameter) + PyTypeInheritedObjectDefinitions(FormFactorParameter, Parameter) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyLayoutGenerator.cpp b/hurricane/src/analog/PyLayoutGenerator.cpp new file mode 100644 index 00000000..1c4b592d --- /dev/null +++ b/hurricane/src/analog/PyLayoutGenerator.cpp @@ -0,0 +1,377 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyLayoutGenerator.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyBox.h" +#include "hurricane/analog/PyDevice.h" +#include "hurricane/analog/PyLayoutGenerator.h" +#include + + +namespace Isobar { + + using std::cerr; + using std::endl; + using std::hex; + using std::ostringstream; + using Isobar::ProxyProperty; + using Isobar::ProxyError; + using Isobar::ConstructorError; + using Isobar::HurricaneError; + using Isobar::HurricaneWarning; + using Isobar::ParseOneArg; + using Isobar::ParseTwoArg; + using namespace Analog; + + +extern "C" { + + +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(LayoutGenerator,generator,function) + + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyLayoutGenerator" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyLayoutGenerator_getVerboseLevel ( PyObject* ) + { return Py_BuildValue( "i", LayoutGenerator::getVerboseLevel() ); } + + + static PyObject* PyLayoutGenerator_setVerboseLevel ( PyObject*, PyObject* args ) + { + int verboseLevel = 0; + if (PyArg_ParseTuple( args, "i:LayoutGenerator.setVerboseLevel", &verboseLevel )) { + switch ( verboseLevel ) { + case LayoutGenerator::Quiet: + case LayoutGenerator::Verbose: + case LayoutGenerator::VeryVerbose: + case LayoutGenerator::Debug: break; + default: + PyErr_SetString( ConstructorError, "LayoutGenerator.setVerboseLevel(): Unsupported integer value." ); + return NULL; + } + LayoutGenerator::setVerboseLevel( verboseLevel ); + } else { + PyErr_SetString( ConstructorError, "LayoutGenerator.setVerboseLevel(): Bad parameter type." ); + return NULL; + } + + Py_RETURN_NONE; + } + + + static PyObject* PyLayoutGenerator_getDeviceBox ( PyLayoutGenerator *self ) + { + METHOD_HEAD( "LayoutGenerator.getDeviceBox()" ) + + PyBox* pyBox = PyObject_NEW( PyBox, &PyTypeBox ); + if (pyBox == NULL) return NULL; + + HTRY + pyBox->_object = new Box ( self->ACCESS_OBJECT->getDeviceBox() ); + HCATCH + + return (PyObject*)pyBox; + } + + + static PyObject* PyLayoutGenerator_getActiveBox ( PyLayoutGenerator *self ) + { + METHOD_HEAD( "LayoutGenerator.getActiveBox()" ) + + PyBox* pyBox = PyObject_NEW( PyBox, &PyTypeBox ); + if (pyBox == NULL) return NULL; + + HTRY + pyBox->_object = new Box ( self->ACCESS_OBJECT->getDeviceBox() ); + HCATCH + + return (PyObject*)pyBox; + } + + + static PyObject* PyLayoutGenerator_getRow ( PyLayoutGenerator *self, PyObject* args ) + { + METHOD_HEAD( "LayoutGenerator.getRow()" ) + + int row = 0; + PyObject* pyRow = NULL; + + HTRY + if (PyArg_ParseTuple( args, "i:LayoutGenerator.getRow", &row )) { + pyRow = generator->getRow( row ); + if (not pyRow) Py_RETURN_NONE; + Py_INCREF( pyRow ); + } else { + PyErr_SetString( ConstructorError, "LayoutGenerator.getRow(): Bad parameter type." ); + return NULL; + } + HCATCH + + return pyRow; + } + + + static PyObject* PyLayoutGenerator_getDic ( PyLayoutGenerator *self, PyObject* args ) + { + METHOD_HEAD( "LayoutGenerator.getDic()" ) + + int column = 0; + PyObject* pyRow = NULL; + PyObject* pyDic = NULL; + + HTRY + if (PyArg_ParseTuple( args, "Oi:LayoutGenerator.getDic", &pyRow, &column )) { + pyDic = generator->getDic( pyRow, column ); + if (not pyDic) Py_RETURN_NONE; + Py_INCREF( pyDic ); + } else { + PyErr_SetString( ConstructorError, "LayoutGenerator.getDic(): Bad parameter type." ); + return NULL; + } + HCATCH + + return pyDic; + } + + + static PyObject* PyLayoutGenerator_getParamValue ( PyLayoutGenerator *self, PyObject* args ) + { + METHOD_HEAD( "LayoutGenerator.getParamValue()" ) + + char* paramName = NULL; + PyObject* pyDic = NULL; + PyObject* pyParamValue = NULL; + + HTRY + if (PyArg_ParseTuple( args, "Os:LayoutGenerator.getParamValue", &pyDic, ¶mName )) { + pyParamValue = generator->getParamValue( pyDic, paramName ); + if (not pyParamValue) Py_RETURN_NONE; + Py_INCREF( pyParamValue ); + } else { + PyErr_SetString( ConstructorError, "LayoutGenerator.getParamValue(): Bad parameter type." ); + return NULL; + } + HCATCH + + return pyParamValue; + } + + + static PyObject* PyLayoutGenerator_getParameterValue ( PyLayoutGenerator *self, PyObject* args ) + { + METHOD_HEAD( "LayoutGenerator.getParameterValue()" ) + + bool status = false; + double paramValue = 0.0; + PyObject* arg0 = NULL; + PyObject* arg1 = NULL; + PyObject* arg2 = NULL; + + HTRY + __cs.init( "LayoutGenerator.getParameterValue" ); + if (not PyArg_ParseTuple( args, "O&O&|O&:LayoutGenerator.getParameterValue" + , Converter, &arg0 + , Converter, &arg1 + , Converter, &arg2 + ) ) { + PyErr_SetString( ConstructorError, "LayoutGenerator.getParameterValue(): Invalid number of parameters." ); + return NULL; + //} + //if (__cs.getObjectIds() == ":string:string") { + // paramValue = generator->getParameterValue( PyString_AsString(arg0), PyString_AsString(arg1), status ); + } if (__cs.getObjectIds() == ":int:int:string") { + paramValue = generator->getParameterValue( PyInt_AsLong(arg0) + , PyInt_AsLong(arg1) + , PyString_AsString(arg2) + , status ); + } else { + PyErr_SetString( ConstructorError, "LayoutGenerator.getParameterValue(): Bad parameter type." ); + return NULL; + } + if (not status) Py_RETURN_NONE; + HCATCH + + return Py_BuildValue( "d", paramValue ); + } + + + static PyObject* PyLayoutGenerator_getMatrix ( PyLayoutGenerator* self ) + { + METHOD_HEAD("LayoutGenerator.getMatrix()") + PyObject* matrix = generator->getMatrix(); + if (not matrix) Py_RETURN_NONE; + Py_INCREF( matrix ); + return matrix; + } + + + static PyObject* PyLayoutGenerator_new ( PyTypeObject* type, PyObject* args, PyObject* kwds ) + { + cdebug.log(49) << "PyLayoutGenerator_new()" << endl; + + LayoutGenerator* generator = NULL; + PyLayoutGenerator* pyLayoutGenerator = (PyLayoutGenerator*)type->tp_alloc(type,0); + + HTRY + if (pyLayoutGenerator) { + generator = new LayoutGenerator(); + pyLayoutGenerator->_object = generator; + } + HCATCH + + return (PyObject*)pyLayoutGenerator; + } + + + static PyObject* PyLayoutGenerator_Repr ( PyLayoutGenerator* self ) + { + LayoutGenerator* generator = self->_object; + + if ( generator == NULL ) + return PyString_FromString(""); + + ostringstream s; + s << "getDevice()) s << getString(generator->getDevice()); + else s << "NULL [Device*]"; + s << ">"; + return PyString_FromString(s.str().c_str()); + } + + + static PyObject* PyLayoutGenerator_getDevice ( PyLayoutGenerator* self ) + { + METHOD_HEAD("LayoutGenerator.getDevice()") + return PyDevice_Link( generator->getDevice() ); + } + + + static PyObject* PyLayoutGenerator_setDevice ( PyLayoutGenerator* self, PyObject* args ) + { + HTRY + METHOD_HEAD("LayoutGenerator.setDevice()") + + PyObject* pyDevice = NULL; + + if (PyArg_ParseTuple( args, "O", &pyDevice )) { + if (not PyObject_IsInstance(pyDevice,(PyObject*)&PyTypeDevice)) { + PyErr_SetString( ConstructorError, "LayoutGenerator.setDevice(): Argument is not of type Device." ); + return NULL; + } + generator->setDevice( PYDEVICE_O(pyDevice) ); + } else { + PyErr_SetString( ConstructorError, "Bad parameter given to LayoutGenerator.setDevice()." ); + return NULL; + } + HCATCH + + Py_RETURN_NONE; + } + + + DirectGetBoolAttribute(PyLayoutGenerator_checkScript ,checkScript ,PyLayoutGenerator,LayoutGenerator) + DirectGetBoolAttribute(PyLayoutGenerator_checkFunctions ,checkFunctions ,PyLayoutGenerator,LayoutGenerator) + DirectGetBoolAttribute(PyLayoutGenerator_drawLayout ,drawLayout ,PyLayoutGenerator,LayoutGenerator) + DirectGetUIntAttribute(PyLayoutGenerator_getNumberTransistor,getNumberTransistor,PyLayoutGenerator,LayoutGenerator) + DirectGetUIntAttribute(PyLayoutGenerator_getNumberStack ,getNumberStack ,PyLayoutGenerator,LayoutGenerator) + + + PyMethodDef PyLayoutGenerator_Methods[] = + { { "getVerboseLevel" , (PyCFunction)PyLayoutGenerator_getVerboseLevel , METH_NOARGS|METH_STATIC, "Return the verbosity level." } + , { "setVerboseLevel" , (PyCFunction)PyLayoutGenerator_setVerboseLevel , METH_STATIC, "Sets the verbosity level." } + , { "getDevice" , (PyCFunction)PyLayoutGenerator_getDevice , METH_NOARGS , "Return the Device currently loaded." } + , { "getNumberTransistor", (PyCFunction)PyLayoutGenerator_getNumberTransistor, METH_NOARGS , "Return how many real transistors (fingers) are useds." } + , { "getNumberStack" , (PyCFunction)PyLayoutGenerator_getNumberStack , METH_NOARGS , "Return how many transistor stacks are useds." } + , { "getDeviceBox" , (PyCFunction)PyLayoutGenerator_getDeviceBox , METH_NOARGS , "Return the box encompassing all components." } + , { "getActiveBox" , (PyCFunction)PyLayoutGenerator_getActiveBox , METH_NOARGS , "Return the box ecompassing only active areas." } + , { "getMatrix" , (PyCFunction)PyLayoutGenerator_getMatrix , METH_NOARGS , "Return the whole result matrix." } + , { "getRow" , (PyCFunction)PyLayoutGenerator_getRow , METH_VARARGS, "Matrix access, details unknown." } + , { "getDic" , (PyCFunction)PyLayoutGenerator_getDic , METH_VARARGS, "Matrix access, details unknown." } + , { "getParamValue" , (PyCFunction)PyLayoutGenerator_getParamValue , METH_VARARGS, "Matrix access, details unknown." } + , { "getParameterValue" , (PyCFunction)PyLayoutGenerator_getParameterValue , METH_VARARGS, "Matrix access, details unknown." } + , { "checkScript" , (PyCFunction)PyLayoutGenerator_checkScript , METH_NOARGS , "Look for the Python layout script." } + , { "checkFunctions" , (PyCFunction)PyLayoutGenerator_checkFunctions , METH_NOARGS , "Look for the mandatories functions in the script." } + , { "drawLayout" , (PyCFunction)PyLayoutGenerator_drawLayout , METH_NOARGS , "Draw the layout of the loaded device." } + , { "setDevice" , (PyCFunction)PyLayoutGenerator_setDevice , METH_VARARGS, "Set the device to handle." } + , {NULL, NULL, 0, NULL} /* sentinel */ + }; + + + DirectDeleteMethod(PyLayoutGenerator_DeAlloc,PyLayoutGenerator) + DirectHashMethod(PyLayoutGenerator_Hash, PyLayoutGenerator) + + extern void PyLayoutGenerator_LinkPyType() { + cdebug.log(49) << "PyLayoutGenerator_LinkType()" << endl; + + PyTypeLayoutGenerator.tp_new = PyLayoutGenerator_new; + PyTypeLayoutGenerator.tp_dealloc = (destructor) PyLayoutGenerator_DeAlloc; + PyTypeLayoutGenerator.tp_repr = (reprfunc) PyLayoutGenerator_Repr; + PyTypeLayoutGenerator.tp_str = (reprfunc) PyLayoutGenerator_Repr; + PyTypeLayoutGenerator.tp_hash = (hashfunc) PyLayoutGenerator_Hash; + PyTypeLayoutGenerator.tp_methods = PyLayoutGenerator_Methods; + } + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyLayoutGenerator" Shared Library Code Part | +// +=================================================================+ + + // Link/Creation Method. + PyObject* PyLayoutGenerator_Link ( LayoutGenerator* object ) + { + if ( object == NULL ) Py_RETURN_NONE; + + PyLayoutGenerator* pyObject = NULL; + HTRY + pyObject = PyObject_NEW(PyLayoutGenerator, &PyTypeLayoutGenerator); + if (pyObject == NULL) return NULL; + + pyObject->_object = object; + HCATCH + + return (PyObject*)pyObject; + } + + PyTypeObjectDefinitions(LayoutGenerator) + + + extern void PyLayoutGenerator_postModuleInit () + { + PyObject* constant; + + LoadObjectConstant(PyTypeLayoutGenerator.tp_dict,LayoutGenerator::Quiet ,"Quiet" ); + LoadObjectConstant(PyTypeLayoutGenerator.tp_dict,LayoutGenerator::Verbose ,"Verbose" ); + LoadObjectConstant(PyTypeLayoutGenerator.tp_dict,LayoutGenerator::VeryVerbose ,"VeryVerbose" ); + LoadObjectConstant(PyTypeLayoutGenerator.tp_dict,LayoutGenerator::Debug ,"Debug" ); + LoadObjectConstant(PyTypeLayoutGenerator.tp_dict,LayoutGenerator::NoFlags ,"NoFlags" ); + LoadObjectConstant(PyTypeLayoutGenerator.tp_dict,LayoutGenerator::ShowTimeTag ,"ShowTimeTag" ); + LoadObjectConstant(PyTypeLayoutGenerator.tp_dict,LayoutGenerator::ShowError ,"ShowError" ); + LoadObjectConstant(PyTypeLayoutGenerator.tp_dict,LayoutGenerator::StatusOk ,"StatusOk" ); + LoadObjectConstant(PyTypeLayoutGenerator.tp_dict,LayoutGenerator::ComputeBbOnly,"ComputeBbOnly"); + } + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyLevelShifter.cpp b/hurricane/src/analog/PyLevelShifter.cpp new file mode 100644 index 00000000..31142ee6 --- /dev/null +++ b/hurricane/src/analog/PyLevelShifter.cpp @@ -0,0 +1,130 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyLevelShifter.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyLibrary.h" +#include "hurricane/analog/PyLevelShifter.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._baseObject._baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject._baseObject._baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(LevelShifter,transistor,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyLevelShifter" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyLevelShifter_create ( PyObject*, PyObject* args ) + { + cdebug.log(49) << "PyLevelShifter_create()" << endl; + + LevelShifter* transistor = NULL; + + HTRY + PyObject* pyLibrary = NULL; + char* name = NULL; + long pyType = 0; + PyObject* pyBulkConnected = NULL; + + if (PyArg_ParseTuple( args + , "OslO:LevelShifter.create" + , &pyLibrary + , &name + , &pyType + , &pyBulkConnected + )) { + if (not IsPyLibrary(pyLibrary)) { + PyErr_SetString ( ConstructorError, "LevelShifter.create(): First argument is not of type Library." ); + return NULL; + } + switch ( pyType ) { + case LevelShifter::NMOS: + case LevelShifter::PMOS: break; + default: + PyErr_SetString ( ConstructorError, "LevelShifter.create(): Type argument is neither NMOS nor PMOS." ); + return NULL; + } + + transistor = LevelShifter::create( PYLIBRARY_O(pyLibrary) + , Name(name) + , (LevelShifter::Type)pyType + , PyObject_IsTrue(pyBulkConnected) + ); + } else { + PyErr_SetString ( ConstructorError, "Bad parameters given to LevelShifter.create()." ); + return NULL; + } + HCATCH + + return PyLevelShifter_Link(transistor); + } + + + // Standart Destroy (Attribute). + DBoDestroyAttribute(PyLevelShifter_destroy, PyLevelShifter) + + //GetNameMethod(LevelShifter, device) + + + // --------------------------------------------------------------- + // PyLevelShifter Attribute Method table. + + PyMethodDef PyLevelShifter_Methods[] = + { { "create" , (PyCFunction)PyLevelShifter_create , METH_VARARGS|METH_STATIC + , "Create an anlogic device made of one transistor." } + , { "destroy" , (PyCFunction)PyLevelShifter_destroy , METH_NOARGS + , "Destroys associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyLevelShifter" Object Methods | + // +-------------------------------------------------------------+ + + + DBoDeleteMethod(LevelShifter) + PyTypeObjectLinkPyType(LevelShifter) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyLevelShifter" Shared Library Code Part | +// +=================================================================+ + + + DBoLinkCreateMethod(LevelShifter) + PyTypeInheritedObjectDefinitions(LevelShifter, TransistorPair) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyMCheckBoxParameter.cpp b/hurricane/src/analog/PyMCheckBoxParameter.cpp new file mode 100644 index 00000000..8e5c602d --- /dev/null +++ b/hurricane/src/analog/PyMCheckBoxParameter.cpp @@ -0,0 +1,80 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyMCheckBoxParameter.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/PyMCheckBoxParameter.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(MCheckBoxParameter,mCheckboxParameter,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyMCheckBoxParameter" Python Module Code Part | +// +=================================================================+ + + + DirectGetUIntAttribute(PyMCheckBoxParameter_getValue, getValue, PyMCheckBoxParameter, MCheckBoxParameter) + DirectSetIntAttribute (PyMCheckBoxParameter_setValue, setValue, PyMCheckBoxParameter, MCheckBoxParameter) + + // --------------------------------------------------------------- + // PyMCheckBoxParameter Attribute Method table. + + PyMethodDef PyMCheckBoxParameter_Methods[] = + { { "getValue" , (PyCFunction)PyMCheckBoxParameter_getValue, METH_NOARGS + , "Self explanatory." } + , { "setValue" , (PyCFunction)PyMCheckBoxParameter_setValue, METH_VARARGS + , "Self explanatory." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyMCheckBoxParameter" Object Methods | + // +-------------------------------------------------------------+ + + + PythonOnlyDeleteMethod(MCheckBoxParameter) + PyTypeObjectLinkPyType(MCheckBoxParameter) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyMCheckBoxParameter" Shared Library Code Part | +// +=================================================================+ + + + LinkCreateMethod(MCheckBoxParameter) + PyTypeInheritedObjectDefinitions(MCheckBoxParameter, Parameter) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyMIMCapacitor.cpp b/hurricane/src/analog/PyMIMCapacitor.cpp new file mode 100644 index 00000000..ceb97ac7 --- /dev/null +++ b/hurricane/src/analog/PyMIMCapacitor.cpp @@ -0,0 +1,139 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyMIMCapacitor.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyLibrary.h" +#include "hurricane/analog/PyMIMCapacitor.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject._baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(MIMCapacitor,transistor,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyMIMCapacitor" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyMIMCapacitor_create ( PyObject*, PyObject* args ) + { + cdebug.log(49) << "PyMIMCapacitor_create()" << endl; + + MIMCapacitor* transistor = NULL; + + HTRY + PyObject* pyLibrary = NULL; + char* name = NULL; + long pyType = 0; + + if (PyArg_ParseTuple( args + , "Osl:MIMCapacitor.create" + , &pyLibrary + , &name + , &pyType + )) { + if (not IsPyLibrary(pyLibrary)) { + PyErr_SetString ( ConstructorError, "MIMCapacitor.create(): First argument is not of type Library." ); + return NULL; + } + switch ( pyType ) { + case CapacitorFamily::PIP: + case CapacitorFamily::MIM: + case CapacitorFamily::MOM: break; + default: + PyErr_SetString ( ConstructorError, "MIMCapacitor.create(): Type argument is neither PIP, MIM nor MOM." ); + return NULL; + } + + transistor = MIMCapacitor::create( PYLIBRARY_O(pyLibrary) + , Name(name) + , (MIMCapacitor::Type)pyType + ); + } else { + PyErr_SetString ( ConstructorError, "Bad parameters given to MIMCapacitor.create()." ); + return NULL; + } + HCATCH + + return PyMIMCapacitor_Link(transistor); + } + + + DirectGetDoubleAttribute(PyCapacitorFamily_getC ,getC ,PyMIMCapacitor,MIMCapacitor) + DirectGetDoubleAttribute(PyCapacitorFamily_getCDraw ,getCDraw ,PyMIMCapacitor,MIMCapacitor) + DirectGetDoubleAttribute(PyCapacitorFamily_getCBorder ,getCBorder ,PyMIMCapacitor,MIMCapacitor) + DirectGetDoubleAttribute(PyCapacitorFamily_getCParasite,getCParasite,PyMIMCapacitor,MIMCapacitor) + + // Standart Destroy (Attribute). + DBoDestroyAttribute(PyMIMCapacitor_destroy, PyMIMCapacitor) + + + // --------------------------------------------------------------- + // PyMIMCapacitor Attribute Method table. + + PyMethodDef PyMIMCapacitor_Methods[] = + { { "create" , (PyCFunction)PyMIMCapacitor_create , METH_VARARGS|METH_STATIC + , "Create an anlogic device made of one transistor." } + , { "getC" , (PyCFunction)PyCapacitorFamily_getC , METH_NOARGS + , "Capacitor value C (requested)." } + , { "getCDraw" , (PyCFunction)PyCapacitorFamily_getCDraw , METH_NOARGS + , "Capacitor value C (requested)." } + , { "getCBorder" , (PyCFunction)PyCapacitorFamily_getCBorder , METH_NOARGS + , "Capacitor value C (requested)." } + , { "getCParasite" , (PyCFunction)PyCapacitorFamily_getCParasite, METH_NOARGS + , "Capacitor value C (requested)." } + , { "destroy" , (PyCFunction)PyMIMCapacitor_destroy , METH_NOARGS + , "Destroys associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyMIMCapacitor" Object Methods | + // +-------------------------------------------------------------+ + + + DBoDeleteMethod(MIMCapacitor) + PyTypeObjectLinkPyType(MIMCapacitor) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyMIMCapacitor" Shared Library Code Part | +// +=================================================================+ + + + DBoLinkCreateMethod(MIMCapacitor) + PyTypeInheritedObjectDefinitions(MIMCapacitor, CapacitorFamily) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyParameter.cpp b/hurricane/src/analog/PyParameter.cpp new file mode 100644 index 00000000..125e81c3 --- /dev/null +++ b/hurricane/src/analog/PyParameter.cpp @@ -0,0 +1,127 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyParameter.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/PyParameter.h" +#include "hurricane/analog/PyCapacitorParameter.h" +#include "hurricane/analog/PyChoiceParameter.h" +#include "hurricane/analog/PyFormFactorParameter.h" +#include "hurricane/analog/PyMCheckBoxParameter.h" +#include "hurricane/analog/PySpinBoxParameter.h" +#include "hurricane/analog/PyStepParameter.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Parameter,parameter,function) + + +// +=================================================================+ +// | "PyParameter" Python Module Code Part | +// +=================================================================+ + +#if defined(__PYTHON_MODULE__) + + + // +-------------------------------------------------------------+ + // | "PyParameter" Attribute Methods | + // +-------------------------------------------------------------+ + + + DirectGetStringAttribute(PyParameter_getName ,getName ,PyParameter,Parameter) + DirectGetIntAttribute (PyParameter_getIndex,getIndex,PyParameter,Parameter) + DirectSetIntAttribute (PyParameter_setIndex,setIndex,PyParameter,Parameter) + + + PyMethodDef PyParameter_Methods[] = + { { "getName" , (PyCFunction)PyParameter_getName , METH_NOARGS + , "Returns the parameter's name." } + , { "getIndex" , (PyCFunction)PyParameter_getIndex , METH_NOARGS + , "Self explanatory." } + , { "setIndex" , (PyCFunction)PyParameter_setIndex , METH_VARARGS + , "Self explanatory." } + , {NULL, NULL, 0, NULL} /* sentinel */ + }; + + + // --------------------------------------------------------------- + // PyParameter Type Methods. + + + PythonOnlyDeleteMethod(Parameter) + PyTypeObjectLinkPyType(Parameter) + + +#else // End of Python Module Code Part. + + +// +=================================================================+ +// | "PyParameter" Shared Library Code Part | +// +=================================================================+ + + // Link/Creation Method. + LinkCreateMethod(Parameter) + + PyTypeRootObjectDefinitions(Parameter) + + + extern void PyParameter_postModuleInit () + { + PyObject* constant; + + LoadObjectConstant(PyTypeParameter.tp_dict,Parameter::STEP ,"STEP" ); + LoadObjectConstant(PyTypeParameter.tp_dict,Parameter::CHOICE,"CHOICE"); + LoadObjectConstant(PyTypeParameter.tp_dict,Parameter::SPIN ,"SPIN" ); + LoadObjectConstant(PyTypeParameter.tp_dict,Parameter::MCHECK,"MCHECK"); + } + + + extern PyObject* PyParameter_LinkDerived ( Parameter* object ) + { + if (object == NULL) Py_RETURN_NONE; + + CapacitorParameter* capacitorParameter = dynamic_cast(object); + if (capacitorParameter) return PyCapacitorParameter_Link(capacitorParameter); + + ChoiceParameter* choiceParameter = dynamic_cast(object); + if (choiceParameter) return PyChoiceParameter_Link(choiceParameter); + + FormFactorParameter* ffParameter = dynamic_cast(object); + if (ffParameter) return PyFormFactorParameter_Link(ffParameter); + + MCheckBoxParameter* mCheckBoxParameter = dynamic_cast(object); + if (mCheckBoxParameter) return PyMCheckBoxParameter_Link(mCheckBoxParameter); + + SpinBoxParameter* spinBoxParameter = dynamic_cast(object); + if (spinBoxParameter) return PySpinBoxParameter_Link(spinBoxParameter); + + StepParameter* stepParameter = dynamic_cast(object); + if (stepParameter) return PyStepParameter_Link(stepParameter); + + Py_RETURN_NONE; + } + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PySimpleCurrentMirror.cpp b/hurricane/src/analog/PySimpleCurrentMirror.cpp new file mode 100644 index 00000000..f97889d0 --- /dev/null +++ b/hurricane/src/analog/PySimpleCurrentMirror.cpp @@ -0,0 +1,130 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PySimpleCurrentMirror.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyLibrary.h" +#include "hurricane/analog/PySimpleCurrentMirror.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._baseObject._baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject._baseObject._baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(SimpleCurrentMirror,transistor,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PySimpleCurrentMirror" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PySimpleCurrentMirror_create ( PyObject*, PyObject* args ) + { + cdebug.log(49) << "PySimpleCurrentMirror_create()" << endl; + + SimpleCurrentMirror* transistor = NULL; + + HTRY + PyObject* pyLibrary = NULL; + char* name = NULL; + long pyType = 0; + PyObject* pyBulkConnected = NULL; + + if (PyArg_ParseTuple( args + , "OslO:SimpleCurrentMirror.create" + , &pyLibrary + , &name + , &pyType + , &pyBulkConnected + )) { + if (not IsPyLibrary(pyLibrary)) { + PyErr_SetString ( ConstructorError, "SimpleCurrentMirror.create(): First argument is not of type Library." ); + return NULL; + } + switch ( pyType ) { + case SimpleCurrentMirror::NMOS: + case SimpleCurrentMirror::PMOS: break; + default: + PyErr_SetString ( ConstructorError, "SimpleCurrentMirror.create(): Type argument is neither NMOS nor PMOS." ); + return NULL; + } + + transistor = SimpleCurrentMirror::create( PYLIBRARY_O(pyLibrary) + , Name(name) + , (SimpleCurrentMirror::Type)pyType + , PyObject_IsTrue(pyBulkConnected) + ); + } else { + PyErr_SetString ( ConstructorError, "Bad parameters given to SimpleCurrentMirror.create()." ); + return NULL; + } + HCATCH + + return PySimpleCurrentMirror_Link(transistor); + } + + + // Standart Destroy (Attribute). + DBoDestroyAttribute(PySimpleCurrentMirror_destroy, PySimpleCurrentMirror) + + //GetNameMethod(SimpleCurrentMirror, device) + + + // --------------------------------------------------------------- + // PySimpleCurrentMirror Attribute Method table. + + PyMethodDef PySimpleCurrentMirror_Methods[] = + { { "create" , (PyCFunction)PySimpleCurrentMirror_create , METH_VARARGS|METH_STATIC + , "Create an anlogic device made of one transistor." } + , { "destroy" , (PyCFunction)PySimpleCurrentMirror_destroy , METH_NOARGS + , "Destroys associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PySimpleCurrentMirror" Object Methods | + // +-------------------------------------------------------------+ + + + DBoDeleteMethod(SimpleCurrentMirror) + PyTypeObjectLinkPyType(SimpleCurrentMirror) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PySimpleCurrentMirror" Shared Library Code Part | +// +=================================================================+ + + + DBoLinkCreateMethod(SimpleCurrentMirror) + PyTypeInheritedObjectDefinitions(SimpleCurrentMirror, TransistorPair) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PySpinBoxParameter.cpp b/hurricane/src/analog/PySpinBoxParameter.cpp new file mode 100644 index 00000000..40a12524 --- /dev/null +++ b/hurricane/src/analog/PySpinBoxParameter.cpp @@ -0,0 +1,87 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PySpinBoxParameter.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/PySpinBoxParameter.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(SpinBoxParameter,stepParameter,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PySpinBoxParameter" Python Module Code Part | +// +=================================================================+ + + + DirectGetLongAttribute(PySpinBoxParameter_getMin , getMin , PySpinBoxParameter, SpinBoxParameter) + DirectGetLongAttribute(PySpinBoxParameter_getMax , getMax , PySpinBoxParameter, SpinBoxParameter) + DirectGetLongAttribute(PySpinBoxParameter_getValue, getValue, PySpinBoxParameter, SpinBoxParameter) + DirectSetLongAttribute(PySpinBoxParameter_setValue, setValue, PySpinBoxParameter, SpinBoxParameter) + + + // --------------------------------------------------------------- + // PySpinBoxParameter Attribute Method table. + + PyMethodDef PySpinBoxParameter_Methods[] = + { { "getMin" , (PyCFunction)PySpinBoxParameter_getMin , METH_NOARGS + , "Self explanatory." } + , { "getMax" , (PyCFunction)PySpinBoxParameter_getMax , METH_NOARGS + , "Self explanatory." } + , { "getValue" , (PyCFunction)PySpinBoxParameter_getValue, METH_NOARGS + , "Self explanatory." } + , { "setValue" , (PyCFunction)PySpinBoxParameter_setValue, METH_VARARGS + , "Self explanatory." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PySpinBoxParameter" Object Methods | + // +-------------------------------------------------------------+ + + + PythonOnlyDeleteMethod(SpinBoxParameter) + PyTypeObjectLinkPyType(SpinBoxParameter) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PySpinBoxParameter" Shared Library Code Part | +// +=================================================================+ + + + LinkCreateMethod(SpinBoxParameter) + PyTypeInheritedObjectDefinitions(SpinBoxParameter, Parameter) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyStepParameter.cpp b/hurricane/src/analog/PyStepParameter.cpp new file mode 100644 index 00000000..a1be0a0e --- /dev/null +++ b/hurricane/src/analog/PyStepParameter.cpp @@ -0,0 +1,90 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyStepParameter.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/PyStepParameter.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(StepParameter,stepParameter,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyStepParameter" Python Module Code Part | +// +=================================================================+ + + + DirectGetLongAttribute(PyStepParameter_getMin , getMin , PyStepParameter, StepParameter) + DirectGetLongAttribute(PyStepParameter_getMax , getMax , PyStepParameter, StepParameter) + DirectGetLongAttribute(PyStepParameter_getStep , getStep , PyStepParameter, StepParameter) + DirectGetLongAttribute(PyStepParameter_getValue, getValue, PyStepParameter, StepParameter) + DirectSetLongAttribute(PyStepParameter_setValue, setValue, PyStepParameter, StepParameter) + + + // --------------------------------------------------------------- + // PyStepParameter Attribute Method table. + + PyMethodDef PyStepParameter_Methods[] = + { { "getMin" , (PyCFunction)PyStepParameter_getMin , METH_NOARGS + , "Self explanatory." } + , { "getMax" , (PyCFunction)PyStepParameter_getMax , METH_NOARGS + , "Self explanatory." } + , { "getStep" , (PyCFunction)PyStepParameter_getStep , METH_NOARGS + , "Self explanatory." } + , { "getValue" , (PyCFunction)PyStepParameter_getValue, METH_NOARGS + , "Self explanatory." } + , { "setValue" , (PyCFunction)PyStepParameter_setValue, METH_VARARGS + , "Self explanatory." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyStepParameter" Object Methods | + // +-------------------------------------------------------------+ + + + PythonOnlyDeleteMethod(StepParameter) + PyTypeObjectLinkPyType(StepParameter) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyStepParameter" Shared Library Code Part | +// +=================================================================+ + + + LinkCreateMethod(StepParameter) + PyTypeInheritedObjectDefinitions(StepParameter, Parameter) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyTransistor.cpp b/hurricane/src/analog/PyTransistor.cpp new file mode 100644 index 00000000..17f71f8f --- /dev/null +++ b/hurricane/src/analog/PyTransistor.cpp @@ -0,0 +1,130 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyTransistor.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyLibrary.h" +#include "hurricane/analog/PyTransistor.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject._baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Transistor,transistor,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyTransistor" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyTransistor_create ( PyObject*, PyObject* args ) + { + cdebug.log(49) << "PyTransistor_create()" << endl; + + Transistor* transistor = NULL; + + HTRY + PyObject* pyLibrary = NULL; + char* name = NULL; + long pyType = 0; + PyObject* pyBulkConnected = NULL; + + if (PyArg_ParseTuple( args + , "OslO:Transistor.create" + , &pyLibrary + , &name + , &pyType + , &pyBulkConnected + )) { + if (not IsPyLibrary(pyLibrary)) { + PyErr_SetString ( ConstructorError, "Transistor.create(): First argument is not of type Library." ); + return NULL; + } + switch ( pyType ) { + case Transistor::NMOS: + case Transistor::PMOS: break; + default: + PyErr_SetString ( ConstructorError, "Transistor.create(): Type argument is neither NMOS nor PMOS." ); + return NULL; + } + + transistor = Transistor::create( PYLIBRARY_O(pyLibrary) + , Name(name) + , (Transistor::Type)pyType + , PyObject_IsTrue(pyBulkConnected) + ); + } else { + PyErr_SetString ( ConstructorError, "Bad parameters given to Transistor.create()." ); + return NULL; + } + HCATCH + + return PyTransistor_Link(transistor); + } + + + // Standart Destroy (Attribute). + DBoDestroyAttribute(PyTransistor_destroy, PyTransistor) + + //GetNameMethod(Transistor, device) + + + // --------------------------------------------------------------- + // PyTransistor Attribute Method table. + + PyMethodDef PyTransistor_Methods[] = + { { "create" , (PyCFunction)PyTransistor_create , METH_VARARGS|METH_STATIC + , "Create an anlogic device made of one transistor." } + , { "destroy" , (PyCFunction)PyTransistor_destroy , METH_NOARGS + , "Destroys associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyTransistor" Object Methods | + // +-------------------------------------------------------------+ + + + DBoDeleteMethod(Transistor) + PyTypeObjectLinkPyType(Transistor) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyTransistor" Shared Library Code Part | +// +=================================================================+ + + + DBoLinkCreateMethod(Transistor) + PyTypeInheritedObjectDefinitions(Transistor, TransistorFamily) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyTransistorArguments.cpp b/hurricane/src/analog/PyTransistorArguments.cpp new file mode 100644 index 00000000..7525efff --- /dev/null +++ b/hurricane/src/analog/PyTransistorArguments.cpp @@ -0,0 +1,100 @@ +// -*- C++ -*- +// +// This file is part of the Coriols Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyTransistorArguments.cpp" | +// +-----------------------------------------------------------------+ + +#include "hurricane/analog/PyTransistorArguments.h" +#include "hurricane/analog/PyDevice.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(TransistorArguments,argument,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyTransistorArguments" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyTransistorArguments_getBulkType(PyTransistorArguments *self) { + cdebug.log(49) << "PyTransistorArguments_getBulkType ()" << endl; + METHOD_HEAD ( "TransistorArguments.getBulkType()" ) + + string bulkType = ""; + HTRY + bulkType = argument->getBulkType(); + HCATCH + + return ( Py_BuildValue ( "s", bulkType.c_str() ) ); + } + + + DirectDestroyAttribute(PyTransistorArguments_destroy, PyTransistorArguments) + + DirectGetBoolAttribute(PyTransistorArguments_isNMOS , isNMOS , PyTransistorArguments, TransistorArguments) + DirectGetBoolAttribute(PyTransistorArguments_isBulkConnected , isBulkConnected , PyTransistorArguments, TransistorArguments) + DirectGetBoolAttribute(PyTransistorArguments_isSourceFirst , isSourceFirst , PyTransistorArguments, TransistorArguments) + DirectGetLongAttribute(PyTransistorArguments_getW , getW , PyTransistorArguments, TransistorArguments) + DirectGetUIntAttribute(PyTransistorArguments_getL , getL , PyTransistorArguments, TransistorArguments) + DirectGetUIntAttribute(PyTransistorArguments_getM , getM , PyTransistorArguments, TransistorArguments) + DirectGetUIntAttribute(PyTransistorArguments_getExternalDummy, getExternalDummy, PyTransistorArguments, TransistorArguments) + + + // --------------------------------------------------------------- + // PyTransistorArguments Attribute Method table. + + PyMethodDef PyTransistorArguments_Methods[] = + { { "isNMOS" , (PyCFunction)PyTransistorArguments_isNMOS , METH_NOARGS, "Returns true if NMOS, false for PMOS." } + , { "isBulkConnected" , (PyCFunction)PyTransistorArguments_isBulkConnected , METH_NOARGS, "Returns true if bulk is connected." } + , { "isSourceFirst" , (PyCFunction)PyTransistorArguments_isSourceFirst , METH_NOARGS, "Returns true if source is first." } + , { "getBulkType" , (PyCFunction)PyTransistorArguments_getBulkType , METH_NOARGS, "Returns the bulk type." } + , { "getW" , (PyCFunction)PyTransistorArguments_getW , METH_NOARGS, "Returns w value." } + , { "getL" , (PyCFunction)PyTransistorArguments_getL , METH_NOARGS, "Returns l value." } + , { "getM" , (PyCFunction)PyTransistorArguments_getM , METH_NOARGS, "Returns m value." } + , { "getExternalDummy", (PyCFunction)PyTransistorArguments_getExternalDummy, METH_NOARGS, "Returns external dummy of one terbminal value." } + , { "destroy" , (PyCFunction)PyTransistorArguments_destroy , METH_NOARGS, "Destroy associated hurricane object, the python object remains." } + , {NULL, NULL, 0, NULL} /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyTransistorArguments" Object Methods | + // +-------------------------------------------------------------+ + + + DirectDeleteMethod(PyTransistorArguments_DeAlloc,PyTransistorArguments) + PyTypeObjectLinkPyType(TransistorArguments) + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyTransistorArguments" Shared Library Code Part | +// +=================================================================+ + + + PyTypeObjectDefinitions(TransistorArguments) + + +# endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyTransistorFamily.cpp b/hurricane/src/analog/PyTransistorFamily.cpp new file mode 100644 index 00000000..21110f14 --- /dev/null +++ b/hurricane/src/analog/PyTransistorFamily.cpp @@ -0,0 +1,228 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyTransistorFamily.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/PyTransistorFamily.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(TransistorFamily,family,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyTransistorFamily" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyTransistorFamily_getType ( PyTransistorFamily* self ) + { + TransistorFamily::Type type = TransistorFamily::NMOS; + + HTRY + METHOD_HEAD ( "TransistorFamily.getType()" ) + type = family->getType(); + HCATCH + + return Py_BuildValue( "i", (int)type ); + } + + + DirectGetBoolAttribute (PyTransistorFamily_isNMOS ,isNMOS ,PyTransistorFamily,TransistorFamily) + DirectGetBoolAttribute (PyTransistorFamily_isPMOS ,isPMOS ,PyTransistorFamily,TransistorFamily) + DirectGetBoolAttribute (PyTransistorFamily_isBulkConnected ,isBulkConnected ,PyTransistorFamily,TransistorFamily) + DirectGetBoolAttribute (PyTransistorFamily_isSourceFirst ,isSourceFirst ,PyTransistorFamily,TransistorFamily) + DirectGetLongAttribute (PyTransistorFamily_getBulkType ,getBulkType ,PyTransistorFamily,TransistorFamily) + DirectGetDoubleAttribute(PyTransistorFamily_getWmin ,getWmin ,PyTransistorFamily,TransistorFamily) + DirectGetDoubleAttribute(PyTransistorFamily_getWmax ,getWmax ,PyTransistorFamily,TransistorFamily) + DirectGetIntAttribute (PyTransistorFamily_getNfing ,getNfing ,PyTransistorFamily,TransistorFamily) + DirectGetLongAttribute (PyTransistorFamily_getW ,getW ,PyTransistorFamily,TransistorFamily) + DirectGetLongAttribute (PyTransistorFamily_getL ,getL ,PyTransistorFamily,TransistorFamily) + DirectGetLongAttribute (PyTransistorFamily_getM ,getM ,PyTransistorFamily,TransistorFamily) + DirectGetLongAttribute (PyTransistorFamily_getExternalDummy,getExternalDummy,PyTransistorFamily,TransistorFamily) + + DirectSetBoolAttribute (PyTransistorFamily_setSourceFirst ,setSourceFirst ,PyTransistorFamily,TransistorFamily) + DirectSetLongAttribute (PyTransistorFamily_setBulkType ,setBulkType ,PyTransistorFamily,TransistorFamily) + DirectSetDoubleAttribute(PyTransistorFamily_setWmin ,setWmin ,PyTransistorFamily,TransistorFamily) + DirectSetDoubleAttribute(PyTransistorFamily_setWmax ,setWmax ,PyTransistorFamily,TransistorFamily) + DirectSetIntAttribute (PyTransistorFamily_setNfing ,setNfing ,PyTransistorFamily,TransistorFamily) + DirectSetLongAttribute (PyTransistorFamily_setExternalDummy,setExternalDummy,PyTransistorFamily,TransistorFamily) + + DirectGetDoubleAttribute(PyTransistorFamily_getWE ,getWE ,PyTransistorFamily,TransistorFamily) + DirectGetDoubleAttribute(PyTransistorFamily_getLE ,getLE ,PyTransistorFamily,TransistorFamily) + DirectGetDoubleAttribute(PyTransistorFamily_getIDS ,getIDS ,PyTransistorFamily,TransistorFamily) + DirectGetDoubleAttribute(PyTransistorFamily_getVGS ,getVGS ,PyTransistorFamily,TransistorFamily) + DirectGetDoubleAttribute(PyTransistorFamily_getVDS ,getVDS ,PyTransistorFamily,TransistorFamily) + DirectGetDoubleAttribute(PyTransistorFamily_getVBS ,getVBS ,PyTransistorFamily,TransistorFamily) + DirectGetDoubleAttribute(PyTransistorFamily_getVG ,getVG ,PyTransistorFamily,TransistorFamily) + DirectGetDoubleAttribute(PyTransistorFamily_getVD ,getVD ,PyTransistorFamily,TransistorFamily) + DirectGetDoubleAttribute(PyTransistorFamily_getVS ,getVS ,PyTransistorFamily,TransistorFamily) + DirectGetDoubleAttribute(PyTransistorFamily_getVB ,getVB ,PyTransistorFamily,TransistorFamily) + DirectGetDoubleAttribute(PyTransistorFamily_getVEG ,getVEG ,PyTransistorFamily,TransistorFamily) + DirectGetDoubleAttribute(PyTransistorFamily_getVTH ,getVTH ,PyTransistorFamily,TransistorFamily) + + DirectSetDoubleAttribute(PyTransistorFamily_setWE ,setWE ,PyTransistorFamily,TransistorFamily) + DirectSetDoubleAttribute(PyTransistorFamily_setLE ,setLE ,PyTransistorFamily,TransistorFamily) + DirectSetDoubleAttribute(PyTransistorFamily_setIDS ,setIDS ,PyTransistorFamily,TransistorFamily) + DirectSetDoubleAttribute(PyTransistorFamily_setVGS ,setVGS ,PyTransistorFamily,TransistorFamily) + DirectSetDoubleAttribute(PyTransistorFamily_setVDS ,setVDS ,PyTransistorFamily,TransistorFamily) + DirectSetDoubleAttribute(PyTransistorFamily_setVBS ,setVBS ,PyTransistorFamily,TransistorFamily) + DirectSetDoubleAttribute(PyTransistorFamily_setVG ,setVG ,PyTransistorFamily,TransistorFamily) + DirectSetDoubleAttribute(PyTransistorFamily_setVD ,setVD ,PyTransistorFamily,TransistorFamily) + DirectSetDoubleAttribute(PyTransistorFamily_setVS ,setVS ,PyTransistorFamily,TransistorFamily) + DirectSetDoubleAttribute(PyTransistorFamily_setVB ,setVB ,PyTransistorFamily,TransistorFamily) + DirectSetDoubleAttribute(PyTransistorFamily_setVEG ,setVEG ,PyTransistorFamily,TransistorFamily) + DirectSetDoubleAttribute(PyTransistorFamily_setVTH ,setVTH ,PyTransistorFamily,TransistorFamily) + + + // --------------------------------------------------------------- + // PyTransistorFamily Attribute Method table. + + PyMethodDef PyTransistorFamily_Methods[] = + { { "getType" , (PyCFunction)PyTransistorFamily_getType , METH_NOARGS + , "Returns the type of the transistor (as a numric constant)." } + , { "isNMOS" , (PyCFunction)PyTransistorFamily_isNMOS , METH_NOARGS + , "Returns True if it is a NMOS transistor." } + , { "isPMOS" , (PyCFunction)PyTransistorFamily_isPMOS , METH_NOARGS + , "Returns True if it is a PMOS transistor." } + , { "isBulkConnected" , (PyCFunction)PyTransistorFamily_isBulkConnected , METH_NOARGS + , "Self explanatory." } + , { "isSourceFirst" , (PyCFunction)PyTransistorFamily_isSourceFirst , METH_NOARGS + , "Self explanatory." } + , { "getBulkType" , (PyCFunction)PyTransistorFamily_getBulkType , METH_NOARGS + , "Self explanatory." } + , { "getWmin" , (PyCFunction)PyTransistorFamily_getWmin , METH_NOARGS + , "Transistor mininal W, technology defined (rule:transistorMinL)." } + , { "getWmax" , (PyCFunction)PyTransistorFamily_getWmax , METH_NOARGS + , "Transistor maximal W, technology defined (rule:transistorMinL)." } + , { "getNfing" , (PyCFunction)PyTransistorFamily_getNfing , METH_NOARGS + , "Self explanatory." } + , { "getW" , (PyCFunction)PyTransistorFamily_getW , METH_NOARGS + , "Transistor effective W in the layout." } + , { "getL" , (PyCFunction)PyTransistorFamily_getL , METH_NOARGS + , "Transistor effective L in the layout." } + , { "getM" , (PyCFunction)PyTransistorFamily_getM , METH_NOARGS + , "Total number of fingers in the stack (counting all transistors and dummies)." } + , { "getExternalDummy" , (PyCFunction)PyTransistorFamily_getExternalDummy, METH_NOARGS + , "Self explanatory." } + , { "setSourceFirst" , (PyCFunction)PyTransistorFamily_setSourceFirst , METH_VARARGS + , "Self explanatory." } + , { "setWmin" , (PyCFunction)PyTransistorFamily_setWmin , METH_VARARGS + , "Self explanatory." } + , { "setWmax" , (PyCFunction)PyTransistorFamily_setWmax , METH_VARARGS + , "Self explanatory." } + , { "setNfing" , (PyCFunction)PyTransistorFamily_setNfing , METH_VARARGS + , "Self explanatory." } + , { "setExternalDummy" , (PyCFunction)PyTransistorFamily_setExternalDummy, METH_VARARGS + , "Self explanatory." } + , { "setBulkType" , (PyCFunction)PyTransistorFamily_setBulkType , METH_VARARGS + , "Self explanatory." } + , { "getWE" , (PyCFunction)PyTransistorFamily_getWE , METH_NOARGS + , "Transistor electrical W (requested)." } + , { "getLE" , (PyCFunction)PyTransistorFamily_getLE , METH_NOARGS + , "Transistor electrical L (requested)." } + , { "getIDS" , (PyCFunction)PyTransistorFamily_getIDS , METH_NOARGS + , "Self explanatory." } + , { "getVGS" , (PyCFunction)PyTransistorFamily_getVGS , METH_NOARGS + , "Self explanatory." } + , { "getVDS" , (PyCFunction)PyTransistorFamily_getVDS , METH_NOARGS + , "Self explanatory." } + , { "getVBS" , (PyCFunction)PyTransistorFamily_getVBS , METH_NOARGS + , "Self explanatory." } + , { "getVG" , (PyCFunction)PyTransistorFamily_getVG , METH_NOARGS + , "Self explanatory." } + , { "getVD" , (PyCFunction)PyTransistorFamily_getVD , METH_NOARGS + , "Self explanatory." } + , { "getVS" , (PyCFunction)PyTransistorFamily_getVS , METH_NOARGS + , "Self explanatory." } + , { "getVB" , (PyCFunction)PyTransistorFamily_getVB , METH_NOARGS + , "Self explanatory." } + , { "getVEG" , (PyCFunction)PyTransistorFamily_getVEG , METH_NOARGS + , "Self explanatory." } + , { "getVTH" , (PyCFunction)PyTransistorFamily_getVTH , METH_NOARGS + , "Self explanatory." } + , { "setWE" , (PyCFunction)PyTransistorFamily_setWE , METH_VARARGS + , "Transistor electrical W (requested)." } + , { "setLE" , (PyCFunction)PyTransistorFamily_setLE , METH_VARARGS + , "Transistor electrical L (requested)." } + , { "setIDS" , (PyCFunction)PyTransistorFamily_setIDS , METH_VARARGS + , "Self explanatory." } + , { "setVGS" , (PyCFunction)PyTransistorFamily_setVGS , METH_VARARGS + , "Self explanatory." } + , { "setVDS" , (PyCFunction)PyTransistorFamily_setVDS , METH_VARARGS + , "Self explanatory." } + , { "setVBS" , (PyCFunction)PyTransistorFamily_setVBS , METH_VARARGS + , "Self explanatory." } + , { "setVG" , (PyCFunction)PyTransistorFamily_setVG , METH_VARARGS + , "Self explanatory." } + , { "setVD" , (PyCFunction)PyTransistorFamily_setVD , METH_VARARGS + , "Self explanatory." } + , { "setVS" , (PyCFunction)PyTransistorFamily_setVS , METH_VARARGS + , "Self explanatory." } + , { "setVB" , (PyCFunction)PyTransistorFamily_setVB , METH_VARARGS + , "Self explanatory." } + , { "setVEG" , (PyCFunction)PyTransistorFamily_setVEG , METH_VARARGS + , "Self explanatory." } + , { "setVTH" , (PyCFunction)PyTransistorFamily_setVTH , METH_VARARGS + , "Self explanatory." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyTransistorFamily" Object Methods | + // +-------------------------------------------------------------+ + + + DBoDeleteMethod(TransistorFamily) + PyTypeObjectLinkPyType(TransistorFamily) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyTransistorFamily" Shared Library Code Part | +// +=================================================================+ + + + DBoLinkCreateMethod(TransistorFamily) + PyTypeInheritedObjectDefinitions(TransistorFamily, Device) + + + extern void PyTransistorFamily_postModuleInit () + { + PyObject* constant; + + LoadObjectConstant(PyTypeTransistorFamily.tp_dict,TransistorFamily::NMOS,"NMOS"); + LoadObjectConstant(PyTypeTransistorFamily.tp_dict,TransistorFamily::PMOS,"PMOS"); + } + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyTransistorMultiArguments.cpp b/hurricane/src/analog/PyTransistorMultiArguments.cpp new file mode 100644 index 00000000..06a703e5 --- /dev/null +++ b/hurricane/src/analog/PyTransistorMultiArguments.cpp @@ -0,0 +1,105 @@ +// -*- C++ -*- +// +// This file is part of the Coriols Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyTRansistorMultiArguments.h" | + +// +-----------------------------------------------------------------+ + +#include "hurricane/isobar/PyHurricane.h" +#include "hurricane/analog/PyTransistorMultiArguments.h" +#include "hurricane/analog/PyDevice.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(TransistorMultiArguments,argument,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyTransistorMultiArguments" Python Module Code Part | +// +=================================================================+ + + + static PyObject* PyTransistorMultiArguments_getBulkType(PyTransistorMultiArguments *self) { + cdebug.log(49) << "PyTransistorMultiArguments_getBulkType ()" << endl; + METHOD_HEAD ( "TransistorMultiArguments.getBulkType()" ) + + string bulkType = ""; + HTRY + bulkType = argument->getBulkType(); + HCATCH + + return ( Py_BuildValue ( "s", bulkType.c_str() ) ); + } + + + DirectDestroyAttribute(PyTransistorMultiArguments_destroy, PyTransistorMultiArguments) + + DirectGetBoolAttribute(PyTransistorMultiArguments_isNMOS , isNMOS , PyTransistorMultiArguments, TransistorMultiArguments) + DirectGetBoolAttribute(PyTransistorMultiArguments_isBulkConnected , isBulkConnected , PyTransistorMultiArguments, TransistorMultiArguments) + DirectGetBoolAttribute(PyTransistorMultiArguments_isSourceFirst , isSourceFirst , PyTransistorMultiArguments, TransistorMultiArguments) + DirectGetLongAttribute(PyTransistorMultiArguments_getW , getW , PyTransistorMultiArguments, TransistorMultiArguments) + DirectGetLongAttribute(PyTransistorMultiArguments_getL , getL , PyTransistorMultiArguments, TransistorMultiArguments) + DirectGetUIntAttribute(PyTransistorMultiArguments_getM , getM , PyTransistorMultiArguments, TransistorMultiArguments) + DirectGetUIntAttribute(PyTransistorMultiArguments_getMInt , getMInt , PyTransistorMultiArguments, TransistorMultiArguments) + DirectGetUIntAttribute(PyTransistorMultiArguments_getExternalDummy , getExternalDummy, PyTransistorMultiArguments, TransistorMultiArguments) + + + // --------------------------------------------------------------- + // PyTransistorMultiArguments Attribute Method table. + + PyMethodDef PyTransistorMultiArguments_Methods[] = + { { "isNMOS" , (PyCFunction)PyTransistorMultiArguments_isNMOS , METH_NOARGS, "Returns true if NMOS, false for PMOS." } + , { "isBulkConnected" , (PyCFunction)PyTransistorMultiArguments_isBulkConnected , METH_NOARGS, "Returns true if bulk is connected." } + , { "isSourceFirst" , (PyCFunction)PyTransistorMultiArguments_isSourceFirst , METH_NOARGS, "Returns true if source is first." } + , { "getBulkType" , (PyCFunction)PyTransistorMultiArguments_getBulkType , METH_NOARGS, "Returns the bulk type." } + , { "getW" , (PyCFunction)PyTransistorMultiArguments_getW , METH_NOARGS, "Returns w value." } + , { "getL" , (PyCFunction)PyTransistorMultiArguments_getL , METH_NOARGS, "Returns l value." } + , { "getM" , (PyCFunction)PyTransistorMultiArguments_getM , METH_NOARGS, "Returns m value." } + , { "getMInt" , (PyCFunction)PyTransistorMultiArguments_getMInt , METH_NOARGS, "Returns mInt value." } + , { "getExternalDummy", (PyCFunction)PyTransistorMultiArguments_getExternalDummy, METH_NOARGS, "Returns external dummy of one terbminal value." } + , { "destroy" , (PyCFunction)PyTransistorMultiArguments_destroy , METH_NOARGS, "Destroy associated hurricane object, the python object remains." } + , {NULL, NULL, 0, NULL} /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyTransistorMultiArguments" Object Methods | + // +-------------------------------------------------------------+ + + + DirectDeleteMethod(PyTransistorMultiArguments_DeAlloc,PyTransistorMultiArguments) + PyTypeObjectLinkPyType(TransistorMultiArguments) + +#else // End of Python Module Code Part. + + +// +=================================================================+ +// | "PyTransistorMultiArguments" Shared Library Code Part | +// +=================================================================+ + + + PyTypeObjectDefinitions(TransistorMultiArguments) + + +# endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/PyTransistorPair.cpp b/hurricane/src/analog/PyTransistorPair.cpp new file mode 100644 index 00000000..09807a37 --- /dev/null +++ b/hurricane/src/analog/PyTransistorPair.cpp @@ -0,0 +1,82 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyTransistorPair.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyLibrary.h" +#include "hurricane/analog/PyTransistorPair.h" + + +namespace Isobar { + +using namespace Hurricane; +using namespace Analog; + +extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject._baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(TransistorPair,transistor,function) + +#if defined(__PYTHON_MODULE__) + +// +=================================================================+ +// | "PyTransistorPair" Python Module Code Part | +// +=================================================================+ + + + DirectGetLongAttribute(PyTransistorPair_getMint,getMint,PyTransistorPair,TransistorPair) + DirectSetLongAttribute(PyTransistorPair_setMint,setMint,PyTransistorPair,TransistorPair) + + + // --------------------------------------------------------------- + // PyTransistorPair Attribute Method table. + + PyMethodDef PyTransistorPair_Methods[] = + { { "getMint" , (PyCFunction)PyTransistorPair_getMint , METH_NOARGS + , "Return the Mint value." } + , { "setMint" , (PyCFunction)PyTransistorPair_setMint , METH_VARARGS + , "Sets the Mint value." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyTransistorPair" Object Methods | + // +-------------------------------------------------------------+ + + + DBoDeleteMethod(TransistorPair) + PyTypeObjectLinkPyType(TransistorPair) + + +#else // End of Python Module Code Part. + +// +=================================================================+ +// | "PyTransistorPair" Shared Library Code Part | +// +=================================================================+ + + + DBoLinkCreateMethod(TransistorPair) + PyTypeInheritedObjectDefinitions(TransistorPair, TransistorFamily) + + +#endif // End of Shared Library Code Part. + +} // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/analog/SimpleCurrentMirror.cpp b/hurricane/src/analog/SimpleCurrentMirror.cpp new file mode 100644 index 00000000..31407e13 --- /dev/null +++ b/hurricane/src/analog/SimpleCurrentMirror.cpp @@ -0,0 +1,155 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./SimpleCurrentMirror.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include "hurricane/UpdateSession.h" +#include "hurricane/analog/SimpleCurrentMirror.h" + +namespace Analog { + + + const Name SimpleCurrentMirror::_scmBulkConnectedName ("SimpleCurrentMirrorBulkConnected"); + const Name SimpleCurrentMirror::_scmBulkUnconnectedName ("SimpleCurrentMirrorBulkUnconnected"); + + + SimpleCurrentMirror::SimpleCurrentMirror ( Library* library, const Name& name, const Type& type ) + : Super(library,name,type) + { } + + + SimpleCurrentMirror* SimpleCurrentMirror::create ( Library* library + , const Name& name + , const Type& type + , bool bulkConnected ) + { + Name deviceName = (bulkConnected) ? _scmBulkConnectedName : _scmBulkUnconnectedName; + preCreate(deviceName); + + UpdateSession::open(); + SimpleCurrentMirror* scm = new SimpleCurrentMirror(library,name,type); + scm->_postCreate(deviceName); + scm->createConnections(bulkConnected); + scm->setTerminal( true ); + UpdateSession::close(); + + return scm; + } + + + void SimpleCurrentMirror::createConnections ( bool bulkConnected ) + { + Net* s = Net::create(this, Name("S")); + s->setExternal(true); + + Net* d1 = Net::create(this, Name("D1")); + d1->setExternal(true); + + Net* d2 = Net::create(this, Name("D2")); + d2->setExternal(true); + + _m1 = MetaTransistor::create(getSubDevicesLibrary(), Name("M1")); + Instance* m1Ins = Instance::create(this, Name("M1Instance"), _m1); + _m2 = MetaTransistor::create(getSubDevicesLibrary(), Name("M2")); + Instance* m2Ins = Instance::create(this, Name("M2Instance"), _m2); + + setReferenceTransistor(_m1); + + Plug* mt1SPlug = m1Ins->getPlug(_m1->getSource()); + mt1SPlug->setNet(s); + Plug* mt2SPlug = m2Ins->getPlug(_m2->getSource()); + mt2SPlug->setNet(s); + Plug* mt1DPlug = m1Ins->getPlug(_m1->getDrain()); + mt1DPlug->setNet(d1); + Plug* mt2DPlug = m2Ins->getPlug(_m2->getDrain()); + mt2DPlug->setNet(d2); + Plug* mt1GPlug = m1Ins->getPlug(_m1->getGate()); + mt1GPlug->setNet(d1); + Plug* mt2GPlug = m2Ins->getPlug(_m2->getGate()); + mt2GPlug->setNet(d1); + + if (not bulkConnected) { + Net* b = Net::create(this, Name("B")); + b->setExternal(true); + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(b); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(b); + } else { + Plug* mt1BPlug = m1Ins->getPlug(_m1->getBulk()); + mt1BPlug->setNet(s); + Plug* mt2BPlug = m2Ins->getPlug(_m2->getBulk()); + mt2BPlug->setNet(s); + } + } + + + Name SimpleCurrentMirror::getDeviceName () const + { + return (isBulkConnected()) ? _scmBulkConnectedName : _scmBulkUnconnectedName; + } + + unsigned int SimpleCurrentMirror:: getRestriction ( Hurricane::Net* net ) const + { + Name netName = net->getName(); + Name nameS = Name(string("S" )); + Name nameD1 = Name(string("D1")); + Name nameD2 = Name(string("D2")); + + unsigned int ok = 0x1; + unsigned int yes = 0x2; + + unsigned int west = 0; + unsigned int east = 2; + unsigned int south = 4; + unsigned int north = 6; + + int nfing = this->getNfing(); + unsigned int rule = 0; + + if (netName == nameS){ + if (nfing == 1){ + rule |= (ok << north) | (ok << south); + } else if (nfing%2 == 0){ + rule |= (ok << north) | (yes << south) | (yes << east) | (yes << west); + } else { + rule |= (ok << north) | (yes << south) | (ok << east) | (ok << west); + } + } else if (netName == nameD1){ + if (nfing == 1){ + rule |= (yes << north) | (ok << south) | (ok << east) | (yes << west); + } else if (nfing%2 == 0){ + rule |= (yes << north) | (ok << south) | (ok << east) | (ok << west); + } else { + rule |= (yes << north) | (ok << south) | (ok << east) | (yes << west); + } + } else if (netName == nameD2){ + if (nfing == 1){ + rule |= (ok << north) | (ok << south) | (yes << east); + } else if (nfing == 2){ + rule |= (ok << north) | (ok << south); + } else if (nfing%2 == 1){ + rule |= (ok << north) | (yes << south) | (yes << east) | (ok << west); + } else { + rule |= (ok << north) | (yes << south) | (ok << east) | (ok << west); + } + } else { + cerr << "Error(unsigned int getRestrictionsRules( Device* device, Net* net )): Unknown net name." << endl; + } + return rule; + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/Transistor.cpp b/hurricane/src/analog/Transistor.cpp new file mode 100644 index 00000000..a28912cb --- /dev/null +++ b/hurricane/src/analog/Transistor.cpp @@ -0,0 +1,249 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./Transistor.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include +#include "hurricane/Warning.h" +#include "hurricane/UpdateSession.h" +#include "hurricane/analog/MetaTransistor.h" +#include "hurricane/analog/Transistor.h" +#include "hurricane/analog/TransistorArguments.h" + +namespace Analog { + + + const Name Transistor::_transistorBulkConnectedName ("TransistorBulkConnected"); + const Name Transistor::_transistorBulkUnconnectedName("TransistorBulkUnconnected"); + + + Transistor::Transistor ( Library* library, const Name& name, const Type& type ) + : Super(library,name,type) + , _metaTransistor(NULL) + { } + + + Transistor* Transistor::create ( Library* library, const Name& name, const Type& type, bool bulkConnected ) + { + Name deviceName; + if (bulkConnected) deviceName = _transistorBulkConnectedName; + else deviceName = _transistorBulkUnconnectedName; + preCreate(deviceName); + + UpdateSession::open(); + Transistor* tr = new Transistor(library,name,type); + tr->_postCreate(deviceName); + tr->createConnections(bulkConnected); + + tr->addStepParameter("B.w" , 1, 1, 1); + tr->addStepParameter("D.w" , 1, 1, 1); + tr->addStepParameter("G.w" , 1, 1, 1); + tr->addStepParameter("S.w" , 1, 1, 1); + tr->setTerminal( true ); + UpdateSession::close(); + return tr; + } + + + void Transistor::_postCreate ( const Name& deviceName ) + { + Super::_postCreate(deviceName); + } + + + void Transistor::createConnections ( bool bulkConnected ) + { + Net* s = Net::create(this, Name("S")); + s->setExternal(true); + + Net* g = Net::create(this, Name("G")); + g->setExternal(true); + + Net* d = Net::create(this, Name("D")); + d->setExternal(true); + + _metaTransistor = MetaTransistor::create(getSubDevicesLibrary(), Name("M1")); + Instance* metaTransistorIns = Instance::create(this, Name("M1Instance"), _metaTransistor); + + setReferenceTransistor(_metaTransistor); + + Plug* mtSPlug = metaTransistorIns->getPlug(_metaTransistor->getSource()); + mtSPlug->setNet(s); + Plug* mtDPlug = metaTransistorIns->getPlug(_metaTransistor->getDrain()); + mtDPlug->setNet(d); + Plug* mtGPlug = metaTransistorIns->getPlug(_metaTransistor->getGate()); + mtGPlug->setNet(g); + + if (not bulkConnected) { + Net* b = Net::create(this, Name("B")); + b->setExternal(true); + Plug* mtBPlug = metaTransistorIns->getPlug(_metaTransistor->getBulk()); + mtBPlug->setNet(b); + } else { + Plug* mtBPlug = metaTransistorIns->getPlug(_metaTransistor->getBulk()); + mtBPlug->setNet(s); + } + } + + + Name Transistor::getDeviceName () const + { + if (isBulkConnected()) return _transistorBulkConnectedName; + else return _transistorBulkUnconnectedName; + } + + + Arguments* Transistor::getArguments () + { + const bitset<4> bs(getBulkType()); + + return new TransistorArguments ( isNMOS() + , isBulkConnected() + , isSourceFirst() + , bs.to_string() + , getW() + , getL() + , getM() + , getExternalDummy() + ); + } + + + unsigned int Transistor:: getRestriction ( Hurricane::Net* net ) const + { + Name netName = net->getName(); + Name nameS = Name(string("S" )); + Name nameD = Name(string("D" )); + Name nameG = Name(string("G" )); + + unsigned int ok = 0x1; + unsigned int yes = 0x2; + + unsigned int west = 0; + unsigned int east = 2; + unsigned int south = 4; + unsigned int north = 6; + + int nfing = this->getNfing(); + unsigned int rule = 0; + + if (netName == nameS){ + if (nfing == 1){ + rule |= (ok << north) | (ok << south) | (yes << west); + } else if (nfing == 2){ + rule |= (yes << north) | (ok << south) | (yes << east) | (yes << west); + } else if (nfing == 3){ + rule |= (yes << north) | (ok << south) | (ok << east) | (yes << west); + } else if (nfing%2 == 0){ + rule |= (yes << north) | (yes << south) | (yes << east) | (yes << west); + } else { + rule |= (yes << north) | (yes << south) | (ok << east) | (yes << west); + } + } else if (netName == nameD){ + if (nfing == 1){ + rule |= (ok << north) | (ok << south)| (yes << east); + } else if (nfing == 2){ + rule |= (ok << north) | (ok << south); + } else if (nfing == 3){ + rule |= (ok << north) | (yes << south) | (yes << east) | (ok << west); + } else if (nfing%2 == 0){ + rule |= (ok << north) | (yes << south) | (ok << east) | (ok << west); + } else { + rule |= (ok << north) | (yes << south) | (yes << east) | (ok << west); + } + } else if (netName == nameG){ + if (nfing == 1){ + rule |= (ok << north) | (ok << east) | (ok << west); + } else { + rule |= (yes << north) | (ok << east) | (ok << west); + } + } else { + cerr << "Error(unsigned int getRestrictionsRules( Device* device, Net* net )): Unknown net name." << endl; + } + return rule; + } + + + bool Transistor::isSame(Transistor* ts) + { + StepParameter* w1 = dynamic_cast(this->getParameter("W")); + StepParameter* l1 = dynamic_cast(this->getParameter("L")); + FormFactorParameter* m1 = dynamic_cast(this->getParameter("M")); + ChoiceParameter* ls1 = dynamic_cast(this->getParameter("Layout Styles")); + StepParameter* nerc1 = dynamic_cast(this->getParameter("NERC")); + StepParameter* nirc1 = dynamic_cast(this->getParameter("NIRC")); + StepParameter* b1 = dynamic_cast(this->getParameter("B.w" )); + StepParameter* g1 = dynamic_cast(this->getParameter("G.w")); + StepParameter* d1 = dynamic_cast(this->getParameter("D.w")); + StepParameter* s1 = dynamic_cast(this->getParameter("S.w" )); + + StepParameter* w2 = dynamic_cast(ts->getParameter("W")); + StepParameter* l2 = dynamic_cast(ts->getParameter("L")); + FormFactorParameter* m2 = dynamic_cast(ts->getParameter("M")); + ChoiceParameter* ls2 = dynamic_cast(ts->getParameter("Layout Styles")); + StepParameter* nerc2 = dynamic_cast(ts->getParameter("NERC")); + StepParameter* nirc2 = dynamic_cast(ts->getParameter("NIRC")); + StepParameter* b2 = dynamic_cast(ts->getParameter("B.w" )); + StepParameter* g2 = dynamic_cast(ts->getParameter("G.w")); + StepParameter* d2 = dynamic_cast(ts->getParameter("D.w")); + StepParameter* s2 = dynamic_cast(ts->getParameter("S.w" )); + + if (w1->getValue() != w2->getValue()){ + cerr << Warning( "Transistor::isSame(): W are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(ts).c_str() ); + return false; + } if (l1->getValue() != l2->getValue()){ + cerr << Warning( "Transistor::isSame(): L are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(ts).c_str() ); + return false; + } if (m1->getValue() != m2->getValue()){ + cerr << Warning( "Transistor::isSame(): M are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(ts).c_str() ); + return false; + } if (ls1->getValue() != ls2->getValue()){ + cerr << Warning( "Transistor::isSame(): Layout styles are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(ts).c_str() ); + return false; + } if (nerc1->getValue() != nerc2->getValue()){ + cerr << Warning( "Transistor::isSame(): NERC are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(ts).c_str() ); + return false; + } if (nirc1->getValue() != nirc2->getValue()){ + cerr << Warning( "Transistor::isSame(): NIRC are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(ts).c_str() ); + return false; + } if (b1->getValue() != b2->getValue()){ + cerr << Warning( "Transistor::isSame(): B.w are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(ts).c_str() ); + return false; + } if (g1->getValue() != g2->getValue()){ + cerr << Warning( "Transistor::isSame(): G.w are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(ts).c_str() ); + return false; + } if (d1->getValue() != d2->getValue()){ + cerr << Warning( "Transistor::isSame(): D.w are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(ts).c_str() ); + return false; + } if (s1->getValue() != s2->getValue()) { + cerr << Warning( "Transistor::isSame(): S.w are different \"%s\" vs \"%s\"." + , getString(this).c_str(), getString(ts).c_str() ); + return false; + } + + return true; + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/TransistorArguments.cpp b/hurricane/src/analog/TransistorArguments.cpp new file mode 100644 index 00000000..b94e4ae9 --- /dev/null +++ b/hurricane/src/analog/TransistorArguments.cpp @@ -0,0 +1,59 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./TransistorArguments.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/TransistorArguments.h" + +namespace Analog { + + + TransistorArguments::TransistorArguments ( bool isNMOS + , bool isBulkConnected + , bool isSourceFirst + , std::string bulkType + , Hurricane::DbU::Unit w + , Hurricane::DbU::Unit l + , unsigned m + , unsigned externalDummy ) + : Super() + , _isNMOS (isNMOS) + , _isBulkConnected(isBulkConnected) + , _isSourceFirst (isSourceFirst) + , _bulkType (bulkType) + , _w (w) + , _l (l) + , _m (m) + , _externalDummy (externalDummy) + { } + + + TransistorArguments::TransistorArguments ( const TransistorArguments& tArgs ) + : Super() + , _isNMOS (tArgs.isNMOS()) + , _isBulkConnected(tArgs.isBulkConnected()) + , _isSourceFirst (tArgs.isSourceFirst()) + , _bulkType (tArgs.getBulkType()) + , _w (tArgs.getW()) + , _l (tArgs.getL()) + , _m (tArgs.getM()) + , _externalDummy (tArgs.getExternalDummy()) + { } + + + TransistorArguments* TransistorArguments::getClone () + { return new TransistorArguments( *this ); } + + +} // Analog namespace. diff --git a/hurricane/src/analog/TransistorFamily.cpp b/hurricane/src/analog/TransistorFamily.cpp new file mode 100644 index 00000000..7e972ba2 --- /dev/null +++ b/hurricane/src/analog/TransistorFamily.cpp @@ -0,0 +1,82 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./TransistorFamily.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/DataBase.h" +#include "hurricane/Technology.h" +#include "hurricane/PhysicalRule.h" +#include "hurricane/analog/MetaTransistor.h" +#include "hurricane/analog/TransistorFamily.h" + +namespace Analog { + + + TransistorFamily::TransistorFamily ( Library* library, const Name& name, const Type& type ) + : Super (library,name) + , _type (type) + , _referenceTransistor(NULL) + , _operatorIndex (0) + , _w (NULL) + , _l (NULL) + , _m (NULL) + , _externalDummy (NULL) + , _sourceFirst (NULL) + , _bulkType (NULL) + {} + + + void TransistorFamily::_postCreate ( const Name& deviceName ) + { + Super::_postCreate(deviceName); + + Choices sourceChoices; + //sourceChoices << "Yes" << "No"; + sourceChoices << ""; + _sourceFirst = addMCheckBoxParameter("Source First", sourceChoices); + + Choices bulkChoices; + bulkChoices << "North" << "South" << "East" << "West"; + _bulkType = addMCheckBoxParameter("Bulk Type", bulkChoices); + + Technology* atechno = DataBase::getDB()->getTechnology(); + DbU::Unit transistorMinL = atechno->getPhysicalRule("transistorMinL").getValue(); + DbU::Unit transistorMaxL = atechno->getPhysicalRule("transistorMaxL").getValue(); + DbU::Unit transistorMinW = atechno->getPhysicalRule("transistorMinW").getValue(); + DbU::Unit transistorMaxW = atechno->getPhysicalRule("transistorMaxW").getValue(); + + _w = addStepParameter ("W", transistorMinW, transistorMaxW, DbU::grid(1)); + _l = addStepParameter ("L", transistorMinL, transistorMaxL, DbU::grid(1)); + _m = addFormFactorParameter("M", 1, 10); + _externalDummy = addSpinBoxParameter ("ExternalDummy", 0, 6); + addStepParameter("NERC" , 1, 1, 1); + addStepParameter("NIRC" , 1, 1, 1); + } + + +#ifdef DISABLED + void TransistorFamily::setReferenceTransistor ( const Name& referenceTransistorName ) { + Instance* instance = getInstance(referenceTransistorName); + if (!instance) throw Error("No TransRef ..."); + + Cell* cell = instance->getMasterCell(); + MetaTransistor* metaTransistor = dynamic_cast(cell); + if (!metaTransistor) throw Error("Wrong type for TransRef..."); + + _referenceTransistor = metaTransistor; + } +#endif + + +} // Analog namespace. diff --git a/hurricane/src/analog/TransistorFamilyNames.cpp b/hurricane/src/analog/TransistorFamilyNames.cpp new file mode 100644 index 00000000..85364ed1 --- /dev/null +++ b/hurricane/src/analog/TransistorFamilyNames.cpp @@ -0,0 +1,59 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./TransistorFamilyNames.cpp" | +// +-----------------------------------------------------------------+ + +#include "hurricane/analog/TransistorFamilyNames.h" + +namespace Analog { + + + const char* TransistorFamilyNames::PMOSTransistorBU ("PMOS Transistor Bulk Unconnected"); + const char* TransistorFamilyNames::PMOSTransistorBC ("PMOS Transistor Bulk Connected"); + const char* TransistorFamilyNames::NMOSTransistorBU ("NMOS Transistor Bulk Unconnected"); + const char* TransistorFamilyNames::NMOSTransistorBC ("NMOS Transistor Bulk Connected"); + const char* TransistorFamilyNames::PMOSDifferentialPairBU ("PMOS Differential Pair Bulk Unconnected"); + const char* TransistorFamilyNames::PMOSDifferentialPairBC ("PMOS Differential Pair Bulk Connected"); + const char* TransistorFamilyNames::NMOSDifferentialPairBU ("NMOS Differential Pair Bulk Unconnected"); + const char* TransistorFamilyNames::NMOSDifferentialPairBC ("NMOS Differential Pair Bulk Connected"); + const char* TransistorFamilyNames::PMOSSimpleCurrentMirrorBU ("PMOS Simple Current Mirror Bulk Unconnected"); + const char* TransistorFamilyNames::PMOSSimpleCurrentMirrorBC ("PMOS Simple Current Mirror Bulk Connected"); + const char* TransistorFamilyNames::NMOSSimpleCurrentMirrorBU ("NMOS Simple Current Mirror Bulk Unconnected"); + const char* TransistorFamilyNames::NMOSSimpleCurrentMirrorBC ("NMOS Simple Current Mirror Bulk Connected"); + const char* TransistorFamilyNames::PMOSLevelShifterBU ("PMOS Level Shifter Bulk Unconnected"); + const char* TransistorFamilyNames::PMOSLevelShifterBC ("PMOS Level Shifter Bulk Connected"); + const char* TransistorFamilyNames::NMOSLevelShifterBU ("NMOS Level Shifter Bulk Unconnected"); + const char* TransistorFamilyNames::NMOSLevelShifterBC ("NMOS Level Shifter Bulk Connected"); + const char* TransistorFamilyNames::PMOSCrossCoupledPairBU ("PMOS Cross Coupled Pair Bulk Unconnected"); + const char* TransistorFamilyNames::PMOSCrossCoupledPairBC ("PMOS Cross Coupled Pair Bulk Connected"); + const char* TransistorFamilyNames::NMOSCrossCoupledPairBU ("NMOS Cross Coupled Pair Bulk Unconnected"); + const char* TransistorFamilyNames::NMOSCrossCoupledPairBC ("NMOS Cross Coupled Pair Bulk Connected"); + const char* TransistorFamilyNames::PMOSCommonSourcePairBU ("PMOS Common Source Pair Bulk Unconnected"); + const char* TransistorFamilyNames::PMOSCommonSourcePairBC ("PMOS Common Source Pair Bulk Connected"); + const char* TransistorFamilyNames::NMOSCommonSourcePairBU ("NMOS Common Source Pair Bulk Unconnected"); + const char* TransistorFamilyNames::NMOSCommonSourcePairBC ("NMOS Common Source Pair Bulk Connected"); + const char* TransistorFamilyNames::NMOSCommonGatePairBC ("NMOS Common Gate Pair Bulk Connected"); + const char* TransistorFamilyNames::PMOSCommonGatePairBU ("PMOS Common Gate Pair Bulk Unconnected"); + const char* TransistorFamilyNames::PMOSCommonGatePairBC ("PMOS Common Gate Pair Bulk Connected"); + const char* TransistorFamilyNames::NMOSCommonGatePairBU ("NMOS Common Gate Pair Bulk Unconnected"); + const char* TransistorFamilyNames::NMOSCommonDrainBC ("NMOS Common Drain Bulk Connected"); + const char* TransistorFamilyNames::PMOSCommonDrainBU ("PMOS Common Drain Bulk Unconnected"); + const char* TransistorFamilyNames::PMOSCommonDrainBC ("PMOS Common Drain Bulk Connected"); + const char* TransistorFamilyNames::NMOSCommonDrainBU ("NMOS Common Drain Bulk Unconnected"); + const char* TransistorFamilyNames::PMOSCascodeBU ("PMOS Cascode Bulk Unconnected"); + const char* TransistorFamilyNames::PMOSCascodeBC ("PMOS Cascode Bulk Connected"); + const char* TransistorFamilyNames::NMOSCascodeBU ("NMOS Cascode Bulk Unconnected"); + const char* TransistorFamilyNames::NMOSCascodeBC ("NMOS Cascode Bulk Connected"); + + +} // Analog namespace. diff --git a/hurricane/src/analog/TransistorMultiArguments.cpp b/hurricane/src/analog/TransistorMultiArguments.cpp new file mode 100644 index 00000000..a04f36eb --- /dev/null +++ b/hurricane/src/analog/TransistorMultiArguments.cpp @@ -0,0 +1,53 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./TransistorMultiArguments.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/analog/TransistorMultiArguments.h" + +namespace Analog { + + + TransistorMultiArguments::TransistorMultiArguments ( bool isNMOS + , bool isBulkConnected + , bool isSourceFirst + , std::string bulkType + , Hurricane::DbU::Unit w + , Hurricane::DbU::Unit l + , unsigned m + , unsigned mint + , unsigned externalDummy ) + : Super(isNMOS, isBulkConnected, isSourceFirst, bulkType, w, l, m, externalDummy) + , _mint(mint) + { } + + + TransistorMultiArguments::TransistorMultiArguments ( const TransistorMultiArguments& dpArgs ) + : Super( dpArgs.isNMOS() + , dpArgs.isBulkConnected() + , dpArgs.isSourceFirst() + , dpArgs.getBulkType() + , dpArgs.getW() + , dpArgs.getL() + , dpArgs.getM() + , dpArgs.getExternalDummy()) + , _mint(dpArgs.getMInt()) + { } + + + TransistorMultiArguments* TransistorMultiArguments::getClone () + { return new TransistorMultiArguments( *this ); } + + +} // Analog namespace. diff --git a/hurricane/src/analog/TransistorPair.cpp b/hurricane/src/analog/TransistorPair.cpp new file mode 100644 index 00000000..901b138d --- /dev/null +++ b/hurricane/src/analog/TransistorPair.cpp @@ -0,0 +1,58 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./TransistorPair.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include +#include "hurricane/analog/MetaTransistor.h" +#include "hurricane/analog/TransistorPair.h" +#include "hurricane/analog/TransistorMultiArguments.h" + +namespace Analog { + + using namespace std; + + + TransistorPair::TransistorPair ( Library* library, const Name& name, const Type& type ) + : Super(library,name,type) + , _m1 (NULL) + , _m2 (NULL) + , _mInt(NULL) + { } + + + void TransistorPair::_postCreate (const Name& deviceName ) + { + Super::_postCreate(deviceName); + + _mInt = addSpinBoxParameter( "Mint", 1, 12 ); + } + + + Arguments* TransistorPair::getArguments () + { + return new TransistorMultiArguments ( isNMOS() + , isBulkConnected() + , isSourceFirst() + , bitset<4>(getBulkType()).to_string() + , getW() + , getL() + , getM() + , getMint() + , getExternalDummy() ); + } + + +} // Analog namespace. diff --git a/hurricane/src/analog/hurricane/analog/AnalogCellExtension.h b/hurricane/src/analog/hurricane/analog/AnalogCellExtension.h new file mode 100644 index 00000000..2a093c33 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/AnalogCellExtension.h @@ -0,0 +1,120 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2010-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis, Eric Lao | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/AnalogCellExtension.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_CELL_EXTENSION_H +#define ANALOG_CELL_EXTENSION_H + +#include +#include +#include +#include +#include +#include "hurricane/Property.h" +namespace Hurricane { + class Cell; +} + + +namespace Analog { + + using Hurricane::Record; + using Hurricane::Name; + using Hurricane::Cell; + using Hurricane::StandardPrivateProperty; + + + class AnalogData { + public: + virtual ~AnalogData (); + virtual Record* _getRecord () const; + virtual std::string _getString () const = 0; + }; + + + class AnalogCellExtensionDatas { + public: + AnalogCellExtensionDatas (); + ~AnalogCellExtensionDatas (); + template< typename Data > Data* get (); + template< typename Data > void set ( Data* ); + public: + std::map _params; + std::vector _datas; + }; + + + template< typename Data > + Data* AnalogCellExtensionDatas::get () + { + for ( AnalogData* base : _datas ) { + Data* data = dynamic_cast( base ); + if (data) return data; + } + return NULL; + } + + template< typename Data > + void AnalogCellExtensionDatas::set ( Data* data ) + { + size_t i = 0; + for ( ; i < _datas.size() ; ++i ) { + Data* data = dynamic_cast( _datas[i] ); + if (data) { delete _datas[i]; break; } + } + if (i == _datas.size()) _datas.push_back( NULL ); + _datas[i] = data; + } + + + class AnalogCellExtension { + public: + typedef StandardPrivateProperty Extension; + public: + static void addParameter ( Cell*, const Name&, boost::any ); + static boost::any& getParameter ( const Cell*, const Name&, bool& found ); + static std::map* getParameters ( const Cell* ); + template< typename Data > + static void set ( Cell*, Data* ); + template< typename Data > + static Data* get ( const Cell* ); + }; + + + template< typename Data > + void AnalogCellExtension::set ( Cell* cell, Data* data ) + { + Extension* extension = Extension::get( cell ); + if (not extension) { + extension = Extension::create(); + cell->put( extension ); + } + extension->getValue().set( data ); + } + + + template< typename Data > + Data* AnalogCellExtension::get ( const Cell* cell ) + { + Extension* extension = Extension::get( cell ); + if (not extension) return NULL; + + return extension->getValue().get(); + } + + +} // Analog namespace. + +#endif // ANALOG_CELL_EXTENSION_H diff --git a/hurricane/src/analog/hurricane/analog/Arguments.h b/hurricane/src/analog/hurricane/analog/Arguments.h new file mode 100644 index 00000000..fbf10302 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/Arguments.h @@ -0,0 +1,35 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricaneAMS/devices/Arguments.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_ARGUMENTS_H +#define ANALOG_ARGUMENTS_H + +namespace Analog { + + + class Arguments { + public: + virtual Arguments* getClone () = 0; + virtual void setM ( unsigned int ) { }; + protected: + Arguments () {}; + virtual ~Arguments () {}; + }; + + +} // Analog namespace. + +#endif // ANALOG_ARGUMENTS_H diff --git a/hurricane/src/analog/hurricane/analog/BJT.h b/hurricane/src/analog/hurricane/analog/BJT.h new file mode 100644 index 00000000..2f2f3522 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/BJT.h @@ -0,0 +1,52 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Stephanie Youssef | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/BJT.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_BJT_H +#define ANALOG_BJT_H + +#include "hurricane/DbU.h" +#include "hurricane/analog/BJTFamily.h" + + +namespace Analog { + + + class BJT : public BJTFamily { + public: + typedef BJTFamily Super; + public: + static BJT* create ( Hurricane::Library* , const Hurricane::Name& , const Type& ); + unsigned int getN () const; + unsigned int getM () const; + virtual Hurricane::Name getDeviceName () const; + virtual Arguments* getArguments (); + void setExternalDummy ( const bool ); + bool getExternalDummy () const; + protected: + BJT ( Hurricane::Library* , const Hurricane::Name& , const Type& ); + virtual void _postCreate ( const Hurricane::Name& deviceName ); + virtual void createConnections (); + private: + static const Hurricane::Name _bjt; + FormFactorParameter* _n; + FormFactorParameter* _m; + MCheckBoxParameter* _externalDummy; + }; + + +} // Analog namespace. + +#endif // ANALOG_BJT_H diff --git a/hurricane/src/analog/hurricane/analog/BJTArguments.h b/hurricane/src/analog/hurricane/analog/BJTArguments.h new file mode 100644 index 00000000..b9080930 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/BJTArguments.h @@ -0,0 +1,57 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Stephanie Youssef | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./hurricane/analog/BJTArguments.cpp" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_BJT_ARGUMENTS_H +#define ANALOG_BJT_ARGUMENTS_H + +#include "hurricane/DbU.h" +#include "hurricane/analog/Arguments.h" + + +namespace Analog { + + class BJTArguments : public Arguments { + public: + typedef Arguments Super; + public: + BJTArguments ( bool isNPN, bool isExternalDummy, unsigned m, unsigned n ); + BJTArguments ( const BJTArguments & bjtArgs ); + virtual BJTArguments* getClone (); + inline bool isNPN () const; + inline bool isExternalDummy () const; + inline unsigned int getM () const; + inline unsigned int getN () const; + inline void setM (unsigned m ); + inline void setN (unsigned n ); + private: + bool _isNPN; + bool _isExternalDummy; + unsigned int _m; + unsigned int _n; + }; + + + inline bool BJTArguments::isNPN () const { return _isNPN; }; + inline bool BJTArguments::isExternalDummy () const { return _isExternalDummy; }; + inline unsigned int BJTArguments::getM () const { return _m; }; + inline unsigned int BJTArguments::getN () const { return _n; }; + inline void BJTArguments::setM (unsigned m ) { _m = m; }; + inline void BJTArguments::setN (unsigned n ) { _n = n; }; + + +} // Analog namespace. + +#endif // ANALOG_BJT_ARGUMENTS_H diff --git a/hurricane/src/analog/hurricane/analog/BJTFamily.h b/hurricane/src/analog/hurricane/analog/BJTFamily.h new file mode 100644 index 00000000..99519982 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/BJTFamily.h @@ -0,0 +1,56 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Stephanie Youssef | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/BJTFamily.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_BJT_FAMILY_H +#define ANALOG_BJT_FAMILY_H + + +namespace Hurricane { + class Name; + class Library; +} + +#include "hurricane/analog/Device.h" + + +namespace Analog { + + + class BJTFamily : public Device { + public: + typedef Device Super; + enum Type { NPN=1, PNP }; + public: + inline Type const& getType () const; + inline int getOperatorIndex () const; + inline void setOperatorIndex ( int ); + protected: + BJTFamily ( Hurricane::Library* , const Hurricane::Name& , const Type& ); + virtual void createConnections () = 0; + private: + const Type _type; + int _operatorIndex; + }; + + + inline BJTFamily::Type const& BJTFamily::getType () const { return _type; } + inline int BJTFamily::getOperatorIndex () const { return _operatorIndex; } + inline void BJTFamily::setOperatorIndex ( int i ) { _operatorIndex = i; } + + +} // Analog namespace. + +#endif // ANALOG_BJT_FAMILY_H diff --git a/hurricane/src/analog/hurricane/analog/BJTFamilyNames.h b/hurricane/src/analog/hurricane/analog/BJTFamilyNames.h new file mode 100644 index 00000000..47a00db2 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/BJTFamilyNames.h @@ -0,0 +1,33 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Stephanie Youssef | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/BJTFamilyNames.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_BJTFAMILYNAMES_H +#define ANALOG_BJTFAMILYNAMES_H + + +namespace Analog { + + + class BJTFamilyNames { + public: + static const char* NPNBJT; + static const char* PNPBJT; + }; + + +} // Analog namespace. + +#endif // ANALOG_BJTFAMILYNAMES_H diff --git a/hurricane/src/analog/hurricane/analog/CapacitorArguments.h b/hurricane/src/analog/hurricane/analog/CapacitorArguments.h new file mode 100644 index 00000000..adcf769f --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/CapacitorArguments.h @@ -0,0 +1,53 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/CapacitorArguments.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_CAPACITOR_ARGUMENTS_H +#define ANALOG_CAPACITOR_ARGUMENTS_H + +#include "hurricane/DbU.h" +#include "hurricane/analog/Arguments.h" + +namespace Analog { + + + class CapacitorArguments : public Arguments { + public: + typedef Arguments Super; + public: + CapacitorArguments ( bool isMIM, bool isPIP, bool isMOM, double c ); + CapacitorArguments ( const CapacitorArguments& cArgs ); + virtual CapacitorArguments* getClone (); + inline double getC () const; + inline bool isMIM () const; + inline bool isPIP () const; + inline bool isMOM () const; + private: + bool _isMIM; + bool _isPIP; + bool _isMOM; + double _c; + }; + + + inline double CapacitorArguments::getC () const { return _c; } + inline bool CapacitorArguments::isMIM () const { return _isMIM;} + inline bool CapacitorArguments::isPIP () const { return _isPIP;} + inline bool CapacitorArguments::isMOM () const { return _isMOM;} + + +} // Analog namespace. + +#endif // ANALOG_CAPACITOR_ARGUMENTS_H diff --git a/hurricane/src/analog/hurricane/analog/CapacitorFamily.h b/hurricane/src/analog/hurricane/analog/CapacitorFamily.h new file mode 100644 index 00000000..3a66c64d --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/CapacitorFamily.h @@ -0,0 +1,97 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/CapacitorFamily.h" | +// +-----------------------------------------------------------------+ + +#ifndef ANALOG_CAPACITOR_FAMILY_H +#define ANALOG_CAPACITOR_FAMILY_H + +#include "hurricane/analog/Device.h" +#include "hurricane/analog/MetaCapacitor.h" + +namespace Hurricane { + class Name; + class Library; +} + + +namespace Analog { + + class MetaCapacitor; + + + class CapacitorFamily : public Device { + public: + typedef Device Super; + enum Type { PIP = 1, MIM, MOM }; + public: + void setReferenceCapacitor (const Hurricane::Name& referenceCapacitorName); + inline MetaCapacitor* getReferenceCapacitor (); + inline const MetaCapacitor* getReferenceCapacitor () const; + inline const Type& getType () const; + inline int getRow () const; + inline bool isMIM () const; + inline bool isPIP () const; + inline bool isMOM () const; + inline double getCE () const; + inline int getOperatorIndex () const; + inline void setCE ( double ); + inline void setOperatorIndex ( int ); + protected: + CapacitorFamily ( Hurricane::Library* , const Hurricane::Name& , const Type& ); + inline void setReferenceCapacitor ( MetaCapacitor* ); + virtual void createConnections() = 0; + private: + inline MetaCapacitor* _secureGetReferenceCapacitor (); + inline const MetaCapacitor* _secureGetReferenceCapacitor () const; + + private: + const Type _type; + MetaCapacitor* _referenceCapacitor; + int _operatorIndex; + int _row; + }; + + inline MetaCapacitor* CapacitorFamily::getReferenceCapacitor () { return _referenceCapacitor; } + inline const MetaCapacitor* CapacitorFamily::getReferenceCapacitor () const { return _referenceCapacitor; } + inline const CapacitorFamily::Type& CapacitorFamily::getType () const { return _type; } + inline int CapacitorFamily::getRow () const { return _row; } + + inline bool CapacitorFamily::isMIM () const { return getType() == MIM; } + inline bool CapacitorFamily::isPIP () const { return getType() == PIP; } + inline bool CapacitorFamily::isMOM () const { return getType() == MOM; } + + inline double CapacitorFamily::getCE () const { return _secureGetReferenceCapacitor()->getCE(); } + inline int CapacitorFamily::getOperatorIndex () const { return _operatorIndex; } + + inline void CapacitorFamily::setCE (double ce) { _secureGetReferenceCapacitor()->setCE(ce); } + inline void CapacitorFamily::setReferenceCapacitor (MetaCapacitor* metaCapacitor) { _referenceCapacitor = metaCapacitor; } + inline void CapacitorFamily::setOperatorIndex (int i) { _operatorIndex = i; } + + + inline MetaCapacitor* CapacitorFamily::_secureGetReferenceCapacitor () + { + if (not _referenceCapacitor) throw Hurricane::Error("No MetaCapacitor"); + return _referenceCapacitor; + } + + inline const MetaCapacitor* CapacitorFamily::_secureGetReferenceCapacitor () const + { + if (not _referenceCapacitor) throw Hurricane::Error("No MetaCapacitor"); + return _referenceCapacitor; + } + + +} // Analog namespace. + +#endif // ANALOG_CAPACITOR_FAMILY_H diff --git a/hurricane/src/analog/hurricane/analog/CapacitorFamilyNames.h b/hurricane/src/analog/hurricane/analog/CapacitorFamilyNames.h new file mode 100644 index 00000000..ff27b0df --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/CapacitorFamilyNames.h @@ -0,0 +1,35 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/CapacitorFamilyNames.h" | +// +-----------------------------------------------------------------+ + +#ifndef ANALOG_CAPACITOR_FAMILYNAMES_H +#define ANALOG_CAPACITOR_FAMILYNAMES_H + +#include + +namespace Analog { + + + class CapacitorFamilyNames { + public: + static const char* PIPCapacitor; + static const char* MIMCapacitor; + static const char* MOMCapacitor; + }; + + +} // Analog namespace. + + +#endif // ANALOG_CAPACITOR_FAMILYNAMES_H diff --git a/hurricane/src/analog/hurricane/analog/CapacitorParameter.h b/hurricane/src/analog/hurricane/analog/CapacitorParameter.h new file mode 100644 index 00000000..20d06e28 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/CapacitorParameter.h @@ -0,0 +1,44 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2010-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis, Eric Lao | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/CapacitorParameter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_CAPACITOR_PARAMETER_H +#define ANALOG_CAPACITOR_PARAMETER_H + +#include "hurricane/analog/Parameter.h" + + +namespace Analog { + + class CapacitorParameter : public Parameter { + public: + inline CapacitorParameter ( std::string id, double value ); + inline double getValue () const; + inline operator double () const; + inline void setValue ( double ); + private: + double _value; + }; + + + inline CapacitorParameter::CapacitorParameter ( std::string id, double value ) : Parameter(id), _value(value) { } + inline double CapacitorParameter::getValue () const { return _value; } + inline CapacitorParameter::operator double () const { return getValue(); } + inline void CapacitorParameter::setValue ( double value ) { _value = value; } + + +} // Analog namespace. + +#endif // ANALOG_CAPACITOR_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/Cascode.h b/hurricane/src/analog/hurricane/analog/Cascode.h new file mode 100644 index 00000000..1624b101 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/Cascode.h @@ -0,0 +1,46 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/Cascode.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_CASCODE_H +#define ANALOG_CASCODE_H + +#include "hurricane/analog/TransistorPair.h" + +namespace Analog { + + + class Cascode : public TransistorPair { + public: + typedef TransistorPair Super; + public: + static Cascode* create ( Hurricane::Library* + , const Hurricane::Name& + , const Type& + , bool bulkConnected ); + virtual Hurricane::Name getDeviceName () const; + protected: + Cascode ( Hurricane::Library*, const Hurricane::Name&, const Type& ); + private: + virtual void createConnections ( bool bulkConnected ); + private: + static const Hurricane::Name _cBulkConnectedName; + static const Hurricane::Name _cBulkUnconnectedName; + }; + + +} // Analog namespace. + +#endif // ANALOG_CASCODE_H diff --git a/hurricane/src/analog/hurricane/analog/ChoiceParameter.h b/hurricane/src/analog/hurricane/analog/ChoiceParameter.h new file mode 100644 index 00000000..79b8afe7 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/ChoiceParameter.h @@ -0,0 +1,49 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/ChoiceParameter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_CHOICE_PARAMETER_H +#define ANALOG_CHOICE_PARAMETER_H + +#include "hurricane/analog/Parameter.h" +#include "hurricane/analog/Choices.h" + + +namespace Analog { + + + class ChoiceParameter : public Parameter { + public: + inline ChoiceParameter ( std::string id, const Choices& ); + virtual ~ChoiceParameter () { } + Choices::Values getChoicesValues () const; + std::string getValue () const; + void setValue ( const std::string& choice ); + private: + Choices _choices; + unsigned _value; + }; + + + inline ChoiceParameter::ChoiceParameter ( std::string id, const Choices& choices ) + : Parameter(id), _choices(choices), _value(0) + { } + + inline Choices::Values ChoiceParameter::getChoicesValues () const { return _choices.getValues(); } + + +} // Analog namespace. + +#endif // ANALOG_CHOICE_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/Choices.h b/hurricane/src/analog/hurricane/analog/Choices.h new file mode 100644 index 00000000..909652aa --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/Choices.h @@ -0,0 +1,47 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/Choices.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_CHOICES_H +#define ANALOG_CHOICES_H + +#include +#include + +namespace Analog { + + + class Choices { + public: + friend class ChoiceParameter; + friend class MCheckBoxParameter; + typedef std::vector Values; + public: + Choices (); + Choices ( const Choices& ); + Choices& operator<< ( const std::string& choice ); + inline Values getValues () const; + unsigned int findIndexFor ( const std::string& choice ) const; + private: + Values _values; + }; + + + inline Choices::Values Choices::getValues () const { return _values; } + + +} // Analog namespace. + +#endif diff --git a/hurricane/src/analog/hurricane/analog/CommonDrain.h b/hurricane/src/analog/hurricane/analog/CommonDrain.h new file mode 100644 index 00000000..379877f5 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/CommonDrain.h @@ -0,0 +1,47 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/CommonDrain.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_COMMON_DRAIN_H +#define ANALOG_COMMON_DRAIN_H + +#include "hurricane/analog/TransistorPair.h" + + +namespace Analog { + + + class CommonDrain : public TransistorPair { + public: + typedef TransistorPair Super; + public: + static CommonDrain* create ( Hurricane::Library* + , const Hurricane::Name& + , const Type& + , bool bulkConnected ); + virtual Hurricane::Name getDeviceName () const; + protected: + CommonDrain ( Hurricane::Library*, const Hurricane::Name&, const Type& ); + private: + virtual void createConnections ( bool bulkConnected ); + private: + static const Hurricane::Name _cdBulkConnectedName; + static const Hurricane::Name _cdBulkUnconnectedName; + }; + + +} // Analog namespace. + +#endif // ANALOG_COMMON_DRAIN_H diff --git a/hurricane/src/analog/hurricane/analog/CommonGate.h b/hurricane/src/analog/hurricane/analog/CommonGate.h new file mode 100644 index 00000000..1dbac6e9 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/CommonGate.h @@ -0,0 +1,51 @@ +#ifndef __COMMON_GATE_H +#define __COMMON_GATE__PAIR_H + +#include "hurricane/DbU.h" + +#include "hurricaneAMS/devices/TransistorFamily.h" + +namespace Hurricane { + class Library; + class Name; +} + +class MetaTransistor; +class CommonGate : public TransistorFamily { + + public: + typedef TransistorFamily Inherit; + + static CommonGate* + create(Hurricane::Library* library, const Hurricane::Name& name, const Type& type, bool bulkConnected); + Hurricane::DbU::Unit getW() const; + Hurricane::DbU::Unit getL() const; + + virtual Hurricane::Name getDeviceName() const; + virtual Arguments* getArguments(); + + void setExternalDummy(const std::string& externalDummy ); + std::string getExternalDummy() const; + + + protected: + CommonGate(Hurricane::Library* library, const Hurricane::Name& name, const Type& type); + virtual void _postCreate(const Hurricane::Name& deviceName); + virtual void createConnections(bool bulkConnected); + + static const Hurricane::Name _cgBulkConnectedName; + static const Hurricane::Name _cgBulkUnconnectedName; + MetaTransistor* _m1; + MetaTransistor* _m2; + StepParameter* _w; + StepParameter* _l; + FormFactorParameter* _m; + SpinBoxParameter* _mInt; + SpinBoxParameter* _externalDummy; + + MCheckBoxParameter* _sourceFirst; + MCheckBoxParameter* _bulkType; + +}; + +#endif /* __COMMON_GATE__PAIR_H */ diff --git a/hurricane/src/analog/hurricane/analog/CommonGatePair.h b/hurricane/src/analog/hurricane/analog/CommonGatePair.h new file mode 100644 index 00000000..ebe88b85 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/CommonGatePair.h @@ -0,0 +1,45 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/CommonGatePair.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_COMMON_GATE_PAIR_H +#define ANALOG_COMMON_GATE_PAIR_H + +#include "hurricane/analog/TransistorPair.h" + +namespace Analog { + + + class CommonGatePair : public TransistorPair { + public: + typedef TransistorPair Super; + public: + static CommonGatePair* create ( Hurricane::Library* + , const Hurricane::Name& + , const Type& + , bool bulkConnected ); + virtual Hurricane::Name getDeviceName () const; + protected: + CommonGatePair ( Hurricane::Library*, const Hurricane::Name&, const Type& ); + virtual void createConnections ( bool bulkConnected ); + private: + static const Hurricane::Name _cgBulkConnectedName; + static const Hurricane::Name _cgBulkUnconnectedName; + }; + + +} // Analog namespace. + +#endif // ANALOG_COMMON_GATE_PAIR_H diff --git a/hurricane/src/analog/hurricane/analog/CommonSourcePair.h b/hurricane/src/analog/hurricane/analog/CommonSourcePair.h new file mode 100644 index 00000000..14bcdfb6 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/CommonSourcePair.h @@ -0,0 +1,49 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/CommonSourcePair.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_COMMON_SOURCE_PAIR_H +#define ANALOG_COMMON_SOURCE_PAIR_H + +#include "hurricane/analog/TransistorPair.h" + +namespace Analog { + + + class CommonSourcePair : public TransistorPair { + public: + typedef TransistorPair Super; + public: + static CommonSourcePair* create ( Hurricane::Library* + , const Hurricane::Name& + , const Type& + , bool bulkConnected ); + virtual Hurricane::Name getDeviceName () const; + unsigned int getRestriction ( Hurricane::Net* net ) const; + + bool isSame ( CommonSourcePair* ); + protected: + CommonSourcePair ( Hurricane::Library*, const Hurricane::Name&, const Type& ); + private: + void createConnections ( bool bulkConnected ); + private: + static const Hurricane::Name _cspBulkConnectedName; + static const Hurricane::Name _cspBulkUnconnectedName; + }; + + +} // Analog namespace. + +#endif // ANALOG_COMMON_SOURCE_PAIR_H diff --git a/hurricane/src/analog/hurricane/analog/CrossCoupledPair.h b/hurricane/src/analog/hurricane/analog/CrossCoupledPair.h new file mode 100644 index 00000000..af95a8db --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/CrossCoupledPair.h @@ -0,0 +1,46 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/CrossCoupledPair.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_CROSS_COUPLED_PAIR_H +#define ANALOG_CROSS_COUPLED_PAIR_H + +#include "hurricane/analog/TransistorPair.h" + +namespace Analog { + + + class CrossCoupledPair : public TransistorPair { + public: + typedef TransistorPair Super; + public: + static CrossCoupledPair* create ( Hurricane::Library* + , const Hurricane::Name& + , const Type& type + , bool bulkConnected ); + virtual Hurricane::Name getDeviceName () const; + protected: + CrossCoupledPair ( Hurricane::Library*, const Hurricane::Name&, const Type& ); + private: + void createConnections ( bool bulkConnected ); + private: + static const Hurricane::Name _ccpBulkConnectedName; + static const Hurricane::Name _ccpBulkUnconnectedName; + }; + + +} // Analog namespace. + +#endif // ANALOG_CROSS_COUPLED_PAIR_H diff --git a/hurricane/src/analog/hurricane/analog/Device.h b/hurricane/src/analog/hurricane/analog/Device.h new file mode 100644 index 00000000..b8bf976c --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/Device.h @@ -0,0 +1,147 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/Device.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_DEVICE_H +#define ANALOG_DEVICE_H + +#include "hurricane/Cell.h" +#include "hurricane/analog/StepParameter.h" +#include "hurricane/analog/CapacitorParameter.h" +#include "hurricane/analog/ChoiceParameter.h" +#include "hurricane/analog/SpinBoxParameter.h" +#include "hurricane/analog/MCheckBoxParameter.h" +#include "hurricane/analog/FormFactorParameter.h" +#include "hurricane/analog/Arguments.h" + + +namespace Analog { + + + class Device : public Hurricane::Cell { + public: + struct ParameterCompare: public std::binary_function { + bool operator() ( Parameter* dp1, Parameter* dp2 ) const { + if (dp1->getIndex() < dp2->getIndex()) return true; + return (dp1->getIndex() == dp2->getIndex() + and (dp1->getName () < dp2->getName ())); + } + }; + enum Restriction { NorthBlocked = (1<<0) + , SouthBlocked = (1<<1) + , EastBlocked = (1<<2) + , WestBlocked = (1<<3) + , AllBlocked = NorthBlocked|SouthBlocked|EastBlocked|WestBlocked + }; + public: + typedef Hurricane::Cell Super; + typedef std::set Parameters; + typedef std::map Layouts; + public: + virtual Hurricane::Name getDeviceName () const = 0; + virtual Arguments* getArguments () = 0; + Parameter* getParameter ( const std::string& parameterId ); + inline Parameters& getParameters (); + const std::string getLayoutScript (); + inline float getTemperature () const; + inline void setTemperature ( float temperature ); + virtual unsigned int getRestriction ( Hurricane::Net* net ) const; + void setRestrictions2 ( Hurricane::Net* net, unsigned int flags ); + unsigned int getRestrictions2 ( Hurricane::Net* net ) const; + void destroyLayout (); + protected: + Device (Hurricane::Library* + , const Hurricane::Name& ); + static void preCreate ( const Hurricane::Name& ); + virtual void _postCreate ( const Hurricane::Name& deviceName ); + virtual void _preDestroy (); + inline Hurricane::Library* getSubDevicesLibrary (); + inline void addParameter ( Parameter* parameter ); + inline StepParameter* addStepParameter ( const std::string& name, long min, long max, long step ); + inline CapacitorParameter* addCapacitorParameter ( const std::string& name, long value ); + inline SpinBoxParameter* addSpinBoxParameter ( const std::string& name, long min, long max ); + inline FormFactorParameter* addFormFactorParameter ( const std::string& name, long min, long max ); + inline ChoiceParameter* addChoiceParameter ( const std::string& name, const Choices& choices ); + inline MCheckBoxParameter* addMCheckBoxParameter ( const std::string name, const Choices& choices ); + public: + virtual Hurricane::Record* _getRecord () const; + private: + float _temperature; + Parameters _parameterSet; + ChoiceParameter* _layoutStyles; + Hurricane::Library* _subDevicesLibrary; + Hurricane::Net* _anonymous; + Layouts _layouts; + std::map _netRestrictions; + }; + + + inline Device::Parameters& Device::getParameters () { return _parameterSet; } + inline float Device::getTemperature () const { return _temperature; } + inline void Device::setTemperature ( float temperature ) { _temperature = temperature; } + inline Hurricane::Library* Device::getSubDevicesLibrary () { return _subDevicesLibrary; } + + inline void Device::addParameter ( Parameter* parameter ) + { + parameter->setIndex( _parameterSet.size() ); + _parameterSet.insert( parameter ); + } + + inline StepParameter* Device::addStepParameter ( const std::string& name, long min, long max, long step ) + { + StepParameter* stepParameter = new StepParameter( name,min,max,step ); + addParameter( stepParameter ); + return stepParameter; + } + + inline CapacitorParameter* Device::addCapacitorParameter ( const std::string& name, long value ) + { + CapacitorParameter* capacitorParameter = new CapacitorParameter( name,value ); + addParameter( capacitorParameter ); + return capacitorParameter; + } + + inline SpinBoxParameter* Device::addSpinBoxParameter ( const std::string& name, long min, long max ) + { + SpinBoxParameter* spinBoxParameter = new SpinBoxParameter( name, min, max ); + addParameter( spinBoxParameter ); + return spinBoxParameter; + } + + inline FormFactorParameter* Device::addFormFactorParameter ( const std::string& name, long min, long max ) + { + FormFactorParameter* formFactorParameter = new FormFactorParameter( name, min, max ); + addParameter( formFactorParameter ); + return formFactorParameter; + } + + inline ChoiceParameter* Device::addChoiceParameter ( const std::string& name, const Choices& choices ) + { + ChoiceParameter* choiceParameter = new ChoiceParameter( name, choices ); + addParameter( choiceParameter ); + return choiceParameter; + } + + inline MCheckBoxParameter* Device::addMCheckBoxParameter ( const std::string name, const Choices& choices ) + { + MCheckBoxParameter* mCheckBoxParameter = new MCheckBoxParameter( name, choices ); + addParameter( mCheckBoxParameter ); + return mCheckBoxParameter; + } + + +} // Analog namespace. + +#endif // ANALOG_DEVICE_H diff --git a/hurricane/src/analog/hurricane/analog/DifferentialPair.h b/hurricane/src/analog/hurricane/analog/DifferentialPair.h new file mode 100644 index 00000000..fcd16d05 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/DifferentialPair.h @@ -0,0 +1,48 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/DifferentialPair.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_DIFFERENTIAL_PAIR_H +#define ANALOG_DIFFERENTIAL_PAIR_H + +#include "hurricane/analog/TransistorPair.h" + +namespace Analog { + + + class DifferentialPair : public TransistorPair { + public: + typedef TransistorPair Super; + public: + static DifferentialPair* create ( Hurricane::Library* + , const Hurricane::Name& + , const Type& + , bool bulkConnected ); + virtual Hurricane::Name getDeviceName () const; + unsigned int getRestriction ( Hurricane::Net* net ) const; + bool isSame ( DifferentialPair* dp ); + protected: + DifferentialPair ( Hurricane::Library*, const Hurricane::Name&, const Type& ); + private: + void createConnections ( bool bulkConnected ); + private: + static const Hurricane::Name _dpBulkConnectedName; + static const Hurricane::Name _dpBulkUnconnectedName; + }; + + +} // Analog namespace. + +#endif // ANALOG_DIFFERENTIAL_PAIR_H diff --git a/hurricane/src/analog/hurricane/analog/FormFactorParameter.h b/hurricane/src/analog/hurricane/analog/FormFactorParameter.h new file mode 100644 index 00000000..baeb5fe6 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/FormFactorParameter.h @@ -0,0 +1,58 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/FormFactorParameter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_FORMFACTOR_PARAMETER_H +#define ANALOG_FORMFACTOR_PARAMETER_H + +#include "hurricane/analog/Parameter.h" + + +namespace Analog { + + class FormFactorParameter : public Parameter { + public: + inline FormFactorParameter ( std::string id, long min, long max); + inline long getMin () const; + inline long getMax () const; + inline long getValue () const; + inline operator long () const ; + inline void setValue ( long ); + inline void setMax ( long ); + private: + long _min; + long _max; + long _value; + }; + + + inline FormFactorParameter::FormFactorParameter ( std::string id, long min, long max ) + : Parameter(id) + , _min (min) + , _max (max) + , _value (min) + { } + + inline long FormFactorParameter::getMin () const { return _min; } + inline long FormFactorParameter::getMax () const { return _max; } + inline long FormFactorParameter::getValue () const { return _value; } + inline FormFactorParameter::operator long () const { return getValue(); } + inline void FormFactorParameter::setValue ( long value ) { _value = value; } + inline void FormFactorParameter::setMax ( long max ) { _max = max; } + + +} // Analog namespace. + +#endif // ANALOG_FORMFACTOR_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/LayoutGenerator.h b/hurricane/src/analog/hurricane/analog/LayoutGenerator.h new file mode 100644 index 00000000..fa5c1438 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/LayoutGenerator.h @@ -0,0 +1,156 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/LayoutGenerator.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_LAYOUT_GENERATOR_H +#define ANALOG_LAYOUT_GENERATOR_H + +#include +#include +#include +#include +#include "hurricane/Box.h" +#include "hurricane/DbU.h" + +namespace Hurricane { + class Box; +} +namespace Isobar { + class Script; +} + +class Device; +class Arguments; +class TransistorArguments; +class TransistorMultiArguments; +class CapacitorArguments; + +// To use PyObject without including Python.h which is included in .cpp file +extern "C" { + struct _object; + typedef _object PyObject; +} + + +namespace Analog { + + class LayoutGenerator { + public: + class Logger { + public: + Logger ( LayoutGenerator* ); + virtual ~Logger (); + inline LayoutGenerator* getGenerator (); + virtual void popStatus ( const std::string& ); + virtual void popError ( const std::string& ); + virtual void popScriptError (); + private: + LayoutGenerator* _generator; + }; + + public: + typedef std::map > ParamMap; + enum Verbose { Quiet = 0 + , Verbose = 1 + , VeryVerbose = 2 + , Debug = 3 + }; + enum Flags { NoFlags = 0x0000 + , ShowTimeTag = 0x0001 + , ShowError = 0x0002 + , StatusOk = 0x0004 + , ComputeBbOnly = 0x0008 + }; + + public: + static inline void setVerboseLevel ( int ); + static inline int getVerboseLevel (); + public: + LayoutGenerator (); + ~LayoutGenerator (); + inline Logger* getLogger (); + inline Device* getDevice (); + unsigned getNumberTransistor (); + unsigned getNumberStack (); + Hurricane::Box getDeviceBox (); + Hurricane::Box getActiveBox (); + inline PyObject* getMatrix (); + PyObject* getRow ( unsigned i ); + PyObject* getDic ( PyObject* row, unsigned j ); + PyObject* getParamValue ( PyObject* dic, std::string paramName ); + // double getParameterValue ( std::string trName , std::string paramName, bool& ok ); + double getParameterValue ( unsigned i, unsigned j, std::string paramName, bool& ok ); + inline double unitToMicro ( int ); + inline double unitToMetter ( int ); + public: + inline void setLogger ( Logger* ); + inline void setDevice ( Device* ); + inline void popStatus ( const std::string& ); + inline void popError ( const std::string& ); + inline void popScriptError (); + bool initialize (); + void finalize ( unsigned int flags ); + bool checkScript (); + bool checkFunctions (); + bool callCheckCoherency ( PyObject* pArgsCheck, unsigned int flags ); + bool callLayout ( PyObject* pArgsLayout ); + bool drawLayout (); + bool toPyArguments ( Arguments*, PyObject*& pArgsCheck, PyObject*& pArgsLayout, unsigned int flags ); + void pyTransistorArguments ( TransistorArguments* , unsigned m, PyObject*& pArgsCheck, PyObject*& pArgsLayout, unsigned int flags ); + void pyTransistorMultiArguments ( TransistorMultiArguments*, unsigned m, PyObject*& pArgsCheck, PyObject*& pArgsLayout, unsigned int flags ); + void pyCapacitorArguments ( CapacitorArguments* , PyObject*& pArgsCheck, PyObject*& pArgsLayout, unsigned int flags ); + private: + static int _verboseLevel; + private: + Logger* _logger; + Device* _device; + Hurricane::Box* _box; + Hurricane::Box* _activeBox; + PyObject* _matrix; + Isobar::Script* _script; + }; + + + inline LayoutGenerator* LayoutGenerator::Logger::getGenerator () { return _generator; } + + + inline int LayoutGenerator::getVerboseLevel () { return _verboseLevel; } + inline LayoutGenerator::Logger* LayoutGenerator::getLogger () { return _logger; } + inline Device* LayoutGenerator::getDevice () { return _device; } + inline void LayoutGenerator::setDevice ( Device* device ) { _device = device; } + inline void LayoutGenerator::setVerboseLevel (int lvl ) { _verboseLevel = lvl; } + inline void LayoutGenerator::popStatus ( const std::string& text ) { if (_logger) _logger->popStatus(text); } + inline void LayoutGenerator::popError ( const std::string& text ) { if (_logger) _logger->popError(text); } + inline void LayoutGenerator::popScriptError () { if (_logger) _logger->popScriptError(); } + inline PyObject* LayoutGenerator::getMatrix () { return _matrix; } + + inline double LayoutGenerator::unitToMicro ( int unit ) { + return Hurricane::DbU::getPhysical(Hurricane::DbU::getOnPhysicalGrid(unit), Hurricane::DbU::Micro); + } + + inline double LayoutGenerator::unitToMetter ( int unit ) { + return Hurricane::DbU::getPhysical(Hurricane::DbU::getOnPhysicalGrid(unit), Hurricane::DbU::Unity); + } + + inline void LayoutGenerator::setLogger ( Logger* logger ) + { + if ( _logger ) delete _logger; + _logger = logger; + } + + +} // Analog namespace. + +#endif // ANALOG_LAYOUT_GENERATOR_H diff --git a/hurricane/src/analog/hurricane/analog/LevelShifter.h b/hurricane/src/analog/hurricane/analog/LevelShifter.h new file mode 100644 index 00000000..f7afecb1 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/LevelShifter.h @@ -0,0 +1,44 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/LevelShifter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_LEVEL_SHIFTER_H +#define ANALOG_LEVEL_SHIFTER_H + +#include "hurricane/analog/TransistorPair.h" + +namespace Analog { + + class LevelShifter : public TransistorPair { + public: + typedef TransistorPair Super; + public: + static LevelShifter* create ( Hurricane::Library* + , const Hurricane::Name& + , const Type& + , bool bulkConnected ); + virtual Hurricane::Name getDeviceName () const; + protected: + LevelShifter ( Hurricane::Library*, const Hurricane::Name&, const Type& ); + virtual void createConnections ( bool bulkConnected ); + private: + static const Hurricane::Name _lsBulkConnectedName; + static const Hurricane::Name _lsBulkUnconnectedName; + }; + + +} // Analog namespace. + +#endif // ANALOG_LEVEL_SHIFTER_H diff --git a/hurricane/src/analog/hurricane/analog/MCheckBoxParameter.h b/hurricane/src/analog/hurricane/analog/MCheckBoxParameter.h new file mode 100644 index 00000000..224b5153 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/MCheckBoxParameter.h @@ -0,0 +1,50 @@ +// File: MCheckBoxParameter.h +// +// Date: 2010/10/05 +// Author: Damien Dupuis +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2010-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/MCheckBoxParameter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_MCHECKBOX_PARAMETER_H +#define ANALOG_MCHECKBOX_PARAMETER_H + +#include "hurricane/analog/Parameter.h" +#include "hurricane/analog/Choices.h" + + +namespace Analog { + + class MCheckBoxParameter : public Parameter { + public: + inline MCheckBoxParameter ( std::string id, const Choices& ); + inline Choices::Values getChoicesValues () const; + inline unsigned int getValue () const; + inline void setValue ( unsigned int ); + private: + Choices _choices; + unsigned _value; + }; + + + inline MCheckBoxParameter::MCheckBoxParameter ( std::string id, const Choices& choices ): Parameter(id), _choices(choices), _value(0) { } + inline Choices::Values MCheckBoxParameter::getChoicesValues () const { return _choices.getValues(); } + inline unsigned int MCheckBoxParameter::getValue () const { return _value; } + inline void MCheckBoxParameter::setValue ( unsigned int value ) { _value = value; } + + +} // Analog namespace. + +#endif // ANALOG_MCHECKBOX_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/MIMCapacitor.h b/hurricane/src/analog/hurricane/analog/MIMCapacitor.h new file mode 100644 index 00000000..e65bb5bb --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/MIMCapacitor.h @@ -0,0 +1,64 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/MIMCapacitor.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_MIM_CAPACITOR_H +#define ANALOG_MIM_CAPACITOR_H + +#include "hurricane/DbU.h" +#include "hurricane/analog/CapacitorFamily.h" + +namespace Analog { + + class MetaCapacitor; + + + class MIMCapacitor : public CapacitorFamily { + public: + typedef CapacitorFamily Super; + public: + static MIMCapacitor* create ( Hurricane::Library* + , const Hurricane::Name& + , const CapacitorFamily::Type& type = MIM ); + inline double getC () const; + inline double getCDraw () const; + inline double getCBorder () const; + inline double getCParasite () const; + virtual Hurricane::Name getDeviceName () const; + virtual Arguments* getArguments (); + protected: + MIMCapacitor ( Hurricane::Library* + , const Hurricane::Name& + , const CapacitorFamily::Type& type = MIM ); + virtual void _postCreate ( const Hurricane::Name& deviceName ); + virtual void createConnections (); + private: + static const Hurricane::Name _capacitorName; + MetaCapacitor* _metaCapacitor; + double _cDraw; + double _cBorder; + double _cParasite; + CapacitorParameter* _c; + }; + + double MIMCapacitor::getC () const { return _c->getValue(); } + double MIMCapacitor::getCDraw () const { return _cDraw; } + double MIMCapacitor::getCBorder () const { return _cBorder; } + double MIMCapacitor::getCParasite () const { return _cParasite; } + + +} // Analog namespace. + +#endif // ANALOH_MIM_CAPACITOR_H diff --git a/hurricane/src/analog/hurricane/analog/MetaCapacitor.h b/hurricane/src/analog/hurricane/analog/MetaCapacitor.h new file mode 100644 index 00000000..aea38caf --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/MetaCapacitor.h @@ -0,0 +1,56 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2011-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/MetaCapacitor.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_METACAPACITOR_H +#define ANALOG_METACAPACITOR_H + +#include "hurricane/Cell.h" + + +namespace Analog { + + using namespace Hurricane; + + + class MetaCapacitor : public Cell { + public: + typedef Cell Super; + public: + static MetaCapacitor* create ( Library* library, const Name& ); + inline Net* getPlate1 (); + inline Net* getPlate2 (); + inline double getCE () const; + inline void setCE (double ce); + protected: + void _postCreate (); + private: + MetaCapacitor ( Library* , const Name& ); + private: + Net* _plate1; + Net* _plate2; + double _ce; + }; + + + inline Net* MetaCapacitor::getPlate1 () { return _plate1; } + inline Net* MetaCapacitor::getPlate2 () { return _plate2; } + inline double MetaCapacitor::getCE () const { return _ce; } + inline void MetaCapacitor::setCE ( double ce ) { _ce = ce; } + + +} // Analog namespace. + +#endif // ANALOG_METACAPACITOR_H diff --git a/hurricane/src/analog/hurricane/analog/MetaTransistor.h b/hurricane/src/analog/hurricane/analog/MetaTransistor.h new file mode 100644 index 00000000..4e56e473 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/MetaTransistor.h @@ -0,0 +1,130 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/MetaTransistor.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_METATRANSISTOR_H +#define ANALOG_METATRANSISTOR_H + +#include "hurricane/Cell.h" + + +namespace Analog { + + using namespace Hurricane; + + + class MetaTransistor : public Cell { + public: + typedef Cell Super; + public: + static MetaTransistor* create ( Library* , const Name& ); + inline Net* getSource () const; + inline Net* getDrain () const; + inline Net* getGate () const; + inline Net* getBulk () const; + inline float getWE () const; + inline float getLE () const; + inline float getIDS () const; + inline float getVGS () const; + inline float getVDS () const; + inline float getVBS () const; + inline float getVG () const; + inline float getVD () const; + inline float getVS () const; + inline float getVB () const; + inline float getVEG () const; + inline float getVTH () const; + inline float getWmin () const; + inline float getWmax () const; + inline int getNfing () const; + inline void setM ( unsigned int m ); + inline void setWE ( float we ); + inline void setLE ( float le ); + inline void setIDS ( float ids ); + inline void setVGS ( float vgs ); + inline void setVDS ( float vds ); + inline void setVBS ( float vbs ); + inline void setVG ( float vg ); + inline void setVD ( float vd ); + inline void setVS ( float vs ); + inline void setVB ( float vb ); + inline void setVEG ( float veg ); + inline void setVTH ( float vth ); + inline void setWmin ( float wmin ); + inline void setWmax ( float wmax ); + inline void setNfing ( int nfing ); + protected: + void _postCreate (); + private: + MetaTransistor ( Library* , const Name& ); + private: + Net* _drain; + Net* _source; + Net* _gate; + Net* _bulk; + Net* _anonymous; + unsigned int _m; + float _we , _le; + float _ids; + float _vgs, _vds, _vbs; + float _vg , _vd , _vb , _vs; + float _veg; + float _vth; + float _wmin; + float _wmax; + int _nfing; + }; + + + inline Net* MetaTransistor::getSource () const { return _source; } + inline Net* MetaTransistor::getDrain () const { return _drain; } + inline Net* MetaTransistor::getGate () const { return _gate; } + inline Net* MetaTransistor::getBulk () const { return _bulk; } + inline float MetaTransistor::getWE () const { return _we; } + inline float MetaTransistor::getLE () const { return _le; } + inline float MetaTransistor::getIDS () const { return _ids; } + inline float MetaTransistor::getVGS () const { return _vgs; } + inline float MetaTransistor::getVDS () const { return _vds; } + inline float MetaTransistor::getVBS () const { return _vbs; } + inline float MetaTransistor::getVG () const { return _vg; } + inline float MetaTransistor::getVD () const { return _vd; } + inline float MetaTransistor::getVS () const { return _vs; } + inline float MetaTransistor::getVB () const { return _vb; } + inline float MetaTransistor::getVEG () const { return _veg; } + inline float MetaTransistor::getVTH () const { return _vth; } + inline float MetaTransistor::getWmin () const { return _wmin; } + inline float MetaTransistor::getWmax () const { return _wmax; } + inline int MetaTransistor::getNfing () const { return _nfing; } + inline void MetaTransistor::setM ( unsigned int m ) { _m = m; } + inline void MetaTransistor::setWE ( float we ) { _we = we; } + inline void MetaTransistor::setLE ( float le ) { _le = le; } + inline void MetaTransistor::setIDS ( float ids ) { _ids = ids; } + inline void MetaTransistor::setVGS ( float vgs ) { _vgs = vgs; } + inline void MetaTransistor::setVDS ( float vds ) { _vds = vds; } + inline void MetaTransistor::setVBS ( float vbs ) { _vbs = vbs; } + inline void MetaTransistor::setVG ( float vg ) { _vg = vg; } + inline void MetaTransistor::setVD ( float vd ) { _vd = vd; } + inline void MetaTransistor::setVS ( float vs ) { _vs = vs; } + inline void MetaTransistor::setVB ( float vb ) { _vb = vb; } + inline void MetaTransistor::setVEG ( float veg ) { _veg = veg; } + inline void MetaTransistor::setVTH ( float vth ) { _vth = vth; } + inline void MetaTransistor::setWmin ( float wmin ) { _wmin = wmin; } + inline void MetaTransistor::setWmax ( float wmax ) { _wmax = wmax; } + inline void MetaTransistor::setNfing ( int nfing ) { _nfing = nfing; } + + +} // Analog namespace. + +#endif // ANALOG_METATRANSISTOR_H diff --git a/hurricane/src/analog/hurricane/analog/Parameter.h b/hurricane/src/analog/hurricane/analog/Parameter.h new file mode 100644 index 00000000..3b867506 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/Parameter.h @@ -0,0 +1,54 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/Parameter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PARAMETER_H +#define ANALOG_PARAMETER_H + +#include + + +namespace Analog { + + + class Parameter { + public: + friend class Device; + enum Type { STEP=0, CHOICE=1, SPIN=2, MCHECK=3, CAPACITOR=4 }; + public: + inline const std::string& getName () const; + inline int getIndex (); + inline void setIndex ( int ); + virtual ~Parameter () { } + protected: + inline Parameter ( const std::string& name ); + private: + Parameter (); + Parameter ( const Parameter& parameter ); + private: + const std::string _name; + int _index; + }; + + + inline Parameter::Parameter ( const std::string& name ) : _name(name), _index(0) {} + inline const std::string& Parameter::getName () const { return _name; } + inline int Parameter::getIndex () { return _index; } + inline void Parameter::setIndex ( int index ) { _index = index; } + + +} // Analog namespace. + +#endif // ANALOG_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/PyBJTArguments.h b/hurricane/src/analog/hurricane/analog/PyBJTArguments.h new file mode 100644 index 00000000..9c4d79a5 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyBJTArguments.h @@ -0,0 +1,56 @@ +// -*- C++ -*- +// +// This file is part of the Coriols Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyBJTArguments.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_BJT_ARGUMENTS_H +#define ANALOG_PY_BJT_ARGUMENTS_H + +#include "Python.h" +#include "hurricane/analog/BJTArguments.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyBJTArguments". + + typedef struct { + PyObject_HEAD + Analog::BJTArguments* _object; + } PyBJTArguments; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeBJTArguments; + extern PyMethodDef PyBJTArguments_Methods[]; + + extern void PyBJTArguments_LinkPyType(); + extern void PyBJTArguments_Constructor(); + + +#define IsPyBJTArguments(v) ( (v)->ob_type == &PyTypeBJTArguments ) +#define PYBJTARGUMENTS(v) ( (PyBJTArguments*)(v) ) +#define PYBJTARGUMENTS_O(v) ( PYBJTARGUMENTS(v)->_object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_BJT_ARGUMENTS_H diff --git a/hurricane/src/analog/hurricane/analog/PyCapacitorArguments.h b/hurricane/src/analog/hurricane/analog/PyCapacitorArguments.h new file mode 100644 index 00000000..27646a51 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyCapacitorArguments.h @@ -0,0 +1,56 @@ +// -*- C++ -*- +// +// This file is part of the Coriols Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyCapacitorArguments.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_CAPACITOR_ARGUMENTS_H +#define ANALOG_PY_CAPACITOR_ARGUMENTS_H + +#include "Python.h" +#include "hurricane/analog/CapacitorArguments.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyCapacitorArguments". + + typedef struct { + PyObject_HEAD + Analog::CapacitorArguments* _object; + } PyCapacitorArguments; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeCapacitorArguments; + extern PyMethodDef PyCapacitorArguments_Methods[]; + + extern void PyCapacitorArguments_LinkPyType(); + extern void PyCapacitorArguments_Constructor(); + + +#define IsPyCapacitorArguments(v) ( (v)->ob_type == &PyTypeCapacitorArguments ) +#define PYCAPACITORARGUMENTS(v) ( (PyCapacitorArguments*)(v) ) +#define PYCAPACITORARGUMENTS_O(v) ( PYCAPACITORARGUMENTS(v)->_object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_CAPACITOR_ARGUMENTS_H diff --git a/hurricane/src/analog/hurricane/analog/PyCapacitorFamily.h b/hurricane/src/analog/hurricane/analog/PyCapacitorFamily.h new file mode 100644 index 00000000..e9113a19 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyCapacitorFamily.h @@ -0,0 +1,56 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyCapacitorFamily.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_CAPACITOR_FAMILY_H +#define ANALOG_PY_CAPACITOR_FAMILY_H + +#include "hurricane/analog/PyDevice.h" +#include "hurricane/analog/CapacitorFamily.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyCapacitorFamily". + + typedef struct { + PyDevice _baseObject; + } PyCapacitorFamily; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeCapacitorFamily; + extern PyMethodDef PyCapacitorFamily_Methods[]; + + extern PyObject* PyCapacitorFamily_Link ( Analog::CapacitorFamily* object ); + extern void PyCapacitorFamily_LinkPyType (); + extern void PyCapacitorFamily_postModuleInit (); + + +#define IsPyCapacitorFamily(v) ( (v)->ob_type == &PyTypeCapacitorFamily ) +#define PYCAPACITORFAMILY(v) ( (PyCapacitorFamily*)(v) ) +#define PYCAPACITORFAMILY_O(v) ( PYCAPACITORFAMILY(v)->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_CAPACITOR_FAMILY_H diff --git a/hurricane/src/analog/hurricane/analog/PyCapacitorParameter.h b/hurricane/src/analog/hurricane/analog/PyCapacitorParameter.h new file mode 100644 index 00000000..008bf3bc --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyCapacitorParameter.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyCapacitorParameter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_CAPACITOR_PARAMETER_H +#define ANALOG_PY_CAPACITOR_PARAMETER_H + +#include "hurricane/analog/PyParameter.h" +#include "hurricane/analog/CapacitorParameter.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyCapacitorParameter". + + typedef struct { + PyParameter _baseObject; + } PyCapacitorParameter; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeCapacitorParameter; + extern PyMethodDef PyCapacitorParameter_Methods[]; + + extern PyObject* PyCapacitorParameter_Link ( Analog::CapacitorParameter* object ); + extern void PyCapacitorParameter_LinkPyType (); + + +#define IsPyCapacitorParameter(v) ( (v)->ob_type == &PyTypeCapacitorParameter ) +#define PYCAPACITORPARAMETER(v) ( (PyCapacitorParameter*)(v) ) +#define PYCAPACITORPARAMETER_O(v) ( PYCAPACITORPARAMETER(v)->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_CAPACITOR_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/PyCascode.h b/hurricane/src/analog/hurricane/analog/PyCascode.h new file mode 100644 index 00000000..5ec251bf --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyCascode.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyCascode.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_CASCODE_H +#define ANALOG_PY_CASCODE_H + +#include "hurricane/analog/PyTransistorPair.h" +#include "hurricane/analog/Cascode.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyCascode". + + typedef struct { + PyTransistorPair _baseObject; + } PyCascode; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeCascode; + extern PyMethodDef PyCascode_Methods[]; + + extern PyObject* PyCascode_Link ( Analog::Cascode* object ); + extern void PyCascode_LinkPyType (); + + +#define IsPyCascode(v) ( (v)->ob_type == &PyTypeCascode ) +#define PYCASCODE(v) ( (PyCascode*)(v) ) +#define PYCASCODE_O(v) ( PYCASCODE(v)->_baseObject->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_CASCODE_H diff --git a/hurricane/src/analog/hurricane/analog/PyChoiceParameter.h b/hurricane/src/analog/hurricane/analog/PyChoiceParameter.h new file mode 100644 index 00000000..061f9e13 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyChoiceParameter.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyChoiceParameter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_CHOICE_PARAMETER_H +#define ANALOG_PY_CHOICE_PARAMETER_H + +#include "hurricane/analog/PyParameter.h" +#include "hurricane/analog/ChoiceParameter.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyChoiceParameter". + + typedef struct { + PyParameter _baseObject; + } PyChoiceParameter; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeChoiceParameter; + extern PyMethodDef PyChoiceParameter_Methods[]; + + extern PyObject* PyChoiceParameter_Link ( Analog::ChoiceParameter* object ); + extern void PyChoiceParameter_LinkPyType (); + + +#define IsPyChoiceParameter(v) ( (v)->ob_type == &PyTypeChoiceParameter ) +#define PYCHOICEPARAMETER(v) ( (PyChoiceParameter*)(v) ) +#define PYCHOICEPARAMETER_O(v) ( PYCHOICEPARAMETER(v)->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_CHOICE_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/PyCommonDrain.h b/hurricane/src/analog/hurricane/analog/PyCommonDrain.h new file mode 100644 index 00000000..63591de0 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyCommonDrain.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyCommonDrain.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_COMMON_DRAIN_H +#define ANALOG_PY_COMMON_DRAIN_H + +#include "hurricane/analog/PyTransistorPair.h" +#include "hurricane/analog/CommonDrain.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyCommonDrain". + + typedef struct { + PyTransistorPair _baseObject; + } PyCommonDrain; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeCommonDrain; + extern PyMethodDef PyCommonDrain_Methods[]; + + extern PyObject* PyCommonDrain_Link ( Analog::CommonDrain* object ); + extern void PyCommonDrain_LinkPyType (); + + +#define IsPyCommonDrain(v) ( (v)->ob_type == &PyTypeCommonDrain ) +#define PYCOMMONDRAIN(v) ( (PyCommonDrain*)(v) ) +#define PYCOMMONDRAIN_O(v) ( PYCOMMONDRAIN(v)->_baseObject->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_COMMON_DRAIN_H diff --git a/hurricane/src/analog/hurricane/analog/PyCommonGatePair.h b/hurricane/src/analog/hurricane/analog/PyCommonGatePair.h new file mode 100644 index 00000000..ae21ff69 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyCommonGatePair.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyCommonGatePair.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_COMMON_GATE_PAIR_H +#define ANALOG_PY_COMMON_GATE_PAIR_H + +#include "hurricane/analog/PyTransistorPair.h" +#include "hurricane/analog/CommonGatePair.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyCommonGatePair". + + typedef struct { + PyTransistorPair _baseObject; + } PyCommonGatePair; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeCommonGatePair; + extern PyMethodDef PyCommonGatePair_Methods[]; + + extern PyObject* PyCommonGatePair_Link ( Analog::CommonGatePair* object ); + extern void PyCommonGatePair_LinkPyType (); + + +#define IsPyCommonGatePair(v) ( (v)->ob_type == &PyTypeCommonGatePair ) +#define PYCOMMONGATEPAIR(v) ( (PyCommonGatePair*)(v) ) +#define PYCOMMONGATEPAIR_O(v) ( PYCOMMONGATEPAIR(v)->_baseObject->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_COMMON_GATE_PAIR_H diff --git a/hurricane/src/analog/hurricane/analog/PyCommonSourcePair.h b/hurricane/src/analog/hurricane/analog/PyCommonSourcePair.h new file mode 100644 index 00000000..cf63fcdb --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyCommonSourcePair.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyCommonSourcePair.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_COMMON_SOURCE_PAIR_H +#define ANALOG_PY_COMMON_SOURCE_PAIR_H + +#include "hurricane/analog/PyTransistorPair.h" +#include "hurricane/analog/CommonSourcePair.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyCommonSourcePair". + + typedef struct { + PyTransistorPair _baseObject; + } PyCommonSourcePair; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeCommonSourcePair; + extern PyMethodDef PyCommonSourcePair_Methods[]; + + extern PyObject* PyCommonSourcePair_Link ( Analog::CommonSourcePair* object ); + extern void PyCommonSourcePair_LinkPyType (); + + +#define IsPyCommonSourcePair(v) ( (v)->ob_type == &PyTypeCommonSourcePair ) +#define PYCOMMONSOURCEPAIR(v) ( (PyCommonSourcePair*)(v) ) +#define PYCOMMONSOURCEPAIR_O(v) ( PYCOMMONSOURCEPAIR(v)->_baseObject->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_COMMON_SOURCE_PAIR_H diff --git a/hurricane/src/analog/hurricane/analog/PyCrossCoupledPair.h b/hurricane/src/analog/hurricane/analog/PyCrossCoupledPair.h new file mode 100644 index 00000000..c2632e9e --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyCrossCoupledPair.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyCrossCoupledPair.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_CROSS_COUPLED_PAIR_H +#define ANALOG_PY_CROSS_COUPLED_PAIR_H + +#include "hurricane/analog/PyTransistorPair.h" +#include "hurricane/analog/CrossCoupledPair.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyCrossCoupledPair". + + typedef struct { + PyTransistorPair _baseObject; + } PyCrossCoupledPair; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeCrossCoupledPair; + extern PyMethodDef PyCrossCoupledPair_Methods[]; + + extern PyObject* PyCrossCoupledPair_Link ( Analog::CrossCoupledPair* object ); + extern void PyCrossCoupledPair_LinkPyType (); + + +#define IsPyCrossCoupledPair(v) ( (v)->ob_type == &PyTypeCrossCoupledPair ) +#define PYCROSSCOUPLEDPAIR(v) ( (PyCrossCoupledPair*)(v) ) +#define PYCROSSCOUPLEDPAIR_O(v) ( PYCROSSCOUPLEDPAIR(v)->_baseObject->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_CROSS_COUPLED_PAIR_H diff --git a/hurricane/src/analog/hurricane/analog/PyDevice.h b/hurricane/src/analog/hurricane/analog/PyDevice.h new file mode 100644 index 00000000..f58a5301 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyDevice.h @@ -0,0 +1,56 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2010-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyDevice.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_DEVICE_H +#define ANALOG_PY_DEVICE_H + +#include "hurricane/isobar/PyCell.h" +#include "hurricane/analog/Device.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyDevice". + + typedef struct { + PyCell _baseObject; + } PyDevice; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeDevice; + extern PyMethodDef PyDevice_Methods[]; + + extern PyObject* PyDevice_Link ( Analog::Device* object ); + extern void PyDevice_LinkPyType (); + extern void PyDevice_postModuleInit (); + + +#define IsPyDevice(v) ( (v)->ob_type == &PyTypeDevice ) +#define PYDEVICE(v) ( (PyDevice*)(v) ) +#define PYDEVICE_O(v) ( dynamic_cast(PYDEVICE(v)->_baseObject._baseObject._object) ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_DEVICE_H diff --git a/hurricane/src/analog/hurricane/analog/PyDifferentialPair.h b/hurricane/src/analog/hurricane/analog/PyDifferentialPair.h new file mode 100644 index 00000000..af3288ab --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyDifferentialPair.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyDifferentialPair.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_DIFFERENTIAL_PAIR_H +#define ANALOG_PY_DIFFERENTIAL_PAIR_H + +#include "hurricane/analog/PyTransistorPair.h" +#include "hurricane/analog/DifferentialPair.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyDifferentialPair". + + typedef struct { + PyTransistorPair _baseObject; + } PyDifferentialPair; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeDifferentialPair; + extern PyMethodDef PyDifferentialPair_Methods[]; + + extern PyObject* PyDifferentialPair_Link ( Analog::DifferentialPair* object ); + extern void PyDifferentialPair_LinkPyType (); + + +#define IsPyDifferentialPair(v) ( (v)->ob_type == &PyTypeDifferentialPair ) +#define PYDIFFERENTIALPAIR(v) ( (PyDifferentialPair*)(v) ) +#define PYDIFFERENTIALPAIR_O(v) ( PYDIFFERENTIALPAIR(v)->_baseObject->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_DIFFERENTIAL_PAIR_H diff --git a/hurricane/src/analog/hurricane/analog/PyFormFactorParameter.h b/hurricane/src/analog/hurricane/analog/PyFormFactorParameter.h new file mode 100644 index 00000000..a587a27c --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyFormFactorParameter.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyFormFactorParameter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_FORM_FACTOR_PARAMETER_H +#define ANALOG_PY_FORM_FACTOR_PARAMETER_H + +#include "hurricane/analog/PyParameter.h" +#include "hurricane/analog/FormFactorParameter.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyFormFactorParameter". + + typedef struct { + PyParameter _baseObject; + } PyFormFactorParameter; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeFormFactorParameter; + extern PyMethodDef PyFormFactorParameter_Methods[]; + + extern PyObject* PyFormFactorParameter_Link ( Analog::FormFactorParameter* object ); + extern void PyFormFactorParameter_LinkPyType (); + + +#define IsPyFormFactorParameter(v) ( (v)->ob_type == &PyTypeFormFactorParameter ) +#define PYFORMFACTORPARAMETER(v) ( (PyFormFactorParameter*)(v) ) +#define PYFORMFACTORPARAMETER_O(v) ( PYFORMFACTORPARAMETER(v)->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_FORM_FACTOR_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/PyLayoutGenerator.h b/hurricane/src/analog/hurricane/analog/PyLayoutGenerator.h new file mode 100644 index 00000000..4a2c8306 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyLayoutGenerator.h @@ -0,0 +1,57 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyLayoutGenerator.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_LAYOUT_GENERATOR_H +#define ANALOG_PY_LAYOUT_GENERATOR_H + +#include "hurricane/isobar/PyHurricane.h" +#include "hurricane/analog/LayoutGenerator.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyLayoutGenerator". + + typedef struct { + PyObject_HEAD + Analog::LayoutGenerator* _object; + } PyLayoutGenerator; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeLayoutGenerator; + extern PyMethodDef PyLayoutGenerator_Methods[]; + + extern PyObject* PyLayoutGenerator_Link ( Analog::LayoutGenerator* object ); + extern void PyLayoutGenerator_LinkPyType (); + extern void PyLayoutGenerator_postModuleInit (); + + +#define IsPyLayoutGenerator(v) ( (v)->ob_type == &PyTypeLayoutGenerator ) +#define PYLAYOUTGENERATOR(v) ( (PyLayoutGenerator*)(v) ) +#define PYLAYOUTGENERATOR_O(v) ( PYLAYOUTGENERATOR(v)->_object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_LAYOUT_GENERATOR_H diff --git a/hurricane/src/analog/hurricane/analog/PyLevelShifter.h b/hurricane/src/analog/hurricane/analog/PyLevelShifter.h new file mode 100644 index 00000000..f0662ab0 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyLevelShifter.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyLevelShifter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_LEVEL_SHIFTER_H +#define ANALOG_PY_LEVEL_SHIFTER_H + +#include "hurricane/analog/PyTransistorPair.h" +#include "hurricane/analog/LevelShifter.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyLevelShifter". + + typedef struct { + PyTransistorPair _baseObject; + } PyLevelShifter; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeLevelShifter; + extern PyMethodDef PyLevelShifter_Methods[]; + + extern PyObject* PyLevelShifter_Link ( Analog::LevelShifter* object ); + extern void PyLevelShifter_LinkPyType (); + + +#define IsPyLevelShifter(v) ( (v)->ob_type == &PyTypeLevelShifter ) +#define PYLEVELSHIFTER(v) ( (PyLevelShifter*)(v) ) +#define PYLEVELSHIFTER_O(v) ( PYLEVELSHIFTER(v)->_baseObject->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_LEVEL_SHIFTER_H diff --git a/hurricane/src/analog/hurricane/analog/PyMCheckBoxParameter.h b/hurricane/src/analog/hurricane/analog/PyMCheckBoxParameter.h new file mode 100644 index 00000000..b242e2f4 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyMCheckBoxParameter.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyMCheckBoxParameter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_M_CHECKBOX_PARAMETER_H +#define ANALOG_PY_M_CHECKBOX_PARAMETER_H + +#include "hurricane/analog/PyParameter.h" +#include "hurricane/analog/MCheckBoxParameter.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyMCheckBoxParameter". + + typedef struct { + PyParameter _baseObject; + } PyMCheckBoxParameter; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeMCheckBoxParameter; + extern PyMethodDef PyMCheckBoxParameter_Methods[]; + + extern PyObject* PyMCheckBoxParameter_Link ( Analog::MCheckBoxParameter* object ); + extern void PyMCheckBoxParameter_LinkPyType (); + + +#define IsPyMCheckBoxParameter(v) ( (v)->ob_type == &PyTypeMCheckBoxParameter ) +#define PYMCHECKBOXPARAMETER(v) ( (PyMCheckBoxParameter*)(v) ) +#define PYMCHECKBOXPARAMETER_O(v) ( PYMCHECKBOXPARAMETER(v)->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_M_CHECKBOX_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/PyMIMCapacitor.h b/hurricane/src/analog/hurricane/analog/PyMIMCapacitor.h new file mode 100644 index 00000000..8a31e494 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyMIMCapacitor.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyMIMCapacitor.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_MIM_CAPACITOR_H +#define ANALOG_PY_MIM_CAPACITOR_H + +#include "hurricane/analog/PyCapacitorFamily.h" +#include "hurricane/analog/MIMCapacitor.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyMIMCapacitor". + + typedef struct { + PyCapacitorFamily _baseObject; + } PyMIMCapacitor; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeMIMCapacitor; + extern PyMethodDef PyMIMCapacitor_Methods[]; + + extern PyObject* PyMIMCapacitor_Link ( Analog::MIMCapacitor* object ); + extern void PyMIMCapacitor_LinkPyType (); + + +#define IsPyMIMCapacitor(v) ( (v)->ob_type == &PyTypeMIMCapacitor ) +#define PYMIMCAPACITOR(v) ( (PyMIMCapacitor*)(v) ) +#define PYMIMCAPACITOR_O(v) ( PYMIMCAPACITOR(v)->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_MIM_CAPACITOR_H diff --git a/hurricane/src/analog/hurricane/analog/PyParameter.h b/hurricane/src/analog/hurricane/analog/PyParameter.h new file mode 100644 index 00000000..5f414dc7 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyParameter.h @@ -0,0 +1,59 @@ +// -*- C++ -*- +// +// This file is part of the Coriols Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyParameter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_PARAMETER_H +#define ANALOG_PY_PARAMETER_H + +#include "hurricane/isobar/PyHurricane.h" +#include "hurricane/analog/Parameter.h" + + +namespace Isobar { + +using namespace Hurricane; + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyParameter". + + typedef struct { + PyObject_HEAD + Analog::Parameter* _object; + } PyParameter; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.ccp". + + extern PyTypeObject PyTypeParameter; + extern PyMethodDef PyParameter_Methods[]; + + extern PyObject* PyParameter_Link ( Analog::Parameter* object ); + extern PyObject* PyParameter_LinkDerived ( Analog::Parameter* object ); + extern void PyParameter_LinkPyType (); + extern void PyParameter_postModuleInit (); + +# define IsPyParameter(v) ( (v)->ob_type == &PyTypeParameter ) +# define PYPARAMETER(v) ( (PyParameter*)(v) ) +# define PYPARAMETER_O(v) ( PYPARAMETER(v)->_object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/PySimpleCurrentMirror.h b/hurricane/src/analog/hurricane/analog/PySimpleCurrentMirror.h new file mode 100644 index 00000000..4ec6cde4 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PySimpleCurrentMirror.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : ./hurricane/analog/PySimpleCurrentMirror.h | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_SIMPLE_CURRENT_MIRROR_H +#define ANALOG_PY_SIMPLE_CURRENT_MIRROR_H + +#include "hurricane/analog/PyTransistorPair.h" +#include "hurricane/analog/SimpleCurrentMirror.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PySimpleCurrentMirror". + + typedef struct { + PyTransistorPair _baseObject; + } PySimpleCurrentMirror; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeSimpleCurrentMirror; + extern PyMethodDef PySimpleCurrentMirror_Methods[]; + + extern PyObject* PySimpleCurrentMirror_Link ( Analog::SimpleCurrentMirror* object ); + extern void PySimpleCurrentMirror_LinkPyType (); + + +#define IsPySimpleCurrentMirror(v) ( (v)->ob_type == &PyTypeSimpleCurrentMirror ) +#define PYSIMPLECURRENTMIRROR(v) ( (PySimpleCurrentMirror*)(v) ) +#define PYSIMPLECURRENTMIRROR_O(v) ( PYSIMPLECURRENTMIRROR(v)->_baseObject->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_SIMPLE_CURRENT_MIRROR_H diff --git a/hurricane/src/analog/hurricane/analog/PySpinBoxParameter.h b/hurricane/src/analog/hurricane/analog/PySpinBoxParameter.h new file mode 100644 index 00000000..9dac6769 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PySpinBoxParameter.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PySpinBoxParameter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_SPINBOX_PARAMETER_H +#define ANALOG_PY_SPINBOX_PARAMETER_H + +#include "hurricane/analog/PyParameter.h" +#include "hurricane/analog/SpinBoxParameter.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PySpinBoxParameter". + + typedef struct { + PyParameter _baseObject; + } PySpinBoxParameter; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeSpinBoxParameter; + extern PyMethodDef PySpinBoxParameter_Methods[]; + + extern PyObject* PySpinBoxParameter_Link ( Analog::SpinBoxParameter* object ); + extern void PySpinBoxParameter_LinkPyType (); + + +#define IsPySpinBoxParameter(v) ( (v)->ob_type == &PyTypeSpinBoxParameter ) +#define PYSPINBOXPARAMETER(v) ( (PySpinBoxParameter*)(v) ) +#define PYSPINBOXPARAMETER_O(v) ( PYSPINBOXPARAMETER(v)->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_SPINBOX_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/PyStepParameter.h b/hurricane/src/analog/hurricane/analog/PyStepParameter.h new file mode 100644 index 00000000..3859c956 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyStepParameter.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyStepParameter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_STEP_PARAMETER_H +#define ANALOG_PY_STEP_PARAMETER_H + +#include "hurricane/analog/PyParameter.h" +#include "hurricane/analog/StepParameter.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyStepParameter". + + typedef struct { + PyParameter _baseObject; + } PyStepParameter; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeStepParameter; + extern PyMethodDef PyStepParameter_Methods[]; + + extern PyObject* PyStepParameter_Link ( Analog::StepParameter* object ); + extern void PyStepParameter_LinkPyType (); + + +#define IsPyStepParameter(v) ( (v)->ob_type == &PyTypeStepParameter ) +#define PYSTEPPARAMETER(v) ( (PyStepParameter*)(v) ) +#define PYSTEPPARAMETER_O(v) ( PYSTEPPARAMETER(v)->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_STEP_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/PyTransistor.h b/hurricane/src/analog/hurricane/analog/PyTransistor.h new file mode 100644 index 00000000..76ddad42 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyTransistor.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyTransistor.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_TRANSISTOR_H +#define ANALOG_PY_TRANSISTOR_H + +#include "hurricane/analog/PyTransistorFamily.h" +#include "hurricane/analog/Transistor.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyTransistor". + + typedef struct { + PyTransistorFamily _baseObject; + } PyTransistor; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeTransistor; + extern PyMethodDef PyTransistor_Methods[]; + + extern PyObject* PyTransistor_Link ( Analog::Transistor* object ); + extern void PyTransistor_LinkPyType (); + + +#define IsPyTransistor(v) ( (v)->ob_type == &PyTypeTransistor ) +#define PYTRANSISTOR(v) ( (PyTransistor*)(v) ) +#define PYTRANSISTOR_O(v) ( PYTRANSISTOR(v)->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_TRANSISTOR_H diff --git a/hurricane/src/analog/hurricane/analog/PyTransistorArguments.h b/hurricane/src/analog/hurricane/analog/PyTransistorArguments.h new file mode 100644 index 00000000..d442f851 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyTransistorArguments.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriols Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyTransistorArguments.h" | +// +-----------------------------------------------------------------+ + +#ifndef ANALOG_PY_TRANSISTOR_ARGUMENTS_H +#define ANALOG_PY_TRANSISTOR_ARGUMENTS_H + +#include "Python.h" +#include "hurricane/analog/TransistorArguments.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyTransistorArguments". + + typedef struct { + PyObject_HEAD + Analog::TransistorArguments* _object; + } PyTransistorArguments; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeTransistorArguments; + extern PyMethodDef PyTransistorArguments_Methods[]; + + extern void PyTransistorArguments_LinkPyType(); + extern void PyTransistorArguments_Constructor(); + + +#define IsPyTransistorArguments(v) ( (v)->ob_type == &PyTypeTransistorArguments ) +#define PYTRANSISTORARGUMENTS(v) ( (PyTransistorArguments*)(v) ) +#define PYTRANSISTORARGUMENTS_O(v) ( PYTRANSISTORARGUMENTS(v)->_object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif diff --git a/hurricane/src/analog/hurricane/analog/PyTransistorFamily.h b/hurricane/src/analog/hurricane/analog/PyTransistorFamily.h new file mode 100644 index 00000000..ee0cb585 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyTransistorFamily.h @@ -0,0 +1,56 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyTransistorFamily.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_TRANSISTOR_FAMILY_H +#define ANALOG_PY_TRANSISTOR_FAMILY_H + +#include "hurricane/analog/PyDevice.h" +#include "hurricane/analog/TransistorFamily.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyTransistorFamily". + + typedef struct { + PyDevice _baseObject; + } PyTransistorFamily; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeTransistorFamily; + extern PyMethodDef PyTransistorFamily_Methods[]; + + extern PyObject* PyTransistorFamily_Link ( Analog::TransistorFamily* object ); + extern void PyTransistorFamily_LinkPyType (); + extern void PyTransistorFamily_postModuleInit (); + + +#define IsPyTransistorFamily(v) ( (v)->ob_type == &PyTypeTransistorFamily ) +#define PYTRANSISTORFAMILY(v) ( (PyTransistorFamily*)(v) ) +#define PYTRANSISTORFAMILY_O(v) ( PYTRANSISTORFAMILY(v)->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_TRANSISTOR_FAMILY_H diff --git a/hurricane/src/analog/hurricane/analog/PyTransistorMultiArguments.h b/hurricane/src/analog/hurricane/analog/PyTransistorMultiArguments.h new file mode 100644 index 00000000..fb7b7f7c --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyTransistorMultiArguments.h @@ -0,0 +1,54 @@ +// -*- C++ -*- +// +// This file is part of the Coriols Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyTransistorMultiArguments.h"| +// +-----------------------------------------------------------------+ + +#ifndef ANALOG_PY_TRANSISTOR_MULTI_ARGUMENTS_H +#define ANALOG_PY_TRANSISTOR_MULTI_ARGUMENTS_H + +#include "Python.h" +#include "hurricane/analog/TransistorMultiArguments.h" + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyTransistorMultiArguments". + + typedef struct { + PyObject_HEAD + Analog::TransistorMultiArguments* _object; + } PyTransistorMultiArguments; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeTransistorMultiArguments; + extern PyMethodDef PyTransistorMultiArguments_Methods[]; + + extern void PyTransistorMultiArguments_LinkPyType(); + extern void PyTransistorMultiArguments_Constructor(); + + +#define IsPyTransistorMultiArguments(v) ( (v)->ob_type == &PyTypeTransistorMultiArguments ) +#define PYTRANSISTORMULTIARGUMENTS(v) ( (PyTransistorMultiArguments*)(v) ) +#define PYTRANSISTORMULTIARGUMENTS_O(v) ( PYTRANSISTORMULTIARGUMENTS(v)->_object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif diff --git a/hurricane/src/analog/hurricane/analog/PyTransistorPair.h b/hurricane/src/analog/hurricane/analog/PyTransistorPair.h new file mode 100644 index 00000000..8c537035 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/PyTransistorPair.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/PyTransistorPair.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_PY_TRANSISTOR_PAIR_H +#define ANALOG_PY_TRANSISTOR_PAIR_H + +#include "hurricane/analog/PyTransistorFamily.h" +#include "hurricane/analog/TransistorPair.h" + + +namespace Isobar { + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyTransistorPair". + + typedef struct { + PyTransistorFamily _baseObject; + } PyTransistorPair; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeTransistorPair; + extern PyMethodDef PyTransistorPair_Methods[]; + + extern PyObject* PyTransistorPair_Link ( Analog::TransistorPair* object ); + extern void PyTransistorPair_LinkPyType (); + + +#define IsPyTransistorPair(v) ( (v)->ob_type == &PyTypeTransistorPair ) +#define PYTRANSISTORPAIR(v) ( (PyTransistorPair*)(v) ) +#define PYTRANSISTORPAIR_O(v) ( PYTRANSISTORPAIR(v)->_baseObject->_baseObject._object ) + + +} // extern "C". + +} // Isobar namespace. + +#endif // ANALOG_PY_TRANSISTOR_PAIR_H diff --git a/hurricane/src/analog/hurricane/analog/SimpleCurrentMirror.h b/hurricane/src/analog/hurricane/analog/SimpleCurrentMirror.h new file mode 100644 index 00000000..78fabf84 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/SimpleCurrentMirror.h @@ -0,0 +1,47 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/SimpleCurrentMirror.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_SIMPLE_CURRENT_MIRROR_H +#define ANALOG_SIMPLE_CURRENT_MIRROR_H + +#include "hurricane/analog/TransistorPair.h" + +namespace Analog { + + + class SimpleCurrentMirror : public TransistorPair { + public: + typedef TransistorPair Super; + public: + static SimpleCurrentMirror* create ( Hurricane::Library* + , const Hurricane::Name& + , const Type& + , bool bulkConnected ); + virtual Hurricane::Name getDeviceName () const; + unsigned int getRestriction ( Hurricane::Net* net ) const; + + protected: + SimpleCurrentMirror ( Hurricane::Library*, const Hurricane::Name&, const Type& ); + virtual void createConnections ( bool bulkConnected ); + private: + static const Hurricane::Name _scmBulkConnectedName; + static const Hurricane::Name _scmBulkUnconnectedName; + }; + + +} // Analog namespace. + +#endif // ANALOG_SIMPLE_CURRENT_MIRROR_H diff --git a/hurricane/src/analog/hurricane/analog/SpinBoxParameter.h b/hurricane/src/analog/hurricane/analog/SpinBoxParameter.h new file mode 100644 index 00000000..37a78232 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/SpinBoxParameter.h @@ -0,0 +1,50 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/SpinBoxParameter.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_SPINBOX_PARAMETER_H +#define ANALOG_SPINBOX_PARAMETER_H + +#include "hurricane/analog/Parameter.h" + +namespace Analog { + + + class SpinBoxParameter : public Parameter { + public: + inline SpinBoxParameter ( std::string id, long min, long max ); + inline long getMin () const; + inline long getMax () const; + inline long getValue () const; + inline operator long () const; + inline void setValue ( long value ); + private: + long _min; + long _max; + long _value; + }; + + + inline SpinBoxParameter::SpinBoxParameter ( std::string id, long min, long max ): Parameter(id), _min(min), _max(max), _value(min) { } + inline long SpinBoxParameter::getMin () const { return _min; } + inline long SpinBoxParameter::getMax () const { return _max; } + inline long SpinBoxParameter::getValue () const { return _value; } + inline SpinBoxParameter::operator long () const { return getValue(); } + inline void SpinBoxParameter::setValue ( long value ) { _value = value; } + + +} // Analog namespace. + +#endif // ANALOG_SPINBOX_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/StepParameter.h b/hurricane/src/analog/hurricane/analog/StepParameter.h new file mode 100644 index 00000000..27a11e98 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/StepParameter.h @@ -0,0 +1,52 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/Choices.h" | +// +-----------------------------------------------------------------+ + +#ifndef ANALOG_STEP_PARAMETER_H +#define ANALOG_STEP_PARAMETER_H + +#include "hurricane/analog/Parameter.h" + + +namespace Analog { + + class StepParameter : public Parameter { + public: + inline StepParameter ( std::string id, long min, long max, long step ); + inline long getMin () const; + inline long getMax () const; + inline long getStep () const; + inline long getValue () const; + inline operator long () const; + inline void setValue ( long ); + private: + long _min; + long _max; + long _step; + long _value; + }; + + + inline StepParameter::StepParameter ( std::string id, long min, long max, long step ): Parameter(id), _min(min), _max(max), _step(step), _value(min) {} + inline long StepParameter::getMin () const { return _min; } + inline long StepParameter::getMax () const { return _max; } + inline long StepParameter::getStep () const { return _step; } + inline long StepParameter::getValue () const { return _value; } + inline StepParameter::operator long () const { return getValue(); } + inline void StepParameter::setValue ( long value ) { _value = value; } + + +} // Analog namespace. + +#endif // ANALOG_STEP_PARAMETER_H diff --git a/hurricane/src/analog/hurricane/analog/Transistor.h b/hurricane/src/analog/hurricane/analog/Transistor.h new file mode 100644 index 00000000..907e260a --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/Transistor.h @@ -0,0 +1,51 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/Transistor.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_TRANSISTOR_H +#define ANALOG_TRANSISTOR_H + +#include "hurricane/analog/TransistorFamily.h" + +namespace Analog { + + + class Transistor : public TransistorFamily { + public: + typedef TransistorFamily Super; + public: + static Transistor* create ( Hurricane::Library* + , const Hurricane::Name& + , const Type& + , bool bulkConnected ); + virtual Hurricane::Name getDeviceName () const; + virtual Arguments* getArguments (); + unsigned int getRestriction ( Hurricane::Net* net ) const; + bool isSame (Transistor* ts); + + protected: + Transistor ( Hurricane::Library* , const Hurricane::Name& , const Type& ); + virtual void _postCreate ( const Hurricane::Name& deviceName ); + virtual void createConnections ( bool bulkConnected ); + private: + static const Hurricane::Name _transistorBulkConnectedName; + static const Hurricane::Name _transistorBulkUnconnectedName; + MetaTransistor* _metaTransistor; + }; + + +} // Analog namespace. + +#endif // ANALOG_TRANSISTOR_H diff --git a/hurricane/src/analog/hurricane/analog/TransistorArguments.h b/hurricane/src/analog/hurricane/analog/TransistorArguments.h new file mode 100644 index 00000000..ded9fde5 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/TransistorArguments.h @@ -0,0 +1,76 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/TransistorArguments.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_TRANSISTOR_ARGUMENTS_H +#define ANALOG_TRANSISTOR_ARGUMENTS_H + +#include "hurricane/DbU.h" +#include "hurricane/analog/Arguments.h" + +namespace Analog { + + + class TransistorArguments : public Arguments { + public: + typedef Arguments Super; + public: + TransistorArguments ( bool isNMOS + , bool isBulkConnected + , bool isSourceFirst + , std::string bulkType + , Hurricane::DbU::Unit w + , Hurricane::DbU::Unit l + , unsigned m + , unsigned externalDummy ); + TransistorArguments ( const TransistorArguments& tArgs ); + virtual TransistorArguments* getClone (); + inline bool isNMOS () const; + inline bool isBulkConnected () const; + inline bool isSourceFirst () const; + inline unsigned int getM () const; + inline unsigned int getExternalDummy () const; + inline std::string getBulkType () const; + inline Hurricane::DbU::Unit getW () const; + inline Hurricane::DbU::Unit getL () const; + inline void setM ( unsigned int m); + inline void setExternalDummy ( unsigned int externalDummy ); + private: + bool _isNMOS; + bool _isBulkConnected; + bool _isSourceFirst; + std::string _bulkType; + Hurricane::DbU::Unit _w; + Hurricane::DbU::Unit _l; + unsigned _m; + unsigned _externalDummy; + }; + + + inline bool TransistorArguments::isNMOS () const { return _isNMOS; }; + inline bool TransistorArguments::isBulkConnected () const { return _isBulkConnected; }; + inline bool TransistorArguments::isSourceFirst () const { return _isSourceFirst; }; + inline unsigned int TransistorArguments::getM () const { return _m; }; + inline unsigned int TransistorArguments::getExternalDummy () const { return _externalDummy; }; + inline std::string TransistorArguments::getBulkType () const { return _bulkType; }; + inline Hurricane::DbU::Unit TransistorArguments::getW () const { return _w; }; + inline Hurricane::DbU::Unit TransistorArguments::getL () const { return _l; }; + inline void TransistorArguments::setM ( unsigned int m) { _m = m; }; + inline void TransistorArguments::setExternalDummy ( unsigned int externalDummy ) { _externalDummy = externalDummy; }; + + +} // Analog namespace. + +#endif // ANALOG_TRANSISTOR_ARGUMENTS_H diff --git a/hurricane/src/analog/hurricane/analog/TransistorFamily.h b/hurricane/src/analog/hurricane/analog/TransistorFamily.h new file mode 100644 index 00000000..2ab65d86 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/TransistorFamily.h @@ -0,0 +1,179 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/TransistorFamily.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_TRANSISTOR_FAMILY_H +#define ANALOG_TRANSISTOR_FAMILY_H + +#include "hurricane/DbU.h" +#include "hurricane/analog/Device.h" +#include "hurricane/analog/MetaTransistor.h" + +namespace Hurricane { + class Name; + class Library; +} + + +namespace Analog { + + + class TransistorFamily : public Device { + public: + typedef Device Super; + + enum Type { NMOS=1, PMOS }; + public: + inline MetaTransistor* getReferenceTransistor (); + inline const MetaTransistor* getReferenceTransistor () const; + inline const Type& getType () const; + // Geometrical (layout) parameters commons to all MOS transistors. + inline bool isNMOS () const; + inline bool isPMOS () const; + inline bool isBulkConnected () const; + inline bool isSourceFirst () const; + inline long getBulkType () const; + inline float getWmin () const; + inline float getWmax () const; + inline int getNfing () const; + inline DbU::Unit getW () const; + inline DbU::Unit getL () const; + inline long getM () const; + inline long getExternalDummy () const; + inline void setSourceFirst ( const bool ); + inline void setWmin ( float ); + inline void setWmax ( float ); + inline void setNfing ( int ); + inline void setExternalDummy ( long ); + inline void setBulkType ( long ); + // Electrical parameters commons to all MOS transistors. + inline float getWE () const; + inline float getLE () const; + inline float getIDS () const; + inline float getVGS () const; + inline float getVDS () const; + inline float getVBS () const; + inline float getVG () const; + inline float getVD () const; + inline float getVS () const; + inline float getVB () const; + inline float getVEG () const; + inline float getVTH () const; + inline void setWE ( float ); + inline void setLE ( float ); + inline void setIDS ( float ); + inline void setVGS ( float ); + inline void setVDS ( float ); + inline void setVBS ( float ); + inline void setVG ( float ); + inline void setVD ( float ); + inline void setVS ( float ); + inline void setVB ( float ); + inline void setVEG ( float ); + inline void setVTH ( float ); + // Sizing parameters commons to all MOS transistors. + inline int getOperatorIndex () const; + inline void setOperatorIndex ( int ); + + protected: + TransistorFamily ( Hurricane::Library* + , const Hurricane::Name& + , const Type& ); + void _postCreate ( const Name& deviceName ); + inline void setReferenceTransistor ( MetaTransistor* ); + virtual void createConnections ( bool bulkConnected ) = 0; + private: + inline MetaTransistor* _secureGetReferenceTransistor (); + inline const MetaTransistor* _secureGetReferenceTransistor () const; + private: + const Type _type; + MetaTransistor* _referenceTransistor; + int _operatorIndex; + StepParameter* _w; + StepParameter* _l; + FormFactorParameter* _m; + SpinBoxParameter* _externalDummy; + MCheckBoxParameter* _sourceFirst; + MCheckBoxParameter* _bulkType; + }; + + + inline MetaTransistor* TransistorFamily::getReferenceTransistor () { return _referenceTransistor; } + inline const MetaTransistor* TransistorFamily::getReferenceTransistor () const { return _referenceTransistor; } + inline const TransistorFamily::Type& TransistorFamily::getType () const { return _type; } + inline int TransistorFamily::getOperatorIndex () const { return _operatorIndex; } + inline void TransistorFamily::setOperatorIndex ( int i ) { _operatorIndex = i; } + inline void TransistorFamily::setReferenceTransistor ( MetaTransistor* mt ) { _referenceTransistor = mt; } + inline bool TransistorFamily::isNMOS () const { return getType() == NMOS; } + inline bool TransistorFamily::isPMOS () const { return getType() == PMOS; } + inline bool TransistorFamily::isBulkConnected () const { return !getNet(Hurricane::Name("B")); } + inline bool TransistorFamily::isSourceFirst () const { return (_sourceFirst->getValue() == 1); } + // Mutators. + inline void TransistorFamily::setSourceFirst ( const bool sourceFirst ) { _sourceFirst->setValue ( (sourceFirst)?1:0 ); } + inline void TransistorFamily::setWmin ( float wmin ) { _secureGetReferenceTransistor()->setWmin (wmin ); } + inline void TransistorFamily::setWmax ( float wmax ) { _secureGetReferenceTransistor()->setWmax (wmax ); } + inline void TransistorFamily::setNfing ( int nfing ) { _secureGetReferenceTransistor()->setNfing(nfing); } + inline void TransistorFamily::setExternalDummy ( long ndumm ) { _externalDummy->setValue(ndumm); } + inline void TransistorFamily::setBulkType ( long btype ) { _bulkType->setValue(btype); } + inline void TransistorFamily::setWE ( float we ) { _secureGetReferenceTransistor()->setWE (we ); } + inline void TransistorFamily::setLE ( float le ) { _secureGetReferenceTransistor()->setLE (le ); } + inline void TransistorFamily::setIDS ( float ids ) { _secureGetReferenceTransistor()->setIDS (ids ); } + inline void TransistorFamily::setVGS ( float vgs ) { _secureGetReferenceTransistor()->setVGS (vgs ); } + inline void TransistorFamily::setVDS ( float vds ) { _secureGetReferenceTransistor()->setVDS (vds ); } + inline void TransistorFamily::setVBS ( float vbs ) { _secureGetReferenceTransistor()->setVBS (vbs ); } + inline void TransistorFamily::setVG ( float vg ) { _secureGetReferenceTransistor()->setVG (vg ); } + inline void TransistorFamily::setVD ( float vd ) { _secureGetReferenceTransistor()->setVD (vd ); } + inline void TransistorFamily::setVS ( float vs ) { _secureGetReferenceTransistor()->setVS (vs ); } + inline void TransistorFamily::setVB ( float vb ) { _secureGetReferenceTransistor()->setVB (vb ); } + inline void TransistorFamily::setVEG ( float veg ) { _secureGetReferenceTransistor()->setVEG (veg ); } + inline void TransistorFamily::setVTH ( float vth ) { _secureGetReferenceTransistor()->setVTH (vth ); } + // Accessors. + inline float TransistorFamily::getWmin () const { return _secureGetReferenceTransistor()->getWmin (); } + inline float TransistorFamily::getWmax () const { return _secureGetReferenceTransistor()->getWmax (); } + inline int TransistorFamily::getNfing () const { return _secureGetReferenceTransistor()->getNfing(); } + inline DbU::Unit TransistorFamily::getW () const { return _w->getValue(); } + inline DbU::Unit TransistorFamily::getL () const { return _l->getValue(); } + inline long TransistorFamily::getM () const { return _m->getValue(); } + inline long TransistorFamily::getExternalDummy () const { return _externalDummy->getValue(); } + inline long TransistorFamily::getBulkType () const { return _bulkType->getValue(); } + inline float TransistorFamily::getWE () const { return _secureGetReferenceTransistor()->getWE (); } + inline float TransistorFamily::getLE () const { return _secureGetReferenceTransistor()->getLE (); } + inline float TransistorFamily::getIDS () const { return _secureGetReferenceTransistor()->getIDS (); } + inline float TransistorFamily::getVGS () const { return _secureGetReferenceTransistor()->getVGS (); } + inline float TransistorFamily::getVDS () const { return _secureGetReferenceTransistor()->getVDS (); } + inline float TransistorFamily::getVBS () const { return _secureGetReferenceTransistor()->getVBS (); } + inline float TransistorFamily::getVG () const { return _secureGetReferenceTransistor()->getVG (); } + inline float TransistorFamily::getVD () const { return _secureGetReferenceTransistor()->getVD (); } + inline float TransistorFamily::getVS () const { return _secureGetReferenceTransistor()->getVS (); } + inline float TransistorFamily::getVB () const { return _secureGetReferenceTransistor()->getVB (); } + inline float TransistorFamily::getVEG () const { return _secureGetReferenceTransistor()->getVEG (); } + inline float TransistorFamily::getVTH () const { return _secureGetReferenceTransistor()->getVTH (); } + + inline MetaTransistor* TransistorFamily::_secureGetReferenceTransistor () + { + if (!_referenceTransistor) throw Hurricane::Error("No MetaTransistor"); + return _referenceTransistor; + } + + inline const MetaTransistor* TransistorFamily::_secureGetReferenceTransistor () const + { + if (!_referenceTransistor) throw Hurricane::Error("No MetaTransistor"); + return _referenceTransistor; + } + + +} // Analog namespace. + +#endif // ANALOG_TRANSISTOR_FAMILY_H diff --git a/hurricane/src/analog/hurricane/analog/TransistorFamilyNames.h b/hurricane/src/analog/hurricane/analog/TransistorFamilyNames.h new file mode 100644 index 00000000..7ac88b81 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/TransistorFamilyNames.h @@ -0,0 +1,66 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/TransistorFamilyNames.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_TRANSISTOR_FAMILY_NAMES_H +#define ANALOG_TRANSISTOR_FAMILY_NAMES_H + +namespace Analog { + + + class TransistorFamilyNames { + public: + static const char* PMOSTransistorBU; + static const char* PMOSTransistorBC; + static const char* NMOSTransistorBU; + static const char* NMOSTransistorBC; + static const char* PMOSDifferentialPairBU; + static const char* PMOSDifferentialPairBC; + static const char* NMOSDifferentialPairBU; + static const char* NMOSDifferentialPairBC; + static const char* PMOSSimpleCurrentMirrorBU; + static const char* PMOSSimpleCurrentMirrorBC; + static const char* NMOSSimpleCurrentMirrorBU; + static const char* NMOSSimpleCurrentMirrorBC; + static const char* PMOSLevelShifterBU; + static const char* PMOSLevelShifterBC; + static const char* NMOSLevelShifterBU; + static const char* NMOSLevelShifterBC; + static const char* PMOSCrossCoupledPairBU; + static const char* PMOSCrossCoupledPairBC; + static const char* NMOSCrossCoupledPairBU; + static const char* NMOSCrossCoupledPairBC; + static const char* PMOSCommonSourcePairBU; + static const char* PMOSCommonSourcePairBC; + static const char* NMOSCommonSourcePairBU; + static const char* NMOSCommonSourcePairBC; + static const char* PMOSCommonGatePairBU; + static const char* PMOSCommonGatePairBC; + static const char* NMOSCommonGatePairBU; + static const char* NMOSCommonGatePairBC; + static const char* PMOSCommonDrainBU; + static const char* PMOSCommonDrainBC; + static const char* NMOSCommonDrainBU; + static const char* NMOSCommonDrainBC; + static const char* PMOSCascodeBU; + static const char* PMOSCascodeBC; + static const char* NMOSCascodeBU; + static const char* NMOSCascodeBC; + }; + + +} // Analog namespace. + +#endif // ANALOG_TRANSISTOR_FAMILY_NAMES_H diff --git a/hurricane/src/analog/hurricane/analog/TransistorMultiArguments.h b/hurricane/src/analog/hurricane/analog/TransistorMultiArguments.h new file mode 100644 index 00000000..ba347a57 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/TransistorMultiArguments.h @@ -0,0 +1,54 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/TransistorMultiArguments.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_TRANSISTOR_MULTI_ARGUMENTS_H +#define ANALOG_TRANSISTOR_MULTI_ARGUMENTS_H + +#include "hurricane/DbU.h" +#include "hurricane/analog/TransistorArguments.h" + +namespace Analog { + + + class TransistorMultiArguments : public TransistorArguments { + public: + typedef TransistorArguments Super; + public: + TransistorMultiArguments ( bool isNMOS + , bool isBulkConnected + , bool isSourceFirst + , std::string bulkType + , Hurricane::DbU::Unit w + , Hurricane::DbU::Unit l + , unsigned int m + , unsigned int mint + , unsigned int externalDummy ); + TransistorMultiArguments ( const TransistorMultiArguments& ); + virtual TransistorMultiArguments* getClone (); + inline unsigned int getMInt () const; + inline void setMInt ( Hurricane::DbU::Unit mint); + private: + unsigned _mint; + }; + + + inline unsigned int TransistorMultiArguments::getMInt () const { return _mint; }; + inline void TransistorMultiArguments::setMInt ( Hurricane::DbU::Unit mint) { _mint = mint; }; + + +} // Analog namespace. + +#endif // ANALOG_TRANSISTOR_MULTI_ARGUMENTS_H diff --git a/hurricane/src/analog/hurricane/analog/TransistorPair.h b/hurricane/src/analog/hurricane/analog/TransistorPair.h new file mode 100644 index 00000000..d99d7248 --- /dev/null +++ b/hurricane/src/analog/hurricane/analog/TransistorPair.h @@ -0,0 +1,48 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : C. Alexandre, J.-M. Caba | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/TransistorPair.h" | +// +-----------------------------------------------------------------+ + + +#ifndef ANALOG_TRANSISTOR_PAIR_H +#define ANALOG_TRANSISTOR_PAIR_H + +#include "hurricane/analog/TransistorFamily.h" + +namespace Analog { + + + class TransistorPair : public TransistorFamily { + public: + typedef TransistorFamily Super; + public: + virtual Arguments* getArguments (); + inline long getMint () const; + inline void setMint ( long ); + protected: + TransistorPair ( Hurricane::Library*, const Hurricane::Name&, const Type& ); + virtual void _postCreate ( const Hurricane::Name& deviceName ); + protected: + MetaTransistor* _m1; + MetaTransistor* _m2; + SpinBoxParameter* _mInt; + }; + + + inline long TransistorPair::getMint () const { return _mInt->getValue(); } + inline void TransistorPair::setMint ( long mint ) { _mInt->setValue(mint); } + + +} // Analog namespace. + +#endif // ANALOG_TRANSISTOR_PAIR_H diff --git a/hurricane/src/hurricane/CMakeLists.txt b/hurricane/src/hurricane/CMakeLists.txt index 013c1534..d47de7eb 100644 --- a/hurricane/src/hurricane/CMakeLists.txt +++ b/hurricane/src/hurricane/CMakeLists.txt @@ -102,6 +102,12 @@ hurricane/Views.h hurricane/Warning.h hurricane/TextTranslator.h + hurricane/DeviceDescriptor.h + hurricane/ModelDescriptor.h + hurricane/Rule.h + hurricane/UnitRule.h + hurricane/PhysicalRule.h + hurricane/TwoLayersPhysicalRule.h ) set ( cpps Record.cpp Slot.cpp @@ -187,6 +193,11 @@ Marker.cpp Timer.cpp TextTranslator.cpp + DeviceDescriptor.cpp + Rule.cpp + UnitRule.cpp + PhysicalRule.cpp + TwoLayersPhysicalRule.cpp ) add_library ( hurricane ${cpps} ) diff --git a/hurricane/src/hurricane/DeviceDescriptor.cpp b/hurricane/src/hurricane/DeviceDescriptor.cpp new file mode 100644 index 00000000..9d5a9a7e --- /dev/null +++ b/hurricane/src/hurricane/DeviceDescriptor.cpp @@ -0,0 +1,47 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./DeviceDescriptor.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/Error.h" +#include "hurricane/DeviceDescriptor.h" + + +namespace Hurricane { + + + DeviceDescriptor::DeviceDescriptor ( const Name& name ) + : _name (name) + , _spiceFilePath() + , _connectors () + , _layouts () + { } + + + void DeviceDescriptor::addConnector ( const string& connector ) + { _connectors.push_back( connector ); } + + + void DeviceDescriptor::addLayout ( const Name& layoutName, const string& moduleName ) + { + Layouts::iterator lit = _layouts.find( layoutName ); + if (lit != _layouts.end()) + throw Error( "DeviceDescriptor::addLayout(): Attemp to add same layout \"%\" twice." + , getString(layoutName).c_str() ); + + _layouts[ layoutName ] = moduleName; + } + + +} // Hurricane namespace. diff --git a/hurricane/src/hurricane/PhysicalRule.cpp b/hurricane/src/hurricane/PhysicalRule.cpp new file mode 100644 index 00000000..d1307b65 --- /dev/null +++ b/hurricane/src/hurricane/PhysicalRule.cpp @@ -0,0 +1,39 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PhysicalRule.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/PhysicalRule.h" + + +namespace Hurricane { + + using namespace std; + + + PhysicalRule::~PhysicalRule () { } + + + string PhysicalRule::_getTypeName () const { return "PhysicalRule"; } + string PhysicalRule::_getString () const { return "<" + _getTypeName() + " " + getString(getName()) + ">"; } + + Record* PhysicalRule::_getRecord () const + { + Record* record = Super::_getRecord(); + record->add( getSlot( "_value", &_value ) ); + return record; + } + + +} // Hurricane namespace. diff --git a/hurricane/src/hurricane/Rule.cpp b/hurricane/src/hurricane/Rule.cpp new file mode 100644 index 00000000..89c94943 --- /dev/null +++ b/hurricane/src/hurricane/Rule.cpp @@ -0,0 +1,41 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./Rule.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/Rule.h" + + +namespace Hurricane { + + using namespace std; + + + Rule::~Rule () { } + + + string Rule::_getTypeName () const { return "Rule"; } + string Rule::_getString () const { return "<" + _getTypeName() + " " + getString(_name) + ">"; } + + + Record* Rule::_getRecord() const + { + Record* record = new Record ( getString(this) ); + record->add( getSlot("_name" , &_name ) ); + record->add( getSlot("_reference", &_reference) ); + return record; + } + + +} // Hurricane namespace. diff --git a/hurricane/src/hurricane/Technology.cpp b/hurricane/src/hurricane/Technology.cpp index e2841352..32ec4e0e 100644 --- a/hurricane/src/hurricane/Technology.cpp +++ b/hurricane/src/hurricane/Technology.cpp @@ -1,21 +1,32 @@ -// **************************************************************************************************** -// File: ./Technology.cpp -// Authors: R. Escassut +// -*- C++ -*- +// // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved // // This file is part of Hurricane. // -// Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU -// Lesser General Public License as published by the Free Software Foundation, either version 3 of the +// Hurricane is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // -// Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even -// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU +// Hurricane is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- +// TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU // General Public License for more details. // -// You should have received a copy of the Lesser GNU General Public License along with Hurricane. If -// not, see . -// **************************************************************************************************** +// You should have received a copy of the Lesser GNU General Public +// License along with Hurricane. If not, see +// . +// +// +-----------------------------------------------------------------+ +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Remy Escassut | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./Technology.cpp" | +// +-----------------------------------------------------------------+ #include "hurricane/Warning.h" #include "hurricane/Error.h" @@ -27,174 +38,167 @@ #include "hurricane/RegularLayer.h" #include "hurricane/ViaLayer.h" #include "hurricane/Error.h" +#include "hurricane/UnitRule.h" +#include "hurricane/PhysicalRule.h" +#include "hurricane/TwoLayersPhysicalRule.h" namespace { + using namespace std; + using namespace Hurricane; + + class CompareByMask { public: bool operator() ( const Hurricane::Layer* lhs, const Hurricane::Layer* rhs ) { if (not lhs) return rhs; if (not rhs) return false; - return lhs->getMask() < rhs->getMask(); } }; + + inline string quote ( string field ) { return "'"+field+"'"; } + inline string quote ( Name field ) { return "'"+getString(field)+"'"; } + + + void printRule ( const PhysicalRule* rule ) + { + cout << " - name = " << rule->getName() + << " value = " << rule->getValue() + << " ref = " << rule->getReference() << endl; + } + + + void printRules ( const Technology::PhysicalRules& rules ) + { for ( PhysicalRule* rule : rules ) printRule( rule ); } + + + void printRules ( const Technology::TwoLayersRulesSet& rules ) + { for ( TwoLayersPhysicalRule* rule : rules ) printRule( rule ); } + + } // Anonymous namespace. namespace Hurricane { +// ------------------------------------------------------------------- +// Class : "Hurricane::Technology_BasicLayers" Collection. -// **************************************************************************************************** -// Technology_BasicLayers declaration -// **************************************************************************************************** -class Technology_BasicLayers : public Collection { -// ********************************************************** + class Technology_BasicLayers : public Collection { + public: + typedef Collection Super; -// Types -// ***** + public: + class Locator : public Hurricane::Locator { + public: + typedef Hurricane::Locator Super; + public: + Locator (); + Locator ( const Technology* , const Layer::Mask& ); + Locator ( const Locator& ); + Locator& operator= ( const Locator& ); + virtual BasicLayer* getElement () const; + virtual Hurricane::Locator* getClone () const; + virtual bool isValid () const; + virtual void progress (); + virtual string _getString () const; + private: + const Technology* _technology; + Layer::Mask _mask; + BasicLayerLocator _basicLayerLocator; + }; - public: typedef Collection Inherit; + public: + Technology_BasicLayers (); + Technology_BasicLayers ( const Technology* , const Layer::Mask& ); + Technology_BasicLayers ( const Technology_BasicLayers& ); + Technology_BasicLayers& operator= ( const Technology_BasicLayers& ); + virtual Collection* getClone () const; + virtual Hurricane::Locator* getLocator () const; + virtual string _getString () const; + private: + const Technology* _technology; + Layer::Mask _mask; + + }; - public: class Locator : public Hurricane::Locator { - // *********************************************************** - public: typedef Hurricane::Locator Inherit; +// ------------------------------------------------------------------- +// Class : "Hurricane::Technology". - private: const Technology* _technology; - private: Layer::Mask _mask; - private: BasicLayerLocator _basicLayerLocator; - public: Locator(); - public: Locator(const Technology* technology, const Layer::Mask& mask); - public: Locator(const Locator& locator); - - public: Locator& operator=(const Locator& locator); - - public: virtual BasicLayer* getElement() const; - public: virtual Hurricane::Locator* getClone() const; - - public: virtual bool isValid() const; - - public: virtual void progress(); - - public: virtual string _getString() const; - - }; - -// Attributes -// ********** - - private: const Technology* _technology; - private: Layer::Mask _mask; - -// Constructors -// ************ - - public: Technology_BasicLayers(); - public: Technology_BasicLayers(const Technology* technology, const Layer::Mask& mask); - public: Technology_BasicLayers(const Technology_BasicLayers& basicLayers); - -// Operators -// ********* - - public: Technology_BasicLayers& operator=(const Technology_BasicLayers& basicLayers); - -// Accessors -// ********* - - public: virtual Collection* getClone() const; - public: virtual Hurricane::Locator* getLocator() const; - -// Others -// ****** - - public: virtual string _getString() const; - -}; - -// **************************************************************************************************** -// Technology implementation -// **************************************************************************************************** - -Technology::Technology(DataBase* dataBase, const Name& name) -// ********************************************************* -: Inherit(), - _dataBase(dataBase), - _name(name), - _layerMap(), - _layerMaskMap() -{ - if (!_dataBase) - throw Error("Can't create " + _TName("Technology") + " : null data base"); + Technology::Technology ( DataBase* dataBase, const Name& name ) + : Super() + , _dataBase (dataBase) + , _name (name) + , _layerMap () + , _layerMaskMap () + , _unitRules () + , _noLayerRules () + , _oneLayerRules () + , _twoLayersRules() + { + if (not _dataBase) + throw Error( "Technology::Technology(): Can't create Technology, NULL data base." ); if (_dataBase->getTechnology()) - throw Error("Can't create " + _TName("Technology") + " : already exists"); + throw Error( "Technology::Technology(): Can't create Technology, already exists."); if (_name.isEmpty()) - throw Error("Can't create " + _TName("Technology") + " : empty name"); -} + throw Error( "Technology::Technology(): Can't create Technology, empty name."); + } -Technology* Technology::create(DataBase* dataBase, const Name& name) -// ***************************************************************** -{ - Technology* technology = new Technology(dataBase, name); + Technology* Technology::create ( DataBase* dataBase, const Name& name ) + { + Technology* technology = new Technology( dataBase, name ); technology->_postCreate(); - + return technology; -} + } -BasicLayer* Technology::getBasicLayer(const Name& name) const -// ********************************************************** -{ + + BasicLayer* Technology::getBasicLayer ( const Name& name ) const + { Layer* layer = getLayer(name); - return (layer && dynamic_cast(layer)) ? (BasicLayer*)layer : NULL; -} + return (layer and dynamic_cast(layer)) ? (BasicLayer*)layer : NULL; + } -RegularLayer* Technology::getRegularLayer(const Name& name) const -// ********************************************************** -{ + + RegularLayer* Technology::getRegularLayer ( const Name& name ) const + { Layer* layer = getLayer(name); - return (layer && dynamic_cast(layer)) ? (RegularLayer*)layer : NULL; -} + return (layer and dynamic_cast(layer)) ? (RegularLayer*)layer : NULL; + } -ViaLayer* Technology::getViaLayer(const Name& name) const -// ****************************************************************** -{ + + ViaLayer* Technology::getViaLayer ( const Name& name ) const + { Layer* layer = getLayer(name); - return (layer && dynamic_cast(layer)) ? (ViaLayer*)layer : NULL; -} + return (layer and dynamic_cast(layer)) ? (ViaLayer*)layer : NULL; + } -BasicLayers Technology::getBasicLayers() const -// ******************************************* -{ - // return getLayers().getSubSet(); - return SubTypeCollection(getLayers()); -} -BasicLayers Technology::getBasicLayers(const Layer::Mask& mask) const -// ****************************************************************** -{ - return Technology_BasicLayers(this, mask); -} + BasicLayers Technology::getBasicLayers () const + { return SubTypeCollection(getLayers()); } -RegularLayers Technology::getRegularLayers() const -// *********************************************** -{ - return SubTypeCollection(getLayers()); -} -ViaLayers Technology::getViaLayers() const -// *************************************** -{ - return SubTypeCollection(getLayers()); -} + BasicLayers Technology::getBasicLayers ( const Layer::Mask& mask ) const + { return Technology_BasicLayers(this, mask); } + + + RegularLayers Technology::getRegularLayers () const + { return SubTypeCollection(getLayers()); } + + + ViaLayers Technology::getViaLayers () const + { return SubTypeCollection(getLayers()); } Layer* Technology::getLayer ( const Layer::Mask& mask, bool useSymbolic ) const @@ -301,16 +305,14 @@ ViaLayers Technology::getViaLayers() const { for ( Layer* layer : getLayers() ) layer->_onDbuChange( scale ); } -void Technology::setName(const Name& name) -// *************************************** -{ + void Technology::setName ( const Name& name ) + { if (name != _name) { - if (name.isEmpty()) - throw Error("Can't change technology name : empty name"); - - _name = name; + if (name.isEmpty()) + throw Error( "Technology::setName(): Empty name argument." ); + _name = name; } -} + } bool Technology::setSymbolicLayer ( const Name& name ) @@ -338,381 +340,627 @@ void Technology::setName(const Name& name) } -void Technology::_postCreate() -// *************************** -{ - Inherit::_postCreate(); + void Technology::_postCreate() + { + Super::_postCreate(); + _dataBase->_setTechnology( this ); + } - _dataBase->_setTechnology(this); -} -void Technology::_preDestroy() -// ************************** -{ - - while ( not _layerMap.isEmpty() ) { + void Technology::_preDestroy () + { + while (not _layerMap.isEmpty()) { _layerMap.getElements().getFirst()->destroy(); } - _dataBase->_setTechnology(NULL); - DBo::_preDestroy(); -} - -void Technology::_insertInLayerMaskMap ( Layer* layer ) -// **************************************************** -{ - _layerMaskMap.insert ( make_pair(layer->getMask(),layer) ); -} - -void Technology::_removeFromLayerMaskMap ( Layer* layer ) -// ****************************************************** -{ - LayerMaskMap::iterator lb = _layerMaskMap.lower_bound ( layer->getMask() ); - LayerMaskMap::iterator ub = _layerMaskMap.upper_bound ( layer->getMask() ); - - for ( ; lb != ub ; lb++ ) { - if ( lb->second == layer ) { - _layerMaskMap.erase ( lb ); - break; - } - } -} - -string Technology::_getTypeName () const -// ************************************** -{ - return _TName("Technology"); -} - -string Technology::_getString() const -// ********************************** -{ - string s = Inherit::_getString(); - s.insert(s.length() - 1, " " + getString(_name)); - return s; -} - -Record* Technology::_getRecord() const -// ***************************** -{ - Record* record = Inherit::_getRecord(); - if (record) { - record->add(getSlot("DataBase", _dataBase)); - record->add(getSlot("Name", &_name)); - record->add(getSlot("Layers", &_layerMaskMap)); - record->add(getSlot("cutMask", &_cutMask)); - record->add(getSlot("metalMask", &_metalMask)); - } - return record; -} - -void Technology::_toJson(JsonWriter* writer) const -// *********************************************** -{ - Inherit::_toJson( writer ); - - jsonWrite( writer, "_name", getName() ); -} - -void Technology::_toJsonCollections(JsonWriter* writer) const -// *********************************************************** -{ - writer->key( "+layers" ); - writer->startArray(); - - vector basicLayers; - vector layers; - for ( Layer* layer : getLayers() ) { - BasicLayer* basicLayer = dynamic_cast( layer ); - if (basicLayer) basicLayers.push_back( basicLayer ); - else layers .push_back( layer ); + _dataBase->_setTechnology( NULL ); + Super::_preDestroy(); } - sort( basicLayers.begin(), basicLayers.end(), CompareByMask() ); - sort( layers .begin(), layers .end(), CompareByMask() ); - for ( BasicLayer* basicLayer : basicLayers ) jsonWrite( writer, basicLayer ); - for ( Layer* layer : layers ) jsonWrite( writer, layer ); - - writer->endArray(); -} + void Technology::_insertInLayerMaskMap ( Layer* layer ) + { _layerMaskMap.insert ( make_pair(layer->getMask(),layer) ); } -// **************************************************************************************************** -// Technology::LayerMap implementation -// **************************************************************************************************** + void Technology::_removeFromLayerMaskMap ( Layer* layer ) + { + LayerMaskMap::iterator lb = _layerMaskMap.lower_bound( layer->getMask() ); + LayerMaskMap::iterator ub = _layerMaskMap.upper_bound( layer->getMask() ); -Technology::LayerMap::LayerMap() -// ***************************** -: Inherit() -{ -} - -Name Technology::LayerMap::_getKey(Layer* layer) const -// *************************************************** -{ - return layer->getName(); -} - -unsigned Technology::LayerMap::_getHashValue(Name name) const -// ********************************************************** -{ - return name._getSharedName()->getId() / 8; -} - -Layer* Technology::LayerMap::_getNextElement(Layer* layer) const -// ************************************************************* -{ - return layer->_getNextOfTechnologyLayerMap(); -} - -void Technology::LayerMap::_setNextElement(Layer* layer, Layer* nextLayer) const -// ***************************************************************************** -{ - layer->_setNextOfTechnologyLayerMap(nextLayer); -}; - - - -// **************************************************************************************************** -// Technology_BasicLayers implementation -// **************************************************************************************************** - -Technology_BasicLayers::Technology_BasicLayers() -// ********************************************* -: Inherit(), - _technology(NULL), - _mask(0) -{ -} - -Technology_BasicLayers::Technology_BasicLayers(const Technology* technology, const Layer::Mask& mask) -// ************************************************************************************************** -: Inherit(), - _technology(technology), - _mask(mask) -{ -} - -Technology_BasicLayers::Technology_BasicLayers(const Technology_BasicLayers& basicLayers) -// ************************************************************************************** -: Inherit(), - _technology(basicLayers._technology), - _mask(basicLayers._mask) -{ -} - -Technology_BasicLayers& Technology_BasicLayers::operator=(const Technology_BasicLayers& basicLayers) -// ************************************************************************************************* -{ - _technology = basicLayers._technology; - _mask = basicLayers._mask; - return *this; -} - -Collection* Technology_BasicLayers::getClone() const -// ************************************************************** -{ - return new Technology_BasicLayers(*this); -} - -Locator* Technology_BasicLayers::getLocator() const -// ************************************************************* -{ - return new Locator(_technology, _mask); -} - -string Technology_BasicLayers::_getString() const -// ********************************************** -{ - string s = "<" + _TName("Technology::BasicLayers"); - if (_technology) { - s += " " + getString(_technology); - s += " " + getString(_mask); - } - s += ">"; - return s; -} - - - -// **************************************************************************************************** -// Technology_BasicLayers::Locator implementation -// **************************************************************************************************** - -Technology_BasicLayers::Locator::Locator() -// *************************************** -: Inherit(), - _technology(NULL), - _mask(0), - _basicLayerLocator() -{ -} - -Technology_BasicLayers::Locator::Locator(const Technology* technology, const Layer::Mask& mask) -// ******************************************************************************************** -: Inherit(), - _technology(technology), - _mask(mask), - _basicLayerLocator() -{ - if (_technology) { - _basicLayerLocator = _technology->getBasicLayers().getLocator(); - while (_basicLayerLocator.isValid() && !(_basicLayerLocator.getElement()->getMask() & _mask)) - _basicLayerLocator.progress(); - } -} - -Technology_BasicLayers::Locator::Locator(const Locator& locator) -// ************************************************************* -: Inherit(), - _technology(locator._technology), - _mask(locator._mask), - _basicLayerLocator(locator._basicLayerLocator) -{ -} - -Technology_BasicLayers::Locator& Technology_BasicLayers::Locator::operator=(const Locator& locator) -// ************************************************************************************************ -{ - _technology = locator._technology; - _mask = locator._mask; - _basicLayerLocator = locator._basicLayerLocator; - return *this; -} - -BasicLayer* Technology_BasicLayers::Locator::getElement() const -// ************************************************************ -{ - return _basicLayerLocator.getElement(); -} - -Locator* Technology_BasicLayers::Locator::getClone() const -// ******************************************************************** -{ - return new Locator(*this); -} - -bool Technology_BasicLayers::Locator::isValid() const -// ************************************************** -{ - return _basicLayerLocator.isValid(); -} - -void Technology_BasicLayers::Locator::progress() -// ********************************************* -{ - do { - _basicLayerLocator.progress(); - } - while (_basicLayerLocator.isValid() && !(_basicLayerLocator.getElement()->getMask() & _mask)); -} - -string Technology_BasicLayers::Locator::_getString() const -// ******************************************************* -{ - string s = "<" + _TName("Technology::BasicLayers::Locator"); - if (_technology) { - s += " " + getString(_technology); - s += " " + getString(_mask); - } - s += ">"; - return s; -} - - - -// **************************************************************************************************** -// JsonTechnology implementation -// **************************************************************************************************** - -Initializer jsonTechnologyInit ( 0 ); - -void JsonTechnology::initialize() -// ******************************* -{ JsonTypes::registerType( new JsonTechnology (JsonWriter::RegisterMode) ); } - -JsonTechnology::JsonTechnology(unsigned long flags) -// ************************************************ - : JsonDBo (flags) - , _blockagesMap() -{ - if (flags & JsonWriter::RegisterMode) return; - - cdebug_log(19,0) << "JsonTechnology::JsonTechnology()" << endl; - - add( "_name" , typeid(string) ); - add( "+layers", typeid(JsonArray) ); -} - -JsonTechnology::~JsonTechnology() -// ****************************** -{ - const Technology* techno = getObject(); - - for ( auto element : _blockagesMap ) { - BasicLayer* blockage = techno->getBasicLayer( element.first ); - if (blockage) { - for ( BasicLayer* layer : element.second ) { - layer->setBlockageLayer( blockage ); + for ( ; lb != ub ; lb++ ) { + if ( lb->second == layer ) { + _layerMaskMap.erase ( lb ); + break; } } } -} -string JsonTechnology::getTypeName() const -// **************************************** -{ return "Technology"; } -JsonTechnology* JsonTechnology::clone(unsigned long flags) const -// ************************************************************* -{ return new JsonTechnology ( flags ); } + DeviceDescriptor* Technology::addDeviceDescriptor ( const Name& name ) + { + DeviceDescriptor fakedd ( name ); + DeviceDescriptors::iterator ddit = _deviceDescriptors.find( &fakedd ); + if (ddit != _deviceDescriptors.end()) + throw Error( "Technology::addDeviceDescriptor(): Redifinition of device \"%s\"." + , getString(name).c_str() ); -void JsonTechnology::addBlockageRef(const string& blockageLayer, BasicLayer* layer ) -// ********************************************************************************* -{ - map< string, vector >::iterator im = _blockagesMap.find( blockageLayer ); - if (im != _blockagesMap.end()) { - (*im).second.push_back( layer ); - } else { - _blockagesMap.insert( make_pair( blockageLayer, vector(1,layer) ) ); + DeviceDescriptor* dd = new DeviceDescriptor ( name ); + _deviceDescriptors.insert( dd ); + return dd; } -} -void JsonTechnology::toData(JsonStack& stack) -// ****************************************** -{ - cdebug_tabw(19,1); - check( stack, "JsonTechnology::toData" ); + DeviceDescriptor* Technology::getDeviceDescriptor ( const Name& name ) + { + DeviceDescriptor fakedd( name ); + DeviceDescriptors::iterator ddit = _deviceDescriptors.find( &fakedd ); + if (ddit != _deviceDescriptors.end()) return *ddit; + return NULL; + } - string technoName = get( stack, "_name" ); - Technology* techno = DataBase::getDB()->getTechnology(); - if (techno) { - if (techno->getName() == technoName) { - cerr << Warning( "JsonTechnology::toData(): A technology with the same name (%s) is already loaded." - , technoName.c_str() - ) << endl; - } else { - cerr << Error( "JsonTechnology::toData(): Try to load \"%s\", but \"%s\" is already loaded." - , technoName.c_str() - , getString(techno->getName()).c_str() - ) << endl; + ModelDescriptor* Technology::addModelDescriptor( const Name& name + , const Name& simul + , const Name& model + , string netlist + , const Name& name_n + , const Name& name_p + , bool precise ) + { + ModelDescriptor fakemd ( name, simul, model, netlist, name_n, name_p, precise ); + ModelDescriptors::iterator mdit = _modelDescriptors.find(&fakemd); + if (mdit != _modelDescriptors.end()) + throw Error( "Technology::addModelDescriptor(): Redefinition of model \"%s\"." + , getString(name).c_str() ); + + ModelDescriptor* md = new ModelDescriptor( name, simul, model, netlist, name_n, name_p, precise ); + _modelDescriptors.insert(md); + return md; + } + + + ModelDescriptor* Technology::getModelDescriptor ( const Name& name ) + { + for ( ModelDescriptor* model : _modelDescriptors ) { + if (model->getName() == name) return model; + } + return NULL; + } + + + void Technology::toDtr ( ostream& o ) + { + o << "\n"; + o << "from Hurricane import DbU\n"; + o << "from helpers.AnalogTechno import Length\n"; + o << "from helpers.AnalogTechno import Area\n"; + o << "from helpers.AnalogTechno import Asymmetric\n"; + o << "\n"; + o << "\n"; + o << "analogTechnologyTable = \\\n"; + o << " ( ('Header', '" << getName() << "', DbU.UnitPowerMicro, 'rev.LIP6-Unknown')\n"; + o << " # ------------------------------------------------------------------------------------\n"; + o << " # ( Rule name , [Layer1] , [Layer2] , Value, Rule flags , Reference )\n"; + + for ( auto rule : _noLayerRules ) { + o << " (" + << setw(46) << left << quote(rule->getName()) << ", " + << setw( 5) << left << DbU::toPhysical(rule->getValue(),DbU::UnitPower::Micro) << ", " + << setw(17) << left << "Length" << ", " + << setw(10) << left << quote(rule->getReference()) << ")\n"; + } + + for ( auto layerRuleSet : _oneLayerRules ) { + for ( auto rule : layerRuleSet.second ) { + string flags = "Length"; + string ruleName = getString(rule->getName()); + double value = DbU::toPhysical(rule->getValue(),DbU::UnitPower::Micro); + if (ruleName.substr(ruleName.size()-4,4) == "Area") { + flags += "|Area"; + value = DbU::toPhysical(value,DbU::UnitPower::Micro); + } + + o << " (" + << setw(22) << left << quote(rule->getName()) << ", " + << setw(22) << left << quote(layerRuleSet.first->getName()) << ", " + << setw( 5) << left << value << ", " + << setw(17) << left << flags << ", " + << setw(10) << left << quote(rule->getReference()) << ")\n"; + } + } + + for ( auto layerRuleSet : _twoLayersRules ) { + for ( auto rule : layerRuleSet.second ) { + string flags = "Length"; + TwoLayersPhysicalRule* twoRule = dynamic_cast(rule); + if (twoRule and not twoRule->isSymetric()) + flags += "|Asymmetric"; + + o << " (" + << setw(22) << left << quote(rule->getName()) << ", " + << setw(10) << left << quote(layerRuleSet.first.first->getName()) << ", " + << setw(10) << left << quote(layerRuleSet.first.second->getName()) << ", " + << setw( 5) << left << DbU::toPhysical(rule->getValue(),DbU::UnitPower::Micro) << ", " + << setw(17) << left << flags << ", " + << setw(10) << left << quote(rule->getReference()) << ")\n"; + } + } + o << " )\n"; + } + + + UnitRule Technology::getUnitRule ( const string& ruleNameStr ) const + { + Name ruleName ( ruleNameStr ); + UnitRule search ( ruleName, 0, "" ); + + UnitRules::iterator irule = _unitRules.find( &search ); + if (irule == _unitRules.end()) { + throw Error( "Technology::getUnitRule(): No rule named \"%s\"." , ruleNameStr.c_str() ); + } + return **irule; + } + + + PhysicalRule Technology::getPhysicalRule ( const string& ruleNameStr ) const + { + Name ruleName ( ruleNameStr ); + PhysicalRule search ( ruleName, 0, "" ); + + PhysicalRules::iterator irule = _noLayerRules.find( &search ); + if (irule == _noLayerRules.end()) { + throw Error( "Technology::getPhysicalRule(): No rule named \"%s\"." , ruleNameStr.c_str() ); + } + return **irule; + } + + + PhysicalRule Technology::getPhysicalRule ( const string& ruleNameStr, const string& layerStr ) const + { + Name layerName ( layerStr ); + const Layer* layer = getLayer( layerName ); + + OneLayerRules::const_iterator ilayer = _oneLayerRules.find( layer ); + if (ilayer == _oneLayerRules.end()) + throw Error( "Technology::getPhysicalRule(): No rules for %s." + , getString(layer->getName()).c_str() ); + + const PhysicalRules& rules = ilayer->second; + Name ruleName ( ruleNameStr ); + PhysicalRule search ( ruleName, 0, "" ); + + PhysicalRules::iterator irule = rules.find( &search ); + if (irule == rules.end()) + throw Error( "Technology::getPhysicalRule(): No rule named \"%s\" for %s." + , ruleNameStr.c_str() + , getString(layer->getName()).c_str() ); + + return **irule; + } + + + PhysicalRule Technology::getPhysicalRule ( const string& ruleNameStr + , const string& layer1Str + , const string& layer2Str ) const + { + Name layer1Name ( layer1Str ); + Name layer2Name ( layer2Str ); + const Layer* layer1 = getLayer( layer1Name ); + const Layer* layer2 = getLayer( layer2Name ); + + LayerPair searchLayerPair(layer1, layer2); + TwoLayersRules::const_iterator ilp = _twoLayersRules.find( searchLayerPair ); + if (ilp != _twoLayersRules.end()) { + const TwoLayersRulesSet& rules = ilp->second; + Name ruleName ( ruleNameStr ); + TwoLayersPhysicalRule search ( ruleName, 0, "", true ); + + TwoLayersRulesSet::const_iterator irule = rules.find( &search ); + if (irule != rules.end()) return **irule; + } + + LayerPair reverseSearchLayerPair ( layer2, layer1 ); + ilp = _twoLayersRules.find( reverseSearchLayerPair ); + if (ilp != _twoLayersRules.end()) { + const TwoLayersRulesSet& rules = ilp->second; + Name ruleName ( ruleNameStr ); + TwoLayersPhysicalRule search ( ruleName, 0, "", true ); + + TwoLayersRulesSet::const_iterator irule = rules.find( &search ); + if (irule != rules.end() and (*irule)->isSymetric() ) return **irule; + } + + throw Error( "Technology::getPhysicalRule(): No rule named \"%s\" for pair (%s,%s)." + , ruleNameStr.c_str(), layer1Str.c_str(), layer2Str.c_str() ); + } + + + void Technology::addUnitRule ( const string& name + , double value + , const string& reference ) + { + Name ruleName ( name ); + UnitRule search ( ruleName, 0, "" ); + + UnitRules::iterator irule = _unitRules.find( &search ); + if (irule != _unitRules.end()) + throw Error( "Technology::addUnitRule(): Attempt to redefine rule \"%s\"." , name.c_str() ); + + _unitRules.insert( new UnitRule ( ruleName, value, reference ) ); + } + + + void Technology::addPhysicalRule ( const string& name + , DbU::Unit value + , const string& reference ) + { + Name ruleName ( name ); + PhysicalRule search ( ruleName, 0, "" ); + + PhysicalRules::iterator irule = _noLayerRules.find( &search ); + if (irule != _noLayerRules.end()) + throw Error( "Technology::addPhysicalRule(): Attempt to redefine rule \"%s\"." , name.c_str() ); + + _noLayerRules.insert( new PhysicalRule ( ruleName, value, reference ) ); + } + + + void Technology::addPhysicalRule ( const string& ruleNameStr + , const string& layerStr + , DbU::Unit value + , const string& reference ) + { + Name ruleName ( ruleNameStr ); + Name layerName ( layerStr ); + + const Layer* layer = getLayer( layerName ); + OneLayerRules::iterator ilayer = _oneLayerRules.find(layer); + if (ilayer == _oneLayerRules.end()) { + pair result = + _oneLayerRules.insert( OneLayerRules::value_type( layer, PhysicalRules()) ); + result.first->second.insert( new PhysicalRule(ruleName,value,reference) ); + } else { + PhysicalRules& rules = ilayer->second; + PhysicalRule search ( ruleName, 0, "" ); + if (rules.find(&search) != rules.end()) { + throw Error( "Technology::addPhysicalRule(): Attempt to redefine rule \"%s\"." , ruleNameStr.c_str() ); + } + + rules.insert( new PhysicalRule(ruleName,value,reference) ); + } + } + + + void Technology::addPhysicalRule ( const string& ruleNameStr + , const string& layer1Str + , const string& layer2Str + , bool symetric + , DbU::Unit value + , const string& reference ) + { + Name ruleName ( ruleNameStr ); + Name layer1Name ( layer1Str ); + Name layer2Name ( layer2Str ); + + const Layer* layer1 = getLayer(layer1Name); + const Layer* layer2 = getLayer(layer2Name); + LayerPair layerPair ( layer1, layer2 ); + + TwoLayersRules::iterator ilp = _twoLayersRules.find( layerPair ); + if (ilp == _twoLayersRules.end()) { + pair result = + _twoLayersRules.insert( TwoLayersRules::value_type(layerPair,TwoLayersRulesSet()) ); + + result.first->second.insert( new TwoLayersPhysicalRule(ruleName,value,reference,symetric) ); + } else { + TwoLayersRulesSet& rules = ilp->second; + TwoLayersPhysicalRule search ( ruleName, 0, "", true ); + if (rules.find(&search) != rules.end()) { + throw Error( "Technology::addPhysicalRule(): Attempt to redefine rule \"%s\"." , ruleNameStr.c_str() ); + } + rules.insert( new TwoLayersPhysicalRule(ruleName,value,reference,symetric) ); } - } else { - techno = Technology::create( DataBase::getDB(), technoName ); - stack.setFlags( JsonWriter::TechnoMode ); } - update( stack, techno ); - cdebug_tabw(19,-1); -} - -} // End of Hurricane namespace. + string Technology::_getTypeName () const + { return _TName("Technology"); } -// **************************************************************************************************** -// Copyright (c) BULL S.A. 2000-2018, All Rights Reserved -// **************************************************************************************************** + string Technology::_getString () const + { + string s = Super::_getString(); + s.insert(s.length() - 1, " " + getString(_name)); + return s; + } + + + Record* Technology::_getRecord () const + { + Record* record = Super::_getRecord(); + if (record) { + record->add( getSlot("_dataBase" , _dataBase ) ); + record->add( getSlot("_name" , &_name ) ); + record->add( getSlot("_layerMaskMap" , &_layerMaskMap ) ); + record->add( getSlot("_cutMask" , &_cutMask ) ); + record->add( getSlot("_metalMask" , &_metalMask ) ); + record->add( getSlot("_unitRules" , &_unitRules ) ); + record->add( getSlot("_noLayerRules" , &_noLayerRules ) ); + record->add( getSlot("_oneLayerRules" , &_oneLayerRules ) ); + record->add( getSlot("_twoLayersRules", &_twoLayersRules) ); + } + return record; + } + + + void Technology::_toJson ( JsonWriter* writer ) const + { + Super::_toJson( writer ); + + jsonWrite( writer, "_name", getName() ); + } + + + void Technology::_toJsonCollections ( JsonWriter* writer ) const + { + writer->key( "+layers" ); + writer->startArray(); + + vector basicLayers; + vector layers; + for ( Layer* layer : getLayers() ) { + BasicLayer* basicLayer = dynamic_cast( layer ); + if (basicLayer) basicLayers.push_back( basicLayer ); + else layers .push_back( layer ); + } + + sort( basicLayers.begin(), basicLayers.end(), CompareByMask() ); + sort( layers .begin(), layers .end(), CompareByMask() ); + + for ( BasicLayer* basicLayer : basicLayers ) jsonWrite( writer, basicLayer ); + for ( Layer* layer : layers ) jsonWrite( writer, layer ); + + writer->endArray(); + } + + +// ------------------------------------------------------------------- +// Class : "Hurricane::Technology::LayerMap" + + + Technology::LayerMap::LayerMap () + : Super() + { } + + + Name Technology::LayerMap::_getKey ( Layer* layer ) const + { return layer->getName(); } + + + unsigned Technology::LayerMap::_getHashValue ( Name name ) const + { return name._getSharedName()->getId() / 8; } + + + Layer* Technology::LayerMap::_getNextElement ( Layer* layer ) const + { return layer->_getNextOfTechnologyLayerMap(); } + + + void Technology::LayerMap::_setNextElement ( Layer* layer, Layer* nextLayer ) const + { layer->_setNextOfTechnologyLayerMap(nextLayer); }; + + +// ------------------------------------------------------------------- +// Class : "Hurricane::Technology_BasicLayers" Collection. + + + Technology_BasicLayers::Technology_BasicLayers () + : Super() + , _technology(NULL) + , _mask (0) + { } + + + Technology_BasicLayers::Technology_BasicLayers ( const Technology* technology, const Layer::Mask& mask ) + : Super() + , _technology(technology) + , _mask (mask) + { } + + + Technology_BasicLayers::Technology_BasicLayers ( const Technology_BasicLayers& basicLayers ) + : Super() + , _technology(basicLayers._technology) + , _mask (basicLayers._mask) + { } + + + Technology_BasicLayers& Technology_BasicLayers::operator= ( const Technology_BasicLayers& basicLayers ) + { + _technology = basicLayers._technology; + _mask = basicLayers._mask; + return *this; + } + + + Collection* Technology_BasicLayers::getClone () const + { return new Technology_BasicLayers( *this ); } + + + Locator* Technology_BasicLayers::getLocator () const + { return new Locator( _technology, _mask ); } + + + string Technology_BasicLayers::_getString () const + { + string s = "<" + _TName("Technology::BasicLayers"); + if (_technology) { + s += " " + getString(_technology); + s += " " + getString(_mask); + } + s += ">"; + return s; + } + + + Technology_BasicLayers::Locator::Locator () + : Super() + , _technology (NULL) + , _mask (0) + , _basicLayerLocator() + { } + + + Technology_BasicLayers::Locator::Locator ( const Technology* technology, const Layer::Mask& mask ) + : Super() + , _technology (technology) + , _mask (mask) + , _basicLayerLocator() + { + if (_technology) { + _basicLayerLocator = _technology->getBasicLayers().getLocator(); + while (_basicLayerLocator.isValid() and not (_basicLayerLocator.getElement()->getMask() & _mask)) + _basicLayerLocator.progress(); + } + } + + + Technology_BasicLayers::Locator::Locator ( const Locator& locator ) + : Super() + , _technology (locator._technology) + , _mask (locator._mask) + , _basicLayerLocator(locator._basicLayerLocator) + { } + + + Technology_BasicLayers::Locator& Technology_BasicLayers::Locator::operator = ( const Locator& locator ) + { + _technology = locator._technology; + _mask = locator._mask; + _basicLayerLocator = locator._basicLayerLocator; + return *this; + } + + + BasicLayer* Technology_BasicLayers::Locator::getElement () const + { return _basicLayerLocator.getElement(); } + + + Locator* Technology_BasicLayers::Locator::getClone () const + { return new Locator( *this ); } + + + bool Technology_BasicLayers::Locator::isValid () const + { return _basicLayerLocator.isValid(); } + + + void Technology_BasicLayers::Locator::progress () + { + do { + _basicLayerLocator.progress(); + } + while (_basicLayerLocator.isValid() and not (_basicLayerLocator.getElement()->getMask() & _mask)); + } + + + string Technology_BasicLayers::Locator::_getString () const + { + string s = "<" + _TName("Technology::BasicLayers::Locator"); + if (_technology) { + s += " " + getString(_technology); + s += " " + getString(_mask); + } + s += ">"; + return s; + } + + +// ------------------------------------------------------------------- +// Class : "Hurricane::JsonTechnology". + + + Initializer jsonTechnologyInit ( 0 ); + + + void JsonTechnology::initialize () + { JsonTypes::registerType( new JsonTechnology (JsonWriter::RegisterMode) ); } + + + JsonTechnology::JsonTechnology ( unsigned long flags ) + : JsonDBo (flags) + , _blockagesMap() + { + if (flags & JsonWriter::RegisterMode) return; + + cdebug_log(19,0) << "JsonTechnology::JsonTechnology()" << endl; + + add( "_name" , typeid(string) ); + add( "+layers", typeid(JsonArray) ); + } + + + JsonTechnology::~JsonTechnology () + { + const Technology* techno = getObject(); + + for ( auto element : _blockagesMap ) { + BasicLayer* blockage = techno->getBasicLayer( element.first ); + if (blockage) { + for ( BasicLayer* layer : element.second ) { + layer->setBlockageLayer( blockage ); + } + } + } + } + + + string JsonTechnology::getTypeName () const + { return "Technology"; } + + + JsonTechnology* JsonTechnology::clone ( unsigned long flags ) const + { return new JsonTechnology ( flags ); } + + + void JsonTechnology::addBlockageRef ( const string& blockageLayer, BasicLayer* layer ) + { + map< string, vector >::iterator im = _blockagesMap.find( blockageLayer ); + if (im != _blockagesMap.end()) { + (*im).second.push_back( layer ); + } else { + _blockagesMap.insert( make_pair( blockageLayer, vector(1,layer) ) ); + } + } + + + void JsonTechnology::toData ( JsonStack& stack ) + { + cdebug_tabw(19,1); + + check( stack, "JsonTechnology::toData" ); + + string technoName = get( stack, "_name" ); + Technology* techno = DataBase::getDB()->getTechnology(); + + if (techno) { + if (techno->getName() == technoName) { + cerr << Warning( "JsonTechnology::toData(): A technology with the same name (%s) is already loaded." + , technoName.c_str() + ) << endl; + } else { + cerr << Error( "JsonTechnology::toData(): Try to load \"%s\", but \"%s\" is already loaded." + , technoName.c_str() + , getString(techno->getName()).c_str() + ) << endl; + } + } else { + techno = Technology::create( DataBase::getDB(), technoName ); + stack.setFlags( JsonWriter::TechnoMode ); + } + + update( stack, techno ); + + cdebug_tabw(19,-1); + } + + +} // Hurricane namespace. diff --git a/hurricane/src/hurricane/TwoLayersPhysicalRule.cpp b/hurricane/src/hurricane/TwoLayersPhysicalRule.cpp new file mode 100644 index 00000000..9e401036 --- /dev/null +++ b/hurricane/src/hurricane/TwoLayersPhysicalRule.cpp @@ -0,0 +1,38 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./TwoLayersPhysicalRule.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/TwoLayersPhysicalRule.h" + + +namespace Hurricane { + + using namespace std; + + + TwoLayersPhysicalRule::~TwoLayersPhysicalRule () { } + + string TwoLayersPhysicalRule::_getTypeName () const { return "TwoLayersPhysicalRule"; } + string TwoLayersPhysicalRule::_getString () const { return "<" + _getTypeName() + " " + getString(getName()) + ">"; } + + Record* TwoLayersPhysicalRule::_getRecord () const + { + Record* record = Super::_getRecord(); + record->add( getSlot("Symetric", _symetric) ); + return record; + } + + +} // Hurricane namespace. diff --git a/hurricane/src/hurricane/UnitRule.cpp b/hurricane/src/hurricane/UnitRule.cpp new file mode 100644 index 00000000..956d2285 --- /dev/null +++ b/hurricane/src/hurricane/UnitRule.cpp @@ -0,0 +1,39 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./UnitRule.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/UnitRule.h" + + +namespace Hurricane { + + using namespace std; + + + UnitRule::~UnitRule () { } + + + string UnitRule::_getTypeName () const { return "UnitRule"; } + string UnitRule::_getString () const { return "<" + _getTypeName() + " " + getString(getName()) + ">"; } + + Record* UnitRule::_getRecord () const + { + Record* record = Super::_getRecord(); + record->add( getSlot("Value", &_value) ); + return record; + } + + +} // Hurricane namespace. diff --git a/hurricane/src/hurricane/hurricane/DeviceDescriptor.h b/hurricane/src/hurricane/hurricane/DeviceDescriptor.h new file mode 100644 index 00000000..5babc9ce --- /dev/null +++ b/hurricane/src/hurricane/hurricane/DeviceDescriptor.h @@ -0,0 +1,64 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/DeviceDescriptor.h" | +// +-----------------------------------------------------------------+ + + +#ifndef HURRICANE_DEVICE_DESCRIPTOR_H +#define HURRICANE_DEVICE_DESCRIPTOR_H + +#include +#include "hurricane/Name.h" + + +namespace Hurricane { + + + class DeviceDescriptor { + public: + struct DeviceDescriptorComp: + public std::binary_function { + bool operator () ( const DeviceDescriptor* ldd, const DeviceDescriptor* rdd ) const + { return ldd->getName() < rdd->getName(); } + }; + + typedef std::vector Connectors; + typedef std::pair Layout; + typedef std::map Layouts; + public: + DeviceDescriptor ( const Name& ); + inline Name getName () const; + inline void setSpiceFilePath ( const std::string& spiceFilePath ); + inline std::string getSpiceFilePath () const; + void addConnector ( const std::string& connector ); + inline const Connectors& getConnectors () const; + inline const Layouts getLayouts () const; + void addLayout ( const Name& layoutName, const std::string& moduleName ); + private: + Name _name; + std::string _spiceFilePath; + Connectors _connectors; + Layouts _layouts; + }; + + + inline Name DeviceDescriptor::getName () const { return _name; } + inline void DeviceDescriptor::setSpiceFilePath ( const std::string& spiceFilePath ) { _spiceFilePath = spiceFilePath; } + inline std::string DeviceDescriptor::getSpiceFilePath () const { return _spiceFilePath; } + inline const DeviceDescriptor::Connectors& DeviceDescriptor::getConnectors () const { return _connectors; } + inline const DeviceDescriptor::Layouts DeviceDescriptor::getLayouts () const { return _layouts; } + + +} // Hurricane namespace. + +#endif // HURRICANE_DEVICE_DESCRIPTOR_H diff --git a/hurricane/src/hurricane/hurricane/ModelDescriptor.h b/hurricane/src/hurricane/hurricane/ModelDescriptor.h new file mode 100644 index 00000000..5d1a685e --- /dev/null +++ b/hurricane/src/hurricane/hurricane/ModelDescriptor.h @@ -0,0 +1,86 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Christophe Alexandre | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/analog/ModelDescriptor.h" | +// +-----------------------------------------------------------------+ + + +#ifndef HURRICANE_MODEL_DESCRIPTOR_H +#define HURRICANE_MODEL_DESCRIPTOR_H + +#include "hurricane/Name.h" + + +namespace Hurricane { + + class ModelDescriptor { + public: + struct ModelDescriptorComp: + public std::binary_function { + bool operator () ( const ModelDescriptor* lmd, const ModelDescriptor* rmd ) const + { return lmd->getName() < rmd->getName(); } + }; + public: + inline ModelDescriptor ( const Name& name + , const Name& simul + , const Name& model + , std::string netlist + , const Name& name_n + , const Name& name_p + , bool precise ); + inline Name getName () const; + inline Name getSimulator () const; + inline Name getModel () const; + inline std::string getNetlist () const; + inline Name getName_N () const; + inline Name getName_P () const; + inline bool isPrecise () const; + private: + Name _name; + Name _simulator; + Name _model; + std::string _netlist; + Name _name_N; + Name _name_P; + bool _precise; + }; + + + inline ModelDescriptor::ModelDescriptor( const Name& name + , const Name& simul + , const Name& model + , std::string netlist + , const Name& name_n + , const Name& name_p + , bool precise ) + : _name (name) + , _simulator(simul) + , _model (model) + , _netlist (netlist) + , _name_N (name_n) + , _name_P (name_p) + , _precise (precise) + { } + + + inline Name ModelDescriptor::getName () const { return _name; } + inline Name ModelDescriptor::getSimulator () const { return _simulator; } + inline Name ModelDescriptor::getModel () const { return _model; } + inline std::string ModelDescriptor::getNetlist () const { return _netlist; } + inline Name ModelDescriptor::getName_N () const { return _name_N; } + inline Name ModelDescriptor::getName_P () const { return _name_P; } + inline bool ModelDescriptor::isPrecise () const { return _precise; } + + +} // Hurricane namespace. + +#endif // HURRICANE_MODEL_DESCRIPTOR_H diff --git a/hurricane/src/hurricane/hurricane/PhysicalRule.h b/hurricane/src/hurricane/hurricane/PhysicalRule.h new file mode 100644 index 00000000..44dd0727 --- /dev/null +++ b/hurricane/src/hurricane/hurricane/PhysicalRule.h @@ -0,0 +1,66 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/PhysicalRule.h" | +// +-----------------------------------------------------------------+ + + +#ifndef HURRICANE_PHYSICAL_RULE_H +#define HURRICANE_PHYSICAL_RULE_H + +#include "hurricane/DbU.h" +#include "hurricane/Rule.h" + + +namespace Hurricane { + + + class PhysicalRule : public Rule { + public: + typedef Rule Super; + public: + inline PhysicalRule ( const Name& name, DbU::Unit value, const std::string& reference ); + inline PhysicalRule ( const PhysicalRule& rule ); + virtual ~PhysicalRule (); + inline DbU::Unit getValue () const; + public: + // Inspector support. + virtual std::string _getTypeName () const; + virtual std::string _getString () const; + virtual Record* _getRecord () const; + private: + const Hurricane::DbU::Unit _value; + }; + + + inline PhysicalRule::PhysicalRule ( const Name& name + , DbU::Unit value + , const std::string& reference ) + : Rule(name,reference) + , _value(value) + { } + + inline PhysicalRule::PhysicalRule ( const PhysicalRule& rule ) + : Rule(rule.getName(),rule.getReference()) + , _value(rule._value) + { } + + + Hurricane::DbU::Unit PhysicalRule::getValue () const { return _value; } + + +} // Hurricane namespace. + + +INSPECTOR_P_SUPPORT(Hurricane::PhysicalRule); + +#endif // HURRICANE_PHYSICAL_RULE_H diff --git a/hurricane/src/hurricane/hurricane/Rule.h b/hurricane/src/hurricane/hurricane/Rule.h new file mode 100644 index 00000000..57b1be4a --- /dev/null +++ b/hurricane/src/hurricane/hurricane/Rule.h @@ -0,0 +1,56 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/Rule.h" | +// +-----------------------------------------------------------------+ + + +#ifndef HURRICANE_RULE_H +#define HURRICANE_RULE_H + +#include +#include "hurricane/Name.h" + + +namespace Hurricane { + + + class Rule { + public: + inline Rule ( const Name& name, const std::string& reference ); + inline Rule ( const Rule& rule ); + virtual ~Rule (); + inline Name getName () const; + inline std::string getReference () const; + public: + // Inspector support. + virtual std::string _getTypeName () const; + virtual std::string _getString () const; + virtual Record* _getRecord () const; + private: + const Name _name; + const std::string _reference; + }; + + + inline Rule::Rule ( const Name& name, const std::string& reference ): _name(name), _reference(reference) { } + inline Rule::Rule ( const Rule& rule ): _name(rule._name), _reference(rule._reference) { } + inline Hurricane::Name Rule::getName () const { return _name; } + inline std::string Rule::getReference () const { return _reference; } + + +} // Hurricane namespace. + + +INSPECTOR_P_SUPPORT(Hurricane::Rule); + +#endif // HURRICANE_RULE_H diff --git a/hurricane/src/hurricane/hurricane/Technology.h b/hurricane/src/hurricane/hurricane/Technology.h index 47e6ead8..9da35d69 100644 --- a/hurricane/src/hurricane/hurricane/Technology.h +++ b/hurricane/src/hurricane/hurricane/Technology.h @@ -32,24 +32,32 @@ #ifndef HURRICANE_TECHNOLOGY_H #define HURRICANE_TECHNOLOGY_H -#include -#include "hurricane/Mask.h" -#include "hurricane/DBo.h" -#include "hurricane/Layer.h" -#include "hurricane/BasicLayers.h" -#include "hurricane/RegularLayers.h" -#include "hurricane/ViaLayers.h" -#include "hurricane/IntrusiveMap.h" +#include +#include +#include "hurricane/Mask.h" +#include "hurricane/DBo.h" +#include "hurricane/Layer.h" +#include "hurricane/BasicLayers.h" +#include "hurricane/RegularLayers.h" +#include "hurricane/ViaLayers.h" +#include "hurricane/IntrusiveMap.h" +#include "hurricane/DeviceDescriptor.h" +#include "hurricane/ModelDescriptor.h" +#include "hurricane/Rule.h" namespace Hurricane { + using std::set; using std::multimap; class DataBase; class BasicLayer; class RegularLayer; class ViaLayer; + class UnitRule; + class PhysicalRule; + class TwoLayersPhysicalRule; // ------------------------------------------------------------------- @@ -58,14 +66,29 @@ namespace Hurricane { class Technology : public DBo { public: - typedef DBo Inherit; + typedef DBo Super; typedef multimap LayerMaskMap; + typedef set DeviceDescriptors; + typedef set ModelDescriptors; + public: + struct RuleNameCompare: + public std::binary_function { + bool operator() ( const Rule* rule1, const Rule* rule2 ) const + { return rule1->getName() < rule2->getName(); } + }; + public: + typedef std::pair LayerPair; + typedef std::set UnitRules; + typedef std::set PhysicalRules; + typedef std::set TwoLayersRulesSet; + typedef std::map OneLayerRules; + typedef std::map TwoLayersRules; public: // Sub-class : LayerMap. class LayerMap : public IntrusiveMap { public: - typedef IntrusiveMap Inherit; + typedef IntrusiveMap Super; public: LayerMap (); virtual Name _getKey ( Layer* ) const; @@ -76,55 +99,101 @@ namespace Hurricane { public: // Constructor. - static Technology* create ( DataBase* , const Name& ); - // Accessors. - inline bool isMetal ( const Layer* ) const; - inline DataBase* getDataBase () const; - inline const Name& getName () const; - inline Layer* getLayer ( const Name& ) const; - BasicLayer* getBasicLayer ( const Name& ) const; - RegularLayer* getRegularLayer ( const Name& ) const; - ViaLayer* getViaLayer ( const Name& ) const; - inline Layers getLayers () const; - BasicLayers getBasicLayers () const; - BasicLayers getBasicLayers ( const Layer::Mask& ) const; - RegularLayers getRegularLayers () const; - ViaLayers getViaLayers () const; - Layer* getLayer ( const Layer::Mask&, bool useSymbolic=true ) const; - Layer* getMetalAbove ( const Layer*, bool useSymbolic=true ) const; - Layer* getMetalBelow ( const Layer*, bool useSymbolic=true ) const; - Layer* getCutAbove ( const Layer*, bool useSymbolic=true ) const; - Layer* getCutBelow ( const Layer*, bool useSymbolic=true ) const; - Layer* getViaBetween ( const Layer*, const Layer*, bool useSymbolic=true ) const; - Layer* getNthMetal ( int ) const; - Layer* getNthCut ( int ) const; + static Technology* create ( DataBase* , const Name& ); + // Accessors. + inline bool isMetal ( const Layer* ) const; + inline DataBase* getDataBase () const; + inline const Name& getName () const; + inline Layer* getLayer ( const Name& ) const; + BasicLayer* getBasicLayer ( const Name& ) const; + RegularLayer* getRegularLayer ( const Name& ) const; + ViaLayer* getViaLayer ( const Name& ) const; + inline Layers getLayers () const; + BasicLayers getBasicLayers () const; + BasicLayers getBasicLayers ( const Layer::Mask& ) const; + RegularLayers getRegularLayers () const; + ViaLayers getViaLayers () const; + Layer* getLayer ( const Layer::Mask&, bool useSymbolic=true ) const; + Layer* getMetalAbove ( const Layer*, bool useSymbolic=true ) const; + Layer* getMetalBelow ( const Layer*, bool useSymbolic=true ) const; + Layer* getCutAbove ( const Layer*, bool useSymbolic=true ) const; + Layer* getCutBelow ( const Layer*, bool useSymbolic=true ) const; + Layer* getViaBetween ( const Layer*, const Layer*, bool useSymbolic=true ) const; + Layer* getNthMetal ( int ) const; + Layer* getNthCut ( int ) const; + DeviceDescriptor* getDeviceDescriptor ( const Name& ); + ModelDescriptor* getModelDescriptor (const Name& ); + inline ModelDescriptors& getModelDescriptors (); + UnitRule getUnitRule ( const std::string& ruleName ) const; + PhysicalRule getPhysicalRule ( const std::string& ruleName ) const; + PhysicalRule getPhysicalRule ( const std::string& ruleName + , const std::string& layerName ) const; + PhysicalRule getPhysicalRule ( const std::string& ruleName + , const std::string& layer1Name + , const std::string& layer2Name ) const; + inline const UnitRules& getUnitRules () const; + inline const PhysicalRules& getNoLayerRules () const; + inline const OneLayerRules& getOneLayerRules () const; + inline const TwoLayersRules& getTwoLayersRules () const; + void toDtr ( std::ostream& ); + inline void setName ( const std::string& name ); // Updators. - void setName ( const Name& ); - bool setSymbolicLayer ( const Name& ); - bool setSymbolicLayer ( const Layer* ); - // Others. - inline LayerMap& _getLayerMap (); - inline LayerMaskMap& _getLayerMaskMap (); - void _insertInLayerMaskMap ( Layer* ); - void _removeFromLayerMaskMap ( Layer* ); - inline Layer::Mask& _getCutMask (); - inline Layer::Mask& _getMetalMask (); - void _onDbuChange ( float scale ); - // Hurricane Managment. - virtual void _toJson ( JsonWriter* ) const; - virtual void _toJsonCollections ( JsonWriter* ) const; - virtual string _getTypeName () const; - virtual string _getString () const; - virtual Record* _getRecord () const; + void setName ( const Name& ); + bool setSymbolicLayer ( const Name& ); + bool setSymbolicLayer ( const Layer* ); + DeviceDescriptor* addDeviceDescriptor ( const Name& ); + ModelDescriptor* addModelDescriptor ( const Name& name + , const Name& simul + , const Name& model + , std::string netlist + , const Name& name_n + , const Name& name_p + , bool precise ); + void addUnitRule ( const std::string& ruleName + , double value + , const std::string& reference ); + void addPhysicalRule ( const std::string& ruleName + , DbU::Unit value + , const std::string& reference ); + void addPhysicalRule ( const std::string& ruleName + , const std::string& layerName + , DbU::Unit value + , const std::string& reference); + void addPhysicalRule ( const std::string& ruleName + , const std::string& layer1Name + , const std::string& layer2Name + , bool symetric + , DbU::Unit value + , const std::string& reference ); + // Others. + inline LayerMap& _getLayerMap (); + inline LayerMaskMap& _getLayerMaskMap (); + void _insertInLayerMaskMap ( Layer* ); + void _removeFromLayerMaskMap ( Layer* ); + inline Layer::Mask& _getCutMask (); + inline Layer::Mask& _getMetalMask (); + void _onDbuChange ( float scale ); + // Hurricane Managment. + virtual void _toJson ( JsonWriter* ) const; + virtual void _toJsonCollections ( JsonWriter* ) const; + virtual string _getTypeName () const; + virtual string _getString () const; + virtual Record* _getRecord () const; private: // Internal: Attributes. - DataBase* _dataBase; - Name _name; - LayerMap _layerMap; - LayerMaskMap _layerMaskMap; - Layer::Mask _cutMask; - Layer::Mask _metalMask; + DataBase* _dataBase; + Name _name; + LayerMap _layerMap; + LayerMaskMap _layerMaskMap; + Layer::Mask _cutMask; + Layer::Mask _metalMask; + DeviceDescriptors _deviceDescriptors; + ModelDescriptors _modelDescriptors; + UnitRules _unitRules; + PhysicalRules _noLayerRules; + OneLayerRules _oneLayerRules; + TwoLayersRules _twoLayersRules; protected: // Constructors & Destructors. @@ -135,15 +204,16 @@ namespace Hurricane { // Inline Functions. - inline bool Technology::isMetal ( const Layer* layer ) const { return _metalMask.contains(layer->getMask()); } - inline DataBase* Technology::getDataBase () const { return _dataBase; } - inline const Name& Technology::getName () const { return _name; } - inline Layer* Technology::getLayer ( const Name& name ) const { return _layerMap.getElement(name); } - inline Layers Technology::getLayers () const { return getCollection(&_layerMaskMap); } - inline Technology::LayerMap& Technology::_getLayerMap () { return _layerMap; } - inline Technology::LayerMaskMap& Technology::_getLayerMaskMap () { return _layerMaskMap; } - inline Layer::Mask& Technology::_getCutMask () { return _cutMask; } - inline Layer::Mask& Technology::_getMetalMask () { return _metalMask; } + inline bool Technology::isMetal ( const Layer* layer ) const { return _metalMask.contains(layer->getMask()); } + inline DataBase* Technology::getDataBase () const { return _dataBase; } + inline const Name& Technology::getName () const { return _name; } + inline Layer* Technology::getLayer ( const Name& name ) const { return _layerMap.getElement(name); } + inline Layers Technology::getLayers () const { return getCollection(&_layerMaskMap); } + inline Technology::ModelDescriptors& Technology::getModelDescriptors () { return _modelDescriptors; } + inline Technology::LayerMap& Technology::_getLayerMap () { return _layerMap; } + inline Technology::LayerMaskMap& Technology::_getLayerMaskMap () { return _layerMaskMap; } + inline Layer::Mask& Technology::_getCutMask () { return _cutMask; } + inline Layer::Mask& Technology::_getMetalMask () { return _metalMask; } // ------------------------------------------------------------------- @@ -166,6 +236,14 @@ namespace Hurricane { } // Hurricane namespace. +// ------------------------------------------------------------------- +// Inspector Support for : Hurricane::Technology::LayerPair". + +template<> +inline std::string getString( Hurricane::Technology::LayerPair lp ) +{ return ""; } + + INSPECTOR_P_SUPPORT(Hurricane::Technology); diff --git a/hurricane/src/hurricane/hurricane/TwoLayersPhysicalRule.h b/hurricane/src/hurricane/hurricane/TwoLayersPhysicalRule.h new file mode 100644 index 00000000..a027705f --- /dev/null +++ b/hurricane/src/hurricane/hurricane/TwoLayersPhysicalRule.h @@ -0,0 +1,63 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : hurricane/TwoLayersPhysicalRule.h | +// +-----------------------------------------------------------------+ + + +#ifndef HURRICANE_TWO_LAYERS_PHYSICAL_RULE_H +#define HURRICANE_TWO_LAYERS_PHYSICAL_RULE_H + +#include "hurricane/PhysicalRule.h" + + +namespace Hurricane { + + class TwoLayersPhysicalRule : public PhysicalRule { + public: + typedef PhysicalRule Super; + public: + inline TwoLayersPhysicalRule ( const Name& name + , DbU::Unit value + , const std::string& reference + , bool symetric + ); + virtual ~TwoLayersPhysicalRule (); + inline bool isSymetric () const; + public: + virtual std::string _getTypeName () const; + virtual std::string _getString () const; + virtual Record* _getRecord () const; + private: + const bool _symetric; + }; + + + TwoLayersPhysicalRule::TwoLayersPhysicalRule ( const Name& name + , DbU::Unit value + , const std::string& reference + , bool symetric + ) + : PhysicalRule(name,value,reference) + , _symetric(symetric) + { } + + + bool TwoLayersPhysicalRule::isSymetric () const { return _symetric; } + + +} // Hurricane namespace. + + +INSPECTOR_P_SUPPORT(Hurricane::TwoLayersPhysicalRule); + +#endif // HURRICANE_TWO_LAYERS_PHYSICAL_RULE_H diff --git a/hurricane/src/hurricane/hurricane/UnitRule.h b/hurricane/src/hurricane/hurricane/UnitRule.h new file mode 100644 index 00000000..46541b86 --- /dev/null +++ b/hurricane/src/hurricane/hurricane/UnitRule.h @@ -0,0 +1,65 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2009-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Authors : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/UnitRule.h" | +// +-----------------------------------------------------------------+ + + +#ifndef HURRICANE_UNIT_RULE_H +#define HURRICANE_UNIT_RULE_H + +#include "hurricane/Rule.h" + + +namespace Hurricane { + + + class UnitRule : public Rule { + public: + typedef Rule Super; + public: + inline UnitRule ( const Name& name, double value, const std::string& reference ); + inline UnitRule ( const UnitRule& rule ); + virtual ~UnitRule (); + inline double getValue () const; + public: + // Inspector support. + virtual std::string _getTypeName () const; + virtual std::string _getString () const; + virtual Record* _getRecord () const; + private: + const double _value; + }; + + + inline UnitRule::UnitRule ( const Name& name + , double value + , const std::string& reference ) + : Rule(name,reference) + , _value(value) + { } + + inline UnitRule::UnitRule ( const UnitRule& rule ) + : Rule(rule.getName(),rule.getReference()) + , _value(rule._value) + { } + + + double UnitRule::getValue () const { return _value; } + + +} // Hurricane namespace. + + +INSPECTOR_P_SUPPORT(Hurricane::UnitRule); + +#endif // HURRICANE_UNIT_RULE_H diff --git a/hurricane/src/isobar/CMakeLists.txt b/hurricane/src/isobar/CMakeLists.txt index 6ee2c4a1..a1daab41 100644 --- a/hurricane/src/isobar/CMakeLists.txt +++ b/hurricane/src/isobar/CMakeLists.txt @@ -77,6 +77,11 @@ PyVertical.cpp PyQueryMask.cpp PyQuery.cpp + PyDeviceDescriptor.cpp + PyRule.cpp + PyUnitRule.cpp + PyPhysicalRule.cpp + PyTwoLayersPhysicalRule.cpp ) set( pyIncludes hurricane/isobar/ProxyProperty.h hurricane/isobar/PyBreakpoint.h @@ -147,6 +152,11 @@ hurricane/isobar/PyVertical.h hurricane/isobar/PyQueryMask.h hurricane/isobar/PyQuery.h + hurricane/isobar/PyDeviceDescriptor.h + hurricane/isobar/PyRule.h + hurricane/isobar/PyUnitRule.h + hurricane/isobar/PyPhysicalRule.h + hurricane/isobar/PyTwoLayersPhysicalRule.h ) set( depLibs hurricane diff --git a/hurricane/src/isobar/PyDeviceDescriptor.cpp b/hurricane/src/isobar/PyDeviceDescriptor.cpp new file mode 100644 index 00000000..b4622c5d --- /dev/null +++ b/hurricane/src/isobar/PyDeviceDescriptor.cpp @@ -0,0 +1,138 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2010-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyDeviceDescriptor.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyDeviceDescriptor.h" + + +namespace Isobar { + + using namespace Hurricane; + + extern "C" { + +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(DeviceDescriptor,devdesc,function) + + +// +=================================================================+ +// | "PyDeviceDescriptor" Python Module Code Part | +// +=================================================================+ + +#if defined(__PYTHON_MODULE__) + + + extern PyObject* PyDeviceDescriptor_setSpiceFilePath ( PyDeviceDescriptor* self, PyObject* args ) + { + cdebug.log(49) << "PyDeviceDescriptor_setSpiceFilePath ()" << endl; + + HTRY + METHOD_HEAD("DeviceDescriptor.setSpiceFilePath()") + + char* name = NULL; + if (PyArg_ParseTuple(args,"s:DeviceDescriptor.setSpiceFilePath", &name)) { + devdesc->setSpiceFilePath( name ); + } else { + PyErr_SetString( ConstructorError + , "DeviceDescriptor::setSpiceFilePath(): Invalid number of parameters." ); + return NULL; + } + HCATCH + + Py_RETURN_NONE; + } + + + extern PyObject* PyDeviceDescriptor_addConnector ( PyDeviceDescriptor* self, PyObject* args ) + { + cdebug.log(49) << "PyDeviceDescriptor_addConnector ()" << endl; + + HTRY + METHOD_HEAD("DeviceDescriptor.addConnector()") + + char* name = NULL; + if (PyArg_ParseTuple(args,"s:DeviceDescriptor.addConnector", &name)) { + devdesc->addConnector( name ); + } else { + PyErr_SetString( ConstructorError + , "DeviceDescriptor::addConnector(): Invalid number of parameters." ); + return NULL; + } + HCATCH + + Py_RETURN_NONE; + } + + + extern PyObject* PyDeviceDescriptor_addLayout ( PyDeviceDescriptor* self, PyObject* args ) + { + cdebug.log(49) << "PyDeviceDescriptor_addLayout ()" << endl; + + HTRY + METHOD_HEAD("DeviceDescriptor.addLayout()") + + char* layoutName = NULL; + char* moduleName = NULL; + if (PyArg_ParseTuple(args,"ss:DeviceDescriptor.addLayout", &layoutName, &moduleName)) { + devdesc->addLayout( layoutName, moduleName ); + } else { + PyErr_SetString( ConstructorError + , "DeviceDescriptor::addLayout(): Invalid number of parameters." ); + return NULL; + } + HCATCH + + Py_RETURN_NONE; + } + + + // Standart Accessors (Attributes). + + // Standard destroy (Attribute). + //DirectDestroyAttribute(PyDeviceDescriptor_destroy, PyDeviceDescriptor) //not needed + + + PyMethodDef PyDeviceDescriptor_Methods[] = + { { "setSpiceFilePath" , (PyCFunction)PyDeviceDescriptor_setSpiceFilePath, METH_VARARGS + , "Set the spice model associated to this DeviceDescriptor." } + , { "addConnector" , (PyCFunction)PyDeviceDescriptor_addConnector , METH_VARARGS + , "Add a new connector to the DeviceDescriptor." } + , { "addLayout" , (PyCFunction)PyDeviceDescriptor_addLayout , METH_VARARGS + , "Add a new layout generator , done by ." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + PythonOnlyDeleteMethod(DeviceDescriptor) + PyTypeObjectLinkPyType(DeviceDescriptor) + + +#else // End of Python Module Code Part. + + +// +=================================================================+ +// | "PyDeviceDescriptor" Shared Library Code Part | +// +=================================================================+ + + + LinkCreateMethod(DeviceDescriptor) + PyTypeObjectDefinitions(DeviceDescriptor) + + +#endif // End of Shared Library Code Part. + + } // extern "C". + +} // Isobar namespace. + diff --git a/hurricane/src/isobar/PyHurricane.cpp b/hurricane/src/isobar/PyHurricane.cpp index a2e05fb1..bc1d1681 100644 --- a/hurricane/src/isobar/PyHurricane.cpp +++ b/hurricane/src/isobar/PyHurricane.cpp @@ -82,6 +82,10 @@ #include "hurricane/isobar/PyTechnology.h" #include "hurricane/isobar/PyQueryMask.h" #include "hurricane/isobar/PyQuery.h" +#include "hurricane/isobar/PyDeviceDescriptor.h" +#include "hurricane/isobar/PyUnitRule.h" +#include "hurricane/isobar/PyPhysicalRule.h" +#include "hurricane/isobar/PyTwoLayersPhysicalRule.h" #include "hurricane/NetExternalComponents.h" #include @@ -194,7 +198,6 @@ using namespace Hurricane; , const char* idBase ) { for ( unsigned i=0 ; i < _types.size() ; i++ ) { if ( ! strcmp ( _types[i]->_id, id ) ) { - //throw Error ( objectTypeRedefinition ); // 04.09.2009 d2 modification so Pharos can run several scripts during one execution cdebug_log(20,0) << objectTypeRedefinition << endl; return; } @@ -581,155 +584,171 @@ extern "C" { PyBreakpoint_LinkPyType (); PyQuery_LinkPyType (); PyQueryMask_LinkPyType (); + PyDeviceDescriptor_LinkPyType(); + PyRule_LinkPyType(); + PyUnitRule_LinkPyType(); + PyPhysicalRule_LinkPyType(); + PyTwoLayersPhysicalRule_LinkPyType(); - PYTYPE_READY ( DebugSession ) - PYTYPE_READY ( UpdateSession ) - PYTYPE_READY ( DbU ) - PYTYPE_READY ( Point ) - PYTYPE_READY ( PointCollection ) - PYTYPE_READY ( Interval ) - PYTYPE_READY ( Box ) - PYTYPE_READY ( Transformation ) - PYTYPE_READY ( Orientation ) - PYTYPE_READY ( DataBase ) - PYTYPE_READY ( Technology ) - PYTYPE_READY ( Library ) - PYTYPE_READY ( Entity ) - PYTYPE_READY ( Hook ) - PYTYPE_READY ( HookCollection ) - PYTYPE_READY ( Material ) - PYTYPE_READY ( Layer ) - PYTYPE_READY ( LayerMask ) - PYTYPE_READY ( BasicLayerCollection ) - PYTYPE_READY ( BasicLayerCollectionLocator ) - PYTYPE_READY ( LayerCollection ) - PYTYPE_READY ( LayerCollectionLocator ) - PYTYPE_READY ( RegularLayerCollection ) - PYTYPE_READY ( RegularLayerCollectionLocator ) - PYTYPE_READY ( ViaLayerCollection ) - PYTYPE_READY ( ViaLayerCollectionLocator ) - PYTYPE_READY ( Path ) - PYTYPE_READY ( Occurrence ) - PYTYPE_READY ( PlacementStatus ) - PYTYPE_READY ( InstanceCollection ) - PYTYPE_READY ( InstanceCollectionLocator ) - PYTYPE_READY ( PlugCollection ) - PYTYPE_READY ( PlugCollectionLocator ) - PYTYPE_READY ( NetType ) - PYTYPE_READY ( NetDirection ) - PYTYPE_READY ( NetCollection ) - PYTYPE_READY ( NetCollectionLocator ) - PYTYPE_READY ( NetRoutingState ) - PYTYPE_READY ( NetRoutingExtension ) - PYTYPE_READY ( CellCollection ) - PYTYPE_READY ( CellCollectionLocator ) - PYTYPE_READY ( PinPlacementStatus ) - PYTYPE_READY ( PinDirection ) - PYTYPE_READY ( PinCollection ) - PYTYPE_READY ( PinCollectionLocator ) - PYTYPE_READY ( SegmentCollection ) - PYTYPE_READY ( SegmentCollectionLocator ) - PYTYPE_READY ( ComponentCollection ) - PYTYPE_READY ( ComponentCollectionLocator ) - PYTYPE_READY ( OccurrenceCollection ) - PYTYPE_READY ( OccurrenceCollectionLocator ) - PYTYPE_READY ( ReferenceCollection ) - PYTYPE_READY ( ReferenceCollectionLocator ) - PYTYPE_READY ( HyperNet ) - PYTYPE_READY ( NetExternalComponents ) - PYTYPE_READY ( Breakpoint ) - PYTYPE_READY ( Query ) - PYTYPE_READY ( QueryMask ) + PYTYPE_READY( DebugSession ) + PYTYPE_READY( UpdateSession ) + PYTYPE_READY( DbU ) + PYTYPE_READY( Point ) + PYTYPE_READY( PointCollection ) + PYTYPE_READY( Interval ) + PYTYPE_READY( Box ) + PYTYPE_READY( Transformation ) + PYTYPE_READY( Orientation ) + PYTYPE_READY( DataBase ) + PYTYPE_READY( Technology ) + PYTYPE_READY( Library ) + PYTYPE_READY( Entity ) + PYTYPE_READY( Hook ) + PYTYPE_READY( HookCollection ) + PYTYPE_READY( Material ) + PYTYPE_READY( Layer ) + PYTYPE_READY( LayerMask ) + PYTYPE_READY( BasicLayerCollection ) + PYTYPE_READY( BasicLayerCollectionLocator ) + PYTYPE_READY( LayerCollection ) + PYTYPE_READY( LayerCollectionLocator ) + PYTYPE_READY( RegularLayerCollection ) + PYTYPE_READY( RegularLayerCollectionLocator ) + PYTYPE_READY( ViaLayerCollection ) + PYTYPE_READY( ViaLayerCollectionLocator ) + PYTYPE_READY( Path ) + PYTYPE_READY( Occurrence ) + PYTYPE_READY( PlacementStatus ) + PYTYPE_READY( InstanceCollection ) + PYTYPE_READY( InstanceCollectionLocator ) + PYTYPE_READY( PlugCollection ) + PYTYPE_READY( PlugCollectionLocator ) + PYTYPE_READY( NetType ) + PYTYPE_READY( NetDirection ) + PYTYPE_READY( NetCollection ) + PYTYPE_READY( NetCollectionLocator ) + PYTYPE_READY( NetRoutingState ) + PYTYPE_READY( NetRoutingExtension ) + PYTYPE_READY( CellCollection ) + PYTYPE_READY( CellCollectionLocator ) + PYTYPE_READY( PinPlacementStatus ) + PYTYPE_READY( PinDirection ) + PYTYPE_READY( PinCollection ) + PYTYPE_READY( PinCollectionLocator ) + PYTYPE_READY( SegmentCollection ) + PYTYPE_READY( SegmentCollectionLocator ) + PYTYPE_READY( ComponentCollection ) + PYTYPE_READY( ComponentCollectionLocator ) + PYTYPE_READY( OccurrenceCollection ) + PYTYPE_READY( OccurrenceCollectionLocator ) + PYTYPE_READY( ReferenceCollection ) + PYTYPE_READY( ReferenceCollectionLocator ) + PYTYPE_READY( HyperNet ) + PYTYPE_READY( NetExternalComponents ) + PYTYPE_READY( Breakpoint ) + PYTYPE_READY( Query ) + PYTYPE_READY( QueryMask ) + PYTYPE_READY( DeviceDescriptor ) + PYTYPE_READY( Rule ) - PYTYPE_READY_SUB ( BasicLayer , Layer ) - PYTYPE_READY_SUB ( RegularLayer , Layer ) - PYTYPE_READY_SUB ( ContactLayer , Layer ) - PYTYPE_READY_SUB ( DiffusionLayer , Layer ) - PYTYPE_READY_SUB ( TransistorLayer, Layer ) - PYTYPE_READY_SUB ( ViaLayer , Layer ) - PYTYPE_READY_SUB ( Cell , Entity ) - PYTYPE_READY_SUB ( Instance , Entity ) - PYTYPE_READY_SUB ( Reference , Entity ) - PYTYPE_READY_SUB ( Net , Entity ) - PYTYPE_READY_SUB ( Component , Entity ) - PYTYPE_READY_SUB ( RoutingPad , Component) - PYTYPE_READY_SUB ( Segment , Component) - PYTYPE_READY_SUB ( Horizontal , Segment ) - PYTYPE_READY_SUB ( Vertical , Segment ) + PYTYPE_READY_SUB( BasicLayer , Layer ) + PYTYPE_READY_SUB( RegularLayer , Layer ) + PYTYPE_READY_SUB( ContactLayer , Layer ) + PYTYPE_READY_SUB( DiffusionLayer , Layer ) + PYTYPE_READY_SUB( TransistorLayer, Layer ) + PYTYPE_READY_SUB( ViaLayer , Layer ) + PYTYPE_READY_SUB( Cell , Entity ) + PYTYPE_READY_SUB( Instance , Entity ) + PYTYPE_READY_SUB( Reference , Entity ) + PYTYPE_READY_SUB( Net , Entity ) + PYTYPE_READY_SUB( Component , Entity ) + PYTYPE_READY_SUB( RoutingPad , Component) + PYTYPE_READY_SUB( Segment , Component) + PYTYPE_READY_SUB( Horizontal , Segment ) + PYTYPE_READY_SUB( Vertical , Segment ) - PYTYPE_READY_SUB ( Contact , Component) - PYTYPE_READY_SUB ( Pin , Contact ) - PYTYPE_READY_SUB ( Plug , Component) - PYTYPE_READY_SUB ( Pad , Component) - PYTYPE_READY_SUB ( Diagonal , Component) - PYTYPE_READY_SUB ( Rectilinear , Component) - PYTYPE_READY_SUB ( Polygon , Component) + PYTYPE_READY_SUB( Contact , Component) + PYTYPE_READY_SUB( Pin , Contact ) + PYTYPE_READY_SUB( Plug , Component) + PYTYPE_READY_SUB( Pad , Component) + PYTYPE_READY_SUB( Diagonal , Component) + PYTYPE_READY_SUB( Rectilinear , Component) + PYTYPE_READY_SUB( Polygon , Component) + + PYTYPE_READY_SUB( UnitRule , Rule ) + PYTYPE_READY_SUB( PhysicalRule , Rule ) + PYTYPE_READY_SUB( TwoLayersPhysicalRule, PhysicalRule ) // Identifier string can take up to 10 characters ! - __cs.addType ( "intv" , &PyTypeInterval , "" , false ); - __cs.addType ( "box" , &PyTypeBox , "" , false ); - __cs.addType ( "ent" , &PyTypeEntity , "" , false ); - __cs.addType ( "cell" , &PyTypeCell , "" , false, "ent" ); - __cs.addType ( "cellCol" , &PyTypeCellCollection , "" , false ); - __cs.addType ( "hook" , &PyTypeHook , "" , false ); - __cs.addType ( "hookColl" , &PyTypeHookCollection , "" , false ); - __cs.addType ( "comp" , &PyTypeComponent , "" , false, "ent" ); - __cs.addType ( "compCol" , &PyTypeComponentCollection , "" , false ); - __cs.addType ( "contact" , &PyTypeContact , "" , false, "comp" ); + __cs.addType( "intv" , &PyTypeInterval , "" , false ); + __cs.addType( "box" , &PyTypeBox , "" , false ); + __cs.addType( "ent" , &PyTypeEntity , "" , false ); + __cs.addType( "cell" , &PyTypeCell , "" , false, "ent" ); + __cs.addType( "cellCol" , &PyTypeCellCollection , "" , false ); + __cs.addType( "hook" , &PyTypeHook , "" , false ); + __cs.addType( "hookColl" , &PyTypeHookCollection , "" , false ); + __cs.addType( "comp" , &PyTypeComponent , "" , false, "ent" ); + __cs.addType( "compCol" , &PyTypeComponentCollection , "" , false ); + __cs.addType( "contact" , &PyTypeContact , "" , false, "comp" ); // Do not change the "none" string. It's hardwired to the None object. - __cs.addType ( "none" , Py_None->ob_type , "" , true ); - __cs.addType ( "float" , &PyFloat_Type , "" , true ); - __cs.addType ( "int" , &PyLong_Type , "" , true ); - __cs.addType ( "bool" , &PyBool_Type , "" , true ); - __cs.addType ( "string" , &PyString_Type , "" , true ); - __cs.addType ( "list" , &PyList_Type , "" , true ); + __cs.addType( "none" , Py_None->ob_type , "" , true ); + __cs.addType( "float" , &PyFloat_Type , "" , true ); + __cs.addType( "int" , &PyLong_Type , "" , true ); + __cs.addType( "bool" , &PyBool_Type , "" , true ); + __cs.addType( "string" , &PyString_Type , "" , true ); + __cs.addType( "list" , &PyList_Type , "" , true ); // Do not change the "function" string. It's hardwired to callable (function) objects. - __cs.addType ( "function" , NULL , "" , true ); - __cs.addType ( "horiz" , &PyTypeHorizontal , "" , false, "segment" ); - __cs.addType ( "inst" , &PyTypeInstance , "" , false, "ent" ); - __cs.addType ( "instCol" , &PyTypeInstanceCollection , "" , false ); - __cs.addType ( "mat" , &PyTypeMaterial , "" , false ); - __cs.addType ( "basicLayer" , &PyTypeBasicLayer , "" , false, "layer" ); - __cs.addType ( "regLayer" , &PyTypeRegularLayer , "" , false, "layer" ); - __cs.addType ( "contLayer" , &PyTypeContactLayer , "" , false, "layer" ); - __cs.addType ( "diffLayer" , &PyTypeDiffusionLayer , "" , false, "layer" ); - __cs.addType ( "tranLayer" , &PyTypeTransistorLayer , "" , false, "layer" ); - __cs.addType ( "viaLayer" , &PyTypeViaLayer , "" , false, "layer" ); - __cs.addType ( "layerColl" , &PyTypeLayerCollection , "" , false ); - __cs.addType ( "blayerColl" , &PyTypeBasicLayerCollection , "" , false ); - __cs.addType ( "rlayerColl" , &PyTypeRegularLayerCollection, "", false ); - __cs.addType ( "vlayerColl" , &PyTypeViaLayerCollection , "" , false ); - __cs.addType ( "layer" , &PyTypeLayer , "" , false ); - __cs.addType ( "lmask" , &PyTypeLayerMask , "" , false ); - __cs.addType ( "library" , &PyTypeLibrary , "" , false ); - __cs.addType ( "ref" , &PyTypeReference , "" , false, "ent" ); - __cs.addType ( "refCol" , &PyTypeReferenceCollection , "" , false ); - __cs.addType ( "net" , &PyTypeNet , "" , false, "ent" ); - __cs.addType ( "netCol" , &PyTypeNetCollection , "" , false ); - __cs.addType ( "hyperNet" , &PyTypeHyperNet , "" , false ); - __cs.addType ( "pin" , &PyTypePin , "" , false, "contact" ); - __cs.addType ( "pinCol" , &PyTypePinCollection , "" , false ); - __cs.addType ( "plug" , &PyTypePlug , "" , false, "comp" ); - __cs.addType ( "plugCol" , &PyTypePlugCollection , "" , false ); - __cs.addType ( "point" , &PyTypePoint , "" , false ); - __cs.addType ( "points" , &PyTypePointCollection , "" , false ); - __cs.addType ( "rp" , &PyTypeRoutingPad , "" , false, "comp" ); - __cs.addType ( "segment" , &PyTypeSegment , "" , false, "comp" ); - __cs.addType ( "pad " , &PyTypePad , "" , false, "comp" ); - __cs.addType ( "diagonal" , &PyTypeDiagonal , "" , false, "comp" ); - __cs.addType ( "rectilin" , &PyTypeRectilinear , "" , false, "comp" ); - __cs.addType ( "polygon" , &PyTypePolygon , "" , false, "comp" ); - __cs.addType ( "segmentCol" , &PyTypeSegmentCollection , "" , false ); - __cs.addType ( "db" , &PyTypeDataBase , "" , false ); - __cs.addType ( "techno" , &PyTypeTechnology , "" , false ); - __cs.addType ( "transfo" , &PyTypeTransformation , "" , false ); - __cs.addType ( "orient" , &PyTypeOrientation , "" , false ); - __cs.addType ( "vert" , &PyTypeVertical , "" , false, "segment" ); - __cs.addType ( "path" , &PyTypePath , "" , false ); - __cs.addType ( "occur" , &PyTypeOccurrence , "" , false ); - __cs.addType ( "occurCol" , &PyTypeOccurrenceCollection , "" , false ); - __cs.addType ( "query" , &PyTypeQuery , "" , false ); - __cs.addType ( "qmask" , &PyTypeQueryMask , "" , false ); + __cs.addType( "function" , NULL , "" , true ); + __cs.addType( "horiz" , &PyTypeHorizontal , "" , false, "segment" ); + __cs.addType( "inst" , &PyTypeInstance , "" , false, "ent" ); + __cs.addType( "instCol" , &PyTypeInstanceCollection , "" , false ); + __cs.addType( "mat" , &PyTypeMaterial , "" , false ); + __cs.addType( "basicLayer" , &PyTypeBasicLayer , "" , false, "layer" ); + __cs.addType( "regLayer" , &PyTypeRegularLayer , "" , false, "layer" ); + __cs.addType( "contLayer" , &PyTypeContactLayer , "" , false, "layer" ); + __cs.addType( "diffLayer" , &PyTypeDiffusionLayer , "" , false, "layer" ); + __cs.addType( "tranLayer" , &PyTypeTransistorLayer , "" , false, "layer" ); + __cs.addType( "viaLayer" , &PyTypeViaLayer , "" , false, "layer" ); + __cs.addType( "layerColl" , &PyTypeLayerCollection , "" , false ); + __cs.addType( "blayerColl" , &PyTypeBasicLayerCollection , "" , false ); + __cs.addType( "rlayerColl" , &PyTypeRegularLayerCollection, "", false ); + __cs.addType( "vlayerColl" , &PyTypeViaLayerCollection , "" , false ); + __cs.addType( "layer" , &PyTypeLayer , "" , false ); + __cs.addType( "lmask" , &PyTypeLayerMask , "" , false ); + __cs.addType( "library" , &PyTypeLibrary , "" , false ); + __cs.addType( "ref" , &PyTypeReference , "" , false, "ent" ); + __cs.addType( "refCol" , &PyTypeReferenceCollection , "" , false ); + __cs.addType( "net" , &PyTypeNet , "" , false, "ent" ); + __cs.addType( "netCol" , &PyTypeNetCollection , "" , false ); + __cs.addType( "hyperNet" , &PyTypeHyperNet , "" , false ); + __cs.addType( "pin" , &PyTypePin , "" , false, "contact" ); + __cs.addType( "pinCol" , &PyTypePinCollection , "" , false ); + __cs.addType( "plug" , &PyTypePlug , "" , false, "comp" ); + __cs.addType( "plugCol" , &PyTypePlugCollection , "" , false ); + __cs.addType( "point" , &PyTypePoint , "" , false ); + __cs.addType( "points" , &PyTypePointCollection , "" , false ); + __cs.addType( "rp" , &PyTypeRoutingPad , "" , false, "comp" ); + __cs.addType( "segment" , &PyTypeSegment , "" , false, "comp" ); + __cs.addType( "pad " , &PyTypePad , "" , false, "comp" ); + __cs.addType( "diagonal" , &PyTypeDiagonal , "" , false, "comp" ); + __cs.addType( "rectilin" , &PyTypeRectilinear , "" , false, "comp" ); + __cs.addType( "polygon" , &PyTypePolygon , "" , false, "comp" ); + __cs.addType( "segmentCol" , &PyTypeSegmentCollection , "" , false ); + __cs.addType( "db" , &PyTypeDataBase , "" , false ); + __cs.addType( "techno" , &PyTypeTechnology , "" , false ); + __cs.addType( "transfo" , &PyTypeTransformation , "" , false ); + __cs.addType( "orient" , &PyTypeOrientation , "" , false ); + __cs.addType( "vert" , &PyTypeVertical , "" , false, "segment" ); + __cs.addType( "path" , &PyTypePath , "" , false ); + __cs.addType( "occur" , &PyTypeOccurrence , "" , false ); + __cs.addType( "occurCol" , &PyTypeOccurrenceCollection , "" , false ); + __cs.addType( "query" , &PyTypeQuery , "" , false ); + __cs.addType( "qmask" , &PyTypeQueryMask , "" , false ); + __cs.addType( "devdesc" , &PyTypeDeviceDescriptor , "" , false ); + __cs.addType( "rule" , &PyTypeRule , "" , false ); + __cs.addType( "urule" , &PyTypeUnitRule , "" , false, "rule" ); + __cs.addType( "prule" , &PyTypePhysicalRule , "" , false, "rule" ); + __cs.addType( "2prule" , &PyTypeTwoLayersPhysicalRule , "" , false, "prule" ); PyObject* module = Py_InitModule ( "Hurricane", PyHurricane_Methods ); @@ -823,6 +842,9 @@ extern "C" { PyModule_AddObject ( module, "Rectilinear" , (PyObject*)&PyTypeRectilinear ); Py_INCREF ( &PyTypePolygon ); PyModule_AddObject ( module, "Polygon" , (PyObject*)&PyTypePolygon ); + + Py_INCREF( &PyTypeDeviceDescriptor ); + PyModule_AddObject( module, "DeviceDescriptor" , (PyObject*)&PyTypeDeviceDescriptor ); PyObject* dictionnary = PyModule_GetDict ( module ); diff --git a/hurricane/src/isobar/PyPhysicalRule.cpp b/hurricane/src/isobar/PyPhysicalRule.cpp new file mode 100644 index 00000000..181a29c5 --- /dev/null +++ b/hurricane/src/isobar/PyPhysicalRule.cpp @@ -0,0 +1,80 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyPhysicalRule.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyPhysicalRule.h" + + +namespace Isobar { + + using namespace Hurricane; + + extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(PhysicalRule,rule,function) + + +// +=================================================================+ +// | "PyPhysicalRule" Python Module Code Part | +// +=================================================================+ + +#if defined(__PYTHON_MODULE__) + + + DirectDestroyAttribute(PyPhysicalRule_destroy, PyPhysicalRule) + + DirectGetLongAttribute(PyPhysicalRule_getValue, getValue, PyPhysicalRule, PhysicalRule) + + + PyMethodDef PyPhysicalRule_Methods[] = + { { "getValue" , (PyCFunction)PyPhysicalRule_getValue, METH_NOARGS + , "Returns the value (DbU::Unit)." } + , { "destroy" , (PyCFunction)PyPhysicalRule_destroy , METH_NOARGS + , "Destroy associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyPhysicalRule" Object Methods | + // +-------------------------------------------------------------+ + + + DirectDeleteMethod(PyPhysicalRule_DeAlloc,PyPhysicalRule) + PyTypeObjectLinkPyType(PhysicalRule) + + +#else // End of Python Module Code Part. + + +// +=================================================================+ +// | "PyPhysicalRule" Shared Library Code Part | +// +=================================================================+ + + + PyTypeInheritedObjectDefinitions(PhysicalRule,Rule) + LinkCreateMethod(PhysicalRule) + + +# endif // End of Shared Library Code Part. + + } // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/isobar/PyRule.cpp b/hurricane/src/isobar/PyRule.cpp new file mode 100644 index 00000000..1fb0189f --- /dev/null +++ b/hurricane/src/isobar/PyRule.cpp @@ -0,0 +1,100 @@ +// -*- C++ -*- +// +// This file is part of the Chams Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyRule.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyRule.h" +#include "hurricane/isobar/PyUnitRule.h" +#include "hurricane/isobar/PyPhysicalRule.h" +#include "hurricane/isobar/PyTwoLayersPhysicalRule.h" + + +namespace Isobar { + + using namespace Hurricane; + + extern "C" { + + +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Rule,rule,function) + + +// +=================================================================+ +// | "PyRule" Python Module Code Part | +// +=================================================================+ + +#if defined(__PYTHON_MODULE__) + + + DirectDestroyAttribute(PyRule_destroy, PyRule) + + GetNameMethod(Rule,rule) + + DirectGetStringAttribute(PyRule_getReference, getReference, PyRule, Rule) + + + PyMethodDef PyRule_Methods[] = + { { "getName" , (PyCFunction)PyRule_getName , METH_NOARGS + , "Returns the name of the rule." } + , { "getReference" , (PyCFunction)PyRule_getReference, METH_NOARGS + , "Returns the reference (founder documentation) of the rule." } + , { "destroy" , (PyCFunction)PyRule_destroy , METH_NOARGS + , "Destroy associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyRule" Object Methods | + // +-------------------------------------------------------------+ + + + DirectDeleteMethod(PyRule_DeAlloc,PyRule) + PyTypeObjectLinkPyType(Rule) + + +#else // End of Python Module Code Part. + + +// +=================================================================+ +// | "PyRule" Shared Library Code Part | +// +=================================================================+ + + +PyTypeRootObjectDefinitions(Rule) +LinkCreateMethod(Rule) + + + extern PyObject* PyRule_LinkDerived ( Rule* object ) + { + if (object == NULL) Py_RETURN_NONE; + + UnitRule* unitRule = dynamic_cast(object); + if (unitRule) return PyUnitRule_Link(unitRule); + + TwoLayersPhysicalRule* twoLayersPhysicalRule = dynamic_cast(object); + if (twoLayersPhysicalRule) return PyTwoLayersPhysicalRule_Link(twoLayersPhysicalRule); + + PhysicalRule* physicalRule = dynamic_cast(object); + if (physicalRule) return PyPhysicalRule_Link(physicalRule); + + Py_RETURN_NONE; + } + + +#endif // Shared Library Code Part. + + } // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/isobar/PyTechnology.cpp b/hurricane/src/isobar/PyTechnology.cpp index 9d39303c..2412adbf 100644 --- a/hurricane/src/isobar/PyTechnology.cpp +++ b/hurricane/src/isobar/PyTechnology.cpp @@ -54,6 +54,10 @@ #include "hurricane/isobar/PyBasicLayerCollection.h" #include "hurricane/isobar/PyRegularLayerCollection.h" #include "hurricane/isobar/PyViaLayerCollection.h" +#include "hurricane/isobar/PyUnitRule.h" +#include "hurricane/isobar/PyPhysicalRule.h" +#include "hurricane/isobar/PyTwoLayersPhysicalRule.h" +#include "hurricane/isobar/PyDeviceDescriptor.h" namespace Isobar { @@ -217,6 +221,190 @@ extern "C" { } + static PyObject* PyTechnology_getUnitRule ( PyTechnology *self, PyObject* args ) + { + cdebug.log(49) << "PyTechnology_getUnitRule()" << endl; + METHOD_HEAD("Technology.getUnitRule()") + + UnitRule* rule = NULL; + + HTRY + char *arg0 = NULL; + if (not PyArg_ParseTuple(args,"s:Technology.getUnitRule", &arg0)) { + PyErr_SetString( ProxyError + , "invalid number of parameters for getUnitRule on Technology." ); + return NULL; + } + if (arg0) { + rule = new UnitRule( techno->getUnitRule(arg0) ); + } else { + PyErr_SetString( ProxyError, "invalid number of parameters for getUnitRule on Technology." ); + return NULL; + } + HCATCH + + return PyRule_LinkDerived(rule); + } + + + static PyObject* PyTechnology_getPhysicalRule ( PyTechnology *self, PyObject* args ) + { + cdebug.log(49) << "PyTechnology_getPhysicalRule()" << endl; + METHOD_HEAD("Technology.getPhysicalRule()") + + PhysicalRule* rule = NULL; + + HTRY + char *arg0=NULL, *arg1=NULL, *arg2=NULL; + if (not PyArg_ParseTuple(args,"s|ss:Technology.getPhysicalRule", &arg0, &arg1, &arg2)) { + PyErr_SetString( ProxyError + , "invalid number of parameters for getPhysicalRule on Technology." ); + return NULL; + } + if (arg2) { + rule = new PhysicalRule( techno->getPhysicalRule(arg0,arg1,arg2) ); + } else if (arg1) { + rule = new PhysicalRule( techno->getPhysicalRule(arg0,arg1) ); + } else if (arg0) { + rule = new PhysicalRule( techno->getPhysicalRule(arg0) ); + } else { + PyErr_SetString( ProxyError, "invalid number of parameters for getPhysicalRule on Technology." ); + return NULL; + } + HCATCH + + return PyRule_LinkDerived(rule); + } + + + static PyObject* PyTechnology_addUnitRule ( PyTechnology* self, PyObject *args ) + { + cdebug.log(49) << "PyTechnology_addUnitRule()" << endl; + METHOD_HEAD("Technology.addUnitRule()") + + PyObject* arg0 = NULL; + PyObject* arg1 = NULL; + PyObject* arg2 = NULL; + + HTRY + __cs.init ("Technology.addUnitRule"); + if (not PyArg_ParseTuple(args,"O&O&O&:Technology.addUnitRule" + ,Converter,&arg0 + ,Converter,&arg1 + ,Converter,&arg2 + )) { + PyErr_SetString( ConstructorError, "Technology.addUnitRule(): invalid number of parameters." ); + return NULL; + } + if (__cs.getObjectIds() == ":string:float:string") + techno->addUnitRule( PyString_AsString(arg0) + , PyFloat_AsDouble(arg1) + , PyString_AsString(arg2) ); + else { + PyErr_SetString( ConstructorError, "Technology.addUnitRule(): Invalid number or bad type of parameters." ); + return NULL; + } + HCATCH + + Py_RETURN_NONE; + } + + + static PyObject* PyTechnology_addPhysicalRule ( PyTechnology* self, PyObject *args ) + { + cdebug.log(49) << "PyTechnology_addPhysicalRule()" << endl; + METHOD_HEAD("Technology.addPhysicalRule()") + + PyObject* arg0 = NULL; + PyObject* arg1 = NULL; + PyObject* arg2 = NULL; + PyObject* arg3 = NULL; + PyObject* arg4 = NULL; + PyObject* arg5 = NULL; + + HTRY + __cs.init ("Technology.addPhysicalRule"); + if (not PyArg_ParseTuple(args,"O&O&O&|O&O&O&:Technology.addPhysicalRule" + ,Converter,&arg0 + ,Converter,&arg1 + ,Converter,&arg2 + ,Converter,&arg3 + ,Converter,&arg4 + ,Converter,&arg5 + )) { + PyErr_SetString( ConstructorError, "Technology.addPhysicalRule(): invalid number of parameters." ); + return NULL; + } + if (__cs.getObjectIds() == ":string:int:string") + techno->addPhysicalRule( PyString_AsString(arg0) + , PyAny_AsLong (arg1) + , PyString_AsString(arg2) ); + else if (__cs.getObjectIds() == ":string:string:int:string") + techno->addPhysicalRule( PyString_AsString(arg0) + , PyString_AsString(arg1) + , PyAny_AsLong (arg2) + , PyString_AsString(arg3) ); + else if (__cs.getObjectIds() == ":string:string:string:bool:int:string") + techno->addPhysicalRule( PyString_AsString(arg0) + , PyString_AsString(arg1) + , PyString_AsString(arg2) + , PyObject_IsTrue (arg3) + , PyAny_AsLong (arg4) + , PyString_AsString(arg5) ); + else { + PyErr_SetString( ConstructorError, "Technology.addPhysicalRule(): Invalid number or bad type of parameters." ); + return NULL; + } + HCATCH + + Py_RETURN_NONE; + } + + + extern PyObject* PyTechnology_addDeviceDescriptor ( PyTechnology* self, PyObject* args ) + { + cdebug.log(49) << "PyTechnology_addDeviceDescriptor ()" << endl; + DeviceDescriptor* devDesc = NULL; + + HTRY + METHOD_HEAD("Technology.addDeviceDescriptor()") + + char* name = NULL; + if (PyArg_ParseTuple(args,"s:Technology.addDeviceDescriptor", &name)) { + devDesc = techno->addDeviceDescriptor( name ); + } else { + PyErr_SetString( ConstructorError + , "Technology::addDeviceDescriptor(): Invalid number of parameters." ); + return NULL; + } + HCATCH + + return PyDeviceDescriptor_Link( devDesc ); + } + + + extern PyObject* PyTechnology_getDeviceDescriptor ( PyTechnology* self, PyObject* args ) + { + cdebug.log(49) << "PyTechnology_getDeviceDescriptor ()" << endl; + DeviceDescriptor* devDesc = NULL; + + HTRY + METHOD_HEAD("Technology.getDeviceDescriptor()") + + char* name = NULL; + if (PyArg_ParseTuple(args,"s:Technology.getDeviceDescriptor", &name)) { + devDesc = techno->getDeviceDescriptor( name ); + } else { + PyErr_SetString( ConstructorError + , "Technology::getDeviceDescriptor(): Invalid number of parameters." ); + return NULL; + } + HCATCH + + return PyDeviceDescriptor_Link( devDesc ); + } + + // Standart Accessors (Attributes). GetNameMethod (Technology,techno) SetNameMethod (Technology,techno) @@ -242,48 +430,62 @@ extern "C" { // PyTechnology Attribute Method table. PyMethodDef PyTechnology_Methods[] = - { { "create" , (PyCFunction)PyTechnology_create , METH_VARARGS|METH_STATIC - , "Create the Technology object." } - , { "isMetal" , (PyCFunction)PyTechnology_isMetal , METH_VARARGS - , "Tells if the given layer is of metal kind (Material)." } - , { "getDataBase" , (PyCFunction)PyTechnology_getDataBase , METH_NOARGS - , "Returns the associated DataBase." } - , { "getName" , (PyCFunction)PyTechnology_getName , METH_NOARGS - , "Returns the name of the technology." } - , { "getLayer" , (PyCFunction)PyTechnology_getLayer , METH_VARARGS - , "Returns the layer named name." } - , { "getBasicLayer" , (PyCFunction)PyTechnology_getBasicLayer , METH_VARARGS - , "Returns the BasicLayer named name." } - , { "getRegularLayer" , (PyCFunction)PyTechnology_getRegularLayer , METH_VARARGS - , "Returns the RegularLayer named name." } - , { "getViaLayer" , (PyCFunction)PyTechnology_getViaLayer , METH_VARARGS - , "Returns the ViaLayer named name." } - , { "getLayers" , (PyCFunction)PyTechnology_getLayers , METH_NOARGS - , "Returns the collection of all Layers." } - , { "getBasicLayers" , (PyCFunction)PyTechnology_getBasicLayers , METH_VARARGS - , "Returns the collection of all BasicLayers." } - , { "getRegularLayers" , (PyCFunction)PyTechnology_getRegularLayers, METH_NOARGS - , "Returns the collection of all RegularLayers." } - , { "getViaLayers" , (PyCFunction)PyTechnology_getViaLayers , METH_NOARGS - , "Returns the collection of all BasicLayers." } - , { "getMetalAbove" , (PyCFunction)PyTechnology_getMetalAbove , METH_VARARGS - , "Returns the metal layer immediatly above this one." } - , { "getMetalBelow" , (PyCFunction)PyTechnology_getMetalBelow , METH_VARARGS - , "Returns the metal layer immediatly below this one." } - , { "getCutAbove" , (PyCFunction)PyTechnology_getCutAbove , METH_VARARGS - , "Returns the cut layer immediatly above this one." } - , { "getCutBelow" , (PyCFunction)PyTechnology_getCutBelow , METH_VARARGS - , "Returns the cut layer immediatly below." } - , { "getViaBetween" , (PyCFunction)PyTechnology_getViaBetween , METH_VARARGS - , "Returns the VIA between those two layers (must be adjacent)." } - , { "getNthMetal" , (PyCFunction)PyTechnology_getNthMetal , METH_VARARGS - , "Returns Nth metal (zero is nearest substrate)." } - , { "setName" , (PyCFunction)PyTechnology_setName , METH_VARARGS - , "Allows to change the technology name." } - , { "setSymbolicLayer" , (PyCFunction)PyTechnology_setSymbolicLayer, METH_VARARGS - , "Mark a Layer as the symbolic one (by name or by Layer)." } - , { "destroy" , (PyCFunction)PyTechnology_destroy , METH_NOARGS - , "Destroy associated hurricane object The python object remains." } + { { "create" , (PyCFunction)PyTechnology_create , METH_VARARGS|METH_STATIC + , "Create the Technology object." } + , { "isMetal" , (PyCFunction)PyTechnology_isMetal , METH_VARARGS + , "Tells if the given layer is of metal kind (Material)." } + , { "getDataBase" , (PyCFunction)PyTechnology_getDataBase , METH_NOARGS + , "Returns the associated DataBase." } + , { "getName" , (PyCFunction)PyTechnology_getName , METH_NOARGS + , "Returns the name of the technology." } + , { "getLayer" , (PyCFunction)PyTechnology_getLayer , METH_VARARGS + , "Returns the layer named name." } + , { "getBasicLayer" , (PyCFunction)PyTechnology_getBasicLayer , METH_VARARGS + , "Returns the BasicLayer named name." } + , { "getRegularLayer" , (PyCFunction)PyTechnology_getRegularLayer , METH_VARARGS + , "Returns the RegularLayer named name." } + , { "getViaLayer" , (PyCFunction)PyTechnology_getViaLayer , METH_VARARGS + , "Returns the ViaLayer named name." } + , { "getLayers" , (PyCFunction)PyTechnology_getLayers , METH_NOARGS + , "Returns the collection of all Layers." } + , { "getBasicLayers" , (PyCFunction)PyTechnology_getBasicLayers , METH_VARARGS + , "Returns the collection of all BasicLayers." } + , { "getRegularLayers" , (PyCFunction)PyTechnology_getRegularLayers , METH_NOARGS + , "Returns the collection of all RegularLayers." } + , { "getViaLayers" , (PyCFunction)PyTechnology_getViaLayers , METH_NOARGS + , "Returns the collection of all BasicLayers." } + , { "getMetalAbove" , (PyCFunction)PyTechnology_getMetalAbove , METH_VARARGS + , "Returns the metal layer immediatly above this one." } + , { "getMetalBelow" , (PyCFunction)PyTechnology_getMetalBelow , METH_VARARGS + , "Returns the metal layer immediatly below this one." } + , { "getCutAbove" , (PyCFunction)PyTechnology_getCutAbove , METH_VARARGS + , "Returns the cut layer immediatly above this one." } + , { "getCutBelow" , (PyCFunction)PyTechnology_getCutBelow , METH_VARARGS + , "Returns the cut layer immediatly below." } + , { "getViaBetween" , (PyCFunction)PyTechnology_getViaBetween , METH_VARARGS + , "Returns the VIA between those two layers (must be adjacent)." } + , { "getNthMetal" , (PyCFunction)PyTechnology_getNthMetal , METH_VARARGS + , "Returns Nth metal (zero is nearest substrate)." } + , { "setName" , (PyCFunction)PyTechnology_setName , METH_VARARGS + , "Allows to change the technology name." } + , { "setSymbolicLayer" , (PyCFunction)PyTechnology_setSymbolicLayer , METH_VARARGS + , "Mark a Layer as the symbolic one (by name or by Layer)." } + , { "getUnitRule" , (PyCFunction)PyTechnology_getUnitRule , METH_VARARGS + , "Returns the Unit Rule named name." } + , { "getPhysicalRule" , (PyCFunction)PyTechnology_getPhysicalRule , METH_VARARGS + , "Returns the Physical Rule named name." } + , { "getLayer" , (PyCFunction)PyTechnology_getLayer , METH_VARARGS + , "Returns the Layer named name." } + , { "addPhysicalRule" , (PyCFunction)PyTechnology_addPhysicalRule , METH_VARARGS + , "Adds a new physical rule." } + , { "addUnitRule" , (PyCFunction)PyTechnology_addUnitRule , METH_VARARGS + , "Adds a new Unit rule." } + , { "getDeviceDescriptor", (PyCFunction)PyTechnology_getDeviceDescriptor , METH_VARARGS + , "Get the DeviceDescriptor ." } + , { "addDeviceDescriptor", (PyCFunction)PyTechnology_addDeviceDescriptor , METH_VARARGS + , "Add (create) the DeviceDescriptor ." } + , { "destroy" , (PyCFunction)PyTechnology_destroy , METH_NOARGS + , "Destroy associated hurricane object The python object remains." } , {NULL, NULL, 0, NULL} /* sentinel */ }; diff --git a/hurricane/src/isobar/PyTwoLayersPhysicalRule.cpp b/hurricane/src/isobar/PyTwoLayersPhysicalRule.cpp new file mode 100644 index 00000000..32f9e256 --- /dev/null +++ b/hurricane/src/isobar/PyTwoLayersPhysicalRule.cpp @@ -0,0 +1,80 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyTwoLayersPhysicalRule.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyTwoLayersPhysicalRule.h" + + +namespace Isobar { + + using namespace Hurricane; + + extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject._baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(TwoLayersPhysicalRule,rule,function) + + +// +=================================================================+ +// | "TwoLayersPyPhysicalRule" Python Module Code Part | +// +=================================================================+ + +#if defined(__PYTHON_MODULE__) + + + DirectDestroyAttribute(PyTwoLayersPhysicalRule_destroy, PyTwoLayersPhysicalRule) + + DirectGetBoolAttribute(PyTwoLayersPhysicalRule_isSymetric, isSymetric, PyTwoLayersPhysicalRule, TwoLayersPhysicalRule) + + + PyMethodDef PyTwoLayersPhysicalRule_Methods[] = + { { "isSymetric" , (PyCFunction)PyTwoLayersPhysicalRule_isSymetric, METH_NOARGS + , "Is the rule symetric regarding the two involved layers." } + , { "destroy" , (PyCFunction)PyTwoLayersPhysicalRule_destroy , METH_NOARGS + , "Destroy associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyPhysicalRule" Object Methods | + // +-------------------------------------------------------------+ + + + DirectDeleteMethod(PyTwoLayersPhysicalRule_DeAlloc,PyTwoLayersPhysicalRule) + PyTypeObjectLinkPyType(TwoLayersPhysicalRule) + + +#else // End of Python Module Code Part. + + +// +=================================================================+ +// | "PyPhysicalRule" Shared Library Code Part | +// +=================================================================+ + + + PyTypeInheritedObjectDefinitions(TwoLayersPhysicalRule,PhysicalRule) + LinkCreateMethod(TwoLayersPhysicalRule) + + +# endif // End of Shared Library Code Part. + + } // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/isobar/PyUnitRule.cpp b/hurricane/src/isobar/PyUnitRule.cpp new file mode 100644 index 00000000..c55c1cd6 --- /dev/null +++ b/hurricane/src/isobar/PyUnitRule.cpp @@ -0,0 +1,80 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyUnitRule.cpp" | +// +-----------------------------------------------------------------+ + + +#include "hurricane/isobar/PyUnitRule.h" + + +namespace Isobar { + + using namespace Hurricane; + + extern "C" { + + +#undef ACCESS_OBJECT +#undef ACCESS_CLASS +#define ACCESS_OBJECT _baseObject._object +#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(UnitRule,rule,function) + + +// +=================================================================+ +// | "PyUnitRule" Python Module Code Part | +// +=================================================================+ + +#if defined(__PYTHON_MODULE__) + + + DirectDestroyAttribute(PyUnitRule_destroy, PyUnitRule) + + DirectGetDoubleAttribute(PyUnitRule_getValue, getValue, PyUnitRule, UnitRule) + + + PyMethodDef PyUnitRule_Methods[] = + { { "getValue" , (PyCFunction)PyUnitRule_getValue, METH_NOARGS + , "Returns the value (double)." } + , { "destroy" , (PyCFunction)PyUnitRule_destroy , METH_NOARGS + , "Destroy associated hurricane object, the python object remains." } + , { NULL, NULL, 0, NULL } /* sentinel */ + }; + + + // +-------------------------------------------------------------+ + // | "PyUnitRule" Object Methods | + // +-------------------------------------------------------------+ + + + DirectDeleteMethod(PyUnitRule_DeAlloc,PyUnitRule) + PyTypeObjectLinkPyType(UnitRule) + + +#else // End of Python Module Code Part. + + +// +=================================================================+ +// | "PyUnitRule" Shared Library Code Part | +// +=================================================================+ + + + PyTypeInheritedObjectDefinitions(UnitRule,Rule) + LinkCreateMethod(UnitRule) + + +#endif // End of Shared Library Code Part. + + } // extern "C". + +} // Isobar namespace. diff --git a/hurricane/src/isobar/hurricane/isobar/PyDeviceDescriptor.h b/hurricane/src/isobar/hurricane/isobar/PyDeviceDescriptor.h new file mode 100644 index 00000000..4af3a411 --- /dev/null +++ b/hurricane/src/isobar/hurricane/isobar/PyDeviceDescriptor.h @@ -0,0 +1,56 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2015-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Damien Dupuis | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/isobar/PyDeviceDescriptor.h" | +// +-----------------------------------------------------------------+ + + +#ifndef HURRICANE_PY_DEVICE_DESCRIPTOR_H +#define HURRICANE_PY_DEVICE_DESCRIPTOR_H + +#include "hurricane/isobar/PyHurricane.h" +#include "hurricane/DeviceDescriptor.h" + + +namespace Isobar { + + extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyDeviceDescriptor". + + typedef struct { + PyObject_HEAD + DeviceDescriptor* _object; + } PyDeviceDescriptor; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyAnalog.ccp". + + extern PyTypeObject PyTypeDeviceDescriptor; + extern PyMethodDef PyDeviceDescriptor_Methods[]; + + extern PyObject* PyDeviceDescriptor_Link ( DeviceDescriptor* ); + extern void PyDeviceDescriptor_LinkPyType (); + + +#define IsPyDeviceDescriptor(v) ( (v)->ob_type == &PyTypeDeviceDescriptor ) +#define PYDEVICEDESCRIPTOR(v) ( (PyDeviceDescriptor*)(v) ) +#define PYDEVICEDESCRIPTOR_O(v) ( PYDEVICEDESCRIPTOR(v)->_object ) + + + } // extern "C". + +} // Isobar namespace. + +#endif // HURRICANE_PY_DEVICE_DESCRIPTOR_H diff --git a/hurricane/src/isobar/hurricane/isobar/PyPhysicalRule.h b/hurricane/src/isobar/hurricane/isobar/PyPhysicalRule.h new file mode 100644 index 00000000..4d4a148e --- /dev/null +++ b/hurricane/src/isobar/hurricane/isobar/PyPhysicalRule.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/isobar/PyPhysicalRule.h" | +// +-----------------------------------------------------------------+ + + +#ifndef HURRICANE_PY_PHYSICAL_RULE_H +#define HURRICANE_PY_PHYSICAL_RULE_H + +#include "hurricane/isobar/PyRule.h" +#include "hurricane/PhysicalRule.h" + + +namespace Isobar { + + extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyPhysicalRule". + + typedef struct { + PyRule _baseObject; + } PyPhysicalRule; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypePhysicalRule; + extern PyMethodDef PyPhysicalRule_Methods[]; + extern PyObject* PyPhysicalRule_Link ( PhysicalRule* ); + extern void PyPhysicalRule_LinkPyType (); + extern void PyPhysicalRule_Constructor(); + + +#define IsPyPhysicalRule(v) ( (v)->ob_type == &PyTypePhysicalRule ) +#define PYPHYSICALRULE(v) ( (PyPhysicalRule*)(v) ) +#define PYPHYSICALRULE_O(v) ( dynamic_cast(PYPHYSICALRULE(v)->_baseObject._object) ) + + + } // extern "C". + +} // Isobar namespace. + +#endif // HURRICANE_PY_PHYSICAL_RULE_H diff --git a/hurricane/src/isobar/hurricane/isobar/PyRule.h b/hurricane/src/isobar/hurricane/isobar/PyRule.h new file mode 100644 index 00000000..17f78ad8 --- /dev/null +++ b/hurricane/src/isobar/hurricane/isobar/PyRule.h @@ -0,0 +1,56 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2016-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/isobar/PyRule.h" | +// +-----------------------------------------------------------------+ + + +#ifndef HURRICANE_PY_RULE_H +#define HURRICANE_PY_RULE_H + +#include "hurricane/isobar/PyHurricane.h" +#include "hurricane/Rule.h" + +namespace Isobar { + + extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyRule". + + typedef struct { + PyObject_HEAD + Rule* _object; + } PyRule; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeRule; + extern PyMethodDef PyRule_Methods[]; + extern PyObject* PyRule_Link ( Rule* ); + extern void PyRule_LinkPyType (); + extern void PyRule_Constructor (); + extern PyObject* PyRule_LinkDerived ( Rule* object ); + + +#define IsPyRule(v) ( (v)->ob_type == &PyTypeRule ) +#define PYRULE(v) ( (PyRule*)(v) ) +#define PYRULE_O(v) ( PYRULE(v)->_object ) + + + } // extern "C". + +} // Isobar namespace. + +#endif // HURRICANE_PY_RULE_H diff --git a/hurricane/src/isobar/hurricane/isobar/PyTwoLayersPhysicalRule.h b/hurricane/src/isobar/hurricane/isobar/PyTwoLayersPhysicalRule.h new file mode 100644 index 00000000..71a1147b --- /dev/null +++ b/hurricane/src/isobar/hurricane/isobar/PyTwoLayersPhysicalRule.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : hurricane/isobar/PyTwoLayersPhysicalRule.h | +// +-----------------------------------------------------------------+ + + +#ifndef HURRICANE_PY_TWO_LAYERS_PHYSICAL_RULE_H +#define HURRICANE_PY_TWO_LAYERS_PHYSICAL_RULE_H + +#include "hurricane/isobar/PyPhysicalRule.h" +#include "hurricane/TwoLayersPhysicalRule.h" + + +namespace Isobar { + + extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyTwoLayersPhysicalRule". + + typedef struct { + PyPhysicalRule _baseObject; + } PyTwoLayersPhysicalRule; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeTwoLayersPhysicalRule; + extern PyMethodDef PyTwoLayersPhysicalRule_Methods[]; + extern PyObject* PyTwoLayersPhysicalRule_Link ( TwoLayersPhysicalRule* ); + extern void PyTwoLayersPhysicalRule_LinkPyType (); + extern void PyTwoLayersPhysicalRule_Constructor(); + + +#define IsPyTwoLayersPhysicalRule(v) ( (v)->ob_type == &PyTypeTwoLayersPhysicalRule ) +#define PYTWOLAYERSPHYSICALRULE(v) ( (PyTwoLayersPhysicalRule*)(v) ) +#define PYTWOLAYERSPHYSICALRULE_O(v) ( dynamic_cast(PYTWOLAYERSPHYSICALRULE(v)->_baseObject._baseObject._object) ) + + + } // extern "C". + +} // Isobar namespace. + +#endif // HURRICANE_PY_TWO_LAYERS_PHYSICAL_RULE_H diff --git a/hurricane/src/isobar/hurricane/isobar/PyUnitRule.h b/hurricane/src/isobar/hurricane/isobar/PyUnitRule.h new file mode 100644 index 00000000..5f8bb1b1 --- /dev/null +++ b/hurricane/src/isobar/hurricane/isobar/PyUnitRule.h @@ -0,0 +1,55 @@ +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2018, All Rights Reserved +// +// +-----------------------------------------------------------------+ +// | C O R I O L I S | +// | H u r r i c a n e A n a l o g | +// | | +// | Author : Jean-Paul Chaput | +// | E-mail : Jean-Paul.Chaput@lip6.fr | +// | =============================================================== | +// | C++ Header : "./hurricane/isobar/PyUnitRule.h" | +// +-----------------------------------------------------------------+ + + +#ifndef HURRICANE_PY_UNIT_RULE_H +#define HURRICANE_PY_UNIT_RULE_H + +#include "hurricane/isobar/PyRule.h" +#include "hurricane/UnitRule.h" + + +namespace Isobar { + + extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyUnitRule". + + typedef struct { + PyRule _baseObject; + } PyUnitRule; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeUnitRule; + extern PyMethodDef PyUnitRule_Methods[]; + extern PyObject* PyUnitRule_Link ( UnitRule* ); + extern void PyUnitRule_LinkPyType (); + extern void PyUnitRule_Constructor(); + + +#define IsPyUnitRule(v) ( (v)->ob_type == &PyTypeUnitRule ) +#define PYUNITRULE(v) ( (PyUnitRule*)(v) ) +#define PYUNITRULE_O(v) ( dynamic_cast(PYUNITRULE(v)->_baseObject._object) ) + + + } // extern "C". + +} // Isobar namespace. + +#endif // HURRICANE_PY_UNIT_RULE_H diff --git a/katabatic/doc/html/AutoContactHTee_8h_source.html b/katabatic/doc/html/AutoContactHTee_8h_source.html index 02349e93..5fdfa22c 100644 --- a/katabatic/doc/html/AutoContactHTee_8h_source.html +++ b/katabatic/doc/html/AutoContactHTee_8h_source.html @@ -146,7 +146,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/AutoContactTerminal_8h_source.html b/katabatic/doc/html/AutoContactTerminal_8h_source.html index 0966d0b7..50f2a3cd 100644 --- a/katabatic/doc/html/AutoContactTerminal_8h_source.html +++ b/katabatic/doc/html/AutoContactTerminal_8h_source.html @@ -153,7 +153,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/AutoContactTurn_8h_source.html b/katabatic/doc/html/AutoContactTurn_8h_source.html index 14d8fb0f..49197ae6 100644 --- a/katabatic/doc/html/AutoContactTurn_8h_source.html +++ b/katabatic/doc/html/AutoContactTurn_8h_source.html @@ -145,7 +145,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/AutoContactVTee_8h_source.html b/katabatic/doc/html/AutoContactVTee_8h_source.html index f4a6b6dd..0a56a389 100644 --- a/katabatic/doc/html/AutoContactVTee_8h_source.html +++ b/katabatic/doc/html/AutoContactVTee_8h_source.html @@ -143,7 +143,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/AutoContact_8h_source.html b/katabatic/doc/html/AutoContact_8h_source.html index 3e546c98..92a013ce 100644 --- a/katabatic/doc/html/AutoContact_8h_source.html +++ b/katabatic/doc/html/AutoContact_8h_source.html @@ -546,7 +546,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/AutoHorizontal_8h_source.html b/katabatic/doc/html/AutoHorizontal_8h_source.html index bf821d66..bcbc9c8d 100644 --- a/katabatic/doc/html/AutoHorizontal_8h_source.html +++ b/katabatic/doc/html/AutoHorizontal_8h_source.html @@ -184,7 +184,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/AutoSegment_8h_source.html b/katabatic/doc/html/AutoSegment_8h_source.html index ffcf14b9..9a169318 100644 --- a/katabatic/doc/html/AutoSegment_8h_source.html +++ b/katabatic/doc/html/AutoSegment_8h_source.html @@ -814,7 +814,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/AutoSegments_8h_source.html b/katabatic/doc/html/AutoSegments_8h_source.html index c4aa454b..119ce890 100644 --- a/katabatic/doc/html/AutoSegments_8h_source.html +++ b/katabatic/doc/html/AutoSegments_8h_source.html @@ -551,7 +551,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/AutoVertical_8h_source.html b/katabatic/doc/html/AutoVertical_8h_source.html index da9be872..3000a6cd 100644 --- a/katabatic/doc/html/AutoVertical_8h_source.html +++ b/katabatic/doc/html/AutoVertical_8h_source.html @@ -185,7 +185,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/ChipTools_8h_source.html b/katabatic/doc/html/ChipTools_8h_source.html index c1f760a2..adf79b9f 100644 --- a/katabatic/doc/html/ChipTools_8h_source.html +++ b/katabatic/doc/html/ChipTools_8h_source.html @@ -193,7 +193,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/Constants_8h_source.html b/katabatic/doc/html/Constants_8h_source.html index af389393..d6eeaa48 100644 --- a/katabatic/doc/html/Constants_8h_source.html +++ b/katabatic/doc/html/Constants_8h_source.html @@ -241,7 +241,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/GCellGrid_8h_source.html b/katabatic/doc/html/GCellGrid_8h_source.html index 72df0547..f40c9875 100644 --- a/katabatic/doc/html/GCellGrid_8h_source.html +++ b/katabatic/doc/html/GCellGrid_8h_source.html @@ -189,7 +189,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/GCell_8h_source.html b/katabatic/doc/html/GCell_8h_source.html index 5901bf44..4b36806c 100644 --- a/katabatic/doc/html/GCell_8h_source.html +++ b/katabatic/doc/html/GCell_8h_source.html @@ -507,7 +507,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/GCells_8h_source.html b/katabatic/doc/html/GCells_8h_source.html index 303ba9f4..96ef5874 100644 --- a/katabatic/doc/html/GCells_8h_source.html +++ b/katabatic/doc/html/GCells_8h_source.html @@ -114,7 +114,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/Grid_8h_source.html b/katabatic/doc/html/Grid_8h_source.html index 9e81e51f..0e9ad819 100644 --- a/katabatic/doc/html/Grid_8h_source.html +++ b/katabatic/doc/html/Grid_8h_source.html @@ -432,7 +432,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/KatabaticEngine_8h_source.html b/katabatic/doc/html/KatabaticEngine_8h_source.html index ad0b012f..0f8f24eb 100644 --- a/katabatic/doc/html/KatabaticEngine_8h_source.html +++ b/katabatic/doc/html/KatabaticEngine_8h_source.html @@ -381,7 +381,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/Observer_8h_source.html b/katabatic/doc/html/Observer_8h_source.html index 230f85c7..293f7bfb 100644 --- a/katabatic/doc/html/Observer_8h_source.html +++ b/katabatic/doc/html/Observer_8h_source.html @@ -186,7 +186,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/Session_8h_source.html b/katabatic/doc/html/Session_8h_source.html index 88065f76..b9d7134a 100644 --- a/katabatic/doc/html/Session_8h_source.html +++ b/katabatic/doc/html/Session_8h_source.html @@ -338,7 +338,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/annotated.html b/katabatic/doc/html/annotated.html index 83712949..b587bbb8 100644 --- a/katabatic/doc/html/annotated.html +++ b/katabatic/doc/html/annotated.html @@ -96,7 +96,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContact-members.html b/katabatic/doc/html/classKatabatic_1_1AutoContact-members.html index 8a2473a3..2ed616cf 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContact-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContact-members.html @@ -135,7 +135,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContact.html b/katabatic/doc/html/classKatabatic_1_1AutoContact.html index d29c0bf1..4cbbdd18 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContact.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContact.html @@ -2294,7 +2294,7 @@ Notes - Differences from Katabatic 2
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactHTee-members.html b/katabatic/doc/html/classKatabatic_1_1AutoContactHTee-members.html index c1467bad..bbff5566 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactHTee-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactHTee-members.html @@ -136,7 +136,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.html b/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.html index 7437da7d..cb8fa672 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.html @@ -452,7 +452,7 @@ Update H-Tee Topology
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal-members.html b/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal-members.html index 075046e1..c0b82dd2 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal-members.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.html b/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.html index cf6880a7..1760c337 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.html @@ -588,7 +588,7 @@ Update Terminal Topology
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactTurn-members.html b/katabatic/doc/html/classKatabatic_1_1AutoContactTurn-members.html index 7f098222..5ef80251 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactTurn-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactTurn-members.html @@ -136,7 +136,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.html b/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.html index 04d52eff..84b43780 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.html @@ -454,7 +454,7 @@ Update Turn Topology
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactVTee-members.html b/katabatic/doc/html/classKatabatic_1_1AutoContactVTee-members.html index d0fb1a1d..ad9b6e46 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactVTee-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactVTee-members.html @@ -136,7 +136,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.html b/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.html index ae1c2a8b..0a76d92e 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.html @@ -443,7 +443,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoHorizontal-members.html b/katabatic/doc/html/classKatabatic_1_1AutoHorizontal-members.html index 7ed71092..e9f5d7fe 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoHorizontal-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoHorizontal-members.html @@ -191,7 +191,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.html b/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.html index ace88fc7..6c658e13 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.html @@ -1190,7 +1190,7 @@ moveULeft() for an Horizontal
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegment-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegment-members.html index e6f2ca66..9586c5f6 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegment-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegment-members.html @@ -191,7 +191,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegment.html b/katabatic/doc/html/classKatabatic_1_1AutoSegment.html index e18b191b..8e5603a8 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegment.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegment.html @@ -4130,7 +4130,7 @@ Reduce Example
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds-members.html index 831389ac..c8028222 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds-members.html @@ -65,7 +65,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.html index 3cd32450..cd808085 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.html @@ -205,7 +205,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell-members.html index cd07f26f..366253cb 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell-members.html @@ -65,7 +65,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.html index da5f8eae..8e3344f2 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.html @@ -210,7 +210,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection-members.html index 4fd16076..3b2e63b5 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection-members.html @@ -65,7 +65,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.html index 8f1a6918..08a32379 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.html @@ -166,7 +166,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable-members.html index 824d1234..a85f973d 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable-members.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.html index efd6f220..17b715c3 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.html @@ -138,7 +138,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact-members.html index 531c5b9c..8e01e08b 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact-members.html @@ -65,7 +65,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.html index 170f326f..c21644b7 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.html @@ -215,7 +215,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars-members.html index 56e8f2a6..31b13867 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars-members.html @@ -65,7 +65,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.html index abeef855..bac478c5 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.html @@ -195,7 +195,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoVertical-members.html b/katabatic/doc/html/classKatabatic_1_1AutoVertical-members.html index 9e0b9e40..3413a579 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoVertical-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoVertical-members.html @@ -191,7 +191,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1AutoVertical.html b/katabatic/doc/html/classKatabatic_1_1AutoVertical.html index 15dbec37..d7c4aa74 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoVertical.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoVertical.html @@ -1190,7 +1190,7 @@ moveULeft() for an Horizontal
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1BaseGrid-members.html b/katabatic/doc/html/classKatabatic_1_1BaseGrid-members.html index c1c62b36..3143181d 100644 --- a/katabatic/doc/html/classKatabatic_1_1BaseGrid-members.html +++ b/katabatic/doc/html/classKatabatic_1_1BaseGrid-members.html @@ -72,7 +72,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1BaseGrid.html b/katabatic/doc/html/classKatabatic_1_1BaseGrid.html index c1c648a1..a55eaeb7 100644 --- a/katabatic/doc/html/classKatabatic_1_1BaseGrid.html +++ b/katabatic/doc/html/classKatabatic_1_1BaseGrid.html @@ -424,7 +424,7 @@ Protected Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis-members.html b/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis-members.html index adabf4c7..e7abe152 100644 --- a/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis-members.html +++ b/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis-members.html @@ -66,7 +66,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.html b/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.html index e6bcb1c0..70f804cc 100644 --- a/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.html +++ b/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.html @@ -211,7 +211,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1BaseObserver-members.html b/katabatic/doc/html/classKatabatic_1_1BaseObserver-members.html index 9e15acc6..9d695d9f 100644 --- a/katabatic/doc/html/classKatabatic_1_1BaseObserver-members.html +++ b/katabatic/doc/html/classKatabatic_1_1BaseObserver-members.html @@ -62,7 +62,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1BaseObserver.html b/katabatic/doc/html/classKatabatic_1_1BaseObserver.html index 4953fa25..9a04de78 100644 --- a/katabatic/doc/html/classKatabatic_1_1BaseObserver.html +++ b/katabatic/doc/html/classKatabatic_1_1BaseObserver.html @@ -113,7 +113,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1ChipTools-members.html b/katabatic/doc/html/classKatabatic_1_1ChipTools-members.html index 25ea73e7..ea229fbb 100644 --- a/katabatic/doc/html/classKatabatic_1_1ChipTools-members.html +++ b/katabatic/doc/html/classKatabatic_1_1ChipTools-members.html @@ -73,7 +73,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1ChipTools.html b/katabatic/doc/html/classKatabatic_1_1ChipTools.html index 30968e39..ccd55e5e 100644 --- a/katabatic/doc/html/classKatabatic_1_1ChipTools.html +++ b/katabatic/doc/html/classKatabatic_1_1ChipTools.html @@ -397,7 +397,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1GCell-members.html b/katabatic/doc/html/classKatabatic_1_1GCell-members.html index b7c16b89..95936838 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell-members.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell-members.html @@ -122,7 +122,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1GCell.html b/katabatic/doc/html/classKatabatic_1_1GCell.html index 65d69ce1..a12fd53b 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell.html @@ -1809,7 +1809,7 @@ GCell Implantation
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1GCellDensitySet-members.html b/katabatic/doc/html/classKatabatic_1_1GCellDensitySet-members.html index 744e464a..58acda51 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCellDensitySet-members.html +++ b/katabatic/doc/html/classKatabatic_1_1GCellDensitySet-members.html @@ -71,7 +71,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.html b/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.html index 9dc7300e..095808e4 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.html +++ b/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.html @@ -350,7 +350,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1GCellGrid-members.html b/katabatic/doc/html/classKatabatic_1_1GCellGrid-members.html index 6ed4f997..764d1bb7 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCellGrid-members.html +++ b/katabatic/doc/html/classKatabatic_1_1GCellGrid-members.html @@ -104,7 +104,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1GCellGrid.html b/katabatic/doc/html/classKatabatic_1_1GCellGrid.html index d1a01c3a..8b47f58e 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCellGrid.html +++ b/katabatic/doc/html/classKatabatic_1_1GCellGrid.html @@ -515,7 +515,7 @@ Static Protected Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity-members.html b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity-members.html index b03a83df..80c0c81d 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity-members.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity-members.html @@ -62,7 +62,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.html b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.html index e149a4f6..a0d9c104 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.html @@ -98,7 +98,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex-members.html b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex-members.html index c35ed290..1cfa6887 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex-members.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex-members.html @@ -61,7 +61,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex.html b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex.html index 0baf03a8..cfb962ea 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex.html @@ -71,7 +71,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key-members.html b/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key-members.html index e2bc5bb7..bb0f7477 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key-members.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key-members.html @@ -65,7 +65,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.html b/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.html index 3f22e667..76d98ac4 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.html @@ -202,7 +202,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1Grid-members.html b/katabatic/doc/html/classKatabatic_1_1Grid-members.html index f913e324..3d5cb5d2 100644 --- a/katabatic/doc/html/classKatabatic_1_1Grid-members.html +++ b/katabatic/doc/html/classKatabatic_1_1Grid-members.html @@ -83,7 +83,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1Grid.html b/katabatic/doc/html/classKatabatic_1_1Grid.html index fb0ec70b..76fbf5c2 100644 --- a/katabatic/doc/html/classKatabatic_1_1Grid.html +++ b/katabatic/doc/html/classKatabatic_1_1Grid.html @@ -467,7 +467,7 @@ class Katabatic::Grid< GCellT >
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1KatabaticEngine-members.html b/katabatic/doc/html/classKatabatic_1_1KatabaticEngine-members.html index 5d9bbd20..4fd23c48 100644 --- a/katabatic/doc/html/classKatabatic_1_1KatabaticEngine-members.html +++ b/katabatic/doc/html/classKatabatic_1_1KatabaticEngine-members.html @@ -118,7 +118,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.html b/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.html index 92c4d946..c6f021d1 100644 --- a/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.html +++ b/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.html @@ -1343,7 +1343,7 @@ KatabaticEngine Implementation Details
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1LocatorHelper-members.html b/katabatic/doc/html/classKatabatic_1_1LocatorHelper-members.html index 69e356ce..567e1005 100644 --- a/katabatic/doc/html/classKatabatic_1_1LocatorHelper-members.html +++ b/katabatic/doc/html/classKatabatic_1_1LocatorHelper-members.html @@ -65,7 +65,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1LocatorHelper.html b/katabatic/doc/html/classKatabatic_1_1LocatorHelper.html index 0d18f65d..2e1c5653 100644 --- a/katabatic/doc/html/classKatabatic_1_1LocatorHelper.html +++ b/katabatic/doc/html/classKatabatic_1_1LocatorHelper.html @@ -219,7 +219,7 @@ Implementation Details
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1Observable-members.html b/katabatic/doc/html/classKatabatic_1_1Observable-members.html index bd185ec8..24f08e85 100644 --- a/katabatic/doc/html/classKatabatic_1_1Observable-members.html +++ b/katabatic/doc/html/classKatabatic_1_1Observable-members.html @@ -66,7 +66,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1Observable.html b/katabatic/doc/html/classKatabatic_1_1Observable.html index 59b497fd..b4cfd5cc 100644 --- a/katabatic/doc/html/classKatabatic_1_1Observable.html +++ b/katabatic/doc/html/classKatabatic_1_1Observable.html @@ -218,7 +218,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1Observer-members.html b/katabatic/doc/html/classKatabatic_1_1Observer-members.html index ea4549b3..38a589b9 100644 --- a/katabatic/doc/html/classKatabatic_1_1Observer-members.html +++ b/katabatic/doc/html/classKatabatic_1_1Observer-members.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1Observer.html b/katabatic/doc/html/classKatabatic_1_1Observer.html index 7a02d276..f62933fb 100644 --- a/katabatic/doc/html/classKatabatic_1_1Observer.html +++ b/katabatic/doc/html/classKatabatic_1_1Observer.html @@ -146,7 +146,7 @@ Observer Implementation Notes
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1Session-members.html b/katabatic/doc/html/classKatabatic_1_1Session-members.html index 11882179..b51f865e 100644 --- a/katabatic/doc/html/classKatabatic_1_1Session-members.html +++ b/katabatic/doc/html/classKatabatic_1_1Session-members.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classKatabatic_1_1Session.html b/katabatic/doc/html/classKatabatic_1_1Session.html index f2b3275d..bb26ef77 100644 --- a/katabatic/doc/html/classKatabatic_1_1Session.html +++ b/katabatic/doc/html/classKatabatic_1_1Session.html @@ -1098,7 +1098,7 @@ Revalidate AutoSegments. Just before this stage, they are on the correct axis an
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology-members.html b/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology-members.html index 59c576c4..4edf9895 100644 --- a/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology-members.html +++ b/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology-members.html @@ -75,7 +75,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html b/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html index 2c994273..2489e6d2 100644 --- a/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html +++ b/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html @@ -106,7 +106,7 @@ Private Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/classes.html b/katabatic/doc/html/classes.html index e3f5f6f1..b887a458 100644 --- a/katabatic/doc/html/classes.html +++ b/katabatic/doc/html/classes.html @@ -91,7 +91,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a.html b/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a.html index 108db13a..4a388bfe 100644 --- a/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a.html +++ b/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a.html @@ -97,7 +97,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 085225e2..36ef6942 100644 --- a/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -98,7 +98,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/files.html b/katabatic/doc/html/files.html index 68cc0635..b8694453 100644 --- a/katabatic/doc/html/files.html +++ b/katabatic/doc/html/files.html @@ -73,7 +73,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions.html b/katabatic/doc/html/functions.html index 15ac4f61..dbe8d7e1 100644 --- a/katabatic/doc/html/functions.html +++ b/katabatic/doc/html/functions.html @@ -150,7 +150,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x61.html b/katabatic/doc/html/functions_0x61.html index 27f3d640..4de35954 100644 --- a/katabatic/doc/html/functions_0x61.html +++ b/katabatic/doc/html/functions_0x61.html @@ -138,7 +138,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x62.html b/katabatic/doc/html/functions_0x62.html index 4b9c21d1..0344f8bc 100644 --- a/katabatic/doc/html/functions_0x62.html +++ b/katabatic/doc/html/functions_0x62.html @@ -99,7 +99,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x63.html b/katabatic/doc/html/functions_0x63.html index 816692d6..6e70a3cb 100644 --- a/katabatic/doc/html/functions_0x63.html +++ b/katabatic/doc/html/functions_0x63.html @@ -174,7 +174,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x64.html b/katabatic/doc/html/functions_0x64.html index 8ed52c9a..60529cf0 100644 --- a/katabatic/doc/html/functions_0x64.html +++ b/katabatic/doc/html/functions_0x64.html @@ -128,7 +128,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x65.html b/katabatic/doc/html/functions_0x65.html index 1e78038f..a25232f6 100644 --- a/katabatic/doc/html/functions_0x65.html +++ b/katabatic/doc/html/functions_0x65.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x66.html b/katabatic/doc/html/functions_0x66.html index 3460810e..e775edd4 100644 --- a/katabatic/doc/html/functions_0x66.html +++ b/katabatic/doc/html/functions_0x66.html @@ -92,7 +92,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x67.html b/katabatic/doc/html/functions_0x67.html index af300b70..bd2c4a9f 100644 --- a/katabatic/doc/html/functions_0x67.html +++ b/katabatic/doc/html/functions_0x67.html @@ -666,7 +666,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x68.html b/katabatic/doc/html/functions_0x68.html index 6dfc609e..23e628e4 100644 --- a/katabatic/doc/html/functions_0x68.html +++ b/katabatic/doc/html/functions_0x68.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x69.html b/katabatic/doc/html/functions_0x69.html index c8cea8c7..0d783732 100644 --- a/katabatic/doc/html/functions_0x69.html +++ b/katabatic/doc/html/functions_0x69.html @@ -214,7 +214,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x6b.html b/katabatic/doc/html/functions_0x6b.html index fcacda55..df6769c6 100644 --- a/katabatic/doc/html/functions_0x6b.html +++ b/katabatic/doc/html/functions_0x6b.html @@ -92,7 +92,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x6c.html b/katabatic/doc/html/functions_0x6c.html index 3852b1b9..1b979a76 100644 --- a/katabatic/doc/html/functions_0x6c.html +++ b/katabatic/doc/html/functions_0x6c.html @@ -104,7 +104,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x6d.html b/katabatic/doc/html/functions_0x6d.html index b92a113d..5e89662e 100644 --- a/katabatic/doc/html/functions_0x6d.html +++ b/katabatic/doc/html/functions_0x6d.html @@ -129,7 +129,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x6e.html b/katabatic/doc/html/functions_0x6e.html index 479aa659..aef8a3d0 100644 --- a/katabatic/doc/html/functions_0x6e.html +++ b/katabatic/doc/html/functions_0x6e.html @@ -96,7 +96,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x6f.html b/katabatic/doc/html/functions_0x6f.html index 5956c22b..a298e39e 100644 --- a/katabatic/doc/html/functions_0x6f.html +++ b/katabatic/doc/html/functions_0x6f.html @@ -101,7 +101,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x70.html b/katabatic/doc/html/functions_0x70.html index 5b316679..62c3db24 100644 --- a/katabatic/doc/html/functions_0x70.html +++ b/katabatic/doc/html/functions_0x70.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x72.html b/katabatic/doc/html/functions_0x72.html index de4aff84..d21b9a5a 100644 --- a/katabatic/doc/html/functions_0x72.html +++ b/katabatic/doc/html/functions_0x72.html @@ -132,7 +132,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x73.html b/katabatic/doc/html/functions_0x73.html index 0b7a2687..c888e9c6 100644 --- a/katabatic/doc/html/functions_0x73.html +++ b/katabatic/doc/html/functions_0x73.html @@ -212,7 +212,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x74.html b/katabatic/doc/html/functions_0x74.html index fec7db87..ca11d04d 100644 --- a/katabatic/doc/html/functions_0x74.html +++ b/katabatic/doc/html/functions_0x74.html @@ -102,7 +102,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x75.html b/katabatic/doc/html/functions_0x75.html index c87802a4..932b4457 100644 --- a/katabatic/doc/html/functions_0x75.html +++ b/katabatic/doc/html/functions_0x75.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x78.html b/katabatic/doc/html/functions_0x78.html index 3eb960a8..be7d5c4f 100644 --- a/katabatic/doc/html/functions_0x78.html +++ b/katabatic/doc/html/functions_0x78.html @@ -92,7 +92,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_0x7e.html b/katabatic/doc/html/functions_0x7e.html index 6cede7f8..c11e6f4a 100644 --- a/katabatic/doc/html/functions_0x7e.html +++ b/katabatic/doc/html/functions_0x7e.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_enum.html b/katabatic/doc/html/functions_enum.html index b7ad64b1..c3b925c6 100644 --- a/katabatic/doc/html/functions_enum.html +++ b/katabatic/doc/html/functions_enum.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_eval.html b/katabatic/doc/html/functions_eval.html index 13cbb02f..869fcbb4 100644 --- a/katabatic/doc/html/functions_eval.html +++ b/katabatic/doc/html/functions_eval.html @@ -82,7 +82,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func.html b/katabatic/doc/html/functions_func.html index 8fe71765..bc22406d 100644 --- a/katabatic/doc/html/functions_func.html +++ b/katabatic/doc/html/functions_func.html @@ -150,7 +150,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x61.html b/katabatic/doc/html/functions_func_0x61.html index 2e1e751a..1fd28b13 100644 --- a/katabatic/doc/html/functions_func_0x61.html +++ b/katabatic/doc/html/functions_func_0x61.html @@ -129,7 +129,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x62.html b/katabatic/doc/html/functions_func_0x62.html index f2617034..91a65b05 100644 --- a/katabatic/doc/html/functions_func_0x62.html +++ b/katabatic/doc/html/functions_func_0x62.html @@ -99,7 +99,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x63.html b/katabatic/doc/html/functions_func_0x63.html index 4f16e3e9..e870e75f 100644 --- a/katabatic/doc/html/functions_func_0x63.html +++ b/katabatic/doc/html/functions_func_0x63.html @@ -174,7 +174,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x64.html b/katabatic/doc/html/functions_func_0x64.html index 11992252..d1b7e638 100644 --- a/katabatic/doc/html/functions_func_0x64.html +++ b/katabatic/doc/html/functions_func_0x64.html @@ -125,7 +125,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x65.html b/katabatic/doc/html/functions_func_0x65.html index d293fe89..7ec49842 100644 --- a/katabatic/doc/html/functions_func_0x65.html +++ b/katabatic/doc/html/functions_func_0x65.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x66.html b/katabatic/doc/html/functions_func_0x66.html index 4fd5c5d8..a114c523 100644 --- a/katabatic/doc/html/functions_func_0x66.html +++ b/katabatic/doc/html/functions_func_0x66.html @@ -92,7 +92,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x67.html b/katabatic/doc/html/functions_func_0x67.html index c63e0368..5a0b3da2 100644 --- a/katabatic/doc/html/functions_func_0x67.html +++ b/katabatic/doc/html/functions_func_0x67.html @@ -666,7 +666,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x68.html b/katabatic/doc/html/functions_func_0x68.html index 57b47ad5..c5255153 100644 --- a/katabatic/doc/html/functions_func_0x68.html +++ b/katabatic/doc/html/functions_func_0x68.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x69.html b/katabatic/doc/html/functions_func_0x69.html index a7c6c855..b4ca2a0d 100644 --- a/katabatic/doc/html/functions_func_0x69.html +++ b/katabatic/doc/html/functions_func_0x69.html @@ -214,7 +214,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x6b.html b/katabatic/doc/html/functions_func_0x6b.html index 7c02f17c..5950d006 100644 --- a/katabatic/doc/html/functions_func_0x6b.html +++ b/katabatic/doc/html/functions_func_0x6b.html @@ -92,7 +92,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x6c.html b/katabatic/doc/html/functions_func_0x6c.html index 8ee3c3f6..7f966e53 100644 --- a/katabatic/doc/html/functions_func_0x6c.html +++ b/katabatic/doc/html/functions_func_0x6c.html @@ -104,7 +104,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x6d.html b/katabatic/doc/html/functions_func_0x6d.html index fd904f4e..7533d925 100644 --- a/katabatic/doc/html/functions_func_0x6d.html +++ b/katabatic/doc/html/functions_func_0x6d.html @@ -117,7 +117,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x6e.html b/katabatic/doc/html/functions_func_0x6e.html index 05460c16..5a0bd614 100644 --- a/katabatic/doc/html/functions_func_0x6e.html +++ b/katabatic/doc/html/functions_func_0x6e.html @@ -93,7 +93,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x6f.html b/katabatic/doc/html/functions_func_0x6f.html index 889eac64..c915013c 100644 --- a/katabatic/doc/html/functions_func_0x6f.html +++ b/katabatic/doc/html/functions_func_0x6f.html @@ -101,7 +101,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x70.html b/katabatic/doc/html/functions_func_0x70.html index 9a3f0448..4e06e4e5 100644 --- a/katabatic/doc/html/functions_func_0x70.html +++ b/katabatic/doc/html/functions_func_0x70.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x72.html b/katabatic/doc/html/functions_func_0x72.html index 21e93033..3f49bf81 100644 --- a/katabatic/doc/html/functions_func_0x72.html +++ b/katabatic/doc/html/functions_func_0x72.html @@ -132,7 +132,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x73.html b/katabatic/doc/html/functions_func_0x73.html index c0a9686e..e34bbe00 100644 --- a/katabatic/doc/html/functions_func_0x73.html +++ b/katabatic/doc/html/functions_func_0x73.html @@ -209,7 +209,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x74.html b/katabatic/doc/html/functions_func_0x74.html index 61b57803..5c5fb683 100644 --- a/katabatic/doc/html/functions_func_0x74.html +++ b/katabatic/doc/html/functions_func_0x74.html @@ -102,7 +102,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x75.html b/katabatic/doc/html/functions_func_0x75.html index eb86d161..7aa6eab1 100644 --- a/katabatic/doc/html/functions_func_0x75.html +++ b/katabatic/doc/html/functions_func_0x75.html @@ -137,7 +137,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x78.html b/katabatic/doc/html/functions_func_0x78.html index adfa7674..c14d1ce6 100644 --- a/katabatic/doc/html/functions_func_0x78.html +++ b/katabatic/doc/html/functions_func_0x78.html @@ -92,7 +92,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_func_0x7e.html b/katabatic/doc/html/functions_func_0x7e.html index d0fb1ca8..d2fa7e1c 100644 --- a/katabatic/doc/html/functions_func_0x7e.html +++ b/katabatic/doc/html/functions_func_0x7e.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/functions_type.html b/katabatic/doc/html/functions_type.html index 79f2292c..a2d9f6ea 100644 --- a/katabatic/doc/html/functions_type.html +++ b/katabatic/doc/html/functions_type.html @@ -67,7 +67,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/graph_legend.html b/katabatic/doc/html/graph_legend.html index d0c296f0..5c5423c5 100644 --- a/katabatic/doc/html/graph_legend.html +++ b/katabatic/doc/html/graph_legend.html @@ -110,7 +110,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/group__LoadGlobalRouting.html b/katabatic/doc/html/group__LoadGlobalRouting.html index 57ff1b0b..679c0ec6 100644 --- a/katabatic/doc/html/group__LoadGlobalRouting.html +++ b/katabatic/doc/html/group__LoadGlobalRouting.html @@ -853,7 +853,7 @@ _do_xG_xM3()
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/group__grpSynthHierarchy.html b/katabatic/doc/html/group__grpSynthHierarchy.html index 600b3e67..c9501ff9 100644 --- a/katabatic/doc/html/group__grpSynthHierarchy.html +++ b/katabatic/doc/html/group__grpSynthHierarchy.html @@ -115,7 +115,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/hierarchy.html b/katabatic/doc/html/hierarchy.html index 32d53761..301fc53a 100644 --- a/katabatic/doc/html/hierarchy.html +++ b/katabatic/doc/html/hierarchy.html @@ -94,7 +94,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/index.html b/katabatic/doc/html/index.html index cc6a1116..3c51262d 100644 --- a/katabatic/doc/html/index.html +++ b/katabatic/doc/html/index.html @@ -50,7 +50,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/modules.html b/katabatic/doc/html/modules.html index 00c4173c..2902d265 100644 --- a/katabatic/doc/html/modules.html +++ b/katabatic/doc/html/modules.html @@ -56,7 +56,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/namespaceKatabatic.html b/katabatic/doc/html/namespaceKatabatic.html index 4af16a81..99cf711b 100644 --- a/katabatic/doc/html/namespaceKatabatic.html +++ b/katabatic/doc/html/namespaceKatabatic.html @@ -662,7 +662,7 @@ Enumerations
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html b/katabatic/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html index 9882fd96..46c735cb 100644 --- a/katabatic/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html +++ b/katabatic/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html b/katabatic/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html index e090a394..719344d4 100644 --- a/katabatic/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html +++ b/katabatic/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html b/katabatic/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html index 5d897757..e9956266 100644 --- a/katabatic/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html +++ b/katabatic/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html b/katabatic/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html index 08d06334..60ca0006 100644 --- a/katabatic/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html +++ b/katabatic/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html b/katabatic/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html index 85e12b72..0913a36c 100644 --- a/katabatic/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html +++ b/katabatic/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html @@ -90,7 +90,7 @@ Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html b/katabatic/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html index 684960b9..55cb2e80 100644 --- a/katabatic/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html +++ b/katabatic/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/namespacemembers.html b/katabatic/doc/html/namespacemembers.html index 3ab2630d..6ad4ef76 100644 --- a/katabatic/doc/html/namespacemembers.html +++ b/katabatic/doc/html/namespacemembers.html @@ -366,7 +366,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/namespacemembers_enum.html b/katabatic/doc/html/namespacemembers_enum.html index 5cfc2b5f..96fceda8 100644 --- a/katabatic/doc/html/namespacemembers_enum.html +++ b/katabatic/doc/html/namespacemembers_enum.html @@ -74,7 +74,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/namespacemembers_eval.html b/katabatic/doc/html/namespacemembers_eval.html index 05313c61..20529e70 100644 --- a/katabatic/doc/html/namespacemembers_eval.html +++ b/katabatic/doc/html/namespacemembers_eval.html @@ -298,7 +298,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/namespacemembers_func.html b/katabatic/doc/html/namespacemembers_func.html index 6a9fa150..b3432d94 100644 --- a/katabatic/doc/html/namespacemembers_func.html +++ b/katabatic/doc/html/namespacemembers_func.html @@ -65,7 +65,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/namespacemembers_type.html b/katabatic/doc/html/namespacemembers_type.html index c5f57c21..ce9257ea 100644 --- a/katabatic/doc/html/namespacemembers_type.html +++ b/katabatic/doc/html/namespacemembers_type.html @@ -86,7 +86,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/namespaces.html b/katabatic/doc/html/namespaces.html index f6319ed3..2ede1e98 100644 --- a/katabatic/doc/html/namespaces.html +++ b/katabatic/doc/html/namespaces.html @@ -63,7 +63,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/html/pages.html b/katabatic/doc/html/pages.html index 011a484d..3a7bd6a0 100644 --- a/katabatic/doc/html/pages.html +++ b/katabatic/doc/html/pages.html @@ -51,7 +51,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/katabatic/doc/latex/refman.tex b/katabatic/doc/latex/refman.tex index e868736f..f3bf2d3b 100644 --- a/katabatic/doc/latex/refman.tex +++ b/katabatic/doc/latex/refman.tex @@ -34,7 +34,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.5}\\ \vspace*{0.5cm} - {\small Sat Aug 18 2018 22:39:40}\\ + {\small Mon Oct 1 2018 14:29:09}\\ \end{center} \end{titlepage} diff --git a/kite/doc/html/Constants_8h_source.html b/kite/doc/html/Constants_8h_source.html index 02bf001b..f1deced1 100644 --- a/kite/doc/html/Constants_8h_source.html +++ b/kite/doc/html/Constants_8h_source.html @@ -130,7 +130,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/DataNegociate_8h_source.html b/kite/doc/html/DataNegociate_8h_source.html index 84c505b4..5883977d 100644 --- a/kite/doc/html/DataNegociate_8h_source.html +++ b/kite/doc/html/DataNegociate_8h_source.html @@ -257,7 +257,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/HorizontalTrack_8h_source.html b/kite/doc/html/HorizontalTrack_8h_source.html index 7fd1cc44..52d19bb4 100644 --- a/kite/doc/html/HorizontalTrack_8h_source.html +++ b/kite/doc/html/HorizontalTrack_8h_source.html @@ -120,7 +120,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/KiteEngine_8h_source.html b/kite/doc/html/KiteEngine_8h_source.html index 14236967..e026ae35 100644 --- a/kite/doc/html/KiteEngine_8h_source.html +++ b/kite/doc/html/KiteEngine_8h_source.html @@ -272,7 +272,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/Manipulator_8h_source.html b/kite/doc/html/Manipulator_8h_source.html index 6484bb45..e7bcb4c1 100644 --- a/kite/doc/html/Manipulator_8h_source.html +++ b/kite/doc/html/Manipulator_8h_source.html @@ -203,7 +203,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/NegociateWindow_8h_source.html b/kite/doc/html/NegociateWindow_8h_source.html index 32c140f6..81ea6a06 100644 --- a/kite/doc/html/NegociateWindow_8h_source.html +++ b/kite/doc/html/NegociateWindow_8h_source.html @@ -248,7 +248,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/RoutingEventHistory_8h_source.html b/kite/doc/html/RoutingEventHistory_8h_source.html index 46f19305..ac50d691 100644 --- a/kite/doc/html/RoutingEventHistory_8h_source.html +++ b/kite/doc/html/RoutingEventHistory_8h_source.html @@ -136,7 +136,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/RoutingEventLoop_8h_source.html b/kite/doc/html/RoutingEventLoop_8h_source.html index 58b1eb95..a0f133d7 100644 --- a/kite/doc/html/RoutingEventLoop_8h_source.html +++ b/kite/doc/html/RoutingEventLoop_8h_source.html @@ -146,7 +146,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/RoutingEventQueue_8h_source.html b/kite/doc/html/RoutingEventQueue_8h_source.html index a26e4d51..07593dc5 100644 --- a/kite/doc/html/RoutingEventQueue_8h_source.html +++ b/kite/doc/html/RoutingEventQueue_8h_source.html @@ -153,7 +153,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/RoutingEvent_8h_source.html b/kite/doc/html/RoutingEvent_8h_source.html index 6f71b6dd..0a4ab0e3 100644 --- a/kite/doc/html/RoutingEvent_8h_source.html +++ b/kite/doc/html/RoutingEvent_8h_source.html @@ -400,7 +400,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/RoutingPlane_8h_source.html b/kite/doc/html/RoutingPlane_8h_source.html index 77d54825..89561ccf 100644 --- a/kite/doc/html/RoutingPlane_8h_source.html +++ b/kite/doc/html/RoutingPlane_8h_source.html @@ -215,7 +215,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/SegmentFsm_8h_source.html b/kite/doc/html/SegmentFsm_8h_source.html index 05d68139..bdf38662 100644 --- a/kite/doc/html/SegmentFsm_8h_source.html +++ b/kite/doc/html/SegmentFsm_8h_source.html @@ -297,7 +297,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/Session_8h_source.html b/kite/doc/html/Session_8h_source.html index dca48066..b6a65918 100644 --- a/kite/doc/html/Session_8h_source.html +++ b/kite/doc/html/Session_8h_source.html @@ -269,7 +269,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/TrackElement_8h_source.html b/kite/doc/html/TrackElement_8h_source.html index b64c1c2c..507d347b 100644 --- a/kite/doc/html/TrackElement_8h_source.html +++ b/kite/doc/html/TrackElement_8h_source.html @@ -412,7 +412,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/TrackFixedSegment_8h_source.html b/kite/doc/html/TrackFixedSegment_8h_source.html index 1f7fce2e..1c7c8954 100644 --- a/kite/doc/html/TrackFixedSegment_8h_source.html +++ b/kite/doc/html/TrackFixedSegment_8h_source.html @@ -159,7 +159,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/TrackMarker_8h_source.html b/kite/doc/html/TrackMarker_8h_source.html index 87e1537a..e595a784 100644 --- a/kite/doc/html/TrackMarker_8h_source.html +++ b/kite/doc/html/TrackMarker_8h_source.html @@ -181,7 +181,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/TrackSegment_8h_source.html b/kite/doc/html/TrackSegment_8h_source.html index 6f4d6aad..3416676f 100644 --- a/kite/doc/html/TrackSegment_8h_source.html +++ b/kite/doc/html/TrackSegment_8h_source.html @@ -276,7 +276,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/Track_8h_source.html b/kite/doc/html/Track_8h_source.html index 9f0e54dd..de73356f 100644 --- a/kite/doc/html/Track_8h_source.html +++ b/kite/doc/html/Track_8h_source.html @@ -337,7 +337,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/VerticalTrack_8h_source.html b/kite/doc/html/VerticalTrack_8h_source.html index c5b396d7..535a6502 100644 --- a/kite/doc/html/VerticalTrack_8h_source.html +++ b/kite/doc/html/VerticalTrack_8h_source.html @@ -120,7 +120,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/annotated.html b/kite/doc/html/annotated.html index 114b134a..4dcc6e4e 100644 --- a/kite/doc/html/annotated.html +++ b/kite/doc/html/annotated.html @@ -92,7 +92,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1DataNegociate-members.html b/kite/doc/html/classKite_1_1DataNegociate-members.html index f42997af..174f0b2d 100644 --- a/kite/doc/html/classKite_1_1DataNegociate-members.html +++ b/kite/doc/html/classKite_1_1DataNegociate-members.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1DataNegociate.html b/kite/doc/html/classKite_1_1DataNegociate.html index 25eb6d97..a5e61573 100644 --- a/kite/doc/html/classKite_1_1DataNegociate.html +++ b/kite/doc/html/classKite_1_1DataNegociate.html @@ -792,7 +792,7 @@ Modifications History
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1HorizontalTrack-members.html b/kite/doc/html/classKite_1_1HorizontalTrack-members.html index 77a34093..0d546bda 100644 --- a/kite/doc/html/classKite_1_1HorizontalTrack-members.html +++ b/kite/doc/html/classKite_1_1HorizontalTrack-members.html @@ -120,7 +120,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1HorizontalTrack.html b/kite/doc/html/classKite_1_1HorizontalTrack.html index 2f02ff61..51aa2de4 100644 --- a/kite/doc/html/classKite_1_1HorizontalTrack.html +++ b/kite/doc/html/classKite_1_1HorizontalTrack.html @@ -313,7 +313,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1KiteEngine-members.html b/kite/doc/html/classKite_1_1KiteEngine-members.html index 61f0338e..e559c078 100644 --- a/kite/doc/html/classKite_1_1KiteEngine-members.html +++ b/kite/doc/html/classKite_1_1KiteEngine-members.html @@ -123,7 +123,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1KiteEngine.html b/kite/doc/html/classKite_1_1KiteEngine.html index f53da104..e28b3669 100644 --- a/kite/doc/html/classKite_1_1KiteEngine.html +++ b/kite/doc/html/classKite_1_1KiteEngine.html @@ -381,7 +381,7 @@ Static Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1Manipulator-members.html b/kite/doc/html/classKite_1_1Manipulator-members.html index 30d60942..57a01270 100644 --- a/kite/doc/html/classKite_1_1Manipulator-members.html +++ b/kite/doc/html/classKite_1_1Manipulator-members.html @@ -97,7 +97,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1Manipulator.html b/kite/doc/html/classKite_1_1Manipulator.html index ab059e9d..85cfdb26 100644 --- a/kite/doc/html/classKite_1_1Manipulator.html +++ b/kite/doc/html/classKite_1_1Manipulator.html @@ -742,7 +742,7 @@ One Dogleg (max)
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1NegociateWindow-members.html b/kite/doc/html/classKite_1_1NegociateWindow-members.html index 55169c0b..7c7aaf66 100644 --- a/kite/doc/html/classKite_1_1NegociateWindow-members.html +++ b/kite/doc/html/classKite_1_1NegociateWindow-members.html @@ -83,7 +83,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1NegociateWindow.html b/kite/doc/html/classKite_1_1NegociateWindow.html index aa5d956b..a87d453e 100644 --- a/kite/doc/html/classKite_1_1NegociateWindow.html +++ b/kite/doc/html/classKite_1_1NegociateWindow.html @@ -596,7 +596,7 @@ Static Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1RoutingEvent-members.html b/kite/doc/html/classKite_1_1RoutingEvent-members.html index 3215b424..2ddbd359 100644 --- a/kite/doc/html/classKite_1_1RoutingEvent-members.html +++ b/kite/doc/html/classKite_1_1RoutingEvent-members.html @@ -106,7 +106,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1RoutingEvent.html b/kite/doc/html/classKite_1_1RoutingEvent.html index b743b797..959a48c5 100644 --- a/kite/doc/html/classKite_1_1RoutingEvent.html +++ b/kite/doc/html/classKite_1_1RoutingEvent.html @@ -1243,7 +1243,7 @@ Static Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1RoutingEventHistory-members.html b/kite/doc/html/classKite_1_1RoutingEventHistory-members.html index 2b809c31..1f52d81d 100644 --- a/kite/doc/html/classKite_1_1RoutingEventHistory-members.html +++ b/kite/doc/html/classKite_1_1RoutingEventHistory-members.html @@ -69,7 +69,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1RoutingEventHistory.html b/kite/doc/html/classKite_1_1RoutingEventHistory.html index 927efa64..4d60e358 100644 --- a/kite/doc/html/classKite_1_1RoutingEventHistory.html +++ b/kite/doc/html/classKite_1_1RoutingEventHistory.html @@ -252,7 +252,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1RoutingEventLoop-members.html b/kite/doc/html/classKite_1_1RoutingEventLoop-members.html index 720c52af..cc60f48c 100644 --- a/kite/doc/html/classKite_1_1RoutingEventLoop-members.html +++ b/kite/doc/html/classKite_1_1RoutingEventLoop-members.html @@ -67,7 +67,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1RoutingEventLoop.html b/kite/doc/html/classKite_1_1RoutingEventLoop.html index d77f503a..a4c819bb 100644 --- a/kite/doc/html/classKite_1_1RoutingEventLoop.html +++ b/kite/doc/html/classKite_1_1RoutingEventLoop.html @@ -242,7 +242,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1RoutingEventQueue-members.html b/kite/doc/html/classKite_1_1RoutingEventQueue-members.html index e0bbec3f..41c78f56 100644 --- a/kite/doc/html/classKite_1_1RoutingEventQueue-members.html +++ b/kite/doc/html/classKite_1_1RoutingEventQueue-members.html @@ -74,7 +74,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1RoutingEventQueue.html b/kite/doc/html/classKite_1_1RoutingEventQueue.html index 7fda4fc9..c663e74a 100644 --- a/kite/doc/html/classKite_1_1RoutingEventQueue.html +++ b/kite/doc/html/classKite_1_1RoutingEventQueue.html @@ -394,7 +394,7 @@ Implementation Details
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1RoutingEvent_1_1Key-members.html b/kite/doc/html/classKite_1_1RoutingEvent_1_1Key-members.html index 09f8c120..bcbde5fa 100644 --- a/kite/doc/html/classKite_1_1RoutingEvent_1_1Key-members.html +++ b/kite/doc/html/classKite_1_1RoutingEvent_1_1Key-members.html @@ -62,7 +62,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1RoutingEvent_1_1Key.html b/kite/doc/html/classKite_1_1RoutingEvent_1_1Key.html index 62255bca..393aaf5e 100644 --- a/kite/doc/html/classKite_1_1RoutingEvent_1_1Key.html +++ b/kite/doc/html/classKite_1_1RoutingEvent_1_1Key.html @@ -113,7 +113,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1RoutingPlane-members.html b/kite/doc/html/classKite_1_1RoutingPlane-members.html index 85fa5854..28b9c84b 100644 --- a/kite/doc/html/classKite_1_1RoutingPlane-members.html +++ b/kite/doc/html/classKite_1_1RoutingPlane-members.html @@ -82,7 +82,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1RoutingPlane.html b/kite/doc/html/classKite_1_1RoutingPlane.html index f7bcf280..739aa772 100644 --- a/kite/doc/html/classKite_1_1RoutingPlane.html +++ b/kite/doc/html/classKite_1_1RoutingPlane.html @@ -644,7 +644,7 @@ Fig 1: Horizontal RoutingPlane
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1SegmentAction-members.html b/kite/doc/html/classKite_1_1SegmentAction-members.html index f37002d5..2c3609cc 100644 --- a/kite/doc/html/classKite_1_1SegmentAction-members.html +++ b/kite/doc/html/classKite_1_1SegmentAction-members.html @@ -91,7 +91,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1SegmentAction.html b/kite/doc/html/classKite_1_1SegmentAction.html index 9cd0011d..6b6afe6e 100644 --- a/kite/doc/html/classKite_1_1SegmentAction.html +++ b/kite/doc/html/classKite_1_1SegmentAction.html @@ -415,7 +415,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1SegmentFsm-members.html b/kite/doc/html/classKite_1_1SegmentFsm-members.html index ca08cd73..8041c419 100644 --- a/kite/doc/html/classKite_1_1SegmentFsm-members.html +++ b/kite/doc/html/classKite_1_1SegmentFsm-members.html @@ -97,7 +97,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1SegmentFsm.html b/kite/doc/html/classKite_1_1SegmentFsm.html index 90adf86a..bc54b461 100644 --- a/kite/doc/html/classKite_1_1SegmentFsm.html +++ b/kite/doc/html/classKite_1_1SegmentFsm.html @@ -899,7 +899,7 @@ Candidates Track Ordering
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1SegmentObserver-members.html b/kite/doc/html/classKite_1_1SegmentObserver-members.html index ebe91bfc..23373897 100644 --- a/kite/doc/html/classKite_1_1SegmentObserver-members.html +++ b/kite/doc/html/classKite_1_1SegmentObserver-members.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1SegmentObserver.html b/kite/doc/html/classKite_1_1SegmentObserver.html index 531d1f2f..33154f67 100644 --- a/kite/doc/html/classKite_1_1SegmentObserver.html +++ b/kite/doc/html/classKite_1_1SegmentObserver.html @@ -114,7 +114,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1Session-members.html b/kite/doc/html/classKite_1_1Session-members.html index 82a4bf79..3910ad60 100644 --- a/kite/doc/html/classKite_1_1Session-members.html +++ b/kite/doc/html/classKite_1_1Session-members.html @@ -108,7 +108,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1Session.html b/kite/doc/html/classKite_1_1Session.html index 6ea49cf5..9179b18f 100644 --- a/kite/doc/html/classKite_1_1Session.html +++ b/kite/doc/html/classKite_1_1Session.html @@ -649,7 +649,7 @@ The Lookup Mechanism
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1Track-members.html b/kite/doc/html/classKite_1_1Track-members.html index 83e04f4e..bb250bb1 100644 --- a/kite/doc/html/classKite_1_1Track-members.html +++ b/kite/doc/html/classKite_1_1Track-members.html @@ -120,7 +120,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1Track.html b/kite/doc/html/classKite_1_1Track.html index 7ccdbf0b..6311bc2a 100644 --- a/kite/doc/html/classKite_1_1Track.html +++ b/kite/doc/html/classKite_1_1Track.html @@ -1571,7 +1571,7 @@ Fig 3: Track::getBeginIndex()
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1TrackElement-members.html b/kite/doc/html/classKite_1_1TrackElement-members.html index d24e1630..f79f1a21 100644 --- a/kite/doc/html/classKite_1_1TrackElement-members.html +++ b/kite/doc/html/classKite_1_1TrackElement-members.html @@ -127,7 +127,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1TrackElement.html b/kite/doc/html/classKite_1_1TrackElement.html index 7dd2ec8d..8e0e6d0e 100644 --- a/kite/doc/html/classKite_1_1TrackElement.html +++ b/kite/doc/html/classKite_1_1TrackElement.html @@ -2067,7 +2067,7 @@ TrackElement Abstract
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1TrackFixedSegment-members.html b/kite/doc/html/classKite_1_1TrackFixedSegment-members.html index 94786292..a0ccf8e0 100644 --- a/kite/doc/html/classKite_1_1TrackFixedSegment-members.html +++ b/kite/doc/html/classKite_1_1TrackFixedSegment-members.html @@ -128,7 +128,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1TrackFixedSegment.html b/kite/doc/html/classKite_1_1TrackFixedSegment.html index 23f1f0c8..b9b019ec 100644 --- a/kite/doc/html/classKite_1_1TrackFixedSegment.html +++ b/kite/doc/html/classKite_1_1TrackFixedSegment.html @@ -556,7 +556,7 @@ Static Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1TrackMarker-members.html b/kite/doc/html/classKite_1_1TrackMarker-members.html index bcaddf8b..928c710f 100644 --- a/kite/doc/html/classKite_1_1TrackMarker-members.html +++ b/kite/doc/html/classKite_1_1TrackMarker-members.html @@ -68,7 +68,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1TrackMarker.html b/kite/doc/html/classKite_1_1TrackMarker.html index a813fd9e..30832cd8 100644 --- a/kite/doc/html/classKite_1_1TrackMarker.html +++ b/kite/doc/html/classKite_1_1TrackMarker.html @@ -277,7 +277,7 @@ Static Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1TrackSegment-members.html b/kite/doc/html/classKite_1_1TrackSegment-members.html index 95639a3b..e42f9bf7 100644 --- a/kite/doc/html/classKite_1_1TrackSegment-members.html +++ b/kite/doc/html/classKite_1_1TrackSegment-members.html @@ -129,7 +129,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1TrackSegment.html b/kite/doc/html/classKite_1_1TrackSegment.html index ae3f9c74..3bdbfc41 100644 --- a/kite/doc/html/classKite_1_1TrackSegment.html +++ b/kite/doc/html/classKite_1_1TrackSegment.html @@ -1609,7 +1609,7 @@ Global, Weak Global and Local Segments
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1VerticalTrack-members.html b/kite/doc/html/classKite_1_1VerticalTrack-members.html index 0a4462f7..34282f24 100644 --- a/kite/doc/html/classKite_1_1VerticalTrack-members.html +++ b/kite/doc/html/classKite_1_1VerticalTrack-members.html @@ -120,7 +120,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classKite_1_1VerticalTrack.html b/kite/doc/html/classKite_1_1VerticalTrack.html index e743b304..53371b1a 100644 --- a/kite/doc/html/classKite_1_1VerticalTrack.html +++ b/kite/doc/html/classKite_1_1VerticalTrack.html @@ -314,7 +314,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/classes.html b/kite/doc/html/classes.html index 8a75fc72..f50631d2 100644 --- a/kite/doc/html/classes.html +++ b/kite/doc/html/classes.html @@ -88,7 +88,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/dir_2916ee297f5e79ec495d393dfe8ba769.html b/kite/doc/html/dir_2916ee297f5e79ec495d393dfe8ba769.html index c8ff88f4..0f51ac1f 100644 --- a/kite/doc/html/dir_2916ee297f5e79ec495d393dfe8ba769.html +++ b/kite/doc/html/dir_2916ee297f5e79ec495d393dfe8ba769.html @@ -99,7 +99,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/kite/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index b95fbf03..8ce06acb 100644 --- a/kite/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/kite/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -98,7 +98,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/files.html b/kite/doc/html/files.html index a12a44bf..97858890 100644 --- a/kite/doc/html/files.html +++ b/kite/doc/html/files.html @@ -74,7 +74,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions.html b/kite/doc/html/functions.html index 3fd9b735..8edfd73e 100644 --- a/kite/doc/html/functions.html +++ b/kite/doc/html/functions.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x61.html b/kite/doc/html/functions_0x61.html index e30e2aec..a26c3c07 100644 --- a/kite/doc/html/functions_0x61.html +++ b/kite/doc/html/functions_0x61.html @@ -126,7 +126,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x62.html b/kite/doc/html/functions_0x62.html index 8b41ca14..c5f70ebb 100644 --- a/kite/doc/html/functions_0x62.html +++ b/kite/doc/html/functions_0x62.html @@ -106,7 +106,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x63.html b/kite/doc/html/functions_0x63.html index 0e108e1e..539ca1a1 100644 --- a/kite/doc/html/functions_0x63.html +++ b/kite/doc/html/functions_0x63.html @@ -148,7 +148,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x64.html b/kite/doc/html/functions_0x64.html index cbd71292..6ec88810 100644 --- a/kite/doc/html/functions_0x64.html +++ b/kite/doc/html/functions_0x64.html @@ -116,7 +116,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x65.html b/kite/doc/html/functions_0x65.html index f15ec1cb..bd590ff1 100644 --- a/kite/doc/html/functions_0x65.html +++ b/kite/doc/html/functions_0x65.html @@ -133,7 +133,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x66.html b/kite/doc/html/functions_0x66.html index ed629159..42f8a9c7 100644 --- a/kite/doc/html/functions_0x66.html +++ b/kite/doc/html/functions_0x66.html @@ -99,7 +99,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x67.html b/kite/doc/html/functions_0x67.html index adb5fe8b..69933a87 100644 --- a/kite/doc/html/functions_0x67.html +++ b/kite/doc/html/functions_0x67.html @@ -497,7 +497,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x68.html b/kite/doc/html/functions_0x68.html index 6e4534fe..ca18c99a 100644 --- a/kite/doc/html/functions_0x68.html +++ b/kite/doc/html/functions_0x68.html @@ -96,7 +96,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x69.html b/kite/doc/html/functions_0x69.html index 59ac5ab3..ffcbd2db 100644 --- a/kite/doc/html/functions_0x69.html +++ b/kite/doc/html/functions_0x69.html @@ -225,7 +225,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x6c.html b/kite/doc/html/functions_0x6c.html index f26a4226..a832e26c 100644 --- a/kite/doc/html/functions_0x6c.html +++ b/kite/doc/html/functions_0x6c.html @@ -99,7 +99,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x6d.html b/kite/doc/html/functions_0x6d.html index 45b5a6b7..07e3fbdd 100644 --- a/kite/doc/html/functions_0x6d.html +++ b/kite/doc/html/functions_0x6d.html @@ -120,7 +120,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x6e.html b/kite/doc/html/functions_0x6e.html index 12fdc53b..e601b376 100644 --- a/kite/doc/html/functions_0x6e.html +++ b/kite/doc/html/functions_0x6e.html @@ -108,7 +108,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x6f.html b/kite/doc/html/functions_0x6f.html index 1c43fe50..f83835c9 100644 --- a/kite/doc/html/functions_0x6f.html +++ b/kite/doc/html/functions_0x6f.html @@ -107,7 +107,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x70.html b/kite/doc/html/functions_0x70.html index d138a348..ef1940aa 100644 --- a/kite/doc/html/functions_0x70.html +++ b/kite/doc/html/functions_0x70.html @@ -121,7 +121,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x72.html b/kite/doc/html/functions_0x72.html index ea7162a0..7a8f0df3 100644 --- a/kite/doc/html/functions_0x72.html +++ b/kite/doc/html/functions_0x72.html @@ -168,7 +168,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x73.html b/kite/doc/html/functions_0x73.html index a481ef79..04a5bbc9 100644 --- a/kite/doc/html/functions_0x73.html +++ b/kite/doc/html/functions_0x73.html @@ -212,7 +212,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x74.html b/kite/doc/html/functions_0x74.html index de26ce10..b2545a37 100644 --- a/kite/doc/html/functions_0x74.html +++ b/kite/doc/html/functions_0x74.html @@ -100,7 +100,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x75.html b/kite/doc/html/functions_0x75.html index e7e4394f..301ac0ca 100644 --- a/kite/doc/html/functions_0x75.html +++ b/kite/doc/html/functions_0x75.html @@ -105,7 +105,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_0x7e.html b/kite/doc/html/functions_0x7e.html index 34b76511..5f5201ed 100644 --- a/kite/doc/html/functions_0x7e.html +++ b/kite/doc/html/functions_0x7e.html @@ -93,7 +93,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_enum.html b/kite/doc/html/functions_enum.html index 2ad01c59..760811c5 100644 --- a/kite/doc/html/functions_enum.html +++ b/kite/doc/html/functions_enum.html @@ -82,7 +82,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_eval.html b/kite/doc/html/functions_eval.html index 8f78b381..6c0337ed 100644 --- a/kite/doc/html/functions_eval.html +++ b/kite/doc/html/functions_eval.html @@ -349,7 +349,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func.html b/kite/doc/html/functions_func.html index f7472479..488eff27 100644 --- a/kite/doc/html/functions_func.html +++ b/kite/doc/html/functions_func.html @@ -94,7 +94,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x61.html b/kite/doc/html/functions_func_0x61.html index 5dc78063..f7869ec1 100644 --- a/kite/doc/html/functions_func_0x61.html +++ b/kite/doc/html/functions_func_0x61.html @@ -107,7 +107,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x62.html b/kite/doc/html/functions_func_0x62.html index c467d073..b981dc38 100644 --- a/kite/doc/html/functions_func_0x62.html +++ b/kite/doc/html/functions_func_0x62.html @@ -90,7 +90,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x63.html b/kite/doc/html/functions_func_0x63.html index 73114731..f634e448 100644 --- a/kite/doc/html/functions_func_0x63.html +++ b/kite/doc/html/functions_func_0x63.html @@ -141,7 +141,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x64.html b/kite/doc/html/functions_func_0x64.html index 49e14665..e4b13145 100644 --- a/kite/doc/html/functions_func_0x64.html +++ b/kite/doc/html/functions_func_0x64.html @@ -112,7 +112,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x65.html b/kite/doc/html/functions_func_0x65.html index 3fc357ea..d816c3fd 100644 --- a/kite/doc/html/functions_func_0x65.html +++ b/kite/doc/html/functions_func_0x65.html @@ -96,7 +96,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x66.html b/kite/doc/html/functions_func_0x66.html index 8b6cb302..6815d008 100644 --- a/kite/doc/html/functions_func_0x66.html +++ b/kite/doc/html/functions_func_0x66.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x67.html b/kite/doc/html/functions_func_0x67.html index 3e0c7892..54980790 100644 --- a/kite/doc/html/functions_func_0x67.html +++ b/kite/doc/html/functions_func_0x67.html @@ -496,7 +496,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x68.html b/kite/doc/html/functions_func_0x68.html index 23c5d647..fd18908b 100644 --- a/kite/doc/html/functions_func_0x68.html +++ b/kite/doc/html/functions_func_0x68.html @@ -95,7 +95,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x69.html b/kite/doc/html/functions_func_0x69.html index d0dc27ff..bae3b938 100644 --- a/kite/doc/html/functions_func_0x69.html +++ b/kite/doc/html/functions_func_0x69.html @@ -212,7 +212,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x6c.html b/kite/doc/html/functions_func_0x6c.html index a2e5b7ba..c20c6058 100644 --- a/kite/doc/html/functions_func_0x6c.html +++ b/kite/doc/html/functions_func_0x6c.html @@ -92,7 +92,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x6d.html b/kite/doc/html/functions_func_0x6d.html index 021837db..008866f9 100644 --- a/kite/doc/html/functions_func_0x6d.html +++ b/kite/doc/html/functions_func_0x6d.html @@ -103,7 +103,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x6e.html b/kite/doc/html/functions_func_0x6e.html index c83e5c5c..0492b227 100644 --- a/kite/doc/html/functions_func_0x6e.html +++ b/kite/doc/html/functions_func_0x6e.html @@ -89,7 +89,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x6f.html b/kite/doc/html/functions_func_0x6f.html index 85d96a38..3c15388e 100644 --- a/kite/doc/html/functions_func_0x6f.html +++ b/kite/doc/html/functions_func_0x6f.html @@ -89,7 +89,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x70.html b/kite/doc/html/functions_func_0x70.html index 27f399bb..19287a47 100644 --- a/kite/doc/html/functions_func_0x70.html +++ b/kite/doc/html/functions_func_0x70.html @@ -105,7 +105,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x72.html b/kite/doc/html/functions_func_0x72.html index 3c5fcc14..7bd0edba 100644 --- a/kite/doc/html/functions_func_0x72.html +++ b/kite/doc/html/functions_func_0x72.html @@ -145,7 +145,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x73.html b/kite/doc/html/functions_func_0x73.html index 0c3f344c..d707d236 100644 --- a/kite/doc/html/functions_func_0x73.html +++ b/kite/doc/html/functions_func_0x73.html @@ -177,7 +177,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x75.html b/kite/doc/html/functions_func_0x75.html index 8a877ac3..a3a70453 100644 --- a/kite/doc/html/functions_func_0x75.html +++ b/kite/doc/html/functions_func_0x75.html @@ -101,7 +101,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_func_0x7e.html b/kite/doc/html/functions_func_0x7e.html index fb4de953..bb95dfbb 100644 --- a/kite/doc/html/functions_func_0x7e.html +++ b/kite/doc/html/functions_func_0x7e.html @@ -92,7 +92,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/functions_vars.html b/kite/doc/html/functions_vars.html index 3e8519fa..50c48cb2 100644 --- a/kite/doc/html/functions_vars.html +++ b/kite/doc/html/functions_vars.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/graph_legend.html b/kite/doc/html/graph_legend.html index 848b6a3e..30c1ed71 100644 --- a/kite/doc/html/graph_legend.html +++ b/kite/doc/html/graph_legend.html @@ -110,7 +110,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/group__AlgorithmOverview.html b/kite/doc/html/group__AlgorithmOverview.html index 4865dd46..02140ec9 100644 --- a/kite/doc/html/group__AlgorithmOverview.html +++ b/kite/doc/html/group__AlgorithmOverview.html @@ -86,7 +86,7 @@ Compute the Tracks in which the - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/kite/doc/html/group__grpSynthHierarchy.html b/kite/doc/html/group__grpSynthHierarchy.html index 173df300..0f18d91e 100644 --- a/kite/doc/html/group__grpSynthHierarchy.html +++ b/kite/doc/html/group__grpSynthHierarchy.html @@ -109,7 +109,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/hierarchy.html b/kite/doc/html/hierarchy.html index b07ac840..99147a84 100644 --- a/kite/doc/html/hierarchy.html +++ b/kite/doc/html/hierarchy.html @@ -85,7 +85,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/index.html b/kite/doc/html/index.html index a266a992..60ceb94e 100644 --- a/kite/doc/html/index.html +++ b/kite/doc/html/index.html @@ -57,7 +57,7 @@ The internal description which details how - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/kite/doc/html/modules.html b/kite/doc/html/modules.html index b59f1532..0d6c6825 100644 --- a/kite/doc/html/modules.html +++ b/kite/doc/html/modules.html @@ -57,7 +57,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaceKite.html b/kite/doc/html/namespaceKite.html index 714950c7..ac1d5b60 100644 --- a/kite/doc/html/namespaceKite.html +++ b/kite/doc/html/namespaceKite.html @@ -211,7 +211,7 @@ Enumerations
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html index 2923c752..4f30dffe 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html index f0e447bd..9107870c 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html index 8d82f2bc..5e31c065 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html index dfa83f1b..da400a63 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html index b0367cc0..68d454d3 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html @@ -60,7 +60,7 @@ Classes
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaceanonymous__namespace_02Manipulator_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02Manipulator_8cpp_03.html index 666e86e7..97de2e2c 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02Manipulator_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02Manipulator_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaceanonymous__namespace_02NegociateWindow_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02NegociateWindow_8cpp_03.html index 3280365c..5805d812 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02NegociateWindow_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02NegociateWindow_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaceanonymous__namespace_02RoutingPlane_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02RoutingPlane_8cpp_03.html index 4a6d490a..db3b8e08 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02RoutingPlane_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02RoutingPlane_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaceanonymous__namespace_02SegmentFsm_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02SegmentFsm_8cpp_03.html index 0696f679..2426d639 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02SegmentFsm_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02SegmentFsm_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html index 586fe762..12a9f71a 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaceanonymous__namespace_02TrackElement_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02TrackElement_8cpp_03.html index 5385e448..99e97b00 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02TrackElement_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02TrackElement_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaceanonymous__namespace_02Track_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02Track_8cpp_03.html index 26a35055..3788b885 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02Track_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02Track_8cpp_03.html @@ -52,7 +52,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespacemembers.html b/kite/doc/html/namespacemembers.html index e28d6949..b41bb935 100644 --- a/kite/doc/html/namespacemembers.html +++ b/kite/doc/html/namespacemembers.html @@ -122,7 +122,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespacemembers_enum.html b/kite/doc/html/namespacemembers_enum.html index 833bd96f..a1a420ca 100644 --- a/kite/doc/html/namespacemembers_enum.html +++ b/kite/doc/html/namespacemembers_enum.html @@ -65,7 +65,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespacemembers_eval.html b/kite/doc/html/namespacemembers_eval.html index 293e0aa9..ca0bef68 100644 --- a/kite/doc/html/namespacemembers_eval.html +++ b/kite/doc/html/namespacemembers_eval.html @@ -107,7 +107,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespacemembers_func.html b/kite/doc/html/namespacemembers_func.html index d1ff8c67..50d8ac3c 100644 --- a/kite/doc/html/namespacemembers_func.html +++ b/kite/doc/html/namespacemembers_func.html @@ -65,7 +65,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespacemembers_type.html b/kite/doc/html/namespacemembers_type.html index 23dbbbe3..1062cf44 100644 --- a/kite/doc/html/namespacemembers_type.html +++ b/kite/doc/html/namespacemembers_type.html @@ -62,7 +62,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/namespaces.html b/kite/doc/html/namespaces.html index c93fe2d3..aad91693 100644 --- a/kite/doc/html/namespaces.html +++ b/kite/doc/html/namespaces.html @@ -69,7 +69,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/pageNotes.html b/kite/doc/html/pageNotes.html index 95003f26..e4213245 100644 --- a/kite/doc/html/pageNotes.html +++ b/kite/doc/html/pageNotes.html @@ -151,7 +151,7 @@ Evaluation with Cadence NanoRoute
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/html/pages.html b/kite/doc/html/pages.html index 62df02c2..d7aca2b4 100644 --- a/kite/doc/html/pages.html +++ b/kite/doc/html/pages.html @@ -53,7 +53,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/kite/doc/latex/refman.tex b/kite/doc/latex/refman.tex index 76f50086..7b779b6b 100644 --- a/kite/doc/latex/refman.tex +++ b/kite/doc/latex/refman.tex @@ -34,7 +34,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.5}\\ \vspace*{0.5cm} - {\small Sat Aug 18 2018 22:39:41}\\ + {\small Mon Oct 1 2018 14:29:11}\\ \end{center} \end{titlepage} diff --git a/oroshi/CMakeLists.txt b/oroshi/CMakeLists.txt new file mode 100644 index 00000000..fe87cf6f --- /dev/null +++ b/oroshi/CMakeLists.txt @@ -0,0 +1,28 @@ +# -*- explicit-buffer-name: "CMakeLists.txt" -*- + + project(OROSHI) + + cmake_minimum_required(VERSION 2.4.0) + + list(INSERT CMAKE_MODULE_PATH 0 "$ENV{CORIOLIS_TOP}/share/cmake/Modules/") + find_package(Bootstrap REQUIRED) + setup_project_paths(CORIOLIS) + + set_cmake_policies() + setup_sysconfdir("${CMAKE_INSTALL_PREFIX}") + setup_boost(program_options filesystem python) + + find_package(Libbfd) + find_package(PythonLibs 2 REQUIRED) + find_package(PythonSitePackages REQUIRED) + find_package(HURRICANE REQUIRED) + find_package(VLSISAPD REQUIRED) + find_package(CORIOLIS REQUIRED) + find_package(Doxygen) + setup_qt() + +#add_subdirectory(src) + add_subdirectory(python) +#add_subdirectory(etc) +#add_subdirectory(cmake_modules) + add_subdirectory(doc) diff --git a/oroshi/doc/CMakeLists.txt b/oroshi/doc/CMakeLists.txt new file mode 100644 index 00000000..4ac99f70 --- /dev/null +++ b/oroshi/doc/CMakeLists.txt @@ -0,0 +1,20 @@ +# -*- mode: CMAKE; explicit-buffer-name: # "CMakeLists.txt" -*- + + set ( htmlInstallDir share/doc/coriolis2/en/html/oroshi ) + set ( latexInstallDir share/doc/coriolis2/en/latex/oroshi ) + set ( doxExtras closed.png + open.png + tabs.css + ) + + if(BUILD_DOC AND DOXYGEN_FOUND) + add_custom_target ( doc ALL + cd ${OROSHI_SOURCE_DIR}/doc + && ${DOXYGEN_EXECUTABLE} doxyfile + && cp -f ${doxExtras} html + ) + endif() + + install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} ) + install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} ) + install ( FILES asimbook.cls DESTINATION ${latexInstallDir} ) diff --git a/oroshi/doc/SoC.css b/oroshi/doc/SoC.css new file mode 100644 index 00000000..4b52596b --- /dev/null +++ b/oroshi/doc/SoC.css @@ -0,0 +1,872 @@ + + +/* + * +-----------------------------------------------------------------+ + * | HTML Standart Tags | + * +-----------------------------------------------------------------+ + */ + + html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 { + font-size: 11pt; + /* The Open Sans font family is supplied by TexLive. */ + font-family: "Open Sans", Verdana, sans-serif;; + } + + html { + background: #dddddd; + } + + body { + color: black; + background: white; + background-color: white; + background-position: top left; + background-attachment: fixed; + background-repeat: no-repeat; + margin-top: 2em; + width: 700pt; + margin-right: auto; + margin-left: auto; + padding: 30pt; + /* + margin-right: 12%; + margin-left: 12%; + */ + } + + hr { + height: 1px; + border: 0; + color: #004400; + background-color: #004400; + } + + + h1, h2, h3, h4, h5, h6 { + /*font-family: "URW Bookman L", "Liberation Serif", sans-serif;*/ + font-family: "URW Bookman L"; + } + + h1.header { text-align: center; } + h1 { text-align: left; } + h2, h3, h4, h5, h6 { text-align: left; + padding-top: 11pt; + } + h1, h2, h3 { /*font-family: "Liberation Serif", sans-serif; */ + /*color: #09550B;*/ + } + h1 { font-weight: bold; font-size: 170%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ } + h2 { font-weight: bold; font-size: 140%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ } + h3 { font-weight: bold; font-size: 118%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ } + h4 { font-weight: bold; font-size: 100%; } + h5 { font-style: italic; font-size: 100%; } + h6 { font-variant: small-caps; font-size: 100%; } + + h2.classHierarchy { + /*border: 1px none #008500;*/ + border: 1px none #000000; + border-top-width: 1px; + border-top-style: dotted; + padding-top: 1em; + } + + + .hide { + display: none; + color: white; + } + + + p { + margin-top: 0.6em; + margin-bottom: 0.6em; + margin-left: 0.0em; + margin-right: 0.0em; + } + + + address { + text-align: right; + font-weight: bold; + font-style: italic; + font-size: 80%; + } + + + caption { font-weight: bold } + + + blockquote { + margin-left: 4em; + margin-right: 4em; + margin-top: 0.8em; + margin-bottom: 0.8em; + font-style: italic; + color: #003300; + } + + blockquote p { + margin-bottom: 0; + } + + blockquote address { + margin: 0; + } + + + table { + border-collapse: collapse; + } + + dt, dd { margin-top: 0; margin-bottom: 0; } + dt { font-weight: bold; } + + + pre, tt, code { + /*font-family: "andale mono", monospace;*/ + font-size: 100%; + white-space: pre; + } + + pre { + font-size: 80%; + /*border: dashed;*/ + border-width: thin; + border-color: #003300; + /*background-color: #EEEEEE;*/ + background-color: #FCFCE1; + padding: 0.5em; + margin-left: 2em; + margin-right: 2em + } + +/* + tt { color: green; } + */ + em { font-style: italic; + font-weight: normal; } + strong { font-weight: bold; } + + span.textit { font-style: italic; } + span.textbf { font-weight: bold; } + + .small { font-size: 90%; } + .white { color: #FFFFFF; } + + + ul.toc { + list-style: disc; + list-style: none; + } + + + a:link img, a:visited img { border-style: none; } + a img { color: white; } + + a { + color: black; + border-bottom: 1px solid black; + text-decoration: none; + } + + a:link, a:active, a:visited { + /*color: #09550B;*/ + /*text-decoration: none;*/ + } + + a:hover, a:focus { + /*color: #FF9900; */ + border-bottom: 2px solid black; + } + + +/* + * +-----------------------------------------------------------------+ + * | Doxygen Specific Classes | + * +-----------------------------------------------------------------+ + */ + + +/* ------------------------------------------------------------------- + * Header & Footer Classes (customized top page navigation bar). + */ + + h1.header { + font-size: 200%; + /*font-family: times, verdana, sans-serif;*/ + } + + h2.memtitle { + display: none; + } + + center.header { + background-color: #CCE6CA; + } + + table.header { + /*width: 100%;*/ + /*background-color: #EEEEEE;*/ + background-color: #CCE6CA; + } + + div.header { + text-align: center; + margin: 14pt 0pt 0pt 0pt; + } + + div.summary { + color: white; + background-color: black; + border: 4px solid black; + } + + div.summary a { + font-size: 90%; + color: white; + padding: 2px 0px; + text-align: center; + background-color: black; + border-bottom: none; + } + + table.header td { + padding: 2px 14px; + text-align: center; + font-weight: bold; + /*font-family: verdana, sans-serif;*/ + font-size: 110%; + } + + table.UserDefined { + border: 1px solid; + } + + table.UserDefined th { + border: 1px solid; + } + + table.UserDefined td { + padding: 0px 5px; + } + + table.DoxUser td, table.DoxUser th { + padding: 0px 5px; + border: 0px; + } + + table.DoxUser th { + background-color: #CCE6CA; + } + + table.footer1, table.footer2 { width: 100%; } + td.LFooter { text-align: left; } + td.RFooter { text-align: right; } + td.CFooter { text-align: center;} + table.footer2 td.RFooter { font-weight: bold; width: 35% } + table.footer2 td.CFooter { width: 30% } + table.footer2 td.LFooter { font-weight: bold; width: 35%; /*font-family: time;*/ } + + table.classHierarchy { + border-collapse: separate; + border-spacing: 5px; + font-size: 110%; + } + + table.classHierarchy a { + border-style: none; + border-bottom: none; + } + + table.classHierarchy tr { + border: 1px solid blue; + } + + table.classHierarchy td.normal { + border: 1px solid #dddddd; + width: 140pt; + text-align: center; + font-weight: bold; + background-color: #dddddd; + } + + table.classHierarchy td.virtual { + border: 1px solid black; + width: 140pt; + text-align: center; + font-weight: bold; + } + + table.classHierarchy td.wnormal { + border: 1px solid #dddddd; + width: 240pt; + text-align: center; + font-weight: bold; + background-color: #dddddd; + } + + table.classHierarchy td.wvirtual { + border: 1px solid black; + width: 240pt; + text-align: center; + font-weight: bold; + } + + div.ah, span.ah { + font-family: Times; + font-size: 300%; + font-weight: bold; + padding: 20px; + } + + div.title { + text-align: center; + font-size: 200%; + font-weight: bold; + padding: 20px; + border: 2px solid black; + } + + div.center, div.image { + text-align: center; + } + + +/* ------------------------------------------------------------------- + * Top navigation lists. + */ + + span.mlabels { + font-size: 90%; + font-style: italic; + padding-left: 10pt; + margin: 10pt; + border-left: 1px solid black + } + + div.contents { + padding-top: 20pt; + } + + div.tabs { + border-top: 1px solid black; + } + + div.tabs, div.tabs1, div.tabs2, div.tabs3, div.tabs4 { + border-left: 1px solid black; + } + + ul.tablist { + /* + padding: 5pt; + background-color: red; + */ + margin: 0pt; + padding: 0pt; + border-top: none; + border-bottom: none; + border-left: none; + border-right: none; + } + + ul.tablist li { + /* + margin-left: auto; + margin-right: auto; + overflow: auto; + display: inline; + background-color: yellow; + */ + font-size: 90%; + border-top: none; + border-bottom: 1px solid black; + border-left: none; + border-right: 1px solid black; + display: table-cell; + text-align: center; + padding: 2pt; + width: 5%; + } + + ul.tablist li:hover { + background-color: black; + color: white; + } + + ul.tablist li:hover a { + background-color: black; + color: white; + } + + ul.tablist * a { border-bottom: none; } + + ul.tablist * a:link img, ul.tablist * a:visited img { border-style: none; border-bottom: none; } + + ul.tablist * a:link, ul.tablist * a:visited { + color: black; + text-decoration: none; + } + + ul.tablist * a:hover, ul.tablist * a:focus, ul.tablist * a:active { + color: white; + text-decoration: underline; + } + + div.navpath { + padding: 5pt 0pt 0pt 0pt; + } + + .navpath ul { + text-align: center; + } + + .navpath ul li { + display: inline; + list-style-type: none; + padding-left: 20px; + padding-right: 10px; + background-image: url('closed.png'); + background-repeat: no-repeat; + background-position: left; + color: #364D7C; + } + + .navpath ul li a { + border: 2px solid black; + padding-left: 10px; + padding-right: 10px; + font-weight: bold; + color: black; + } + + +/* ------------------------------------------------------------------- + * Quick Index Class (top page navigation bar). + */ + + div.qindex, div.nav { + width: 100%-4px; + /*background-color: #DADAEF;*/ + /*background-color: #eeeeff;*/ + background-color: #cccccc; + /*background-color: #CCE6CA;*/ + border: 0px solid #003300; + text-align: center; + margin: 0px; + padding: 2px; + line-height: 140%; + } + + a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef { + text-decoration: none; + /*font-family: Courier;*/ + font-weight: normal; + /*font-size: 110%;*/ + } + + a.qindex, a.qindex:visited { + /*color: #09550B;*/ + color: black; + border: 2px solid #cccccc; + padding: 2px 2px; + border-bottom: none; + } + + a.qindex:hover { + /*background-color: #ddddff;*/ + font-weight: bold; + padding: 2px 2px; + border: 2px solid black; + } + + a.qindexHL, a.qindexHL:hover, a.qindexHL:visited { + background-color: #0c780c; + color: #ffffff; + border: 1px double #9295C2; + } + + a.code:link, a.code:visited, a.codeRef:link, a.codeRef:visited { + text-decoration: none; + font-weight: normal; + color: #0000ff; + } + + .indexkey { + background-color: #eeeeff; + border: 1px solid #b0b0b0; + padding: 2px 15px; + } + + .indexkey, .indexvalue { + background-color: #eeeeff; + border: 1px solid #b0b0b0; + padding: 2px 15px; + } + + .indexkey { + width: 40%; + } + + .indexvalue { + width: 80%; + } + + h3 a[name="index__"], + h3 a[name="index_a"], + h3 a[name="index_b"], + h3 a[name="index_c"], + h3 a[name="index_d"], + h3 a[name="index_e"], + h3 a[name="index_f"], + h3 a[name="index_g"], + h3 a[name="index_h"], + h3 a[name="index_i"], + h3 a[name="index_j"], + h3 a[name="index_k"], + h3 a[name="index_l"], + h3 a[name="index_m"], + h3 a[name="index_n"], + h3 a[name="index_o"], + h3 a[name="index_p"], + h3 a[name="index_q"], + h3 a[name="index_r"], + h3 a[name="index_s"], + h3 a[name="index_t"], + h3 a[name="index_u"], + h3 a[name="index_v"], + h3 a[name="index_w"], + h3 a[name="index_x"], + h3 a[name="index_y"], + h3 a[name="index_z"], + h3 a[name="index_0"], + h3 a[name="index_1"], + h3 a[name="index_2"], + h3 a[name="index_3"], + h3 a[name="index_4"], + h3 a[name="index_5"], + h3 a[name="index_6"], + h3 a[name="index_7"], + h3 a[name="index_8"], + h3 a[name="index_9"] + h3 a[id="index__"], + h3 a#index_a, + h3 a#index_b, + h3 a#index_c, + h3 a#index_d, + h3 a#index_e, + h3 a#index_f, + h3 a#index_g, + h3 a#index_h, + h3 a#index_i, + h3 a#index_j, + h3 a#index_k, + h3 a#index_l, + h3 a#index_m, + h3 a#index_n, + h3 a#index_o, + h3 a#index_p, + h3 a#index_q, + h3 a#index_r, + h3 a#index_s, + h3 a#index_t, + h3 a#index_u, + h3 a#index_v, + h3 a#index_w, + h3 a#index_x, + h3 a#index_y, + h3 a#index_z, + h3 a#index_0, + h3 a#index_1, + h3 a#index_2, + h3 a#index_3, + h3 a#index_4, + h3 a#index_5, + h3 a#index_6, + h3 a#index_7, + h3 a#index_8, + h3 a#index_9, + h3 a#index_0x7e + { + font-family: time; + font-size: 250%; + text-align: center; + } + + +/* ------------------------------------------------------------------- + * Verbatim Source Code / Examples. + */ + + div.fragment { + font-family: "Monospace"; + font-size: 80%; + border: none; + /*border-width: thin; */ + /*border-color: #003300;*/ + /*background-color: #FCFCE1;*/ + background-color: #fefefe; + padding: 0.5em; + margin-left: 5%; + margin-right: 5% + } + + div.line { + white-space: pre; + padding: 0pt; + margin: 0pt; + } + + span.keyword { color: #008000 } + span.keywordtype { color: #604020 } + span.keywordflow { color: #e08000 } + span.comment { color: #800000 } + span.preprocessor { color: #806020 } + span.stringliteral { color: #002080 } + span.charliteral { color: #008080 } + span.red { color: red } + + +/* ------------------------------------------------------------------- + * Attributes Listing. + */ + + a.el, a.elRef { + font-family: Courier; + font-weight: bold; + font-size: 110%; + color: black; + border-bottom: none; + } + + p.formulaDsp { + text-align: center; + } + + .mdTable { + /*border: 1px solid #868686;*/ + /*background-color: #DADAEF;*/ + /*background-color: #F4F4FB;*/ + border: 1px none #008500; + border-left-width: 1px; + border-left-style: solid; + /*background-color: #B8E6B8;*/ + /*background-color: #CCE6CA;*/ + margin-top: 25px; + font-size: 105%; + } + + .mdRow { + padding: 5px 10px; + } + + /* This Mozilla/Firefox bug has been corrected from v1.5. + * .mdname1 { + * padding: 3px 0px 0px 0px; + * } + */ + + .mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + font-size: 11px; + font-style: italic; + /*background-color: #FAFAFA;*/ + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; + } + + .memitem { + margin-bottom: 30px; + border: 1px none #008500; + } + + .memproto { + /*background-color: #CCE6CA;*/ + background-color: #cccccc; + border-left-width: 4px; + border-left-style: solid; + /*border-color: #008500;*/ + border-color: black; + } + + .memname { + white-space: nowrap; + padding-left: 5px; + font-size: 105%; + } + + table.memname * { + font-family: "Monospace"; + } + + + .memdoc{ + padding-left: 5px; + /*margin-top: -8px;*/ + border-left-width: 1px; + border-left-style: solid; + /*border-color: #008500;*/ + border-color: black; + } + + div.contents * table tr { + padding: 3px 3px 3px 8px; + } + + .memSeparator { + font-size: 1pt; + } + + .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight { + vertical-align: top; + /*padding: 1px 0px 0px 8px;*/ + padding: 3px 3px 3px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + /* + border-top-color: #0c0c0c; + border-right-color: #0c0c0c; + border-bottom-color: #0c0c0c; + border-left-color: #0c0c0c; + */ + border-top-style: none; + border-right-style: none; +/* + border-bottom-style: dotted; +*/ + border-left-style: none; + /*background-color: #DADAEF;*/ + /*background-color: #eeeeff;*/ + /*background-color: #EEEEEE;*/ + /*background-color: #CCE6CA;*/ + font-family: "Monospace"; + } + + .memTemplItemLeft, .memTemplItemRight { + border-bottom-width: 2px; + border-bottom-style: solid; + font-weight: bold; + } + + .memItemLeft { font-size: 11px; width: 35%; } + .memItemRight { font-size: 12px; } + .memTemplItemLeft { font-size: 11px; } + .memTemplItemRight { font-size: 12px; } + + .memTemplParams { + color: #FFFFFF; + background-color: #000000; + font-size: 11px; + font-weight: bold; + } + + .groupText, .groupHeader { + color: #09550B; + font-size: 130%; + font-weight: bold; + margin-top: 15px; + } + + .groupHeader { + margin-bottom: -30pt; + } + + .inherit { + display: none; + } + + +/* ------------------------------------------------------------------- + * General Classes Index. + */ + + span.icona { + margin-right: 10pt; + } + + div.toc li.level1 { + margin-left: 0px; + } + + div.toc li.level2 { + margin-left: 15px; + display: none; + } + + div.toc li.level3 { + margin-left: 30px; + display: none; + } + + div.toc li.level4 { + margin-left: 45px; + display: none; + } + + .directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; + } + + .directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; + } + + + div.directory { + margin: 10px 0px; + border-top: 2px solid black; + border-bottom: 2px solid black; + width: 100%; + } + + .directory table { + border-collapse: collapse; + } + + .directory td { + margin: 0px; + padding: 0px; + vertical-align: top; + } + + .directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; + } + + .directory td.entry a { + outline: none; + } + + .directory td.entry a img { + border: none; + } + + .directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); + } + + .directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; + } + + .directory img { + vertical-align: -30%; + } diff --git a/oroshi/doc/asimbook.cls b/oroshi/doc/asimbook.cls new file mode 100644 index 00000000..54270780 --- /dev/null +++ b/oroshi/doc/asimbook.cls @@ -0,0 +1,798 @@ +%% +%% This is file `book.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% classes.dtx (with options: `book') +%% +%% This is a generated file. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file was generated from file(s) of the LaTeX base system. +%% -------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.2 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% This file may only be distributed together with a copy of the LaTeX +%% base system. You may however distribute the LaTeX base system without +%% such generated files. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{asimbook} + [2005/11/21 v1.0 + ASIM LaTeX document class] +\newcommand\@ptsize{} +\newif\if@restonecol +\newif\if@titlepage +\@titlepagetrue +\newif\if@openright +\newif\if@mainmatter \@mainmattertrue +\if@compatibility\else +\DeclareOption{a4paper} + {\setlength\paperheight {297mm}% + \setlength\paperwidth {210mm}} +\DeclareOption{a5paper} + {\setlength\paperheight {210mm}% + \setlength\paperwidth {148mm}} +\DeclareOption{b5paper} + {\setlength\paperheight {250mm}% + \setlength\paperwidth {176mm}} +\DeclareOption{letterpaper} + {\setlength\paperheight {11in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{legalpaper} + {\setlength\paperheight {14in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{executivepaper} + {\setlength\paperheight {10.5in}% + \setlength\paperwidth {7.25in}} +\DeclareOption{landscape} + {\setlength\@tempdima {\paperheight}% + \setlength\paperheight {\paperwidth}% + \setlength\paperwidth {\@tempdima}} +\fi +\if@compatibility + \renewcommand\@ptsize{0} +\else +\DeclareOption{10pt}{\renewcommand\@ptsize{0}} +\fi +\DeclareOption{11pt}{\renewcommand\@ptsize{1}} +\DeclareOption{12pt}{\renewcommand\@ptsize{2}} +\if@compatibility\else +\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse} +\fi +\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\if@compatibility\else +\DeclareOption{final}{\setlength\overfullrule{0pt}} +\fi +\DeclareOption{titlepage}{\@titlepagetrue} +\if@compatibility\else +\DeclareOption{notitlepage}{\@titlepagefalse} +\fi +\if@compatibility +\@openrighttrue +\else +\DeclareOption{openright}{\@openrighttrue} +\DeclareOption{openany}{\@openrightfalse} +\fi +\if@compatibility\else +\DeclareOption{onecolumn}{\@twocolumnfalse} +\fi +\DeclareOption{twocolumn}{\@twocolumntrue} +\DeclareOption{leqno}{\input{leqno.clo}} +\DeclareOption{fleqn}{\input{fleqn.clo}} +\DeclareOption{openbib}{% + \AtEndOfPackage{% + \renewcommand\@openbib@code{% + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + }% + \renewcommand\newblock{\par}}% +} +\ExecuteOptions{letterpaper,10pt,twoside,onecolumn,final,openright} +\ProcessOptions +\input{bk1\@ptsize.clo} +\setlength\lineskip{1\p@} +\setlength\normallineskip{1\p@} +\renewcommand\baselinestretch{} +\setlength\parskip{0\p@ \@plus \p@} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +\setcounter{topnumber}{2} +\renewcommand\topfraction{.7} +\setcounter{bottomnumber}{1} +\renewcommand\bottomfraction{.3} +\setcounter{totalnumber}{3} +\renewcommand\textfraction{.2} +\renewcommand\floatpagefraction{.5} +\setcounter{dbltopnumber}{2} +\renewcommand\dbltopfraction{.7} +\renewcommand\dblfloatpagefraction{.5} +%%%% Select Chapter font. +\newcommand \textchapter [1] {\textsf{\textbf{#1}}} +\newcommand \fontchapter {\sffamily \bfseries} +\if@twoside + \def\ps@headings{% + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\thepage\hfil\slshape\leftmark}% + \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% + \let\@mkboth\markboth + \def\chaptermark##1{% + \markboth {\MakeUppercase{% + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \@chapapp\ \thechapter. \ % + \fi + \fi + ##1}}{}}% + \def\sectionmark##1{% + \markright {\MakeUppercase{% + \ifnum \c@secnumdepth >\z@ + \thesection. \ % + \fi + ##1}}}} +\else + \def\ps@headings{% + \let\@oddfoot\@empty + \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% + \let\@mkboth\markboth + \def\chaptermark##1{% + \markright {\MakeUppercase{% + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \@chapapp\ \thechapter. \ % + \fi + \fi + ##1}}}} +\fi +\def\ps@myheadings{% + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\thepage\hfil\slshape\leftmark}% + \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% + \let\@mkboth\@gobbletwo + \let\chaptermark\@gobble + \let\sectionmark\@gobble + } + \if@titlepage + \newcommand\maketitle{\begin{titlepage}% + \let\footnotesize\small + \let\footnoterule\relax + \let \footnote \thanks + \null\vfil + \vskip 60\p@ + \begin{center}% + {\LARGE \@title \par}% + \vskip 3em% + {\large + \lineskip .75em% + \begin{tabular}[t]{c}% + \@author + \end{tabular}\par}% + \vskip 1.5em% + {\large \@date \par}% % Set date in \large size. + \end{center}\par + \@thanks + \vfil\null + \end{titlepage}% + \setcounter{footnote}{0}% + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\@title\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax +} +\else +\newcommand\maketitle{\par + \begingroup + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}% + \long\def\@makefntext##1{\parindent 1em\noindent + \hb@xt@1.8em{% + \hss\@textsuperscript{\normalfont\@thefnmark}}##1}% + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else + \newpage + \global\@topnum\z@ % Prevents figures from going at top of page. + \@maketitle + \fi + \thispagestyle{plain}\@thanks + \endgroup + \setcounter{footnote}{0}% + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\@title\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax +} +\def\@maketitle{% + \newpage + \null + \vskip 2em% + \begin{center}% + \let \footnote \thanks + {\LARGE \@title \par}% + \vskip 1.5em% + {\large + \lineskip .5em% + \begin{tabular}[t]{c}% + \@author + \end{tabular}\par}% + \vskip 1em% + {\large \@date}% + \end{center}% + \par + \vskip 1.5em} +\fi +\newcommand*\chaptermark[1]{} +\setcounter{secnumdepth}{2} +\newcounter {part} +\newcounter {chapter} +\newcounter {section}[chapter] +\newcounter {subsection}[section] +\newcounter {subsubsection}[subsection] +\newcounter {paragraph}[subsubsection] +\newcounter {subparagraph}[paragraph] +\renewcommand \thepart {\@Roman\c@part} +\renewcommand \thechapter {\@arabic\c@chapter} +\renewcommand \thesection {\thechapter.\@arabic\c@section} +\renewcommand\thesubsection {\thesection.\@arabic\c@subsection} +\renewcommand\thesubsubsection{\thesubsection .\@arabic\c@subsubsection} +\renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph} +\renewcommand\thesubparagraph {\theparagraph.\@arabic\c@subparagraph} +\newcommand\@chapapp{\chaptername} +\newcommand\frontmatter{% + \cleardoublepage + \@mainmatterfalse + \pagenumbering{roman}} +\newcommand\mainmatter{% + \cleardoublepage + \@mainmattertrue + \pagenumbering{arabic}} +\newcommand\backmatter{% + \if@openright + \cleardoublepage + \else + \clearpage + \fi + \@mainmatterfalse} +\newcommand\part{% + \if@openright + \cleardoublepage + \else + \clearpage + \fi + \thispagestyle{plain}% + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi + \null\vfil + \secdef\@part\@spart} + +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi + \markboth{}{}% + {\centering + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >-2\relax + \huge\bfseries \partname\nobreakspace\thepart + \par + \vskip 20\p@ + \fi + \Huge \bfseries #2\par}% + \@endpart} +\def\@spart#1{% + {\centering + \interlinepenalty \@M + \normalfont + \Huge \bfseries #1\par}% + \@endpart} +\def\@endpart{\vfil\newpage + \if@twoside + \if@openright + \null + \thispagestyle{empty}% + \newpage + \fi + \fi + \if@tempswa + \twocolumn + \fi} +\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi + \thispagestyle{plain}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} +\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +%%%%\def\@makechapterhead#1{% +%%%% \vspace*{50\p@}% +%%%% {\parindent \z@ \raggedright \normalfont +%%%% \ifnum \c@secnumdepth >\m@ne +%%%% \if@mainmatter +%%%% \huge\bfseries \@chapapp\space \thechapter +%%%% \par\nobreak +%%%% \vskip 20\p@ +%%%% \fi +%%%% \fi +%%%% \interlinepenalty\@M +%%%% \Huge \bfseries #1\par\nobreak +%%%% \vskip 40\p@ +%%%% }} + \newlength \titlewidth + \setlength \titlewidth {\textwidth} + \addtolength \titlewidth {\marginparwidth} + \addtolength \titlewidth {\marginparsep} + \def\@makechapterhead#1{% + \vspace*{50\p@}% + {\parindent \z@ \raggedleft \fontchapter + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \huge \@chapapp\space \thechapter + \par\nobreak + \vskip 20\p@ + \fi + \fi + \interlinepenalty\@M + \hsize=\titlewidth + \Huge #1 \par\nobreak + \hsize=\textwidth + \vskip 40\p@ + }} +\def\@schapter#1{\if@twocolumn + \@topnewpage[\@makeschapterhead{#1}]% + \else + \@makeschapterhead{#1}% + \@afterheading + \fi} +%%%%\def\@makeschapterhead#1{% +%%%% \vspace*{50\p@}% +%%%% {\parindent \z@ \raggedright +%%%% \normalfont +%%%% \interlinepenalty\@M +%%%% \Huge \bfseries #1\par\nobreak +%%%% \vskip 40\p@ +%%%% }} + \def\@makeschapterhead#1{% + \vspace*{50\p@}% + {\parindent \z@ \raggedright + \normalfont + \interlinepenalty\@M + \hsize=\titlewidth + \flushright + \Huge \bfseries #1\par\nobreak + \hsize=\textwidth + \vskip 40\p@ + }} +\newcommand\section{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\normalfont\Large\bfseries}} +\newcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\large\bfseries}} +\newcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\normalsize\bfseries}} +\newcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} +\newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} +\if@twocolumn + \setlength\leftmargini {2em} +\else + \setlength\leftmargini {2.5em} +\fi +\leftmargin \leftmargini +\setlength\leftmarginii {2.2em} +\setlength\leftmarginiii {1.87em} +\setlength\leftmarginiv {1.7em} +\if@twocolumn + \setlength\leftmarginv {.5em} + \setlength\leftmarginvi {.5em} +\else + \setlength\leftmarginv {1em} + \setlength\leftmarginvi {1em} +\fi +\setlength \labelsep {.5em} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +\renewcommand\theenumi{\@arabic\c@enumi} +\renewcommand\theenumii{\@alph\c@enumii} +\renewcommand\theenumiii{\@roman\c@enumiii} +\renewcommand\theenumiv{\@Alph\c@enumiv} +\newcommand\labelenumi{\theenumi.} +\newcommand\labelenumii{(\theenumii)} +\newcommand\labelenumiii{\theenumiii.} +\newcommand\labelenumiv{\theenumiv.} +\renewcommand\p@enumii{\theenumi} +\renewcommand\p@enumiii{\theenumi(\theenumii)} +\renewcommand\p@enumiv{\p@enumiii\theenumiii} +\newcommand\labelitemi{\textbullet} +\newcommand\labelitemii{\normalfont\bfseries \textendash} +\newcommand\labelitemiii{\textasteriskcentered} +\newcommand\labelitemiv{\textperiodcentered} +\newenvironment{description} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +\newcommand*\descriptionlabel[1]{\hspace\labelsep + \normalfont\bfseries #1} +\newenvironment{verse} + {\let\\\@centercr + \list{}{\itemsep \z@ + \itemindent -1.5em% + \listparindent\itemindent + \rightmargin \leftmargin + \advance\leftmargin 1.5em}% + \item\relax} + {\endlist} +\newenvironment{quotation} + {\list{}{\listparindent 1.5em% + \itemindent \listparindent + \rightmargin \leftmargin + \parsep \z@ \@plus\p@}% + \item\relax} + {\endlist} +\newenvironment{quote} + {\list{}{\rightmargin\leftmargin}% + \item\relax} + {\endlist} +\if@compatibility +\newenvironment{titlepage} + {% + \cleardoublepage + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse\newpage + \fi + \thispagestyle{empty}% + \setcounter{page}\z@ + }% + {\if@restonecol\twocolumn \else \newpage \fi + } +\else +\newenvironment{titlepage} + {% + \cleardoublepage + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse\newpage + \fi + \thispagestyle{empty}% + \setcounter{page}\@ne + }% + {\if@restonecol\twocolumn \else \newpage \fi + \if@twoside\else + \setcounter{page}\@ne + \fi + } +\fi +\newcommand\appendix{\par + \setcounter{chapter}{0}% + \setcounter{section}{0}% + \gdef\@chapapp{\appendixname}% + \gdef\thechapter{\@Alph\c@chapter}} +\setlength\arraycolsep{5\p@} +\setlength\tabcolsep{6\p@} +\setlength\arrayrulewidth{.4\p@} +\setlength\doublerulesep{2\p@} +\setlength\tabbingsep{\labelsep} +\skip\@mpfootins = \skip\footins +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} +\@addtoreset {equation}{chapter} +\renewcommand\theequation + {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@equation} +\newcounter{figure}[chapter] +\renewcommand \thefigure + {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@figure} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename\nobreakspace\thefigure} +\newenvironment{figure} + {\@float{figure}} + {\end@float} +\newenvironment{figure*} + {\@dblfloat{figure}} + {\end@dblfloat} +\newcounter{table}[chapter] +\renewcommand \thetable + {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@table} +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename\nobreakspace\thetable} +\newenvironment{table} + {\@float{table}} + {\end@float} +\newenvironment{table*} + {\@dblfloat{table}} + {\end@dblfloat} +\newlength\abovecaptionskip +\newlength\belowcaptionskip +\setlength\abovecaptionskip{10\p@} +\setlength\belowcaptionskip{0\p@} +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip + \sbox\@tempboxa{#1: #2}% + \ifdim \wd\@tempboxa >\hsize + #1: #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} +\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} +\newcommand\@pnumwidth{1.55em} +\newcommand\@tocrmarg{2.55em} +\newcommand\@dotsep{4.5} +\setcounter{tocdepth}{2} +\newcommand\tableofcontents{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\contentsname + \@mkboth{% + \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}% + \@starttoc{toc}% + \if@restonecol\twocolumn\fi + } +\newcommand*\l@part[2]{% + \ifnum \c@tocdepth >-2\relax + \addpenalty{-\@highpenalty}% + \addvspace{2.25em \@plus\p@}% + \setlength\@tempdima{3em}% + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth + {\leavevmode + \large \bfseries #1\hfil \hb@xt@\@pnumwidth{\hss #2}}\par + \nobreak + \global\@nobreaktrue + \everypar{\global\@nobreakfalse\everypar{}}% + \endgroup + \fi} +%%%%\newcommand*\l@chapter[2]{% +%%%% \ifnum \c@tocdepth >\m@ne +%%%% \addpenalty{-\@highpenalty}% +%%%% \vskip 1.0em \@plus\p@ +%%%% \setlength\@tempdima{1.5em}% +%%%% \begingroup +%%%% \parindent \z@ \rightskip \@pnumwidth +%%%% \parfillskip -\@pnumwidth +%%%% \leavevmode \bfseries +%%%% \advance\leftskip\@tempdima +%%%% \hskip -\leftskip +%%%% #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par +%%%% \penalty\@highpenalty +%%%% \endgroup +%%%% \fi} +\newcommand\l@chapter[2]{% + \ifnum \c@tocdepth >\m@ne + \addpenalty{-\@highpenalty}% + \vskip 1.0em \@plus\p@ + \setlength\@tempdima{1.5em}% + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth + \leavevmode \fontchapter + \advance\leftskip\@tempdima + \hskip -\leftskip + #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par + \penalty\@highpenalty + \endgroup + \fi} +\newcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}} +\newcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}} +\newcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}} +\newcommand*\l@paragraph{\@dottedtocline{4}{10em}{5em}} +\newcommand*\l@subparagraph{\@dottedtocline{5}{12em}{6em}} +\newcommand\listoffigures{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\listfigurename}% + \@mkboth{\MakeUppercase\listfigurename}% + {\MakeUppercase\listfigurename}% + \@starttoc{lof}% + \if@restonecol\twocolumn\fi + } +\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}} +\newcommand\listoftables{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\listtablename}% + \@mkboth{% + \MakeUppercase\listtablename}% + {\MakeUppercase\listtablename}% + \@starttoc{lot}% + \if@restonecol\twocolumn\fi + } +\let\l@table\l@figure +\newdimen\bibindent +\setlength\bibindent{1.5em} +\newenvironment{thebibliography}[1] + {\chapter*{\bibname}% + \@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}% + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \@openbib@code + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \sloppy + \clubpenalty4000 + \@clubpenalty \clubpenalty + \widowpenalty4000% + \sfcode`\.\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} +\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em} +\let\@openbib@code\@empty +\newenvironment{theindex} + {\if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \columnseprule \z@ + \columnsep 35\p@ + \twocolumn[\@makeschapterhead{\indexname}]% + \@mkboth{\MakeUppercase\indexname}% + {\MakeUppercase\indexname}% + \thispagestyle{plain}\parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\@idxitem} + {\if@restonecol\onecolumn\else\clearpage\fi} +\newcommand\@idxitem{\par\hangindent 40\p@} +\newcommand\subitem{\@idxitem \hspace*{20\p@}} +\newcommand\subsubitem{\@idxitem \hspace*{30\p@}} +\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} +\renewcommand\footnoterule{% + \kern-3\p@ + \hrule\@width.4\columnwidth + \kern2.6\p@} +\@addtoreset{footnote}{chapter} +\newcommand\@makefntext[1]{% + \parindent 1em% + \noindent + \hb@xt@1.8em{\hss\@makefnmark}#1} +\newcommand\contentsname{Contents} +\newcommand\listfigurename{List of Figures} +\newcommand\listtablename{List of Tables} +\newcommand\bibname{Bibliography} +\newcommand\indexname{Index} +\newcommand\figurename{Figure} +\newcommand\tablename{Table} +\newcommand\partname{Part} +\newcommand\chaptername{Chapter} +\newcommand\appendixname{Appendix} +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +\setlength\columnsep{10\p@} +\setlength\columnseprule{0\p@} +\pagestyle{headings} +\pagenumbering{arabic} +\if@twoside +\else + \raggedbottom +\fi +\if@twocolumn + \twocolumn + \sloppy + \flushbottom +\else + \onecolumn +\fi +\endinput +%% +%% End of file `book.cls'. diff --git a/oroshi/doc/closed.png b/oroshi/doc/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..e4e2b25adb14b76c58d22aa1e4122e0c3338d4ac GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VE}kxqAr*{o=U(JwP~dQh&wG{9 z7bU@>l`1S#9&h*6jlsikGp7o-gD)%l1R2KAyPsb#-E|=@%i8tlX|Z2rRtJQ;8nPKn XltlO!^KID#G>^g4)z4*}Q$iB}Y*r*7 literal 0 HcmV?d00001 diff --git a/oroshi/doc/doxyfile b/oroshi/doc/doxyfile new file mode 100644 index 00000000..72a4e0c9 --- /dev/null +++ b/oroshi/doc/doxyfile @@ -0,0 +1,272 @@ +# -*- explicit-buffer-name: "doxyfile" -*- +# Doxyfile 1.3.4 + +# -------------------------------------------------------------------- +# Project related configuration options + +PROJECT_NAME = "Oroshi - Analog Devices Layout" +PROJECT_NUMBER = 1.0 +OUTPUT_DIRECTORY = . +OUTPUT_LANGUAGE = English +MARKDOWN_SUPPORT = NO +#USE_WINDOWS_ENCODING = NO +#LAYOUT_FILE = DoxygenLayout.xml +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +#DETAILS_AT_TOP = YES +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 2 +ALIASES = "function=\fn"\ + "important=\par Important:\n"\ + "remark=\par Remark:\n"\ + "sreturn=\b Returns:"\ + "True=\b True"\ + "true=\b true"\ + "False=\b False"\ + "false=\b false"\ + "VERTICAL=\b VERTICAL"\ + "HORIZONTAL=\b HORIZONTAL"\ + "NULL=\c NULL"\ + "vector=\c vector"\ + "Collection=\c Collection"\ + "Collections=\c Collections"\ + "Box=\c Box"\ + "box=\c box"\ + "Layer=\c Layer"\ + "Layers=\c Layers"\ + "Net=\c Net"\ + "Nets=\c Nets"\ + "Pin=\c Pin"\ + "Pins=\c Pins"\ + "Plug=\c Plug"\ + "Plugs=\c Plugs"\ + "RoutingPad=\c RoutingPad"\ + "RoutingPads=\c RoutingPads"\ + "Cell=\c Cell"\ + "Cells=\c Cells"\ + "ToolEngine=\c ToolEngine"\ + "ToolEngines=\c ToolEngines"\ + "GCell=\c GCell"\ + "GCells=\c GCells"\ + "Splitter=\c Splitter"\ + "Splitters=\c Splitters"\ + "SplitterContact=\c SplitterContact"\ + "SplitterContacts=\c SplitterContacts"\ + "Hurricane=Hurricane"\ + "STL=STL"\ + "red{1}=\1" +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES + +# -------------------------------------------------------------------- +# Build related configuration options + +EXTRACT_ALL = NO +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_ANON_NSPACES = YES +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = YES +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 1 +SHOW_USED_FILES = YES + +# -------------------------------------------------------------------- +# Configuration options related to warning and progress messages + +QUIET = YES +WARNINGS = YES +WARN_IF_UNDOCUMENTED = NO +WARN_IF_DOC_ERROR = YES +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = + +# -------------------------------------------------------------------- +# Configuration options related to the input files + +INPUT = \ + ../python/Stack.py \ + ../python/WIP_Transistor.py \ + ../python/WIP_DP.py \ + ../python/WIP_CSP.py + +FILE_PATTERNS = *.py + +RECURSIVE = YES + +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = . +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = images +INPUT_FILTER = +FILTER_SOURCE_FILES = YES + +# -------------------------------------------------------------------- +# Configuration options related to source browsing + +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES + +# -------------------------------------------------------------------- +# Configuration options related to the alphabetical class index + +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 2 +IGNORE_PREFIX = + +# -------------------------------------------------------------------- +# Configuration options related to the HTML output + +GENERATE_HTML = YES +#HTML_DYNAMIC_SECTIONS = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = header.html +HTML_FOOTER = footer.html +HTML_STYLESHEET = SoC.css +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 1 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 + +# -------------------------------------------------------------------- +# Configuration options related to the LaTeX output + +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = header.tex +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO + +# -------------------------------------------------------------------- +# Configuration options related to the RTF output + +GENERATE_RTF = YES +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = + +# -------------------------------------------------------------------- +# Configuration options related to the man page output + +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO + +# -------------------------------------------------------------------- +# Configuration options related to the XML output + +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = + +# -------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output + +GENERATE_AUTOGEN_DEF = NO + +# -------------------------------------------------------------------- +# Configuration options related to the Perl module output + +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = + +# -------------------------------------------------------------------- +# Configuration options related to the preprocessor + +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = __DOXYGEN__ +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES + +# -------------------------------------------------------------------- +# Configuration::addtions related to external references + +TAGFILES = ../../hurricane/doc/hurricane/html/hurricane.tag=../hurricane \ + ../../hurricane/doc/viewer/html/viewer.tag=../viewer \ + ../../crlcore/doc/crlcore/html/crlcore.tag=../crlcore +GENERATE_TAGFILE = html/katabatic.tag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl + +# -------------------------------------------------------------------- +# Configuration options related to the dot tool + +CLASS_DIAGRAMS = NO +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = NO +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = NO +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +#MAX_DOT_GRAPH_WIDTH = 512 +#MAX_DOT_GRAPH_HEIGHT = 1024 +#MAX_DOT_GRAPH_DEPTH = 0 +GENERATE_LEGEND = YES +DOT_CLEANUP = YES + +# -------------------------------------------------------------------- +# Configuration::addtions related to the search engine + +SEARCHENGINE = NO diff --git a/oroshi/doc/footer.html b/oroshi/doc/footer.html new file mode 100644 index 00000000..4dd72b90 --- /dev/null +++ b/oroshi/doc/footer.html @@ -0,0 +1,16 @@ +
                                                                                            +
                                                                                            + + + + + +
                                                                                            Generated by doxygen $doxygenversion on $dateReturn to top of page
                                                                                            + + + + + +
                                                                                            Oroshi - Analog Devices LayoutsCopyright © 2018-2018 UPMC. All rights reserved
                                                                                            + + diff --git a/oroshi/doc/header.html b/oroshi/doc/header.html new file mode 100644 index 00000000..749c5a2d --- /dev/null +++ b/oroshi/doc/header.html @@ -0,0 +1,26 @@ + + + + + Oroshi Documentation + + + + + +

                                                                                            Oroshi - Analog Devices Layouts

                                                                                            + +
                                                                                            + diff --git a/oroshi/doc/header.tex b/oroshi/doc/header.tex new file mode 100644 index 00000000..ec779312 --- /dev/null +++ b/oroshi/doc/header.tex @@ -0,0 +1,47 @@ + + + \documentclass[a4paper]{asimbook} + + \usepackage{a4wide} + \usepackage{makeidx} + \usepackage{fancyhdr} + \usepackage{graphicx} + \usepackage{multicol} + \usepackage{float} + \usepackage{textcomp} + \usepackage{alltt} + \usepackage{times} + \ifx\pdfoutput\undefined + \usepackage[ps2pdf,pagebackref=true,colorlinks=true,linkcolor=blue]{hyperref} + \usepackage{pspicture} + \else + \usepackage[pdftex,pagebackref=true,colorlinks=true,linkcolor=blue]{hyperref} + \fi + \usepackage{doxygen} + + \makeindex + \setcounter{tocdepth}{1} + \renewcommand{\footrulewidth}{0.4pt} + \raggedbottom + + + \begin{document} + + \begin{titlepage} + \vspace*{7cm} + \begin{center} + {\Large $projectname Reference Manual\\[1ex]\large $projectnumber }\\ + \vspace*{1cm} + {\large Generated by Doxygen $doxygenversion}\\ + \vspace*{0.5cm} + {\small $datetime}\\ + \end{center} + \end{titlepage} + + \clearemptydoublepage + \pagenumbering{roman} + + \tableofcontents + \clearemptydoublepage + + \pagenumbering{arabic} diff --git a/oroshi/doc/images/active-side-width-1.fig b/oroshi/doc/images/active-side-width-1.fig new file mode 100644 index 00000000..f64c6b5b --- /dev/null +++ b/oroshi/doc/images/active-side-width-1.fig @@ -0,0 +1,221 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 6255 630 8145 4995 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 7425 2925 7875 2925 7875 3375 7425 3375 7425 2925 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 6525 2925 6975 2925 6975 3375 6525 3375 6525 2925 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 6525 3825 6975 3825 6975 4275 6525 4275 6525 3825 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 7425 3825 7875 3825 7875 4275 7425 4275 7425 3825 +2 2 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 6300 675 8100 675 8100 4950 6300 4950 6300 675 +2 2 0 4 3 3 40 -1 20 7.500 0 0 -1 0 0 5 + 6570 945 6930 945 6930 1305 6570 1305 6570 945 +2 2 0 4 3 3 40 -1 20 7.500 0 0 -1 0 0 5 + 7470 945 7830 945 7830 1305 7470 1305 7470 945 +-6 +2 1 0 1 4 4 50 -1 35 0.000 0 0 -1 0 0 10 + 4950 6075 4500 6075 4500 5175 4725 5175 4725 2250 5175 2250 + 5175 5175 5400 5175 5400 6075 4950 6075 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 4725 2205 4725 2025 4275 1800 4275 1575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 4275 1710 4995 1710 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 4725 5400 5175 5400 5175 5850 4725 5850 4725 5400 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 1125 1710 2025 1710 +2 1 3 1 0 7 40 -1 -1 16.000 0 0 -1 0 0 2 + 2700 225 2700 1350 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 10305 2250 10305 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 10035 2250 10035 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 9765 2250 9765 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 9225 2250 9225 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8955 2250 8955 +2 1 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 4 + -2700 10575 -2700 8100 2250 8100 2250 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2250 8100 -2250 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -1800 8100 -1800 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8685 2250 8685 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8415 2250 8415 +2 2 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 + -2700 -225 9675 -225 9675 11250 -2700 11250 -2700 -225 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 2925 2925 3375 2925 3375 3375 2925 3375 2925 2925 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 2025 2925 2475 2925 2475 3375 2025 3375 2025 2925 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 2025 3825 2475 3825 2475 4275 2025 4275 2025 3825 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 2925 3825 3375 3825 3375 4275 2925 4275 2925 3825 +2 2 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 1800 675 3600 675 3600 4950 1800 4950 1800 675 +2 2 0 4 3 3 40 -1 20 7.500 0 0 -1 0 0 5 + 2070 945 2430 945 2430 1305 2070 1305 2070 945 +2 2 0 4 3 3 40 -1 20 7.500 0 0 -1 0 0 5 + 2970 945 3330 945 3330 1305 2970 1305 2970 945 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 2025 2835 2025 1575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 2475 2835 2475 1575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 2925 2835 2925 1575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 3375 2790 3375 1575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 2025 1710 2475 1710 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 2925 1710 3375 1710 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 1 2 + 5 1 1.00 60.00 120.00 + 2250 4050 2700 5850 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 1 2 + 5 1 1.00 60.00 120.00 + 3150 4050 2700 5850 +2 2 0 0 12 12 65 -1 35 0.000 0 0 -1 0 0 5 + 1350 2475 8550 2475 8550 4725 1350 4725 1350 2475 +2 2 0 1 12 7 60 -1 44 0.000 0 0 -1 0 0 5 + 1575 2700 8325 2700 8325 4500 1575 4500 1575 2700 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 1125 1575 1125 2025 1575 2250 1575 2655 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -675 1710 1125 1710 +2 2 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 5 + 4275 4950 5625 4950 5625 6300 4275 6300 4275 4950 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 1800 5850 2700 5850 +2 1 3 1 0 7 40 -1 -1 16.000 0 0 -1 0 0 4 + 4950 1125 4950 6525 5400 6750 5400 7335 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 4725 5940 4725 7335 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 4275 6390 4275 7335 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 3600 5040 3600 6525 3825 6750 3825 7335 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 3375 4365 3375 7335 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 2925 6525 2925 7335 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 2475 6525 2475 7335 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 2025 6525 2025 7335 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 2925 7155 3375 7155 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 3375 7155 3825 7155 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 3825 7155 4275 7155 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 4275 7155 4680 7155 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 4725 7155 5400 7155 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 1125 7290 1125 6750 1575 6525 1575 4545 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -675 7155 1125 7155 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 1125 7155 2025 7155 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 9495 2250 9495 +2 2 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 + -2700 10575 2250 10575 2250 11250 -2700 11250 -2700 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 2475 1710 2925 1710 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 3375 1710 4275 1710 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 2025 7155 2475 7155 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 2475 7155 2925 7155 +4 1 0 40 -1 12 12 0.0000 4 75 120 -2475 10485 a\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 10215 b\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 -2475 9945 c\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 9675 d\001 +4 0 0 40 -1 12 12 0.0000 4 120 2400 -1575 9675 self.contactGateSide\001 +4 0 0 40 -1 12 12 0.0000 4 165 2760 -1575 10485 self.contactGateSpacing\001 +4 0 0 40 -1 12 12 0.0000 4 165 2400 -1575 10215 self.contactNimpSide\001 +4 0 0 40 -1 12 12 0.0000 4 165 2760 -1575 9945 self.contactNimpSpacing\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 10485 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 10215 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 9945 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 9675 T\001 +4 0 0 40 -1 14 12 0.0000 4 120 480 1800 5805 NERC\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 9405 h\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 9135 i\001 +4 1 0 40 -1 12 12 0.0000 4 165 120 -2475 8865 j\001 +4 1 0 40 -1 12 12 0.0000 4 105 120 -2475 8325 L\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 9405 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 9135 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 8865 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 8325 U\001 +4 0 0 40 -1 12 12 0.0000 4 165 2160 -1575 9405 self.metal1Spacing\001 +4 0 0 40 -1 12 12 0.0000 4 165 2640 -1575 9135 self.metal1Via1Overlap\001 +4 0 0 40 -1 12 12 0.0000 4 165 3000 -1575 8865 self.metal1ContactOverlap\001 +4 0 0 40 -1 16 12 0.0000 4 195 2190 -1575 8325 Transistor channel length\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 8595 k\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 8595 T\001 +4 0 0 40 -1 12 12 0.0000 4 165 3000 -1575 8595 self.activeContactOverlap\001 +4 1 0 40 -1 14 22 0.0000 4 225 4200 -270 11025 self.activeSideWidth\001 +4 0 0 40 -1 14 12 0.0000 4 120 600 -675 1620 side1\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 1575 1620 k\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 2250 1620 b\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 2700 1620 c\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 3825 1620 a\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 3150 1620 b\001 +4 1 0 40 -1 14 12 0.0000 4 150 360 4590 1620 L/2\001 +4 0 0 40 -1 14 12 0.0000 4 120 600 -675 7065 side2\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 1575 7065 k\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 2250 7065 b\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 2700 7065 c\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 3150 7065 b\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 3600 7065 i\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 4050 7065 h\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 4500 7065 i\001 +4 1 0 40 -1 12 12 0.0000 4 150 360 5040 7065 d/2\001 diff --git a/oroshi/doc/images/active-side-width-1.pdf b/oroshi/doc/images/active-side-width-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..392e04928f77827da853b02d2a23e341e69b15b2 GIT binary patch literal 15291 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 literal 0 HcmV?d00001 diff --git a/oroshi/doc/images/active-side-width-1.png b/oroshi/doc/images/active-side-width-1.png new file mode 100644 index 0000000000000000000000000000000000000000..376f599a436b5d0a345e9c61ee2c3f5e51dcaa72 GIT binary patch literal 23941 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 HxdRITuWRVO literal 0 HcmV?d00001 diff --git a/oroshi/doc/images/gate-pitch-1.fig b/oroshi/doc/images/gate-pitch-1.fig new file mode 100644 index 00000000..3ca46138 --- /dev/null +++ b/oroshi/doc/images/gate-pitch-1.fig @@ -0,0 +1,323 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 6255 630 8145 4995 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 7425 2925 7875 2925 7875 3375 7425 3375 7425 2925 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 6525 2925 6975 2925 6975 3375 6525 3375 6525 2925 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 6525 3825 6975 3825 6975 4275 6525 4275 6525 3825 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 7425 3825 7875 3825 7875 4275 7425 4275 7425 3825 +2 2 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 6300 675 8100 675 8100 4950 6300 4950 6300 675 +2 2 0 4 3 3 40 -1 20 7.500 0 0 -1 0 0 5 + 6570 945 6930 945 6930 1305 6570 1305 6570 945 +2 2 0 4 3 3 40 -1 20 7.500 0 0 -1 0 0 5 + 7470 945 7830 945 7830 1305 7470 1305 7470 945 +-6 +6 -2745 10530 1845 11295 +2 2 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 + -2700 10575 1800 10575 1800 11250 -2700 11250 -2700 10575 +4 1 0 40 -1 14 22 0.0000 4 300 2940 -450 11025 self.gatePitch\001 +-6 +2 1 3 1 0 7 40 -1 -1 16.000 0 0 -1 0 0 2 + 450 1125 450 7200 +2 1 3 1 0 7 40 -1 -1 16.000 0 0 -1 0 0 2 + 4950 1125 4950 7200 +2 1 0 1 4 4 50 -1 35 0.000 0 0 -1 0 0 10 + 450 6075 0 6075 0 5175 225 5175 225 2250 675 2250 + 675 5175 900 5175 900 6075 450 6075 +2 1 0 1 4 4 50 -1 35 0.000 0 0 -1 0 0 10 + 4950 6075 4500 6075 4500 5175 4725 5175 4725 2250 5175 2250 + 5175 5175 5400 5175 5400 6075 4950 6075 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 675 2205 675 2025 1125 1800 1125 1575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 4725 2205 4725 2025 4275 1800 4275 1575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 450 1710 1125 1710 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 3375 1710 4275 1710 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 4275 1710 4995 1710 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 225 5400 675 5400 675 5850 225 5850 225 5400 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 4725 5400 5175 5400 5175 5850 4725 5850 4725 5400 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 675 5940 675 6300 1125 6525 1125 6885 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 4725 5940 4725 6300 4275 6525 4275 6885 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 450 6705 1125 6705 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 1125 6705 1800 6705 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 1800 6705 3600 6705 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 4275 6705 4950 6705 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 900 6120 900 6300 1800 6525 1800 6885 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 1125 1710 2025 1710 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -1350 1710 450 1710 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -1350 6705 495 6705 +2 2 0 0 12 12 65 -1 35 0.000 0 0 -1 0 0 5 + -450 2475 8550 2475 8550 4725 -450 4725 -450 2475 +2 2 0 1 12 7 60 -1 44 0.000 0 0 -1 0 0 5 + -270 2700 8325 2700 8325 4500 -270 4500 -270 2700 +2 1 3 1 0 7 40 -1 -1 16.000 0 0 -1 0 0 2 + 2700 225 2700 1350 +2 1 3 1 0 7 40 -1 -1 16.000 0 0 -1 0 0 2 + 7200 225 7200 1350 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 3600 540 3600 225 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 6300 585 6300 225 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 2700 405 3600 405 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 3600 405 6300 405 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 6300 405 7200 405 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 2700 405 -1350 405 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 6525 4365 6525 5760 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 6975 4365 6975 5760 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 7425 4365 7425 5760 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 7875 4365 7875 5760 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 6300 5040 6300 5175 5850 5400 5850 5760 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 8100 4995 8100 5175 8550 5445 8550 5760 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 5850 5580 6525 5580 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 6525 5580 6975 5580 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 6975 5580 7425 5580 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 7425 5580 7875 5580 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 7875 5580 8550 5580 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 6525 1395 6525 2160 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 6975 1395 6975 2160 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 7425 1350 7425 2160 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 7875 1350 7875 2160 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 8190 1350 8190 1575 8550 1800 8550 2160 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 6210 1350 6210 1575 5850 1800 5850 2160 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 5850 1980 6525 1980 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 6525 1980 6975 1980 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 6975 1980 7425 1980 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 7425 1980 7875 1980 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 7875 1980 8550 1980 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 8550 1980 9225 1980 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 8550 5580 9225 5580 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 10305 1800 10305 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 10035 1800 10035 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 9765 1800 9765 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 9495 1800 9495 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 9225 1800 9225 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8955 1800 8955 +2 1 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 4 + -2700 10575 -2700 7605 1800 7605 1800 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2250 7605 -2250 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -1800 7605 -1800 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8685 1800 8685 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8415 1800 8415 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8145 1800 8145 +2 2 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 + -2700 -225 9675 -225 9675 11250 -2700 11250 -2700 -225 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 7875 1845 7875 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 7 0 0 4 + 4500 6120 4500 6345 3600 6525 3600 6885 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 3600 6705 4275 6705 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 2925 2925 3375 2925 3375 3375 2925 3375 2925 2925 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 2025 2925 2475 2925 2475 3375 2025 3375 2025 2925 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 2025 3825 2475 3825 2475 4275 2025 4275 2025 3825 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 2925 3825 3375 3825 3375 4275 2925 4275 2925 3825 +2 2 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 1800 675 3600 675 3600 4950 1800 4950 1800 675 +2 2 0 4 3 3 40 -1 20 7.500 0 0 -1 0 0 5 + 2070 945 2430 945 2430 1305 2070 1305 2070 945 +2 2 0 4 3 3 40 -1 20 7.500 0 0 -1 0 0 5 + 2970 945 3330 945 3330 1305 2970 1305 2970 945 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 2025 2835 2025 1575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 2475 2835 2475 1575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 2925 2835 2925 1575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 3375 2790 3375 1575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 2025 1710 2475 1710 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 2475 1710 2925 1710 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 2925 1710 3375 1710 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 1 2 + 5 1 1.00 60.00 120.00 + 2250 4050 2700 5850 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 1 2 + 5 1 1.00 60.00 120.00 + 3150 4050 2700 5850 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 2700 5850 3600 5850 +4 2 0 40 -1 14 12 0.0000 4 165 240 9225 5490 g1\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 -2475 10485 a\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 10215 b\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 -2475 9945 c\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 9675 d\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 -2475 9405 e\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 9135 f\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 8820 g\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 8595 h\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 8325 i\001 +4 1 0 40 -1 12 12 0.0000 4 165 120 -2475 8055 j\001 +4 0 0 40 -1 12 12 0.0000 4 120 2400 -1575 9675 self.contactGateSide\001 +4 0 0 40 -1 12 12 0.0000 4 165 2760 -1575 9405 self.polyContactOverlap\001 +4 0 0 40 -1 12 12 0.0000 4 165 1920 -1575 9135 self.gateSpacing\001 +4 0 0 40 -1 12 12 0.0000 4 165 2760 -1575 10485 self.contactGateSpacing\001 +4 0 0 40 -1 12 12 0.0000 4 165 2400 -1575 10215 self.contactNimpSide\001 +4 0 0 40 -1 12 12 0.0000 4 165 2760 -1575 9945 self.contactNimpSpacing\001 +4 0 0 40 -1 12 12 0.0000 4 165 1560 -1575 8865 max( g1, g2 )\001 +4 0 0 40 -1 12 12 0.0000 4 165 2160 -1575 8595 self.metal1Spacing\001 +4 0 0 40 -1 12 12 0.0000 4 165 3000 -1575 8055 self.metal1ContactOverlap\001 +4 0 0 40 -1 12 12 0.0000 4 165 2640 -1575 8325 self.metal1Via1Overlap\001 +4 1 0 40 -1 12 12 0.0000 4 105 120 -2475 7785 L\001 +4 0 0 40 -1 16 12 0.0000 4 195 2190 -1575 7785 Transistor channel length\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 10485 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 10215 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 9945 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 9675 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 9405 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 8595 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 8055 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 7785 U\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 9135 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 8325 T\001 +4 2 0 40 -1 14 12 0.0000 4 120 480 3600 5805 NIRC\001 +4 0 0 40 -1 14 12 0.0000 4 165 720 -1350 1620 pitch1\001 +4 1 0 40 -1 14 12 0.0000 4 150 360 810 1620 L/2\001 +4 0 0 40 -1 14 12 0.0000 4 165 720 -1350 315 pitch3\001 +4 1 0 40 -1 14 12 0.0000 4 180 360 3150 315 g/2\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 1575 1620 a\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 2250 1620 b\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 2700 1620 c\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 3150 1620 b\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 3825 1620 a\001 +4 1 0 40 -1 14 12 0.0000 4 150 360 4590 1620 L/2\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 4950 315 h\001 +4 1 0 40 -1 14 12 0.0000 4 180 360 6750 315 g/2\001 +4 1 0 40 -1 12 12 0.0000 4 165 120 6165 1890 j\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 6750 1890 b\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 7200 1890 c\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 7650 1890 b\001 +4 1 0 40 -1 12 12 0.0000 4 165 120 8235 1890 j\001 +4 2 0 40 -1 14 12 0.0000 4 165 240 9225 1890 g2\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 8190 5490 i\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 7650 5490 b\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 7200 5490 c\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 6750 5490 b\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 6210 5490 i\001 +4 0 0 40 -1 14 12 0.0000 4 165 720 -1350 6615 pitch2\001 +4 1 0 40 -1 12 12 0.0000 4 150 360 810 6615 d/2\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 1440 6615 e\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 2700 6615 f\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 3960 6570 e\001 +4 1 0 40 -1 12 12 0.0000 4 150 360 4635 6615 d/2\001 diff --git a/oroshi/doc/images/gate-pitch-1.pdf b/oroshi/doc/images/gate-pitch-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2159220caaaaad5c1356f9222c2a40272b6250f6 GIT binary patch literal 16880 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 literal 0 HcmV?d00001 diff --git a/oroshi/doc/images/htrack-distance-1.fig b/oroshi/doc/images/htrack-distance-1.fig new file mode 100644 index 00000000..19d09a77 --- /dev/null +++ b/oroshi/doc/images/htrack-distance-1.fig @@ -0,0 +1,215 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 10035 2250 10035 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 9765 2250 9765 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 9225 2250 9225 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8955 2250 8955 +2 1 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 4 + -2700 10575 -2700 7875 2250 7875 2250 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2250 7875 -2250 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -1800 7875 -1800 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8685 2250 8685 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8415 2250 8415 +2 2 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 + -2700 -225 9675 -225 9675 11250 -2700 11250 -2700 -225 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 9495 2250 9495 +2 2 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 + -2700 10575 2250 10575 2250 11250 -2700 11250 -2700 10575 +2 2 0 1 12 7 60 -1 44 0.000 0 0 -1 0 0 5 + 3825 2700 6075 2700 6075 4500 3825 4500 3825 2700 +2 2 0 0 12 12 65 -1 35 0.000 0 0 -1 0 0 5 + 3600 2475 6300 2475 6300 4725 3600 4725 3600 2475 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 3735 4500 2250 4500 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 6165 4500 7515 4500 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 2520 3825 2520 4500 +2 1 0 1 4 4 50 -1 35 0.000 0 0 -1 0 0 10 + 4950 6300 4500 6300 4500 5400 4725 5400 4725 2250 5175 2250 + 5175 5400 5400 5400 5400 6300 4950 6300 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 4725 5625 5175 5625 5175 6075 4725 6075 4725 5625 +2 2 0 4 1 7 50 -1 -1 10.000 0 0 -1 0 0 5 + 4275 5175 5625 5175 5625 6525 4275 6525 4275 5175 +2 1 3 1 0 7 40 -1 -1 16.000 0 0 -1 0 0 2 + -2475 5850 8550 5850 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 4590 5625 3150 5625 2925 5400 2250 5400 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 4410 5400 3150 5400 2880 4950 2250 4950 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 5265 5625 6750 5625 6975 5400 7515 5400 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 2520 5850 2520 5355 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 2520 5355 2520 4950 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 7380 5850 7380 5400 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 2520 4500 2520 4950 +2 1 3 1 0 7 40 -1 -1 16.000 0 0 -1 0 0 2 + 2025 1350 8100 1350 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 6120 2700 8325 2700 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 7875 4500 8325 4500 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 8055 5850 8055 7650 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 8055 4500 8055 5850 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 8055 2700 8055 4500 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 8055 1350 8055 2700 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 10305 2250 10305 +2 2 0 4 3 3 50 -1 -1 10.000 0 0 -1 0 0 5 + -1395 5400 900 5400 900 6300 -1395 6300 -1395 5400 +2 2 0 1 3 3 50 -1 20 4.000 0 0 -1 0 0 5 + -495 5580 45 5580 45 6120 -495 6120 -495 5580 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 990 5400 1665 5400 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + -585 5580 -1575 5580 -1800 5400 -2250 5400 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + -1485 5400 -1575 5400 -1800 4950 -2250 4950 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 1530 3600 1530 4050 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 1530 4050 1530 5400 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 1530 5400 1530 5850 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -1980 3600 -1980 2250 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 1530 3600 1530 2250 +2 2 0 4 1 7 55 -1 -1 10.000 0 0 -1 0 0 5 + -675 2925 225 2925 225 6525 -675 6525 -675 2925 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8145 2250 8145 +2 1 3 1 0 7 40 -1 -1 16.000 0 0 -1 0 0 2 + -2475 3600 1800 3600 +2 2 0 4 3 3 50 -1 -1 10.000 0 0 -1 0 0 5 + -1350 3150 945 3150 945 4050 -1350 4050 -1350 3150 +2 2 0 1 3 3 50 -1 20 4.000 0 0 -1 0 0 5 + -495 3330 45 3330 45 3870 -495 3870 -495 3330 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 1035 4050 1665 4050 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + -585 3870 -1575 3870 -1800 4050 -2250 4050 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + -1395 4050 -1575 4050 -1800 4500 -2250 4500 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + -1980 5400 -1980 5850 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + -1980 4950 -1980 5400 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + -1980 4500 -1980 4950 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + -1980 4050 -1980 4500 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + -1980 3600 -1980 4050 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 7380 4500 7380 3825 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 7380 4500 7380 5400 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 10485 d\001 +4 1 0 40 -1 14 22 0.0000 4 225 3990 -270 11025 self.hTrackDistance\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 10485 T\001 +4 0 0 40 -1 12 12 0.0000 4 120 2400 -1575 10485 self.contactGateSide\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 -2475 10215 m\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 -2475 9675 o\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 -2475 9945 n\001 +4 0 0 40 -1 12 12 0.0000 4 165 2760 -1575 10215 self.polyContactOverlap\001 +4 0 0 40 -1 12 12 0.0000 4 165 2640 -1575 9945 self.gateActiveSpacing\001 +4 0 0 40 -1 12 12 0.0000 4 165 3000 -1575 9675 self.contactActiveSpacing\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 10215 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 9945 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 9675 T\001 +4 1 0 40 -1 12 12 1.5708 4 120 360 7965 2025 htd\001 +4 1 0 40 -1 12 12 0.0000 4 120 360 -2475 9450 htd\001 +4 1 0 40 -1 12 12 0.0000 4 105 120 -2475 9135 W\001 +4 0 0 40 -1 12 12 0.0000 4 150 2040 -1575 9450 max( htd1, htd2 )\001 +4 0 0 40 -1 16 12 0.0000 4 195 2775 -1575 9180 Transistor channel width (finger)\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 9180 U\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 8865 p\001 +4 1 0 40 -1 12 12 0.0000 4 120 120 -2475 8595 q\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 -2475 8055 s\001 +4 1 0 40 -1 12 12 0.0000 4 75 120 -2475 8325 r\001 +4 0 0 40 -1 12 12 0.0000 4 120 1920 -1575 8865 self.metal2Width\001 +4 0 0 40 -1 12 12 0.0000 4 165 2160 -1575 8595 self.metal2Spacing\001 +4 0 0 40 -1 12 12 0.0000 4 165 2640 -1575 8055 self.metal2Via1Overlap\001 +4 0 0 40 -1 12 12 0.0000 4 120 1560 -1575 8325 self.via1Side\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 8865 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 8595 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 8325 T\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 8055 T\001 +4 1 0 40 -1 12 12 1.5708 4 150 360 -2070 5625 r/2\001 +4 1 0 40 -1 12 12 1.5708 4 75 120 -2070 5175 s\001 +4 1 0 40 -1 12 12 1.5708 4 120 120 -2070 4770 q\001 +4 1 0 40 -1 12 12 1.5708 4 75 120 -2070 4275 s\001 +4 1 0 40 -1 12 12 1.5708 4 150 360 -2070 3825 r/2\001 +4 1 0 40 -1 12 12 1.5708 4 180 360 1440 3825 p/2\001 +4 1 0 40 -1 12 12 1.5708 4 120 120 1440 4725 q\001 +4 1 0 40 -1 12 12 1.5708 4 180 360 1440 5625 p/2\001 +4 1 0 40 -1 12 12 1.5708 4 150 360 2430 5625 d/2\001 +4 1 0 40 -1 12 12 1.5708 4 75 120 2430 5175 m\001 +4 1 0 40 -1 12 12 1.5708 4 75 120 2430 4725 n\001 +4 2 0 40 -1 14 12 1.5708 4 120 480 2430 3825 htd1\001 +4 2 0 40 -1 14 12 1.5708 4 165 720 1440 2250 pitch2\001 +4 2 0 40 -1 14 12 1.5708 4 165 720 -2070 2250 pitch1\001 +4 2 0 40 -1 14 12 1.5708 4 120 480 7290 3825 htd2\001 +4 1 0 40 -1 12 12 1.5708 4 75 120 7290 4950 o\001 +4 1 0 40 -1 12 12 1.5708 4 150 360 7290 5625 d/2\001 +4 1 0 40 -1 12 12 1.5708 4 120 360 7965 5220 htd\001 +4 1 0 40 -1 14 12 1.5708 4 120 120 7965 3600 W\001 +4 0 0 40 -1 14 12 1.5708 4 165 1440 7965 7650 activeHeight\001 diff --git a/oroshi/doc/images/htrack-distance-1.pdf b/oroshi/doc/images/htrack-distance-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..be033cf2d818a4d5778a167830c405c7a5e2b0ef GIT binary patch literal 15677 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%0A85K}Y*x>2521!Qu6MoxWp{IfR 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 Cg+jdm literal 0 HcmV?d00001 diff --git a/oroshi/doc/images/stack-layout-1.png b/oroshi/doc/images/stack-layout-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3b8b5587fb19da8d3c5eed74e01dfd684a045728 GIT binary patch literal 29291 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

                                                                                            y&f*>b*m$6jjC7e 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 U$co!X>1KreZ`1&4{BQpLU+@lSSpWb4 literal 0 HcmV?d00001 diff --git a/oroshi/doc/images/stack-layout-2.fig b/oroshi/doc/images/stack-layout-2.fig new file mode 100644 index 00000000..58e5e225 --- /dev/null +++ b/oroshi/doc/images/stack-layout-2.fig @@ -0,0 +1,175 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 1 0 1 3 7 39 -1 -1 3.000 0 0 -1 0 0 2 + -1350 7650 -1350 8100 +2 1 0 1 3 7 39 -1 -1 3.000 0 0 -1 0 0 2 + 0 7650 0 8100 +2 1 0 1 3 7 39 -1 -1 3.000 0 0 -1 0 0 2 + 1350 7650 1350 8100 +2 1 0 1 3 7 39 -1 -1 3.000 0 0 -1 0 0 2 + 2700 7650 2700 8100 +2 1 0 1 3 7 39 -1 -1 3.000 0 0 -1 0 0 2 + 4050 7650 4050 8100 +2 1 0 1 3 7 39 -1 -1 3.000 0 0 -1 0 0 2 + 5400 7650 5400 8100 +2 1 0 1 3 7 39 -1 -1 3.000 0 0 -1 0 0 2 + -1800 6975 -2250 6975 +2 1 0 1 3 7 39 -1 -1 3.000 0 0 -1 0 0 2 + -1800 4275 -2250 4275 +2 1 0 1 3 7 39 -1 -1 3.000 0 0 -1 0 0 2 + -1800 2925 -2250 2925 +2 1 0 1 3 7 39 -1 -1 3.000 0 0 -1 0 0 2 + -1800 1575 -2250 1575 +2 1 0 1 3 7 39 -1 -1 3.000 0 0 -1 0 0 2 + 6750 7650 6750 8100 +2 2 0 4 3 7 49 -1 -1 0.000 0 0 -1 0 0 5 + -1350 6750 6750 6750 6750 7200 -1350 7200 -1350 6750 +2 2 0 4 3 7 49 -1 -1 0.000 0 0 -1 0 0 5 + -1350 5400 6750 5400 6750 5850 -1350 5850 -1350 5400 +2 1 0 1 0 7 40 -1 -1 0.000 0 0 -1 0 0 2 + 5850 2430 5850 900 +2 1 0 1 0 7 40 -1 -1 0.000 0 0 -1 0 0 2 + -450 2430 -450 945 +2 2 0 0 12 12 65 -1 35 0.000 0 0 -1 0 0 5 + -450 2475 5850 2475 5850 4725 -450 4725 -450 2475 +2 2 0 1 12 7 60 -1 44 0.000 0 0 -1 0 0 5 + -270 2700 5580 2700 5580 4500 -270 4500 -270 2700 +2 2 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4725 2250 5175 2250 5175 7425 4725 7425 4725 2250 +2 2 0 1 4 4 50 -1 35 0.000 0 0 -1 0 0 5 + 3600 2250 4050 2250 4050 6075 3600 6075 3600 2250 +2 2 0 1 4 4 50 -1 35 0.000 0 0 -1 0 0 5 + 1350 2250 1800 2250 1800 6075 1350 6075 1350 2250 +2 1 0 1 0 7 40 -1 20 0.000 0 0 -1 0 0 2 + 5940 2250 6300 2250 +2 1 0 1 0 7 40 -1 20 0.000 0 0 -1 0 0 2 + 5940 4950 6300 4950 +2 1 0 1 0 7 40 -1 20 0.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 6165 2250 6165 4950 +2 1 0 2 0 7 40 -1 20 0.000 0 0 -1 1 1 2 + 14 1 2.00 120.00 60.00 + 14 1 2.00 120.00 60.00 + 6165 4950 6165 5625 +2 1 0 2 0 7 40 -1 20 0.000 0 0 -1 1 1 2 + 14 1 2.00 120.00 60.00 + 14 1 2.00 120.00 60.00 + 6165 2250 6165 1575 +2 1 0 1 0 7 40 -1 -1 0.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + -450 990 5850 990 +2 1 0 2 0 7 40 -1 20 0.000 0 0 -1 1 1 2 + 14 1 2.00 120.00 60.00 + 14 1 2.00 120.00 60.00 + -1350 990 -450 990 +2 1 0 2 0 7 40 -1 20 0.000 0 0 -1 1 1 2 + 14 1 2.00 120.00 60.00 + 14 1 2.00 120.00 60.00 + 5850 990 6750 990 +2 1 0 1 0 7 40 -1 20 0.000 0 0 -1 0 0 2 + -1350 1485 -1350 945 +2 1 0 1 0 7 40 -1 20 0.000 0 0 -1 0 0 2 + 6750 1530 6750 900 +2 1 0 1 0 7 40 -1 20 3.000 0 0 -1 0 0 2 + -225 4590 -225 7650 +2 1 0 1 0 7 40 -1 20 3.000 0 0 -1 0 0 2 + -360 4500 -1800 4500 +2 1 0 1 0 7 40 -1 20 3.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + -1350 7560 -225 7560 +2 1 0 1 0 7 40 -1 20 3.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + -1485 4500 -1485 6975 +2 1 0 1 3 7 39 -1 -1 3.000 0 0 -1 0 0 2 + -1800 5625 -2250 5625 +2 1 0 1 0 7 40 -1 20 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 7650 6300 6840 5625 +2 1 0 1 0 7 40 -1 20 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 7650 6300 6885 6975 +2 1 0 1 0 7 40 -1 20 3.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 7650 900 6840 1575 +2 1 0 1 0 7 40 -1 20 3.000 0 0 -1 0 0 2 + 7650 6300 9315 6300 +2 1 0 1 0 7 40 -1 20 3.000 0 0 -1 0 0 2 + 7650 900 9360 900 +2 1 0 1 0 7 40 -1 20 3.000 0 0 -1 0 0 2 + -1350 450 -1350 990 +2 1 0 1 0 7 40 -1 20 3.000 0 0 -1 0 0 2 + 6750 450 6750 990 +2 1 0 1 0 7 40 -1 20 3.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + -1350 585 6795 585 +2 1 0 1 0 7 40 -1 20 3.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 6615 5625 6615 1575 +2 2 0 1 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 + -2700 0 9675 0 9675 9675 -2700 9675 -2700 0 +2 2 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 + -2700 8955 1800 8955 1800 9675 -2700 9675 -2700 8955 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 360 2970 540 2970 540 3150 360 3150 360 2970 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 360 3870 540 3870 540 4050 360 4050 360 3870 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 4860 3015 5040 3015 5040 3195 4860 3195 4860 3015 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 4860 3870 5040 3870 5040 4050 4860 4050 4860 3870 +2 2 0 4 3 3 40 -1 20 7.500 0 0 -1 0 0 5 + 270 6795 630 6795 630 7155 270 7155 270 6795 +2 2 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 225 2250 675 2250 675 7425 225 7425 225 2250 +2 2 0 4 3 3 40 -1 20 7.500 0 0 -1 0 0 5 + 4770 6795 5130 6795 5130 7155 4770 7155 4770 6795 +2 2 0 4 3 7 49 -1 -1 0.000 0 0 -1 0 0 5 + -1350 1350 6750 1350 6750 1800 -1350 1800 -1350 1350 +2 2 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 2475 1125 2925 1125 2925 4950 2475 4950 2475 1125 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 2610 3915 2790 3915 2790 4095 2610 4095 2610 3915 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 2610 3015 2790 3015 2790 3195 2610 3195 2610 3015 +2 2 1 1 25 7 39 -1 -1 9.000 0 0 -1 0 0 5 + -1350 1575 6750 1575 6750 6975 -1350 6975 -1350 1575 +2 2 0 4 3 3 40 -1 20 7.500 0 0 -1 0 0 5 + 2520 1395 2880 1395 2880 1755 2520 1755 2520 1395 +2 2 0 4 3 3 40 -1 20 7.500 0 0 -1 0 0 5 + 1395 5445 1755 5445 1755 5805 1395 5805 1395 5445 +2 2 0 4 3 3 40 -1 20 7.500 0 0 -1 0 0 5 + 3645 5445 4005 5445 4005 5805 3645 5805 3645 5445 +4 1 3 39 -1 18 14 0.0000 4 165 135 -1170 8055 0\001 +4 1 3 39 -1 18 14 0.0000 4 165 135 270 8100 1\001 +4 1 3 39 -1 18 14 0.0000 4 165 135 1530 8100 2\001 +4 1 3 39 -1 18 14 0.0000 4 165 135 2880 8100 3\001 +4 1 3 39 -1 18 14 0.0000 4 165 135 4185 8100 4\001 +4 1 3 39 -1 18 14 0.0000 4 165 135 5535 8055 5\001 +4 1 3 39 -1 18 14 0.0000 4 165 135 -2160 1440 4\001 +4 1 3 39 -1 18 14 0.0000 4 165 135 -2160 2835 3\001 +4 1 3 39 -1 18 14 0.0000 4 165 135 -2160 4185 2\001 +4 1 3 39 -1 18 14 0.0000 4 165 135 -2160 6885 0\001 +4 1 3 39 -1 18 14 0.0000 4 165 135 -2160 5535 1\001 +4 1 3 39 -1 18 14 0.0000 4 165 135 6885 8055 7\001 +4 1 0 40 -1 12 12 1.5708 4 165 1800 6075 3600 diffusionHeight\001 +4 1 0 40 -1 12 12 0.0000 4 120 1680 2610 900 diffusionWidth\001 +4 1 0 40 -1 12 12 1.5708 4 120 840 -1575 5805 offsetY\001 +4 1 0 40 -1 12 12 0.0000 4 120 840 -765 7515 offsetX\001 +4 0 0 40 -1 14 12 0.0000 4 165 1560 7740 855 topTracksNb:1\001 +4 0 0 40 -1 14 12 0.0000 4 120 1560 7740 6255 botTracksNb:2\001 +4 1 0 40 -1 12 12 1.5708 4 165 1200 6525 3555 ypitches:3\001 +4 1 0 40 -1 12 12 0.0000 4 165 1200 2610 495 xpitches:6\001 +4 1 0 40 -1 14 22 0.0000 4 300 2940 -450 9450 Stack Layout 2\001 diff --git a/oroshi/doc/images/stack-layout-2.pdf b/oroshi/doc/images/stack-layout-2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bbce18bec17e89edb177b0c50847ca64a7f57395 GIT binary patch literal 13084 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 Aq5uE@ literal 0 HcmV?d00001 diff --git a/oroshi/doc/images/stack-layout-2.png b/oroshi/doc/images/stack-layout-2.png new file mode 100644 index 0000000000000000000000000000000000000000..f20fe6f25bb98056805edae47852190c25b99900 GIT binary patch literal 21361 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 literal 0 HcmV?d00001 diff --git a/oroshi/doc/images/stack-layout-3.fig b/oroshi/doc/images/stack-layout-3.fig new file mode 100644 index 00000000..4e7349fa --- /dev/null +++ b/oroshi/doc/images/stack-layout-3.fig @@ -0,0 +1,279 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 1350 675 2250 5175 +2 1 0 1 4 4 50 -1 35 0.000 0 0 -1 0 0 10 + 1800 5175 1350 5175 1350 4275 1575 4275 1575 675 2025 675 + 2025 4275 2250 4275 2250 5175 1800 5175 +2 2 0 4 1 1 40 -1 20 0.000 0 0 -1 0 0 5 + 1665 4590 1890 4590 1890 4815 1665 4815 1665 4590 +2 2 0 4 3 3 41 -1 20 0.000 0 0 -1 0 0 5 + 1575 4500 1980 4500 1980 4905 1575 4905 1575 4500 +-6 +6 4050 675 4950 5175 +2 1 0 1 4 4 50 -1 35 0.000 0 0 -1 0 0 10 + 4500 5175 4050 5175 4050 4275 4275 4275 4275 675 4725 675 + 4725 4275 4950 4275 4950 5175 4500 5175 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 4365 4590 4590 4590 4590 4815 4365 4815 4365 4590 +2 2 0 4 3 3 41 -1 20 0.000 0 0 -1 0 0 5 + 4275 4500 4680 4500 4680 4905 4275 4905 4275 4500 +-6 +2 1 0 1 0 7 40 -1 -1 0.000 0 0 -1 0 0 2 + -2700 10035 1800 10035 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 9765 1800 9765 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 9495 1800 9495 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8955 1800 8955 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2250 8145 -2250 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -1800 8145 -1800 10575 +2 2 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 + -2700 -4275 9675 -4275 9675 11250 -2700 11250 -2700 -4275 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + -2250 4725 -1800 4725 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + -2250 6075 -1800 6075 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + -2250 3375 -1800 3375 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + -2250 2025 -1800 2025 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + -2250 675 -1800 675 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + -2250 -675 -1800 -675 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + -2250 -2025 -1800 -2025 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + -1575 6750 -1575 7200 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + -225 6750 -225 7200 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + 1125 6750 1125 7200 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + 2475 6750 2475 7200 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + 3825 6750 3825 7200 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + 5175 6750 5175 7200 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + 6525 6750 6525 7200 +2 1 0 2 0 7 41 -1 -1 6.000 0 0 -1 0 0 2 + 7875 6750 7875 7200 +2 2 0 4 3 7 41 -1 -1 10.000 0 0 -1 0 0 5 + -1575 5760 7875 5760 7875 6390 -1575 6390 -1575 5760 +2 2 0 4 3 7 41 -1 -1 10.000 0 0 -1 0 0 5 + -1575 4410 7875 4410 7875 5040 -1575 5040 -1575 4410 +2 1 3 1 0 7 40 -1 -1 16.000 0 0 -1 0 0 2 + 1800 -2475 1800 6300 +2 1 3 1 0 7 40 -1 -1 16.000 0 0 -1 0 0 2 + 4500 -2475 4500 6300 +2 2 0 1 12 7 60 -1 44 0.000 0 0 -1 0 0 5 + -270 1125 6525 1125 6525 2925 -270 2925 -270 1125 +2 2 0 0 12 12 65 -1 35 0.000 0 0 -1 0 0 5 + -450 900 6750 900 6750 3150 -450 3150 -450 900 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 315 1440 540 1440 540 1665 315 1665 315 1440 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 315 2385 540 2385 540 2610 315 2610 315 2385 +2 2 0 4 3 3 41 -1 20 0.000 0 0 -1 0 0 5 + 225 5850 630 5850 630 6255 225 6255 225 5850 +2 2 0 4 3 3 41 -1 20 0.000 0 0 -1 0 0 5 + 5625 5850 6030 5850 6030 6255 5625 6255 5625 5850 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 5715 1440 5940 1440 5940 1665 5715 1665 5715 1440 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 5715 2340 5940 2340 5940 2565 5715 2565 5715 2340 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 3015 1440 3240 1440 3240 1665 3015 1665 3015 1440 +2 2 0 4 1 1 40 -1 20 7.500 0 0 -1 0 0 5 + 3015 2340 3240 2340 3240 2565 3015 2565 3015 2340 +2 2 0 4 3 3 41 -1 20 0.000 0 0 -1 0 0 5 + 2925 -900 3330 -900 3330 -495 2925 -495 2925 -900 +2 2 1 2 18 7 40 -1 -1 6.000 0 0 -1 0 0 5 + -1575 -2025 7875 -2025 7875 6075 -1575 6075 -1575 -2025 +2 2 0 4 3 7 41 -1 -1 10.000 0 0 -1 0 0 5 + -1575 -990 7875 -990 7875 -360 -1575 -360 -1575 -990 +2 1 3 1 0 7 40 -1 -1 16.000 0 0 -1 0 0 2 + 6750 4725 9000 4725 +2 1 3 1 0 7 40 -1 -1 16.000 0 0 -1 0 0 2 + 6750 -675 9000 -675 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 6570 1125 8325 1125 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 6570 2925 8325 2925 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 6795 3150 7200 3150 7425 3600 8325 3600 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 6795 900 7200 900 7425 450 8325 450 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 8775 -675 8775 4725 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 8190 -225 8190 450 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 8190 450 8190 1125 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 8190 1125 8190 2925 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 8190 2925 8190 3600 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 6750 -225 8280 -225 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 6750 4275 8325 4275 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 8190 3600 8190 4275 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 14 1 1.00 60.00 60.00 + 14 1 1.00 60.00 60.00 + 8190 -270 8190 -630 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 14 1 1.00 60.00 60.00 + 14 1 1.00 60.00 60.00 + 8190 4320 8190 4680 +2 2 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 135 1260 765 1260 765 6525 135 6525 135 1260 +2 2 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 2835 -1125 3465 -1125 3465 4050 2835 4050 2835 -1125 +2 2 0 4 1 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5535 1260 6120 1260 6120 6525 5535 6525 5535 1260 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -450 855 -450 -2475 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + -225 1035 -225 450 225 225 225 -2475 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 6750 855 6750 -2475 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 4 + 6525 1080 6525 450 6075 225 6075 -2475 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + -450 -2295 225 -2295 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 180 -2295 1800 -2295 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 1800 -2295 4500 -2295 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 4500 -2295 6075 -2295 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 6075 -2295 6705 -2295 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 14 1 1.00 60.00 60.00 + 14 1 1.00 60.00 60.00 + -1530 -2295 -495 -2295 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 14 1 1.00 60.00 60.00 + 14 1 1.00 60.00 60.00 + 6795 -2295 7830 -2295 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -1575 -3375 -1575 -2070 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 7875 -2925 7875 -2070 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + -1575 -2745 7875 -2745 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 225 -3375 225 -2925 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + -1575 -3195 225 -3195 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 7965 6075 9450 6075 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + 9000 2925 9450 2925 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 9225 2925 9225 6075 +2 2 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 + -2700 10575 1800 10575 1800 11250 -2700 11250 -2700 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8685 1800 8685 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 8415 1800 8415 +2 1 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 4 + -2700 10575 -2700 8145 1800 8145 1800 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 9225 1800 9225 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 0 0 2 + -2700 10305 1800 10305 +4 1 0 40 -1 12 12 0.0000 4 105 120 -2475 10485 t\001 +4 1 0 40 -1 12 12 0.0000 4 120 240 -2475 9675 gp\001 +4 1 0 40 -1 12 12 0.0000 4 120 240 -2475 9405 xp\001 +4 1 0 40 -1 12 12 0.0000 4 75 240 -2475 9135 xo\001 +4 1 0 40 -1 12 12 0.0000 4 120 240 -2475 8595 yp\001 +4 1 0 40 -1 12 12 0.0000 4 120 240 -2475 8325 yo\001 +4 0 0 40 -1 12 12 0.0000 4 165 1680 -1575 9675 self.gatePitch\001 +4 0 0 40 -1 12 12 0.0000 4 165 1560 -1575 9405 self.xpitches\001 +4 0 0 40 -1 12 12 0.0000 4 120 2160 -1575 9135 self.activeOffsetX\001 +4 0 0 40 -1 12 12 0.0000 4 165 3120 -1575 10485 self.nImplantActiveOverlap\001 +4 0 0 40 -1 12 12 0.0000 4 120 2400 -1575 9945 self.activeSideWidth\001 +4 0 0 40 -1 12 12 0.0000 4 120 2280 -1575 8865 self.hTrackDistance\001 +4 0 0 40 -1 12 12 0.0000 4 165 1560 -1575 8595 self.ypitches\001 +4 0 0 40 -1 12 12 0.0000 4 120 2160 -1575 8325 self.offsetActiveY\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 10485 T\001 +4 0 0 40 -1 14 18 0.0000 4 195 180 -2250 -720 5\001 +4 0 0 40 -1 14 18 0.0000 4 195 180 -2250 630 4\001 +4 0 0 40 -1 14 18 0.0000 4 195 180 -2250 1980 3\001 +4 0 0 40 -1 14 18 0.0000 4 195 180 -2250 3330 2\001 +4 0 0 40 -1 14 18 0.0000 4 195 180 -2250 4680 1\001 +4 0 0 40 -1 14 18 0.0000 4 195 180 -2250 6030 0\001 +4 0 0 41 -1 14 18 0.0000 4 195 180 -2250 -2070 6\001 +4 0 0 41 -1 14 18 0.0000 4 195 180 6570 7200 6\001 +4 0 0 41 -1 14 18 0.0000 4 195 180 7920 7200 7\001 +4 0 0 41 -1 14 18 0.0000 4 195 180 5220 7200 5\001 +4 0 0 41 -1 14 18 0.0000 4 195 180 3870 7200 4\001 +4 0 0 41 -1 14 18 0.0000 4 195 180 2520 7200 3\001 +4 0 0 41 -1 14 18 0.0000 4 195 180 1170 7200 2\001 +4 0 0 41 -1 14 18 0.0000 4 195 180 -180 7200 1\001 +4 0 0 41 -1 14 18 0.0000 4 195 180 -1530 7200 0\001 +4 1 0 40 -1 14 12 1.5708 4 135 240 8685 2025 yp\001 +4 1 0 40 -1 14 12 1.5708 4 120 120 8100 2025 W\001 +4 1 0 40 -1 12 12 1.5708 4 105 120 8100 855 t\001 +4 1 0 40 -1 14 12 1.5708 4 120 360 8100 135 htd\001 +4 1 0 40 -1 12 12 1.5708 4 105 120 8100 3285 t\001 +4 1 0 40 -1 14 12 1.5708 4 120 360 8100 3960 htd\001 +4 1 0 40 -1 14 12 0.0000 4 90 360 900 -2385 asw\001 +4 1 0 40 -1 12 12 0.0000 4 105 120 -135 -2385 t\001 +4 1 0 40 -1 14 12 0.0000 4 135 240 3150 -2385 gp\001 +4 1 0 40 -1 14 12 0.0000 4 135 240 3150 -2835 xp\001 +4 1 0 40 -1 14 12 0.0000 4 90 360 5265 -2385 asw\001 +4 1 0 40 -1 12 12 0.0000 4 105 120 6390 -2385 t\001 +4 1 0 40 -1 14 12 0.0000 4 90 240 -675 -3285 xo\001 +4 1 0 40 -1 14 12 1.5708 4 135 240 9090 4545 yo\001 +4 1 0 40 -1 14 22 0.0000 4 300 3360 -450 11025 self.boundingBox\001 +4 1 0 40 -1 12 12 0.0000 4 75 360 -2475 9945 asw\001 +4 1 0 40 -1 12 12 0.0000 4 120 360 -2475 8865 htd\001 +4 1 0 40 -1 12 12 0.0000 4 105 120 -2475 10215 W\001 +4 1 0 40 -1 14 12 0.0000 4 120 120 -2025 10215 U\001 +4 0 0 40 -1 16 12 0.0000 4 150 2115 -1575 10215 Transistor channel width\001 diff --git a/oroshi/doc/images/stack-layout-3.pdf b/oroshi/doc/images/stack-layout-3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a5d5e326f45b5d88fd27aa569e65f337c2be93b5 GIT binary patch literal 16375 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 RG#Eli00v@Xlh;%L{XZ^f69)hQ literal 0 HcmV?d00001 diff --git a/oroshi/doc/images/stack-layout-3.png b/oroshi/doc/images/stack-layout-3.png new file mode 100644 index 0000000000000000000000000000000000000000..8300b64935f10ea74748aa3dad0699e0705ad9cd GIT binary patch literal 30751 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 literal 0 HcmV?d00001 diff --git a/oroshi/doc/images/wiring-spec-1.fig b/oroshi/doc/images/wiring-spec-1.fig new file mode 100644 index 00000000..d9f0d29f --- /dev/null +++ b/oroshi/doc/images/wiring-spec-1.fig @@ -0,0 +1,37 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 2 0 2 0 7 40 -1 -1 6.000 0 0 -1 0 0 5 + -1575 9090 225 9090 225 9585 -1575 9585 -1575 9090 +2 1 0 2 0 7 40 -1 -1 6.000 0 0 -1 0 0 2 + -1125 9090 -1125 9585 +2 1 0 2 0 7 40 -1 -1 6.000 0 0 -1 0 0 2 + -675 9090 -675 9585 +2 1 0 2 0 7 40 -1 -1 6.000 0 0 -1 0 0 2 + -225 9090 -225 9585 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 0 3 + 1 1 1.00 60.00 120.00 + 0 9585 0 10125 450 10125 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 0 3 + 1 1 1.00 60.00 120.00 + -450 9585 -450 10575 450 10575 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 0 3 + 1 1 1.00 60.00 120.00 + -900 9585 -900 11025 450 11025 +2 1 0 1 0 7 40 -1 -1 4.000 0 0 -1 1 0 3 + 1 1 1.00 60.00 120.00 + -1350 9585 -1350 11475 450 11475 +4 1 0 40 -1 14 24 0.0000 4 240 240 -1350 9450 G\001 +4 1 0 40 -1 14 24 0.0000 4 60 240 -900 9450 .\001 +4 1 0 40 -1 14 24 0.0000 4 255 240 0 9450 1\001 +4 1 0 40 -1 14 24 0.0000 4 240 240 -450 9450 t\001 +4 0 0 40 -1 16 16 0.0000 4 180 1125 675 11520 net name\001 +4 0 0 40 -1 16 16 0.0000 4 255 1995 675 11070 separator (a dot)\001 +4 0 0 40 -1 12 16 0.0000 4 210 1485 675 10620 t, b or z\001 +4 0 0 40 -1 16 16 0.0000 4 195 1575 675 10170 track number\001 diff --git a/oroshi/doc/images/wiring-spec-1.pdf b/oroshi/doc/images/wiring-spec-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6b84bfc7ee080d9a190c1868d69192bb5a970f4b GIT binary patch literal 8410 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 C*CbZ} literal 0 HcmV?d00001 diff --git a/oroshi/doc/images/wiring-spec-1.png b/oroshi/doc/images/wiring-spec-1.png new file mode 100644 index 0000000000000000000000000000000000000000..20b4892e91131b9424b28c8b4fb8e5117f4b94f3 GIT binary patch literal 3658 zcmeH}X*d+@8pj7E$&$)0)L5d(z77#%%@T?*ybMmL89R+NYcq@@6p1OXJu|PO$i9t` znTlqVWiS{eP17`%F~;eA&-rk!bDeMRIp@Q<&WGP~KiB=-pZ?c<{hvS5)!9~9P(}~{ z00`ULS-SxMJZFF2n*?}&p0H=I)t}{Hgx!^B06@t3cX(3c^MF5_$78@=G4Ak?nD~IG zV1TXb1x4Gd@aULmXjEuKjH0oomf`V7peg|1kdwW&rAI>f`a{dODwD%taHXG3dF(zq z-^N?jjw6TcaX>~(Z7Ex{p$b=$X~FwJJc+J2%wO+u*i1?A$!9FNkq5A!qleFNraIs8nD2h^XmrLU|tfv#067u=fS37#Y zNseuz?bXg(bTmuK=LGAsp<^un)l`zVvG~lX{y2${hVEljk-s#pzr-T_A26Wm=Ry6z z6Rtz)GLjjYB=3iY=$kTkO4zPt&pD2n^C-yw`xIAtiZa(4HAFGRZ6?@S&V zrUY7AGwLMsH+V_O&N6pH%U)u`&75MtPbL3Wyty;DH!nP`v1UC)mlELm9DThWpz%%; z$9!@T%z0P7x8WNCx0s(ARo~{#4SYo&H|@C!@=x9k=m-8LH&npYBd-S?o(`9bZu(+W z@p|{;nA-JRhJM&gpn^QA)y1fMu8h$4q*bFtOFSHQxxI=u%@UeFl`=PF68Di{{vrY+ zM;hXJ!yC5mU(!#x*032zja*pfiQs50;~cQ5^p^A*yw5aFD}^osK>bo9h}l0W@ZX>~ z24a{`?dsZ6xX$%RlMy8tbno;BO<-K1uAj%pN=e^I>d zq9hK7dk1BAry>w2`1JFmKSB;BD#dH)INfcHV=v;#1>o#}h-PW%1#?hU-;KZqhZ~8B z4{GYyUSih>wCIjpwoyL!p;rM{`TL1WU!_symcFAdwe)rBIW2>)BU(bT!Au&lGJ!fh z{Xlyq$$XE^S}VC15#H1}zo?|nSHDIPkV~L zB)V*}VobU^J6rDKRK&pBKD?zPb5jc8O`yTk>ofK{J`rRQu?IWxc2?1et*&C*+oS;d ztN@qFZn{hDM7}e7mSLjc9b;6zpUBVQeQKtqZz!ABQR;t29y;!JA(l{t%y~?Bi z@8Y~!VZ){EC^ki4G9hWDP#R`S3Jwq0*0w|gynkt8WKd~*C8E=k)(0E#~q+oKvFjZU8dsPm`XtyNxu1lGK^V192j-~_U*|{)cAg~)gqJl!$kz<>69d^9H zOEjNh4~5d#?fR`^j+JN$JzG;apYHnufiR1y(^GA4)4v}c6HaJ5B{HbUr;M?&KzsiQ zlR02r(mOL$6vS0)x(Kgts6zkJ5TZvR>33BmgMp!}0LPAy0idU%djaPlzD-dBji8!5+ zEeZIK)7X9b^5sGB5~5{;^ru^vn`P6oF|9$f#aS6$;ho+^cYBm6h@_Vs(!&kXR>`%i z1Y*n@xEj(Z-l`{+YLQ-{%I6qGW>L6B6jSSwioo$Laowy8=g!qj-MPa+x9-@=UtM=4 zB#HKKVz~Wc1IbmIaiaVp1M^4J9rAy=R_N+kuZAQi7Ap&~IC=8kMwnSCGH7e`+eH5h zKt;srB8wGE@r{gX1l}yiuK8l!w9Uam7wm0|bTn&ceZ_moni7Objagauj|ln6ty^F2 z4{5g@ilY8nT53D~fx&!lxAey8+xLP2R#tK!9bC{T?Y$*|fz_CJm>HM}S#oVGpBhyV zY414blrY%uUYiQ5?mW8Wi+{ipDOyA%X|)(!pM*m~SeD)u)7#Iv5)+n~>f^N&BYX6% z8`RHQ7mp2dWMc&$t8KSk)!|*5G?!Eul_U&%WZ**7G>_QoFq;l2`55YIzh5HfspevA zAU~3OAUDk!#fkT5=sr!u`*x*|`(bblG0$_`N;AwX6|c1Kxc`~&w83-O&c;Wyzv(=m zZ-*;$99cQH5z*$SOtts*e12dy5{pb)XhXJf5Q``BSe8sYmYMo(wgO|3Mi_aR~TxpXjre zS5E|_U4dy5TkCs$$O$cc&xNz2Pug;qF^|8fw?1U z!EqjazhuJBAHdBUUL3s+n(Q~TvO8R054~*5@i+MJBYOlAO_bFw;d_=s8pH(30U`8- zzE!NP9OKb3>7+%mgfbQBT=i^VeYhKZ;mhhm!Io&53_r)lS5@j~0teWGovpFwe@RFF zr!zdS=-)H^gfg8 zeM=#Vib^7)XnCKp^sR6G-{1dzKfmW;p8K48?z!ilbMCq4-t$P9YwN<1ataWM=Bboi z2pWojQapShDk^|6k?ckHhAM&(OF)<8M<-IDfUX~oPShsiDFmXL8iYot5^?^J(CmH( zBZ{CBSKWsaD7A3Ue)iE6EkGlYN#}sRc+O^6eBbQV6T=UJx#ve01?6tNylyMQI@8pp zG1%Rl`J!!RJbC`u7P-tEyU4r4K@_#{;JGJTrs0hukb=pL=Y_~v(#@BTQU1l_8b~n- zc)D)*b(I6vZ?C(Bgg!{>dc0Ez-P^JCdd4;lntw)`Y2ed5oLpIJ^UIi^27%7TtdwX~ z*O3c1hXYF3cYhtJ5O~tO2)pJQBE6q5=kqz4_z2rtfgf~gO}|_mm{P?AzvxCxqd7N9 z93?16Mm$L?JL}Y$#+JCbHTYaIGGKgDOQqp8HfL}BGzB(t#z}iA_z~gleBvoo-JWYG zLz>rX@z_s=@lJ*W4zk-G-t+v`r<}yKjbPPQ#$P0FCCoUn@;o#>>9;w-wkL4HV0)ha zt2$Vrt4|?c|M$8}*Lxmiy}?)P`vhS0VdAq^@PLnd(&1SJs+{eVr~nMy+YdWOoU18wVMU?u66N6O3TA4ZXf% z3w!-HB|mz`)Mh;}cTkHnsq2%5WqX(Fvp}xnr5chVyK#x78ogVt+?Q4Bq3^bit>G=o z%Lo$IdLL-?G{D`h8H(;I-lH1)YUd?gPmLC&{;@~Y%clD)(jz5HA1ysRwrk)aDgOZP zosi6|=i&pEx0sKiPhu)vm17CjSCa3)u)*nCzPZOzT#&+{7Oth%u3z*lfihGl+kkDvdM6%Rw(QU%u*=!>&{D;9-MCH=6Y69&Frb+ zF&R3sGgMOw|Ja#H`1QLlS~suwJRB>dHCwzJY=;+NH&h7K@bFcH?8k59Gevv(MEfbx*x4-BBCmj&VGnPr)OSqV@qnhY@kFol z_9A^<$*tc;lxh+QhZ8Zj82?9G0~Ej5h{GRwhrYn)UDdzTFv&-EtL?deVF3%Ib_*p$ zaq}C$I=}hR0+a*~pJJPsZAcql?wim_ zJGdcxXkW}nmO+D2kD}K@rdYu@N{MC1$KnSyKUkyr3|#DN;fAuuA)ZY>Q9emiKW5K9 zQ!<#kczZ97I4dwO`=tHa{do5Gx9v=toas=Qi!wM zEs!-CG$df0((iZ=Fbt5Zo;@~TCG&>Kp8FP=dZ=AsY{o(YW_jA;`O+QvA zTBz7sMBFl+(3RTUXDc06fV_2eFZaU(OIt4%J{R{k)o?AByl3#jwCZG*y?`Ob(fjsm zD#?h_(XXYu;38-8Z}ce6kn2 z-|o$XI;b~zmtA=%YS^efAAXf7Y48h6gwaEr?qTW3fysW=P?KB-V1#oM@oeVqUCs{n z{Fnim1l`AiI$cTSRlC(nLieT>?G0FtK>G z0LY357E?k}%%aq9n0Y0-+`o4pIvW$U1a|cN!Eh zA`xg%C&+4#E>Ms{5Q8M-pQgy4P1jm#;pjL&iq|@cwE>zC={N#d14S{!VEGFH277BU z#fsE^4hsU9nVUe7YHDjtDz71ef>|9W1kff1lkh}KJx!N2oE6!uQL|KrFq&BY!s{>b zi=`4|MKHhAuIm)kfh7il`MoXUb&c?9wDW7Q16djSKYXn*xFSj^X%ih%$Q>xI7<40Od}T-4Oo zV>7gZn%d78OukFr8o{I?c`m!v=3&0CcMelS+$JvPv?8wSCz@G#rQ%y(Q5^&%nJl*1 zA?%?1OcNFy#SHWK-RxJ4Xs7y)fd2LlHK z8GWK(Fp*Be<5o;mn@Gb`Nda^U6^dLjmsM#p8h|!TqSEME-Z&~$9t9ZV*2+i}60jo? z=-xCZ2ug{en_q8vd3h+~{}&j9QAVQ~D*hkt6^y^vVODAV#85;sto|=Ih_T)W8i&gA)zO>k|(eL2wwLZHveaqDSBHH_LQugq#W3k=v+!IG@FZIR* z1^PE7n!EU3tlu%*_0hOUD`KXL%>Q6eRJBDx3I-@#6I=m=&+HdSy0hJBG>9o&7)V*1Sa)Hip@F7;7nF`}ZPFPDuXzlf#S@%zx&scs)}mhV1( z{Nxjhv=q{-4Z^tR#ZSC7`sBOSz#;et2)!(OzJ=#&A zPBo(LdmnseqIF|!$>#%KJiq&Y=l!9#=sztr-9H`C=JRCBXXZXHZzVSS0xYQ*)i+!5lJH z=1?25#Uu!WN5n3%BzOlmrbjiV-#x<0nH63VbW^b+`__S&EMluq%K0ly+1`qKraB{J z5|?EPpMRU+JLnmkt|(-v%N*FQ&Kpt+dw#<`kLs^&rg+c-$dascdhEyS^WoaHDy8=p z18yjTR>2Wp%;WYWh=LmvGux`S2Lya+dtRP!XTYxNp=cH_Kl_>eRg3NK&fRwl+12Bd z&-{e6Tgx~8$ixea-8vcJo8IXc;%3qVz8cn!b($)l>dqHd$nrI-GSYjRxY+8uZKK@8 zGukuM(TN?m1hnF`8t#!oeXt86IDyR53Fk$OFm+9jtavm}Sq}*5a|=$-b?saKt98IqFmh<-p9FN6TfmQ=xCwCPs+xU8Ix^w`(QB>h_61Jg&@9qtBghvYo}{u2Lm?C||Y+)f`pSFP{@ zvZ<)%oXf&GLt`!gJWJZt6$(6E@uFp5Wm5az-V4Y20HjWd0 zR+p+2E#Td`OE5{Ws6+VO%gFoLpUTPcuI|hSpMA98ge@%$w#SJ~e%fxhH#%^3$828R zPT6}#y?9OL-W^rp?qdh|17Di%tBXc@hSSeVZl$E%BxtCAD=)fPVIzbz0?wS5VcL9a z;;o0>!ri3@LgSS3OEVCeL#*0-vhnWSBH`X~n+H;}4)25aCTn$$-tdXzhUz~!l9~JB zOPJ8tmKS1iHdY-c*+S{}yv~bEPTW^8&eOgX4CKW5<}{nRlli$glBo+NkHC*dlKd4O9=~hJO!#Mo}J;L zmVHr7cigU>|4WqquT9y%;=F$%k^d7 z{ThuR(Emd;q723*8o_IU2pDTIHa(%MVae*-uYt-6WIa$(K!dxfpMi=dpbh8&R)7b9 z2ZI%2U=Yp^3|L5vP=!nc0)PM_l|&%`fk6~Hk>KISh*Z|%ln@}CNTvK1ru=)WxW3y2 zH-mrM@BKYYL7~v7U&54gwh`t$Ap#?8ezr-2F$Z9g;ud;+rJo&23hoFNo5Q!oADAC>~ zeZts{{{ja8x-De0*=srHYV$H3)c~FC=_i5qG^2*u3%Tr>nweQ5z~}wj6F!`7xkO4e z&UDO72MkQiI`tRRB`!TeQN>#?p$aVvB~y)4vPCkLygG*2zLrC6&)&{QxRqIo*y($S z*Kxb<6Jhg6K3Iq{tf(F z_!@LXj76JCL{yjO1D6QPF#}QNg!?g=dw1jcHYamb^Ih2nVIS11Gn?i!-Jxhf>a#5( zhd!BEj33w*^+0uJlPZ(aQgnN8{IHkBw&mrnamkZOm&No|Gje*wM_r3HNxW1@7ka8O zi_J4<4d=14d4R|_hY)uhJ6F1EYRKu3W;8*p&(>)H<8RB~7j5+6+Ko4DOFk0jx;JCk zzkQ!iSg4tv<*#KGZ2XGCgn_R2!T5}n&o`>1@p}^=00uq`jpgi}u#{9^h-uK9tgTWpcJ{dw^lPdb)Jy?x8H?wNv5(fpa~h zfZ=VieN7jg2cqMSPX{jk2tC5NefEG`U%GrvH1=G-Io^l$kwMv4aRC!eTtia)T(70# zL(!&#Ty8pfE#9>=J8ud)wqEHf5HfLb{a$Tc7=DW_Z`{g3oNzLl&)Lg@Q}EE~NWI0& zL8K1+?y=?wZ-v|fmFE&NR_H>(#^x}?qeGl!g{5gvgA`-iUv7BxNyT<<$-M4rvdJjt zHn>Dq{ddSfT;%nj{;>VUd%M}?GSwh^k_)Pfui#_|R>H-`jtKS237-S^FIMWFY<`AQ z-4v;Kt1I%Fzh8aO=?+QriFq2VQov_9q$aa=qnpx&x9`=SQa4<;fF1Uh6F#c@@r9^b zl6A}r2^HxAg9z zHpqIF)=?caHYZ)bv0-@2Jo0@7=50>DUXXGmYWx&h*uZ07ZDsD6qfdzhT~dwOE)Qsn zl>e!)M=ABnZ&SI#hgJ9NSzZ(liC`VbDd;*)Jh@>CZND?Vbcgfvn@@b;mFGNXER_y- zmEHHaxhq>h#&Z)r+&|K1Jnn4J4KCX&+qd&Ps=GIDlFNpz5JnQm*0S(^iEaXmm!t? z6mI#<2YQXUVH$HSm`GP_qBrZ-^YAv@o`=Hk55YXg6^1rAo@%(@Nv&Es^afT(nNlr_ z8n_bKb)%D+bY9?Xt%loo19`%m;B)bSO0%!K`_UrRIZRxGMJ!1P{g@59XbSubHDEv&3H6;J0hnV>s{%-Bl7n9!pd8oc-~b2$}tv%j*ugB0^$vEInpvei13+I_atSEqc=X2{ZAO+0jK-R0nC`RBYkLR{~=cM@+sw*1cW z{@v*2;1M;I_p)T^b0a66tG4CsQ3?_eevlHOz;W!|x8blHr&`;LYV&n(Ud=d*|1Q$c~-sd6Ksy&*sBS*v*|g@0h0d&l|LdJ1;L>YkD!e%wyWx^!{z|v#Rtn z71#ZbrJFeFA$cvb?7X6O?&*D8$n!>>6_K&ax9L3fLJLO?B(}qPi?p<3b&CzXi#YQB zI?uUB%eiCh53sWXGG^gM$1hhT5sP;nUvxIwZPVXW*>JYZ({H@<09MWwQ)pbC*rv?n zc}M310$cxPAhCEbM$FIp2mhuJ9;XQAMYAO)%G3O^w*t^MjvYhf&PamL^1$ewH@tQt z+{V2QUXH9Y@Z3&$)MXNyEn+a>KL(G0CSGKZB%bW{^I zqs&fcA1Mzgd$HfktYmS=yv5gZdh@5ITkT4MfeSHc+3eIZ6=~^LA9*b9zGd;|Kc3gz zsp+le>wosT=GKphTes`+Llrc$*hy1b*WA$=k&7ylWx$WBhYc+jO=P*jW17Qcr7r=E z_p2hySvIS)3mI_z*npqUzVK&^xpI!bcE-p!egqR8t0(;6nbX>-q`isp&+{7v^grh} zD(azN9Og@;Lp_LIB(f^(!|l5;D2bp7vqPI8Oaios-X#5SD$y$3)EXb|i&rMV)YTv= z>Nqg-LWGCn0^pu2-y6`N;K`S&sFtO%t|$W`6dURv;199^4fXdU)3Bkcu$3lQu*?7h zFfh3VqR@R+VfH5GP&$R;=S!kPQF6+1NH|hn7V1d_&*wrYR9`4kP7wx@q!K)_mS7rY zl_2=03iGDZ1F!%P5)vX8A}>dwdI3mfWn}4}6Rzza@PQX(iRdMM#=1cmkP0)AohxBkEiutRxJ4qyoj=9vgVcp_C5re|&p)$^v% z=&R@OP-QuU5)4=y{(p-rQ1E}30;te6F{pqzSQGH5+cQiX%xkHk5J*LEtZ)R{8i~T9 z<*{gG83YoGK&Sx!!UUBMHq`>ZHvzvt`Cl~s1@o7t6sk375^A0#FBE|o47DXvX$)P+ z%b}oPMhEZhM+_$VLD7WO?pJ86HBkW=3j0M=|83#n0!&Q)@8a|KXV^Cb535bV2l<1? z#Rl5{FV^$lRyYCwli`3Ms^7{~A%HtIKO%!S8mMz5$T0zr^`ub!aiF2&0s_FJYaAVv zIRF|cOicx>q?71=M75QPsNqLnE%=cb6ASByBYUaBLg56WCoag34pR#uQNaUlI4yvP zhoj^`HLj|~kEFI*SRnxXLli9G874!auF|z42CjFY<`aP5??(*q#X%(vi8wOc9P9!L zZao8n=u-b8yV8t7_9wBwSi=ekbS0o+06!g-8U*@Zy8e5F{_)OW_D>ZS!tlL+@?aYJcNhY}Na+6#Lt+@I*WY0%q{5#tc}5ES-*^}> z>GCg_vhp7=G#dQ}45f$!PeOigD=)9~=h#rFKl??Y{{qAO2}3J^dD(yUp{V!=42{8n z2V1}6VHo+cpD;QV2PU1U;P;78z={-31oZ|5EGZQ5lLbZ=3JMsIJt|F7z-#^G(BK)D5wY)1nCM=MS@DN9;Hf&fIyHYBE3ruEht6lA_zz*(xoFv5dtVk zkt)4Olio`RC6MG>QO|qNTkietJHGq<|M>rL9K#J{Cws3o*PQcto;BxA@LhGqQzsZt zKp>D)%1UyY5D2*$1af4T@(6e(u)}i?{5bBYq~{EQP^pvtlOf&1IKYc6F7j{}EeCTK zcaz6v5XHNy7ZoiXoL!tvA6q%PToe}&6lF=3N{2u$LX_oxzvq#-I@Z<3KkUQ3aIQB{ zMIb*gN29y_+pYkkZI~4KbW>4|igswUmZ!)5CeN6dgZ+e+}h zbuOH!8~p-DKPJpx`mB!ceCs_mxhd5J!wTyloI>uNS)4Rz#0}=%3C7XK%`a0yF4bVv zv#Yifea0^$oDj90kQbBktJ+9?SExz`Eb6LYGBpHp4M+dvH5F@&TK2JzB{T95xC9VK z;JowcPZ*?6noP_iyJ7_{Smp$ox(v2uEg1g>>3ndLD! zCjle>IqE8Xoe)j&rdNy%BF9}(>yomNUea~@W)U)rG&lxFZUHa@z1USr!uXNtZnGmd z^;w^yyp$DRoy9^06mD7AEKTe#A9(rIb{*kw!wdY~wg0~z+vpM(GRQ|^o{%(xSH%vG}H`g0jv1gv;Z8DsCQsogr@_3F``rNwGmBJ#~ zE{u8e)bH^8`J7mmD*>+J+`hqSJTr}yAczkzr5}Yoobrz!*faS|?3?t5oaS1QW}3Md zH~z^#%D(OlhP~}Nh-*jSj9}%kymLMcJ(<@;5oaKN7v|GVRLvNI3|}P8e^N$ulng_H zqv=gl-6;qb()3;zZaGd)2%t{om5;8DxZl<#3MF^;zo0icBC10Fk#X1-9*k?6#~H;g z*)Mp0Y*ePGH913?k-~Y320XvV3woNl?hhVn-`0;n65o%m<{At!8_hqUY{I2rrLdX? z6!=icP1RRN^J*KkYJ&RxB(Xzd&at}Z-QHh*?MjMqN254Q8)m+ADLXGxy{A{4eLkJc zFHf7cF^5{Iie&n-T;G5!T=hPOP=|e^maMIkJLyw)x%!Sv&I?r+pffmm$mH{!>RIy( zj@ebSnV#qSr^|lk1<#l2N8?(?Y8y)Wa=7_IzV8R8xHE6aWv`tq)H$CsH5ru+ zOBo*@-|<}f?MrAn2!cvJj-C7R-y17U%U0Z~wJy1T<_;;!9kU;F8cqolI{_>zR=*e6 zN1E`>Ff=8^px}yFX7Um6dgc9&3A9o9OKsAym+ukpzp=Rno$;lQze%?xQaiI<&hPi!a(1rr#)I5?{3QI;x;10>9*2IZj1j2lZdfBX0A)y!1wjzm?6+u03mYz>}T&mnT zO%WLwj*recu%6tO6ErYmOcetgJ`i!^>el{R?r)X#K z+p={`^-PxnV97)jjDQxaz9&tD5izg{0;ZywFMWScMvB_!5H+7dizIvzTJJOD)Sh;S zTTdj)5)8;&nb5;wwbIBfDVo#~R^JitciFMl_U6X>?z23?%&MNuxJCH>q%y`E?Y&9# z*<6$L5rtgc`aa;Zn&NG@t5`k9G3;Kt6p2q+p)pr??;&ogFHB>hHAZzyPHk5RU5*Fe z*9BDiF%yLE`_Ik3c^#%#+=iX2(HahIc1ONnF1csf&W0>BnH}>zKzc}T-?bCzwe50` zn(aUyTJ9=Fb_%@0L!l*|4zty=RdE3dSJsis6~j`vW(OH-@0VetcS?QG-uMG!nvd5y z6`f&K!Nm<3WC}&8hhN&r5xbez)2s&17PS#4qS=coboo{vR?+w4KL~i&Xsv6d$3+pA z1FycINAL!k5+{|(GaOeO7;AWYY%`S*(}j-P#U2N3*ADzp(Lp}d7b=2;8XorACPmyt zp<9yV9!`8b7Ye1G8RI-l_YA98D5^PVzU&gl{}{tWqyCCMs>MhUd+yW?WOhk0CFTYF z@k_6VL`Nxn*jeO*Q!G_3^HamEtGMnw(vlr&*Br{`x_TQP(D)_vGW~)1!5dilRvuMo zX;OYlVekk(D!oE;Yyw@iA@pX;Bzo?f@{g>f6;lqjdPoEaPM+HttEMRBxcy3=+lL!9<4>6OonCD3)7T!^ z&kSKxhc|6Rq*1@3iSKi>&zXMaXtMcIzDoU$#f2;{6l@TdEJag2w!!E}zQwNFj~8se zEbNVIp88UXf=);s4(_tn;v4M%pQG&0=#oL@hW$2?gS$Z7Frh5SvdrZ!Gc<$qBQ^^^78-(<@de~r7LCle! z%EEPh%5d_+_N?&aj*W*~`J#Cfq9qC);fRVlZ{I_!v@CH>PthLie9E&fS=o42t4ukq z`|M_vp@Qs#(8rM+t%1=?%U^<&Q!Sia&&)iP5X|zf&N&1dG>e=L=b6J;?02^$mT&>V{WQ^dCx>IPQF(c6E<3FETnI zOyyN55PDhCXcxlUCn(Plx1v+e9;Re;IbfAVP1@;}Z80(a`+HO=9E zy37SF`A|F*d+StsoYSlIdyfLaI6Zne8w5GG)D3%2=>t!$bZuHzPYn`uD;g(VK}Re< zh^(TY# zHxs&1>>WCcHDM!u>di)H*@AfS?$%dz-Hrg@bJy{ayJqAb2cqn5L-G7l$@9%BEstyo zb;g_UfHPl01Bz>aZCT{w;+)jZWQf?q(OFj{wMbJ*e~7lf5QlD=tABX4!xYJGb{VUV z^(M}oJWPYlw zi=9bTc(JtWR@rcjEN_Fp>42bq{<;jW*Y4UU6l!5WQw?{B-JmH7*ChXX8LY^Q$gOIM z6zS#n_Xfm{sh#bU@#WsWc3ZJ~zRoZRX_RP~%X3SQHN^$N&>$JY6>$-3?rfgp9?4c; zB*Gtbx)w)&P$!OL$37^1{U`;uusVG{Sp@4|Jc{g|disKGt!-=XGFbU3Z=rNoS(p6{ zH4N>Bi*WmfXY;AhvZGgM{6$K&pEcqh*%#%lH5E+N>m;lO704MuZNtGzn}!cck7+U; z57lQXk_;@4CwPoy$1=u3by;$n4N=9EK3_t=Mc2P`+{hq%xx~Ym7k1K%&f@vSQfvnG z=yeXwq2JF=WY6)NZbKiCwjH3Ej{MA0R(^6u4t7D*on&Vhku1ga-3{Lp8wA6dk_$Qb zsTbtfY=}o^^}==i=eaVn3-{tBSV zC4nd(>+;R2`ES{Nq#Q{fF_@(ES=AA}77?8#b1KP0QNugu{t1(JR|5%yeZJb9fo)VH z0rHiJXeG)V)&mNd#FdVSv~F(BaSb7yrvAy$20Fdt_))#lip%8HyyMiY?J=I~nCp4QZQI)vAmN@PI2E(8sV7&Gnz6k16G* zTjpOESkVI?lRF`)^!=bO(JYK`luAtAXeN_3BG8{3tvmVIevqqK9yI?)>#bT4#fdKgnQD8D(*bXGs zfi)u13b1tpSw=shM$~9GM?P%u)VV17VFP$Rr~bZnP~))r0Blgsin<}DMaB$mUupki zDqi`Fb1RX|r@1`O&{Zp?68k;IR+a7Q*$vb|db<~i_vcP}WvayaAB!t4BuMb%ym!DyqQgdePi1&m%w-Mx#AC01f9 z_}k`(Dj4H~ZN}D=m`gK0aaH;o1>LQc?)--ft6zI7g{hKV-YhS#qFYLh32PlW+|_S_ zevftoNH^ZDKDKvV2hpIat576;?ZE!pUa%iI4gh+YDY8hJTovb8&DMfyq6x)!F#OKt zQ`1o1{(P=jEqLYP^njzViPMlKz1x=t*Jx5|FZTGd7i!usxPl$vW>0`R}!!C zi(K7XeQ0Ci^l{nlES(9^QI|5@SJ6CTCHXrkAovn$GF>H5Iek@l=SlOdV@cUx_3Vihf8uii8S2@!F-b-vrmWcW~h zi^Ilu))z#;$U_4gL)GY)tD$Cxjlc)RD^67EkjCl>#=6Kq4OO^+d>0CaRV<%nlSx~j zwn=Zo{x4Sw`R?aRF(RCnshfE-{rAOxI-AP{wMBn~^JUQ2!jAi5!^rW#r1bSWdN^L`eAn@jl8k z2f#&?n$OVWQ*tis%Uf{t#?L{JKxMeK=sJI=TZu0qWB~K!c5;S;OcI<^j#&R+js=p1 z!$686B@!>q(MpqUk1<28Qyl#DB(lLBXgUQ*>E(V6Asq(#9S}m2?13zoH+`%-uPYFb z97|+}ZfX8XEi>2w^My&~i&2C@vMbEe{9MH4yzV6=|JQ&O3_Kl;>(FLk%;&60J$; zP~<07xs}^Y_!QlFr!?JiTRGUBHoUfPfaHw>UM0Sr08+?)@S<|L2t02<<9(3->~tCE z!UxA{!v4T7z*H`i5{Yz<-8WLE1!Uw5-BfGKKciOoAWKv|^~*gOVGD+IBpJDS)DMpT z!<<{5HaA=xsb44&m;KI1u+p7l2wIGx-N{jIyYMwwW`J-KTu(VQ-E!kHAbPKbZsGtH zzR?HnEz3{sQ6p?}MggGwt*vH4M0Ax(M!Ka9zNjoGE}<~^>~LTBppW&LY1an1e*!3t z1i-pVU<^e}g+ECbYhIA}0S84uuu(vxfaU^HnB)QggyW)tR_G_m5sS=W07Drd;uMUn zLH-$HUzXOBou?O^1i=9OR-e6@KnvU#ta&+*3t(Z56xfUC%N2~iNld$PpCuVDxeqWY z;9YUb4V0mdW&nznr{H29JrHGA+HmcrKxy!?2qhB=W$%=P(y(p-blEMT=$M}*03cf# zgM=7`QU=lW;|WEY&|snjRkFM0U7K@F3!Tq9j!`T3+2GxE{ zB~rT~5g$cfF9)rENYA@n_rnF$-~nxbHNIGShup|01?qs&M-$M;bZA*wv6yWXHaR~9 z148_!(IaPo_fe)u0Q<2@M4M6VAbGH`P>!g|vy=1}@!}VFD<@ z^?y!f;A4sz#r~ITNi<~PCk-*W^V6Kc=dTK1f8h&9&rp?ZR)Hi&ZsY(aL!!Vh4&T*HXRMuF4q?6D>W|Bs4 z0+Kz>_=gK{@z>AJ$lp@J4#|4-=#k`t4DTl3IdLQR;mqYNp0I(geZWF4{!|Ms?_>ju z;VK!#vQ@qxJSHxxWjU}QioT-LV=OoTSfPTuES!ntU1mLkfD*hWA^Lll!+?(Q8n2D1 zhSRqyf2l!H<66XC(fU(P~p9kUrINsv+0=2>s7d1 zk%cSOdX&|ORwncE>zymX4≫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,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6 +{ + margin:0; + padding:0 +} +.sm ul +{ + display:none +} + +.sm li,.sm a +{ + position:relative +} +.sm a +{ + display:block +} +.sm a.disabled +{ + cursor:not-allowed +} +.sm:after +{ + content:"\00a0"; + display:block; + height:0; + font:0/0 serif; + clear:both; + visibility:hidden; + overflow:hidden +} +.sm,.sm *,.sm *:before,.sm *:after +{ + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box +} +#doc-content +{ + overflow:auto; + display:block; + padding:0; + margin:0; + -webkit-overflow-scrolling:touch +} +/* +.sm-dox +{ + background-image:url("tab_b.png") +} +*/ +/* +.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active +{ + padding:0 12px; + padding-right:43px; + font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif; + font-size:13px; + font-weight:bold; + line-height:36px; + text-decoration:none; + text-shadow:0 1px 1px rgba(255,255,255,0.9); + color:#283a5d; + outline:0 +} +*/ +/* +.sm-dox a:hover +{ + background-image:url("tab_a.png"); + background-repeat:repeat-x; + color:white; + text-shadow:0 1px 1px black +} +*/ +.sm-dox a.current +{ + color:#d23600 +} +.sm-dox a.disabled +{ + color:#bbb +} +.sm-dox a span.sub-arrow +{ + position:absolute; + top:50%; + margin-top:-14px; + left:auto; + right:3px; + width:28px; + height:28px; + overflow:hidden; + font:bold 12px/28px monospace!important; + text-align:center; + text-shadow:none; + background:rgba(255,255,255,0.5); + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px +} +.sm-dox a.highlighted span.sub-arrow:before +{ + display:block; + content:'-' +} +/* +.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a +{ + -moz-border-radius:5px 5px 0 0; + -webkit-border-radius:5px; + border-radius:5px 5px 0 0 +} +.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul +{ + -moz-border-radius:0 0 5px 5px; + -webkit-border-radius:0; + border-radius:0 0 5px 5px +} +.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted +{ + -moz-border-radius:0; + -webkit-border-radius:0; + border-radius:0 +} +*/ +/* +.sm-dox ul +{ + background:rgba(162,162,162,0.1) +} +*/ +/* +.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active +{ + font-size:12px; + border-left:8px solid transparent; + line-height:36px; + text-shadow:none; + background-color:white; + background-image:none +} +*/ +/* +.sm-dox ul a:hover +{ + background-image:url("tab_a.png"); + background-repeat:repeat-x; + color:white; + text-shadow:0 1px 1px black +} +*/ + + +.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active +{ + border-left:16px solid transparent +} +.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active +{ + border-left:24px solid transparent +} +.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active +{ + border-left:32px solid transparent +} +.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active +{ + border-left:40px solid transparent +} + +.sm-dox ul +{ + position:absolute; + width:12em +} +/* +.sm-dox li +{ + float:left +} +.sm-dox.sm-rtl li +{ + float:right +} +.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li +{ + float:none +} +*/ +.sm-dox a +{ + white-space:nowrap +} +.sm-dox ul a,.sm-dox.sm-vertical a +{ + white-space:normal +} +.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a +{ + white-space:nowrap +} + +/* +.sm-dox +{ + padding:0 10px; + background-image:url("tab_b.png"); + line-height:36px +} +*/ + +.sm-dox a span.sub-arrow +{ + top:50%; + margin-top:-2px; + right:12px; + width:0; + height:0; + border-width:4px; + border-style:solid dashed dashed dashed; + border-color:#283a5d transparent transparent transparent; + background:transparent; + -moz-border-radius:0; + -webkit-border-radius:0; + border-radius:0 +} +/* +.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted +{ + padding:0 12px; + background-image:url("tab_s.png"); + background-repeat:no-repeat; + background-position:right; + -moz-border-radius:0!important; + -webkit-border-radius:0; + border-radius:0!important +} +.sm-dox a:hover +{ + background-image:url("tab_a.png"); + background-repeat:repeat-x; + color:white; + text-shadow:0 1px 1px black +} +*/ +.sm-dox a:hover span.sub-arrow +{ + border-color:white transparent transparent transparent +} +.sm-dox a.has-submenu +{ + padding-right:24px +} +.sm-dox li +{ + border-top:0 +} +.sm-dox>li>ul:before,.sm-dox>li>ul:after +{ + content:''; + position:absolute; + top:-18px; + left:30px; + width:0; + height:0; + overflow:hidden; + border-width:9px; + border-style:dashed dashed solid dashed; + border-color:transparent transparent #bbb transparent +} +.sm-dox>li>ul:after +{ + top:-16px; + left:31px; + border-width:8px; + border-color:transparent transparent #fff transparent +} +.sm-dox ul +{ + border:1px solid #bbb; + padding:5px 0; + background:#fff; +/* + -moz-border-radius:5px!important; + -webkit-border-radius:5px; + border-radius:5px!important; +*/ + -moz-box-shadow:0 5px 9px rgba(0,0,0,0.2); + -webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2); + box-shadow:0 5px 9px rgba(0,0,0,0.2) +} +.sm-dox ul a span.sub-arrow +{ + right:8px; + top:50%; + margin-top:-5px; + border-width:5px; + border-color:transparent transparent transparent #555; + border-style:dashed dashed dashed solid +} +.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted +{ + color:#555; + background-image:none; + border:0!important; + color:#555; + background-image:none +} +/* +.sm-dox ul a:hover +{ + background-image:url("tab_a.png"); + background-repeat:repeat-x; + color:white; + text-shadow:0 1px 1px black +} +*/ +.sm-dox ul a:hover span.sub-arrow +{ + border-color:transparent transparent transparent white +} +.sm-dox span.scroll-up,.sm-dox span.scroll-down +{ + position:absolute; + display:none; + visibility:hidden; + overflow:hidden; + background:#fff; + height:36px +} +.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover +{ + background:#eee +} +.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow +{ + border-color:transparent transparent #d23600 transparent +} +.sm-dox span.scroll-down:hover span.scroll-down-arrow +{ + border-color:#d23600 transparent transparent transparent +} +.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow +{ + position:absolute; + top:0; + left:50%; + margin-left:-6px; + width:0; + height:0; + overflow:hidden; + border-width:6px; + border-style:dashed dashed solid dashed; + border-color:transparent transparent #555 transparent +} +.sm-dox span.scroll-down-arrow +{ + top:8px; + border-style:solid dashed dashed dashed; + border-color:#555 transparent transparent transparent +} +.sm-dox.sm-rtl a.has-submenu +{ + padding-right:12px; + padding-left:24px +} +.sm-dox.sm-rtl a span.sub-arrow +{ + right:auto; + left:12px +} +.sm-dox.sm-rtl.sm-vertical a.has-submenu +{ + padding:10px 20px +} +.sm-dox.sm-rtl.sm-vertical a span.sub-arrow +{ + right:auto; + left:8px; + border-style:dashed solid dashed dashed; + border-color:transparent #555 transparent transparent +} +.sm-dox.sm-rtl>li>ul:before +{ + left:auto; + right:30px +} +.sm-dox.sm-rtl>li>ul:after +{ + left:auto; + right:31px +} +.sm-dox.sm-rtl ul a.has-submenu +{ + padding:10px 20px!important +} +.sm-dox.sm-rtl ul a span.sub-arrow +{ + right:auto; + left:8px; + border-style:dashed solid dashed dashed; + border-color:transparent #555 transparent transparent +} +.sm-dox.sm-vertical +{ + padding:10px 0; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px +} +.sm-dox.sm-vertical a +{ + padding:10px 20px +} +.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted +{ + background:#fff +} +.sm-dox.sm-vertical a.disabled +{ + background-image:url("tab_b.png") +} +.sm-dox.sm-vertical a span.sub-arrow +{ + right:8px; + top:50%; + margin-top:-5px; + border-width:5px; + border-style:dashed dashed dashed solid; + border-color:transparent transparent transparent #555 +} +.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after +{ + display:none +} +.sm-dox.sm-vertical ul a +{ + padding:10px 20px +} +.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted +{ + background:#eee +} +.sm-dox.sm-vertical ul a.disabled +{ + background:#fff +} + +/* SoC Customisation. */ + +div#main-nav { + margin: 0pt; + border: 0pt; + padding: 0pt; +} + +div ul#main-menu { + margin: 0pt; + border: 0pt; + padding: 0pt; +} + +/* +.sm ul { + visibility: hidden; + overflow: hidden; + height: 0; + width: 0; +} +*/ + +.sm li { + list-style: none; +} + +ul#main-menu { + display: table; + width: 100%; +} + +ul#main-menu > li { + display: table-cell; + text-align: center; +/*width: 20%;*/ + border-top: 1px solid black; + border-bottom: 1px solid black; + border-left: none; + border-right: 1px solid black; + padding: 2pt; + font-size: 90%; +} + +ul#main-menu > li:first-child { + border-left: 1px solid black; +} + +ul#main-menu > li > a { + border-bottom: none; +} + +ul#main-menu > li:hover, ul#main-menu > li:hover > a, ul#main-menu > li > a:hover { + background-color: black; + color: white; +} + +/* +.sm li { + margin: 0pt; + list-style: none; + font-size: 90%; + border-top: 1px solid black; + border-bottom: 1px solid black; + border-left: none; + border-right: 1px solid black; + display: table-cell; + text-align: center; + padding: 2pt; + width: 5%; +} +.sm li:first-child { + border-left: 1px solid black; +} +.sm li a { + border-style: none; + border-bottom: none; +} + +.sm li:hover, .sm li:hover a, .sm li a:hover { + background-color: black; + color: white; +} +*/ + + diff --git a/oroshi/python/CMakeLists.txt b/oroshi/python/CMakeLists.txt new file mode 100644 index 00000000..25b34a60 --- /dev/null +++ b/oroshi/python/CMakeLists.txt @@ -0,0 +1,26 @@ +# -*- explicit-buffer-name: "CMakeLists.txt" -*- + + set( pythonFiles __init__.py + Rules.py + Stack.py + ParamsMatrix.py + WIP_Transistor.py + WIP_DP.py + WIP_CSP.py + ) + + install( FILES ${pythonFiles} DESTINATION ${PYTHON_SITE_PACKAGES}/oroshi ) + + +#if(BUILD_DOC) +# find_package(Doxygen) + +# if(DOXYGEN_FOUND) +# add_custom_target( doc ALL cd ${PHAROS_SOURCE_DIR}/python && ${DOXYGEN_EXECUTABLE} doxyfile ) +# install( DIRECTORY html/ DESTINATION share/doc/coriolis2/en/html/oroshi ) +# install( FILES images-sizes.css DESTINATION share/doc/coriolis2/en/html/oroshi ) +# install( DIRECTORY latex/ DESTINATION share/doc/coriolis2/en/latex/oroshi ) +# else() +# message( STATUS "doxygen not found, documentation not generated." ) +# endif() +#endif() diff --git a/oroshi/python/ParamsMatrix.py b/oroshi/python/ParamsMatrix.py new file mode 100644 index 00000000..d4392559 --- /dev/null +++ b/oroshi/python/ParamsMatrix.py @@ -0,0 +1,238 @@ +# -*- coding: utf-8 -*- + +from Hurricane import DataBase +from Hurricane import DbU +from Hurricane import Box +from Hurricane import Net +from helpers import ErrorMessage as Error +from helpers import trace + + +# Rows are stacks. +# Columns are metaTransistors. +# +# There must be the exact same number of metaTransistors in each stack. +# Storage is matrix[row][col] ie matrix[stack][metaTransistor] + +NoFlags = 0x0000 +Top = 0x0001 +Left = 0x0002 + +class ParamsMatrix ( object ): + + @staticmethod + def gateToId ( gateName ): + if len(gateName) == 1: return None + return int( gateName[1:] ) + + @staticmethod + def idToGate ( index ): + if index is None: return 'G' + return 'G'+str(index) + + @staticmethod + def idToTran ( index ): + if index is None: return 'T' + return 'T'+str(index) + + + def __init__ ( self ): + self.matrix = [ [ {} ] ] + self.rows = 1 + self.columns = 1 + return + + + def getMatrix ( self ): return self.matrix + + + def setGlobalParams ( self, w, L, M, boundingBox ): + self.matrix[0][0]['L' ] = L + self.matrix[0][0]['W' ] = w + self.matrix[0][0]['M' ] = M + self.matrix[0][0]['box' ] = boundingBox + self.matrix[0][0]['globalActiveBox' ] = Box() + return + + + def setStacks ( self, stacks ): + if not isinstance(stacks,list): + print Error( 3, 'ParamsMatrix::setGlobalParams(): argument must be of type.' ) + return + + if not len(stacks): + print Error( 3, 'ParamsMatrix::setGlobalParams(): There must be at least one Stack.' ) + return + + mtIds = [] + if len(stacks[0].metaTransistors) == 0: + print Error( 3, 'ParamsMatrix::setGlobalParams(): Stack without any meta-transistor.' ) + return + else: + for gateName in stacks[0].metaTransistors.keys(): + mtIds.append( ParamsMatrix.gateToId(gateName) ) + mtIds.sort() + + for i in range(1,len(stacks)): + if len(stacks[0].metaTransistors) != len(stacks[i].metaTransistors): + print Error( 3, 'ParamsMatrix::setGlobalParams(): Stacks %d and %d' \ + ' have different numbers of meta-transistor.' % (0,i) ) + return + + for id in mtIds: + gateName = ParamsMatrix.idToGate( id ) + if not stacks[i].metaTransistors.has_key(gateName): + print Error( 3, 'ParamsMatrix::setGlobalParams(): Stack %d ' \ + ' is missing meta-transistor "%s".' % (i,gateName) ) + return + + # Thoses parameters must be the same in all the stacks. + self.matrix[0][0]['DMCG'] = stacks[0].DMCG + self.matrix[0][0]['DMCI'] = stacks[0].DMCI + self.matrix[0][0]['DGG' ] = stacks[0].DGG + self.matrix[0][0]['DGI' ] = stacks[0].DGI + + for iStack in range(len(stacks)): + activeBox = stacks[iStack].activeBox + stackMTs = [ { 'activeBox':activeBox } ] + self.matrix[0][0]['globalActiveBox'].merge( activeBox ) + + for iMT in range(len(mtIds)): + gateName = ParamsMatrix.idToGate( mtIds[iMT] ) + tranName = ParamsMatrix.idToTran( mtIds[iMT] ) + mt = stacks[iStack].metaTransistors[ gateName ] + + stackMTs.append( { 'name':tranName } ) + for key, value in mt.items(): + stackMTs[-1][ key.split('.')[-1] ] = value + + if iStack == 0: + self.matrix[0].append( { 'name':tranName } ) + for key in stackMTs[-1].keys(): + if key == 'name' or key == 'style.geomod': continue + if key.startswith('stress.'): + self.matrix[0][-1][key] = stackMTs[-1][key] / len(stacks) + else: + self.matrix[0][-1][key] = stackMTs[-1][key] + else: + for key in stackMTs[-1].keys(): + if key == 'name' or key == 'style.geomod': continue + if key.startswith('stress.'): + self.matrix[0][-1][key] += stackMTs[-1][key] / len(stacks) + else: + self.matrix[0][-1][key] += stackMTs[-1][key] + + self.matrix.append( stackMTs ) + + return + + + def stackHeader ( self, lines, iStack ): + for i in range(28): + if i in [1, 2, 3, 4]: + if i == 1: + lines.append( '+-----------------------+' ) + self.toBoxDatasheet( lines, self.matrix[iStack][0]['activeBox'], 'Active Box', Left ) + continue + + if i == 0: lines.append( '|{0:^23s}'.format( 'Stack %d'%iStack ) ) + elif i == 27: lines.append( '+-----------------------' ) + else: lines.append( '| ' ) + + if i in [1, 14, 21, 27]: lines[-1] += '+' + else: lines[-1] += '|' + return + + + def toMtDatasheet ( self, lines, mt, comment, flags ): + if flags & Top: lines[-29] += '-----------------------+' + + lines[-28] += '{0:^23s}|'.format( mt['name']+comment ) + lines[-27] += '-----------------------+' + lines[-26] += ' BSIM4 |' + lines[-25] += ' NSint %7s |' % mt['NSint'] + lines[-24] += ' NDint %7s |' % mt['NDint'] + lines[-23] += ' NSend %7s |' % mt['NSend'] + lines[-22] += ' NDend %7s |' % mt['NDend'] + lines[-21] += ' SAeff %7.2g m |' % mt['SAeff_Bsim4'] + lines[-20] += ' SBeff %7.2g m |' % mt['SBeff_Bsim4'] + lines[-19] += ' SAinv %7.2g 1/m |' % mt['SBinv_Bsim4'] + lines[-18] += ' SBinv %7.2g 1/m |' % mt['SBinv_Bsim4'] + lines[-17] += ' alpha %7.2g m |' % mt['alpha' ] + lines[-16] += ' alphaInv %7.2g 1/m |' % mt['alphaInv' ] + lines[-15] += ' LODeffect %7.2g 1/m |' % mt['alphaInv' ] + lines[-14] += '-----------------------+' + lines[-13] += ' Crolles |' + lines[-12] += ' SAeff %7.2g m |' % mt['SAeff_Crolles'] + lines[-11] += ' SBeff %7.2g m |' % mt['SBeff_Crolles'] + lines[-10] += ' SAinv %7.2g 1/m |' % mt['SBinv_Crolles'] + lines[- 9] += ' SBinv %7.2g 1/m |' % mt['SBinv_Crolles'] + lines[- 8] += ' po2actEff %7.2g m |' % mt['po2actEff_Crolles'] + lines[- 7] += '-----------------------+' + lines[- 6] += ' Layout Parasitics |' + lines[- 5] += ' ASeff %11.2g m2 |' % mt['ASeff'] + lines[- 4] += ' PSeff %11.2g m |' % mt['PSeff'] + lines[- 3] += ' ADeff %11.2g m2 |' % mt['ADeff'] + lines[- 2] += ' PDeff %11.2g m |' % mt['PDeff'] + lines[- 1] += '-----------------------+' + return + + + def toBoxDatasheet ( self, lines, box, comment, flags ): + if flags & Left: + for i in range(3): lines.append( '|' ) + + lines[-3] += '{0:^23s}|'.format( comment ) + lines[-2] += ' bl %8s %8s |' % (DbU.getValueString(box.getXMin()), DbU.getValueString(box.getYMin())) + lines[-1] += ' tr %8s %8s |' % (DbU.getValueString(box.getXMax()), DbU.getValueString(box.getYMax())) + return + + + def toDatasheet ( self ): + lines = [] + # Matrix element [0,0] + lines.append( '+-----------------------+' ) + lines.append( '| Device Datas |' ) + lines.append( '+-----------------------+' ) + lines.append( '| L %14.2g m |' % self.matrix[0][0]['L'] ) + lines.append( '| wF %14.2g m |' % self.matrix[0][0]['W'] ) + lines.append( '| M %14.2g |' % self.matrix[0][0]['M'] ) + lines.append( '| DMCG %14.2g m |' % self.matrix[0][0]['DMCG'] ) + lines.append( '| DMCI %14.2g m |' % self.matrix[0][0]['DMCI'] ) + lines.append( '| DGG %14.2g m |' % self.matrix[0][0]['DGG'] ) + lines.append( '| DGI %14.2g m |' % self.matrix[0][0]['DGI'] ) + lines.append( '+-----------------------+' ) + self.toBoxDatasheet( lines, self.matrix[0][0]['box'], 'Bounding Box', Left ) + lines.append( '+-----------------------+' ) + self.toBoxDatasheet( lines, self.matrix[0][0]['globalActiveBox'], 'Active Box', Left ) + lines[-3] = lines[-3][0:-1] + '+' + for i in range(len(lines),28): + lines.append( '| ' ) + if i in [0, 2, 15, 22, 28]: lines[-1] += '+' + else: lines[-1] += '|' + lines.append( '+-----------------------+' ) + + # Row 0: Meta-Transistors aggregated parameters. + mts = self.matrix[0] + for iMT in range(1,len(mts)): + self.toMtDatasheet( lines, mts[iMT], ' (meta)', Top ) + + # Rows 1+: One stack and its's meta-transistors. + for iStack in range(1,len(self.matrix)): + self.stackHeader( lines, iStack ) + for iMT in range(1,len(self.matrix[iStack])): + self.toMtDatasheet( lines, self.matrix[iStack][iMT], '', NoFlags ) + + return lines + + + def __str__ ( self ): + s = '' + for line in self.toDatasheet(): s += line + '\n' + return s + + + def trace( self ): + for line in self.toDatasheet(): + trace( 100, '\t%s\n' % line ) + return diff --git a/oroshi/python/Rules.py b/oroshi/python/Rules.py new file mode 100644 index 00000000..5af2ff1b --- /dev/null +++ b/oroshi/python/Rules.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- + +from helpers import trace + + +class Rules ( object ): + + ruleSet = [ 'minEnclosure_nImplant_active' + , 'minEnclosure_pImplant_active' + , 'minSpacing_nImplant_pImplant' + , 'minSpacing_cut0' + , 'minWidth_cut0' + , 'minWidth_active' + , 'minEnclosure_active_cut0' + , 'transistorMinL' + , 'transistorMinW' + , 'minGateSpacing_poly' + , 'minSpacing_poly_active' + , 'minExtension_active_poly' + , 'minExtension_poly_active' + , 'minEnclosure_poly_cut0' + , 'minSpacing_cut0_poly' + , 'minWidth_cut0' + , 'minSpacing_cut0_active' + , 'minWidth_metal1' + , 'minSpacing_metal1' + , 'minEnclosure_metal1_cut0' + , 'minEnclosure_metal1_cut1' + , 'minWidth_cut1' + , 'minSpacing_cut1' + , 'minWidth_metal2' + , 'minSpacing_metal2' + , 'minEnclosure_metal2_cut1' + , 'minEnclosure_metal2_cut2' + , 'minWidth_cut2' + , 'minSpacing_cut2' + , 'minWidth_cut1' + , 'minSpacing_cut1' + , 'minWidth_metal3' + , 'minSpacing_metal3' + , 'minEnclosure_metal3_cut2' + ] + + def __init__ ( self, dtr ): + trace( 100, '\tRules.__init__()\n' ) + self.dtr = dtr + + for rule in Rules.ruleSet: self.addAttr(rule) + return + + def addAttr ( self, attribute ): + if self.__dict__.has_key(attribute): return + + #print 'Rules.addAttr(): %s' % attribute + value = None + words = attribute.split( '_' ) + if len(words) == 1 and words[0].endswith('Cap'): value = self.dtr.getUnitRule( words[0] ).getValue() + if len(words) < 4: value = self.dtr.getPhysicalRule( *tuple(words) ).getValue() + if not value is None: + self.__dict__[attribute] = value + + return diff --git a/oroshi/python/Stack.py b/oroshi/python/Stack.py new file mode 100644 index 00000000..e2fe7e8a --- /dev/null +++ b/oroshi/python/Stack.py @@ -0,0 +1,1575 @@ +# -*- coding: utf-8 -*- + +import copy +import datetime +from Hurricane import DataBase +from Hurricane import UpdateSession +from Hurricane import DbU +from Hurricane import Box +from Hurricane import Net +from Hurricane import Horizontal +from Hurricane import Vertical +from Hurricane import Contact +from Hurricane import Pad +from Hurricane import NetExternalComponents +from CRL import AllianceFramework +import Constant +import helpers +from helpers import ErrorMessage as Error +from helpers import trace +from Analog import Device +import oroshi + +helpers.staticInitialization( quiet=True ) +#helpers.setTraceLevel( 100 ) + +def traceMT ( mt ): + trace( 100, '+', '\tMeta-Transistor Topological Datas\n' ) + trace( 100, '\t +-------------------------------------------------+\n' ) + trace( 100, '\t | Gate name | %20s |\n' % mt['gate'] ) + trace( 100, '\t +------------+------------------------------------+\n' ) + trace( 100, '\t | NF | %10d |\n' % mt['NF'] ) + trace( 100, '\t | MIN | %10r |\n' % mt['MIN'] ) + trace( 100, '\t +------------+-----------------------+------------+\n' ) + trace( 100, '\t | Style | NSint | %10d |\n' % mt['style.NSint'] ) + trace( 100, '\t | | DSint | %10d |\n' % mt['style.NDint'] ) + trace( 100, '\t | | NSend | %10d |\n' % mt['style.NSend'] ) + trace( 100, '\t | | DSend | %10d |\n' % mt['style.NDend'] ) + trace( 100, '\t +------------+---------+-------------+------------+\n' ) + trace( 100, '\t | Stress | BSIM4 | SAeff | %10.2g |\n' % mt['stress.SAeff_Bsim4' ] ) + trace( 100, '\t | | | SBeff | %10.2g |\n' % mt['stress.SBeff_Bsim4' ] ) + trace( 100, '\t | | | SAinv | %10.2g |\n' % mt['stress.SAinv_Bsim4' ] ) + trace( 100, '\t | | | SBinv | %10.2g |\n' % mt['stress.SBinv_Bsim4' ] ) + trace( 100, '\t | | | SBinv | %10.2g |\n' % mt['stress.SBinv_Bsim4' ] ) + trace( 100, '\t | | | alpha | %10.2g |\n' % mt['stress.alpha' ] ) + trace( 100, '\t | | | alphaInv | %10.2g |\n' % mt['stress.alphaInv' ] ) + trace( 100, '\t | | | LODeffect | %10.2g |\n' % mt['stress.LODeffect' ] ) + trace( 100, '\t | +---------+-------------+------------+\n' ) + trace( 100, '\t | | Crolles | SAeff | %10.2g |\n' % mt['stress.SAeff_Crolles'] ) + trace( 100, '\t | | | SBeff | %10.2g |\n' % mt['stress.SBeff_Crolles'] ) + trace( 100, '\t | | | SAinv | %10.2g |\n' % mt['stress.SAinv_Crolles'] ) + trace( 100, '\t | | | SBinv | %10.2g |\n' % mt['stress.SBinv_Crolles'] ) + trace( 100, '\t | | | po2actEff | %10.2g |\n' % mt['stress.po2actEff_Crolles'] ) + trace( 100, '\t +------------+---------+-------------+------------+\n' ) + trace( 100, '\t | Parasitics | ASeff %10.2g m2 |\n' % mt['parasitics.ASeff'] ) + trace( 100, '\t | | PSeff %10.2g m |\n' % mt['parasitics.PSeff'] ) + trace( 100, '\t | | ADeff %10.2g m2 |\n' % mt['parasitics.ADeff'] ) + trace( 100, '\t | | PDeff %10.2g m |\n' % mt['parasitics.PDeff'] ) + trace( 100, '\t +------------+------------------------------------+\n' ) + trace( 100, '-' ) + return + + +class Wiring ( object ): + + def __init__ ( self, device, wiring ): + chain = wiring.split('.') + net = chain[0] + side = chain[1] + if net == 'B' and device.isBulkConnected(): net = 'S' + + self.net = device.getNet( net ) + self.topTrack = -1 + self.botTrack = -1 + self.wTrack = 1 + if len(chain) >= 3: self.wTrack = int(chain[2]) + length = len(side) + for i in range( 0, length/2, 2 ): + track = -2 + if side[i+1] != 'X': track = int( side[i+1] ) + + if side[i] == 't': self.topTrack = track + if side[i] == 'b': self.botTrack = track + if side[i] == 'z': pass + return + + def isDrain ( self ): return self.net.getName()[0] == 'D' + def isSource ( self ): return self.net.getName()[0] == 'S' + def isGate ( self ): return self.net.getName()[0] == 'G' + def isBulk ( self ): return self.net.getName()[0] == 'B' + + def isTop ( self ): + if self.topTrack != -1: return Stack.NorthBulk + return None + + def isBot ( self ): + if self.botTrack != -1: return Stack.SouthBulk + return None + + def getTop ( self ): return self.topTrack + def getBot ( self ): return self.botTrack + def setTop ( self, track ): self.topTrack = track + def setBot ( self, track ): self.botTrack = track + def getWTrack ( self ): return self.wTrack + + def __str__ ( self ): + s = self.net.getName() + if not self.isTop() and not self.isBot(): s += 'z' + else: + if self.isBot(): + s += '.b%d' % self.botTrack + s += '.%d' % self.wTrack + if self.isTop(): + s += '.t%d' % self.topTrack + s += '.%d' % self.wTrack + return s + + +class Bulk ( object ): + + def __init__ ( self, stack, axis, usource, utarget, flags ): + self.stack = stack + self.axis = axis + self.usource = usource + self.utarget = utarget + self.flags = flags + self.ucontacts = [] + self.ucontactsBulk = [] + return + + + def addContact ( self, upos, enabled=True ): + #if self.ucontacts: + # trace( 100, '\taddContact [ ' ) + # for pos, en in self.ucontacts: trace( 100, "%s+%s " % (DbU.getValueString(pos),en) ) + # trace( 100, '] inserting: %s+%s\n' % (DbU.getValueString(upos),enabled) ) + + if len(self.ucontacts) == 0 or self.ucontacts[-1][0] < upos: + self.ucontacts.append( (upos,enabled) ) + else: + for i in range(len(self.ucontacts)): + if self.ucontacts[i][0] > upos: + self.ucontacts.insert( i, (upos,enabled) ) + return + if self.ucontacts[i][0] == upos: + return + self.ucontacts.append( (upos,enabled) ) + return + + + def _computeContacts ( self, ucontacts, pitch ): + #trace( 100, ',+', '\tBulk._computeContacts() @%s\n' % DbU.getValueString(self.axis) ) + #trace( 100, '\thorPitch: %s\n' % DbU.getValueString(self.stack.horPitch) ) + #trace( 100, '\tbulk pitch: %s\n' % DbU.getValueString(pitch) ) + #trace( 100, '\tusource: %s\n' % DbU.getValueString(self.usource) ) + #trace( 100, '\tutarget: %s\n' % DbU.getValueString(self.utarget) ) + + icontact = 0 + ucontact = self.usource + while ucontact <= self.utarget: + #trace( 100, '\tucontact: %s\n' % DbU.getValueString(ucontact) ) + + if len(ucontacts) == 0: + ucontacts.insert( 0, (ucontact,True) ) + else: + if icontact == 0 and ucontact < ucontacts[0][0]: + if ucontacts[0][0] - ucontact >= pitch: + ucontacts.insert( 0, (ucontact,True) ) + else: + while icontact+1 < len(ucontacts) and ucontacts[icontact+1][0] < ucontact: + if icontact+1 == len(ucontacts): break + icontact += 1 + + if ucontact - ucontacts[icontact][0] >= pitch: + if icontact + 1 >= len(ucontacts) \ + or ucontacts[icontact+1][0] - ucontact >= pitch: + ucontacts.insert( icontact+1, (ucontact,True) ) + icontact += 1 + else: + ucontact = ucontacts[icontact][0] + + ucontact += pitch + + trace( 100, '-' ) + return + + + def computeContacts ( self ): + #self.ucontactsBulk = copy.deepcopy( self.ucontacts ) + + pitch = self.stack.minWidth_metal1 + self.stack.minSpacing_metal1 + pitch = max( pitch, self.stack.minWidth_cut0 + self.stack.minEnclosure_metal1_cut0*2 + self.stack.minSpacing_metal1 ) + + if self.stack.isVH: + self._computeContacts( self.ucontactsBulk, pitch ) + + pitch = max( pitch, self.stack.minWidth_cut1 + self.stack.minEnclosure_metal1_cut1*2 + self.stack.minSpacing_metal1 ) + pitch = max( pitch, self.stack.minWidth_metal2 + self.stack.minSpacing_metal2 ) + pitch = max( pitch, self.stack.minWidth_cut1 + self.stack.minEnclosure_metal2_cut1*2 + self.stack.minSpacing_metal2 ) + pitch = max( pitch, self.stack.minWidth_cut2 + self.stack.minEnclosure_metal2_cut2*2 + self.stack.minSpacing_metal2 ) + if self.stack.isVH: + pitch = max( pitch, self.stack.minWidth_metal3 + self.stack.minSpacing_metal3 ) + pitch = max( pitch, self.stack.minWidth_cut2 + self.stack.minEnclosure_metal3_cut2*2 + self.stack.minSpacing_metal3 ) + + #trace( 100, '\tOriginal ucontacts[]\n' ) + #for ucontact, enabled in self.ucontacts: + # trace( 100, '\tucontact: %s enabled:%d\n' % (DbU.getValueString(ucontact),enabled) ) + #trace( 100, '\n' ) + + self._computeContacts( self.ucontacts, pitch ) + if not self.stack.isVH: + self.ucontactsBulk = self.ucontacts + return + + + def doLayout ( self ): + active = DataBase.getDB().getTechnology().getLayer( 'active' ) + metal1 = DataBase.getDB().getTechnology().getLayer( 'metal1' ) + metal2 = DataBase.getDB().getTechnology().getLayer( 'metal2' ) + metal3 = DataBase.getDB().getTechnology().getLayer( 'metal3' ) + cut0 = DataBase.getDB().getTechnology().getLayer( 'cut0' ) + cut1 = DataBase.getDB().getTechnology().getLayer( 'cut1' ) + cut2 = DataBase.getDB().getTechnology().getLayer( 'cut2' ) + bulkNet = self.stack.bulkNet + + self.computeContacts() + + #trace( 100, '\tBulk.doLayout() @%s\n' % DbU.getValueString(self.axis) ) + + if self.flags & (Stack.NorthBulk | Stack.SouthBulk): + xsource = self.usource + xtarget = self.utarget + if not self.stack.hasWestBulk(): xsource = self.ucontacts[ 0][0] + if not self.stack.hasEastBulk(): xtarget = self.ucontacts[-1][0] + + width = self.stack.minWidth_metal1 + width = max( width, self.stack.minEnclosure_metal1_cut0*2 + self.stack.minWidth_cut0 ) + Horizontal.create( bulkNet + , metal1 + , self.axis + , width + , xsource-self.stack.wire1Width/2 + , xtarget+self.stack.wire1Width/2 ) + width = self.stack.minWidth_cut0 + 2* self.stack.minEnclosure_active_cut0 + Horizontal.create( bulkNet + , active + , self.axis + , width + , self.usource-width/2 + , self.utarget+width/2 ) + width += 2* self.stack.minEnclosure_bImplant_active + Horizontal.create( bulkNet + , self.stack.bImplantLayer + , self.axis + , width + , self.usource-width/2 + , self.utarget+width/2 ) + + for xcontact, enabled in self.ucontactsBulk: + if enabled: + Contact.create( bulkNet + , cut0 + , xcontact + , self.axis + , self.stack.minWidth_cut0 + , self.stack.minWidth_cut0 ) + + cutBb = Box( xcontact, self.axis, xcontact, self.axis ) + + #metal1EnclBb = Box( cutBb ).inflate( self.stack.minEnclosure_metal1_cut0 + self.stack.minWidth_cut0/2 ) + #Pad.create( bulkNet, metal1, metal1EnclBb ) + + for xcontact, enabled in self.ucontacts: + trace( 100, '\tucontact: %s enabled:%d\n' % (DbU.getValueString(xcontact),enabled) ) + + if enabled: + Contact.create( bulkNet + , cut1 + , xcontact + , self.axis + , self.stack.minWidth_cut1 + , self.stack.minWidth_cut1 ) + if self.stack.isVH: + Contact.create( bulkNet + , cut2 + , xcontact + , self.axis + , self.stack.minWidth_cut2 + , self.stack.minWidth_cut2 ) + + cutBb = Box( xcontact, self.axis, xcontact, self.axis ) + + metal1EnclBb = Box( cutBb ).inflate( self.stack.minEnclosure_metal1_cut1 + self.stack.minWidth_cut1/2 ) + Pad.create( bulkNet, metal1, metal1EnclBb ) + + metal2EnclBb = Box( cutBb ).inflate( self.stack.minEnclosure_metal2_cut1 + self.stack.minWidth_cut1/2 ) + if self.stack.isVH: + metal2EnclBb.merge( Box( cutBb ).inflate( self.stack.minEnclosure_metal2_cut2 + self.stack.minWidth_cut2/2 ) ) + + Pad.create( bulkNet, metal2, metal2EnclBb ) + + if self.stack.isVH: + metal3EnclBb = Box( cutBb ).inflate( self.stack.minEnclosure_metal3_cut2 + self.stack.minWidth_cut2/2 ) + Pad.create( bulkNet, metal3, metal3EnclBb ) + + if self.flags & (Stack.EastBulk | Stack.WestBulk): + metal1Width = self.stack.minWidth_metal1 + metal1Width = max( metal1Width, self.stack.minWidth_cut0 + 2*self.stack.minEnclosure_metal1_cut0 ) + metal1Width = max( metal1Width, self.stack.minWidth_cut1 + 2*self.stack.minEnclosure_metal1_cut1 ) + + Vertical.create( bulkNet + , metal1 + , self.axis + , metal1Width + , self.usource-self.stack.wire1Width/2 + , self.utarget+self.stack.wire1Width/2 ) + width = self.stack.minWidth_cut0 + 2*self.stack.minEnclosure_active_cut0 + Vertical.create( bulkNet + , active + , self.axis + , width + , self.usource-width/2 + , self.utarget+width/2 ) + width += 2*self.stack.minEnclosure_bImplant_active + Vertical.create( bulkNet + , self.stack.bImplantLayer + , self.axis + , width + , self.usource-width/2 + , self.utarget+width/2 ) + + for icontact in range(len(self.ucontacts)): + if (icontact == 0 and self.stack.hasSouthBulk()) \ + or (icontact+1 == len(self.ucontacts) and self.stack.hasNorthBulk()): continue + Contact.create( bulkNet + , cut0 + , self.axis + , self.ucontacts[icontact][0] + , self.stack.minWidth_cut0 + , self.stack.minWidth_cut0 ) + return + + +## Draw a Stack of Transistors. +# +# A Stack of Transistors is a set of transistor put into a regular +# band and connected through their sources/drains. All share the +# exact same W & L. The way they are connecteds defines what functionnality +# the Stack implement. +# +# The abutment box of the stack is adjusted so that both height and width +# are even multiples of the track pitches, so the device can be easily +# placed and handled by the mixed router. The extra space needed for +# padding is added around the active area. Due to the presence of tracks +# at the top and bottom of the stack, the active area will be horizontally +# centered but \b not vertically. +# +# The drawing of the stack is controlled through a set of variables +# (attributes) that allows to create it regardless of the technology. +# The technology is taken into account in the way those variables are +# computed and, obviously, their values. The following schematics details +# the main stack drawing variables along with their computations. +# +# \section secStackLayout Stack Layout +# +# \subsection secGatePitch Gate pitch +# +# - \c self.gatePitch : the pitch of transistors gates, inside the stack. +# It also applies to dummy transistors. +# +# \image html gate-pitch-1.png "Gate Pitch" +# \image latex gate-pitch-1.pdf "Gate Pitch" width=.9\linewidth +# +# +# \subsection secActiveSideWidth Active Side Width +# +# - \c self.activeSideWidth : the distance between the axis of the last +# transistor gate (on the left or right) and the edge of the active +# area (\e not the diffusion area). +# +# \image html active-side-width-1.png "Active Side Width" +# \image latex active-side-width-1.pdf "Active Side Width" width=.9\linewidth +# +# +# \subsection secHTrackDistance H-Track Distance +# +# - \c self.hTrackDistance : the minimal distance between either the top or +# bottom edge of the active area and the \e axis of the first track. +# +# \image html htrack-distance-1.png "H-Track distance" +# \image latex htrack-distance-1.pdf "H-Track distance" width=.9\linewidth +# +# +# \subsection secOverallVariables BoundingBox & Overall Variables +# +# - \c self.xpitches : the number of vertical track pitches needed to fully +# enclose the active area. +# - \c self.ypitches : the number of horizontal track pitches needed to fully +# enclose the active area. +# - \c self.activeOffsetX & \c self.activeOffsetY : the offsets of the active area +# from the bottom left corner of the abutment box. +# - \c self.diffusionWidth & \c self.diffusionHeight are the minimun dimensions +# required to fit the active area. +# - \c self.topTracksNb() : the number of tracks at the top of the stack. +# - \c self.botTracksNb() : the number of tracks at the bottom of the stack. +# +# \image html stack-layout-3.png "General Stack Layout" +# \image latex stack-layout-3.pdf "General Stack Layout" width=.9\linewidth +# +# +# \section secWiringSpecs Wiring Specifications +# +# Stack routing is done through vertical \c metal1 wires coming from the +# gates and diffusions areas and \c metal2 horizontal wires that can be +# either above or below the active area. \c metal2 wires (or track) goes +# through the whole stack and are assigned to one net only. A net will +# have at least one track above or below and may have both. +# +# The connections to the diffusions areas and gates of the various +# fingers are specified through a list. The stack is made of a regular +# alternation of diffusions and gates. The list tells, for each one +# starting from the left, to which net and track they are connected. +# For a stack of \f$NFs\f$ transistor fingers, the must wiring specification +# must contains \f$ 3 + (NFs-1) \times 2\f$ elements. The list is given +# through one \e string with each elements separated by one or more +# whitespace. The syntax for \e one element is detailed \ref secAtomicWiring. +# +# Track numbering scheme +# +# Tracks above (top) the active area and below (bottom) each have their +# own numbering. In both case, the count start \e from the active area. +# This, the top tracks will be numbered by increasing Y and the bottom +# tracks by \e decreasing Y. +# +# Track/Net assignement +# +# The track/net assignement is deduced from the atomic wiring specifications. +# It also allows to compute the total number of tracks needed above and +# below the active area. +# +# \image html wiring-spec-2.png "Wiring Specification" +# \image latex wiring-spec-2.pdf "Wiring Specification" width=.9\linewidth +# +# \subsection secAtomicWiring Atomic Wiring Specification +# +# An atomic wiring specification has the same syntax for either diffusions +# or gates. It \e must not comprise any whitespaces. it is made of the +# following parts: +# - The net name to connect to. +# - Whether the track is above the active area (\c "t") or below (\c "b"). +# The special case (\c "z") means that this element must be left +# unconnected (is such case possible?). +# - The number of the track. +# +# \image html wiring-spec-1.png "Atomic Wiring Specification" +# \image latex wiring-spec-1.pdf "Atomic Wiring Specification" width=.4\linewidth +# +# +# \section secStackImplDetails Stack Implementation Details +# +# The \c __setattr__() and \c __getattr__ functions have been redefined +# so that the technological values (rules) can be accessed has normal +# attributes of the Stack class, in addition to the regular ones. + + +class Stack ( object ): + + NorthBulk = 0x0004 + SouthBulk = 0x0008 + EastBulk = 0x0010 + WestBulk = 0x0020 + RingBulk = NorthBulk|SouthBulk|EastBulk|WestBulk + SourceIsolated = 0x0040 + SourceShared = 0x0080 + SourceMerged = 0x0100 + DrainIsolated = 0x0200 + DrainShared = 0x0400 + DrainMerged = 0x0800 + + rules = oroshi.getRules() + + + def __setattr__ ( self, attribute, value ): + if hasattr(Stack.rules,attribute): + print '[ERROR] Stack.%s attribute is read-only (ignored).' % attribute + return + self.__dict__[attribute] = value + return + + + def __getattr__ ( self, attribute ): + if attribute.find('_') != -1: + if attribute in [ 'minEnclosure_nImplant_active' + , 'minEnclosure_pImplant_active' + ]: + raise Error( 3, 'Stack.__getattr__(): Do not access directly rule "%s".' % attribute ) + + if self.isNmos(): + if attribute == 'minEnclosure_tImplant_active': return getattr(Stack.rules,'minEnclosure_nImplant_active') + if attribute == 'minEnclosure_bImplant_active': return getattr(Stack.rules,'minEnclosure_pImplant_active') + else: + if attribute == 'minEnclosure_tImplant_active': return getattr(Stack.rules,'minEnclosure_pImplant_active') + if attribute == 'minEnclosure_bImplant_active': return getattr(Stack.rules,'minEnclosure_nImplant_active') + + return getattr(Stack.rules,attribute) + + if self.__dict__.has_key(attribute): return self.__dict__[attribute] + return None + + + @staticmethod + def _addToTracks ( tracks, trackNb, net ): + if trackNb < len(tracks): + if tracks[trackNb] and tracks[trackNb] != net: + raise Error( 3, 'Stack._addToTracks(): Track %d is already assigned to net "%s" (requested by net "%s")' + % ( trackNb, tracks[trackNb].getName(), net.getName() ) ) + tracks[ trackNb ] = net + else: + for i in range( len(tracks), trackNb ): tracks.append( None ) + tracks.append( net ) + return + + @staticmethod + def _addToWTracks ( tracks, trackNb, net ): + if trackNb < len(tracks): + if tracks[trackNb] and tracks[trackNb] != net: + raise Error( 3, 'Stack._addToTracks(): Track %d is already assigned to net "%s" (requested by net "%s")' + % ( trackNb, tracks[trackNb].getName(), net.getName() ) ) + tracks[ trackNb ] = net + else: + for i in range( len(tracks), trackNb ): tracks.append( 0 ) + tracks.append( net ) + return + + + @staticmethod + def toGeomod ( geoFlags, nf ): + geomod = 0 + + # Check for geomod 9 & 10 first, because they require the additionnal + # condition that "nf" must be even. They lead to simpler equations in + # The BSIM4 model. + #if nf%2 == 0: + + if geoFlags == (Stack.SourceIsolated | Stack.DrainIsolated): geomod = 0 + elif geoFlags == (Stack.SourceIsolated | Stack.DrainShared ): geomod = 1 + elif geoFlags == Stack.SourceIsolated: geomod = 1 + elif geoFlags == (Stack.SourceShared | Stack.DrainIsolated): geomod = 2 + elif geoFlags == Stack.DrainIsolated : geomod = 2 + elif geoFlags == (Stack.SourceShared | Stack.DrainShared ): geomod = 3 + elif geoFlags == Stack.SourceShared: geomod = 3 + elif geoFlags == Stack.DrainShared : geomod = 3 + elif geoFlags == 0: geomod = 3 + elif geoFlags == (Stack.SourceIsolated | Stack.DrainMerged ): geomod = 4 + elif geoFlags == (Stack.SourceShared | Stack.DrainMerged ): geomod = 5 + elif geoFlags == Stack.DrainMerged : geomod = 5 + elif geoFlags == (Stack.SourceMerged | Stack.DrainIsolated): geomod = 6 + elif geoFlags == (Stack.SourceMerged | Stack.DrainShared ): geomod = 7 + elif geoFlags == Stack.SourceMerged: geomod = 7 + elif geoFlags == (Stack.SourceMerged | Stack.DrainMerged ): geomod = 8 + # Modes 9 & 10 are not clear to me, but we shouldn't need it ever. + + if geomod in [0, 4, 6, 8] and nf%2 == 0: + print '[WARNING] Stack.toGeomod(): In geomod %i, NF must be odd (%i)' % (geomod,nf) + + return geomod + + + ## [API] Constructor + # + # param rules The physical rule set. + # \param device The Hurricane AMS device into which the layout will be drawn. + # \param NERC Number of contact rows in external (first & last) diffusion connectors. + # \param NIRC Number of contact rows in middle diffusion connectors. + # param w The \b width of every transistor of the stack (aka \e fingers). + # param L The \b length of every transistor. + # param NFs The total number of fingers (dummies includeds). + # param NDs The number of dummies to put on each side of the stack. + + def __init__ ( self, device, NERC, NIRC ): + self.dimensioned = False + self.device = device + self.w = oroshi.adjustOnGrid(device.getW() / device.getM()) + self.L = oroshi.adjustOnGrid(device.getL()) + self.NDs = device.getExternalDummy() # Number of Dummies at each end of the stack. + self.NFs = device.getM() * self.metaTnb() + self.NDs*2 # Total number of Fingers (including dummies). + self.NERC = NERC + self.NIRC = NIRC + self.wirings = [] + self.topTracks = [] + self.botTracks = [] + self.flags = 0 + self.bulks = [ None, None, None, None ] # 0:North, 1:South, 2:East, 3:West. + self.metaTransistors = {} + + self.topWTracks = [] # widths top tracks + self.botWTracks = [] # widths bot tracks + + if device.isBulkConnected(): self.bulkNet = device.getNet( 'S' ) + else: self.bulkNet = device.getNet( 'B' ) + + bulkType = self.device.getBulkType() + if bulkType & 0x0001: self.flags |= Stack.NorthBulk + if bulkType & 0x0002: self.flags |= Stack.SouthBulk + if bulkType & 0x0004: self.flags |= Stack.EastBulk + if bulkType & 0x0008: self.flags |= Stack.WestBulk + + if self.isNmos(): + self.tImplantLayer = DataBase.getDB().getTechnology().getLayer( 'nImplant' ) + self.bImplantLayer = DataBase.getDB().getTechnology().getLayer( 'pImplant' ) + self.wellLayer = None + else: + self.tImplantLayer = DataBase.getDB().getTechnology().getLayer( 'pImplant' ) + self.bImplantLayer = DataBase.getDB().getTechnology().getLayer( 'nImplant' ) + self.wellLayer = DataBase.getDB().getTechnology().getLayer( 'pWell' ) + + return + + + def metaTnb ( self ): + metaT = 0 + for i in self.device.getInstances(): metaT += 1 + return metaT + + + ## [API] Set the Stack wiring specification. + # + # \param wiringSpec A string defining the connections for the + # gates and diffusion areas. + # + # For a comprehensive explanation of the wiring specification, refers + # to \ref secWiringSpecs . + + def setWirings ( self, wiringSpec ): + + trace( 100, 'SetWirings \n' ) + + restrictions = {} + for net in self.device.getNets(): + if net.getName() == 'anonymous': + restrictions[net] = Device.AllBlocked + else: + restrictions[net] = Device.NorthBlocked|Device.SouthBlocked + + hasTopBulkTrack = False + hasBotBulkTrack = False + specs = wiringSpec.split() + i = 0 + topBulkWiring = None + botBulkWiring = None + + trace( 100, specs ) + + for spec in specs: + wiring = Wiring( self.device, spec ) + self.wirings.append( wiring ) + + if wiring.isTop(): + #restrictions[wiring.net] = restrictions[wiring.net] & ~Device.NorthBlocked + if wiring.net == self.bulkNet: + hasTopBulkTrack = True + topBulkWiring = wiring + continue + Stack._addToTracks ( self.topTracks , wiring.topTrack, wiring.net ) + Stack._addToWTracks( self.topWTracks, wiring.topTrack, wiring.wTrack ) + restrictions[wiring.net] = restrictions[wiring.net] & ~Device.NorthBlocked + + if wiring.isBot(): + #restrictions[wiring.net] = restrictions[wiring.net] & ~Device.SouthBlocked + if wiring.net == self.bulkNet: + hasBotBulkTrack = True + botBulkWiring = wiring + continue + Stack._addToTracks ( self.botTracks , wiring.botTrack, wiring.net ) + Stack._addToWTracks( self.botWTracks, wiring.botTrack, wiring.wTrack ) + restrictions[wiring.net] = restrictions[wiring.net] & ~Device.SouthBlocked + + for net, flags in restrictions.items(): + self.device.setRestrictions( net, flags ) + + if self.flags & Stack.NorthBulk or hasTopBulkTrack: + if not self.topTracks or self.topTracks[-1] != self.bulkNet: + for net in self.topTracks: + if net == self.bulkNet: + raise Error( 3, 'Stack.setWirings(): Bulk track (net:"%s") must be topmost.' \ + % self.bulkNet.getName() ) + index = len(self.topTracks) + Stack._addToTracks( self.topTracks , index, self.bulkNet ) + if (topBulkWiring != None): Stack._addToWTracks( self.topWTracks, index, topBulkWiring.wTrack ) + elif (botBulkWiring != None): Stack._addToWTracks( self.topWTracks, index, botBulkWiring.wTrack ) + else: Stack._addToWTracks( self.topWTracks, index, self.device.getParameter('B.w').getValue() ) + + bulkIndex = len(self.topTracks)-1 + for wiring in self.wirings: + if wiring.net == self.bulkNet: wiring.setTop( bulkIndex ) + + Stack._addToTracks ( self.topTracks , len(self.topTracks) , None ) + Stack._addToWTracks( self.topWTracks, len(self.topWTracks), self.device.getParameter('B.w').getValue() ) + + if self.flags & Stack.SouthBulk or hasBotBulkTrack: + if not self.botTracks or self.botTracks[-1] != self.bulkNet: + for net in self.botTracks: + if net == self.bulkNet: + raise Error( 3, 'Stack.setWirings(): Bulk track (net:"%s") must be bottommost.' \ + % self.bulkNet.getName() ) + index = len(self.botTracks) + Stack._addToTracks( self.botTracks , index, self.bulkNet ) + if (botBulkWiring != None): Stack._addToWTracks( self.botWTracks, index, botBulkWiring.wTrack ) + elif (topBulkWiring != None): Stack._addToWTracks( self.botWTracks, index, topBulkWiring.wTrack ) + else: Stack._addToWTracks( self.botWTracks, index, self.device.getParameter('B.w').getValue() ) + bulkIndex = len(self.botTracks)-1 + for wiring in self.wirings: + if wiring.net == self.bulkNet: wiring.setBot( bulkIndex ) + + Stack._addToTracks ( self.botTracks , len(self.botTracks) , None ) + Stack._addToWTracks( self.botWTracks, len(self.botWTracks), self.device.getParameter('B.w').getValue() ) + + trace( 100, '\tbotTracks:%d topTracks:%d\n' % (len(self.topTracks),len(self.botTracks)) ) + for i in range(len(self.wirings)): + trace( 100, '\t| wirings[%d]: %s\n' % (i,str(self.wirings[i])) ) + if self.wirings[i].net == self.bulkNet: + if hasBotBulkTrack: self.wirings[i].setBot( len(self.botTracks)-2 ) + if hasTopBulkTrack: self.wirings[i].setTop( len(self.topTracks)-2 ) + trace( 100, '\t+ wirings[%d]: %s\n' % (i,str(self.wirings[i])) ) + + for i in range(len(self.wirings)): + gateName = self.wirings[i].net.getName() + if gateName[0] != 'G': continue + + leftMost = False + rightMost = False + if i == 1: leftMost = True + if i == len(self.wirings)-1: rightMost = True + + # MIN means "minimize the number of sources", so according to the + # number of transistor fingers, it is almost equivalent to + # "drain first". + if not self.metaTransistors.has_key(gateName): + MIN = 0 + if self.wirings[i-1].isDrain(): MIN = 1 + + self.metaTransistors[gateName] = { 'gate':self.wirings[i].net, 'MIN':MIN, 'NF':1 + , 'leftMost':leftMost, 'rightMost':rightMost + } + else: + self.metaTransistors[gateName]['NF'] += 1 + self.metaTransistors[gateName]['rightMost'] = rightMost + + # Compute style parameters for use in geomod equations. + for mt in self.metaTransistors.values(): + geoFlags = 0 + nf = mt['NF'] + if nf % 2: + mt['style.NDend'] = 1 + mt['style.NSend'] = 1 + mt['style.NDint'] = nf-1 + mt['style.NSint'] = nf-1 + if mt['leftMost']: + if mt['MIN'] == 1: geoFlags |= Stack.DrainIsolated + else: geoFlags |= Stack.SourceIsolated + else: + if mt['MIN'] == 1: geoFlags |= Stack.DrainShared + else: geoFlags |= Stack.SourceShared + if mt['leftMost']: + if mt['MIN'] == 1: geoFlags |= Stack.SourceIsolated + else: geoFlags |= Stack.DrainIsolated + else: + if mt['MIN'] == 1: geoFlags |= Stack.SourceShared + else: geoFlags |= Stack.DrainShared + else: + if mt['MIN']: + mt['style.NDend'] = 2 + mt['style.NSend'] = 0 + mt['style.NDint'] = (nf/2 - 1)*2 + mt['style.NSint'] = nf + if mt['leftMost'] or mt['rightMost']: geoFlags |= Stack.DrainIsolated + else: geoFlags |= Stack.DrainShared + else: + mt['style.NDend'] = 0 + mt['style.NSend'] = 2 + mt['style.NSint'] = (nf/2 - 1)*2 + mt['style.NDint'] = nf + if mt['leftMost'] or mt['rightMost']: geoFlags |= Stack.SourceIsolated + else: geoFlags |= Stack.SourceShared + + mt['style.geomod'] = Stack.toGeomod( geoFlags, mt['NF'] ) + return + + + def isNmos ( self ): return self.device.isNMOS() + def isPmos ( self ): return self.device.isPMOS() + def hasNorthBulk ( self ): return self.flags & Stack.NorthBulk + def hasSouthBulk ( self ): return self.flags & Stack.SouthBulk + def hasEastBulk ( self ): return self.flags & Stack.EastBulk + def hasWestBulk ( self ): return self.flags & Stack.WestBulk + def wiring ( self, i ): return self.wirings[i] + def tracksNb ( self ): return len(self.topTracks) + len(self.botTracks) + def topTracksNb ( self ): return len(self.topTracks) + def botTracksNb ( self ): return len(self.botTracks) + + def isTopTrack ( self, net ): + if net == self.bulkNet: return False + + trackIndex = 2 + if self.flags & Stack.NorthBulk: trackIndex = 3 + if trackIndex > len(self.topTracks): return False + if self.topTracks[-trackIndex] != net: return False + return True + + def isBotTrack ( self, net ): + if net == self.bulkNet: return False + + trackIndex = 2 + if self.flags & Stack.SouthBulk: trackIndex = 3 + if trackIndex > len(self.botTracks): return False + if self.botTracks[-trackIndex] != net: return False + return True + +###################################### + def tracksNbPitch ( self ): + nb = 0 + for i in range (self.topTracksNb()-1): + nb += self.topWTracks[i] + for i in range (self.botTracksNb()-1): + nb += self.botWTracks[i] + return nb + + def getBotTrackY ( self, i ): + nb = self.horPitch + for j in range(self.botTracksNb()-2-i): + nb += self.horPitch*self.botWTracks[self.botTracksNb()-2-j] + return nb + + def getTopTrackY ( self, i ): + y = (self.ypitches)*self.horPitch + self.getBotTrackY(0) + self.getHorizontalWidth(self.botWTracks[0]) + #y = self.activeOffsetY + (self.ypitches-1)*self.horPitch #- self.hTrackDistance + for j in range(i): + y += self.horPitch*self.topWTracks[j] + return y + + def getLastTopTrackY ( self ): return self.getTopTrackY(self.topTracksNb()-1) + def getLastTopWTracks ( self ): return self.topWTracks[self.topTracksNb()-2] + def getLastBotWTracks ( self ): return self.botWTracks[self.botTracksNb()-2] + def getHorizontalWidth ( self, trackSpan ): return (self.horPitch * (trackSpan - 1)) + def getHorizontalAxis ( self, trackSpan ): return self.getHorizontalWidth(trackSpan)/2 + + def getWiringWidth ( self, wiring, isTopConnect ): + if isTopConnect: return self.horPitch * (self.topWTracks[wiring.topTrack] - 1) + return self.horPitch * (self.botWTracks[wiring.botTrack] - 1) + +###################################### + def DMCI ( self ): + if not self.dimensioned: self.computeDimensions() + return self.sideActiveWidth \ + - self.L/2 \ + - self.metal1ToGate \ + - self.eDiffMetal1Width/2 + + def DMCG ( self ): + if not self.dimensioned: self.computeDimensions() + return (self.gatePitch - self.L)/2 + + def DMCGT ( self ): return 0.0 + + def DGG ( self ): + if not self.dimensioned: self.computeDimensions() + return self.gatePitch - self.L + + def DGI ( self ): + if not self.dimensioned: self.computeDimensions() + return self.sideActiveWidth - self.L/2 + + + ## [internal] Compute Stack dimensions from the technological rules. + # + # Internal function. Perform the computation of: + # - \c self.metal1Pitch + # - \c self.minWidth_metal1 + # - \c self.metal2Pitch + # - \c self.minWidth_metal2 + # - \c self.gatePitch + # - \c self.sideActiveWidth + # - \c self.hTrackDistance + # - \c self.xpitches + # - \c self.ypitches + # - \c self.activeOffsetX + # - \c self.activeOffsetY + # - \c self.boundingBox + + def computeDimensions ( self ): + if self.dimensioned: return + self.dimensioned = True + + trace( 100, '\tStack.computeDimensions(): Start time %s.\n' % str(datetime.datetime.now()) ) + + specsNb = 3 + (self.NFs - 1)*2 + if len(self.wirings) != specsNb: + raise Error( 3, [ 'Stack._computeDimension(): Wiring inconsistency,' \ + ' have %d specs but should be %d for a NFs of %d.' \ + % (len(self.wirings), specsNb, self.NFs) + ] ) + + rg = AllianceFramework.get().getRoutingGauge() + self.metal2Pitch = rg.getHorizontalPitch() + self.metal3Pitch = rg.getVerticalPitch() + self.isVH = rg.isVH() + + foundHor = False + foundVer = False + for depth in range(rg.getDepth()): + rlg = rg.getLayerGauge(depth) + if rlg.getType() == Constant.PinOnly: continue + if rlg.getDirection() == Constant.Horizontal and not foundHor: + self.horPitch = rlg.getPitch() + foundHor = True + if rlg.getDirection() == Constant.Vertical and not foundVer: + self.verPitch = rlg.getPitch() + foundVer = True + + width1 = self.minWidth_cut0 + self.minEnclosure_metal1_cut0*2 + width2 = self.minWidth_cut1 + self.minEnclosure_metal1_cut1*2 + self.wire1Width = max( self.minWidth_metal1, width1, width2 ) + + pitch1 = self.minWidth_metal2 + self.minSpacing_metal2 + pitch2 = self.minWidth_cut1 + self.minEnclosure_metal2_cut1*2 + self.minSpacing_metal2 + self.metal2TechnoPitch = max( pitch1, pitch2 ) + + if self.metal2Pitch == 0: self.metal2Pitch = self.metal2TechnoPitch + if self.metal2Pitch < self.metal2TechnoPitch: + raise Error( 3, 'Stack.computeDimensions(): Routing gauge pitch %s is inferior to technology minimum of %s.' + % ( DbU.getValueString(self.metal2Pitch) + , DbU.getValueString(self.metal2TechnoPitch) ) ) + + width1 = self.minWidth_cut1 + self.minEnclosure_metal2_cut1*2 + if self.isVH: + self.wire2Width = self.minWidth_metal2 + self.wire3Width = self.minWidth_metal3 + else: + self.wire2Width = max( self.minWidth_metal2, width1 ) + + pitch1 = self.minGateSpacing_poly + self.minWidth_cut0 + pitch2 = self.minSpacing_cut1 + self.minWidth_cut1 + self.gateVia1Pitch = max( pitch1, pitch2 ) + + pitch1 = self.minWidth_cut0 + self.minSpacing_cut0 + pitch2 = self.minWidth_cut1 + self.minSpacing_cut1 + self.contactDiffPitch = max( pitch1, pitch2 ) + self.contactDiffSide = max( self.minWidth_cut1, self.minWidth_cut0 ) + + iDiffContactWidth = self.contactDiffSide + (self.NIRC - 1)*self.contactDiffPitch + eDiffContactWidth = self.contactDiffSide + (self.NERC - 1)*self.contactDiffPitch + overlap = max( self.minEnclosure_metal1_cut0, self.minEnclosure_metal1_cut1 ) + gateVia1Side = max( self.minWidth_cut1, self.minWidth_cut0 ) + self.iDiffMetal1Width = iDiffContactWidth + overlap*2 + self.eDiffMetal1Width = eDiffContactWidth + overlap*2 + + pitch1 = self.L \ + + iDiffContactWidth \ + + self.minSpacing_cut0_poly*2 + pitch2 = self.minWidth_cut0 \ + + self.minEnclosure_poly_cut0*2 \ + + self.minGateSpacing_poly + pitch3 = self.minSpacing_metal1*2 \ + + self.iDiffMetal1Width \ + + max( self.L, gateVia1Side+2*overlap ) + self.gatePitch = max( pitch1, pitch2, pitch3 ) + self.metal1ToGate = (self.gatePitch - self.L - self.iDiffMetal1Width) / 2 + + self.sideActiveWidth = self.minEnclosure_active_cut0 \ + - self.minEnclosure_metal1_cut0 \ + + self.eDiffMetal1Width \ + + self.metal1ToGate \ + + self.L/2 + + hTrackDistance1 = self.minWidth_cut0/2 + self.minSpacing_cut0_active + hTrackDistance2 = self.minWidth_cut0/2 + self.minEnclosure_poly_cut0 + self.minSpacing_poly_active + self.hTrackDistance = max( hTrackDistance1, hTrackDistance2 ) + + vBulkDistance1 = self.minWidth_cut0/2 \ + + self.minEnclosure_active_cut0 \ + + self.minEnclosure_tImplant_active \ + + self.minEnclosure_bImplant_active + vBulkDistance2 = self.minWidth_cut0/2 \ + + self.minEnclosure_active_cut0 \ + + self.minSpacing_nImplant_pImplant + self.vBulkDistance = max( vBulkDistance1, vBulkDistance2 ) + + activeHeight = self.w + 2*self.hTrackDistance + self.ypitches = activeHeight / self.horPitch + if activeHeight % self.horPitch: self.ypitches += 1 + if (self.ypitches + self.tracksNbPitch()) % 2: self.ypitches += 1 + + diffusionWidth = (self.sideActiveWidth + self.minEnclosure_tImplant_active)*2 + (self.NFs-1)*self.gatePitch + deviceMinWidth = diffusionWidth + if self.flags & Stack.WestBulk: deviceMinWidth += self.vBulkDistance + self.verPitch + if self.flags & Stack.EastBulk: deviceMinWidth += self.vBulkDistance + self.verPitch + + self.xpitches = deviceMinWidth / self.verPitch + if self.xpitches % 2: + self.xpitches += 1 + else: + if diffusionWidth % self.verPitch: + self.xpitches += 2 + + self.activeOffsetY = self.getBotTrackY(0) + self.getHorizontalWidth(self.botWTracks[0]) \ + + self.hTrackDistance \ + + (self.ypitches*self.horPitch - activeHeight)/2 \ + + self.bbHeight = self.getLastTopTrackY() + + self.bbWidth = self.xpitches * self.verPitch + diffusionRealWidth = self.bbWidth + if self.flags & Stack.WestBulk: diffusionRealWidth -= self.vBulkDistance + self.verPitch + if self.flags & Stack.EastBulk: diffusionRealWidth -= self.vBulkDistance + self.verPitch + self.activeOffsetX = self.minEnclosure_tImplant_active + (diffusionRealWidth - diffusionWidth)/2 + if self.flags & Stack.WestBulk: self.activeOffsetX += self.vBulkDistance + self.verPitch + + self.boundingBox = Box( 0, 0, self.bbWidth, self.bbHeight ) + self.activeBox = Box( self.activeOffsetX + , self.activeOffsetY + , self.activeOffsetX + (self.NFs - 1) * self.gatePitch + 2*self.sideActiveWidth + , self.activeOffsetY + self.w + ) + + westBulkX = self.activeOffsetX + eastBulkX = self.activeOffsetX + diffusionWidth - self.minEnclosure_tImplant_active*2 + southBulkY = self.boundingBox.getYMin() + self.horPitch + northBulkY = self.boundingBox.getYMax() - self.horPitch + + + self.bulkWidth = self.minWidth_cut0 + 2*self.minEnclosure_active_cut0 + + if self.flags & Stack.EastBulk: + eastBulkX = self.boundingBox.getXMax() - self.horPitch + self.bulks[2] = Bulk( self, eastBulkX, southBulkY, northBulkY, Stack.EastBulk ) + + if self.flags & Stack.WestBulk: + westBulkX = self.horPitch + self.bulks[3] = Bulk( self, westBulkX, southBulkY, northBulkY, Stack.WestBulk ) + + if self.flags & Stack.NorthBulk: + self.bulks[0] = Bulk( self, northBulkY, westBulkX, eastBulkX, Stack.NorthBulk ) + + if self.flags & Stack.SouthBulk: + self.bulks[1] = Bulk( self, southBulkY, westBulkX, eastBulkX, Stack.SouthBulk ) + + self.DMCI = oroshi.toUnity( self.sideActiveWidth + - self.L/2 + - self.metal1ToGate + - self.eDiffMetal1Width/2 ) + self.DMCG = oroshi.toUnity( (self.gatePitch - self.L)/2 ) + self.DMCGT = 0 + self.DGG = oroshi.toUnity( self.gatePitch - self.L ) + self.DGI = oroshi.toUnity( self.sideActiveWidth - self.L/2 ) + + trace( 100, '+' ) + trace( 100, '\t +----------------------------------+\n' ) + trace( 100, '\t | Parameters |\n' ) + trace( 100, '\t +=====================+============+\n' ) + trace( 100, '\t | w (finger) | %10s |\n' % DbU.getValueString(self.w) ) + trace( 100, '\t | L | %10s |\n' % DbU.getValueString(self.L) ) + trace( 100, '\t | NFs | %10d |\n' % self.NFs ) + trace( 100, '\t +=====================+============+\n' ) + trace( 100, '\t | Computed |\n' ) + trace( 100, '\t +=====================+============+\n' ) + trace( 100, '\t | metal2 pitch | %10s |\n' % DbU.getValueString(self.metal2Pitch) ) + trace( 100, '\t | metal2 Techno pitch | %10s |\n' % DbU.getValueString(self.metal2TechnoPitch) ) + trace( 100, '\t | gatePitch | %10s |\n' % DbU.getValueString(self.gatePitch) ) + trace( 100, '\t | sideActiveWidth | %10s |\n' % DbU.getValueString(self.sideActiveWidth) ) + trace( 100, '\t | contactDiffPitch | %10s |\n' % DbU.getValueString(self.contactDiffPitch) ) + trace( 100, '\t | hTrackDistance | %10s |\n' % DbU.getValueString(self.hTrackDistance) ) + trace( 100, '\t | vBulkDistance | %10s |\n' % DbU.getValueString(self.vBulkDistance) ) + trace( 100, '\t | activeOffsetX | %10s |\n' % DbU.getValueString(self.activeOffsetX) ) + trace( 100, '\t | activeOffsetY | %10s |\n' % DbU.getValueString(self.activeOffsetY) ) + trace( 100, '\t | active pitches | %10d |\n' % self.ypitches ) + trace( 100, '\t +---------------------+------------+\n' ) + trace( 100, '\n' ) + trace( 100, '\tStack.computeDimensions(): End time %s.\n' % str(datetime.datetime.now()) ) + trace( 100, '-' ) + + for mt in self.metaTransistors.values(): + self.computeStressEffect( mt ) + self.computeLayoutParasitics( mt ) + traceMT( mt ) + return + + ## [API] Draw the complete layout. + # + # Draw the commplete layout of the Stack. + + def doLayout ( self, bbMode ): + trace( 100, '+', '\tStack.doLayout().\n' ) + + self.computeDimensions() + + if not bbMode: + UpdateSession.open() + + self.drawActive() + self.drawWell() + + xoffset = self.activeOffsetX + self.sideActiveWidth + for i in range(self.NFs): + self.drawGate( xoffset + i*self.gatePitch, self.wirings[1+2*i] ) + + for i in range(self.NFs+1): + if i == 0: # Leftmost diffusion area. + NRC = self.NERC + width = self.eDiffMetal1Width + axis = self.activeOffsetX \ + + self.sideActiveWidth \ + - self.L/2 \ + - self.metal1ToGate \ + - width/2 + elif i == self.NFs: # Rightmost diffusion area. + NRC = self.NERC + width = self.eDiffMetal1Width + axis = self.activeOffsetX \ + + self.sideActiveWidth \ + + self.gatePitch*(self.NFs - 1) \ + + self.L/2 \ + + self.metal1ToGate \ + + width/2 + else: # Middle diffusion areas. + NRC = self.NIRC + width = self.iDiffMetal1Width + axis = self.activeOffsetX \ + + self.sideActiveWidth \ + - self.gatePitch/2 \ + + self.gatePitch*i + + self.drawSourceDrain( axis, self.wirings[2*i], width, NRC ) + + capSpacing = self.minSpacing_metal2 + self.minWidth_metal2/2 + capSpacing = max( capSpacing, self.minSpacing_metal3 + self.minWidth_metal3/2 ) + + metal2 = DataBase.getDB().getTechnology().getLayer( 'metal2' ) + metal3 = DataBase.getDB().getTechnology().getLayer( 'metal3' ) + trackNb = 0 + if self.topTracks: trackNb = len(self.topTracks) + for i in range(trackNb): + if not self.topTracks[i]: continue + h = Horizontal.create( self.topTracks[i] + , metal2 + , self.getTopTrackY(i) + self.getHorizontalAxis (self.topWTracks[i]) + , self.wire2Width + self.getHorizontalWidth(self.topWTracks[i]) + , capSpacing + , self.bbWidth - capSpacing ) + if self.isVH: + h = Horizontal.create( self.topTracks[i] + , metal3 + , self.getTopTrackY(i) + self.getHorizontalAxis (self.topWTracks[i]) + , self.wire3Width + self.getHorizontalWidth(self.topWTracks[i]) + , capSpacing + , self.bbWidth - capSpacing ) + NetExternalComponents.setExternal( h ) + + trackNb = 0 + if self.botTracks: trackNb = len(self.botTracks) + for i in range(trackNb): + if not self.botTracks[i]: continue + h = Horizontal.create( self.botTracks[i] + , metal2 + , self.getBotTrackY(i) + self.getHorizontalAxis (self.botWTracks[i]) + , self.wire2Width + self.getHorizontalWidth(self.botWTracks[i]) + , capSpacing + , self.bbWidth - capSpacing ) + if self.isVH: + h = Horizontal.create( self.botTracks[i] + , metal3 + , self.getBotTrackY(i) + self.getHorizontalAxis (self.botWTracks[i]) + , self.wire3Width + self.getHorizontalWidth(self.botWTracks[i]) + , capSpacing + , self.bbWidth - capSpacing ) + NetExternalComponents.setExternal( h ) + + + for bulk in self.bulks: + if bulk: bulk.doLayout() + + UpdateSession.close() + + trace( 100, '\tStack.doLayout(): End time %s\n' %str(datetime.datetime.now()) ) + trace( 100, '-' ) + return self.boundingBox + + + def drawActive ( self ): + trace( 100, '+', '\tDrawActive().\n' ) + activeNet = self.device.getNet( 'active' ) + if not activeNet: activeNet = Net.create( self.device, 'active' ) + activeNet.setAutomatic( True ) + + tImplantNet = self.device.getNet( 'nImplant' ) + if not tImplantNet: tImplantNet = Net.create( self.device, 'nImplant' ) + tImplantNet.setAutomatic( True ) + + active = DataBase.getDB().getTechnology().getLayer( 'active' ) + width = self.w + length = (self.NFs - 1) * self.gatePitch + 2*self.sideActiveWidth + axis = width / 2 + xoffset = self.activeOffsetX + yoffset = self.activeOffsetY + segment = Horizontal.create( activeNet, active, yoffset+axis, width, xoffset, xoffset+length ) + + width = width + 2*self.minEnclosure_tImplant_active + length = length + 2*self.minEnclosure_tImplant_active + axis = width / 2 + xoffset = self.activeOffsetX - self.minEnclosure_tImplant_active + yoffset = self.activeOffsetY - self.minEnclosure_tImplant_active + segment = Horizontal.create( tImplantNet + , self.tImplantLayer + , yoffset+axis + , width + , xoffset + , xoffset+length ) + return + + + def drawWell ( self ): + if self.wellLayer: + trace( 100, '+', '\tDrawWell().\n' ) + Pad.create( self.device.getNet('anonymous'), self.wellLayer, self.boundingBox ) + return + + + def drawGate ( self, axis, wiring ): + trace( 100, '\tStack.drawGate(): %s\n' % wiring ) + + gate = DataBase.getDB().getTechnology().getLayer( 'poly' ) + cut0 = DataBase.getDB().getTechnology().getLayer( 'cut0' ) + cut1 = DataBase.getDB().getTechnology().getLayer( 'cut1' ) + cut2 = DataBase.getDB().getTechnology().getLayer( 'cut2' ) + metal1 = DataBase.getDB().getTechnology().getLayer( 'metal1' ) + metal2 = DataBase.getDB().getTechnology().getLayer( 'metal2' ) + metal3 = DataBase.getDB().getTechnology().getLayer( 'metal3' ) + width = self.L + + if wiring.isTop(): ytarget = self.getTopTrackY( wiring.topTrack ) + else: ytarget = self.activeOffsetY + self.minExtension_poly_active + self.w + + if wiring.isBot(): ysource = self.getBotTrackY( wiring.botTrack ) + else: ysource = self.activeOffsetY - self.minExtension_poly_active + + segment = Vertical.create( wiring.net, gate, axis, width, ysource, ytarget ) + + contactHeight = self.minWidth_cut0 + 2*self.minEnclosure_poly_cut0 + contactWidth = max( contactHeight, self.L ) + contactsNb = (contactWidth - 2*self.minEnclosure_poly_cut0) / self.gateVia1Pitch + if contactsNb: + contactPitch = contactWidth / contactsNb + else: + contactsNb = 1 + contactPitch = self.L + + gateVia1Overlap = max( self.minEnclosure_metal1_cut0, self.minEnclosure_metal1_cut1 ) + gateVia1Side = max( self.minWidth_cut1, self.minWidth_cut0 ) + + for connector in ( (wiring.isTop(),ytarget,True), (wiring.isBot(),ysource,False) ): + if not connector[0]: continue + + isTopConnect = connector[2] + yoffset = connector[1] + xcontact = axis - self.L/2 + contactPitch/2 + contactBb = Box( axis, yoffset ).inflate( contactWidth/2, contactHeight/2) + width = gateVia1Side + 2*gateVia1Overlap + self.getWiringWidth(wiring, isTopConnect) + y = yoffset + self.getWiringWidth(wiring, isTopConnect)/2 + rowHeight = self.horPitch + + if isTopConnect: + contactBb = Box( axis, yoffset ).inflate( contactWidth/2, contactHeight/2+self.getWiringWidth(wiring, isTopConnect)) + + Pad.create( wiring.net, gate, contactBb ) # GateExtension Contact + Horizontal.create( wiring.net + , metal1 + , y + , width + , xcontact - gateVia1Side/2 - gateVia1Overlap + , xcontact + (contactsNb-1)*contactPitch + gateVia1Side/2 + gateVia1Overlap )# M1 area + + + cut1Bb = Box() + cut2Bb = Box() + for i in range(contactsNb): + if isTopConnect: rangeWidth = range(self.topWTracks[wiring.topTrack]) + else: range(self.botWTracks[wiring.botTrack]) + + for j in rangeWidth: + contactBb = Box( xcontact, yoffset ).inflate( self.minWidth_cut0/2 ) + Pad.create( wiring.net, cut0, contactBb ) + contactBb = Box( xcontact, yoffset ).inflate( self.minWidth_cut1/2 ) + Pad.create( wiring.net, cut1, contactBb ) + cut1Bb.merge( contactBb ) + if self.isVH: + contactBb = Box( xcontact, yoffset ).inflate( self.minWidth_cut2/2 ) + Pad.create( wiring.net, cut2, contactBb ) + cut2Bb.merge( contactBb ) + yoffset += rowHeight + yoffset -= rowHeight*self.topWTracks[wiring.topTrack] + + if self.isVH: + metal2EnclBb = Box( cut1Bb ).inflate( self.minEnclosure_metal2_cut1 ) + metal2EnclBb.merge( Box( cut2Bb ).inflate( self.minEnclosure_metal2_cut2 ) ) + Pad.create( wiring.net, metal2, metal2EnclBb ) + + metal3EnclBb = Box( cut2Bb ).inflate( self.minEnclosure_metal3_cut2 ) + Pad.create( wiring.net, metal3, metal3EnclBb ) + + enable = False + if wiring.net == self.bulkNet: enable = True + if connector[0] & Stack.NorthBulk and self.bulks[0]: self.bulks[0].addContact( xcontact, enable ) + if connector[0] & Stack.SouthBulk and self.bulks[1]: self.bulks[1].addContact( xcontact, enable ) + + xcontact += contactPitch + + return + + + def drawSourceDrain ( self, axis, wiring, width, cols ): + trace( 100, '\tStack.drawSourceDrain(): %s @%s width:%s NRC=%d\n' \ + % (wiring, DbU.getValueString(axis), DbU.getValueString(width), cols ) ) + + metal1 = DataBase.getDB().getTechnology().getLayer( 'metal1' ) + metal2 = DataBase.getDB().getTechnology().getLayer( 'metal2' ) + metal3 = DataBase.getDB().getTechnology().getLayer( 'metal3' ) + cut0 = DataBase.getDB().getTechnology().getLayer( 'cut0' ) + cut1 = DataBase.getDB().getTechnology().getLayer( 'cut1' ) + cut2 = DataBase.getDB().getTechnology().getLayer( 'cut2' ) + rows = max( 1, (self.w - 2*self.minEnclosure_active_cut0) / self.contactDiffPitch ) + ypitch = self.w / rows + yoffset = self.activeOffsetY + ypitch/2 + xpitch = self.contactDiffPitch + ypitch2 = self.horPitch + xoffset = axis - (self.contactDiffPitch * (cols - 1))/2 + + if self.w < 2*self.minEnclosure_active_cut0 + self.minWidth_cut0: + active = DataBase.getDB().getTechnology().getLayer( 'active' ) + + box = Box( xoffset, yoffset, xoffset + (cols-1)*xpitch, yoffset ) + box.inflate( self.minWidth_cut0 + self.minEnclosure_active_cut0 ) + Pad.create( wiring.net, active, box ) + + box.inflate( self.minEnclosure_tImplant_active ) + Pad.create( wiring.net, self.tImplantLayer, box ) + + for j in range(rows): + for i in range(cols): + contact = Contact.create( wiring.net + , cut0 + , xoffset + i*xpitch + , yoffset + j*ypitch + , self.minWidth_cut0 + , self.minWidth_cut0 ) + + if wiring.isTop(): + ytarget = self.getTopTrackY( wiring.topTrack ) + for i in range(cols): + for j in range(self.topWTracks[wiring.topTrack]): + Contact.create( wiring.net + , cut1 + , xoffset + i*xpitch + , ytarget + j*ypitch2 + , self.minWidth_cut1 + , self.minWidth_cut1 ) + Contact.create( wiring.net + , cut2 + , xoffset + i*xpitch + , ytarget + j*ypitch2 + , self.minWidth_cut2 + , self.minWidth_cut2 ) + + enable = False + if wiring.net == self.bulkNet: enable = True + if self.bulks[0]: self.bulks[0].addContact( xoffset + i*xpitch, enable ) + + if self.isVH: + cutBb = Box( xoffset + , ytarget + , xoffset + xpitch *(cols - 1) + , ytarget + ypitch2*(self.topWTracks[wiring.topTrack] - 1) ) + + metal2EnclBb = Box( cutBb ).inflate( self.minEnclosure_metal2_cut1 + self.minWidth_cut1/2 ) + metal2EnclBb.merge( Box( cutBb ).inflate( self.minEnclosure_metal2_cut2 + self.minWidth_cut2/2 ) ) + Pad.create( wiring.net, metal2, metal2EnclBb ) + + metal3EnclBb = Box( cutBb ).inflate( self.minEnclosure_metal3_cut2 + self.minWidth_cut2/2 ) + Pad.create( wiring.net, metal3, metal3EnclBb ) + + ytarget += ypitch2*(self.topWTracks[wiring.topTrack]-1) + else: + ytarget = yoffset + ypitch*(rows - 1) + + if wiring.isBot(): + ysource = self.getBotTrackY( wiring.botTrack ) + for i in range(cols): + for j in range(self.botWTracks[wiring.botTrack]): + Contact.create( wiring.net + , cut1 + , xoffset + i*xpitch + , ysource + j*ypitch2 + , self.minWidth_cut1 + , self.minWidth_cut1 ) + Contact.create( wiring.net + , cut2 + , xoffset + i*xpitch + , ysource + j*ypitch2 + , self.minWidth_cut2 + , self.minWidth_cut2 ) + + if self.bulks[1]: + if self.isBotTrack(wiring.net) or wiring.net == self.bulkNet: + enable = False + if wiring.net == self.bulkNet: enable = True + self.bulks[1].addContact( xoffset + i*xpitch, enable ) + + if self.isVH: + cutBb = Box( xoffset + , ysource + , xoffset + xpitch *(cols - 1) + , ysource + ypitch2*(self.botWTracks[wiring.botTrack] - 1) ) + + metal2EnclBb = Box( cutBb ).inflate( self.minEnclosure_metal2_cut1 + self.minWidth_cut1/2 ) + metal2EnclBb.merge( Box( cutBb ).inflate( self.minEnclosure_metal2_cut2 + self.minWidth_cut2/2 ) ) + Pad.create( wiring.net, metal2, metal2EnclBb ) + + metal3EnclBb = Box( cutBb ).inflate( self.minEnclosure_metal3_cut2 + self.minWidth_cut2/2 ) + Pad.create( wiring.net, metal3, metal3EnclBb ) + else: + ysource = yoffset + + bcontact = Contact.create( wiring.net + , metal1 + , axis + , ysource + , width + , self.wire1Width ) + tcontact = Contact.create( wiring.net + , metal1 + , axis + , ytarget + , width + , self.wire1Width ) + segment = Vertical.create( bcontact, tcontact, metal1, axis, width ) + + return + + + def computeStressEffect ( self, mt ): + # Stress effect computation as specified in S. Youssef thesis, p.59. + eastBulkWidth = 0 + westBulkWidth = 0 + if self.flags & Stack.WestBulk: westBulkWidth = self.bulkWidth + if self.flags & Stack.EastBulk: eastBulkWidth = self.bulkWidth + + L = oroshi.toUnity( self.L ) + sumA_Bsim4 = 0.0 + sumB_Bsim4 = 0.0 + sumA_Crolles = 0.0 + sumB_Crolles = 0.0 + + for i in range(self.NFs): + if not self.wirings[i].net != mt['gate']: continue + + sa = self.DGI + westBulkWidth + i *(L + self.DGG) + sb = self.DGI + eastBulkWidth + (self.NFs - i - 1)*(L + self.DGG) + + sumA_Bsim4 += 1 / (sa + 0.5*self.DGG) + sumB_Bsim4 += 1 / (sb + 0.5*self.DGG) + sumA_Crolles += 1 / sa + sumB_Crolles += 1 / sb + + SAinv_Bsim4 = sumA_Bsim4 / mt['NF'] + SBinv_Bsim4 = sumB_Bsim4 / mt['NF'] + SAinv_Crolles = sumA_Crolles / mt['NF'] + SBinv_Crolles = sumB_Crolles / mt['NF'] + + mt['stress.SAinv_Bsim4'] = SAinv_Bsim4 + mt['stress.SBinv_Bsim4'] = SBinv_Bsim4 + mt['stress.SAeff_Bsim4'] = 1 / SAinv_Bsim4 + mt['stress.SBeff_Bsim4'] = 1 / SBinv_Bsim4 + mt['stress.LODeffect' ] = 1 / SAinv_Bsim4 + 1 / SBinv_Bsim4 + mt['stress.alpha' ] = 2 / ( SAinv_Bsim4 + SBinv_Bsim4 ) + mt['stress.alphaInv' ] = 1 / mt['stress.alpha'] + + mt['stress.SAinv_Crolles' ] = SAinv_Crolles + mt['stress.SBinv_Crolles' ] = SBinv_Crolles + mt['stress.SAeff_Crolles' ] = 1 / SAinv_Crolles + mt['stress.SBeff_Crolles' ] = 1 / SBinv_Crolles + mt['stress.po2actEff_Crolles'] = 2 / ( SAinv_Crolles + SBinv_Crolles ) + + return + + + def computeLayoutParasitics ( self, mt ): + #trace( 100, '\tStack.computeLayoutParasitics(): %s\n' % str(mt) ) + + NSend = mt['style.NSend'] + NDend = mt['style.NDend'] + NSint = mt['style.NSint'] + NDint = mt['style.NDint'] + NF = mt['NF'] + Weff = oroshi.toUnity( self.w ) + DMCI = self.DMCI + DMCG = self.DMCG + DMCGT = self.DMCGT + + if mt['style.geomod'] == 0: + ASeff = NSend * ( DMCG + DMCI - DMCGT) * Weff + NSint *(DMCG - DMCGT)*Weff + PSeff = NSend * ( 2*(DMCG + DMCI - DMCGT) + Weff) + NSint * 2*(DMCG - DMCGT) + ADeff = NDend * ( DMCG + DMCI - DMCGT) * Weff + NDint *(DMCG - DMCGT)*Weff + PDeff = NDend * ( 2*(DMCG + DMCI - DMCGT) + Weff) + NDint * 2*(DMCG - DMCGT) + elif mt['style.geomod'] == 1: + ASeff = NSend * (DMCG + DMCI - DMCGT) * Weff + NSint *(DMCG - DMCGT)*Weff + PSeff = NSend * ( 2*(DMCG + DMCI - DMCGT) + Weff) + NSint *2*(DMCG - DMCGT) + ADeff = NDend * (DMCG - DMCGT)*Weff + NDint *(DMCG - DMCGT)*Weff + PDeff = NDend * 2*(DMCG - DMCGT) + NDint *2*(DMCG - DMCGT) + elif mt['style.geomod'] == 2: + ASeff = NSend * (DMCG - DMCGT) * Weff + NSint *(DMCG - DMCGT)*Weff + PSeff = NSend * 2 * (DMCG - DMCGT) + NSint *2*(DMCG - DMCGT) + ADeff = NDend * (DMCG + DMCI - DMCGT) * Weff + NDint *(DMCG - DMCGT)*Weff + PDeff = NDend * ( 2*(DMCG + DMCI - DMCGT) + Weff) + NDint *2*(DMCG - DMCGT) + elif mt['style.geomod'] == 3: + ASeff = NSend *(DMCG - DMCGT) * Weff + NSint *(DMCG - DMCGT)*Weff + PSeff = NSend *2*(DMCG - DMCGT) + NSint *2*(DMCG - DMCGT) + ADeff = NDend *(DMCG + DMCI - DMCGT) * Weff + NDint *(DMCG - DMCGT)*Weff + PDeff = NDend * ( 2*(DMCG + DMCI - DMCGT) + Weff) + NDint *2*(DMCG - DMCGT) + elif mt['style.geomod'] == 4: + ASeff = NSend * (DMCG + DMCI - DMCGT) * Weff + NSint *(DMCG - DMCGT)*Weff + PSeff = NSend * ( 2*(DMCG + DMCI - DMCGT) * Weff) + NSint *2*(DMCG - DMCGT) + ADeff = NDend * (DMDG - DMCGT)*Weff + NDint *(DMCG - DMCGT)*Weff + PDeff = NDend * 2*(DMDG - DMCGT) + NDint *2*(DMCG - DMCGT) + elif mt['style.geomod'] == 5: + ASeff = NSend *(DMCG - DMCGT)*Weff + NSint *(DMCG - DMCGT)*Weff + PSeff = NSend * 2 *(DMCG - DMCGT) + NSint*2*(DMCG - DMCGT) + ADeff = NDend *(DMDG - DMCGT) * Weff + NDint *(DMCG - DMCGT)*Weff + PDeff = NDend * ( 2*(DMDG - DMCGT) * Weff) + NDint*2*(DMCG - DMCGT) + elif mt['style.geomod'] == 5: + ASeff = NSend *(DMDG - DMCGT)*Weff + NSint *(DMDG - DMCGT)*Weff + PSeff = NSend *2*(DMCG - DMCGT) + NSint*2*(DMCG - DMCGT) + ADeff = NDend *(DMCG + DMCI - DMCGT) * Weff + NDint *(DMCG - DMCGT)*Weff + PDeff = NDend * ( 2*(DMCG + DMCI - DMCGT) * Weff) + NDint*2*(DMCG - DMCGT) + elif mt['style.geomod'] == 6: + ASeff = NSend *(DMDG - DMCGT)*Weff + NSint *(DMDG - DMCGT)*Weff + PSeff = NSend *2*(DMCG - DMCGT) + NSint*2*(DMCG - DMCGT) + ADeff = NDend *(DMCG + DMCI - DMCGT) * Weff + NDint *(DMCG - DMCGT)*Weff + PDeff = NDend * ( 2*(DMCG + DMCI - DMCGT) * Weff) + NDint*2*(DMCG - DMCGT) + elif mt['style.geomod'] == 7: + ASeff = NSend *(DMDG - DMCGT)*Weff + NSint *(DMCG - DMCGT)*Weff + PSeff = NSend *2*(DMDG - DMCGT) + NSint*2*(DMCG - DMCGT) + ADeff = NDend *(DMCG - DMCGT)*Weff + NDint *(DMCG - DMCGT)*Weff + PDeff = NDend *2*(DMCG - DMCGT) + NDint*2*(DMCG - DMCGT) + elif mt['style.geomod'] == 8: + ASeff = NSend *(DMDG - DMCGT)*Weff + NSint *(DMCG - DMCGT)*Weff + PSeff = NSend *2*(DMDG - DMCGT) + NSint*2*(DMCG - DMCGT) + ADeff = NDend *(DMDG - DMCGT)*Weff + NDint *(DMCG - DMCGT)*Weff + PDeff = NDend *2*(DMDG - DMCGT) + NDint*2*(DMCG - DMCGT) + elif mt['style.geomod'] == 9: + ASeff = (DMCG + DMCI - DMCGT) * Weff + (NF-1) *(DMCG - DMCGT)*Weff + PSeff = (2*(DMCG + DMCI - DMCGT) + Weff) + (NF-1)*2*(DMCG - DMCGT) + ADeff = NF *(DMCG - DMCGT)*Weff + PDeff = NF* 2*(DMCG - DMCGT) + elif mt['style.geomod'] == 10: + ASeff = NF *(DMCG - DMCGT)*Weff + PSeff = NF* 2*(DMCG - DMCGT) + ADeff = (DMCG + DMCI - DMCGT) * Weff + (NF-1) *(DMCG - DMCGT)*Weff + PDeff = (2*(DMCG + DMCI - DMCGT) + Weff) + (NF-1)*2*(DMCG - DMCGT) + else: + raise Error( 3, 'Stack.computeLayoutParasitics(): Unknown GEOMOD %s for meta-transistor \"%s\".' + % ( mt['style.geomod'], mt['gate'].getName() ) ) + + mt['parasitics.ASeff'] = ASeff + mt['parasitics.PSeff'] = PSeff + mt['parasitics.ADeff'] = ADeff + mt['parasitics.PDeff'] = PDeff + + return diff --git a/oroshi/python/WIP_CSP.py b/oroshi/python/WIP_CSP.py new file mode 100644 index 00000000..2fb88a77 --- /dev/null +++ b/oroshi/python/WIP_CSP.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- + +from Hurricane import DataBase +from Hurricane import UpdateSession +from Hurricane import DbU +from Hurricane import Box +import helpers +from helpers import trace + +helpers.staticInitialization( quiet=True ) +helpers.setTraceLevel( 1000 ) + +import Analog +import ParamsMatrix +import Stack +import oroshi + + +def checkCoherency ( args ): + message = '[ERROR] CommonSourcePair.checkCoherency():\n' + + techno = DataBase..getDB().getTechnology() + rules = Analog.getRules( techno, Analog.Flag.StandardRules ) + + M = args.getM() + mMax = args.getW() / rules['transistorMinW'] + if M > mMax: + message += \ + ' W/M ratio must be greater than transistor minimal width (%d)\n' \ + ' Please increase W or decrease M.' \ + % rules['transistorMinW'] + return False, message + + mint = args.getMInt() + if mint != 2: + message += ' For interdigitaded layout style, Mint *must* be equal to 2 (not %d)\n' % mint + return False, message + + return True, '' + + +def layout ( device, args, bbMode ): + + trace( 100, ',+', '\tWIP_CSP.layout() called.\n' ) + nerc = device.getParameter( 'NERC' ).getValue() + nirc = device.getParameter( 'NIRC' ).getValue() + + stack = Stack.Stack( device, nerc, nirc ) + + bw = str(device.getParameter( 'B.w' ).getValue()) + d1w = str(device.getParameter( 'D1.w' ).getValue()) + d2w = str(device.getParameter( 'D2.w' ).getValue()) + gw = str(device.getParameter( 'G.w' ).getValue()) + sw = str(device.getParameter( 'S.w' ).getValue()) + + diffMap = { 'D1w':str(device.getParameter( 'D1.w' ).getValue()) + , 'D2w':str(device.getParameter( 'D2.w' ).getValue()) + , 'Sw' :str(device.getParameter( 'S.w' ).getValue()) + , 'Gw' :str(device.getParameter( 'G.w' ).getValue()) + , 'Bw' :str(device.getParameter( 'B.w' ).getValue()) + } + + M = device.getM() + remain = M % device.getMint() + westWirings = '' + eastWirings = '' + for i in range(device.getExternalDummy()): + westWirings = westWirings + 'B.bX.{Bw} B.bX.{Bw} ' + eastWirings = ' B.bX.{Bw} B.bX.{Bw}' + eastWirings + if remain: + westWirings = westWirings + 'D1.t0.{D1w} G.b0.{Gw} ' + eastWirings = ' G.b0.{Gw} D2.t3.{D2w}' + eastWirings + westWirings = westWirings + 'S.b1.{Sw} ' + + mintWirings = '' + for i in range( (M / device.getMint())*2 ): + if (i + remain) % 2: mintWirings += 'G.b0.{Gw} D2.t1.{D2w} G.b0.{Gw} S.b1.{Sw} ' + else: mintWirings += 'G.b0.{Gw} D1.t0.{D1w} G.b0.{Gw} S.b1.{Sw} ' + + wirings = westWirings + mintWirings + eastWirings + + stack.setWirings( wirings.format( **diffMap ) ) + stack.doLayout ( bbMode ) + + paramsMatrix = ParamsMatrix.ParamsMatrix() + paramsMatrix.setGlobalParams( oroshi.toUnity(stack.w) + , oroshi.toUnity(stack.L) + , device.getM() + , stack.boundingBox + ) + paramsMatrix.setStacks( [ stack ] ) + trace( 100, '++' ) + paramsMatrix.trace() + trace( 100, '---' ) + + return paramsMatrix.getMatrix() diff --git a/oroshi/python/WIP_DP.py b/oroshi/python/WIP_DP.py new file mode 100644 index 00000000..f65dc867 --- /dev/null +++ b/oroshi/python/WIP_DP.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- + +from Hurricane import DataBase +from Hurricane import UpdateSession +from Hurricane import DbU +from Hurricane import Box +import helpers +from helpers import trace + +helpers.staticInitialization( quiet=True ) +helpers.setTraceLevel( 1000 ) + +import Analog +import ParamsMatrix +import Stack +import oroshi + + +def checkCoherency ( args ): + message = '[ERROR] DifferentialPair.checkCoherency():\n' + + techno = DataBase.getDB().getTechnology() + rules = Analog.getRules( techno, Analog.Flag.StandardRules ) + + M = args.getM() + mMax = args.getW() / rules['transistorMinW'] + if M > mMax: + message += \ + ' W/M ratio must be greater than transistor minimal width (%d)\n' \ + ' Please increase W or decrease M.' \ + % rules['transistorMinW'] + return False, message + + mint = args.getMInt() + if mint != 2: + message += ' For interdigitaded layout style, Mint *must* be equal to 2 (not %d)\n' % mint + return False, message + + return True, '' + + +def layout ( device, args, bbMode ): + + trace( 100, ',+', '\tWIP_DP.layout() called.\n' ) + nerc = device.getParameter( 'NERC' ).getValue() + nirc = device.getParameter( 'NIRC' ).getValue() + + stack = Stack.Stack( device, nerc, nirc ) + + bw = str(device.getParameter( 'B.w' ).getValue()) + d1w = str(device.getParameter( 'D1.w' ).getValue()) + d2w = str(device.getParameter( 'D2.w' ).getValue()) + g1w = str(device.getParameter( 'G1.w' ).getValue()) + g2w = str(device.getParameter( 'G2.w' ).getValue()) + sw = str(device.getParameter( 'S.w' ).getValue()) + + diffMap = { 'D1w':str(device.getParameter( 'D1.w' ).getValue()) + , 'D2w':str(device.getParameter( 'D2.w' ).getValue()) + , 'Sw' :str(device.getParameter( 'S.w' ).getValue()) + , 'G1w':str(device.getParameter( 'G1.w' ).getValue()) + , 'G2w':str(device.getParameter( 'G2.w' ).getValue()) + , 'Bw' :str(device.getParameter( 'B.w' ).getValue()) + } + + M = device.getM() + remain = M % device.getMint() + westWirings = '' + eastWirings = '' + for i in range(device.getExternalDummy()): + westWirings = westWirings + 'B.bX.{Bw} B.bX.{Bw} ' + eastWirings = ' B.bX.{Bw} B.bX.{Bw}' + eastWirings + if remain: + westWirings = westWirings + 'D1.b1.{D1w} G1.b0.{G1w} ' + eastWirings = ' G2.t0.{G2w} D2.t1.{D2w}' + eastWirings + westWirings = westWirings + 'S.b2.{Sw} ' + + + mintWirings = '' + for i in range( (M / device.getMint())*2 ): + if (i + remain) % 2: mintWirings += 'G2.t0.{G2w} D2.t1.{D2w} G2.t0.{G2w} S.b2.{Sw} ' + else: mintWirings += 'G1.b0.{G1w} D1.b1.{D1w} G1.b0.{G1w} S.b2.{Sw} ' + + wirings = westWirings + mintWirings + eastWirings + + stack.setWirings( wirings.format( **diffMap ) ) + stack.doLayout ( bbMode ) + + paramsMatrix = ParamsMatrix.ParamsMatrix() + paramsMatrix.setGlobalParams( oroshi.toUnity(stack.w) + , oroshi.toUnity(stack.L) + , device.getM() + , stack.boundingBox + ) + paramsMatrix.setStacks( [ stack ] ) + trace( 100, '++' ) + paramsMatrix.trace() + trace( 100, '---' ) + + return paramsMatrix.getMatrix() diff --git a/oroshi/python/WIP_Transistor.py b/oroshi/python/WIP_Transistor.py new file mode 100644 index 00000000..b6d831b4 --- /dev/null +++ b/oroshi/python/WIP_Transistor.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- + +from Hurricane import DataBase +from Hurricane import UpdateSession +from Hurricane import DbU +from Hurricane import Box +import helpers +from helpers import trace + +helpers.staticInitialization( quiet=True ) +helpers.setTraceLevel( 1000 ) + +import Analog +import ParamsMatrix +import Stack +import oroshi + + +def checkCoherency ( args ): + message = '[ERROR] Transistor.checkCoherency():\n' + + techno = DataBase.getDB().getTechnology() + rules = oroshi.getRules() + + mMax = args.getW() / rules.transistorMinW + if args.getM() > mMax: + message += \ + ' W/M ratio must be greater than transistor minimal width (%d)\n' \ + ' Please increase W or decrease M.' \ + % rules['transistorMinW'] + return (False, message) + + return (True, "") + + +def layout ( device, args, bbMode ): + + trace( 100, ',+', '\tWIP_Transistor.layout() called.\n' ) + nerc = device.getParameter( 'NERC' ).getValue() + nirc = device.getParameter( 'NIRC' ).getValue() + + stack = Stack.Stack( device, nerc, nirc ) + + bw = str(device.getParameter( 'B.w' ).getValue()) + dw = str(device.getParameter( 'D.w' ).getValue()) + gw = str(device.getParameter( 'G.w' ).getValue()) + sw = str(device.getParameter( 'S.w' ).getValue()) + + diffMap = { 'D':'D', 'S':'S', 'Dw':dw, 'Sw':sw, 'Gw':gw, 'Bw':bw } + if device.isSourceFirst(): + trace( 100, '\tUse sourceFirst.\n' ) + diffMap = { 'D':'S', 'S':'D', 'Dw':sw, 'Sw':dw, 'Gw':gw, 'Bw':bw } + + wirings = '{D}.b0.{Dw} G.t0.{Gw} {S}.b1.{Sw}' + for i in range(device.getM() - 1): + if i%2: wirings += ' G.t0.{Gw} {S}.b1.{Sw}' + else: wirings += ' G.t0.{Gw} {D}.b0.{Dw}' + for i in range(device.getExternalDummy()): + wirings = 'B.bX.{Bw} B.bX.{Bw} ' + wirings + wirings += ' B.bX.{Bw} B.bX.{Bw}' + + stack.setWirings( wirings.format( **diffMap ) ) + stack.doLayout ( bbMode ) + + paramsMatrix = ParamsMatrix.ParamsMatrix() + paramsMatrix.setGlobalParams( oroshi.toUnity(stack.w) + , oroshi.toUnity(stack.L) + , device.getM() + , stack.boundingBox + ) + paramsMatrix.setStacks( [ stack ] ) + trace( 100, '++' ) + paramsMatrix.trace() + trace( 100, '---' ) + + return paramsMatrix.getMatrix() diff --git a/oroshi/python/__init__.py b/oroshi/python/__init__.py new file mode 100644 index 00000000..68c82797 --- /dev/null +++ b/oroshi/python/__init__.py @@ -0,0 +1,36 @@ + +from Hurricane import DbU +from Hurricane import DataBase +import Rules + + +rules = None + + +class Flag ( object ): + + StandardRules = 0x0001 + MIMRules = 0x0002 + AllRules = StandardRules|MIMRules + + +def getRules (): + global rules + if not rules: + rules = Rules.Rules( DataBase.getDB().getTechnology() ) + return rules + + +def toNano ( value ): return DbU.toPhysical( value, DbU.UnitPowerNano ) +def toMicro ( value ): return DbU.toPhysical( value, DbU.UnitPowerMicro ) +def toUnity ( value ): return DbU.toPhysical( value, DbU.UnitPowerUnity ) + + +def adjustOnGrid ( unit, mode='upper' ): + if mode == 'upper': return DbU.getOnPhysicalGrid(unit, DbU.SnapModeSuperior) + elif mode == 'lower': return DbU.getOnPhysicalGrid(unit, DbU.SnapModeInferior) + elif mode == 'near' : return DbU.getOnPhysicalGrid(unit, DbU.SnapModeNearest ) + else: + print '[ERROR] oroshi.adjustOnGrid(): "%s" is not a valid mode.' % mode + print ' ("upper", "lower" or "near")' + return 0 diff --git a/unicorn/doc/unicorn/html/UnicornGui_8h_source.html b/unicorn/doc/unicorn/html/UnicornGui_8h_source.html index 5cbb510c..9de0812c 100644 --- a/unicorn/doc/unicorn/html/UnicornGui_8h_source.html +++ b/unicorn/doc/unicorn/html/UnicornGui_8h_source.html @@ -158,7 +158,7 @@


                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/annotated.html b/unicorn/doc/unicorn/html/annotated.html index 324e9c26..67fa67af 100644 --- a/unicorn/doc/unicorn/html/annotated.html +++ b/unicorn/doc/unicorn/html/annotated.html @@ -59,7 +59,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui-members.html b/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui-members.html index 742423ba..2253f50c 100644 --- a/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui-members.html +++ b/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui-members.html @@ -81,7 +81,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui.html b/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui.html index 96fad605..bbd51304 100644 --- a/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui.html +++ b/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui.html @@ -200,7 +200,7 @@ Static Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/classes.html b/unicorn/doc/unicorn/html/classes.html index de146f1e..bea36499 100644 --- a/unicorn/doc/unicorn/html/classes.html +++ b/unicorn/doc/unicorn/html/classes.html @@ -62,7 +62,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/dir_4aa09a10ca668c28f3c8e57fb374580b.html b/unicorn/doc/unicorn/html/dir_4aa09a10ca668c28f3c8e57fb374580b.html index 839bcbe6..d1608bb4 100644 --- a/unicorn/doc/unicorn/html/dir_4aa09a10ca668c28f3c8e57fb374580b.html +++ b/unicorn/doc/unicorn/html/dir_4aa09a10ca668c28f3c8e57fb374580b.html @@ -55,7 +55,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/unicorn/doc/unicorn/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 9d8e946e..5019da0e 100644 --- a/unicorn/doc/unicorn/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/unicorn/doc/unicorn/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -55,7 +55,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/files.html b/unicorn/doc/unicorn/html/files.html index 9f628e8f..648dc56b 100644 --- a/unicorn/doc/unicorn/html/files.html +++ b/unicorn/doc/unicorn/html/files.html @@ -55,7 +55,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/functions.html b/unicorn/doc/unicorn/html/functions.html index 59c3b1b9..05777d29 100644 --- a/unicorn/doc/unicorn/html/functions.html +++ b/unicorn/doc/unicorn/html/functions.html @@ -72,7 +72,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/functions_func.html b/unicorn/doc/unicorn/html/functions_func.html index c467ba7c..eb0b6c0c 100644 --- a/unicorn/doc/unicorn/html/functions_func.html +++ b/unicorn/doc/unicorn/html/functions_func.html @@ -72,7 +72,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/hierarchy.html b/unicorn/doc/unicorn/html/hierarchy.html index 7ca1cc86..9a7611f1 100644 --- a/unicorn/doc/unicorn/html/hierarchy.html +++ b/unicorn/doc/unicorn/html/hierarchy.html @@ -59,7 +59,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/index.html b/unicorn/doc/unicorn/html/index.html index 1f81ff6e..2503c737 100644 --- a/unicorn/doc/unicorn/html/index.html +++ b/unicorn/doc/unicorn/html/index.html @@ -45,7 +45,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/namespaceUnicorn.html b/unicorn/doc/unicorn/html/namespaceUnicorn.html index d407b8fa..cc4daa52 100644 --- a/unicorn/doc/unicorn/html/namespaceUnicorn.html +++ b/unicorn/doc/unicorn/html/namespaceUnicorn.html @@ -64,7 +64,7 @@ Classes
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/namespaces.html b/unicorn/doc/unicorn/html/namespaces.html index 7ad7661c..9785bdce 100644 --- a/unicorn/doc/unicorn/html/namespaces.html +++ b/unicorn/doc/unicorn/html/namespaces.html @@ -55,7 +55,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/html/pages.html b/unicorn/doc/unicorn/html/pages.html index adf7e657..74edf0ba 100644 --- a/unicorn/doc/unicorn/html/pages.html +++ b/unicorn/doc/unicorn/html/pages.html @@ -53,7 +53,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/unicorn/doc/unicorn/latex/refman.tex b/unicorn/doc/unicorn/latex/refman.tex index 9931993e..c7e66b54 100644 --- a/unicorn/doc/unicorn/latex/refman.tex +++ b/unicorn/doc/unicorn/latex/refman.tex @@ -34,7 +34,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.5}\\ \vspace*{0.5cm} - {\small Sat Aug 18 2018 22:39:43}\\ + {\small Mon Oct 1 2018 14:29:13}\\ \end{center} \end{titlepage} diff --git a/unicorn/src/coriolis.py b/unicorn/src/coriolis.py index 810fd6ed..fe3aed55 100755 --- a/unicorn/src/coriolis.py +++ b/unicorn/src/coriolis.py @@ -142,7 +142,7 @@ if location & Location.SetBasePythonPath: pythonPath.insert( 0, os.path.join(coriolisTop,pythonSitePackages,'crlcore') ) pythonPath.insert( 0, os.path.join(coriolisTop,pythonSitePackages,'stratus') ) pythonPath.insert( 0, os.path.join(coriolisTop,pythonSitePackages,'cumulus') ) -pythonPath.insert( 0, os.path.join(coriolisTop,pythonSitePackages,'pharos' ) ) +pythonPath.insert( 0, os.path.join(coriolisTop,pythonSitePackages,'oroshi' ) ) pythonPath.export() pythonPath.show() diff --git a/vlsisapd/doc/html/agds.html b/vlsisapd/doc/html/agds.html index 73227d34..f1c0873e 100644 --- a/vlsisapd/doc/html/agds.html +++ b/vlsisapd/doc/html/agds.html @@ -165,7 +165,7 @@ Python
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/annotated.html b/vlsisapd/doc/html/annotated.html index 80d3bc73..26a03c1f 100644 --- a/vlsisapd/doc/html/annotated.html +++ b/vlsisapd/doc/html/annotated.html @@ -103,7 +103,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/cif.html b/vlsisapd/doc/html/cif.html index 4dad3070..573f49c9 100644 --- a/vlsisapd/doc/html/cif.html +++ b/vlsisapd/doc/html/cif.html @@ -129,7 +129,7 @@ Python
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_a_g_d_s_1_1_element.html b/vlsisapd/doc/html/class_a_g_d_s_1_1_element.html index b27f2760..aa21c346 100644 --- a/vlsisapd/doc/html/class_a_g_d_s_1_1_element.html +++ b/vlsisapd/doc/html/class_a_g_d_s_1_1_element.html @@ -49,7 +49,7 @@ Inheritance diagram for Element:
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_a_g_d_s_1_1_library.html b/vlsisapd/doc/html/class_a_g_d_s_1_1_library.html index b38e1087..af983218 100644 --- a/vlsisapd/doc/html/class_a_g_d_s_1_1_library.html +++ b/vlsisapd/doc/html/class_a_g_d_s_1_1_library.html @@ -200,7 +200,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_a_g_d_s_1_1_rectangle.html b/vlsisapd/doc/html/class_a_g_d_s_1_1_rectangle.html index a9f546f8..d5f87727 100644 --- a/vlsisapd/doc/html/class_a_g_d_s_1_1_rectangle.html +++ b/vlsisapd/doc/html/class_a_g_d_s_1_1_rectangle.html @@ -115,7 +115,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_a_g_d_s_1_1_structure.html b/vlsisapd/doc/html/class_a_g_d_s_1_1_structure.html index d20cfc24..e45d1195 100644 --- a/vlsisapd/doc/html/class_a_g_d_s_1_1_structure.html +++ b/vlsisapd/doc/html/class_a_g_d_s_1_1_structure.html @@ -106,7 +106,7 @@ std::string  - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_c_i_f_1_1_circuit.html b/vlsisapd/doc/html/class_c_i_f_1_1_circuit.html index a6aba3e9..31cbfdc9 100644 --- a/vlsisapd/doc/html/class_c_i_f_1_1_circuit.html +++ b/vlsisapd/doc/html/class_c_i_f_1_1_circuit.html @@ -148,7 +148,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_c_i_f_1_1_polygon.html b/vlsisapd/doc/html/class_c_i_f_1_1_polygon.html index dde0521c..e73e181d 100644 --- a/vlsisapd/doc/html/class_c_i_f_1_1_polygon.html +++ b/vlsisapd/doc/html/class_c_i_f_1_1_polygon.html @@ -113,7 +113,7 @@ Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_d_t_r_1_1_a_rule.html b/vlsisapd/doc/html/class_d_t_r_1_1_a_rule.html index eb06724d..fb2fe7d5 100644 --- a/vlsisapd/doc/html/class_d_t_r_1_1_a_rule.html +++ b/vlsisapd/doc/html/class_d_t_r_1_1_a_rule.html @@ -89,7 +89,7 @@ const std::string & 
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_d_t_r_1_1_d_t_r_exception.html b/vlsisapd/doc/html/class_d_t_r_1_1_d_t_r_exception.html index 6ac2dadc..cb857ba7 100644 --- a/vlsisapd/doc/html/class_d_t_r_1_1_d_t_r_exception.html +++ b/vlsisapd/doc/html/class_d_t_r_1_1_d_t_r_exception.html @@ -40,7 +40,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_d_t_r_1_1_rule.html b/vlsisapd/doc/html/class_d_t_r_1_1_rule.html index 6dad541a..9c43d69c 100644 --- a/vlsisapd/doc/html/class_d_t_r_1_1_rule.html +++ b/vlsisapd/doc/html/class_d_t_r_1_1_rule.html @@ -222,7 +222,7 @@ const std::string & 
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_d_t_r_1_1_techno.html b/vlsisapd/doc/html/class_d_t_r_1_1_techno.html index e8a68cb5..81a93b48 100644 --- a/vlsisapd/doc/html/class_d_t_r_1_1_techno.html +++ b/vlsisapd/doc/html/class_d_t_r_1_1_techno.html @@ -456,7 +456,7 @@ Static Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_name.html b/vlsisapd/doc/html/class_name.html index 9fd79817..0e28d219 100644 --- a/vlsisapd/doc/html/class_name.html +++ b/vlsisapd/doc/html/class_name.html @@ -36,7 +36,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_bloc.html b/vlsisapd/doc/html/class_open_chams_1_1_bloc.html index 86c7bbc4..539e0a14 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_bloc.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_bloc.html @@ -132,7 +132,7 @@ bool 
                                                                                            - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_circuit.html b/vlsisapd/doc/html/class_open_chams_1_1_circuit.html index 1432a708..7d4ba5b8 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_circuit.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_circuit.html @@ -392,7 +392,7 @@ Static Public Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_d_d_p.html b/vlsisapd/doc/html/class_open_chams_1_1_d_d_p.html index 88607e8a..aeecb13d 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_d_d_p.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_d_d_p.html @@ -47,7 +47,7 @@ Inheritance diagram for DDP:
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_d_slicing_node.html b/vlsisapd/doc/html/class_open_chams_1_1_d_slicing_node.html index 277828bc..63726992 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_d_slicing_node.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_d_slicing_node.html @@ -47,7 +47,7 @@ Inheritance diagram for DSlicingNode:
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_designer_cstr_o_c.html b/vlsisapd/doc/html/class_open_chams_1_1_designer_cstr_o_c.html index 8847fb9f..491c06bd 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_designer_cstr_o_c.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_designer_cstr_o_c.html @@ -47,7 +47,7 @@ Inheritance diagram for DesignerCstrOC:
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_device.html b/vlsisapd/doc/html/class_open_chams_1_1_device.html index 257918ae..3eb2ea3c 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_device.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_device.html @@ -188,7 +188,7 @@ bool  - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_equation.html b/vlsisapd/doc/html/class_open_chams_1_1_equation.html index 00532a31..86aa1a8f 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_equation.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_equation.html @@ -50,7 +50,7 @@ Inheritance diagram for Equation:
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_group.html b/vlsisapd/doc/html/class_open_chams_1_1_group.html index bb10ef63..07184cfd 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_group.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_group.html @@ -239,7 +239,7 @@ bool  - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_h_slicing_node.html b/vlsisapd/doc/html/class_open_chams_1_1_h_slicing_node.html index 8946fc1a..67de761b 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_h_slicing_node.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_h_slicing_node.html @@ -48,7 +48,7 @@ Inheritance diagram for HSlicingNode:
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_h_v_slicing_node.html b/vlsisapd/doc/html/class_open_chams_1_1_h_v_slicing_node.html index 2ea788f5..ed34b954 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_h_v_slicing_node.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_h_v_slicing_node.html @@ -49,7 +49,7 @@ Inheritance diagram for HVSlicingNode:
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_high_level_cstr.html b/vlsisapd/doc/html/class_open_chams_1_1_high_level_cstr.html index b6f56370..6bf65ba4 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_high_level_cstr.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_high_level_cstr.html @@ -47,7 +47,7 @@ Inheritance diagram for HighLevelCstr:
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_instance.html b/vlsisapd/doc/html/class_open_chams_1_1_instance.html index 028bb339..f2cf3a40 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_instance.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_instance.html @@ -112,7 +112,7 @@ bool  - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_instance_point.html b/vlsisapd/doc/html/class_open_chams_1_1_instance_point.html index 63812729..e2c50a8b 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_instance_point.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_instance_point.html @@ -110,7 +110,7 @@ const std::string &  - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_intermediate_point.html b/vlsisapd/doc/html/class_open_chams_1_1_intermediate_point.html index 3d2b978c..14c18472 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_intermediate_point.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_intermediate_point.html @@ -110,7 +110,7 @@ double 
                                                                                            - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_layout.html b/vlsisapd/doc/html/class_open_chams_1_1_layout.html index 55ccce76..3a7d6fa7 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_layout.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_layout.html @@ -163,7 +163,7 @@ bool  - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_n_r_c_cstr.html b/vlsisapd/doc/html/class_open_chams_1_1_n_r_c_cstr.html index 7c858c32..823cf897 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_n_r_c_cstr.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_n_r_c_cstr.html @@ -47,7 +47,7 @@ Inheritance diagram for NRCCstr:
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_net.html b/vlsisapd/doc/html/class_open_chams_1_1_net.html index 5b5217b2..fd07a7fd 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_net.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_net.html @@ -266,7 +266,7 @@ bool  - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_net_1_1_connection.html b/vlsisapd/doc/html/class_open_chams_1_1_net_1_1_connection.html index 399aaa8a..62f3c494 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_net_1_1_connection.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_net_1_1_connection.html @@ -93,7 +93,7 @@ const std::string &  - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_netlist.html b/vlsisapd/doc/html/class_open_chams_1_1_netlist.html index 77b51224..f08cd125 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_netlist.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_netlist.html @@ -301,7 +301,7 @@ bool 
                                                                                            - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_node.html b/vlsisapd/doc/html/class_open_chams_1_1_node.html index 3d775ac7..6d5bc79d 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_node.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_node.html @@ -152,7 +152,7 @@ bool  - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_open_chams_exception.html b/vlsisapd/doc/html/class_open_chams_1_1_open_chams_exception.html index c32c5938..99194070 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_open_chams_exception.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_open_chams_exception.html @@ -40,7 +40,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_operator.html b/vlsisapd/doc/html/class_open_chams_1_1_operator.html index c0bb379f..3e6a3cb9 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_operator.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_operator.html @@ -109,7 +109,7 @@ bool  - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_operator_1_1_constraint.html b/vlsisapd/doc/html/class_open_chams_1_1_operator_1_1_constraint.html index 20d51617..425b5085 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_operator_1_1_constraint.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_operator_1_1_constraint.html @@ -104,7 +104,7 @@ const std::string &  - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_parameters.html b/vlsisapd/doc/html/class_open_chams_1_1_parameters.html index 19602d0c..67838851 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_parameters.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_parameters.html @@ -129,7 +129,7 @@ bool 
                                                                                            - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_port.html b/vlsisapd/doc/html/class_open_chams_1_1_port.html index 3856d57e..7da610a3 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_port.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_port.html @@ -136,7 +136,7 @@ double  - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_port_point.html b/vlsisapd/doc/html/class_open_chams_1_1_port_point.html index 7ba59a5e..917d6779 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_port_point.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_port_point.html @@ -96,7 +96,7 @@ unsigned  - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_r_slicing_node.html b/vlsisapd/doc/html/class_open_chams_1_1_r_slicing_node.html index b0d2f23b..65bff59b 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_r_slicing_node.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_r_slicing_node.html @@ -47,7 +47,7 @@ Inheritance diagram for RSlicingNode:
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_schematic.html b/vlsisapd/doc/html/class_open_chams_1_1_schematic.html index d121d30d..96f33794 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_schematic.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_schematic.html @@ -144,7 +144,7 @@ bool  - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_schematic_1_1_infos.html b/vlsisapd/doc/html/class_open_chams_1_1_schematic_1_1_infos.html index f1621d3f..3682712c 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_schematic_1_1_infos.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_schematic_1_1_infos.html @@ -104,7 +104,7 @@ double  - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_simul_model.html b/vlsisapd/doc/html/class_open_chams_1_1_simul_model.html index 492acc07..b92901b4 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_simul_model.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_simul_model.html @@ -161,7 +161,7 @@ unsigned  - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_sizing.html b/vlsisapd/doc/html/class_open_chams_1_1_sizing.html index 86db836c..5d1bd325 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_sizing.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_sizing.html @@ -180,7 +180,7 @@ bool  - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_slicing_node.html b/vlsisapd/doc/html/class_open_chams_1_1_slicing_node.html index 0cce0635..37fa62a5 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_slicing_node.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_slicing_node.html @@ -51,7 +51,7 @@ Inheritance diagram for SlicingNode:
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_transistor.html b/vlsisapd/doc/html/class_open_chams_1_1_transistor.html index f7f3e951..47301a03 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_transistor.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_transistor.html @@ -254,7 +254,7 @@ const std::string &  - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_v_slicing_node.html b/vlsisapd/doc/html/class_open_chams_1_1_v_slicing_node.html index 5ea60540..d9a76426 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_v_slicing_node.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_v_slicing_node.html @@ -48,7 +48,7 @@ Inheritance diagram for VSlicingNode:
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_open_chams_1_1_wire.html b/vlsisapd/doc/html/class_open_chams_1_1_wire.html index 6d59e723..1161dff3 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_wire.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_wire.html @@ -167,7 +167,7 @@ bool 
                                                                                            - Generated by doxygen 1.8.5 on Sat Aug 18 2018 + Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page diff --git a/vlsisapd/doc/html/class_open_chams_1_1_wire_point.html b/vlsisapd/doc/html/class_open_chams_1_1_wire_point.html index 350fc270..8d372e9b 100644 --- a/vlsisapd/doc/html/class_open_chams_1_1_wire_point.html +++ b/vlsisapd/doc/html/class_open_chams_1_1_wire_point.html @@ -51,7 +51,7 @@ Inheritance diagram for WirePoint:
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_capacitor.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_capacitor.html index 98898379..2f374db9 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_capacitor.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_capacitor.html @@ -158,7 +158,7 @@ std::string > &  - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_circuit.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_circuit.html index 9eda1fcb..88c6de52 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_circuit.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_circuit.html @@ -375,7 +375,7 @@ std::string 
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_current.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_current.html index 16cc80bc..cc795951 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_current.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_current.html @@ -140,7 +140,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_instance.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_instance.html index 9bc862ab..cd712256 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_instance.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_instance.html @@ -214,7 +214,7 @@ std::string > & 
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_mosfet.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_mosfet.html index c906e613..ea25415d 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_mosfet.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_mosfet.html @@ -176,7 +176,7 @@ std::string > & 
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_resistor.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_resistor.html index cbdcd8d6..d0407983 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_resistor.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_resistor.html @@ -158,7 +158,7 @@ std::string > & 
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_source.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_source.html index 3bae5d48..f21577a1 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_source.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_source.html @@ -137,7 +137,7 @@ Protected Member Functions
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_spice_exception.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_spice_exception.html index 45bbc047..646a5b6f 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_spice_exception.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_spice_exception.html @@ -40,7 +40,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_subckt.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_subckt.html index 11fab996..680135d8 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_subckt.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_subckt.html @@ -273,7 +273,7 @@ std::string > & 
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_value.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_value.html index b80ee4fb..13e921bf 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_value.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_value.html @@ -38,7 +38,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_voltage.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_voltage.html index 5d5432d9..d0a10932 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_voltage.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_voltage.html @@ -140,7 +140,7 @@ Additional Inherited Members
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/classes.html b/vlsisapd/doc/html/classes.html index 70150317..0481c6d0 100644 --- a/vlsisapd/doc/html/classes.html +++ b/vlsisapd/doc/html/classes.html @@ -77,7 +77,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/contact.html b/vlsisapd/doc/html/contact.html index be5e0e4c..8ea9fea1 100644 --- a/vlsisapd/doc/html/contact.html +++ b/vlsisapd/doc/html/contact.html @@ -43,7 +43,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_16663e997a305b34a6de63a94b7c64a5.html b/vlsisapd/doc/html/dir_16663e997a305b34a6de63a94b7c64a5.html index 13a53d92..9cf50c6d 100644 --- a/vlsisapd/doc/html/dir_16663e997a305b34a6de63a94b7c64a5.html +++ b/vlsisapd/doc/html/dir_16663e997a305b34a6de63a94b7c64a5.html @@ -44,7 +44,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_2e9643828817c97812213788475aab5c.html b/vlsisapd/doc/html/dir_2e9643828817c97812213788475aab5c.html index e808e561..b3a3d141 100644 --- a/vlsisapd/doc/html/dir_2e9643828817c97812213788475aab5c.html +++ b/vlsisapd/doc/html/dir_2e9643828817c97812213788475aab5c.html @@ -44,7 +44,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_44cf75b6f4d33f3b1de8b5b6d95c4767.html b/vlsisapd/doc/html/dir_44cf75b6f4d33f3b1de8b5b6d95c4767.html index 2142e45c..638bd27c 100644 --- a/vlsisapd/doc/html/dir_44cf75b6f4d33f3b1de8b5b6d95c4767.html +++ b/vlsisapd/doc/html/dir_44cf75b6f4d33f3b1de8b5b6d95c4767.html @@ -48,7 +48,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_4c2a900f04506337a917f3b1377e2113.html b/vlsisapd/doc/html/dir_4c2a900f04506337a917f3b1377e2113.html index 61994c09..7e48f1c8 100644 --- a/vlsisapd/doc/html/dir_4c2a900f04506337a917f3b1377e2113.html +++ b/vlsisapd/doc/html/dir_4c2a900f04506337a917f3b1377e2113.html @@ -55,7 +55,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_4edc6cb509aee81bf131e74f57ae2ac2.html b/vlsisapd/doc/html/dir_4edc6cb509aee81bf131e74f57ae2ac2.html index d814ff64..264ea0e3 100644 --- a/vlsisapd/doc/html/dir_4edc6cb509aee81bf131e74f57ae2ac2.html +++ b/vlsisapd/doc/html/dir_4edc6cb509aee81bf131e74f57ae2ac2.html @@ -53,7 +53,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_5ae6c17f233c8279b5a5e75367c9c1fd.html b/vlsisapd/doc/html/dir_5ae6c17f233c8279b5a5e75367c9c1fd.html index 766f8663..d445f6df 100644 --- a/vlsisapd/doc/html/dir_5ae6c17f233c8279b5a5e75367c9c1fd.html +++ b/vlsisapd/doc/html/dir_5ae6c17f233c8279b5a5e75367c9c1fd.html @@ -50,7 +50,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_5ddae980bfca85f3a0fc4acc697df818.html b/vlsisapd/doc/html/dir_5ddae980bfca85f3a0fc4acc697df818.html index 70e9e540..4446b3dd 100644 --- a/vlsisapd/doc/html/dir_5ddae980bfca85f3a0fc4acc697df818.html +++ b/vlsisapd/doc/html/dir_5ddae980bfca85f3a0fc4acc697df818.html @@ -44,7 +44,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_62a21cda08e84450be03057c75fe6c87.html b/vlsisapd/doc/html/dir_62a21cda08e84450be03057c75fe6c87.html index 3c224335..8bd186d5 100644 --- a/vlsisapd/doc/html/dir_62a21cda08e84450be03057c75fe6c87.html +++ b/vlsisapd/doc/html/dir_62a21cda08e84450be03057c75fe6c87.html @@ -88,7 +88,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_7f66ebb56c27e5e012a274d82b424fec.html b/vlsisapd/doc/html/dir_7f66ebb56c27e5e012a274d82b424fec.html index 6bd404fc..2cae0b54 100644 --- a/vlsisapd/doc/html/dir_7f66ebb56c27e5e012a274d82b424fec.html +++ b/vlsisapd/doc/html/dir_7f66ebb56c27e5e012a274d82b424fec.html @@ -44,7 +44,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_84965cd3b8bdf3f7096a0b1a38f3ff74.html b/vlsisapd/doc/html/dir_84965cd3b8bdf3f7096a0b1a38f3ff74.html index af649890..9665a99f 100644 --- a/vlsisapd/doc/html/dir_84965cd3b8bdf3f7096a0b1a38f3ff74.html +++ b/vlsisapd/doc/html/dir_84965cd3b8bdf3f7096a0b1a38f3ff74.html @@ -44,7 +44,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_b0cebf84aafce3f1ce34a5b9287487be.html b/vlsisapd/doc/html/dir_b0cebf84aafce3f1ce34a5b9287487be.html index a8101b82..f9229c3b 100644 --- a/vlsisapd/doc/html/dir_b0cebf84aafce3f1ce34a5b9287487be.html +++ b/vlsisapd/doc/html/dir_b0cebf84aafce3f1ce34a5b9287487be.html @@ -44,7 +44,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_cc47161e5a891225af1545e3c32d2b04.html b/vlsisapd/doc/html/dir_cc47161e5a891225af1545e3c32d2b04.html index 9d52505d..139e0f3b 100644 --- a/vlsisapd/doc/html/dir_cc47161e5a891225af1545e3c32d2b04.html +++ b/vlsisapd/doc/html/dir_cc47161e5a891225af1545e3c32d2b04.html @@ -44,7 +44,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_cfcd2a6b137fd73839de8493b8cf8e71.html b/vlsisapd/doc/html/dir_cfcd2a6b137fd73839de8493b8cf8e71.html index 32325ab0..4f6f2189 100644 --- a/vlsisapd/doc/html/dir_cfcd2a6b137fd73839de8493b8cf8e71.html +++ b/vlsisapd/doc/html/dir_cfcd2a6b137fd73839de8493b8cf8e71.html @@ -52,7 +52,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_e2caf2e1baa789cd2ae3140760971ecd.html b/vlsisapd/doc/html/dir_e2caf2e1baa789cd2ae3140760971ecd.html index 48df5ff2..d9581dac 100644 --- a/vlsisapd/doc/html/dir_e2caf2e1baa789cd2ae3140760971ecd.html +++ b/vlsisapd/doc/html/dir_e2caf2e1baa789cd2ae3140760971ecd.html @@ -44,7 +44,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_eb55033f12c957f0b0d23cc4e1dc88bb.html b/vlsisapd/doc/html/dir_eb55033f12c957f0b0d23cc4e1dc88bb.html index 72a9c8d0..6482dde8 100644 --- a/vlsisapd/doc/html/dir_eb55033f12c957f0b0d23cc4e1dc88bb.html +++ b/vlsisapd/doc/html/dir_eb55033f12c957f0b0d23cc4e1dc88bb.html @@ -89,7 +89,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_f10e074351c7de29d121422ddc53fdd9.html b/vlsisapd/doc/html/dir_f10e074351c7de29d121422ddc53fdd9.html index a17e85c3..06c88afe 100644 --- a/vlsisapd/doc/html/dir_f10e074351c7de29d121422ddc53fdd9.html +++ b/vlsisapd/doc/html/dir_f10e074351c7de29d121422ddc53fdd9.html @@ -51,7 +51,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_f402dd818ece141eaa163f9b534afb62.html b/vlsisapd/doc/html/dir_f402dd818ece141eaa163f9b534afb62.html index 32c7efc7..15325394 100644 --- a/vlsisapd/doc/html/dir_f402dd818ece141eaa163f9b534afb62.html +++ b/vlsisapd/doc/html/dir_f402dd818ece141eaa163f9b534afb62.html @@ -44,7 +44,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_f5f235c9d985a49201c6621a8b780fb2.html b/vlsisapd/doc/html/dir_f5f235c9d985a49201c6621a8b780fb2.html index 41ce44c0..5803278f 100644 --- a/vlsisapd/doc/html/dir_f5f235c9d985a49201c6621a8b780fb2.html +++ b/vlsisapd/doc/html/dir_f5f235c9d985a49201c6621a8b780fb2.html @@ -57,7 +57,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_f70a8257f58d0d2fd08ab2c7f39ed5b0.html b/vlsisapd/doc/html/dir_f70a8257f58d0d2fd08ab2c7f39ed5b0.html index fc53dc6d..b0a352c6 100644 --- a/vlsisapd/doc/html/dir_f70a8257f58d0d2fd08ab2c7f39ed5b0.html +++ b/vlsisapd/doc/html/dir_f70a8257f58d0d2fd08ab2c7f39ed5b0.html @@ -44,7 +44,7 @@ Directories
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_f96c5c2ea4407f1c5a4effd34e21f46e.html b/vlsisapd/doc/html/dir_f96c5c2ea4407f1c5a4effd34e21f46e.html index 330bbd44..c084d79d 100644 --- a/vlsisapd/doc/html/dir_f96c5c2ea4407f1c5a4effd34e21f46e.html +++ b/vlsisapd/doc/html/dir_f96c5c2ea4407f1c5a4effd34e21f46e.html @@ -58,7 +58,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dir_f98d6d61d512f6cad4e8fb729014711e.html b/vlsisapd/doc/html/dir_f98d6d61d512f6cad4e8fb729014711e.html index 5a803515..a4fb73d0 100644 --- a/vlsisapd/doc/html/dir_f98d6d61d512f6cad4e8fb729014711e.html +++ b/vlsisapd/doc/html/dir_f98d6d61d512f6cad4e8fb729014711e.html @@ -46,7 +46,7 @@ Files
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/dtr.html b/vlsisapd/doc/html/dtr.html index ed3a91a8..a3678034 100644 --- a/vlsisapd/doc/html/dtr.html +++ b/vlsisapd/doc/html/dtr.html @@ -191,7 +191,7 @@ Driver
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions.html b/vlsisapd/doc/html/functions.html index 7fb5ac31..67479acf 100644 --- a/vlsisapd/doc/html/functions.html +++ b/vlsisapd/doc/html/functions.html @@ -119,7 +119,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x62.html b/vlsisapd/doc/html/functions_0x62.html index bec7a739..009f0473 100644 --- a/vlsisapd/doc/html/functions_0x62.html +++ b/vlsisapd/doc/html/functions_0x62.html @@ -40,7 +40,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x63.html b/vlsisapd/doc/html/functions_0x63.html index 9f76d8bf..d8f2837d 100644 --- a/vlsisapd/doc/html/functions_0x63.html +++ b/vlsisapd/doc/html/functions_0x63.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x64.html b/vlsisapd/doc/html/functions_0x64.html index 48e905e2..f4b9ade4 100644 --- a/vlsisapd/doc/html/functions_0x64.html +++ b/vlsisapd/doc/html/functions_0x64.html @@ -37,7 +37,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x67.html b/vlsisapd/doc/html/functions_0x67.html index b24b212d..03a2d1e6 100644 --- a/vlsisapd/doc/html/functions_0x67.html +++ b/vlsisapd/doc/html/functions_0x67.html @@ -296,7 +296,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x68.html b/vlsisapd/doc/html/functions_0x68.html index 8280b452..f44e3e92 100644 --- a/vlsisapd/doc/html/functions_0x68.html +++ b/vlsisapd/doc/html/functions_0x68.html @@ -71,7 +71,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x69.html b/vlsisapd/doc/html/functions_0x69.html index a7960ebf..26df5c12 100644 --- a/vlsisapd/doc/html/functions_0x69.html +++ b/vlsisapd/doc/html/functions_0x69.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x6c.html b/vlsisapd/doc/html/functions_0x6c.html index 19392b7b..35829db9 100644 --- a/vlsisapd/doc/html/functions_0x6c.html +++ b/vlsisapd/doc/html/functions_0x6c.html @@ -40,7 +40,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x6d.html b/vlsisapd/doc/html/functions_0x6d.html index 6f763d13..25f14dfb 100644 --- a/vlsisapd/doc/html/functions_0x6d.html +++ b/vlsisapd/doc/html/functions_0x6d.html @@ -37,7 +37,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x6e.html b/vlsisapd/doc/html/functions_0x6e.html index eb8a3e3c..46282659 100644 --- a/vlsisapd/doc/html/functions_0x6e.html +++ b/vlsisapd/doc/html/functions_0x6e.html @@ -40,7 +40,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x6f.html b/vlsisapd/doc/html/functions_0x6f.html index 4b931af5..598d4bbd 100644 --- a/vlsisapd/doc/html/functions_0x6f.html +++ b/vlsisapd/doc/html/functions_0x6f.html @@ -37,7 +37,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x70.html b/vlsisapd/doc/html/functions_0x70.html index 3cf20d00..666d1c63 100644 --- a/vlsisapd/doc/html/functions_0x70.html +++ b/vlsisapd/doc/html/functions_0x70.html @@ -46,7 +46,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x72.html b/vlsisapd/doc/html/functions_0x72.html index 04b08981..cb1c91c7 100644 --- a/vlsisapd/doc/html/functions_0x72.html +++ b/vlsisapd/doc/html/functions_0x72.html @@ -47,7 +47,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x73.html b/vlsisapd/doc/html/functions_0x73.html index 24590bb4..ef44f2d5 100644 --- a/vlsisapd/doc/html/functions_0x73.html +++ b/vlsisapd/doc/html/functions_0x73.html @@ -112,7 +112,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x74.html b/vlsisapd/doc/html/functions_0x74.html index c27ef867..f09b3064 100644 --- a/vlsisapd/doc/html/functions_0x74.html +++ b/vlsisapd/doc/html/functions_0x74.html @@ -40,7 +40,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x76.html b/vlsisapd/doc/html/functions_0x76.html index 8a3f6eaa..acf969c4 100644 --- a/vlsisapd/doc/html/functions_0x76.html +++ b/vlsisapd/doc/html/functions_0x76.html @@ -40,7 +40,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_0x77.html b/vlsisapd/doc/html/functions_0x77.html index 257e80bb..54f134cf 100644 --- a/vlsisapd/doc/html/functions_0x77.html +++ b/vlsisapd/doc/html/functions_0x77.html @@ -43,7 +43,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_enum.html b/vlsisapd/doc/html/functions_enum.html index dd13825e..2d124e28 100644 --- a/vlsisapd/doc/html/functions_enum.html +++ b/vlsisapd/doc/html/functions_enum.html @@ -38,7 +38,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func.html b/vlsisapd/doc/html/functions_func.html index 81a5dca1..621e8c2d 100644 --- a/vlsisapd/doc/html/functions_func.html +++ b/vlsisapd/doc/html/functions_func.html @@ -119,7 +119,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x62.html b/vlsisapd/doc/html/functions_func_0x62.html index 136e45f9..8ccb1b43 100644 --- a/vlsisapd/doc/html/functions_func_0x62.html +++ b/vlsisapd/doc/html/functions_func_0x62.html @@ -37,7 +37,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x63.html b/vlsisapd/doc/html/functions_func_0x63.html index 70fbcbc4..8249d40c 100644 --- a/vlsisapd/doc/html/functions_func_0x63.html +++ b/vlsisapd/doc/html/functions_func_0x63.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x64.html b/vlsisapd/doc/html/functions_func_0x64.html index 57a103d6..9dfb3560 100644 --- a/vlsisapd/doc/html/functions_func_0x64.html +++ b/vlsisapd/doc/html/functions_func_0x64.html @@ -37,7 +37,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x67.html b/vlsisapd/doc/html/functions_func_0x67.html index 0adfe45a..c6fb5e9f 100644 --- a/vlsisapd/doc/html/functions_func_0x67.html +++ b/vlsisapd/doc/html/functions_func_0x67.html @@ -296,7 +296,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x68.html b/vlsisapd/doc/html/functions_func_0x68.html index 43e87812..66ce0330 100644 --- a/vlsisapd/doc/html/functions_func_0x68.html +++ b/vlsisapd/doc/html/functions_func_0x68.html @@ -71,7 +71,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x69.html b/vlsisapd/doc/html/functions_func_0x69.html index bc5e16fe..bacdcc97 100644 --- a/vlsisapd/doc/html/functions_func_0x69.html +++ b/vlsisapd/doc/html/functions_func_0x69.html @@ -64,7 +64,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x6c.html b/vlsisapd/doc/html/functions_func_0x6c.html index df4cf814..8917e14a 100644 --- a/vlsisapd/doc/html/functions_func_0x6c.html +++ b/vlsisapd/doc/html/functions_func_0x6c.html @@ -40,7 +40,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x6d.html b/vlsisapd/doc/html/functions_func_0x6d.html index af033ddc..0d1502d0 100644 --- a/vlsisapd/doc/html/functions_func_0x6d.html +++ b/vlsisapd/doc/html/functions_func_0x6d.html @@ -37,7 +37,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x6e.html b/vlsisapd/doc/html/functions_func_0x6e.html index 4a372694..162d1bcb 100644 --- a/vlsisapd/doc/html/functions_func_0x6e.html +++ b/vlsisapd/doc/html/functions_func_0x6e.html @@ -40,7 +40,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x6f.html b/vlsisapd/doc/html/functions_func_0x6f.html index 6c3eac11..3d36ab4f 100644 --- a/vlsisapd/doc/html/functions_func_0x6f.html +++ b/vlsisapd/doc/html/functions_func_0x6f.html @@ -37,7 +37,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x70.html b/vlsisapd/doc/html/functions_func_0x70.html index 181c3bf2..7e4a4c73 100644 --- a/vlsisapd/doc/html/functions_func_0x70.html +++ b/vlsisapd/doc/html/functions_func_0x70.html @@ -46,7 +46,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x72.html b/vlsisapd/doc/html/functions_func_0x72.html index dc8ff9f2..53588ed8 100644 --- a/vlsisapd/doc/html/functions_func_0x72.html +++ b/vlsisapd/doc/html/functions_func_0x72.html @@ -47,7 +47,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x73.html b/vlsisapd/doc/html/functions_func_0x73.html index ee213a3c..68c8d516 100644 --- a/vlsisapd/doc/html/functions_func_0x73.html +++ b/vlsisapd/doc/html/functions_func_0x73.html @@ -112,7 +112,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x74.html b/vlsisapd/doc/html/functions_func_0x74.html index 4912da48..f95cb459 100644 --- a/vlsisapd/doc/html/functions_func_0x74.html +++ b/vlsisapd/doc/html/functions_func_0x74.html @@ -40,7 +40,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x76.html b/vlsisapd/doc/html/functions_func_0x76.html index abe180a5..c7c64984 100644 --- a/vlsisapd/doc/html/functions_func_0x76.html +++ b/vlsisapd/doc/html/functions_func_0x76.html @@ -37,7 +37,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/functions_func_0x77.html b/vlsisapd/doc/html/functions_func_0x77.html index 425e7142..672b0d47 100644 --- a/vlsisapd/doc/html/functions_func_0x77.html +++ b/vlsisapd/doc/html/functions_func_0x77.html @@ -43,7 +43,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/hierarchy.html b/vlsisapd/doc/html/hierarchy.html index a630c298..42588973 100644 --- a/vlsisapd/doc/html/hierarchy.html +++ b/vlsisapd/doc/html/hierarchy.html @@ -98,7 +98,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/index.html b/vlsisapd/doc/html/index.html index ff64d13b..0cd231b1 100644 --- a/vlsisapd/doc/html/index.html +++ b/vlsisapd/doc/html/index.html @@ -58,7 +58,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/openchams.html b/vlsisapd/doc/html/openchams.html index e70e90b8..4d137a4f 100644 --- a/vlsisapd/doc/html/openchams.html +++ b/vlsisapd/doc/html/openchams.html @@ -917,7 +917,7 @@ Driver
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/pages.html b/vlsisapd/doc/html/pages.html index 8efec850..5411a919 100644 --- a/vlsisapd/doc/html/pages.html +++ b/vlsisapd/doc/html/pages.html @@ -39,7 +39,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/spice.html b/vlsisapd/doc/html/spice.html index 303a1f58..39ff80ef 100644 --- a/vlsisapd/doc/html/spice.html +++ b/vlsisapd/doc/html/spice.html @@ -639,7 +639,7 @@ Driver
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/struct_open_chams_1_1map__item.html b/vlsisapd/doc/html/struct_open_chams_1_1map__item.html index 5ec0c525..2b118910 100644 --- a/vlsisapd/doc/html/struct_open_chams_1_1map__item.html +++ b/vlsisapd/doc/html/struct_open_chams_1_1map__item.html @@ -38,7 +38,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/html/struct_s_p_i_c_e_1_1map__item.html b/vlsisapd/doc/html/struct_s_p_i_c_e_1_1map__item.html index 36abe80a..911dc7e4 100644 --- a/vlsisapd/doc/html/struct_s_p_i_c_e_1_1map__item.html +++ b/vlsisapd/doc/html/struct_s_p_i_c_e_1_1map__item.html @@ -38,7 +38,7 @@
                                                                                            - +
                                                                                            Generated by doxygen 1.8.5 on Sat Aug 18 2018Generated by doxygen 1.8.5 on Mon Oct 1 2018 Return to top of page
                                                                                            diff --git a/vlsisapd/doc/latex/class_a_g_d_s_1_1_element.pdf b/vlsisapd/doc/latex/class_a_g_d_s_1_1_element.pdf index 0c3dd5e354fc68d5de81144af7264d438b5e5cba..8d957b549cc11e6b2a85ac54a7e67e74a98ede47 100644 GIT binary patch delta 277 zcmZ3dwoYwBBM+}(YFeVPsga>>T8gF7m|2)O8@pK=7&)0(xEMIOxj7k_I-8nWxLDfR5L6M%WoO4#T#{H+Qc;we#${q+ NZqB8u>gw;t1ptOyNAv&y delta 277 zcmZ3dwoYwBBM+}>l0jmMxrw=MN|K53qcA#s-r+ zd3Di+j_{UY(VNC+k0B~C`4pcDhN%2zDgGafTm}|~7Dh(KmOx8n1SOETo9zTAGse1@ zn;4lnI~rRW7&@9dS-4nOnmd^pSs1t&xw^U-TbkL~5L6M%WoO4#T#{H+Qc;we#${q+ NZqB8u>gw;t1ps#gN3Z|@ diff --git a/vlsisapd/doc/latex/class_a_g_d_s_1_1_rectangle.pdf b/vlsisapd/doc/latex/class_a_g_d_s_1_1_rectangle.pdf index 95b0a53beaf8080af1ed69a6b6d8e3ef862b933b..f391f5002888eb5e919cb6943b8aa285b7f9543c 100644 GIT binary patch delta 273 zcmZ3jwpwjN9S^TzYFeVPsga>>T8gF7WJO;2$*Xv>Fhs-o3=MP*3_}b}tc)zIOf4t3 z@#>-r9po*;(5Emth0hK{RATaRJ{1g6`OV_|KNxik4GatoO^hr|Ewv4d)C~;OHM#VC z^HW?BOHwsltc(l{Ef6X;TMJHRbTT$Gb#gH`HZ!nvc6Bv%G&MJJv2?a{wREv`u`n|- OH?XrIq++swurvTS)Fhs-o3@mgFEkcZptc)$Kj14BY z@#>-r9po*;(5Emth0hK{RATaRJ{1g6`OV_|KNxikEDSA-jEpUf4YUo6)C~;OHM#VC z^HW?BOHwsltc(l{Ef6X;TMJHRbh24^oo0^yznz%aK M*$`4OSwL7C04=XX3;+NC diff --git a/vlsisapd/doc/latex/class_d_t_r_1_1_a_rule.pdf b/vlsisapd/doc/latex/class_d_t_r_1_1_a_rule.pdf index 18b01ac6fb9381cf19a93c15939ef79d7545ef21..2c8e00474d6059be0ea3a976646ef722389a7e8f 100644 GIT binary patch delta 270 zcmcbua9d%+I!<20G)tr8q(npAv=mFD$$?z*lW%cmVTgwF8XD*t7={>{SQ%Mb8BE^F zrH3Z+fvX%tm%`*J+;$kE5|h7kt6+%AZ+7ST!KiI$U|?uyVq|Gxplx8JZeXCU$))d` zpW>2OlB(fiWn^Gz0avj(i*E{}lZmCJn}xBNxvQJ0iIbZ-P`kOarMa`S1(0FxWMOV+ LLrBGB2LWjS2`@)7 delta 270 zcmcbua9d%+I!<2GB!k2ha}#sjlq3`5$$?z*lW%cmVTgwF8d&HWT7(!GSs7be8BgBI zrH3Z+fvX%tm%`*J+;$kE5|h7kt6+%AZ+7ST!KiIuVQ67wWNc|{plx8JZeXCU$))d` zpW>2OlB(fiWn^Gz0avj(i*E{}ld+SFrHQkVo4J{jsgtvlo0FM^nTdgufupmrrKzd8 NiJc806_XtVqydAEM!^68 diff --git a/vlsisapd/doc/latex/class_d_t_r_1_1_rule.pdf b/vlsisapd/doc/latex/class_d_t_r_1_1_rule.pdf index 691e42cf15d57907e42938bff1363e2655ec37b8..42ad257eeb0d54af05c8d7f08006338253c72190 100644 GIT binary patch delta 282 zcmcbka7SUodQM)$G)tr8q(npAv=mFD$q%?CCiil)Prl8Wg;j=QauJs~uc3jifnkWD ziItJ1mBHj~TzY6CAGyl0>UP5rwZRYp+rQa^=Le&UP5rwZRYp+rQa^=Le&-B diff --git a/vlsisapd/doc/latex/class_open_chams_1_1_bloc.pdf b/vlsisapd/doc/latex/class_open_chams_1_1_bloc.pdf index ed92b7e38088face8faf43b58264f421359b96d8..162a7e9488d2598e62b9a844ac769ff84939355b 100644 GIT binary patch delta 270 zcmdn0v{h+C2N$nlnx#>4Qlg=5T8gF7WIrDH$y>OxFhmt5dvlxf8XD*t7={>{SQ%Mb z8BFfy)14_G^7#NwFIvbl>m>8KFT9~-m M*$`4OSxQhE0J@+=?f?J) delta 270 zcmdn0v{h+C2N$ntl0jmMxrw=MN|K53WIrDH$y>OxFhmt5dvlxf8d&HWT7(!GSs7be z8Bgx#)3$B@eG*nx#>4Qlg=5T8gF7 zGMMbZtA{31&0CJ4GY&&UVsaCo3Wlis=1Y7(7_|)z3=9oTj4TZdv<-~Z4Gh#Zx%7SW zQ(O{DQZ-zxj0_Ad;3_tM6_~>4}YIY;%aH(X5eV*WZ`09YGi2a NXlFx6#pKgM(g2}}N_7AL delta 270 zcmaE+`b>3$B@eG@l0jmMxrw=MN|K534WbA5WVrFb^XyRsM;Ot~-X6b6^;$rUX;%aW4Qlg=5T8gF7WPLvQ$y0f+qWM85-ys7={>{SQ%Mb z85m41*CCb2T@! Obhfi0q+;@KA!z_M{Y5MQ delta 273 zcmbQHHcf3qCJ(P^Qlhb0O0v0bN|K53WPLvQ$y0f+qWM8Cd8VT7(!GSs7be z85>S6 zGBB8YkY5*F=nsDxhTb>~5sAr6f+`rI@|%MMe=zD88W~5sAr6f+`rI@|%MMe=zD8SQuIu85vs|8)_REsT&xmYjWxP z=BKzMmZWO9SQ!}@S|C(xE)$;2=wxZ;XlZU?Y-nogVr=1TY2<9=Y~tu>Y3OKTVrpUO OVqs@PNX2AtQE32zKS+)M diff --git a/vlsisapd/doc/latex/class_open_chams_1_1_device.pdf b/vlsisapd/doc/latex/class_open_chams_1_1_device.pdf index 7585c0647117b8652b0527cbeae533e667a92916..1aaceb1dcbe2305e25679c85988fd9f16abb00be 100644 GIT binary patch delta 273 zcmdm?x4Qlg=5T8gF7 zGBB7d%&UtoT2$0>TK*{U}Rxo>}YCX O>TG92NX6v2LecE`O}X6j~UVQgSv OW@%?bNX6v2Lec<*GDyq- diff --git a/vlsisapd/doc/latex/class_open_chams_1_1_equation.pdf b/vlsisapd/doc/latex/class_open_chams_1_1_equation.pdf index 90daf4ec1b3f9c6ddb147d683360d7b0e970d8d8..9440475a2fcd1585b17562f5e402e398e88d485d 100644 GIT binary patch delta 277 zcmca)c*$^sst~VXnx#>4Qlg=5T8gF7{SQ%Mb8BAv8 z(L)ol<0;3`r7-ysj~#}n#AH`q6%0}N%~N@QFlrkb7#JFw7+D$^Y8x1-8yKi-a_Rf# zr?@1Rq-wZW85tN_z*TJC!9SJJ!NADU$jHsY#m&;##mKB z(L)ol<0;3`r7-ysj~#}n#AH`q6%0}N%~N@QFlrlE7+M$^8Cx0~Y8x1-8yKi-a_Rf# zr?@1Rq-wZW85tN_z*TJC!9SJJ!Q9Nr+|bC>$kNTw(%9U<+``G(+0D|`z}V8v#o5Tn N&c+45ipjl#G64JuM(_Xt diff --git a/vlsisapd/doc/latex/class_open_chams_1_1_h_slicing_node.pdf b/vlsisapd/doc/latex/class_open_chams_1_1_h_slicing_node.pdf index 49f70578d460553d111e9b7c23e7e0e836b6737b..0e237f374eff76d08820133c56bbf5f62c3caca8 100644 GIT binary patch delta 270 zcmcbienWkOHZQM{fl-o~k&&TpT8gF7 zGMH?{r-vqz%U6z}GY&&UVsZ(;3Wlis<|F(+7_|)z3=9oTj4TZdwGE8a4Gh#Zx%7SW zQ(O{DQZ-zxj0_Ad;3_sh7o5WASAeWVQS`RVQ%VZZ0=(2YU=FdWaMmU NU}r-}#pJ!h(g5#kM{ocD delta 270 zcmcbienWkOHZQMfQlhb0O0v0bN|K53FDa{>gMKVV&v@XWN7T>Xzb`@?rh>}VPaw8 NVrN50#pJ!h(g0*GOAr76 diff --git a/vlsisapd/doc/latex/class_open_chams_1_1_h_v_slicing_node.pdf b/vlsisapd/doc/latex/class_open_chams_1_1_h_v_slicing_node.pdf index 385c39941649f9918321e0769b501c337bcafb32..2f0c55140ceaa9baa359d41cf2729d0b9d9f205e 100644 GIT binary patch delta 270 zcmbQLF;!zj1~0FXfl-o~k&&TpT8gF7WIcZQ$y0c{SQ%Mb z8BEUS(?b(k#aE7@GY&&UV)90Q6%0}N&5Qy+7_|)z3=9oTj4TZdwGE8a4Gh#Zx%7SW zQ(O{DQZ-zxj0_Ad;3_t&2u)#hay2k@F*S2EF>-VS>T-5AwluPIHg$4yGBY+eu{3eA MvmvBn@-Ja&08fTN&;S4c delta 270 zcmbQLF;!zj1~0E^Qlhb0O0v0bN|K53WIcZQ$y0cG&D6gF?Ka{b}}({bulvnvRuuLfg;9crUrI4 Lgj7uaB`gg9u`ER3 diff --git a/vlsisapd/doc/latex/class_open_chams_1_1_high_level_cstr.pdf b/vlsisapd/doc/latex/class_open_chams_1_1_high_level_cstr.pdf index 62c50320268b660944a773d702b44de7f5b2d520..90aae06f50e47e1ef2d7f055a3bbcaa868db0e23 100644 GIT binary patch delta 273 zcmX@7b53W&LVjK&1EVA}BO^oIv=mFD$?Nz#F+}7iCkt5c8XD*t7={>{SQ%Mb8BAUw zpob>%SfCt>&Ne}N3{i>6uLM;vMCCVI3H@N?G&C?UG&C`?G?;8HB8lK_jun~07;EHe zVrgP(Vrp#eV&-OMWa8}P>|$bQ>S|`;;$-A%;9_S(P(>`4ogG(kNn%k+MNw)Rm#LAt MIhU%ctG^o;0BpTR^Z)<= delta 273 zcmX@7b53W&LVjM;q(o!0lw@<=lq3`5$?Nz#F+}7iCkt5c8d&HWT7(!GSs7be8Bbmz zpob>%SfCt>&Ne}N3{i>6uLM;vMCCVI3H@N?G_WwVFfuZ>G@fiNB8lK_jun~07;9i| zVPfoJ>11GO=xXNT=xSi-VrXe;=4Rw#WMJWFX=Z0bP(>`4ogG(kNn%k+MNw)Rm#LAt MIhU%ctG^o;0M{o;?f?J) diff --git a/vlsisapd/doc/latex/class_open_chams_1_1_instance.pdf b/vlsisapd/doc/latex/class_open_chams_1_1_instance.pdf index 1e4a5299b9e2f644fb04b14718473363bf17e276..043c151472a08834f9b601a509b34530512bc32f 100644 GIT binary patch delta 277 zcmdm_x=D2dD-W-cfl-o~k&&TpT8gF7}X(Q?rd&qV&rJ%W@=>WWNBvTWNPYWVP@oJXG2g$ESH@fS8+*VQAtHnY8sb` Ov8geas;aBM8y5hkc|=42 delta 277 zcmdm_x=D2dD-W+}vT?G3iHW&xN|K53ZqBA|E~W;?rml`IX66<~j;?MN2BwCV76y)P Q1}^4yHiT46Ruq;70E)>-%>V!Z delta 285 zcmdm^wnuG4KM${IvT?G3iHW&xN|K534DyZbpuVrjAAy7A}THZcY|Jj;pzovy-Ex OrJ0=#Ar+Gqg{1+EOiD)p diff --git a/vlsisapd/doc/latex/class_open_chams_1_1_intermediate_point.pdf b/vlsisapd/doc/latex/class_open_chams_1_1_intermediate_point.pdf index a39402ed2be581906523563c72bbe859f08059b4..228e34cf293ed2956f72002e982d9ef763c56ea5 100644 GIT binary patch delta 277 zcmeyY_E~MiF&NEDPn;%;shoXi;O zVqs=#W@2Dz}2F*Ze(a??qc9%XG2g$ESH@fS8+*VQAtHnY8sb` Osfihvs;aBM8y5h9Ped00 delta 277 zcmeyY_E~MiF& zGMIdTPY+GxH(xo1&NvJaiOEa?Dj1^jn}Y;?Flrkb7#JFw7+D$^X&V@+8yKi-a_Rf# zr?@1Rq-wZW85tN_z*TH66`I26ZPY+GxH(xo1&NvJaiOEa?Dj1^jn}Y;?FlrlE7+M$^8Cx0~X&V@+8yKi-a_Rf# zr?@1Rq-wZW85tN_z*TH66`I26Wa;E+YHVuhVq)QHXkupSXyI&NY2s>N>FDC(Xlia| NU}r-}#bj?0X#h-FMkN3M diff --git a/vlsisapd/doc/latex/class_open_chams_1_1_node.pdf b/vlsisapd/doc/latex/class_open_chams_1_1_node.pdf index 880fb50ff8f07bffa6d48d9575dcfa4fa619f161..58989a99191bb72b8c0dec72def68f3884bb7044 100644 GIT binary patch delta 273 zcmaE%_CjsLZXRAE1EVA}BO^oIv=mFD$&GySlb`csVTdYBuH!Z5Gc?dOFbpv?u`;r> zGBBKcm{%8F=pSzxhTb>~5sAqx{3;lt@|#2We=zD88WRVPI+L>T2%f=~5sAqx{3;lt@|#2We=zD8SQuIu85vs|8)+LDsT&xmYjWxP z=BKzMmZWO9SQ!}@S|C(xt`MBe=wxYXZs}rV=4xT)=;UH(Y+&x>=4$S0Y~o~T?&|Dj OW@cwYNX2AdVQBy!L`NUP5rwZRYp+rQa^_Xnf4p@D&+p^1^DfswX>k-C9_x+a&t zZ+?nPVo9ooi91_q`EPG+VSCT1>%uBMhIMy{^L P<`#A~gj7s+6qE)4@;OWq delta 282 zcmcbkbVq5!dM;kmWaDH56BBdYlq3`5$q#rWCin8NPrl8Sg;j=QauK&VuYrZGp+$(1 zk(IHfmGR_l+UP5rwZRYp+rQa^_Xnf4frX)kk&&^bv5~fck-C9_x+a&t zZ+?nPVo9ooiB(o0Au2I>EuRX8sQl)?d_NdD4Gjzo4NZ(J4JQ8+kVNn{D+o?uj5V=z zGO#c=H!?LeH*j^bG%$5GGBkB`HE}aFb~SV}GO)8Ds3Mlj&W@|NB(bQZq9`?u%f!UQ Mf=gA^)!&T^0MD;Rb^rhX delta 273 zcmbQJHc@Ru3JqcA#*?#o z_0U9?@s?xJ>B(o0Au2I>EuRX8sQl)?d_NdD4J-^TjEsyejVJ#TkVNn{D+o?ujCC_J zbTKlpurPA8aC5V8bapW?c5*cavP_*F4V;V(>}&|Ch~=`g<0>vmEGnreN=@T3F)^{= LQdM>JcjE#8Xs$+c diff --git a/vlsisapd/doc/latex/class_open_chams_1_1_slicing_node.pdf b/vlsisapd/doc/latex/class_open_chams_1_1_slicing_node.pdf index 37ad48ca8c38e8b3a7e84a7b30147fa16dddf65a..1002906bb31ec72346234cca9952996f71eabb9d 100644 GIT binary patch delta 277 zcmeyQ`AKtwD<7|sL9%h0MWUf@T8gF7u!yqrTkshg=o%P?7@AlaSy~ww zP4?y2MHlMeFTu!yqrTksiJ=o(st7#Ud^TUr?# zPxj^4MHlMeFTwRE;HaWr!>H!yayvmvM=mdnnLtGFbwsHCDOHI2)} O(#VoaRn^tsjSB#Tn@IZr diff --git a/vlsisapd/doc/latex/class_open_chams_1_1_v_slicing_node.pdf b/vlsisapd/doc/latex/class_open_chams_1_1_v_slicing_node.pdf index 279edf5199a49e41992133f8c73118134d3c0079..1ac78b046138848994de58b6f1eee2c6f0ab6437 100644 GIT binary patch delta 273 zcmcbveqDWo7B8=nL9%h0MWUf@T8gF7 zGBBEK#HWicl*?C!p*IdgL}GF=zY2z^{N}^_KNxik4GatoO^hrJjI<4m)C~;OHM#VC z^HW?BOHwsltc(l{Ef6X;KNp@WN2n=VrXt)?&9p~VrgV<`J8o diff --git a/vlsisapd/doc/latex/class_open_chams_1_1_wire_point.pdf b/vlsisapd/doc/latex/class_open_chams_1_1_wire_point.pdf index aa7e36926ac43564efa1926eab8c37bd5846506e..b65bf86742e4a85024e8e8b3826ac28d6dbe4c9d 100644 GIT binary patch delta 277 zcmZ3dxlVHfBOkAkL9%h0MWUf@T8gF7WIn!53=#Rshxsh{3=MP*3_}b}tc)zJ42&jo z^6R1tx$u`^(ff?w9z#@OvX_7ghN%4JSpq*8xeN^q3=K_;EP4v%*ol+)XBo!(aqV|z|q3k&=|-!as*O_b~Xf6#B$l$aTS*&7L`;KrKWM2SeO}d Lsj9mAyKw;kYsW>n delta 277 zcmZ3dxlVHfBOkA6a*By%VzRkzN|K53WIn!53=#Rshxsh{3@mgFEkcZptc)$KjEyIA z^6R1tx$u`^(ff?w9z#@OvX_7ghN%4JSpq*8xeP1}EsTteErFKI5t2aSZr&#}nK9PI z*~H1s#mw2o$->gi$=KDz!qn2($l27?+1S|8$ko!$hMU8N9maLYH~VuBDkO`ObJ&5X?) OE$nOvshIp)P#OSJL`1v* delta 273 zcmZouX;aw{$<1q;oMK{`m~5__l4N2$S)NyZaw~ThhN!}186I;!0}EY4ix49tD`QJ5 zW8=w*Ji6#Yb9l-y^u}R`NK9VDtAZgazxfmI4@MmW3quPdBV$WrV{HQ?bpr!+O)h=k z{1lhOl2i>BDUP5rwZRYp+rL>;@CT!|p@D&+p^1^Dfw8uMk-C9_x+a&t zZ+?nPVo9ooiYj&4SVE=J}?E{-N{ lCT4av1XaXx+1YUwmn0UIR1~GAahVzzm~g48y863u0RYm-PtX7W delta 305 zcmdn1wO4Dy1U_EVUP5rwZRYp+rL>;@CT!|frX)kk&&^bv9Y#+k-C9_x+a&t zZ+?nPVo9ooiP%YPR?dd=Eerb#*U_@ZqCjY l22OT11XaXx+1YUwmn0UIR1~GAahVzzm~g48y863u0RWP}QL+F4 diff --git a/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_mosfet.pdf b/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_mosfet.pdf index f20d8bf7982313cc535feebcdb050265b031f48d..59a1a9a7fece9a460eb417b85fd2321abb666efb 100644 GIT binary patch delta 305 zcmeBG?N#0IfScFI&@|a1&B#zUEydDkvLK(tIU( zVr67$Wia_Uj~<$c5^p(H-EJ77HW(sc`!`qe{b1BKG%zqUG%>O?FxECOQa3PA*W}Xo z%};SjEJ@XHu`)6+w1BJFJV#&(W2~#OqnnA5lYz6di;G1*)#xw)gOrICq&vx|wVnX$2frIDMfvx$j`k&~H| kv4x!tK^3uFc6MCFC5c5P6-B9OTqeebW?ZVOuKsRZ04_;STmS$7 diff --git a/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_resistor.pdf b/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_resistor.pdf index 5648fb0bb94878aa08a02719880bb5f3e2937f71..74359a05a509237c5c50e7042ceb71b51b8f6fac 100644 GIT binary patch delta 269 zcmeBB>rmSe&BJSCXqs%1W@MhEayw5JhN!}1IbL&KLjzp{!w^FgDRhBjg3rQ3@u#@O$=Neot?}rEzC__ObuOJO%2UmoLvn~ N>}&|AnEXaa1^~oFLgfGe delta 269 zcmeBB>rmSe&BJS&oMK{`m~5__l4N2$S&>hEayw5JhN!}1IbL&K0}EY4ix49tD`QJ5 zRhB9bFuqUCkZcj9kp!j4a#?4U7$)P24ODT`Vn444sTj N>}&|AnEXaa1^{jIMMVGr diff --git a/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_source.pdf b/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_source.pdf index 618a755da37e27fed45d54b755d76e4710e3cf0b..5eb5947649182a0b756fb198f323d69410894b60 100644 GIT binary patch delta 273 zcmbQKIa71P8(v-`L(^o7G$TXZv=mFD$^CrtlO_1FFhs-o3=MP*3_}b}tc)zJ42&m# z;nPJI(&sP3(5Eo@62BdWsKjJb0Tm2U`OU2YKNxik4GatoO^hrJjI|An)C~;OHM#VC z^HW?BOHwsltc(l{Ef6X;uN0ch=;UT$;$-P&=IH8VVCd-T=<00j;^t~>U}R+B>}uxb OVs2+cNX6tj5orJ?tVa(3 delta 273 zcmbQKIa71P8(v=16tfg#Llbk|lq3`5$^CrtlO_1FFhs-o3@mgFEkcZptc)$Kj7=tg z;nPJI(&sP3(5Eo@62BdWsKjJb0Tm2U`OU2YKNxikEDSA-jEpUfO|%V+)C~;OHM#VC z^HW?BOHwsltc(l{Ef6X;uN0ch=;Y#LZfS1lVrJ-S?quj}W?^XVXlUYU;bvfLWME`y O>SSj_NX6tj5orJ}u|`1v diff --git a/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_voltage.pdf b/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_voltage.pdf index c1608e0c99a488d0f99e4c6fa448841c9d778ddd..9804013f074cba0bc1bd42e5f849c7fdf88bdb71 100644 GIT binary patch delta 273 zcmeBF>r~qi!^3N2Xqs%1W@MIMetnq2z6 z`6(`mC8-)NRz?Pf76=uaB?TulIvH4+8#}rg7&tk(IyxB`xLR16n;4k7nmHR9Iy<@= OnAzD7QZf0RkTd`anMfr7 delta 273 zcmeBF>r~qi!^3NuVwPfTXkxCLl4N2$`9F{RIMetnq2z6 z`6(`mC8-)NRz?Pf76=uaB?TulI$4-nn7J7m7+9D)8o5}wnwwa}&|BnEXyi8UQuwNPhqT diff --git a/vlsisapd/doc/latex/refman.tex b/vlsisapd/doc/latex/refman.tex index fe59d60a..5d3acc14 100644 --- a/vlsisapd/doc/latex/refman.tex +++ b/vlsisapd/doc/latex/refman.tex @@ -67,8 +67,8 @@ \fancyhead[RO]{\fancyplain{}{\bfseries\thepage}} \fancyfoot[LE]{\fancyplain{}{}} \fancyfoot[CE]{\fancyplain{}{}} -\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated on Sat Aug 18 2018 22\-:39\-:34 for V\-L\-S\-I S\-A\-P\-D by Doxygen }} -\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated on Sat Aug 18 2018 22\-:39\-:34 for V\-L\-S\-I S\-A\-P\-D by Doxygen }} +\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated on Mon Oct 1 2018 14\-:29\-:03 for V\-L\-S\-I S\-A\-P\-D by Doxygen }} +\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated on Mon Oct 1 2018 14\-:29\-:03 for V\-L\-S\-I S\-A\-P\-D by Doxygen }} \fancyfoot[CO]{\fancyplain{}{}} \fancyfoot[RO]{\fancyplain{}{}} \renewcommand{\footrulewidth}{0.4pt} @@ -120,7 +120,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.5}\\ \vspace*{0.5cm} -{\small Sat Aug 18 2018 22:39:34}\\ +{\small Mon Oct 1 2018 14:29:03}\\ \end{center} \end{titlepage} \clearemptydoublepage