Subject: IBIS BIRD49.1 ADD MODEL DYNAMIC CLAMPS

From: [email-masked] (Bob Ross)
Date: Fri, 1 May 98 17:24:17 PDT

IBIS folks:

Per the April 24, 1998 meeting and subsequent considerations, BIRD49.1 is
issued so that the dynamic clamp functionality can be set by an external
source.  In particular, the dynamic clamp can be on before the net changes
state.

To accomplish this, an additional note is added regarding using a negative
time with the usage [GND Pulse Table] and [POWER Pulse Table] descriptions
and also the optional usage of the V_trigger_h and V_trigger_l thresholds.

Changes to BIRD49 along with some editorial changes are noted by |* lines.

Bob Ross
Interconnectix/Mentor Graphics

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

BIRD ID#:       49.1
ISSUE TITLE:    Add Model Dynamic Clamps
REQUESTER:      Neven Orhanovic, Bob Ross, Mentor G., Arpad Muranyi, Intel
DATE SUBMITTED: 4/2/98, 5/1/98
DATE ACCEPTED BY IBIS OPEN FORUM: Pending

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

STATEMENT OF THE ISSUE:

A novel type of termination technique is used in today's integrated circuits.
The termination consists of a pair of built in dynamic clamps whose V-I curves 
change with time. The clamp is switched "on" when needed and switched 
"off" otherwise (to conserve power). When the clamp is switched "on" its V-I 
curve provides more clamping than a regular static clamp and when it is 
turned "off" it behaves like a normal clamp. 

The "on" switching of the dynamic clamps can be triggered by an input signal 
crossing a triggering threshold or by some external clock. The "off" switching 
can be triggered by a built in timer or an external clock.

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

STATEMENT OF THE RESOLVED SPECIFICATIONS:

The dynamic clamp functionality is added in the new Section 6a:

| Dynamic Clamp:
|
| This section introduces the dynamic clamp add model functionality.  Two
| new keywords [GND Pulse Table] and [Power Pulse Table] are defined.  Then
| and example is provided for a complete dynamic clamp model.
|
|=============================================================================
|     Keyword:  [GND Pulse Table], [POWER Pulse Table]
|    Required:  No
| Description:  Used to dynamically specify the offset voltage of added [GND
|               Clamp] and [POWER Clamp] tables when the [Model] adds the
|               dynamic clamp functionality.
|
| Usage Rules:  Each [GND Pulse Table] and [POWER Pulse Table] keyword
|               introduces a table of time vs. voltage points that describe
|               the shape of an offset voltage from the [GND Clamp Reference]
|               voltage (or default ground) or the [POWER Clamp Reference]
|               voltage (or default [Voltage Range] voltage).  These
|               time/voltage points must start and end at the same value.
|
|               The table itself
|               consists of one column of time points, then three columns of
|               voltage points in the standard typ, min, and max format.  The
|               four entries must be placed on a single line and must be
|               separated by at least one white space or tab character.  All
|               four columns are required.  However, data is only required in
|               the typical column.  If minimum or maximum data is not
|               available, use the reserved word "NA".  The first value in the
|*               time column needs to be '0' or a negative value.  A negative
|*               value denotes that the table will take the preset position at
|*              time "0" when the simulator pulse is initiated.  The purpose
|*              for this is described later.  Time values
|*              must increase as one
|               parses down the table.  The waveform table can contain a
|               maximum of 100 data points.  Only one [GND Pulse Table] and
|               one [POWER Pulse Table] are allowed per model.
|
|               A pulse table must include the entire waveform; i.e., the
|               first entry (or entries) in a voltage column must be equal
|               to the last entry.  Each table must contain at least two
|               entries.  Thus, numerical values are required for the first
|               and last entries of any column containing numerical data.
|
|              The [GND Pulse Table] and [POWER Pulse Table] keywords are used.
|              The subparameter under [Add Model Spec] for V_trigger_f checks
|              when the pulse at the die passes the trigger voltage.  At that
|              time, the [GND Pulse Table] is invoked and the 
|              dynamic [GND Clamp] shifts its reference by the specified
|              offset voltage.  Similarily, the V_trigger_f subparameter gives
|              the voltage of the rising edge of the die at which the [POWER
|              Pulse Table] is invoked and the dynamic [POWER Clamp] table 
|              begins shifting its reference by the specified offset voltage.
|
|              A dynamic clamp is modeled by a V-I curve that is offset 
|              (translated) along the voltage axis with the voltage waveform 
|              given in the [GND Pulse Table] or [POWER Pulse Table] section
|              The resulting dynamic V-I table can be expressed as
|     
|                   I = f( V - V_pulse(t) ),
|
|              where V_pulse(t) is the offset voltage waveform described by 
|              the pulse table and f(V) is the resulting V-I curve 
|              of the clamp in its off state, corresponding to the data 
|              given in the [GND Clamp] or [POWER Clamp] keyword.
|               
|              For example, once the voltage on the clamp crosses the
|              triggering threshold V_trigger_f, the [GND Pulse Table] data
|              is used to offset the V-I curve obtained 
|              from the [GND Clamp] section. The dependence of the offset
|              pulse on the clamp voltage is illustrated below.
|
|                                 V_trigger_f
|
|            o o o o           
|                    o
|                     o
|                      o -------
|                      |o       ^ 
|                      | o      | V_trigger_f
|                      |  o     v               time
|                      |    o o-------------------->
|                      |
|                      |              
|                      |             [GND Pulse Table]
|                      |      Clamp offset voltage vs. time.
|                      |
|                      |             o o o o    
|                      |            o        o     
|                      |           o           o  
|                      |          o              o 
|                      |         o                 o 
|                      |        o                    o          time
|                      o o o o o                       o o o -------->
|
|                      ^
|                      |_  Pulse data is used from this moment on
|                          to offset the V-I curve.
|
| The V_trigger_r and [POWER Pulse Table] operate in a similar manner.
| However, offset voltage which fall into the normal operation region are
| given by negative voltage values.
|*
|* A mode of operation that does not depend on the V_trigger_f or V_trigger_r
|* is described next.  The intent is to allow the simulation of the dynamic
|* clamp effect when the dynamic clamp operation is controlled by an external
|* control signal to activate it prior to when the signal on the net arrives.
|*
|* When either the [GND Pulse Table] or [POWER Pulse Table] pulse begin with
|* a time value less than '0', its operation is under these rules.  The
|* voltage setting at the first negative time value denotes a voltage offset
|* value before the dynamic clamp is turned on.  The voltage value at time
|* 'O' is the value at the time the simulation output pulse of a positive
|* or a negative polarity is initiated.  If the simulation pulse is of a
|* positive polarity for a driver change from the low to the high state,
|* the [POWER Clamp Table] is "initialized" to the voltage value at time '0'.
|* Similarily, if the simulation pulse is of a negative polarity for a
|* driver change from the high to the low state, the [GND Clamp Table] is
|* "initialized to the voltage value at time '0'.
|*
|* The corresponding V_trigger_r or V_trigger_l subparameter is ignored and
|* may be omitted.
|------------------------------------------------------------------------------
|
*| Example of Dynamic_clamp Model with both dynamic GND and POWER clamps:
|
[Model]       Dynamic_Clamp_1
Model_type    Dynamic_clamp
C_comp        0 0 0
|
[Add Model Spec]
|   Subparameter          typ        min        max
|
V_trigger_f               1.4        1.2        1.6  | Falling edge trigger
V_trigger_r               3.6        2.9        4.3  | Rising edge trigger
|
[GND Pulse Table]                                    | GND Clamp offset table
|    Time          V(typ)       V(min)        V(max)
|
|       0             0            0             0
|    1e-9             0            0             0
|    2e-9           0.9          0.8           1.0
|   10e-9           0.9          0.8           1.0
|   11e-9             0            0             0 
|
[GND Clamp]                                          | Table to be offset
|
|  Voltage        I(typ)       I(min)        I(max)
|
    -5.000     -3.300e+01    -3.000e+01    -3.500e+01
    -4.000     -2.300e+01    -2.200e+01    -2.400e+01
    -3.000     -1.300e+01    -1.200e+01    -1.400e+01
    -2.000     -3.000e+00    -2.300e+00    -3.700e+00
    -1.900     -2.100e+00    -1.500e+00    -2.800e+00
    -1.800     -1.300e+00    -8.600e-01    -1.900e+00
    -1.700     -6.800e-01    -4.000e-01    -1.100e+00
    -1.600     -2.800e-01    -1.800e-01    -5.100e-01
    -1.500     -1.200e-01    -9.800e-02    -1.800e-01
    -1.400     -7.500e-02    -7.100e-02    -8.300e-02
    -1.300     -5.750e-02    -5.700e-02    -5.900e-02
    -1.200     -4.600e-02    -4.650e-02    -4.550e-02
    -1.100     -3.550e-02    -3.700e-02    -3.450e-02
    -1.000     -2.650e-02    -2.850e-02    -2.500e-02
    -0.900     -1.850e-02    -2.100e-02    -1.650e-02
    -0.800     -1.200e-02    -1.400e-02    -9.750e-03
    -0.700     -6.700e-03    -8.800e-03    -4.700e-03
    -0.600     -3.000e-03    -4.650e-03    -1.600e-03
    -0.500     -9.450e-04    -1.950e-03    -3.650e-04
    -0.400     -5.700e-05    -2.700e-04    -5.550e-06
    -0.300     -1.200e-06    -1.200e-05    -5.500e-08
    -0.200     -3.000e-08    -5.000e-07     0.000e+00
    -0.100      0.000e+00     0.000e+00     0.000e+00
     0.000      0.000e+00     0.000e+00     0.000e+00
     5.000      0.000e+00     0.000e+00     0.000e+00
|
[POWER Pulse Table]                                 | POWER Clamp offset table                               |
|    Time          V(typ)       V(min)        V(max)
|
|       0             0            0             0
|    1e-9             0            0             0
|    2e-9          -0.9         -1.0          -0.8
|   10e-9          -0.9         -1.0          -0.8
|   11e-9             0            0             0 
|
[POWER Clamp]                                       | Table to be offset
|
|  Voltage        I(typ)        I(min)        I(max)
|
    -5.000      1.150e+01     1.100e+01     1.150e+01
    -4.000      7.800e+00     7.500e+00     8.150e+00
    -3.000      4.350e+00     4.100e+00     4.700e+00
    -2.000      1.100e+00     8.750e-01     1.300e+00
    -1.900      8.000e-01     6.050e-01     1.000e+00
    -1.800      5.300e-01     3.700e-01     7.250e-01
    -1.700      2.900e-01     1.800e-01     4.500e-01
    -1.600      1.200e-01     6.850e-02     2.200e-01
    -1.500      3.650e-02     2.400e-02     6.900e-02
    -1.400      1.200e-02     1.100e-02     1.600e-02
    -1.300      6.300e-03     6.650e-03     6.100e-03
    -1.200      4.200e-03     4.750e-03     3.650e-03
    -1.100      2.900e-03     3.500e-03     2.350e-03
    -1.000      1.900e-03     2.450e-03     1.400e-03
    -0.900      1.150e-03     1.600e-03     7.100e-04
    -0.800      5.500e-04     9.150e-04     2.600e-04
    -0.700      1.200e-04     4.400e-04     5.600e-05
    -0.600      5.400e-05     1.550e-04     1.200e-05
    -0.500      1.350e-05     5.400e-05     1.300e-06
    -0.400      8.650e-07     7.450e-06     4.950e-08
    -0.300      6.250e-08     7.550e-07     0.000e+00
    -0.200      0.000e+00     8.400e-08     0.000e+00
    -0.100      0.000e+00     0.000e-08     0.000e+00
     0.000      0.000e+00     0.000e+00     0.000e+00
|
|==============================================================================

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

ANALYSIS PATH/DATA THAT LED TO SPECIFICATION:

The proposal is designed to retain as much of the existing IBIS clamp syntax 
as possible. The dynamic clamp V-I curve tables follow all of the 
conventions of the existing V-I tables. 

The overall modeling approach is to decompose the dynamic clamp into its
static and dynamic portions. The static part can be modeled by a regular
clamp. The dynamic part is connected to the same rail voltage as its static
part and modeled by a V-I curve that is shifted along the voltage axis by 
the offset voltage pulse. 

BIRD49 replaces the BIRD45.1 proposal of some new keywords shown below, but
preserves the intended functionality.  It also reponses to the comment
that some of the V_trigger subparameters should be expressed in a
typ-min-max format.  The [Model Spec] keyword structure is proposed to
do this.  The replaced structure is below.

|==============================================================================
| Keywords:    [Dynamic GND Clamp], [Dynamic POWER Clamp]
| Required:    No.
| Description: Describes ground and power clamps that are switched on and off 
|              dynamically.
|
| Subparameters: V_trigger, V_trigger_min, V_trigger_max
|
| Usage Rules: The [Dynamic GND Clamp] and [Dynamic PWR Clamp] specifications 
|              contain three subparameters and two keywords. The subparameters 
|              (V_trigger, V_trigger_min, V_trigger_max) specify the threshold 
|              clamp voltage value that causes the clamp to begin switching 
|              from "off" to "on" according to the [Pulse Table] section. 
|              These values correspond to the typical, weak (slow), and strong 
|              (fast) situations. The [Pulse Table] section describes the 
|              switching characteristics of the dynamic clamp, and the [Clamp 
|              Table] section gives the V-I table of the clamp in its "off" 
|              state. This data is used as follows.
|
|              A dynamic clamp is modeled by a V-I curve that is offset 
|              (translated) along the voltage axis with the voltage waveform 
|              given in the [Pulse Table] section. The resulting dynamic V-I 
|              curve can be expressed as
|     
|                   I = f( V - V_pulse(t) ),
|
|              where V_pulse(t) is the offset voltage waveform described by 
|              the [Pulse Table] section and f(V) is the resulting V-I curve 
|              of the clamp in its off state, corresponding to the data 
|              given in the [Clamp Table] section. The [Clamp Table] data 
|              follows the same format and rules as the V-I curve data of 
|              the corresponding regular ground or power clamp ([GND Clamp], 
|              [POWER Clamp]). The [Pulse Table] section describes the offset 
|              voltage waveform and uses the same format as the [Rising 
|              Waveform] and [Falling Waveform] sections in driver models.
|               
|              Once the voltage on the clamp crosses the triggering threshold,
|              the [Pulse Table] data is used to offset the V-I curve obtained 
|              from the [Clamp Table] section. The dependence of the offset
|              pulse on the clamp voltage is illustrated below.
|
|
|                            Clamp voltage vs. time.
|
|                           o o o o 
|                         o
|                       o
|                      o -------
|                     o|       ^ 
|                    o |       | V_trigger
|                   o  |       v            time
|               o o    | ------------------------>
|                      |
|                      |              
|                      |              
|                      |      Clamp offset voltage vs. time.
|                      |
|                      |                      o o o o    
|                      |                    o        o     
|                      |                  o           o  
|                      |          o o o o              o 
|                      |         o                      o 
|                      |        o                        o          time
|                      o o o o o                          o o o -------->
|
|                      ^
|                      |_  Pulse data is used from this moment on
|                          to offset the V-I curve.
|                      
|      
|------------------------------------------------------------------------------
|
| Example: 
|
[Dynamic GND Clamp]
|
V_trigger     = 1.4V
V_trigger_min = 1.2V
V_trigger_max = 1.6V
|
[Pulse Table]
|
|    Time          V(typ)       V(min)        V(max)
|
|       0             0            0             0
|    1e-9             0            0             0
|    2e-9           0.9          0.8           1.0
|   10e-9           0.9          0.8           1.0
|   11e-9             0            0             0 
|
[Clamp Table]
|
|  Voltage        I(typ)       I(min)        I(max)
|
    -5.000     -3.300e+01    -3.000e+01    -3.500e+01
    -4.000     -2.300e+01    -2.200e+01    -2.400e+01
    -3.000     -1.300e+01    -1.200e+01    -1.400e+01
    -2.000     -3.000e+00    -2.300e+00    -3.700e+00
    -1.900     -2.100e+00    -1.500e+00    -2.800e+00
    -1.800     -1.300e+00    -8.600e-01    -1.900e+00
    -1.700     -6.800e-01    -4.000e-01    -1.100e+00
    -1.600     -2.800e-01    -1.800e-01    -5.100e-01
    -1.500     -1.200e-01    -9.800e-02    -1.800e-01
    -1.400     -7.500e-02    -7.100e-02    -8.300e-02
    -1.300     -5.750e-02    -5.700e-02    -5.900e-02
    -1.200     -4.600e-02    -4.650e-02    -4.550e-02
    -1.100     -3.550e-02    -3.700e-02    -3.450e-02
    -1.000     -2.650e-02    -2.850e-02    -2.500e-02
    -0.900     -1.850e-02    -2.100e-02    -1.650e-02
    -0.800     -1.200e-02    -1.400e-02    -9.750e-03
    -0.700     -6.700e-03    -8.800e-03    -4.700e-03
    -0.600     -3.000e-03    -4.650e-03    -1.600e-03
    -0.500     -9.450e-04    -1.950e-03    -3.650e-04
    -0.400     -5.700e-05    -2.700e-04    -5.550e-06
    -0.300     -1.200e-06    -1.200e-05    -5.500e-08
    -0.200     -3.000e-08    -5.000e-07     0.000e+00
    -0.100      0.000e+00     0.000e+00     0.000e+00
     0.000      0.000e+00     0.000e+00     0.000e+00
     5.000      0.000e+00     0.000e+00     0.000e+00
|
|
[Dynamic POWER Clamp]
|
V_trigger     = 3.6V
V_trigger_min = 3.8V
V_trigger_max = 3.4V
|
[Pulse Table]
|
|    Time          V(typ)       V(min)        V(max)
|
|       0             0            0             0
|    1e-9             0            0             0
|    2e-9          -0.9         -1.0          -0.8
|   10e-9          -0.9         -1.0          -0.8
|   11e-9             0            0             0 
|
[Clamp Table]
|
|  Voltage        I(typ)        I(min)        I(max)
|
    -5.000      1.150e+01     1.100e+01     1.150e+01
    -4.000      7.800e+00     7.500e+00     8.150e+00
    -3.000      4.350e+00     4.100e+00     4.700e+00
    -2.000      1.100e+00     8.750e-01     1.300e+00
    -1.900      8.000e-01     6.050e-01     1.000e+00
    -1.800      5.300e-01     3.700e-01     7.250e-01
    -1.700      2.900e-01     1.800e-01     4.500e-01
    -1.600      1.200e-01     6.850e-02     2.200e-01
    -1.500      3.650e-02     2.400e-02     6.900e-02
    -1.400      1.200e-02     1.100e-02     1.600e-02
    -1.300      6.300e-03     6.650e-03     6.100e-03
    -1.200      4.200e-03     4.750e-03     3.650e-03
    -1.100      2.900e-03     3.500e-03     2.350e-03
    -1.000      1.900e-03     2.450e-03     1.400e-03
    -0.900      1.150e-03     1.600e-03     7.100e-04
    -0.800      5.500e-04     9.150e-04     2.600e-04
    -0.700      1.200e-04     4.400e-04     5.600e-05
    -0.600      5.400e-05     1.550e-04     1.200e-05
    -0.500      1.350e-05     5.400e-05     1.300e-06
    -0.400      8.650e-07     7.450e-06     4.950e-08
    -0.300      6.250e-08     7.550e-07     0.000e+00
    -0.200      0.000e+00     8.400e-08     0.000e+00
    -0.100      0.000e+00     0.000e-08     0.000e+00
     0.000      0.000e+00     0.000e+00     0.000e+00
|
|==============================================================================

BIRD49.1 adds the rules for when the time is negative and when the V_trigger_l
and V_trigger_h thresholds are not used and can be omitted.  The intent is
to support having the dynamic clamps controlled by an external control so
that they can be preset before the signal arrives at the device.  A method
was chosen that is based on the activation pulse that the simulator uses
to initiate the driver transition.  Most simulators do not have an independent
pulse control to preset some other parameter. 

This method can be user configurable to deal with simulator differences in
time relationships for driver activation on the net and possible phase
differences of this component on a net.  The time values may have to be
readjusted for a particular part.  However, the approach taken here should
work for most practical cases.

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

ANY OTHER BACKGROUND INFORMATION:

Based on a conversation with Arpad Muranyi on 11/14/97.  Modified per a
discussion with Bob Ross, Chris Reid and Arpad Muranyi on March 11, 1998.

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