Subject: Bird 10 from Eric Bracken, 1st double digit bird (2 claws?)

From: "Hobbs, Will" <[email-masked]>
Date: Fri, 18 Mar 94 09:08:00 PST

*******************************************************************************
*******************************************************************************

                       Buffer Issue Resolution Document  (BIRD)

BIRD ID#:      10
ISSUE TITLE:   Describing coupling effects in package models
REQUESTOR:     Eric Bracken, Performance Signal Integrity, Inc.

DATE SUBMITTED:                       17 March 1994
DATE REVISED:                         {revision date}
DATE ACCEPTED BY IBIS OPEN FORUM:     Pending
*******************************************************************************
*******************************************************************************

STATEMENT OF THE ISSUE:

  For a more thorough signal integrity analysis, a mechanism is needed
for describing electromagnetic couplings between the different pins of 
a package.

*******************************************************************************

STATEMENT OF THE RESOLVED SPECIFICATIONS:

Summary: 
-------

A new keyword, [Package Model], is added to the .ibs file.  Following
this keyword, the name of a package model for the part is given.
Package models can be found in separate package model files, which
bear the .pkg extension.

The format of .pkg files is also part of the resolved specification,
and is explained in detail below.

Use of [Package Model] is OPTIONAL.  If it is not provided, then the
table of RLC values listed in the [Pin] section of the .ibs file is
used as the "package model" for the part.  On the other hand, if the
[Package Model] IS given, then the R_pin, L_pin and C_pin values in
the [Pin] section may either be ignored, or may be used for less
detailed simulations without coupling.  Probably this data will simply
be left out of the [Pin] section when a [Package Model] is used;
this practice is permitted by the IBIS Ver. 1.1 specification.

I.  Syntax for the .IBS File.
----------------------------
The following syntax is used for specifying a package model:

|==============================================================================
|
|     Keyword:  [Package Model]
|
|    Required:  No
|
| Description:  Used to indicate the name of the package model
|
| Usage Rules:  The Package_Model_Name is limited to 40 characters.
|               Spaces are allowed in the name. 
|
|------------------------------------------------------------------------------
|
[Package Model]     Package_Model_Name

This is the only change to the .ibs file.  The actual package model
is contained within the .pkg file, which is described next.

II.  Syntax for the .PKG File
-----------------------------

Package models are stored in a file whose name looks like

 <filename>.pkg

The <filename> provided must adhere to the venerable MS-DOS file name
conventions: it must not exceed 8 characters in length.  All of these
characters must be lower case.  The extension ".pkg" is used to
identify files containing package models.

A.  Global elements
-------------------

The .PKG file contains several elements which are identical to those
in a .IBS file.  The following keywords are required for each file:

[IBIS Ver]   (must be the 1st keyword in the file)
[File Name]
[File Rev]

Optional keywords may be added to clarify the file's contents:

[Date]
[Source]
[Notes]
[Disclaimer]

All of the abovementioned keywords follow rules absolutely identical 
to those in the .IBS file.  The reader is referred to the IBIS Version
1.1 specification for more details.

The default character for comments in the .pkg file is "|".  As in
the .ibs file, the comment character may be changed through the use
of the 

[Comment char]

keyword at any point in the file.  Again, the syntax is the same 
as for a .ibs Ver. 1.1 file.

After the information listed above, the actual package models are 
given.  These are described in the next subsection.

B.  Package Models
------------------

Each package model is preceded by the [Define Package Model] keyword.

|==============================================================================
|
|     Keyword:  [Define Package Model]
|
|    Required:  Yes
|
| Description:  Used to mark the beginning of a package model description.
|
| Usage Rules:  If the .pkg file contains data for more than one package,
|               each section must begin with a new [Define Package Model]
|               keyword.  The length of the Package_Model_Name must not 
|               exceed 40 characters in length and blank characters ARE 
|               allowed.
|
|------------------------------------------------------------------------------
|
[Define Package Model]     Package_Model_Name

The [Manufacturer] keyword is used to declare the manufacturer of
the part(s) which use this package model.  This would typically
be the name of the semiconductor vendor.  The syntax is identical
to that of the [Manufacturer] keyword in the .ibs file, e.g.

[Manufacturer]  Bozonics Semiconductors Ltd.

An additional optional keyword, [OEM], is used to indicate the name of
the PACKAGE's manufacturer.  This is useful if the semiconductor
vendor sells a single IC in packages from different manufacturers
(e.g. AMP, Kyocera).  The [OEM] keyword's syntax is analogous to that
of the [Manufacturer] keyword.

[OEM]   Pkgs'R'Us

The [Description] keyword is used to indicate to a human being what
the model is describing.

|==============================================================================
|
|     Keyword:  [Description]
|
|    Required:  Yes
|
| Description:  This is used to provide a concise yet easily human-readable
|               description of what kind of package the [Package_Model]
|               is representing.  An example Description_Text might be:
|               "220-Pin Quad Ceramic Flat Pack".
|
| Usage Rules:  The description must be less than 60 characters in length,
|               must fit on a single line, and MAY contain spaces.
|
|------------------------------------------------------------------------------
|
[Description]     Description_Text

The [Number of Pins] keyword identifies how many pins the package has.

|==============================================================================
|
|     Keyword:  [Number of Pins]
|
|    Required:  Yes
|
| Description:  This is used to tell the parser how many pins to expect.
|
| Usage Rules:  The How_Many field must be a positive integer less than 60
|               characters long.
|
|------------------------------------------------------------------------------
|
[Number of Pins]     How_Many

The beginning of the actual model data is marked with the [Model Data] 
keyword.

|==============================================================================
|
|     Keyword:  [Model Data]
|
|    Required:  Yes
|
| Description:  This is used to indicate the beginning of the formatted
|               model data.
|
| Usage Rules:  This is pretty simple.
|
|------------------------------------------------------------------------------
|
[Model Data]     

Similarly, the end of the model data is marked with an [End Model Data]
keyword:

|==============================================================================
|
|     Keyword:  [End Model Data]
|
|    Required:  Yes
|
| Description:  This is used to indicate the end of the formatted
|               model data.
|
| Usage Rules:  This is pretty simple too.
|
|------------------------------------------------------------------------------
|
[End Model Data]     

In between these two keywords is the package model data itself.
The data to be supplied is a set of 3 matrices: the resistance (R),
inductance (L), and capacitance (C) matrices.  Each matrix may be 
formatted differently (see below).  A special keyword is used to
mark the beginning of each new matrix:

|==============================================================================
|
|    Keywords:  [Resistance Matrix], [Inductance Matrix], [Capacitance Matrix]
|
|    Required:  [Resistance Matrix] is optional.  If it's not present, its
|               entries are assumed to be zero.  [Inductance Matrix] and
|               [Capacitance Matrix] are required.
|
| Description:  These are used to mark the beginning of a matrix, and to
|               specify how the matrix data will be formatted.
|
| Usage Rules:  There are 3 choices for the Format_Keyword:
|               Banded Matrix, Sparse Matrix, and Full Matrix. 
|
|               After each of these keywords, the matrix data will follow
|               in the appropriate format.
|
|               These formats are described in detail below.
|
|------------------------------------------------------------------------------
|
[Resistance Matrix] Format_Keyword
[Inductance Matrix] Format_Keyword
[Capacitance Matrix] Format_Keyword

C.  Matrix Formats
------------------

For each [Resistance Matrix], [Inductance Matrix], or [Capacitance
Matrix] a different format may be used for the data.  The choice of
formats is provided to satisfy different simulation accuracy and speed
requirements.  Also, there are many packages in which the resistance
matrix may have no coupling terms at all; in this case, the most
concise format (Banded Matrix) may be used.

One common aspect of all the different formats is that they exploit
the symmetry of the matrices they describe.  This means that the
entries below the main diagonal of the matrix are identical to the
corresponding entries above the main diagonal.  Therefore, only
roughly one-half of the matrix needs to be described.  By convention,
the main diagonal and the UPPER half of the matrix will be provided.

The available formats are Banded Matrix, Sparse Matrix, and Full Matrix.
We describe each of the formats separately below.

In the following, we use the notation [I, J] to refer to the entry in
row I and column J of the matrix.

1.  Full Matrix

When the Full Matrix format is used, the couplings between every pair
of elements will be specified explicitly.  We assume that the matrix
has N rows and N columns.  The Full Matrix is specified one row at a 
time, starting with Row 1 and continuing down to Row N.

Each new row is identified with the Row keyword.

|==============================================================================
|
|     Keyword:  [Row]
|
|    Required:  Yes
|
| Description:  This is used to indicate the beginning of a new row of
|               the matrix.  The Row_Number field must be a positive 
|               integer in the range from 1 up to the number of rows
|               specified in the corresponding [Number of Pins] keyword.
|
| Usage Rules:  This is pretty simple.
|
|------------------------------------------------------------------------------
|
[Row]          Row_Number

Following a [Row] keyword is a block of numbers which represent the
entries for that row.  Suppose that the current row is number M.  Then
the first number listed is the diagonal entry, [M,M].  Following this
are the entries of the upper half of the matrix that belong to row M:
[M, M+1], [M, M+2], ... up to [M,N].

For even a modest-sized package, this data will not all fit on one
line.  Since each line of an IBIS file must be 80 characters long or
less, it is permissible to break the data up with newlines so that
this limit is observed.

An example: suppose the package has 40 pins and that we are currently
working on Row 19.  There will be 1 diagonal entry, plus 40 - 19 = 21
entries in the upper half of the matrix to be specified, for 22 entries
total.  The data might be formatted as follows:

[Row] 19
5.67e-9  1.1e-9  0.8e-9  0.6e-9  0.4e-9  0.2e-9   0.1e-9   0.09e-9
8e-10    7e-10   6e-10   5e-10   4e-10   3e-10    2e-10    1e-10
9e-11    8e-11   7e-11   6e-11   5e-11   4e-11

In the above example, the entry 5.67e-9 is on the diagonal of row 19.

It will be observed that Row 1 always has the most entries, and that
each successive row has one fewer entry than the last; the last row
will always have just a single entry.

2.  Banded Matrix

A Banded Matrix is one whose entries are guaranteed to be zero if they
are farther away from the main diagonal than a certain distance, known
as the "bandwidth."  Again let the matrix size be N, and let the bandwidth
be B.  An entry [I,J] of the matrix will be zero if

 | I - J | > B

where |.| denotes the absolute value.

The bandwidth for a Banded Matrix must be specified using the [Bandwidth]
keyword:

|==============================================================================
|
|     Keyword:  [Bandwidth]
|
|    Required:  Yes (for banded matrices only)
|
| Description:  This is used to indicate the bandwidth of the matrix.
|               The BW field below must be a nonnegative integer.  This 
|               keyword occurs after the [Resistance Matrix], etc. 
|               keyword, and BEFORE the matrix data is given.
|
| Usage Rules:  This is pretty simple.
|
|------------------------------------------------------------------------------
|
[Bandwidth]     BW

The banded matrix is specified one row at a time, starting with row 1
and working up to higher rows.  Each row is marked with the [Row]
keyword, as above.  As before, symmetry is exploited: entries below
the main diagonal are never given.

The first row will only need to specify the entries [1,1] through
[1,1+B] since any other entries are guaranteed to be zero.  The second
row will need to specify the entries [2,2] through [2, 2+B], and so
on.  In general, for row M the entries [M,M] through [M,M+B] are
given.

Unlike the Full Matrix, each successive row will _typically_ have the
same number of entries, except for the last few rows.  When M + B finally
exceeds the size of the matrix N, then the number of entries in each row
will start to decrease; the last row (row N) will have only 1 entry. 

As in the Full Matrix, if all the entries for a particular row will
not fit into a single 80-character line, the entries may be broken
across several lines.

It is possible to use a bandwidth of 0 to specify a diagonal matrix
(a matrix with no coupling terms.)  This is sometimes useful for 
resistance matrices.

3.  Sparse Matrix

The final option for specifying the entries of the matrix is the Sparse
Matrix format.  A sparse matrix is expected to consist mostly of zero-
valued entries, except for a few nonzeros.  Unlike the Banded Matrix,
there is no restriction on where the nonzero entries may occur.  This
is useful in certain situations, such as for Pin Grid Arrays (PGA's.)

As usual, symmetry may be exploited to reduce the amount of data by
eliminating from the matrix any entries below the main diagonal.

An N x N Sparse Matrix is specified one row at a time, starting with 
row 1 and continuing down to row N.  Each new row is marked with [Row]
keyword, as in the other matrix formats.

Data for the entries of a row is given in a slightly different format,
however.  For the entry [I, J] of a row, it is necessary to explicitly
list the column index J before the value of the entry is given.  This
serves to indicate to the parser where the entry is put into the matrix.
The proper location is not otherwise obvious because of the lack of 
restrictions on where nonzeros may occur.  Each (Index, Value) pair is
listed upon a separate line.  An example follows.  Suppose that row 10
has nonzero entries [10,10],  [10,11], [10,15] and [10,25].  The 
following row data would be provided:

[Row] 10
| Index  Value
10  5.7e-9
11  1.1e-9
15  1.1e-9
25  1.1e-9

Please note that each of the column indices listed for any row must be 
greater than or equal to the row index, because they always come from
the upper half of the matrix.

Also, please note that it is again necessarily the case that the N'th
row of an N x N matrix will have just a single entry (the diagonal 
entry.)

D.  An Example

The following is an example of a package model file following the
above specifications.  For the sake of brevity, an 8-pin package has
been described.  For purposes of illustration, each of the matrices is
specified using a different format.

|
|================================================================
|
[IBIS Ver] 2.0
[File Name] example.pkg
[File Rev] 0.1
[Date]  16 March 1994
[Source] imaginary data from K-mart field solver software
[Notes]  Example for a BIRD on couplings in packaging
[Disclaimer]    The models given below may not represent any physically
  realizable 8-pin package.  They are provided solely for
  the purpose of illustrating the .pkg file format.
   Read at your own risk.  See your dentist regularly. 
|
|================================================================
|
[Define Package Model] SMT-cer-8-pin
[Manufacturer]  Bozonics Semiconductors Ltd.
[OEM]   Pkgs'R'Us
[Description]  8-Pin ceramic SMT package
[Number of Pins] 8
[Model Data]
| 
| The resistance matrix for this package has no coupling
|
[Resistance Matrix] Banded Matrix
[Bandwidth]  0
[Row] 1
10.0
[Row] 2
15.0
[Row] 3
15.0
[Row] 4
10.0
[Row] 5
10.0
[Row] 6
15.0
[Row] 7
15.0
[Row] 8
10.0
|
| The inductance matrix has loads of coupling
|
[Inductance Matrix] Full Matrix
[Row] 1
3.04859e-07  4.73185e-08   1.3428e-08  6.12191e-09
1.74022e-07  7.35469e-08  2.73201e-08  1.33807e-08 
[Row] 2
3.04859e-07  4.73185e-08   1.3428e-08  7.35469e-08
1.74022e-07  7.35469e-08  2.73201e-08 
[Row] 3
3.04859e-07  4.73185e-08  2.73201e-08  7.35469e-08
1.74022e-07  7.35469e-08
[Row] 4
3.04859e-07  1.33807e-08  2.73201e-08  7.35469e-08
1.74022e-07 
[Row] 5
4.70049e-07  1.43791e-07  5.75805e-08  2.95088e-08 
[Row]   6
4.70049e-07  1.43791e-07  5.75805e-08 
[Row] 7
4.70049e-07  1.43791e-07 
[Row] 8
4.70049e-07 
|
| The capacitance matrix has sparse coupling 
|
[Capacitance Matrix] Sparse Matrix
[Row] 1
1 2.48227e-10
2 -1.56651e-11
5 -9.54158e-11
6 -7.15684e-12
[Row] 2
2 2.51798e-10
3 -1.56552e-11
5 -6.85199e-12
6  -9.0486e-11
7 -6.82003e-12
[Row] 3
3 2.51798e-10
4 -1.56651e-11
6 -6.82003e-12
7  -9.0486e-11
8 -6.85199e-12 
[Row] 4
4 2.48227e-10
7 -7.15684e-12
8 -9.54158e-11 
[Row] 5
5 1.73542e-10
6 -3.38247e-11
[Row] 6
6 1.86833e-10
7 -3.27226e-11
[Row] 7
7 1.86833e-10
8 -3.38247e-11 
[Row]  8
8 1.73542e-10 
|
|  All done!
|
[End Model Data]

*******************************************************************************

ANALYSIS PATH/DATA THAT LED TO SPECIFICATION:

This is an attempt to add more electromagnetic information to the
packaging models.  The main element missing from the original IBIS
packaging models are couplings between pins.  These couplings can
change the effective inductances of power and ground pins, affecting
the amount of ground bounce that occurs in the model.  The couplings
can also lead to increased noise between signal pins.  For these
reasons (and more), they are worth considering. 

There are many ways one might approach the description of the coupling
information.  The choices made will certainly impact the efficiency
and the accuracy of the signal integrity simulations that are carried
out.  To meet a wide variety of needs, several different options have
been provided for specifying the coupling data.  Full-matrix formats
may be used for maximum electromagnetic rigorousness, or descriptions
with limited amounts of coupling can be used to speed up simulation.

The data for package models has been separated from the nonlinear,
mostly-memoryless I-V curve information in the .ibs file, and has been
put into a separate .pkg file.  This approach is intended to minimize the
impact on tools that currently read and write .ibs files.  However, it
would not be out of the question to keep all of this information in
the .ibs file, too.  The spec could be rewritten easily to allow this.

Note that this is a departure from standard IBIS practice--in .ibs
files, the "model" names, at least, are not exported from the file
that contains them.  Keeping this data in separate files leads to the
possibility of naming conflicts across different vendors' model files.
Hopefully this can be managed by using long names for package models.

What is still missing from this spec is the ability to handle models
with arbitrary topologies of RLC circuit elements.  This would be
useful, for example, in the modelling of large packages where the
traces are long enough to exhibit some "transmission-line" effects.
In these cases, it would be useful to be able to break the single
series RL element up into a ladder (or some more complex structure) of
RLC elements.  This capability will become more important as the
signal speeds of the IC's rise.  Therefore, this spec may need to be
overhauled and updated at some time in the not-too-distant future.

It is certainly true that the Full Matrix format is a special case
of both the Banded Matrix and the Sparse Matrix formats.  It can
be regarded as "syntactic sugar" which may or may not appeal to 
everyone.

*******************************************************************************

ANY OTHER BACKGROUND INFORMATION:

The classic electromagnetics text by Ramo, Whinnery and Van Duzer
provides some nice background theory on how one goes about defining
resistance, inductance and capacitance values for arbitrary
structures, and also describes the high-frequency limitations to this
approach.

*******************************************************************************