Bird 11, IBIS_CHK V/I sign checking

From: Hobbs, Will <Will_Hobbs@ccm2.jf.intel.com>
Date: Wed Mar 30 1994 - 17:54:36 PST

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

                      Buffer Issue Resolution Document (BIRD)

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

DATE SUBMITTED: 03-28-94
DATE REVISED: 03-28-94
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 verbiage 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 then 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 significant change of slope of current 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)

     *** example with negative to positive 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)

        *** 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)

        *** ECL example with sign errors in the Pulldown table
        [Pulldown]
        | Voltage I(typ) I(min) I(max)
           -5.0V -40.0m -34.0m -45.0m
           -4.0V -39.0m -33.0m -43.0m
            0.0V 0.0m 0.0m 0.0m
            5.0V 40.0m 34.0m 45.0m
           10.0V 45.0m 40.0m 49.0m -> V/I table is increasing
                                                  (45 > -40)
        [Pullup]
        | Voltage I(typ) I(min) I(max)
           -5.0V 32.0m 30.0m 35.0m
           -4.0V 31.0m 29.0m 33.0m
            0.0V 0.0m 0.0m 0.0m
            5.0V -32.0m -30.0m -35.0m
           10.0V -38.0m -35.0m -40.0m -> V/I table is decreasing
                                                  (-38 < 32)
        [GND_clamp]
        | Voltage I(typ) I(min) I(max)
          -5.0V -3900.0m -3800.0m -4000.0m
          -0.7V -80.0m -75.0m -85.0m
          -0.6V -22.0m -20.0m -25.0m
          -0.5V -2.4m -2.0m -2.9m
          -0.4V 0.0m 0.0m 0.0m
           5.0V 0.0m 0.0m 0.0m -> V/I table is increasing
                                                 (0 is > -3900)
        [POWER_clamp]
        | Voltage I(typ) I(min) I(max)
          -5.0V 4450.0m NA NA
          -0.7V 95.0m NA NA
          -0.6V 23.0m NA NA
          -0.5V 2.4m NA NA
          -0.4V 0.0m NA NA
           0.0V 0.0m NA NA -> V/I table is decreasing
                                                 (0 is < 4450)

     *** 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
  300.00mV -5.72mA -4.31mA -7.80mA
  400.00mV -7.52mA -5.66mA -10.26mA
  500.00mV -9.26mA -6.96mA -12.66mA
    1.80V -26.79mA -19.79mA -37.25mA
    1.90V -27.74mA -20.46mA -38.64mA
    2.00V -28.64mA -21.08mA -39.95mA
    2.10V -29.47mA -21.66mA -41.19mA
    2.20V -30.25mA -22.19mA -42.35mA
    4.60V -37.62mA -26.97mA -54.00mA
    4.70V -37.76mA -27.06mA -54.20mA
    4.80V -37.89mA -27.15mA -54.39mA
    4.90V -38.01mA -27.24mA -54.58mA
    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
                                                               
IF the model is any of the following types:(Input_ECL, Output_ECL, I/O_ECL)
           {
           Verify that:
             - Pullup V/I table has increasing current
             - POWER_clamp V/I table has decreasing current
             - Pulldown V/I table has increasing 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.

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 the
          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 do not affect the parsing of older IBIS files.
          This only applies to MAJOR revisions in the specification, like
          2.0 coming 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?).
******************
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.
********************
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.
******************************
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 tables are tabulated referenced to Vcc using
       Vtable = Vcc - Vout.
I am sure this will become another area of confusion, justifying a test.
**************************
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.

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.

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.
*******************************
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 explainingthan
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?

*******************************************************************************
Received on Wed Mar 30 17:57:06 1994

This archive was generated by hypermail 2.1.8 : Fri Jun 03 2011 - 09:52:28 PDT