Thanks to Mike LaBonte for his very complete listing of referencing issues in
IBIS today. I'd like to state a few facts related to slide 9 of that
presentation.
In contrast to the keyword [Voltage Range], I suggest that the keywords [Pullup
Reference], [Pulldown Reference], [POWER Clamp Reference], and [GND Clamp
Reference] are incorrectly named. The names themselves cause confusion and are
likely the source of many of the problems with referencing we are trying to
resolve.
These keywords define (and the specification mentions) the physical supply
"rails" or nodes to which the buffers are connected.
Unfortunately, the arguments to these keywords are voltage *values* or
measurements, with respect to an unnamed physical reference point. The
arguments are not themselves "references".
It is true that the [* Reference] keyword arguments - the voltages - are used
for calculations involving the I-V tables. However, these calculations are
used to *translate* voltage values in raw I-V data generated using the common
(unnamed) reference to voltage values for the I-V tables with respect to the
individual supply rails. It is utterly incorrect to state, as [Pulldown
Reference] does, that I-V table data points "are referenced to 0 V."
[Pin Mapping] gets the concept nearly correct, in that rails are defined to
which buffers are connected, but the term used there is "reference" and not
"rail" (though "bus" is used correctly). The C_comp_* text is also fairly
clear that these keywords define rails and that the individual C_comp_*
elements are connected between these rails and the I/O node.
I believe that Walter's "DUT" proposal would address this, at least in part,
but only if the specification is very carefully re-written to describe a single
reference node that is used for all voltage measurements, including the values
in the [* Reference] keywords.
Ideally, the [Pin Mapping] keyword would replace "reference" with "rail", and
"_ref" with "_rail" (as in, "pulldown_rail"). In addition, [Pullup Reference],
etc. would be called [Pullup Rail Voltage], etc., and would use a description
resembling the following:
Defines a voltage rail other than that defined by the [Voltage Range] keyword
as the reference rail for the [Pullup] I-V data. The voltage value provided is
with respect to the IBIS measurement reference node.
[Pulldown Rail Voltage] would use a description like:
Defines a voltage rail other than the IBIS measurement reference node as the
reference rail for the [Pulldown] I-V data. If this keyword is not present, the
voltage data points in the [Pulldown] I-V table are referenced to the IBIS
measurement reference node.
We could optionally add a keyword which would define whether the "IBIS
measurement reference node" is synonymous with a defined pin, a defined rail,
or is a completely independent node. If a defined rail were used (e.g.,
[Pulldown Rail Voltage]) as the "IBIS measurement reference node", any non-zero
voltage argument used for that rail definition keyword would be ignored, as it
would be meaningless if not contradictory. This could be strictly checked by
the parser. While complex, this would be a complete and unambiguous approach.
If it helps, think about the "IBIS measurement reference node" as "the point
where the reference wire on my probe is connected when I make voltage
measurements."
I believe this is consistent with Walter's earlier C_comp analysis.
Thoughts?
- MM