Provided by: alliance_5.1.1-1.1build1_amd64 bug

NAME

       sxlib - a portable CMOS Standard Cell Library

DESCRIPTION

       sxlib  library  contains standard cells that have been developed at UPMC-ASIM/LIP6. This manual gives the
       list of available cells, with their behavior, width, maximum delay and input fan-in.  This  manual  gives
       also  few thumb rules to help the user to well use the cells. The given delay are the maximum (that means
       worst case for a generic .35 micron process).  More precise delay can be found in ALLIANCE VHDL  behavior
       files (.vbe file).  Cell-name is built that way <behavior>_<output drive> (see explanations below).

       Four files are attached to each cell:-
       - ALLIANCE Layout ............... cell-name.ap
       - ALLIANCE Transistor net-list .. cell-name.al
       - ALLIANCE VHDL behavior ........ cell-name.vbe
       - Compiled HILO behavior ........ 0000000xx.dat

       And few files more:-
       - CATAL ......................... ALLIANCE catalog file
       - sxlib.cct ..................... Cell definition for HILO CAD tools
       - CIRCUIT.idx ................... HILO catalog file
       - sxlib.lib ..................... Cell definition for Synopsys CAD tools
       - sxlib.db ...................... Compiled cell definition for Synopsys
       - sxlib.sdb ..................... Icon definition for Synopys

PHYSICAL OUTLINE

       sxlib  uses  the  symbolic  layout  promoted  by  Alliance  in order to provide process independence. All
       dimensions are in lambda units. The mapping to a specific process CIF or GDS2 layout must be performed by
       the s2r tool (symbolic to real), which uses a value for the lambda (e.g. 1 lambda=0.3um).

              _________________
          50 |       VDD       |
          45 |_________________|     x : place of virtual connector.
          40 |           x     |
          35 |        x  x     |         they are named : name_<y>
          30 |  x     x        |
          25 |  x     x        |         for example : i0_20
          20 |  x              |                       i0_25
          15 |           x     |                       i0_30
          10 |_________________|
           5 |       VSS       |
           0 |_________________|
             0  5 10 15 20 25 30

       All cells are 50 lambdas high and N times 5 lambdas wide, where N is the number of pitches. That  is  the
       only  physical information given in the cell list below.  Power supplies are in horizontal ALU1 and are 6
       lambdas wide.  Connectors are inside the cells, placed on a 5x5 grid.  Half layout  design  rules  are  a
       warranty  for  any layer on any face, except for the power supply and NWELL.  Cells can be abutted in all
       directions whenever the supply is well connected and connectors are always placed on the 5x5 grid.

DELAY MODEL

       Cells have been extracted and simulated by using a generic 0.35um process  in  order  to  give  realistic
       values  for  the  delays and capacitances.  We chose to give only the worst delay for each output signal,
       though it is not very realistic (since delay depends on each input, an input can be easily  up  to  twice
       faster than another). However, we just wanted to give an idea of the relative delay.

       Furthermore,  we  added  0.6ns  to  each  output delay in order to take into account the delay due to the
       signal commutation. We have supposed the output drives the maximum  capacitance.  This  capacitance  have
       been  computed  as  follow.  We  considered that a good slope signal for this process was 0.8ns.  Then we
       searched for the capacitance required to obtain the same input and output slope (0.8ns) for  the  smaller
       inverter  (inv_x1).  That was 125fF. We simulated the same inverter without output capacitance. The delay
       difference was about 0.6ns. This result is not exactly the same for  all  cells,  but  0.6ns  is  a  good
       approximation.

       The  given  delay  is  then  a  worst case (70degree, 2.7Volt, slow process, worst input), an idea of the
       typical delay can be obtain by dividing worst delay by 1.5, and  best  delay  by  dividing  by  2.   More
       detailed  data  can  be found in GENERIC data included in the VHDL files (.vbe). Examples can be found at
       the end of this manual.

       At last, to get a very better idea about the real delay without simulating the spice transistor  netlist,
       it is required to use the TAS (1) tool, which is a timing static analyzer able to give the longer and the
       shorter path for a given process.

OUTPUT DRIVE

       The  output  drive of a cell gives an information on the faculty for the cell to drive a big capacitance.
       This faculty depends on the rising and falling output resistance. The smaller the resistance, the  bigger
       can  be  the  capacitance.   Minimum  drive  is  x1.  This corresponds to the smallest available inverter
       (inv_x1). x2 means the cell is equivalent (from the driving point of view) at two  smaller  inverters  in
       parallel, and so on.

       The  maximum  output  drive  is  x8.  It  is  limited because of the maximum output slope and the maximum
       authorized instantaneous current. If it was bigger the output slope could be very tight and  the  current
       too big.

       With the 0.35um process, an x1 is able to drive about 125fF, x2 -> 250fF, x4 -> 500fF,x8 -> 1000fF.  This
       is  just an indication since if a cell is overloaded, the only consequence is to increase the propagation
       time. On the other hand, it is not very good to  under-load  a  cell  because  this  leads  to  a  signal
       overshoot.   Actually,  for  big  gate, such as noa3ao322_x1, x1 means maximal driving strength reachable
       with a single logic layer, that can be much less than an inv_x1. That is  why  is  the  cell  list  below
       contains  more  precise drive strengh. As you can see noa3ao322_x1 as a output drive strengh of 0.6, that
       means 0.6 time an inverter, so say it can drive about 0.6*125fF=75fF.

       With the 0.35um process, a 1 lambda interconnect wire is about 0.15fF, an average cell  fan-in  is  10fF.
       Then,  if  it  needs  about  50  lambdas  to  connect  2 cells, an x1 cell is able to drive about 7 cells
       (125/(10+50*.15)=7). With 100 lambdas, 5 cells, with 750 lambdas only 2 cells. Note that 50 lambdas means
       cells are very close one from each other, nearly abutted, 100 lambdas is an average value.

       All this are indications.  Only a timing analysis on the extracted transistor net-list  from  layout  can
       tell if a cell is well used or not (see tas(1) for informations about static timing analysis).

BEHAVIOR

       For  most  of  cells,  the  user  can  deduce  the  cell behavior just by reading its name.  That is very
       intuitive for inverter and more complex for and/or cells.  For the last, the name gives the  and/or  tree
       structure.  The input order for the VHDL interface component is always the alphabetic order.

       inv           : inversor buffer
       buf           : buffer
       [n]ts         : [not] tree-state
       [n]xr<i>      : [not] xor <i> inputs
       [n]mx<i>      : [not] multiplexor <i> inputs with coded command
       [n][sd]ff<i>  : [not] [static|dynamic] flip-flop <i> inputs
       [n]oa...      : [not] and/or function (see below)

       and_or cell (YACC (1) grammar):-

       NAME     : n OA_CELL                 -> not OA_CELL
                | OA_CELL                   -> OA_CELL

       OA_CELL  : OPERATOR INPUTS           -> function with INPUTS inputs
                | OPERATOR OA_CELLS INPUTS  -> function with INPUTS inputs
                                               where some inputs are OA_CELL

       OPERATOR : a                         -> and
                | o                         -> or
                | n                         -> not

       OA_CELLS : OA_CELLS OA_CELL          -> list of OA_CELL
                | OA_CELL                   -> last OA_CELL of the list

       INPUTS   : integer                   -> number of inputs

       The input names are implicit and formed that way i<number>.
       They are attributed in order beginning by i0.

       nx where x is a number means there are x inverters in parallel. For
       example an23 is an and with 3 inputs of which two are inverted, that
       is and( not(i0), not(i1), i2).

       Examples:- (some are not in sxlib)

       na2       : not( and(i0,i1))
       on12      : or( not(i0), i1)
       noa2a22   : not( or( and(i0,i1), and(i2,i3)))
       noa23     : not( or( and(i0,i1), i3))
       noao22a34 : not( or( and( or(i0,i1), i2), and(i3,i4,i5), i6, i7))

       Note that xr2 could not be expressed with an and/or formulea even if
       xr2 = or( and( not(i0), i1), and( not(i1), i0)) = oan12an122
       but the input names are not well distributed.

CELL LIST

       All available cells are listed below. The first column is the pitch width.  The pitch value is 5 lambdas.
       The height is 50. Area is then <number>*5*50.

       The  second  column  is  the  output  drive  strenght compared with the inv_x1 output drive strenght (see
       explanation above in section OUTPUT DRIVE).

       The following column is the delay in  nano-seconds.   Remember  this  delay  corresponds  to  the  slower
       input+0.6ns (see explanation above in section DELAY MODEL).

       The  last  column  gives the function behavior with input capacitance.  / means not, + means or, .  means
       and, ^ means xor.  Each input is followed by  fan-in  capacitance  in  fF,  (e.g.  i0<11>  means  i0  pin
       capacitance is 11fF).

       For  some  cells,  such  as  fulladder, it was not possible to internally connect all inputs.  That means
       there are several inputs that must be externally connected.  In the  following  list,  these  inputs  are
       followed by a star (*) character in the equation.

       For  example,  fulladder  equation  is sout <= (a* . b* . cin*).  a* replaces a0, a1, a2, a3 that must be
       explicitly connected by the user.  Note also few cells have more than one output. In that case there  are
       several lines in the list, one by output.
       =================================================================
       WIDTH NAME  DRIVE DELAY BEHAVIOR with cin
       -------------------------------------------------------- INVERSOR
        3 inv_x1       1.0 0.7  nq <= /i<8>
        3 inv_x2       1.6 0.7  nq <= /i<12>
        4 inv_x4       3.6 0.7  nq <= /i<26>
        7 inv_x8       8.4 0.7  nq <= /i<54>
       ---------------------------------------------------------- BUFFER
        4 buf_x2       2.1 1.0   q <=  i<6>
        5 buf_x4       4.3 1.0   q <=  i<9>
        8 buf_x8       8.4 1.0   q <=  i<15>
       ------------------------------------------------------ THREE STATE
        6 nts_x1       1.2 0.8  IF (cmd<14>) nq <= /i<14>
        8 nts_x2       2.4 0.9  IF (cmd<18>) nq <= /i<28>
       10 ts_x4        4.3 1.1  IF (cmd<19>)  q <= i<8>
       13 ts_x8        8.4 1.2  IF (cmd<19>)  q <= i<8>
       -------------------------------------------------------------- AND
        4 na2_x1       1.0 0.9  nq <= /(i0<11>.i1<11>)
        7 na2_x4       4.3 1.2  nq <= /(i0<10>.i1<10>)
        5 na3_x1       0.9 1.0  nq <= /(i0<11>.i1<11>.i2<11>)
        8 na3_x4       4.3 1.3  nq <= /(i0<10>.i1<10>.i2<10>)
        6 na4_x1       0.7 1.0  nq <= /(i0<10>.i1<11>.i2<11>.i3<11>)
       10 na4_x4       4.3 1.4  nq <= /(i0<10>.i1<11>.i2<11>.i3<11>)
        5 a2_x2        2.1 1.0   q <=  (i0<9>.i1<11>)
        6 a2_x4        4.3 1.1   q <=  (i0<9>.i1<11>)
        6 a3_x2        2.1 1.1   q <=  (i0<10>.i1<10>.i2<10>)
        7 a3_x4        4.3 1.2   q <=  (i0<10>.i1<10>.i2<10>)
        7 a4_x2        2.1 1.2   q <=  (i0<10>.i1<10>.i2<10>.i3<10>)
        8 a4_x4        4.3 1.3   q <=  (i0<10>.i1<10>.i2<10>.i3<10>)
        5 an12_x1      1.0 1.0   q <=  (/i0<12>).i1<9>
        8 an12_x4      4.3 1.1   q <=  (/i0<9>).i1<11>
       --------------------------------------------------------------- OR
        4 no2_x1       1.0 0.9  nq <= /(i0<12>+i1<12>)
        8 no2_x4       4.3 1.2  nq <= /(i0<12>+i1<11>)
        5 no3_x1       0.8 1.0  nq <= /(i0<12>+i1<12>+i2<12>)
        8 no3_x4       4.3 1.3  nq <= /(i0<12>+i1<12>+i2<11>)
        6 no4_x1       0.6 1.1  nq <= /(i0<12>+i1<12>+i2<12>+i3<12>)
       10 no4_x4       4.3 1.4  nq <= /(i0<12>+i1<12>+i2<12>+i3<12>)
        5 o2_x2        2.1 1.0   q <=  (i0<10>+i1<10>)
        6 o2_x4        4.3 1.1   q <=  (i0<10>+i1<10>)
        6 o3_x2        2.1 1.1   q <=  (i0<10>+i1<10>+i2<9>)
       10 o3_x4        4.3 1.2   q <=  (i0<10>+i1<10>+i2<9>)
        7 o4_x2        2.1 1.2   q <=  (i0<10>+i1<10>+i2<10>+i3<9>)
        8 o4_x4        4.3 1.3   q <=  (i0<12>+i1<12>+i2<12>+i3<12>)
        5 on12_x1      1.0 0.9   q <=  (/i0<11>)+i1<9>
        8 on12_x4      4.3 1.1   q <=  (/i0<9>)+i1<10>
       --------------------------------------------------------- AND/OR 3
        6 nao22_x1     1.2 0.9  nq <= /((i0<14>+i1<14>).i2<14>)
       10 nao22_x4     4.3 1.3  nq <= /((i0<8> +i1<8>) .i2<9>)
        6 noa22_x1     1.2 0.9  nq <= /((i0<14>.i1<14>)+i2<14>)
       10 noa22_x4     4.3 1.3  nq <= /((i0<8> .i1<8>) +i2<9>)
        6 ao22_x2      2.1 1.2   q <=  ((i0<8>+i1<8>).i2<9>)
        8 ao22_x4      4.3 1.3   q <=  ((i0<8>+i1<8>).i2<9>)
        6 oa22_x2      2.1 1.2   q <=  ((i0<8>.i1<8>)+i2<9>)
        8 oa22_x4      4.3 1.3   q <=  ((i0<8>.i1<8>)+i2<9>)
       --------------------------------------------------------- AND/OR 4
        7 nao2o22_x1   1.2 1.0  nq <= /((i0<14>+i1<14>).(i2<14>+i3<14>))
       11 nao2o22_x4   4.3 1.4  nq <= /((i0<8> +i1<8>) .(i2<8> +i3<8>))
        7 noa2a22_x1   1.2 1.0  nq <= /((i0<14>.i1<14>)+(i2<14>.i3<14>))
       11 noa2a22_x4   4.3 1.4  nq <= /((i0<8> .i1<8>) +(i2<8> .i3<8>))
        9 ao2o22_x2    2.1 1.2   q <=  ((i0<8>+i1<8>).(i2<8>+i3<8>))
       10 ao2o22_x4    4.3 1.3   q <=  ((i0<8>+i1<8>).(i2<8>+i3<8>))
        9 oa2a22_x2    2.1 1.2   q <=  ((i0<8>.i1<8>)+(i2<8>.i3<8>))
       10 oa2a22_x4    4.3 1.4   q <=  ((i0<8>.i1<8>)+(i2<8>.i3<8>))
       --------------------------------------------------------- AND/OR 5
        7 noa2ao222_x1 0.7 1.1 nq <= /((i0<11>.i1<11>)+((i2<13>+i3<13>).i4<13>))
       11 noa2ao222_x4 4.3 1.4 nq <= /((i0<11>.i1<11>)+((i2<11>+i3<11>).i4<11>))
       10 oa2ao222_x2  2.1 1.2  q <=  ((i0<8> .i1<8>) +((i2<8> +i3<8>) .i4<8>))
       11 oa2ao222_x4  4.3 1.3  q <=  ((i0<8> .i1<8>) +((i2<8> +i3<8>) .i4<8>))
       --------------------------------------------------------- AND/OR 6
       10 noa2a2a23_x1 0.8 1.2 nq <= /((i0<13>.i1<14>) +(i2<14>.i3<14>)
                                      +(i4<14>.i5<14>))
       13 noa2a2a23_x4 4.3 1.3 nq <= /((i0<13>.i1<14>) +(i2<14>.i3<14>)
                                      +(i4<14>.i5<14>))
       12 oa2a2a23_x2  2.1 1.4  q <=  ((i0<13>.i1<14>) +(i2<14>.i3<14>)
                                      +(i4<14>.i5<14>))
       13 oa2a2a23_x4  4.3 1.4  q <=  ((i0<13>.i1<14>) +(i2<14>.i3<14>)
                                      +(i4<14>.i5<14>))
       --------------------------------------------------------- AND/OR 7
        9 noa3ao322_x1 0.6 1.2 nq <= /((i0<13>.i1<13>.i2<12>)
                                      +((i3<13>+i4<13>+i5<13>).i6<13>))
       11 noa3ao322_x4 4.3 1.4 nq <= /((i0<10>.i1<9>.i2<9>)
                                      +((i3<9>+i4<9>+i5<9>).i6<9>))
       10 oa3ao322_x2  2.1 1.2  q <= /((i0<10>.i1<9>.i2<9>)
                                      +((i3<9>+i4<9>+i5<9>).i6<9>))
       11 oa3ao322_x4  4.3 1.3  q <= /((i0<10>.i1<9>.i2<9>)
                                      +((i3<9>+i4<9>+i5<9>).i6<9>))
       --------------------------------------------------------- AND/OR 8
       14 noa2a2a2a24_x1 0.6 1.4 nq <= /((i0<14>.i1<14>)+(i2<13>.i3<13>)
                                        +(i4<13>.i5<13>)+(i6<14>.i7<14>))
       17 noa2a2a2a24_x4 4.3 1.7 nq <= /((i0<14>.i1<14>)+(i2<14>.i3<13>)
                                        +(i4<13>.i5<13>)+(i6<14>.i7<14>))
       15 oa2a2a2a24_x2  2.1 1.5  q <=  ((i0<14>.i1<14>)+(i2<14>.i3<13>)
                                        +(i4<13>.i5<13>)+(i6<14>.i7<14>))
       16 oa2a2a2a24_x4  4.3 1.6  q <=  ((i0<14>.i1<14>)+(i2<14>.i3<13>)
                                        +(i4<13>.i5<13>)+(i6<14>.i7<14>))
       ------------------------------------------------------ MULTIPLEXER
        7 nmx2_x1      1.2 1.0  nq <= /((i0<14>./cmd<21>)+(i1<14>.cmd))
       12 nmx2_x4      4.3 1.3  nq <= /((i0<8>./cmd<14>)+(i1<9>.cmd))
        9 mx2_x2       2.1 1.1   q <=   (i0<8>./cmd<17>)+(i1<9>.cmd)
       10 mx2_x4       4.3 1.3   q <=   (i0<8>./cmd<17>)+(i1<9>.cmd)
       12 nmx3_x1      0.4 1.2  nq <= /((i0<9>./cmd0<15>)
                                       +(((i1<8>.cmd1<15>)+(i2<8>./cmd1)).cmd0))
       15 nmx3_x4      4.3 1.7  nq <= /((i0<9>./cmd0<15>)
                                       +(((i1<8>.cmd1<15>)+(i2<8>./cmd1)).cmd0))
       13 mx3_x2       2.1 1.4   q <=  ((i0<9>./cmd0<15>)
                                       +(((i1<8>.cmd1<15>)+(i2<8>./cmd1)).cmd0))
       14 mx3_x4       4.3 1.6   q <=  ((i0<9>./cmd0<15>)
                                       +(((i1<8>.cmd1<15>)+(i2<8>./cmd1)).cmd0))
       -------------------------------------------------------------- XOR
        9 nxr2_x1      1.2 1.1  nq <= /(i0<21>^i1<22>)
       11 nxr2_x4      4.3 1.2  nq <= /(i0<20>^i1<21>)
        9 xr2_x1       1.2 1.0   q <=  (i0<21>^i1<22>)
       12 xr2_x4       4.3 1.2   q <=  (i0<20>^i1<21>)
       -------------------------------------------------------- FLIP-FLOP
                                   nq <=/((i0<11>./cmd<13>)+(i1<7>.cmd))
       18 sff1_x4      4.3 1.7  IF RISE(ck<8>)
                                    q <= i<8>
       24 sff2_x4      4.3 1.9  IF RISE(ck<8>)
                                    q <= ((i0<8>./cmd<16>)+(i1<7>.cmd))
       28 sff3_x4      4.3 2.4  IF RISE(ck<8>)
                                    q <= (i0<9>./cmd0<15>)
                                        +(((i1<8>.cmd1<15>)+(i2<8>./cmd1)).cmd0)
       ------------------------------------------------------------ ADDER
       16 halfadder_x2 2.1 1.2 sout <= (a<27>^b<22>)
                       2.1 1.0 cout <= (a.b)
       18 halfadder_x4 4.3 1.3 sout <= (a<27>^b<22>)
                       4.3 1.1 cout <= (a.b)
       20 fulladder_x2 2.1 1.8 sout <= (a*<28>^b*<28>^cin*<19>)
                       2.1 1.4 cout <= (a*.b*+a*.cin*+b*.cin*)
       21 fulladder_x4 4.3 2.2 sout <= (a*<28>^b*<28>^cin*<19>)
                       4.3 1.5 cout <= (a*.b*+a*.cin*+b*.cin*)
       ---------------------------------------------------------- SPECIAL
        3 zero_x0       0   0  nq <= '0'
        3 one_x0        0   0   q <= '1'
        2 tie_x0        0   0  Body tie cell
        1 rowend_x0     0   0  Empty cell
       ==================================================================

NEW CELLS

       It  is  possible  to  add new cells in the library just by providing the 3 files .ap, .al and .vbe in the
       standard cell directory.  The layout view can be created with the symbolic editor  graal.   The  physical
       outline  is  given above.  The net-list view can be automatically generated with the lynx extractor.  The
       behavioral view must be written by the designer and checked with the yagle  functional  abstractor.   The
       file  must  contain  the  generic  fields  in  order to be used by the logic synthesis tools and the I/Os
       terminals must be in the same order (alphabetic) in the .vbe and .al files.

       If you develop new cells, please send the corresponding files to alliance-users@asim.lip6.fr

VHDL FILES

       You can find below the commented VHDL GENERIC for the na2_x4 cell.
       ENTITY na2_x4 IS
       GENERIC (
         CONSTANT area          : NATURAL := 1750; -- lamba * lambda
         CONSTANT transistors   : NATURAL := 10;   -- number of
         CONSTANT cin_i0        : NATURAL := 10;   -- femto Farad for i0
         CONSTANT cin_i1        : NATURAL := 10;   -- femto Farad for i1
         CONSTANT tplh_i1_nq    : NATURAL := 606;  -- propag. time in pico-sec
                                                   -- from i1 falling
                                                   -- to   nq rizing
         CONSTANT rup_i1_nq     : NATURAL := 890;  -- resitance in Ohms when nq
                                                   -- rizing due to i1 change
         CONSTANT tphl_i1_nq    : NATURAL := 349;  -- propag time when nq falls
         CONSTANT rdown_i1_nq   : NATURAL := 800;  -- resist when nq falls
         CONSTANT tplh_i0_nq    : NATURAL := 557;  -- idem for i0
         CONSTANT rup_i0_nq     : NATURAL := 890;
         CONSTANT tphl_i0_nq    : NATURAL := 408;
         CONSTANT rdown_i0_nq   : NATURAL := 800
       );
       PORT (
         i0     : in  BIT;
         i1     : in  BIT;
         nq     : out BIT;
         vdd    : in  BIT;
         vss    : in  BIT
       );

SEE ALSO

       MBK_CATA_LIB (1), catal(1), ocp(1), nero(1), cougar(1),  boom(1),  loon(1),  boog(1),  genlib(1),  ap(5),
       al(5), vbe(5)

ASIM/LIP6                                       October 19, 1999                                        SXLIB(5)