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

BIRD ID#:       130
ISSUE TITLE:    Crosstalk Clarification With Respect to AMI
REQUESTOR:      Ken Willis, Sigrity, Inc.
                Arpad Muranyi, Mentor Graphics, Inc.
DATE SUBMITTED: April 12, 2011
DATE REVISED:
DATE ACCEPTED BY IBIS OPEN FORUM: June 24, 2011

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

STATEMENT OF THE ISSUE:

The description of how crosstalk is to be handled with respect to AMI models
is unclear in the 5.0 version of the IBIS spec.

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

STATEMENT OF THE RESOLVED SPECIFICATIONS:

On pg. 6, 180, and 185 change the section title for section 3.1.2.2 
to "number_of_rows" from "row_size".


On pg. 185, in section 3.1.1 replace these lines:

| long AMI_Init (double *impulse_matrix,
|                long row_size,

with the following lines:

| long AMI_Init (double *impulse_matrix,
|*               long number_of_rows,



Replace the following text in Section 3.1.2.1:

| 3.1.2.1 impulse_matrix
| ======================
|
| 'impulse_matrix' is the channel impulse response matrix.  The impulse values
| are in volts and are uniformly spaced in time.  The sample spacing is given
| by the parameter 'sample_interval'.
|
| The impulse_matrix is stored in a single dimensional array of floating point
| numbers which is formed by concatenating the columns of the impulse response
| matrix, starting with the first column and ending with the last column.  The
| matrix elements can be retrieved/identified using
|       
|   impulse_matrix[idx] = element (row, col)
|   idx = col * number_of_rows + row
|   row - row index , ranges from 0 to row_size-1
|   col - column index, ranges from 0 to aggressors
|
| The first column of the impulse_matrix is the impulse response for the
| primary channel.  The rest are the impulse responses from aggressor drivers
| to the victim receiver.
|
| The AMI_Init function may return a modified impulse response by modifying
| the first column of impulse_matrix.  If the impulse response is modified,
| the new impulse response is expected to represent the filtered response.
| The number of items in the matrix should remain unchanged.
|
| The aggressor columns of the matrix should not be modified.


With the following text:

| 3.1.2.1 impulse_matrix
| ======================
|
|* 'impulse_matrix' points to a memory location where the collection of
|* channel voltage impulse responses, called the "impulse response matrix",
|* is stored in the form of a single dimensional array of floating point
|* numbers.  The impulse response values are uniformly spaced in time.
|* The sample spacing is given by the parameter 'sample_interval'.
|*
|* The first column of the impulse response matrix is the impulse response
|* for a through channel, a channel that serves as a communication path
|* between a transmitter/receiver pair.  The rest of the columns contain the
|* impulse responses of crosstalk channels.  Crosstalk channels describe
|* the paths between aggressor transmitters and victim receiver(s).
|* Transmitters which are not part of a through channel between a certain
|* transmitter/receiver pair are all considered aggressor transmitters with
|* respect to that through channel.  The receiver of the through channel in
|* consideration is referred to as the victim receiver.  The crosstalk
|* impulse responses may be placed into the impulse response matrix in any
|* order.
|*
|* The single dimensional array of 'impulse_matrix' is formed by concatenating
|* the columns of an impulse response matrix, starting with the first column
|* and ending with the last column.  The matrix elements can be retrieved or
|* identified using the following relationships:
|
|    impulse_matrix[idx] = impulse response matrix element (row, col)
|*   idx = col * number_of_rows + row
|*   row:  row index               ranges from 0 to number_of_rows-1
|*   col:  column index            ranges from 0 to aggressors
|*
|* Each impulse response in the impulse response matrix must have the same
|* sample spacing and the same length.
|*
|* To include any crosstalk effects in the Reference Flows described in
|* this section of this specification, the crosstalk impulse responses
|* must be included in the 'impulse_matrix' and passed to the transmitter and
|* receiver AMI_Init functions.  If present, any filtering in the transmitter
|* and/or receiver AMI_Init function(s) must also be applied to the crosstalk
|* impulse responses to properly account for the crosstalk effects.
|*
|* Note that the 'impulse_matrix' will contain a different set of crosstalk
|* impulse responses for the transmitter and receiver AMI_Init calls, even for
|* a transmitter/receiver pair of the same through channel.  A transmitter's
|* AMI_Init function operates on those impulse responses which originate from
|* that transmitter, including the through channel and crosstalk channel
|* impulse responses.  A victim receiver's AMI_Init function, on the other
|* hand, operates on all of those impulse responses which are received by
|* that victim receiver, including the through channel and crosstalk channel
|* impulse responses.
|*
|* As an illustration, consider a crosstalk analysis with five channels
|* numbered 1 through 5, where channel 3 in the center is the through
|* channel of the transmitter/receiver pair Tx3/Rx3, and Rx3 is the
|* victim receiver.  In this case channels 1, 2 and 4, 5 are the aggressor
|* channels with the aggressor transmitters Tx1, Tx2, Tx4 and Tx5.  If the
|* five 'impulse_matrix'-es of the five transmitters' AMI_Init functions
|* contain the following data:
|*
|*************************************
|*     impulse_matrix impulse_matrix
|*        column 1       column 2
|*
|*Tx1      IR1_1          IR1_3
|*Tx2      IR2_2          IR2_3
|*Tx3      IR3_3
|*Tx4      IR4_4          IR4_3
|*Tx5      IR5_5          IR5_3
|*************************************
|*
|* then the 'impulse_matrix' passed into the victim receiver's (Rx3) AMI_Init
|* function will contain the following data:
|*
|*********************************************************************************
|*     impulse_matrix impulse_matrix impulse_matrix impulse_matrix impulse_matrix
|*        column 1       column 2       column 3       column 4      column 5
|*
|*Rx3  Tx3Init(IR3_3) Tx1Init(IR1_3) Tx2Init(IR2_3) Tx4Init(IR4_3) Tx5Init(IR5_3)
|*********************************************************************************
|*
|* where "IRi_j" represents the impulse response from the transmitter on
|* channel i to the receiver on channel j, Tx1Init() .. Tx5Init() represents
|* the output of a transmitter's AMI_Init function which modified the impulse
|* response denoted inside the parentheses.  Note that while in this example
|* the 'impulse_matrix' of each transmitter's AMI_Init function contains at
|* most one crosstalk impulse response, the victim receiver's 'impulse_matrix'
|* contains four crosstalk impulse responses.  Also, using the above notation
|* note that the first index number of each impulse response passed to the
|* transmitter's AMI_Init function matches the transmitter's channel number,
|* and the second index number of each impulse response passed to the
|* receiver's AMI_Init function matches the receiver's channel number.
|*
|* It is the EDA tool's responsibility to rearrange the content of the
|* 'impulse_matrix' between the transmitter and receiver AMI_Init calls.
|*
|* The EDA tool is also responsible to limit the number of crosstalk channel
|* impulse responses in 'impulse_matrix' so that they shall not exceed 
|* 'Max_Init_Aggressors' as specified in the corresponding .ami parameter
|* file of the algorithmic model.  Consequently, the 'aggressors' parameter
|* of the AMI_Init function shall never contain a greater value than the
|* value provided in 'Max_Init_Aggressors' of the corresponding .ami parameter
|* file.  While the allocated memory space for 'impulse_matrix' may be larger,
|* it is assumed that there is no meaningful data in that space beyond the
|* last column of the impulse response matrix that is stored in it.
|*
|* The AMI_Init function must not change the size or organization of
|* 'impulse_matrix' that it was given in any way.
|*

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

ANALYSIS PATH/DATA THAT LED TO SPECIFICATION:

Discussion within the IBIS-ATM committee provided many important inputs to
this BIRD.  It was desirable to clarify that the impulse_matrix columns
populated by the aggressor channels should include any impulse response
modification that is to be made by the respective aggressor transmitters.

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

ANY OTHER BACKGROUND INFORMATION:

The following documents are provided as supporting material for this BIRD:

- "CrossTalk_IRmatrix_02.pdf", provided by Arpad Muranyi of Mentor Graphics
http://www.vhdl.org/pub/ibis/macromodel_wip/archive/20110331/arpadmuranyi/impulse_matrix%20and%20cross%20talk%20in%20IBIS-AMI/CrossTalk_IRmatrix_02.pdf

- "CrossTalk.pdf", provided by Walter Katz of SiSoft
http://www.vhdl.org/pub/ibis/macromodel_wip/archive/20110308/walterkatz/Impulse%20Crosstalk%20Matrix%20Explanation%20Using%20Touchstone%20Example/Crosstalk.pdf

The BIRD was unanimously approved at the June 24, 2011 IBIS IOpen Forum teleconference.

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