diff --git a/documentation/content/pages/python-tutorial/definitions.rst b/documentation/content/pages/python-tutorial/definitions.rst index 2e503641..7bd40f2a 100644 --- a/documentation/content/pages/python-tutorial/definitions.rst +++ b/documentation/content/pages/python-tutorial/definitions.rst @@ -2,48 +2,48 @@ .. Hurricane doxygen doc links. -.. _Breakpoint: ../../hurricane/classHurricane_1_1Breakpoint.html -.. _UpdateSession: ../../hurricane/classHurricane_1_1UpdateSession.html -.. _Layer: ../../hurricane/classHurricane_1_1Layer.html -.. _Layers: ../../hurricane/classHurricane_1_1Layer.html -.. _Technology: ../../hurricane/classHurricane_1_1Technology.html -.. _DataBase: ../../hurricane/classHurricane_1_1DataBase.html -.. _DbU: ../../hurricane/classHurricane_1_1DbU.html -.. _Point: ../../hurricane/classHurricane_1_1Point.html -.. _Points: ../../hurricane/classHurricane_1_1Point.html -.. _Box: ../../hurricane/classHurricane_1_1Box.html -.. _DBo: ../../hurricane/classHurricane_1_1DBo.html -.. _Cell: ../../hurricane/classHurricane_1_1Cell.html -.. _Net: ../../hurricane/classHurricane_1_1Net.html -.. _Nets: ../../hurricane/classHurricane_1_1Net.html -.. _NetExternalComponents: ../../hurricane/classHurricane_1_1NetExternalComponents.html -.. _HyperNet: ../../hurricane/classHurricane_1_1HyperNet.html -.. _Component: ../../hurricane/classHurricane_1_1Component.html -.. _Components: ../../hurricane/classHurricane_1_1Component.html -.. _Contact: ../../hurricane/classHurricane_1_1Contact.html -.. _Contacts: ../../hurricane/classHurricane_1_1Contact.html -.. _Pad: ../../hurricane/classHurricane_1_1Pad.html -.. _RoutingPad: ../../hurricane/classHurricane_1_1RoutingPad.html -.. _RoutingPads: ../../hurricane/classHurricane_1_1RoutingPad.html -.. _Horizontal: ../../hurricane/classHurricane_1_1Horizontal.html -.. _Vertical: ../../hurricane/classHurricane_1_1Vertical.html -.. _Plug: ../../hurricane/classHurricane_1_1Plug.html -.. _Plugs: ../../hurricane/classHurricane_1_1Plug.html -.. _Collection: ../../hurricane/classHurricane_1_1Collection.html -.. _Instance: ../../hurricane/classHurricane_1_1Instance.html -.. _Instances: ../../hurricane/classHurricane_1_1Instance.html -.. _Transformation: ../../hurricane/classHurricane_1_1Transformation.html -.. _Orientation: ../../hurricane/classHurricane_1_1Orientation.html -.. _Occurrence: ../../hurricane/classHurricane_1_1Occurrence.html -.. _PythonAttributes: ../../hurricane/classIsobar_1_1PythonAttributes.html +.. _Breakpoint: ../doc/hurricane/classHurricane_1_1Breakpoint.html +.. _UpdateSession: ../doc/hurricane/classHurricane_1_1UpdateSession.html +.. _Layer: ../doc/hurricane/classHurricane_1_1Layer.html +.. _Layers: ../doc/hurricane/classHurricane_1_1Layer.html +.. _Technology: ../doc/hurricane/classHurricane_1_1Technology.html +.. _DataBase: ../doc/hurricane/classHurricane_1_1DataBase.html +.. _DbU: ../doc/hurricane/classHurricane_1_1DbU.html +.. _Point: ../doc/hurricane/classHurricane_1_1Point.html +.. _Points: ../doc/hurricane/classHurricane_1_1Point.html +.. _Box: ../doc/hurricane/classHurricane_1_1Box.html +.. _DBo: ../doc/hurricane/classHurricane_1_1DBo.html +.. _Cell: ../doc/hurricane/classHurricane_1_1Cell.html +.. _Net: ../doc/hurricane/classHurricane_1_1Net.html +.. _Nets: ../doc/hurricane/classHurricane_1_1Net.html +.. _NetExternalComponents: ../doc/hurricane/classHurricane_1_1NetExternalComponents.html +.. _HyperNet: ../doc/hurricane/classHurricane_1_1HyperNet.html +.. _Component: ../doc/hurricane/classHurricane_1_1Component.html +.. _Components: ../doc/hurricane/classHurricane_1_1Component.html +.. _Contact: ../doc/hurricane/classHurricane_1_1Contact.html +.. _Contacts: ../doc/hurricane/classHurricane_1_1Contact.html +.. _Pad: ../doc/hurricane/classHurricane_1_1Pad.html +.. _RoutingPad: ../doc/hurricane/classHurricane_1_1RoutingPad.html +.. _RoutingPads: ../doc/hurricane/classHurricane_1_1RoutingPad.html +.. _Horizontal: ../doc/hurricane/classHurricane_1_1Horizontal.html +.. _Vertical: ../doc/hurricane/classHurricane_1_1Vertical.html +.. _Plug: ../doc/hurricane/classHurricane_1_1Plug.html +.. _Plugs: ../doc/hurricane/classHurricane_1_1Plug.html +.. _Collection: ../doc/hurricane/classHurricane_1_1Collection.html +.. _Instance: ../doc/hurricane/classHurricane_1_1Instance.html +.. _Instances: ../doc/hurricane/classHurricane_1_1Instance.html +.. _Transformation: ../doc/hurricane/classHurricane_1_1Transformation.html +.. _Orientation: ../doc/hurricane/classHurricane_1_1Orientation.html +.. _Occurrence: ../doc/hurricane/classHurricane_1_1Occurrence.html +.. _PythonAttributes: ../doc/hurricane/classIsobar_1_1PythonAttributes.html .. Hurricane Viewer doxygen doc links. -.. _CellViewer: ../../viewer/classHurricane_1_1CellViewer.html +.. _CellViewer: ../doc/viewer/classHurricane_1_1CellViewer.html .. CRL Core doxygen doc links. -.. _AllianceFramework: ../../crlcore/classCRL_1_1AllianceFramework.html -.. _ToolEngine: ../../crlcore/classCRL_1_1ToolEngine.html -.. _ToolEngines: ../../crlcore/classCRL_1_1ToolEngine.html +.. _AllianceFramework: ../doc/crlcore/classCRL_1_1AllianceFramework.html +.. _ToolEngine: ../doc/crlcore/classCRL_1_1ToolEngine.html +.. _ToolEngines: ../doc/crlcore/classCRL_1_1ToolEngine.html .. Hurricane Python Tutorial internal links. .. _5. Make a script runnable through cgt: ./CgtScript.html diff --git a/documentation/content/pdfs/CheckToolkit.pdf b/documentation/content/pdfs/CheckToolkit.pdf index a14a52a8..fe26fdbe 100644 Binary files a/documentation/content/pdfs/CheckToolkit.pdf and b/documentation/content/pdfs/CheckToolkit.pdf differ diff --git a/documentation/content/pdfs/DesignFlow.pdf b/documentation/content/pdfs/DesignFlow.pdf index 26ec3373..69020d9a 100644 Binary files a/documentation/content/pdfs/DesignFlow.pdf and b/documentation/content/pdfs/DesignFlow.pdf differ diff --git a/documentation/content/pdfs/PythonCpp.pdf b/documentation/content/pdfs/PythonCpp.pdf index 6cac6ad0..c38cccf4 100644 Binary files a/documentation/content/pdfs/PythonCpp.pdf and b/documentation/content/pdfs/PythonCpp.pdf differ diff --git a/documentation/content/pdfs/PythonTutorial.pdf b/documentation/content/pdfs/PythonTutorial.pdf index 717d3251..9894bbac 100644 Binary files a/documentation/content/pdfs/PythonTutorial.pdf and b/documentation/content/pdfs/PythonTutorial.pdf differ diff --git a/documentation/content/pdfs/RDS.pdf b/documentation/content/pdfs/RDS.pdf index a2e68399..d1028d42 100644 Binary files a/documentation/content/pdfs/RDS.pdf and b/documentation/content/pdfs/RDS.pdf differ diff --git a/documentation/content/pdfs/Stratus.pdf b/documentation/content/pdfs/Stratus.pdf index 84ce493d..a10491c0 100644 Binary files a/documentation/content/pdfs/Stratus.pdf and b/documentation/content/pdfs/Stratus.pdf differ diff --git a/documentation/content/pdfs/UsersGuide.pdf b/documentation/content/pdfs/UsersGuide.pdf index 2dd46b0f..108b91e8 100644 Binary files a/documentation/content/pdfs/UsersGuide.pdf and b/documentation/content/pdfs/UsersGuide.pdf differ diff --git a/documentation/output/pages/python-tutorial.html b/documentation/output/pages/python-tutorial.html index 0fd3cea2..cbbb7c3d 100644 --- a/documentation/output/pages/python-tutorial.html +++ b/documentation/output/pages/python-tutorial.html @@ -222,20 +222,20 @@ don't. Thus we summarize below the more important ones:

-Cell +Cell The model. A Cell does not have terminals, only nets flagged as external -Instance +Instance An instance of a model -Net +Net A grouping of electrically connected components -Plug +Plug A terminal of an instance -RoutingPad +RoutingPad A physical connexion (pin) to an instance @@ -329,7 +329,7 @@ they print the result of the C++ method ::getString

Regarding the memory allocation, the Hurricane database contains two kind of objects.

  1. Objects that are linked to others in the database and whose creation or deletion -implies coherency operations. This is the case for Net or Horizontal. +implies coherency operations. This is the case for Net or Horizontal. They must be created using the static create() method of their class and destroyed with their destroy() method.

    And, of course, they cannot be copied (the copy constructor has been disabled).

    @@ -339,7 +339,7 @@ and destroyed with their destroy() method.

    net.destroy() # Call the dynamic destroy() method.
  2. -
  3. Objects that are standalone, like Point or Box, uses the usual construction +

  4. Objects that are standalone, like Point or Box, uses the usual construction methods. They also use the Python garbage collector mechanism and do not need to be explicitly deleted.

    from Hurricane import DbU, Box
    @@ -356,7 +356,7 @@ to be explicitly deleted.

    1.4 Collections and Iterators

    -

    Hurricane Collection behave like containers under Python and provide +

    Hurricane Collection behave like containers under Python and provide support for the iterator protocol.

    from Hurricane import Net, Horizontal
    @@ -411,13 +411,13 @@ attributes. The syntax has been made as simple as possible.

    del cell.myAttribute0 PythonAttributes.disable( cell )
    -

    Detailing the life cycle of Python attributes on a DBo:

    +

    Detailing the life cycle of Python attributes on a DBo:

      -
    1. Enabling the addition of Python attribute on a DBo:

      +
    2. Enabling the addition of Python attribute on a DBo:

      PythonAttributes.enable( cell )
       
    3. -
    4. Adding/removing properties on the DBo:

      +
    5. Adding/removing properties on the DBo:

      cell.myAttribute0 = MyAttribute()
       cell.myAttribute1 = MyAttribute()
       print( 'cell.myAttribute0 =', cell.myAttribute0 )
      @@ -430,13 +430,13 @@ Any still attached Python attributes will be released.

      Note

      -

      When the attributes of a DBo are released it does not automatically +

      When the attributes of a DBo are released it does not automatically imply that they are removed. Their reference count is decreased, and if they are only referenced here, they will be deleted. But if other variables still holds reference onto them, they will stay allocateds.

    6. -
    7. There is no need to keep track of all the DBo that have Python +

    8. There is no need to keep track of all the DBo that have Python attributes to disable them. One can directly call:

      PythonAttributes.disableAll()
       
      @@ -448,7 +448,7 @@ attributes to disable them. One can directly call:

      Sometimes, the use of a wrapped C++ feature would be counter intuitive regarding the Python feature. For those cases the overlay module provide an adaptation of the C++ API for a more Python-like code. A typical example is -with the UpdateSession mechanism.

      +with the UpdateSession mechanism.

      Using directly the C++ wrapper, we would write a code like this:

      from Hurricane import UpdateSession, Net, Vertical
       from helpers   import l
      @@ -567,11 +567,11 @@ in CGT - The
       

      3. Making a Standard Cell -- Layout

      -

      In this part, we will 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 +

      We will introduce the following classes : Cell, Net, Component and its derived classes.

      3.1 The AllianceFramework (CRL Core)

      @@ -581,7 +581,7 @@ one is available : the Alliance framework. It allows CoriolisAlliance libraries and cells in the exact same way.

      Note

      -

      To see how the AllianceFramework is configured for your +

      To see how the AllianceFramework is configured for your installation, please have a look to alliance.conf in the etc/coriolis2 directory. It must contains the same settings as the various MBK_ variables used for Alliance.

      @@ -590,7 +590,7 @@ as the various MBK_ variables used for

      3.2 Session Mechanism (Hurricane)

      In the Hurricane database, all modifications must take place inside -an UpdateSession. At the closing of a session, created or modificated +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.

      @@ -601,8 +601,8 @@ the session close.

      3.3 Creating a new Cell (CRL Core)

      -

      The creation of a new Cell occurs through the AllianceFramework, -and, as stated above, inside a UpdateSession. The AllianceFramework +

      The creation of a new Cell occurs through the AllianceFramework, +and, as stated above, inside a UpdateSession. The AllianceFramework environment is provided by the crl module.

      from Hurricane import *
       from CRL       import *
      @@ -614,15 +614,15 @@ environment is provided by the crl module.

      # Build then save the Cell.

      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 +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.

      -

      In the Hurricane Cell object, there is no concept of view, it contains +you want the Cell to be created.

      +

      In the Hurricane Cell object, there is no concept of view, it contains completly fused logical (netlist) and physical (layout) views.

      3.4 The DbU Measurement Unit

      -

      All coordinates in the Hurricane database are expressed in DbU +

      All coordinates in the Hurricane database are expressed in DbU (for Database Unit) which are integer numbers of foundry grid. To be more precise, they are fixed points numbers expressed in hundredth of foundry grid (to allow transient non-integer @@ -637,7 +637,7 @@ two conversion functions are provided:

      is integer.

      In order to reduce the number of characters one has to code, the helpers module provides three very short function to perform conversion towards -DbU :

      +DbU :

      def l ( value ):
           """Convert a lambda into a DbU."""
           return DbU.fromLambda( value )
      @@ -653,7 +653,7 @@ module provides three very short function to perform conversion towards
       

      3.5 Setting up the Abutment Box

      -

      To setup the abutment box, we use a Box which defines 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).

      b = Box( l( 0.0)    # x1
      @@ -671,20 +671,20 @@ corner (x2,y2).

      In the Hurricane terminology, a component is any kind of physical object among:

      -

      Components cannot be created alone. They must be part of a Net.

      +

      Components cannot be created alone. They must be part of a Net.

      3.6.1 Getting a Layer

      -

      As physical elements, Components are created using a Layer. So prior to -their creation, we must get one from the database. Layers are stored in the -Technology, which in turn, is stored in the DataBase. So, to get a -Layer:

      +

      As physical elements, Components are created using a Layer. So prior to +their creation, we must get one from the database. Layers are stored in the +Technology, which in turn, is stored in the DataBase. So, to get a +Layer:

      layer = DataBase.getDB().getTechnology().getLayer( 'METAL1' )
       
      @@ -699,10 +699,10 @@ and symbolic ones we adopt the following convention:

      3.6.2 Creating a Net

      -

      As said above, prior to creating any Component, we must create the Net it +

      As said above, prior to creating any Component, we must create the Net it 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 'i' and the name of the variable i holding the Net object. +argument 'i' and the name of the variable i holding the Net object. For the sake of clarity we try to give the variable a close name, but this is not mandatory.

      i = Net.create( cell, 'i' )
      @@ -718,7 +718,7 @@ external net, see 6.2 Cr
       

      3.6.3 Creating a Component

      -

      Finally, we get ready to create a Component, we will make a Vertical segment +

      Finally, we get ready to create a Component, we will make a Vertical segment of METAL1.

      segment = Vertical.create( i            # The owner Net.
                                , layer        # The layer.
      @@ -732,7 +732,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 its components as physical connectors usable by the router. -This is done by calling the NetExternalComponents class:

      +This is done by calling the NetExternalComponents class:

      NetExternalComponents.setExternal( segment )
       
      @@ -740,7 +740,7 @@ This is done by calling the

      3.7 Saving to Disk (CRL Core)

      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:

      +Using the AllianceFramework you can save it as a pair of file:

      @@ -880,12 +880,12 @@ explanation of that part of the code, refer to

      4. Manipulating Cells, Nets and Components

      -

      In this part, we will 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

      In Hurricane all kind of set of objects, whether organized in a real container like a map<> (dictionary / dict) or a vector<> (table / list) or -an algorithmic walkthrough of the database can be accessed through a Collection.

      +an algorithmic walkthrough of the database can be accessed through a Collection.

      C++ Collections objects are exposed in Python through the iterable protocol, allowing to simply write:

      for net in cell.getNets():
      @@ -905,7 +905,7 @@ allowing to simply write:

      4.1.1 Restrictions about using Collections

      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 skipped or processed twice. +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:

      cellNets = []
      @@ -922,18 +922,18 @@ loop. For example:

      4.2 Loading a Cell with AllianceFramework

      -

      As presented in 2.1 The Alliance Framework, the Cell that will be returned by +

      As presented in 2.1 The Alliance Framework, the Cell that will be returned by the getCell() call wil be:

        -
      1. If a Cell of that name is already loaded into memory, it will be returned.

        +
      2. If a Cell of that name is already loaded into memory, it will be returned.

        Note

        It means that it shadows any modifications that could have been on -disk since it was first loaded. Conversely, if the Cell has been +disk since it was first loaded. Conversely, if the Cell has been modified in memory, you will get those modifications.

      3. -
      4. Search, in the ordered list of libraries, the first Cell that matches the +

      5. Search, in the ordered list of libraries, the first Cell that matches the requested name.

        Note

        @@ -957,7 +957,7 @@ interactive layout viewer cgt.

        For cgt to be able to run your script, you must add to your script file a function named scriptMain(), which takes a dictionary as sole argument (**kw). The kw dictionary contains, in -particular, the CellViewer object we are running under with the +particular, the CellViewer object we are running under with the keyword editor. You can then load your cell into the viewer using the menu:

          @@ -1001,7 +1001,7 @@ you will only see the end result of your script.

          5.1 Using Breakpoints

          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 modified, be sure to have -closed any UpdateSession before calling breakpoints. +closed any UpdateSession before calling breakpoints. The Breakpoint.stop() function takes two arguments:

          1. The level above which it will be active.
          2. @@ -1020,13 +1020,13 @@ The Breakpoint.stop() function takes two argum standard cell.

            The fulladder netlist

            -

            6.1 Creating an Instance

            -

            Creating an Instance is straigthforward, the constructor needs only three +

            6.1 Creating an Instance

            +

            Creating an Instance is straigthforward, the constructor needs only three parameters:

              -
            1. The Cell into which the instance is to be created.
            2. +
            3. The Cell into which the instance is to be created.
            4. The name of the instance.
            5. -
            6. The master cell, the Cell model it refers to. The master cell +
            7. The master cell, the Cell model it refers to. The master cell will be part of the hierarchical level just below the fulladder cell.
            @@ -1044,9 +1044,9 @@ and the cells it refers to (the master cell

            6.2 Creating Nets and connecting to Instances

            -

            An Instance has one Plug for each external net of the master cell. -The plug allows to create a logical connection bewteen a Net of -fulladder and a net from an Instance master cell.

            +

            An Instance has one Plug for each external net of the master cell. +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 other well known databases.

            Therefore, a plug is related to two nets:

            @@ -1080,12 +1080,12 @@ terminals (sometimes referred as weekly connected terminals). There is a strict bijection between external nets and plugs.

            While it may be restrictive, it enforces cleaner designs -and make it possible for the HyperNet concept/class.

            +and make it possible for the HyperNet concept/class.

        6.3 Power supplies special case

        -

        For supplies, it may be tedious to connect the Plugs of each cell one by one +

        For supplies, it may be tedious to connect the Plugs of each cell one by one (and create a lot of unneeded objects). To avoid that, we may use Named connections. If a signal in fulladder is set to global, then it will be considered as connected to any signal with the same name and global in @@ -1101,15 +1101,15 @@ the master cell of the instances.

        until it is placed.

        6.4.1 Transformation

        -

        To place an Instance, we apply a Transformation to the coordinate system +

        To place an Instance, we apply a Transformation to the coordinate system of the master cell. A transformation is composed of two operations:

          -
        1. An Orientation, which can be a symmetry or a rotation (or a combination +
        2. An Orientation, which can be a symmetry or a rotation (or a combination of those two). The Orientation is applied first to the coordinate system of the master cell. The complete list of Orientation and their codes are given on the Orientation documentation page.
        3. A Translation, applied in second. Translation are represented by -Points.
        4. +Points.

        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) @@ -1123,7 +1123,7 @@ lower left corner of the abutment box at (0,0) that the abutment box lower left corner is at (0,0) (same for the xr2_x2 master cell layout). Here is the code to place the xr2_1 instance to left of the second row.

        -

        Setting the translation on an Instance is not enough to make it be displayed, +

        Setting the translation on an Instance is not enough to make it be displayed, we also must set its placement status to Instance.PlacementStatus.PLACED.

        xr2_1.setTransformation( Transformation( l(0.0), l(100.0), Transformation.Orientation.MY ) )
         xr2_1.setPlacementStatus( Instance.PlacementStatus.PLACED )
        @@ -1131,39 +1131,39 @@ we also must set its placement status to I
         

        6.4.3 Nets -- From Plugs to RoutingPads

        -

        As was stated before, Plugs represent a logical connection between two +

        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 so called special component is a RoutingPad.

        The RoutingPad can be considered as an equivalent to pin in other well known databases.

        rp = RoutingPad.create( a
                               , Occurrence( xr2_1.getPlug( xr2_x2.getNet("i0")) )
                               , RoutingPad.BiggestArea )
         
        -

        For the second parameter, we must pass an Occurrence. Occurrence objects will +

        For the second parameter, we must pass an Occurrence. Occurrence objects will 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 +Occurrence object with one parameter : the Plug for which we want to create a physical connection.

        -

        The RoutingPad rp will be a component of the a net.

        -

        The third argument ask the constructor of the RoutingPad to select in the +

        The RoutingPad rp will be a component of the a net.

        +

        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 connection through a RoutingPad. The candidates must -have been flagged with the NetExternalComponents class.

        +selected for connection through a RoutingPad. The candidates must +have been flagged with the NetExternalComponents class.

        See 3.6.3 Creating a Component.

        6.4.4 Nets -- Regular wiring

        -

        After the creation of the RoutingPads, the wiring is to be created with -ordinary layout components (Horizontal, Vertical and Contact possibly +

        After the creation of the RoutingPads, the wiring is to be created with +ordinary layout components (Horizontal, Vertical and Contact possibly articulated). Here is the complete code for net a. We made an articulated -layout where contacts are created over RoutingPads then segments over +layout where contacts are created over RoutingPads then segments over contacts.

        # Build wiring for a.
         # Create RoutingPads first.
        @@ -1372,7 +1372,7 @@ directory (under the the root of the Coriolis installati
         

        7. Working in real mode

        -

        The AllianceFramework only manages symbolic layout as Alliance does. +

        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 expressed in microns instead of lambdas.

        The real mode will be illustrated by working with the FreePDK45.

        @@ -1402,7 +1402,7 @@ for any discrepencies.

        7.2 Loading a blif file -- Yosys

        The blif format is generated by the Yosys logic synthetizer. Here again, it is pretty straightforward: call the static function Blif.load(). If you made -your synthesis on a cell library not managed by AllianceFramework, for example +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.

        cell = Blif.load( 'snx' ) # load "snx.blif" in the working directory.
         
        @@ -1411,7 +1411,7 @@ the one of the FreePDK45, you must load it prior to calling the

        8. Tool Engines (CRL Core)

        -

        The ToolEngine class is the base class for all tools developped 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.

        @@ -1474,13 +1474,13 @@ Until Katana is fully implemented we keep both of them.<

        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 places and routes the fulladder netlist as seen -previously. The call to the ToolEngines is made inside the new function +previously. The call to the ToolEngines is made inside the new function placeAndRoute().

        Note

        -

        As the ToolEngine take care of opening and closing UpdateSession, we +

        As the ToolEngine take care of opening and closing UpdateSession, we do not need the wrapper function doBreak() around the breakpoints. -We directly call Breakpoint.

        +We directly call Breakpoint.

        Note

        @@ -1607,8 +1607,8 @@ the documentation.

        9.2 RoutingPads

        -

        Unlike the Plugs that only make connections between two adjacent -hierarchical levels, RoutingPads can refer to a deeply buried terminal.

        +

        Unlike the Plugs that only make connections between two adjacent +hierarchical levels, RoutingPads can refer to a deeply buried terminal.

        9.3 HyperNets

        diff --git a/documentation/output/pdfs/CheckToolkit.pdf b/documentation/output/pdfs/CheckToolkit.pdf index a14a52a8..fe26fdbe 100644 Binary files a/documentation/output/pdfs/CheckToolkit.pdf and b/documentation/output/pdfs/CheckToolkit.pdf differ diff --git a/documentation/output/pdfs/DesignFlow.pdf b/documentation/output/pdfs/DesignFlow.pdf index 26ec3373..69020d9a 100644 Binary files a/documentation/output/pdfs/DesignFlow.pdf and b/documentation/output/pdfs/DesignFlow.pdf differ diff --git a/documentation/output/pdfs/PythonCpp.pdf b/documentation/output/pdfs/PythonCpp.pdf index 6cac6ad0..c38cccf4 100644 Binary files a/documentation/output/pdfs/PythonCpp.pdf and b/documentation/output/pdfs/PythonCpp.pdf differ diff --git a/documentation/output/pdfs/PythonTutorial.pdf b/documentation/output/pdfs/PythonTutorial.pdf index 717d3251..9894bbac 100644 Binary files a/documentation/output/pdfs/PythonTutorial.pdf and b/documentation/output/pdfs/PythonTutorial.pdf differ diff --git a/documentation/output/pdfs/RDS.pdf b/documentation/output/pdfs/RDS.pdf index a2e68399..d1028d42 100644 Binary files a/documentation/output/pdfs/RDS.pdf and b/documentation/output/pdfs/RDS.pdf differ diff --git a/documentation/output/pdfs/Stratus.pdf b/documentation/output/pdfs/Stratus.pdf index 84ce493d..a10491c0 100644 Binary files a/documentation/output/pdfs/Stratus.pdf and b/documentation/output/pdfs/Stratus.pdf differ diff --git a/documentation/output/pdfs/UsersGuide.pdf b/documentation/output/pdfs/UsersGuide.pdf index 2dd46b0f..108b91e8 100644 Binary files a/documentation/output/pdfs/UsersGuide.pdf and b/documentation/output/pdfs/UsersGuide.pdf differ