Subject: IBIS BIRD74.4 Fall Back Submodel

From: Bob Ross <[email-masked]>
Date: Mon, 19 Nov 2001 15:24:14 -0800

To IBIS Committee:

BIRD73.4 has some additional editorial corrections discussed at the November
16, 2001 meeting.  The major change is in a "DRIVER FALLING CYCLE" table
under the Fall Back section.  This will be scheduled for a vote at the next
meeting.

The changes are shown by |***** lines.  Some minor capitalization or
spelling corrections are not noted.

Bob Ross
Mentor Graphics

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

BIRD ID#:        73.4
ISSUE TITLE:     Fall Back Submodel
REQUESTER:       Bob Ross, Mentor Graphics
DATE SUBMITTED:  8-2-01, 10-1-01, 10-16-01, 11-12-01, 11-19-01
DATE ACCEPTED BY IBIS OPEN FORUM:  Pending

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

STATEMENT OF THE ISSUE:

Existing submodels have a trigger for turning on functions.  This works for
Bus_hold (and corresponding active terminators) and Dynamic_clamp functions.

However another mechanism to turn off the submodels is needed for AVC type
devices which have the overall driver strength reduced after the output
passes through a voltage threshold value.

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

STATEMENT OF THE RESOLVED SPECIFICATIONS:

This BIRD proposes a new Submodel_type: Fall_back.  The new submodel operates
similar to the Bus_hold submodel, but with opposite action.  The trigger
turns off a submodel (presumed on) when the output die voltage passes
through a trigger threshold.

Additions are noted in the relevant sections below by |* lines:

Subsequent additions which include some corrections and clarifications
in the Bus Hold section are designated by |** lines.  Newer corrections are
noted by |*** thru |***** lines.

Comments for a new section or for unchanged sections are shown using
|*********** lines.

|=============================================================================
|=============================================================================
|
|                                 Section 6a
|
|              A D D    S U B M O D E L    D E S C R I P T I O N
|
|=============================================================================
|=============================================================================
|
| The [Add Submodel] keyword can be used under a top-level [Model] keyword to
| to add special-purpose functionality to the existing top-level model.  This
| section describes the structure of the top-level model and the submodel.
|
| TOP-LEVEL MODEL:
|
| When special-purpose functional detail is needed, the top-level model can
| call one or more submodels.  The [Add Submodel] keyword is positioned 
| after the initial set of required and optional subparameters of the [Model] 
| keyword and among the keywords under [Model].
| 
| The [Add Submodel] keyword lists of name of each submodel and the permitted
| mode (Driving, Non-Driving or All) under which each added submodel is used.
|
| SUBMODEL:
|
| A submodel is defined using the [Submodel] keyword.  It contains a subset
| of keywords and subparameters used for the [Model] keyword along with other
| keywords and subparameters that are needed for the added functionality.
|
| The [Submodel] and [Submodel Spec] keywords are defined first since they
|*** are used for all submodels. 
|
| The only required subparameter in [Submodel] is Submodel_type to define the
| list of submodel types.  No subparameters under [Model] are permitted under
| the [Submodel] keyword.
|
| The following set of keywords that are defined under the [Model] keyword are
| supported by the [Submodel] keyword:
|
| [Pulldown]
| [Pullup]
| [GND Clamp]
| [POWER Clamp]
| [Ramp]
| [Rising Waveform]
| [Falling Waveform]
|
| The [Voltage Range], [Pullup Reference], [Pulldown Reference], [GND Clamp
| Reference], and [POWER Clamp Reference] keywords are not permitted.  The
| voltage settings are inherited from the top-level model.
|
| These additional keywords are used only for the [Submodel] are documented
| in this section:
|
| [Submodel Spec]
| [GND Pulse Table]
| [POWER Pulse Table]
|
| The application of these keywords depends upon the Submodel_type entries
| listed below:
|
| Dynamic_clamp
| Bus_hold
|* Fall_back
|
| Permitted keywords that are not defined for any of these submodel types are
| ignored.  The rules for what set of keywords are required are found under
|*** the Dynamic Clamp, Bus Hold, and Fall Back headings of this section.
|
|=============================================================================
|     Keyword:  [Submodel]
|    Required:  No
| Description:  Used to define a submodel, and its attributes.
|  Sub-Params:  Submodel_type        
| Usage Rules:  Each submodel must begin with the keyword [Submodel].  The
|               submodel name must match the one that is listed under an
|               [Add Submodel] keyword and must not contain more than 20
|               characters.  A .ibs file must contain enough [Submodel]
|               keywords to cover all of the model names specified under the
|               [Add Submodel] keyword.
|
|               Submodel_type subparameter is required and must be one of the
|               following:
|
|*               Dynamic_clamp, Bus_hold, Fall_back
|
|               The C_comp subparameter is not permitted under the [Submodel]
|               keyword.  The total effective die capacitance including the
|               submodel contributions are provided in the top-level model.
|
| Other Notes:  The following list of keywords that are defined under the 
|               [Model] keyword can be used under [Submodel]:  [Pulldown], 
|               [Pullup], [GND Clamp], [POWER Clamp], [Ramp], [Rising
|               Waveform], and [Falling Waveform].
|
|               The following list of additional keywords can be used:
|               [Submodel Spec], [GND Pulse Table], and [POWER Pulse Table].
|-----------------------------------------------------------------------------
[Submodel]      Dynamic_clamp1
Submodel_type   Dynamic_clamp
|

|*********** The next section, originally shown for reference, now
|*********** has some changes

|============================================================================= 
|     Keyword:  [Submodel Spec]
|    Required:  No
| Description:  The [Submodel Spec] keyword defines four columns under which 
|               specification and information subparameters are defined for 
|               submodels.
|  Sub-Params:  V_trigger_r, V_trigger_f, Off_delay
| Usage Rules:  The [Submodel Spec] is to be used only with submodels.
|
|               The following subparameters are used:
|                 V_trigger_r           Rising edge trigger voltage 
|                 V_trigger_f           Falling edge trigger voltage 
|                 Off_delay             Turn-off delay from V_trigger_r or
|                                       V_trigger_f
|
|               For each subparameter contained in the first column, the
|               remaining three hold its typical, minimum and maximum values. 
|               The entries of typical, minimum and maximum be must be placed 
|               on a single line and must be separated by at least one white 
|               space.  All four columns are required under the [Submodel
|               Spec] keyword.  However, data is required only in the typical
|               column.  If minimum and/or maximum values are not available,
|               the reserved word "NA" must be used to indicate the typical
|               value by default. 
|
|               The values in the minimum and maximum columns usually
|               correspond to the values in the same columns for the inherited 
|               top-level voltage range or reference voltages in the top-level 
|               model.  The V_trigger_r and V_trigger_f subparameters should
|               hold values in the minimum and maximum columns that correspond
|               to the voltage range or reference voltages of the top-level
|               model.  The Off_delay subparameter, however, is an exception
|               to this rule because in some cases it may be completely or
|               or partially independent from supply voltages and/or
|               manufacturing process variations.  Therefore the minimum and
|               maximum entries for the Off_delay subparameter should be
|               ordered simply by their magnitude.
|
|               Unless noted, each [Submodel Spec] subparameter is independent 
|               of any other subparameter.
|
|               V_trigger_r, V_trigger_f rules: 
|
|               The voltage trigger values for the rising and falling edges 
|               provide the starting time when an action is initiated.
|
|               Off_delay rules: 
|
|               The functionality of the Off_delay subparameter is to provide
|               an additional time related mechanism to turn off circuit
|               elements.
|
|----------------------------------------------------------------------------- 
| Dynamic Clamp Example:
|
[Submodel Spec]
|   Subparameter          typ        min        max 
|
V_trigger_r               3.6        2.9        4.3 | Starts power pulse table 
V_trigger_f               1.4        1.2        1.6 | Starts gnd pulse table
|
| Bus Hold Example:
|
[Submodel Spec]
|   Subparameter          typ        min        max
V_trigger_r               3.1        2.4        3.7 | Starts low to high
                                                    | bus hold transition
V_trigger_f               1.8        1.6        2.0 | Starts high to low
                                                    | bus hold transition
|
| Bus_hold application with pullup structure triggered on and then clocked off: 
|
[Submodel Spec]
|   Subparameter          typ        min        max
V_trigger_r               3.1        2.4        3.7 | Low to high transition
                                                    | triggers the turn on 
                                                    | process of the pullup
V_trigger_f             -10.0      -10.0      -10.0 | Not used, so trigger
                                                    | voltages are set out 
                                                    | of range

|**  Off_delay entries are by value since they do not correlate with process.
|**  This example is corrected.

Off_delay                 5n         4n         6n  | Time from rising edge
                                                    | trigger at which the
                                                    | pullup turned off

|*********** The Dynamic Clamp section is omitted here

|
|=============================================================================
|=============================================================================
|
| Bus Hold:
|
| When the Submodel_type subparameter under the [Submodel] keyword is set to 
| Bus_hold, the added model describes the bus hold functionality.  However, 
| while described in terms of bus hold functionality, active terminators
| can also be modeled.
|
| Existing keywords and subparameters are used to describe bus hold models. 
| The [Pullup] and [Pulldown] tables both are used to define an internal
| buffer that is triggered switch to its opposite state.  This switching 
| transition is specified by a [Ramp] keyword or by the [Rising Waveform] and
| [Falling Waveform] keywords.  The usage rules for these keywords are the 
| same as under the [Model] keyword.  In particular, at least either the
| [Pullup] or [Pulldown] keyword is required.  Also, the [Ramp] keyword is
| required, even if the [Rising Waveform] and [Falling Waveform] tables exist. 
| However, the voltage ranges and reference voltages are inherited from the
| top-level model.
|
| For bus hold submodels, the [Submodel Spec] keyword, V_trigger_r, and
|**** V_trigger_f are required.  The Off_delay subparameter is optional,
   and can
| only be used if the submodel consists of a pullup or a pulldown structure
| only, and not both.  Devices which have both pullup and pulldown structures
| controlled in this fashion can be modeled using two submodels, one for each
| half of the circuit.
|
| The transition is triggered by action at the die using the [Submodel Spec] 
|**** V_trigger_r and V_trigger_f subparameters is described next.
|****  In all subsequent discussions, "low" means the pulldown structure
|**** is on or active, and the pullup structure is off or inactive if
|**** either or both exist.  The opposite settings are referred to as "high".

|

|*** Delete this Paragraph

| If the starting voltage is below V_trigger_f, then the bus hold model is set
| to the low state causing additional pulldown current.  If the starting 
| voltage is above V_trigger_r, the bus hold model is set to the high state
| for additional pullup current.  When the input passes though V_trigger_f
| during a high-to-low transition at the die, the bus hold output switches to
| the low state.  Similarly, when the input passes though V_trigger_r during
| a low-to-high transition at the die, the bus hold output switches to the
| high state.

|*** Replace with these three Paragraphs below

| If the starting voltage is below V_trigger_f, then the bus hold model is set
| to the low state causing additional pulldown current.  If the starting 
| voltage is above V_trigger_r, the bus hold model is set to the high state
| for additional pullup current.
|

|**** Delete this paragraph from BIRD73.2 and replace:

| Conditions can exist where neither or both of the above conditions are met.
| Actual hardware initialization can also depend on factors that are not in
| the model.  The following recommendation is made to determine the initial
| state of the submodel in an EDA tool:  Set the bus hold submodel to the low
| state if the starting voltage is equal to or less than the average of
| V_trigger_r and V_trigger_f.  Otherwise, set the bus hold submodel to the
| high state.  Different types of EDA tools might approach this differently.
| 
|**** Replace above deleted paragraph with new paragraph in BIRD73.3:

| Under some unusual cases, the above conditions can be both met or not met at
| all.  To resolve this, the EDA tool should compute the starting voltage with
| the bus hold model set to low.  If the starting voltage is equal to or less
| than the average of V_trigger_r and V_trigger_f, keep the bus hold model
| in the low state.  Otherwise, set the bus hold model to the high state.

|**** End of rewritten paragraph

|*** When the input passes through V_trigger_f
| during a high-to-low transition at the die, the bus hold output switches to
| the low state.  Similarly, when the input passes though V_trigger_r during
| a low-to-high transition at the die, the bus hold output switches to the
| high state.

|*** End of Replacement Paragraphs
|
| If the bus hold submodel has a pullup structure only, V_trigger_r provides
| the time when its pullup is turned on and V_trigger_f or Off_delay provides
| the time when it is turned off, whichever occurs first.  Similarly, if the
| submodel has a pulldown structure only, V_trigger_f provides the time when
| its pulldown is turned on and V_trigger_r or Off_delay provides the time
| when it is turned off, whichever occurs first.  The required V_trigger_r
| and V_trigger_f voltage entries can be set to values outside of the input
| signal range if the pullup or pulldown structures are to be held on until
| the Off_delay turns them off.
|
| The starting mode for each of the submodels which include the Off_delay
| subparameter of the [Submodel Spec] keyword is the off state.  Also, while
| two submodels provide the desired operation, either of the submodels may
| exist without the other to simulate turning on and off only a pullup or a
| pulldown current.
|

|*** The following Tables are added (but significantly revised in BIRD73.2):

| The following tables summarizes the bus hold initial and switching 
| transitions:
|
|   BUS HOLD WITHOUT OFF_DELAY:
|
|     Initialization:
|
|       Initial Vdie Value                Initial Bus Hold
|                                         Submodel State
|       --------------------------------  ----------------
|       <= V_trigger_r & < V_trigger_f    low
|       => V_trigger_f & > V_trigger_r    high
|
|       <= (V_trigger_f + V_trigger_r)/2  low   | Recommendations if neither
|       > (V_trigger_f + V_trigger_r)/2   high  | or both conditions above
|                                               | are satisifed
|                                             
|
|     Transitions:
|
|       Prior Bus Hold    Vdie transition  Bus Hold
|       Submodel State    through          Transition
|                         V_trigger_r/f
|       --------------    ---------------  -----------
|       low               V_trigger_r      low-to-high
|       low               V_trigger_f      no change
|       high              V_trigger_r      no change
|       high              V_trigger_f      high-to-low
|
|   BUS HOLD WITH OFF_DELAY (REQUIRES EITHER [PULLUP] or [PULLDOWN] ONLY):
|
|     Initialization:
|
|       [Pullup] or       Initial Bus Hold
|***    [Pulldown] Table  Submodel State (Off Mode)
|       ----------------  -------------------------
|***    [Pullup]          low
|***    [Pulldown]        high
|
|     Transitions:
|
|       Prior Bus Hold    Vdie transition  Bus Hold      Off_delay    
|       Submodel State    through          Transition    Transition
|                         V_trigger_r/f
|       --------------    ---------------  -----------   -----------
|       low               V_trigger_r      low-to-high   high-to-low
|       low               V_trigger_f      no change     no change
|       high              V_trigger_r      no change     no change
|       high              V_trigger_f      high-to-low   low-to-high
|
|     Note, if Vdie passes again through the V_trigger_r/f thresholds
|     before the Off_delay time is reached, the bus hold state follows the
|     change documented in the first table, overriding the Off_delay
|     transition.
|

|***  End of Added Tables

| No additional keywords are needed for this functionality. 
|----------------------------------------------------------------------------- 
|
| Complete Bus Hold Model Example:
|
[Submodel]       Bus_hold_1
Submodel_type    Bus_hold
|
[Submodel Spec]
|   Subparameter          typ        min        max 
|
V_trigger_f               1.3        1.2        1.4  | Falling edge trigger 
V_trigger_r               3.1        2.6        4.6  | Rising edge trigger 
|
|                         typ        min        max
| [Voltage Range]           5.0        4.5        5.5
| Note, the actual voltage range and reference voltages are inherited from 
| the top-level model.
|
[Pulldown]
|
-5V     -100uA     -80uA     -120uA
-1V     -30uA      -25uA     -40uA
0V       0           0         0
1V       30uA       25uA     40uA
3V       50uA       45uA     50uA
5V       100uA      80uA     120uA
10v      120uA      90uA     150uA
|
[Pullup]
|
-5V      100uA      80uA     120uA
-1V      30uA       25uA     40uA
0V       0           0         0
1V      -30uA      -25uA    -40uA
3V      -50uA      -45uA    -50uA
5V      -100uA     -80uA    -120uA
10v     -120uA     -90uA    -150uA
|
|----------------------------------------------------------------------------- 
|
[Ramp]
|                       typ             min             max 
dV/dt_r                 2.0/0.50n       2.0/0.75n       2.0/0.35n 
dV/dt_f                 2.0/0.50n       2.0/0.75n       2.0/0.35n 
R_load = 500
|
|----------------------------------------------------------------------------- 
|
|*** This example and text is corrected from "Timed_pullup_latch" to 
|*** "Timed_pulldown_latch".  Some related changes are made with |*** lines.

|*** Complete Pulldown Timed Latch Example: 
|
[Submodel]       Timed_pulldown_latch
Submodel_type    Bus_hold
|
[Submodel Spec]
|   Subparameter          typ        min        max 
|
V_trigger_r               3.1        2.6        4.6  | Rising edge trigger 
                                                     | Values could be set out
                                                     | of range to disable the
                                                     | trigger
V_trigger_f               1.3        1.2        1.4  | Falling edge trigger

|**  Off_delay entries are by value since they do not correlate with process.
|**  This example is corrected.

Off_delay                 3n         2n         5n   | Delay to turn off the
                                                     |*** pulldown table
|
| Note that if the input signal goes above the V_trigger_r value, the
| pulldown structure will turn off even if the timer didn't expire yet.
|
|                         typ        min        max
| [Voltage Range]         5.0        4.5        5.5
| Note, the actual voltage range and reference voltages are inherited from 
| the top-level model.
|
[Pulldown]
|
-5V     -100uA     -80uA     -120uA
-1V      -30uA     -25uA     -40uA
0V       0           0         0
1V       30uA       25uA     40uA
3V       50uA       45uA     50uA
5V       100uA      80uA     120uA
10v      120uA      90uA    150uA
|
|*** [Pullup] table is omitted to signal Open_drain functionality. 
|
|----------------------------------------------------------------------------- 
|
[Ramp]
|                       typ             min             max 
dV/dt_r                 2.0/0.50n       2.0/0.75n       2.0/0.35n 
dV/dt_f                 2.0/0.50n       2.0/0.75n       2.0/0.35n 
R_load = 500
|
|=============================================================================

|** End of existing Sections that now have some changes

|*********** This section is added:

|*** Add this section for BIRD73.2

|=============================================================================
|=============================================================================
|
| Fall Back:
|
| When the Submodel_type subparameter under the [Submodel] keyword is set to 
| Fall_back, the added model describes the fall back functionality.  This
| submodel can be used to model drivers that reduce their strengths and
| increase their output impedances during their transitions.  The fall back
| submodel is specified in a restrictive manner consistent with its intended
| use with a driver model operating only in Driving mode.  In a Non-Driving
| mode, no action is specified.  For example, a fall back submodel added to
| and Input or Terminator model would be inactive.
|
| Existing keywords and subparameters are used to describe fall back models. 
| However, only one [Pullup] or [Pulldown] table, but not both, is allowed.
| The switching transition is specified by a [Ramp] keyword or by the [Rising
| Waveform] and [Falling Waveform] keywords.  The [Ramp] keyword is required,
| even if the [Rising Waveform] and [Falling Waveform] tables exist.  However,
| the voltage ranges and reference voltages are inherited from the top-level
| model.
|
| For fall back submodels, the [Submodel Spec] keyword, V_trigger_r, and
| V_trigger_f are required.  Unlike the bus hold model, the Off_delay
| subparameter is not permitted.  Devices which have both pullup and pulldown
| structures can be modeled using two submodels, one for the rising cycle
| and one for the falling cycle.
|
|**** In all following discussion, "low" means the pulldown structure
|**** is on or active, and the pullup structure is off or inactive.
|**** The opposite settings are referred to as "high".
|
| The transition is triggered by action at the die using the [Submodel Spec] 
| V_trigger_r and V_trigger_f subparameters.  The initialization and 
| transitions are set as follows:
|
|   INITIAL STATE:
|
|     [Pullup] or [Pulldown]  Initial Fall Back
|     Table                   Submodel State (Off Mode)
|     ----------------------  -------------------------
|     [Pullup]                low
|     [Pulldown]              high
|
|   DRIVER RISING CYCLE:
|
|     Prior  Vdie            Rising Edge   Vdie > V_trigger_r
|     State                  Transition    Transition
|     -----  --------------  -----------   ------------------
|     low    <= V_trigger_r  low-to-high   high-to-low
|            > V_trigger_r   stays low     stays low
|
|     high   <= V_trigger_r  stays high    high-to-low
|            > V_trigger_r   stays high    stays high
|
|   DRIVER FALLING CYCLE:
|
|     Prior  Vdie            Falling Edge  Vdie < V_trigger_f
|     State                  Transition    Transition
|     -----  --------------  ------------  ------------------
|     high   => V_trigger_f  high-to-low   low-to-high
|            < V_trigger_f   stays high    stays high
|
|***** (the following two lines are corrected)
|     low    => V_trigger_f  stays low     low-to-high
|            < V_trigger_f   stays low     stays low
|
|
| One application is to configure the submodel with only a pullup structure.
| At the beginning of the rising edge cycle, the pullup is turned on to the
| high state.  When the die voltage passes V_trigger_r, the pullup structure
| is turned off.  Because only the pullup structure is used, the off state is
| low corresponding to a high-Z state.  During the falling transition, the 
| pullup remains in the high-Z state if the V_trigger_f is set out of range
| to avoid setting the submodel to the high state.  So a temporary boost in
| drive occurs only during the first part of the rising cycle.
|
| A similar submodel consisting of only a pulldown structure could be
| constructed to provide added drive strength only at the beginning of the
| falling cycle.  The complete IBIS model would have both submodels to give
| added drive strength for both the start of the rising and the start of the
| falling cycles.
|
| No additional keywords are needed for this functionality. 
|----------------------------------------------------------------------------- 
|
| Complete Dynamic Output Model Example Using Two Submodels:
|
[Submodel]       Dynamic_Output_r
Submodel_type    Fall_back
|
[Submodel Spec]
|   Subparameter          typ        min        max 
|
V_trigger_f             -10.0      -10.0      -10.0  | Falling edge trigger
                                                     | set out of range to 
                                                     | disable trigger
V_trigger_r               3.1        2.6        4.6  | Rising edge trigger 
|
|                           typ        min        max
| [Voltage Range]           5.0        4.5        5.5
| Note, the actual voltage range and reference voltages are inherited from 
| the top-level model.
|
[Pullup]
|
-5V      100mA      80mA      120mA
0V       0           0         0
10v     -200mA     -160mA    -240mA
|
| [Pulldown] table is omitted to signify Open_source functionality.
|
|----------------------------------------------------------------------------- 
|
[Ramp]
|                       typ             min             max 
dV/dt_r                 1.5/0.50n       1.43/0.75n      1.58/0.35n 
dV/dt_f                 1.5/0.50n       1.43/0.75n      1.58/0.35n 
R_load = 50
|
|----------------------------------------------------------------------------- 
|
[Submodel]       Dynamic_Output_f
Submodel_type    Fall_back
|
[Submodel Spec]
|   Subparameter          typ        min        max 
|
V_trigger_r               10.0       10.0       10.0 | Rising edge trigger
                                                     | set out of range to 
                                                     | disable trigger
V_trigger_f               1.3        1.2        1.4  | Falling edge trigger
|
|                           typ        min        max
| [Voltage Range]           5.0        4.5        5.5
| Note, the actual voltage range and reference voltages are inherited from 
| the top-level model.
|
[Pulldown]
|
-5V     -100mA     -80mA     -120mA
0V       0           0         0
10v      200mA      160mA     240mA
|
| [Pullup] table is omitted to signify Open_drain functionality.
|
|----------------------------------------------------------------------------- 
|
[Ramp]
|                       typ             min             max 
dV/dt_r                 1.5/0.50n       1.43/0.75n      1.58/0.35n 
dV/dt_f                 1.5/0.50n       1.43/0.75n      1.58/0.35n 
R_load = 50
|
|----------------------------------------------------------------------------- 

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

ANALYSIS PATH/DATA THAT LED TO SPECIFICATION:

The AVC technology is structured using various trade marked terms such as
Dynamic Output Control(tm), Dynamic Control Output(tm), etc.  They are
designed to operate by starting at full strength, but finishing at a reduced
strength (higher impedance) when the output voltage passes through a trigger
voltage.  The final higher impedance usually matches better the load (such as
a transmission line equivalent circuit of the printed circuit board trace) to
produce better signal integrity matching conditions.

The operation is opposite of the Bus_hold submodel which is triggered to
turn on when the die voltage passes a threshold voltage.  So a bus hold
structure cannot be configured or modified to produce this "fall back"
effect.

BIRD73 proposes a new submodel which mimics the opposite effect.  The main
idea is that when the output voltage passes a trigger voltage, a rising
transition buffer changed to a falling transition, and a falling transition
buffer is changed to a rising transition.  The two existing [Submodel]
subparameters V_trigger_r and V_trigger_f are used for the fall back
operation.

Unlike the bus hold submodel, the rules for setting the initial state are
more complicated.  Furthermore, prior history or conditions could already
nullify some transitions.  Within a simulator rising edge cycle, 0, 1 or 2
transitions are possible.  One can be initiated at the start of the cycle,
and the other initiated when the output voltage passes V_trigger_r.  Several
initialization and switching conditions exist, and a table is used to
document the allowable fixed and transition states:

SIMULATOR RISING CYCLE:

  Prior         Vdie            Rising Edge    Vdie > V_trigger_r
  State                         Transition     Transition

  low/none      <= V_trigger_r  low-to-high    high-to-low
                > V_trigger_r   Set/stays low  Stays low

  high          <= V_trigger_r  Stays high     high-to-low
                > V_trigger_r   high-to-low    Stays low

SIMULATOR FALLING CYCLE:

  Prior         Vdie            Falling Edge   Vdie < V_trigger_f
  State                         Transition     Transition

  high/none     => V_trigger_f  high-to-low    low-to-high
                < V_trigger_f   Set/stays high Stays high

  low           <= V_trigger_f  Stays low      high-to-low
                > V_trigger_f   low-to-high    Stays high

The prior state of "none" describes the initial setting for the first
simulator edge encountered, either RISING or FALLING.  After that the
prior state is tracked.

The number of transitions for each simulator cycle is limited to two or less.
It might be possible to connect several fall back and bus hold submodels in
a manner and with different V_trigger_r and V_trigger_f values to work 
against each other to cause the Vdie to move above and below the V_trigger_*
values several times within a cycle.  There does not appear to be any
practical reason to make the above state and transition tables more
complicated to account for opposite direction movement (or oscillation)
around V_trigger_*.  So after the RISING or FALLLING transitions are
initiated, some states are simply held constant regardless of potential
oscillations.  Such fixed stated are defined by "Stays high" or "Stays low".

The rules are set to work in a manner consistent with the bus hold submodel.
However, Off_delay subparameter is not supported here.  Nor is the opposite
acting subparameter proposed that might be called "Off_delay" that might
add one more transition reversal after a V_trigger_* transition.  There does
not appear to be any practical need for such an extension which would add
complication to the state and transition conditions above.

While a complete set of states and transitions are defined, the most
practical implementation for AVC technology is intended to be done with
adding two submodels, one with only a [Pullup] table for rising edge
impedance control, and one with only a [Pulldown] table for falling edge
impedance control.  With this setup, the corresponding "off" states will
be high-Z making each submodel function independently for each edge only
to increase the impedance of the final state of the buffer.  As in other
submodels, letting the V_trigger_* values to be set out of range is used
to keep the off state of the submodel in the high-Z mode.  This is shown
in an example.

The need for providing the new functionality currently exists and is proposed
for IBIS Version 4.0 as a shorter term solution.  BIRD73 also provides the
basis for considering a more advanced solution that could be achieved using
a proposed IBIS-X Macro language.  This later solution could also provide more
detail and a superset of what is currently practical for Version 4.0.

BIRD73.1 has the following corrections based on the August 31, 2001
meeting.

(1) An original Bus Hold example that got corrupted buy editing
    has been restored in an "unchanged section".

(2) Some miscellaneous editorial and spelling corrections were made.

In the existing Bus Hold Section:

(3) A state table has been added in the Bus Hold Section similar to the
    state table in the Fall back model section.  The rule was changed to
    remove an ambiguous case.

(4) The Off_delay example has been modified to correspond to the
    Specification.  The entries are by magnitude.

The original rule regarding (3) did not take into account that it is possible
for the initial voltage to not be above V_trigger_r or below V_trigger_f
under some terminated nets.  The initial voltage could fall in between these
two trigger thresholds.  This left an ambiguous initial condition setting.
The rule was changed to simply set the bus hold submodels to be the same as
the initial setting of the driver of the circuit.  This rule is consistent
with the original rule, but now clarifies what happens for the ambiguous
condition.

The formatting of the tables was changed for clarity.  The initial state
"none" in BIRD73 was changed to "initial" in the added section for fall back
submodels.

BIRD73.2 CHANGES:
BIRD73.2 contains some editorial cleanups of the Bus Hold section.  In
addition, some substantial changes were made on the Fall Back state tables
based on examining some more details and on 

BIRD73.2 contains substantial revision in technical content from
BIRD73.1.  BIRD73.1 had some major corrections from BIRD73.

Rather than building BIRD73.2 from BIRD73.1, and documenting
changes and then restorations on top of changes, I have started
from the correct base line of IBIS Version 3.2.

The major changes from the previously issued BIRD73.1 are:

  (1) With respect to Bus Hold, the added State table is simpified in
  a manner that does not require knowledge of the driver state.

  (2) The new fall back submodel is now defined in a much more 
  restrictive manner that would be consistent with its actual
  application.  The more general definition opened the door
  to many undefined complications that would never apply to
  a real device.

The changes from previous BIRDs that were made to the baseline
are noted by |* and |** lines.  The new fall back section is
surrounded by |*********** lines.  

The changes in BIRD73.2 including a revised state table for
the bus hold submodel is noted by |*** lines.

In particular, the Bus Hold initialization state table required the
knowledge that the driver state of the circuit driver be known.  After
some review and consideration, this turned out to be an impossible
requirement for certain types of EDA tools.  For example, the "driver"
state of a particular net may be lost through translation through
intermediate (inverting) buffers in some tools (such as Spice) where
the intermediate buffer has no "state" information.  The table has
been revamped to the original Specification.

However, it is possible under some unexpected or unintended biasing
conditions contrary to the normal operation of the bus hold model
to "latch" it in an undefined state, either in compliance with neither
or both conditions.  Currently, it would be EDA tool dependent how
this is resolved.  A new recommendation is added that the bus hold
submodel state by set low if the bias voltage without the bushold
model is equal to or below the average of V_trigger_r and V_trigger_f,
and high if above.  This is an arbitrary resolution and would require
determining the bias voltage without the bus hold portion in the
circuit.  This may not be possible in some tools, so the iteration
cycle may actually assume a bus hold state and iterate to one
favored solution.  In some usual cases it could have iterated to
the other state had it assumed the other state as the starting point.

An example added in BIRD57.1 for Off_delay needs the title corrected and
some text changed from "*pullup*" to "*pulldown*".  This is done here.

So in some cases, the starting point of a bus hold model could be
EDA tool dependent.

The fall back submodel is scaled back to be defined for a set of
very restrictive conditions including:

  (1) Only one [Pullup] or [Pulldown] table, but not both.
      Consistent with the intent, it is always initialize in the
      high-Z state (similar to bus hold with Off_delay).
  (2) Only works for the driving mode only of a buffer.  It would
      never operate for a Non-driving model.
  (3) The operation is initiated by the state change from the driver
      which this submodel is called.

While the original intent was to define the fall back submodel in the
most general terms and for the widest application, this turned out
to be very impractical.  The submodel initial states became even more
complicated to determine than those of the bus hold submodel.  The
initial operation also was dependent on the signal received if the
submodel was remote from the driver in the circuit.  Such a description
would be very artificial since action could also be initiated by "noise".

So the fall back description and information was scaled back so that it
would apply to and successfully be used to simulate the actual physical
devices for which the operation applies.  Because it turns on with 
certain transitions, and then is turned off, it is intialized in the
Off state.  Using only one table, but not both, such an off state exists.
Because the transition begins when the driver starts its transition, the
fall back submodel needs to function only when it is attached to a driver.
Otherwise it should to nothing and remain in a high-Z state.

BIRD73.3 contains some editorial corrections to define what "low" and "high"
mean in the tables and text.  It also contains a replacement paragraph to
deal with how to determine the bus hold initial setting when the die voltage
either complies with both or neither threshold conditions.  This is for
completeness to deal with unexpected situations in practice.  For example,
a Thevenin terminator might have been unintentionally inserted in the net.
Or the V_trigger_f and V_trigger_r values could have been selected badly
in a manner that is inconsistent with physical behavior and the intented
reasons for providing the bus hold submodel.

BIRD73.4 corrects the DRIVER FALLING CYCLE table under the Fall Back section.
It also picks up some more minor editorial errors.

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

ANY OTHER BACKGROUND INFORMATION:

BIRD57.1 introduced the Off_delay keyword.  The added example should have 
been titled Timed_pulldown_latch instead of Timed_pullup_latch.  Some other
corrections in the text related to this are made in BIRD73.2

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