From b05ad820a4b1302b030ff881a5cf8d5482563677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marie-Minerve=20Lou=C3=ABrat?= Date: Mon, 4 Feb 2019 14:55:29 +0100 Subject: [PATCH 1/5] Remove tedius lef.tab.h --- lefdef/src/lef/lef/lef.tab.h | 501 ----------------------------------- 1 file changed, 501 deletions(-) delete mode 100644 lefdef/src/lef/lef/lef.tab.h diff --git a/lefdef/src/lef/lef/lef.tab.h b/lefdef/src/lef/lef/lef.tab.h deleted file mode 100644 index 1306fa2f..00000000 --- a/lefdef/src/lef/lef/lef.tab.h +++ /dev/null @@ -1,501 +0,0 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ - -/* Bison interface for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program 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 - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -#ifndef YY_LEFYY_LEF_TAB_HPP_INCLUDED -# define YY_LEFYY_LEF_TAB_HPP_INCLUDED -/* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int lefyydebug; -#endif - -/* Token type. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - enum yytokentype - { - K_HISTORY = 258, - K_ABUT = 259, - K_ABUTMENT = 260, - K_ACTIVE = 261, - K_ANALOG = 262, - K_ARRAY = 263, - K_AREA = 264, - K_BLOCK = 265, - K_BOTTOMLEFT = 266, - K_BOTTOMRIGHT = 267, - K_BY = 268, - K_CAPACITANCE = 269, - K_CAPMULTIPLIER = 270, - K_CLASS = 271, - K_CLOCK = 272, - K_CLOCKTYPE = 273, - K_COLUMNMAJOR = 274, - K_DESIGNRULEWIDTH = 275, - K_INFLUENCE = 276, - K_CORE = 277, - K_CORNER = 278, - K_COVER = 279, - K_CPERSQDIST = 280, - K_CURRENT = 281, - K_CURRENTSOURCE = 282, - K_CUT = 283, - K_DEFAULT = 284, - K_DATABASE = 285, - K_DATA = 286, - K_DIELECTRIC = 287, - K_DIRECTION = 288, - K_DO = 289, - K_EDGECAPACITANCE = 290, - K_EEQ = 291, - K_END = 292, - K_ENDCAP = 293, - K_FALL = 294, - K_FALLCS = 295, - K_FALLT0 = 296, - K_FALLSATT1 = 297, - K_FALLRS = 298, - K_FALLSATCUR = 299, - K_FALLTHRESH = 300, - K_FEEDTHRU = 301, - K_FIXED = 302, - K_FOREIGN = 303, - K_FROMPIN = 304, - K_GENERATE = 305, - K_GENERATOR = 306, - K_GROUND = 307, - K_HEIGHT = 308, - K_HORIZONTAL = 309, - K_INOUT = 310, - K_INPUT = 311, - K_INPUTNOISEMARGIN = 312, - K_COMPONENTPIN = 313, - K_INTRINSIC = 314, - K_INVERT = 315, - K_IRDROP = 316, - K_ITERATE = 317, - K_IV_TABLES = 318, - K_LAYER = 319, - K_LEAKAGE = 320, - K_LEQ = 321, - K_LIBRARY = 322, - K_MACRO = 323, - K_MATCH = 324, - K_MAXDELAY = 325, - K_MAXLOAD = 326, - K_METALOVERHANG = 327, - K_MILLIAMPS = 328, - K_MILLIWATTS = 329, - K_MINFEATURE = 330, - K_MUSTJOIN = 331, - K_NAMESCASESENSITIVE = 332, - K_NANOSECONDS = 333, - K_NETS = 334, - K_NEW = 335, - K_NONDEFAULTRULE = 336, - K_NONINVERT = 337, - K_NONUNATE = 338, - K_OBS = 339, - K_OHMS = 340, - K_OFFSET = 341, - K_ORIENTATION = 342, - K_ORIGIN = 343, - K_OUTPUT = 344, - K_OUTPUTNOISEMARGIN = 345, - K_OVERHANG = 346, - K_OVERLAP = 347, - K_OFF = 348, - K_ON = 349, - K_OVERLAPS = 350, - K_PAD = 351, - K_PATH = 352, - K_PATTERN = 353, - K_PICOFARADS = 354, - K_PIN = 355, - K_PITCH = 356, - K_PLACED = 357, - K_POLYGON = 358, - K_PORT = 359, - K_POST = 360, - K_POWER = 361, - K_PRE = 362, - K_PULLDOWNRES = 363, - K_RECT = 364, - K_RESISTANCE = 365, - K_RESISTIVE = 366, - K_RING = 367, - K_RISE = 368, - K_RISECS = 369, - K_RISERS = 370, - K_RISESATCUR = 371, - K_RISETHRESH = 372, - K_RISESATT1 = 373, - K_RISET0 = 374, - K_RISEVOLTAGETHRESHOLD = 375, - K_FALLVOLTAGETHRESHOLD = 376, - K_ROUTING = 377, - K_ROWMAJOR = 378, - K_RPERSQ = 379, - K_SAMENET = 380, - K_SCANUSE = 381, - K_SHAPE = 382, - K_SHRINKAGE = 383, - K_SIGNAL = 384, - K_SITE = 385, - K_SIZE = 386, - K_SOURCE = 387, - K_SPACER = 388, - K_SPACING = 389, - K_SPECIALNETS = 390, - K_STACK = 391, - K_START = 392, - K_STEP = 393, - K_STOP = 394, - K_STRUCTURE = 395, - K_SYMMETRY = 396, - K_TABLE = 397, - K_THICKNESS = 398, - K_TIEHIGH = 399, - K_TIELOW = 400, - K_TIEOFFR = 401, - K_TIME = 402, - K_TIMING = 403, - K_TO = 404, - K_TOPIN = 405, - K_TOPLEFT = 406, - K_TOPRIGHT = 407, - K_TOPOFSTACKONLY = 408, - K_TRISTATE = 409, - K_TYPE = 410, - K_UNATENESS = 411, - K_UNITS = 412, - K_USE = 413, - K_VARIABLE = 414, - K_VERTICAL = 415, - K_VHI = 416, - K_VIA = 417, - K_VIARULE = 418, - K_VLO = 419, - K_VOLTAGE = 420, - K_VOLTS = 421, - K_WIDTH = 422, - K_X = 423, - K_Y = 424, - T_STRING = 425, - QSTRING = 426, - NUMBER = 427, - K_N = 428, - K_S = 429, - K_E = 430, - K_W = 431, - K_FN = 432, - K_FS = 433, - K_FE = 434, - K_FW = 435, - K_R0 = 436, - K_R90 = 437, - K_R180 = 438, - K_R270 = 439, - K_MX = 440, - K_MY = 441, - K_MXR90 = 442, - K_MYR90 = 443, - K_USER = 444, - K_MASTERSLICE = 445, - K_ENDMACRO = 446, - K_ENDMACROPIN = 447, - K_ENDVIARULE = 448, - K_ENDVIA = 449, - K_ENDLAYER = 450, - K_ENDSITE = 451, - K_CANPLACE = 452, - K_CANNOTOCCUPY = 453, - K_TRACKS = 454, - K_FLOORPLAN = 455, - K_GCELLGRID = 456, - K_DEFAULTCAP = 457, - K_MINPINS = 458, - K_WIRECAP = 459, - K_STABLE = 460, - K_SETUP = 461, - K_HOLD = 462, - K_DEFINE = 463, - K_DEFINES = 464, - K_DEFINEB = 465, - K_IF = 466, - K_THEN = 467, - K_ELSE = 468, - K_FALSE = 469, - K_TRUE = 470, - K_EQ = 471, - K_NE = 472, - K_LE = 473, - K_LT = 474, - K_GE = 475, - K_GT = 476, - K_OR = 477, - K_AND = 478, - K_NOT = 479, - K_DELAY = 480, - K_TABLEDIMENSION = 481, - K_TABLEAXIS = 482, - K_TABLEENTRIES = 483, - K_TRANSITIONTIME = 484, - K_EXTENSION = 485, - K_PROPDEF = 486, - K_STRING = 487, - K_INTEGER = 488, - K_REAL = 489, - K_RANGE = 490, - K_PROPERTY = 491, - K_VIRTUAL = 492, - K_BUSBITCHARS = 493, - K_VERSION = 494, - K_BEGINEXT = 495, - K_ENDEXT = 496, - K_UNIVERSALNOISEMARGIN = 497, - K_EDGERATETHRESHOLD1 = 498, - K_CORRECTIONTABLE = 499, - K_EDGERATESCALEFACTOR = 500, - K_EDGERATETHRESHOLD2 = 501, - K_VICTIMNOISE = 502, - K_NOISETABLE = 503, - K_EDGERATE = 504, - K_OUTPUTRESISTANCE = 505, - K_VICTIMLENGTH = 506, - K_CORRECTIONFACTOR = 507, - K_OUTPUTPINANTENNASIZE = 508, - K_INPUTPINANTENNASIZE = 509, - K_INOUTPINANTENNASIZE = 510, - K_CURRENTDEN = 511, - K_PWL = 512, - K_ANTENNALENGTHFACTOR = 513, - K_TAPERRULE = 514, - K_DIVIDERCHAR = 515, - K_ANTENNASIZE = 516, - K_ANTENNAMETALLENGTH = 517, - K_ANTENNAMETALAREA = 518, - K_RISESLEWLIMIT = 519, - K_FALLSLEWLIMIT = 520, - K_FUNCTION = 521, - K_BUFFER = 522, - K_INVERTER = 523, - K_NAMEMAPSTRING = 524, - K_NOWIREEXTENSIONATPIN = 525, - K_WIREEXTENSION = 526, - K_MESSAGE = 527, - K_CREATEFILE = 528, - K_OPENFILE = 529, - K_CLOSEFILE = 530, - K_WARNING = 531, - K_ERROR = 532, - K_FATALERROR = 533, - K_RECOVERY = 534, - K_SKEW = 535, - K_ANYEDGE = 536, - K_POSEDGE = 537, - K_NEGEDGE = 538, - K_SDFCONDSTART = 539, - K_SDFCONDEND = 540, - K_SDFCOND = 541, - K_MPWH = 542, - K_MPWL = 543, - K_PERIOD = 544, - K_ACCURRENTDENSITY = 545, - K_DCCURRENTDENSITY = 546, - K_AVERAGE = 547, - K_PEAK = 548, - K_RMS = 549, - K_FREQUENCY = 550, - K_CUTAREA = 551, - K_MEGAHERTZ = 552, - K_USELENGTHTHRESHOLD = 553, - K_LENGTHTHRESHOLD = 554, - K_ANTENNAINPUTGATEAREA = 555, - K_ANTENNAINOUTDIFFAREA = 556, - K_ANTENNAOUTPUTDIFFAREA = 557, - K_ANTENNAAREARATIO = 558, - K_ANTENNADIFFAREARATIO = 559, - K_ANTENNACUMAREARATIO = 560, - K_ANTENNACUMDIFFAREARATIO = 561, - K_ANTENNAAREAFACTOR = 562, - K_ANTENNASIDEAREARATIO = 563, - K_ANTENNADIFFSIDEAREARATIO = 564, - K_ANTENNACUMSIDEAREARATIO = 565, - K_ANTENNACUMDIFFSIDEAREARATIO = 566, - K_ANTENNASIDEAREAFACTOR = 567, - K_DIFFUSEONLY = 568, - K_MANUFACTURINGGRID = 569, - K_FIXEDMASK = 570, - K_ANTENNACELL = 571, - K_CLEARANCEMEASURE = 572, - K_EUCLIDEAN = 573, - K_MAXXY = 574, - K_USEMINSPACING = 575, - K_ROWMINSPACING = 576, - K_ROWABUTSPACING = 577, - K_FLIP = 578, - K_NONE = 579, - K_ANTENNAPARTIALMETALAREA = 580, - K_ANTENNAPARTIALMETALSIDEAREA = 581, - K_ANTENNAGATEAREA = 582, - K_ANTENNADIFFAREA = 583, - K_ANTENNAMAXAREACAR = 584, - K_ANTENNAMAXSIDEAREACAR = 585, - K_ANTENNAPARTIALCUTAREA = 586, - K_ANTENNAMAXCUTCAR = 587, - K_SLOTWIREWIDTH = 588, - K_SLOTWIRELENGTH = 589, - K_SLOTWIDTH = 590, - K_SLOTLENGTH = 591, - K_MAXADJACENTSLOTSPACING = 592, - K_MAXCOAXIALSLOTSPACING = 593, - K_MAXEDGESLOTSPACING = 594, - K_SPLITWIREWIDTH = 595, - K_MINIMUMDENSITY = 596, - K_MAXIMUMDENSITY = 597, - K_DENSITYCHECKWINDOW = 598, - K_DENSITYCHECKSTEP = 599, - K_FILLACTIVESPACING = 600, - K_MINIMUMCUT = 601, - K_ADJACENTCUTS = 602, - K_ANTENNAMODEL = 603, - K_BUMP = 604, - K_ENCLOSURE = 605, - K_FROMABOVE = 606, - K_FROMBELOW = 607, - K_IMPLANT = 608, - K_LENGTH = 609, - K_MAXVIASTACK = 610, - K_AREAIO = 611, - K_BLACKBOX = 612, - K_MAXWIDTH = 613, - K_MINENCLOSEDAREA = 614, - K_MINSTEP = 615, - K_ORIENT = 616, - K_OXIDE1 = 617, - K_OXIDE2 = 618, - K_OXIDE3 = 619, - K_OXIDE4 = 620, - K_PARALLELRUNLENGTH = 621, - K_MINWIDTH = 622, - K_PROTRUSIONWIDTH = 623, - K_SPACINGTABLE = 624, - K_WITHIN = 625, - K_ABOVE = 626, - K_BELOW = 627, - K_CENTERTOCENTER = 628, - K_CUTSIZE = 629, - K_CUTSPACING = 630, - K_DENSITY = 631, - K_DIAG45 = 632, - K_DIAG135 = 633, - K_MASK = 634, - K_DIAGMINEDGELENGTH = 635, - K_DIAGSPACING = 636, - K_DIAGPITCH = 637, - K_DIAGWIDTH = 638, - K_GENERATED = 639, - K_GROUNDSENSITIVITY = 640, - K_HARDSPACING = 641, - K_INSIDECORNER = 642, - K_LAYERS = 643, - K_LENGTHSUM = 644, - K_MICRONS = 645, - K_MINCUTS = 646, - K_MINSIZE = 647, - K_NETEXPR = 648, - K_OUTSIDECORNER = 649, - K_PREFERENCLOSURE = 650, - K_ROWCOL = 651, - K_ROWPATTERN = 652, - K_SOFT = 653, - K_SUPPLYSENSITIVITY = 654, - K_USEVIA = 655, - K_USEVIARULE = 656, - K_WELLTAP = 657, - K_ARRAYCUTS = 658, - K_ARRAYSPACING = 659, - K_ANTENNAAREADIFFREDUCEPWL = 660, - K_ANTENNAAREAMINUSDIFF = 661, - K_ANTENNACUMROUTINGPLUSCUT = 662, - K_ANTENNAGATEPLUSDIFF = 663, - K_ENDOFLINE = 664, - K_ENDOFNOTCHWIDTH = 665, - K_EXCEPTEXTRACUT = 666, - K_EXCEPTSAMEPGNET = 667, - K_EXCEPTPGNET = 668, - K_LONGARRAY = 669, - K_MAXEDGES = 670, - K_NOTCHLENGTH = 671, - K_NOTCHSPACING = 672, - K_ORTHOGONAL = 673, - K_PARALLELEDGE = 674, - K_PARALLELOVERLAP = 675, - K_PGONLY = 676, - K_PRL = 677, - K_TWOEDGES = 678, - K_TWOWIDTHS = 679, - IF = 680, - LNOT = 681, - UMINUS = 682 - }; -#endif - -/* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - -union YYSTYPE -{ -#line 194 "/home/jpc/coriolis-2.x/src/coriolis/lefdef/src/lef/lef/lef.y" /* yacc.c:1909 */ - - double dval ; - int integer ; - char * string ; - LefDefParser::lefPOINT pt; - -#line 489 "lef.tab.hpp" /* yacc.c:1909 */ -}; - -typedef union YYSTYPE YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define YYSTYPE_IS_DECLARED 1 -#endif - - -extern YYSTYPE lefyylval; - -int lefyyparse (void); - -#endif /* !YY_LEFYY_LEF_TAB_HPP_INCLUDED */ From b78a524e5f3c292c38123c83922c53ef02b5d2e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marie-Minerve=20Lou=C3=ABrat?= Date: Thu, 23 May 2019 15:51:06 +0200 Subject: [PATCH 2/5] Introduction d'une page de garde pour la documentation Coriolis et Python --- documentation/PythonTutorial/pdfHeader.rst | 55 ++++++++++++++++-- documentation/UsersGuide/pdfHeader.rst | 52 ++++++++++++++++- documentation/etc/SoC-ReST.tex | 4 +- documentation/etc/images/logoCC.pdf | Bin 0 -> 5560 bytes documentation/etc/images/logoLIP6_SU_CNRS.pdf | Bin 0 -> 23396 bytes 5 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 documentation/etc/images/logoCC.pdf create mode 100644 documentation/etc/images/logoLIP6_SU_CNRS.pdf diff --git a/documentation/PythonTutorial/pdfHeader.rst b/documentation/PythonTutorial/pdfHeader.rst index 584bd6cd..0a01f58b 100644 --- a/documentation/PythonTutorial/pdfHeader.rst +++ b/documentation/PythonTutorial/pdfHeader.rst @@ -4,17 +4,64 @@ .. include:: ./definitions.rst -========================= -Hurricane+Python Tutorial -========================= -|pagestylefancy| +.. raw:: latex + + \newpage + + \pagestyle{empty} + + \begin{center} + + \begin{figure}[t] + \begin{center} + \includegraphics[scale=0.4]{../etc/images/logoLIP6_SU_CNRS.pdf} + \end{center} + \end{figure} + + \vspace{2cm} + + \huge \textsc{Sorbonne Université} + + \vspace{1cm} + + \huge {\textsc{lip6} Laboratory} + \vspace{3cm} + + \Huge \textsc{Hurricane+Python} + \vspace{1cm} + + \Huge \textbf{Tutorial} + \vspace{1cm} + + \huge {Jean-Paul \textsc{Chaput}} + \vspace{4cm} + + \begin{figure}[!h] + \begin{center} + \includegraphics[scale=1.0]{../etc/images/logoCC.pdf} + \end{center} + \end{figure} + + \normalsize + + This work is licensed under a\\ + Creative Commons Attribution-NonCommercial-ShareALike 4.0 International License.\\ + Creative Commons License \href{https://creativecommons.org/licenses/by-nc-sa/4.0/} {creativecommons.org/licenses/by-nc-sa/4.0/} + + \end{center} + + \newpage + \pagestyle{fancy} + |noindent| **First, a small disclaimer.** This tutorial assume that you are already familiar with the concepts of |VLSI| designs, such as *netlist*, *layout*, *instances* and hierarchical design. +|pagestylefancy| + .. contents:: diff --git a/documentation/UsersGuide/pdfHeader.rst b/documentation/UsersGuide/pdfHeader.rst index 3a9c832f..18be03a6 100644 --- a/documentation/UsersGuide/pdfHeader.rst +++ b/documentation/UsersGuide/pdfHeader.rst @@ -3,13 +3,59 @@ .. include:: ../etc/definitions.rst -======================= -Coriolis User's Guide -======================= + +.. raw:: latex + + \newpage + + \pagestyle{empty} + + \begin{center} + + \begin{figure}[t] + \begin{center} + \includegraphics[scale=0.4]{../etc/images/logoLIP6_SU_CNRS.pdf} + \end{center} + \end{figure} + + \vspace{2cm} + + \huge \textsc{Sorbonne Université} + + \vspace{1cm} + + \huge {\textsc{lip6} Laboratory} + \vspace{3cm} + + \Huge \textsc{Coriolis} + \vspace{1cm} + \Huge \textbf{User's Guide} + \vspace{1cm} + + \huge {Jean-Paul \textsc{Chaput}} + \vspace{4cm} + + \begin{figure}[!h] + \begin{center} + \includegraphics[scale=1.0]{../etc/images/logoCC.pdf} + \end{center} + \end{figure} + + \normalsize + + This work is licensed under a\\ + Creative Commons Attribution-NonCommercial-ShareALike 4.0 International License.\\ + Creative Commons License \href{https://creativecommons.org/licenses/by-nc-sa/4.0/} {creativecommons.org/licenses/by-nc-sa/4.0/} + + \end{center} + + \newpage + \pagestyle{fancy} |pagestylefancy| + .. contents:: |newpage| diff --git a/documentation/etc/SoC-ReST.tex b/documentation/etc/SoC-ReST.tex index bd8ea443..d1d61c3f 100644 --- a/documentation/etc/SoC-ReST.tex +++ b/documentation/etc/SoC-ReST.tex @@ -100,6 +100,7 @@ \newcommand{\LIP} {\textsc{lip6}\xspace} \newcommand{\SoC} {\textsc{S}o\textsc{C}\xspace} + \newcommand{\CIAN} {\textsc{cian}\xspace} \renewcommand{\headrulewidth}{0.2mm} \renewcommand{\footrulewidth}{0.2mm} @@ -107,7 +108,8 @@ \renewcommand{\subsectionmark}[1]{} \lhead[]{Coriolis Documentation} \rhead[]{\today} - \lfoot[]{\LIP/\SoC \href{https://www-soc.lip6.fr/}{www-soc.lip6.fr}} +% \lfoot[]{\LIP/\SoC \href{https://www-soc.lip6.fr/}{www-soc.lip6.fr}} + \lfoot[]{\LIP/\CIAN \href{https://www-soc.lip6.fr/en/team-cian/}{www-soc.lip6.fr/en/team-cian}} \rfoot[]{\thepage} \cfoot[]{} diff --git a/documentation/etc/images/logoCC.pdf b/documentation/etc/images/logoCC.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dbbb9f315b0271ff60983e0b8be3d41424e9b185 GIT binary patch literal 5560 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 QqQZh802`aKwhG|?0450tbN~PV literal 0 HcmV?d00001 diff --git a/documentation/etc/images/logoLIP6_SU_CNRS.pdf b/documentation/etc/images/logoLIP6_SU_CNRS.pdf new file mode 100644 index 0000000000000000000000000000000000000000..283630f9d881d8d411caeac341cc4e389e010011 GIT binary patch literal 23396 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

^+FQo&Wz#v!~pXsh6Z&y zi~#aIn~b52Ai5dWpH0N?!>i4iYSdx-3B&mX$~VWXtV`l%pm{mD-9FjRqYSVEO@SwC zjiSttmepHqjU4h*Jh$KK#jV+v;ZdmGN4oR^j~agyiCFH#RQ|}&;wA|)xUI{IqZ$w; zh%OzBshKFsDmUVWyG*jhd~!H2_XnR2?jsQ0B|OI$LGE`h7vqgp&%c;HA8+M$yJ=+p ztF^fowW?3)O!o+FYJpjq09!KFlN+sS3%VuRIISa-Gks=M(Uh8Pz`rM#+4*2a;#-;D zDCWgAS3-6=tL?m?he0p_RB_wV6_J{$bHAv`kf(_ntH338r-w_zbNbPo1eSH01zuhS z-skBuB{?$Sv|?}|5#+PG#Ii!`+cEgZF-Yc(YO{7VQ*3mzEK%uZy~Fu!D<*Et{myDRs$vVQVg5aGmz<;8;YA_~i%s?i6xLrf7-g(QiKaz9c44#lUH1 zuzh(}3V6bp2&IuClYw2$aJ_zn%1k}xBv+C7G}J_4a2pQtl4F5N7SXg2dgkCE5ldv< zc^Lfac+;W<&499*b)sL8Rl9$ULlf@P?_~hAU8b!W;e)NPy1zoVV~fk@G6Y&=IIlq_ z{F?Icq4%@HvQ^7u*Eo*nW>LG;DK%Bk8)Andw~vEHDrGBf=^yV>iwkjj7odgT1@5{V{ZD##p|j`B&`8AHpL+=}F3*?JT1i8fe4*^dy(5!ce+pp$%y$tHt zIC{U-`R|f_U|fj)(D!DR3`v2u`H!c$MzcC<7FxZZrI6bPXUtsY=rLDp-CK6(cA<99 z_*dg38AtoGIy2un?au5;p+1g@nhg3R~K2Q&aMG<1Nv1=TAfy+ig?1Fza znz4xf=C8Y`BwjZWvzmRFb!~O0x9O|?0^fx}^i2Y4#y8lhP=3-WA-^YuhyUgTr`SXP zQeHoK8j0@Jfs%Y9^4NFyOiy<#@kBl53oAaG#MDkcWu9l~I0Wrw?H5W!?V+E~J-Wlw zPUGAMBTeDKBu-5s!~f>XwbuK;z|1ySBmuA$R0#q7o5vISGge&7!}*fCJ_Q;lJAlEPem{aN&o-@1y-=1pw;?XjcIb*SSo;|FEf2f2`gJTpG$I zYF*C{u>2ImPawqaki&JZRyTGY_3YU$vH1x$Y6r*@K;8ON5@74zZon7~@wm$#mjE{6 z1D9;<@i=KHP+N)s6TtyHcXyW~V1R2DkYe#RE_U{p+!S$mth_wik_Nz4yk6cX)`?3G zoHzo5Kvf}dm=Y8M1%3`eVEZ8u`JauhGYxDQ{qDAgjl0cN9G1O1b_hQRX8#G*6Mw~a z2SgeM+X4A|kw(DbN^ogg>F+Wa450+TJJ%O!=N~c%1PK9B@QVyMqJEP>pa5j_S3Nk8 zpI>CEzuQ1SA-`>lP=NtQ-M_b0fg*m_gQx)M__rPc3HvP$1QPPA9t@_e^t%m+>Tj{B zKoGy`!Jw+Dzxo1$LDuWxU%tR#P{i+cm43@9kb702Mt|8B2>2hFJKo0r>J>bjSlGng z`^x%Q0@VyQ#^C^V-1VCH&ZBYC*%l|wE=)FEubaCK-km-AFqjHLb%&gsrh(Ru{{cvH BWM%*W literal 0 HcmV?d00001 From 10f0f9b55d64c6d10bfc5a2bbe01ceda6ee5b6f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marie-Minerve=20Lou=C3=ABrat?= Date: Thu, 23 May 2019 17:30:42 +0200 Subject: [PATCH 3/5] Ajout Roselyne dans les contributeurs --- documentation/etc/definitions.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/etc/definitions.rst b/documentation/etc/definitions.rst index 7329285c..eaff57c8 100644 --- a/documentation/etc/definitions.rst +++ b/documentation/etc/definitions.rst @@ -54,6 +54,7 @@ .. |Alexandre| replace:: :sc:`Alexandre` .. |Belloeil| replace:: :sc:`Belloeil` .. |Chaput| replace:: :sc:`Chaput` +.. |Chotin| replace:: :sc:`Chotin` .. |Chu| replace:: :sc:`Chu` .. |Clement| replace:: :sc:`Clement` .. |Dupuis| replace:: :sc:`Dupuis` From 973dedc4a5e80e35aa3f332c3ab30a87f127576f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marie-Minerve=20Lou=C3=ABrat?= Date: Fri, 24 May 2019 13:24:11 +0200 Subject: [PATCH 4/5] Typos corrigees dans les fichiers du User Guide --- documentation/UsersGuide/Configuration.rst | 36 ++++++++++----------- documentation/UsersGuide/Installation.rst | 14 ++++---- documentation/UsersGuide/LicenseCredits.rst | 2 +- documentation/UsersGuide/Releases.rst | 2 +- documentation/UsersGuide/ScriptsPlugins.rst | 30 ++++++++--------- 5 files changed, 42 insertions(+), 42 deletions(-) diff --git a/documentation/UsersGuide/Configuration.rst b/documentation/UsersGuide/Configuration.rst index c40562d3..0f0533a1 100644 --- a/documentation/UsersGuide/Configuration.rst +++ b/documentation/UsersGuide/Configuration.rst @@ -22,7 +22,7 @@ Coriolis Configuration & Initialisation General Software Architecture ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -|Coriolis| has been build with respect of the classical paradigm that the +|Coriolis| has been built with respect of the classical paradigm that the computational instensive parts have been written in C++, and almost everything else in |Python|. To build the |Python| interface we used two methods: @@ -71,7 +71,7 @@ The initialization process is done by executing, in order, the following file(s) | **3** | The user's local setting | :cb:`/.coriolis2/techno.py` | +-------+----------------------------------+----------------------------------------------+ -Thoses files must provides only one variable, the name of the technology. Each technology +Those files must provide only one variable, the name of the technology. Each technology will provide configuration for both the symbolic part and the real part. |Coriolis| can work with purely symbolic technology (``symbolic/cmos``) in that case, the real technology part is a dummy one. @@ -89,9 +89,9 @@ Second Stage: Technology Configuration Loading |noindent| The :cb:`technology` variable is set by the first stage and it's the name of the technology. A directory of that name, with all the configuration files, -must exists in the configuration directory (:cb:`/etc/coriolis2`). +must exist in the configuration directory (:cb:`/etc/coriolis2`). In addition to the technology-specific directories, a :cb:`common/` directory is -there to provides a trunk for all the identical datas across the various technologies. +there to provide a trunk for all the identical data across the various technologies. The initialization process is done by executing, in order, the following file(s): +-------+----------------------------------+-----------------------------------------------+ @@ -190,9 +190,9 @@ variable, and if not found, default to ``/soc/alliance``. |noindent| The example above shows the system configuration file, with all the -available settings. Some important remarks about thoses settings: +available settings. Some important remarks about those settings: -* In it's configuration file, the user do not need to redefine all the settings, +* In its configuration file, the user does not need to redefine all the settings, just the one he wants to change. In most of the cases, the ``SYSTEM_LIBRARY``, the ``WORKING_LIBRARY`` and the special net names (at this point there is not much alternatives for the others settings). @@ -209,25 +209,25 @@ available settings. Some important remarks about thoses settings: it, whithout changing the search path order. If no library of that name already exists, it is appended. - A library is identified by it's name, this name is the last component of the + A library is identified by its name, this name is the last component of the path name. For instance: ``/soc/alliance/sxlib`` will be named ``sxlib``. Implementing the |Alliance| specification, when looking for a |Cell| ``name``, - the system will browse sequentially trought the library list and returns + the system will browse sequentially through the library list and returns the first |Cell| whose name match. * For ``POWER``, ``GROUND``, ``CLOCK`` and ``BLOCKAGE`` net names, a regular expression (|GNU| regexp) is expected. .. * The ``helpers.sysConfDir`` variable is supplied by the helpers, it is the -.. directory in which the system-wide configuration files are locateds. +.. directory in which the system-wide configuration files are located. .. For a standard installation it would be: ``/soc/coriolis2``. .. .. .. * Trick and naming convention about ``SYMBOLIC_TECHNOLOGY``, ``REAL_TECHNOLOGY`` -.. and ``DISPLAY``. In the previous releases, thoses files where to read by +.. and ``DISPLAY``. In the previous releases, those files were to be read by .. XML parsers, and still do if you triggers the XML compatibility mode. .. But now, they have Python conterparts. In the configuration files, you .. still have to name them as XML files, the Python file name will be -.. deduced from this one with thoses two translation rules: +.. deduced from this one with those two translation rules: .. .. #. In the filename, all dots, except for the last (the file extention), .. are replaced by underscores. @@ -256,11 +256,11 @@ A typical user's configuration file would be: :: Tools Configuration Helpers --------------------------- -All the tools uses the same helper to load their configuration (a.k.a. +All the tools use the same helper to load their configuration (a.k.a. *Configuration Helper*). Currently the following configuration system-wide configuration files are defined: -* :cb:`misc.conf`: commons settings or not belonging specifically to a tool. +* :cb:`misc.conf`: common settings or not belonging specifically to a tool. * :cb:`etesian.conf`: for the |Etesian| tool. * :cb:`kite.conf`: for the |Kite| tool. * :cb:`stratus1.conf`: for the |stratus1| tool. @@ -306,18 +306,18 @@ Here is the contents of :cb:`etesian.conf`: :: Taxonomy of the file: -* It must contains, at least, the two tables: +* It must contain, at least, the two tables: - * ``parametersTable``, defines & initialise the configuration variables. + * ``parametersTable``, defines & initialises the configuration variables. * ``layoutTables``, defines how the various parameters will be displayed in the configuration window (:ref:`The Settings Tab`). * The ``parametersTable``, is a tuple (list) of tuples. Each entry in the list - describe a configuration parameter. In it's simplest form, it's a quadruplet + describes a configuration parameter. In its simplest form, it's a quadruplet :cb:`(TypeOption, 'paramId', ParameterType, DefaultValue)` with: - #. ``TypeOption``, tells that this tuple describe a parameter. + #. ``TypeOption``, tells that this tuple describes a parameter. #. ``paramId``, the identifier of the parameter. Identifiers are defined by the tools. The list of parameters is detailed in each tool section. @@ -337,7 +337,7 @@ Taxonomy of the file: Hacking the Configuration Files ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Asides from the symbols that gets used by the configuration helpers like +Aside from the symbols that get used by the configuration helpers like :cb:`allianceConfig` or :cb:`parametersTable`, you can put pretty much anything in :cb:`/.coriolis2/settings.py` (that is, written in |Python|). diff --git a/documentation/UsersGuide/Installation.rst b/documentation/UsersGuide/Installation.rst index cb264d3c..637cbf85 100644 --- a/documentation/UsersGuide/Installation.rst +++ b/documentation/UsersGuide/Installation.rst @@ -12,7 +12,7 @@ Installation As the sources are being released, the binary packaging is dropped. You still may find older version here: http://asim.lip6.fr/pub/coriolis/2.0 . -In a nutshell, building source consist in pulling the |git| repository then +In a nutshell, building source consistis in pulling the |git| repository then running the |ccb| installer. Main building prerequisites: @@ -47,7 +47,7 @@ For other distributions, refer to their own packaging system. Fixed Directory Tree ~~~~~~~~~~~~~~~~~~~~ -In order to simplificate the work of the |ccb| installer, the source, build +In order to simplify the work of the |ccb| installer, the source, build and installation tree is fixed. To successfully compile |Coriolis| you must follow it exactly. The tree is relative to the home directory of the user building it (noted :fboxtt:`~/` or :fboxtt:`$HOME/`). Only the source @@ -124,8 +124,8 @@ Third and final step, build & install: :: --project=coriolis \ --doc --make="-j1 install" -We need to separate to perform a separate installation of the documentation because it -do not support to be generated with a parallel build. So we compile & install in a first +We need to perform a separate installation of the documentation because it +does not support to be generated with a parallel build. So we compile & install in a first stage in ``-j4`` (or whatever) then we generate the documentation in ``-j1`` Under |RHEL6| or clones, you must build using the |devtoolset|, the version is to @@ -156,7 +156,7 @@ In the |Coriolis| |git| repository, two branches are present: dummy@lepka:src> ./bootstrap/ccb.py --project=coriolis \ --make="-j4 install" --debug - Be aware that it may requires newer versions of the dependencies and may introduce + Be aware that it may require newer versions of the dependencies and may introduce incompatibilites with the stable version. In the (unlikely) event of a crash of |cgt|, as it is a |Python| script, the right @@ -187,11 +187,11 @@ Then proceed with the generic install instructions. Packaging Coriolis ~~~~~~~~~~~~~~~~~~ -Packager should not uses |ccb|, instead ``bootstrap/Makefile.package`` is provided +Packager should not use |ccb|, instead ``bootstrap/Makefile.package`` is provided to emulate a top-level ``autotool`` makefile. Just copy it in the root of the |Coriolis| git repository (``~/corriolis-2.x/src/coriolis/``) and build. -Sligthly outaded packaging configuration files can also be found under ``bootstrap/``: +Sligthly outdated packaging configuration files can also be found under ``bootstrap/``: * ``bootstrap/coriolis2.spec.in`` for |rpm| based distributions. * ``bootstrap/debian`` for |Debian| based distributions. diff --git a/documentation/UsersGuide/LicenseCredits.rst b/documentation/UsersGuide/LicenseCredits.rst index a815e214..c07c0b0b 100644 --- a/documentation/UsersGuide/LicenseCredits.rst +++ b/documentation/UsersGuide/LicenseCredits.rst @@ -48,7 +48,7 @@ copyright© |UPMC| 2008-2018 and released under the |GPL| license. Others important contributors to |Coriolis| are Christophe |Alexandre|, -Hugo |Clement|, Marek |Sroka| and Wu |Yifei|. +Roselyne |Chotin|, Hugo |Clement|, Marek |Sroka| and Wu |Yifei|. The |Knik| router makes use of the |Flute| software, which is copyright© Chris C. N. |Chu| from the Iowa State University diff --git a/documentation/UsersGuide/Releases.rst b/documentation/UsersGuide/Releases.rst index c86243a1..b66f89b3 100644 --- a/documentation/UsersGuide/Releases.rst +++ b/documentation/UsersGuide/Releases.rst @@ -84,7 +84,7 @@ Release v2.1 |Etesian| and its legalization and detailed placement tools. #. Added a Blif format parser to process circuits generated by the Yosys and ABC logic synthetizers. -#. The multiples user defined configuration files are now grouped under +#. The multiple user defined configuration files are now grouped under a common hidden (dot) directory ``.coriolis2`` and the file extension is back from ``.conf`` to ``.py``. diff --git a/documentation/UsersGuide/ScriptsPlugins.rst b/documentation/UsersGuide/ScriptsPlugins.rst index 8fe35c9e..2434eff2 100644 --- a/documentation/UsersGuide/ScriptsPlugins.rst +++ b/documentation/UsersGuide/ScriptsPlugins.rst @@ -27,7 +27,7 @@ either languages. A script could be run directly in text mode from the command line or through the graphical interface (see :ref:`Python Scripts in Cgt`). -Asides for this requirement, the python script can contain anything valid +Aside for this requirement, the python script can contain anything valid in |Python|, so don't hesitate to use any package or extention. Small example of Python/Stratus script: :: @@ -104,7 +104,7 @@ The top-level hierarchy must contains the instances of all the I/O pads and |bcenter| |ChipStructure-1| |ecenter| -The designer must provide a configuration file that define the rules for the +The designer must provide a configuration file that defines the rules for the placement of the top-level hierarchy (that is, the pads and the core). This file must be named after the chip's name, by appending ``_chip.py`` (obviously, it is a |Python| file). For instance if the chip netlist file @@ -230,11 +230,11 @@ Configuration parameters, defaults are defined in ``etc/coriolis2//plug Clock Tree ---------- -Insert a clock tree into a block. The clock tree uses the H strategy. +Inserts a clock tree into a block. The clock tree uses the H strategy. The clock net is splitted into sub-nets, one for each branch of the tree. -* On **chips** design, the sub-nets are createds in the model of the +* On **chip** design, the sub-nets are created in the model of the core block (then trans-hierarchically flattened to be shown at chip level). * On **blocks**, the sub nets are created directly in the top block. @@ -251,21 +251,21 @@ tree. The clock tree plugin works in four steps: -#. Build the clock tree: creates the top-block abutment box, compute the - levels of H tree neededs and place the clock buffers. +#. Builds the clock tree: creates the top-block abutment box, compute the + required levels of H tree and places the clock buffers. #. Once the clock buffers are placed, calls the placer (|etesian|) to place - the ordinary standart cells, whithout disturbing clock H-tree buffers. + the ordinary standard cells, whithout disturbing clock H-tree buffers. #. At this point we know the exact positions of all the DFFs, so we can connect them to the nearest H-tree leaf clock signal. -#. Leaf clock signals that are not connecteds to any DFFs are removed. +#. Leaf clock signals that are not connected to any DFFs are removed. Netlist reorganisation: -* Obviously the top block or chip core model netlist is modificated to - contains all the clock sub-nets. The interface is *not* changed. +* Obviously the top block or chip core model netlist is modified to + contain all the clock sub-nets. The interface is *not* changed. * If the top block contains instances of other models *and* those models - contains DFFs that get re-connecteds to the clock sub-nets (from the - top level). Change both the model netlist and interface to propagate + contain DFFs that get re-connected to the clock sub-nets (from the + top level). Changes both the model netlist and interface to propagate the relevant clock sub-nets to the instanciated model. The new model with the added clock signal is renamed with a ``_clocked`` suffix. For example, the sub-block model ``ram.vst`` will become ``ram_clocked.vst``. @@ -273,7 +273,7 @@ Netlist reorganisation: .. note:: If you are to re-run the clock tree plugin on a netlist, be careful to erase any previously generated ``_clocked`` file (both netlist and - layout: ``rm *.clocked.{ap,vst}``). And restart |cgt| to clear it's + layout: ``rm *.clocked.{ap,vst}``). And restart |cgt| to clear its memory cache. Configuration parameters, defaults are defined in ``etc/coriolis2//plugins.conf``. @@ -303,8 +303,8 @@ Configuration parameters, defaults are defined in ``etc/coriolis2//plug Recursive-Save (RSave) ---------------------- -Perform a recursive top down save of all the models from the top cell -loaded in |cgt|. Force a write of any non-terminal model. This plugin is used +Performs a recursive top down save of all the models from the top cell +loaded in |cgt|. Forces a write of any non-terminal model. This plugin is used by the clock tree plugin after the netlist clock sub-nets creation. From d641607ac3c9e546b17d469a5f61a1e97e7552a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marie-Minerve=20Lou=C3=ABrat?= Date: Fri, 24 May 2019 13:55:23 +0200 Subject: [PATCH 5/5] Typos corrigees dans Python Tutorial for Hurricane database --- .../PythonTutorial/AdvancedTopics.rst | 2 +- .../PythonTutorial/CellNetComponent.rst | 22 +++++++-------- documentation/PythonTutorial/CgtScript.rst | 6 ++-- documentation/PythonTutorial/Collections.rst | 12 ++++---- documentation/PythonTutorial/Environment.rst | 14 +++++----- documentation/PythonTutorial/Introduction.rst | 8 +++--- documentation/PythonTutorial/Netlist.rst | 28 +++++++++---------- documentation/PythonTutorial/RealDesigns.rst | 10 +++---- documentation/PythonTutorial/ToolEngines.rst | 6 ++-- 9 files changed, 54 insertions(+), 54 deletions(-) diff --git a/documentation/PythonTutorial/AdvancedTopics.rst b/documentation/PythonTutorial/AdvancedTopics.rst index 61ec706d..8a1e69ed 100644 --- a/documentation/PythonTutorial/AdvancedTopics.rst +++ b/documentation/PythonTutorial/AdvancedTopics.rst @@ -19,7 +19,7 @@ The trans-hierarchical workhorse. 9.2 RoutingPads ~~~~~~~~~~~~~~~ -Unlike the Plugs_ that only make connexions between two **adjacent** +Unlike the Plugs_ that only make connections between two **adjacent** hierarchical levels, RoutingPads_ can refer to a deeply buried terminal. diff --git a/documentation/PythonTutorial/CellNetComponent.rst b/documentation/PythonTutorial/CellNetComponent.rst index 087ed3fe..f0d38e72 100644 --- a/documentation/PythonTutorial/CellNetComponent.rst +++ b/documentation/PythonTutorial/CellNetComponent.rst @@ -7,19 +7,19 @@ 3. Making a Standard Cell -- Layout =================================== -In this part, we well show how to create and save a terminal Cell_, +In this part, we will show how to create and save a terminal Cell_, that is, a cell without instances (the end point of a hierarchical design). To illustrate the case we will draw the layout of a standard cell. We will introduce the following classes : Cell_, Net_, Component_ -and it's derived classes. +and its derived classes. 3.1 The AllianceFramework (CRL Core) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The |Hurricane| database only manage objects in memory. To load or save +The |Hurricane| database only manages objects in memory. To load or save something from the outside, we need to use a *framework*. As of today, only one is available : the Alliance framework. It allows |Coriolis| to handle |Alliance| libraries and cells in the exact same way. @@ -34,7 +34,7 @@ one is available : the Alliance framework. It allows |Coriolis| to handle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In the |Hurricane| database, all modifications must take place inside -an UpdateSession_. At the closing of a session, created or modificateds +an UpdateSession_. At the closing of a session, created or modificated objects are fully inserted in the database. This is especially true for the visualisation, a created component will be visible *only* only after the session close. @@ -64,7 +64,7 @@ environment is provided by the |CRL| module. UpdateSession.close() -This is the simplest call to ``createCell()``, and it that case, the newly +This is the simplest call to ``createCell()``, and in that case, the newly created Cell_ will be saved in the *working library* (usually, the current directory). You may supply a second argument telling into which library you want the Cell_ to be created. @@ -83,7 +83,7 @@ hundredth of foundry grid (to allow transient non-integer computation). To work with symbolic layout, that is, using lambda based lengths, -two conversion functions are provideds: +two conversion functions are provided: * ``unit = DbU.fromLambda( lbd )`` convert a lambda :cb:`lbd` into a ``DbU``. * ``lbd = DbU.toLambda( unit )`` convert a ``DbU`` into a lambda :cb:`lbd`. @@ -95,7 +95,7 @@ is *integer*. 3.5 Setting up the Abutment Box ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -To setup the abutment box, we use a Box_ which define a box from +To setup the abutment box, we use a Box_ which defines a box from the coordinates of the lower left corner ``(x1,y1)`` and upper left corner ``(x2,y2)``. @@ -157,7 +157,7 @@ Layer_: -------------------- As said above, prior to creating any Component_, we must create the Net_ it -will belongs to. In that example we also make it an *external* net, that is, +will belong to. In that example we also make it an *external* net, that is, a part of the interface. Do not mistake the name of the net given as a string argument :cb:`'i'` and the name of the *variable* :cb:`i` holding the Net_ object. For the sake of clarity we try to give the variable a close name, but this is @@ -194,7 +194,7 @@ absolute position. There is a second overload for creating a relatively placed segment, see *articulated layout*. If the net is external, that is, part of the interface of the cell, you may have -to declare some of it's components as physical connectors usable by the router. +to declare some of its components as physical connectors usable by the router. This is done by calling the NetExternalComponents_ class: .. code-block:: Python @@ -205,7 +205,7 @@ This is done by calling the NetExternalComponents_ class: 3.7 Saving to Disk (CRL Core) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Once you are finished building your cell, you have to save it on disk. +Once you have finished to build your cell, you have to save it on disk. Using the AllianceFramework_ you can save it as a pair of file: ========================= =================================== ======================= @@ -229,7 +229,7 @@ will be written in the |Alliance| ``WORK_DIR``. The example files can be found in the ``share/doc/coriolis2/examples/scripts/`` directory (under the the root of the |Coriolis| installation). -The code needed to run it through the |cgt| viewer as been added. For the +The code needed to run it through the |cgt| viewer has been added. For the explanation of that part of the code, refer to `5. Make a script runnable through cgt`_. diff --git a/documentation/PythonTutorial/CgtScript.rst b/documentation/PythonTutorial/CgtScript.rst index 27027ee2..2d81325b 100644 --- a/documentation/PythonTutorial/CgtScript.rst +++ b/documentation/PythonTutorial/CgtScript.rst @@ -7,13 +7,13 @@ 5. Make a script runnable through |cgt| ======================================= -To use your you may run it directly like any other |Python| script. +To use your script you may run it directly like any other |Python| script. But, for debugging purpose it may be helpful to run it through the interactive layout viewer |cgt|. For |cgt| to be able to run your script, you must add to your script file a function named :cb:`ScriptMain()`, which takes a dictionnary -as sole argument (:cb:`**kw`). The ``kw`` dictionnary contains, in +as sole argument (:cb:`**kw`). The ``kw`` dictionary contains, in particular, the CellViewer_ object we are running under with the keyword ``editor``. You can then load your cell into the viewer using the menu: @@ -67,7 +67,7 @@ using the menu: ~~~~~~~~~~~~~~~~~~~~~ It is possible to add breakpoints inside a script by calling the ``Breakpoint.stop()`` -function. To be able to see exactly what has just been moficated, we must close the +function. To be able to see exactly what has just been mofied, we must close the UpdateSession_ just before calling the breakpoint and reopen it just after. The ``Breakpoint.stop()`` function takes two arguments: diff --git a/documentation/PythonTutorial/Collections.rst b/documentation/PythonTutorial/Collections.rst index e9ad4f0a..3505dc24 100644 --- a/documentation/PythonTutorial/Collections.rst +++ b/documentation/PythonTutorial/Collections.rst @@ -9,7 +9,7 @@ 4. Manipulating Cells, Nets and Components ========================================== -In this part, we well show how to navigate through the Nets_ and Components_ of a Cell_. +In this part, we will show how to navigate through the Nets_ and Components_ of a Cell_. 4.1 Hurricane Collections @@ -48,8 +48,8 @@ In C++ we would have written: **Never delete or create an element while you are iterating over a Collection.** Results can be unpredictable, you may just end up with a core dump, but more -subtly, some element of the Collection_ may be skippeds or processed twice. -If you want to create or delete en element, do it outside of the collection +subtly, some element of the Collection_ may be skipped or processed twice. +If you want to create or delete an element, do it outside the collection loop. For example: .. code-block:: Python @@ -78,12 +78,12 @@ the ``getCell()`` call wil be: disk since it was first loaded. Conversely, if the Cell_ has been modified in memory, you will get those modifications. -#. Search, in the ordered list of libraries, the first Cell_ that match the +#. Search, in the ordered list of libraries, the first Cell_ that matches the requested name. - .. note:: It means that if cells with the same name exists in different + .. note:: It means that if cells with the same name exist in different libraries, only the one in the first library will be ever used. - Be also weary of cell files that may remains in the ``WORK_LIB``, + Be also weary of cell files that may remain in the ``WORK_LIB``, they may unexpectedly shadow cells from the libraries. diff --git a/documentation/PythonTutorial/Environment.rst b/documentation/PythonTutorial/Environment.rst index e8ce2573..703b3486 100644 --- a/documentation/PythonTutorial/Environment.rst +++ b/documentation/PythonTutorial/Environment.rst @@ -8,7 +8,7 @@ 2. Setting up the Environment ============================= -2.1 Setting up the Pathes +2.1 Setting up the Paths ~~~~~~~~~~~~~~~~~~~~~~~~~ To simplify the tedious task of configuring your environment, a helper is provided. @@ -25,9 +25,9 @@ Use it like this (don't forget the ``eval`` **and** the backquotes): dummy@lepka:~> eval `/etc/coriolis2/coriolisEnv.py` -.. note:: **Do not call that script in your environement initialisation.** +.. note:: **Do not call that script in your environment initialisation.** When used under |RHEL6| or clones, it needs to be run in the |devtoolset| - environement. The script then launch a new shell, which may cause an + environment. The script then launches a new shell, which may cause an infinite loop if it's called again in, say :cb:`~/.bashrc`. Instead you may want to create an alias: :: @@ -39,12 +39,12 @@ Use it like this (don't forget the ``eval`` **and** the backquotes): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You may create, in the directory you are lanching |Coriolis| tools, a special -sub-directory ``.coriolis2/`` that can contains two configuration files: +sub-directory ``.coriolis2/`` that can contain two configuration files: * ``techno.py`` tells which technology to use. -* ``settings.py`` can overrides almost any default configuration setting. +* ``settings.py`` can override almost any default configuration setting. -Those two files are *optional*, if they do not exists the default settings +Those two files are *optional*, if they do not exist the default settings will be used and the technology is ``symbolic/cmos`` (i.e. purely symbolic). .. note:: Those two files will by processed by the |Python| interpreter, @@ -54,7 +54,7 @@ will be used and the technology is ``symbolic/cmos`` (i.e. purely symbolic). 2.2.1 The :cb:`techno.py` File ------------------------------ -Must provide one variable named :cb:`technology` which value the path towards +Must provide one variable named :cb:`technology` which values the path towards the technology file. The available technologies are installed under ``/etc/coriolis2``. For example, to use the 45nm FreeDPK which is in: :: diff --git a/documentation/PythonTutorial/Introduction.rst b/documentation/PythonTutorial/Introduction.rst index fa4c1de0..bbcd0144 100644 --- a/documentation/PythonTutorial/Introduction.rst +++ b/documentation/PythonTutorial/Introduction.rst @@ -10,11 +10,11 @@ This tutorial is aimed at two goals : * Presenting how to use Python scripts to control |Coriolis|. -* Make a basic introduction about the |Hurricane| database and it's +* Make a basic introduction about the |Hurricane| database and its concepts. While this tutorial is aimed at presenting the |Hurricane| database, -do not feel limited to it. You can use |Hurricane| objects as attributes +do not feel limited by it. You can use |Hurricane| objects as attributes of |Python| objects or use |Python| containers to store them. The only limitation is that you may not use |Hurricane| classes as base classes in |Python|. @@ -36,7 +36,7 @@ don't. Thus we summarize below the more important ones: =============== ===================================================== **Class** **Meaning** =============== ===================================================== -Cell_ The model. A Cell do not have terminals, only nets +Cell_ The model. A Cell does not have terminals, only nets flagged as *external* Instance_ An instance of a model Net_ A grouping of electrically connecteds components @@ -58,7 +58,7 @@ Mostly: * C++ namespaces are exported as |Python| modules. * The *scope resolution operator* :fboxtt:`::` converts into :fboxtt:`.`. * C++ blocks (between braces :fboxtt:`{}`) are replaced by indentations. -* In C++, names are manageds through a dedicated ``Name`` class. +* In C++, names are managed through a dedicated ``Name`` class. It has not been exported to the |Python| interface, you only have to use ``string``. * Coordinates are expressed in ``DbU`` which are ``long`` with a special diff --git a/documentation/PythonTutorial/Netlist.rst b/documentation/PythonTutorial/Netlist.rst index 0d9c99dc..3460905c 100644 --- a/documentation/PythonTutorial/Netlist.rst +++ b/documentation/PythonTutorial/Netlist.rst @@ -40,10 +40,10 @@ parameters: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ An Instance_ as one Plug_ for each external net of the *master cell*. -The plug allows to create a **logical** connexion bewteen a Net_ of +The plug allows to create a **logical** connection bewteen a Net_ of ``fulladder`` and a net from an Instance_ *master cell*. -A plug is somewhat equivalent to an *instance terminal* in others +A plug is somewhat equivalent to an *instance terminal* in other well known databases. Therefore, a plug is related to two nets: @@ -54,13 +54,13 @@ Therefore, a plug is related to two nets: #. The net of ``fulladder`` the plug is connected to. This can be set, it is how we build the netlist. To set the net, use - the function ``plug.setNet( net )``. It the argument is ``None``, + the function ``plug.setNet( net )``. If the argument is ``None``, the plug is *disconnected*. To find the plug of an instance associated to a given net in the *master cell*, use ``instance.getPlug( masterNet )``. The ``masterNet`` argument being an object of class net (not -it's name). +its name). Building the :cb:`a` net of ``fulladder``: @@ -81,7 +81,7 @@ Building the :cb:`a` net of ``fulladder``: terminals). There is a strict bijection between external nets and plugs. - While it may be restrictive, it enforce cleaner designs + While it may be restrictive, it enforces cleaner designs and make it possible for the HyperNet_ concept/class. @@ -112,7 +112,7 @@ until it is placed. -------------------- To place an Instance, we apply a Transformation_ to the coordinate system -of the *master cell*. A transformation is composed of two operations : +of the *master cell*. A transformation is composed of two operations: #. An Orientation_, which can be a symmetry or a rotation (or a combination of those two). The Orientation **is applied first** to the coordinate @@ -124,7 +124,7 @@ of the *master cell*. A transformation is composed of two operations : The transformation is a change of coordinate system, be aware that if the abutment box lower left corner of the *master* cell is **not** at ``(0,0)`` -the result of the Transformation may not be what you expect. To simplificate +the result of the Transformation may not be what you expect. To simplify the computation of the transformation of an instance, always place the lower left corner of the abutment box at ``(0,0)`` @@ -138,7 +138,7 @@ that the abutment box lower left corner is at ``(0,0)`` (same for the instance to left of the second row. Setting the translation on an Instance_ is not enough to make it be displayed, -we also must set it's *placement status* to ``Instance.PlacementStatus.PLACED``. +we also must set its *placement status* to ``Instance.PlacementStatus.PLACED``. .. code-block:: Python @@ -151,15 +151,15 @@ we also must set it's *placement status* to ``Instance.PlacementStatus.PLACED``. 6.4.3 Nets -- From Plugs to RoutingPads --------------------------------------- -As was stated before, Plugs_ represent a logical connexion between two -levels of hierarchy. To make the physical connexion to the *master net* +As was stated before, Plugs_ represent a logical connection between two +levels of hierarchy. To make the physical connection to the *master net* in the instance, we now must create, in the ``fulladder``, a special component which is a kind of *reference* to a component of the *master net* (in the master cell). The so called *special component* is a RoutingPad_. -The ``RoutingPad`` can be considered as an equivalent to ``pin`` in others +The ``RoutingPad`` can be considered as an equivalent to ``pin`` in other well known databases. .. code-block:: Python @@ -169,9 +169,9 @@ well known databases. , RoutingPad.BiggestArea ) For the second parameter, we must pass an Occurrence_. Occurrence objects will -be explained in detail later, for now, suffice to say that we must construct the +be explained in detail later, for now, let say that we must construct the Occurrence object with one parameter : the Plug_ for which we want to create a -physical connexion. +physical connection. The RoutingPad_ ``rp`` will be a component of the ``a`` net. @@ -179,7 +179,7 @@ The third argument ask the constructor of the RoutingPad_ to select in the master net, the component which has the biggest area. .. note:: **Component selection.** Not all the components of a net can be - selected for connexion through a RoutingPad_. The candidates must + selected for connection through a RoutingPad_. The candidates must have been flagged with the NetExternalComponents_ class. See `3.6.3 Creating a Component`_. diff --git a/documentation/PythonTutorial/RealDesigns.rst b/documentation/PythonTutorial/RealDesigns.rst index 1bbe68a8..b9315184 100644 --- a/documentation/PythonTutorial/RealDesigns.rst +++ b/documentation/PythonTutorial/RealDesigns.rst @@ -6,9 +6,9 @@ 7. Working in real mode ======================= -The AllianceFramework_ only manage *symbolic* layout as |Alliance| do. +The AllianceFramework_ only manages *symbolic* layout as |Alliance| does. But |Coriolis| is also able to work directly in *real* mode, meaning -that distances will be expresseds in microns instead of lambdas. +that distances will be expressed in microns instead of lambdas. The *real* mode will be illustrated by working with the FreePDK45_. @@ -32,7 +32,7 @@ another. library = LefImport.load( DKsdir + '/FreePDK45/osu_soc/lib/files/gscl45nm.lef' ) -.. note:: **Technology checking.** The first imported |LEF| file must contains the +.. note:: **Technology checking.** The first imported |LEF| file must contain the technology. The technology described in the |LEF| file will be checked against the one configured in the running instance of |Coriolis| to look for any discrepencies. @@ -42,8 +42,8 @@ another. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The |Blif| format is generated by the Yosys_ logic synthetizer. Here again, it is -pretty straightforward: call the static function ``Blif.load()``. If you did make -your synthesis on a cell library not managed by AllianceFramework_, For example +pretty straightforward: call the static function ``Blif.load()``. If you made +your synthesis on a cell library not managed by AllianceFramework_, for example the one of the FreePDK45, you must load it prior to calling the |Blif| loader. .. code-block:: Python diff --git a/documentation/PythonTutorial/ToolEngines.rst b/documentation/PythonTutorial/ToolEngines.rst index 9b3f68b8..fe3a75d4 100644 --- a/documentation/PythonTutorial/ToolEngines.rst +++ b/documentation/PythonTutorial/ToolEngines.rst @@ -6,7 +6,7 @@ 8. Tool Engines (CRL Core) ========================== -The ToolEngine_ class is the base class for all tools developpeds in +The ToolEngine_ class is the base class for all tools developped in |Coriolis|. In the rest of the tutorial we will use the names ``tool`` or ``engine`` as synonyms. @@ -55,7 +55,7 @@ You can configure the placer in two ways: Like for |Etesian|, you have to create the engine on the cell then call the sequence of functions detailed below. -.. note:: **Kite vs. Katana.** There are currently two router in |Coriolis|, +.. note:: **Kite vs. Katana.** There are currently two routers in |Coriolis|, |Kite| is the old one and digital only. |Katana| is a re-implementation with support for mixed routing (digital **and** analog). Until |Katana| is fully implemented we keep both of them. @@ -81,7 +81,7 @@ the sequence of functions detailed below. The example file ``toolengines.py`` can be found in the ``share/doc/coriolis2/examples/scripts/`` directory (under the the root of the |Coriolis| installation). -This script automatically place and route the ``fulladder`` netlist as seen +This script automatically places and routes the ``fulladder`` netlist as seen previously. The call to the ToolEngines_ is made inside the new function ``placeAndRoute()``.