****************************************************************************
****************************************************************************
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_size1
 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_rows1
* 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 IBISATM 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%20IBISAMI/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.
****************************************************************************