Subject: IBIS BIRD 11.1 (update)

From: Derrick Duehren <[email-masked]>
Date: Thu, 7 Apr 94 22:12:08 PST

Text item: Text_1

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

                       Buffer Issue Resolution Document  (BIRD)

BIRD ID#:      11.1
ISSUE TITLE:   Improving common error detection in IBIS_CHK program
REQUESTOR:     Kellee Crisafulli, HyperLynx Inc.

DATE SUBMITTED:                       March 28, 1994
DATE REVISED:                         March 28, 1994
DATE ACCEPTED BY IBIS OPEN FORUM:     Pending

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

STATEMENT OF THE ISSUE:
Several common problems with IBIS models are not detected with the present
version of IBIS_CHK.  Two main problems include:
1) Incorrect 'I'(current) signs in the V/I tables.
2) Pullup and POWER_clamp V/I tables are not VCC relative.

This BIRD is directed at problem 1 only.  A 2nd separate BIRD will be generated
to address problem 2.

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

STATEMENT OF THE RESOLVED SPECIFICATIONS:
The following changes apply to version 1.1 and forward versions of the IBIS_CHK
program and including testing of some parameters for BIRD 7.2 for ECL model
types

******************************************************************************
Change 1- Add verbage on current direction.
******************************************************************************
Keywords:    [Pullup], [Pulldown], [GND_clamp], [POWER_clamp]
Required:    Yes, if they exist in the device
Description: The data points under these keywords define the V/I curves of
             the pulldown and pullup structures of an output buffer and the V/I
             curves of the clamping diodes connected to the GND and the POWER
             pins, respectively.  Currents are considered positive when their
             direction is into the component.

******************************************************************************
Change 2- Add detection to IBIS_CHK program for V/I table 'I' sign errors.
******************************************************************************
For each of the following V/I tables: Pullup, Pulldown, POWER_clamp, GND_clamp

1) Find the minimum and maximum voltage points (Vmin, Vmax) in the table.

2) IF:The current in the TYPICAL column corresponding to Vmax is less than
      the current in the TYPICAL column corresponding to Vmin than the table is
      assumed to have decreasing current.
   ELSE: The table is assumed to have increasing current.

Note: This works for all cases of discontinuities unless the magnitude of
      discontinuity is such that this model is in all probability competely
      unrealistic.

Examples:
   *** example with non-monotonic data at the end point
   V:      I:
   0.00    0.0
   4.90   50.0ma
   4.91   49.9ma
   4.93   56.7ma
   5.00   3.0ma  -> V/I table has increasing current (3.0 > 0)
                        Vmax = 5.0, I =3.0mA
                        Vmin = 0.0, I =0.0

   *** example with negative to positve voltages with negative first
   V:      I:
  -5.00   -0.1ma
   0.00    0.0
   5.00  100.0ma  -> V/I table has increasing current (100 > -0.1)
                         Vmax = 5.0,  I=100mA
                         Vmin = -5.0, I=-0.1mA

   *** example with table data entered postive voltages first
   V:      I:
   5.00   10.1ma
   0.00    0.0
  -5.00   -10.1ma  -> V/I table has increasing current (10.1 > -10.1)
                          Vmax = 5.0,  I=10.1mA
                          Vmin = -5.0, I=-10.1mA

   *** example with only two entrys
   V:      I:
   0.00    0.0
  -5.00   10.1ma  -> V/I table has decreasing current (0 < 10.1)
                         Vmax = 0.0,  I=0
                         Vmin = -5.0, I=10.1mA

   *** ECL example
   [Pullup]
   Voltage   I(typ)    I(min)    I(max)
   0.0       0         0         0
   0.7       -0.2m     -0.2m     -0.2m
   0.73      -0.4m     -0.4m     -0.4m
   0.75      -0.8m     -0.8m     -0.8m
   0.76      -1.2m     -1.2m     -1.2m
   0.77      -1.6m     -1.6m     -1.6m
   0.8       -4.4m     -4.4m     -4.4m
   0.82      -7.6m     -7.6m     -7.6m
   0.85     -14.2m    -14.2m    -14.2m
   0.9      -30.0m    -30.0m    -30.0m
   1.0      -58.0m    -50.0m    -68.0m  -> V/I table has decreasing current
                                           ( -58 < 0)
                                               Vmax = 1.0,  Ityp=-58mA
                                               Vmin = 0,    Ityp=0

   [Pulldown]
   Voltage   I(typ)    I(min)    I(max)
   0.0        0         0         0
   1.6       -0.2m     -0.2m     -0.2m
   1.62      -0.4m     -0.4m     -0.4m
   1.64      -0.6m     -0.6m     -0.6m
   1.65      -0.8m     -0.8m     -0.8m
   1.66      -1.2m     -1.2m     -1.2m
   1.67      -1.6m     -1.6m     -1.6m
   1.68      -2.4m     -2.4m     -2.4m
   1.69      -3.2m     -3.2m     -3.2m
   1.70      -4.4m     -4.4m     -4.4m
   1.72      -7.4m     -7.4m     -7.4m
   1.75     -14.2m    -14.2m    -14.2m
   1.8      -30.5m    -30.5m    -30.5m
   1.9      -65.0m    -60.0m    -75.0m  -> V/I table has decreasing current
                                           ( -65 < 0)
                                               Vmax = 1.9, Ityp=-65mA
                                               Vmin = 0.0, Ityp= 0

*** An abreviated INTEL model for a CMOS output
|
[Pulldown]
|   Voltage         I(typ)          I(min)          I(max)
   -5.00V         -38.70mA        -29.47mA        -51.22mA
   -1.00V         -24.88mA        -19.18mA        -32.90mA
   -0.50V         -14.35mA        -11.06mA        -19.05mA
    0.00V         -11.84pA       -554.66pA        -11.03pA
  100.00mV          3.20mA          2.47mA          4.27mA
  200.00mV          6.24mA          4.80mA          8.30mA
    4.90V          38.68mA         29.45mA         51.18mA
    5.00V          38.70mA         29.47mA         51.22mA
   10.00V          39.96mA         30.37mA         53.06mA -> V/I table
                                                              increasing
[GND_clamp]
|   Voltage         I(typ)          I(min)          I(max)
   -5.00V          -680.00mA        NA              NA
   -1.10V          -75.50mA         NA              NA
 -600.00mV        -950.00uA         NA              NA
 -500.00mV         -78.00uA         NA              NA
 -200.00mV           0.00pA         NA              NA
 -100.00mV           0.00pA         NA              NA
    0.00V            0.00pA         NA              NA
    5.00V            0.00pA         NA              NA  -> V/I table increasing
                                                           (0 >-680)
[Pullup]
|   Voltage         I(typ)          I(min)          I(max)
   -5.00V          38.14mA         27.33mA         54.76mA
   -4.50V          37.49mA         26.87mA         53.79mA
   -1.00V          17.13mA         12.81mA         23.55mA
   -0.50V           9.26mA          6.96mA         12.66mA
    0.00V          13.57pA        613.51pA         11.04pA
  100.00mV         -1.96mA         -1.48mA         -2.67mA
  200.00mV         -3.87mA         -2.92mA         -5.27mA
  500.00mV         -9.26mA         -6.96mA        -12.66mA
    1.80V         -26.79mA        -19.79mA        -37.25mA
    1.90V         -27.74mA        -20.46mA        -38.64mA
    4.60V         -37.62mA        -26.97mA        -54.00mA
    4.70V         -37.76mA        -27.06mA        -54.20mA
    5.00V         -38.14mA        -27.33mA        -54.76mA
   10.00V         -44.52mA        -33.72mA        -61.15mA   -> V/I table
                                                                decreasing
[POWER_clamp]
|   Voltage         I(typ)          I(min)          I(max)
   -5.00V           1.05A           NA              NA
   -1.10V          79.00mA          NA              NA
   -1.00V          54.00mA          NA              NA
 -900.00mV         29.00mA          NA              NA
 -800.00mV         10.40mA          NA              NA
 -200.00mV          0.00uA          NA              NA
 -100.00mV          0.00uA          NA              NA
    0.00V           0.00pA          NA              NA        -> V/I table
                                                                 decreasing

3)  If the model is any of the following types:(Input_ECL, Output_ECL, I/O_ECL)

    {
    Verify that:
    - Pullup      V/I table has decreasing current
    - POWER_clamp V/I table has decreasing current
    - Pulldown    V/I table has decreasing current
    - GND_clamp   V/I table has increasing current
    }
  ELSE
    {
    Verify that:
    - Pullup      V/I table has decreasing current
    - POWER_clamp V/I table has decreasing current
    - Pulldown    V/I table has increasing current
    - GND_clamp   V/I table has increasing current
    }

4) If any table moves in the wrong direction report the following error message:

'Error found in xxx V/I table at line number nnn!'.  Where xxx is one of the
following: Pullup, Pulldown, POWER_clamp, GND_clamp.   Where nnn is the line
number.

Note: It is acceptable to stop the parser after the first line found with this
error.

******************************************************************************
Change 3- Add a header comment statement at the TOP of the IBIS_CHK program
          to insure that new changes to the IBIS_CHK program donot break tests
          that worked in old MAJOR versions.  This approach makes the program
          larger however it insures the parser always works the same on older
          versions of IBIS.  This apporach uses more memory, but has the reward
          of low maintaining costs.  The IBIS_CHK program is very small and
          would not be effected by this until many revisions have occured.
******************************************************************************

NOTICE TO ANY PERSON MODIFING THIS PROGRAM!
-------------------------------------------
This program SHALL NOT BE MODIFIED unless there is an associated IBIS BIRD.
Said BIRD shall be agreed upon by IBIS committee vote.  Only the currently
elected IBIS_CHK 'czar and programmer' is allowed to modify the source code. The
present CZAR is Jon Powell (April 1994).  The IBIS committee may also hire
programmers from time to time to make major changes to the source code.

Note:  Source licensees are free to modify their own copies of this source code
in any way they choose.  Source licensees shall not redistribute the source code
modified or otherwise.  Source licensing is available from the IBIS open forum.
The IBIS open forum is non-profit.

The code for each MAJOR version of the IBIS_CHK program SHALL NOT BE MODIFIED
when adding code for the next version of the IBIS specification.  Instead
completely new code for all functions and features shall be created.  This may
require duplication of numerous functions.

Each function shall be preceded by VXX_ where XX is the MAJOR version of the
IBIS specification which is being parsed and tested.  A MAJOR version would for
example be 1.x going to 2.x.  A MINOR version would for example be 1.1 to 1.2.
Functions using the above syntax would look as follows:  V01_GetValue

MINOR revisions DO NOT required new code.

Startup code shall be provided at the top of the program which reads the
version number from the IBIS file and runs the portion of the program
corresponding to that MAJOR version.  Code which is used only by the program
startup function is not duplicated.

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

ANALYSIS PATH/DATA THAT LED TO SPECIFICATION:

Change 1) Suggested from inputs of several people in Email and at previous IBIS
          meetings.

Change 2) Defective IBIS models are slipping through the IBIS_CHK program.
          A method for determining sign errors in V/I table was determined based
          on inputs from several people including:
              Kellee Crisafulli, HyperLynx
              Jon Powell, Quad Design
              Arpad, Intel
              Bob Ward, TI
              Bob Ross, Interconnectix
              Maah Sango, Contec
I reviewed all the comments that have been submitted and I believe this method
will work with all conditions mentioned so far.

Change 3) I am proposing a method of insuring that future IBIS_CHK
          modifications donot effect the parsing of older IBIS files. This only
          applies to MAJOR revisions in the specification, like 2.0 comming up.
          This would not apply to this update, it would however be added to the
          program header information now and would apply to all future MAJOR
          updates to the IBIS specification.

******************************************************************************
ANY OTHER BACKGROUND INFORMATION:

Comments about EMAIL leading up to this BIRD
--------------------------------------------
From: Jon Powel, qdt
      Cases that will not work for proposed algorithm
      V:    I:
      0.0   0.0
      3.5   50.0
      3.51  49.9
      3.52  49.8
      3.53  49.7
      5.0   100.0

any OC any OD

If current is not negative at GND for the pullup then it cannot pullup? (except
for ECL OC etc?).

Action: problems fixed in BIRD 11.0
******************
From: Arpad, Intel
   What happens if there are equal number of increases and decreases in a curve?
   Most of the curves I am generating lately do that and I do not think I am
   doing it wrong.
Action: problems fixed in BIRD 11.0
********************
Bob Ward, TI
   I think the proposed method of current sign determination might run into
   trouble in at least two cases:
   One is when there are exactly the same number of rising and falling segments.
   The other is the same problem one runs into testing for monotonicity
   of the independent variable.  That problem is that very small oscillations
   occur on the "flat" part of a numerically generated curve, not so much
   because they are real, but because of the nature of small numbers, finite
   precision, and floating point round off.
Action: Problems fixed in BIRD 11.0
******************************
Bob Ross, Interconnectix, Inc.
   If this proposal is adopted, it would apply to just IBIS Version1.1.  The
   polarity rules do not comply with proposed IBIS extensions BIRDS 3 and 4 for
   ECL type devices.  For ECL type devices, the polarities of both the Pullup
   and Pulldown tables will go in the same (decreasing) direction because BOTH
   are tabulated referenced to Vcc using
        Vtable = Vcc - Vout.
   I am sure this will become another area of confusion, justifying a test.
Action: Problem fixed BIRD 11.0
**************************
Maah Sango, Contec Microelectronics USA Inc
2. I agree with Bob Ross that the proposed scheme for enforcing
   data integrity will not work for ECL, nor for a few other device types. (See
   item 3 of the proposal).  Either the "pullup" or the "pulldown" data for the
   ECL and other device types will violate these requirements.
Action: Problem fixed Bird 11.0

3. The proposed scheme, item 3, will not always work even for CMOS unless we use
   only the magnitudes of the currents. Existing data for ageing (old) devices
   is sometimes presented with positive currents and sometimes with negative
   currents for CMOS pullup devices.
   Action: Problem fixed Bird 11.0

4. I am not sure that checking only the two end points will always guarantee the
   conclusions we are assuming here. Current(I) data in between these two points
   may increase or decrease and still be perfectly valid, particularly if we
   think of device types other than CMOS.
Action: Numerous examples cited, none found that present a problem
*******************************
Arpad, Intel
   If we JUST want a polarity checker for the MOST COMMON error, I have another
   most common error to check for:  VCC-relative!  That needed more explaining
   than the polarity of the current in my experience, and I have seen more
   people being confused about that.  Should that also be checked for then?
   Action: Another Bird needs to be generated separate from Bird 11
******************************************************************************
Changes from the April-1-94 IBIS meeting
BIRD 11, IBIS_CHK Changes
   Kellee Crisafulli proposes three changes in this BIRD, each related to the
   sign of VI table data, which has proven to be a common pitfall among new
   modelers.  First, the BIRD proposes adding a comment to the IBIS
   specification discussing the sign of VI table data; second, add checking to
   ibis_chk for the correct sign, using the algorithm tuned through reflector
   feedback; and third, add a note to the ibis_chk source saying a BIRD is
   required to change the source.

   Proposed changes 1 and 3 appear OK to group, with the additional comment that
   source licensees are free to modify their own source, but not to post the
   result.  Only the ibis_chk czar (Jon Powell) can post modified versions of
   ibis_chk, and that requires a ratified BIRD to initiate.

   AR:Kellee, change the proposed ibis_chk notice to indicate that it is OK
   to change your own source code, but not the global one without a supporting
   BIRD.
Action: Done

   Regarding change 2, there is controversy about the sign of the ECL example.
   Kellee pulled the example out of the IBIS V1.1 spec, which was a CMOS
   example, and indicated that if this was an ECL example then there would be a
   sign error because for ECL pulldown, VI is Vcc-V per BIRD 4. Kellee feels
   that right thing to do is to change the sign and use ECL type data and
   present a correct ECL table, but doesn't have ECL data.  Kumar has ECL data
   which he offered to supply for inclusion in the BIRD.

   AR:Kumar, post ECL model to reflector, Kellee, use that data in the BIRD.
Action: I have incorporated the model.

AR Kellee, Two people noted that the directions of the current tests for the ECL
   were wrong.  Kellee thought they were correct during the phone conversation.

Action: I was wrong, and have changed them to correct the problem.