***************************************************************************** ***************************************************************************** BIRD ID#: 127.4 ISSUE TITLE: IBIS-AMI Typographical Corrections REQUESTER: Arpad Muranyi, Mentor Graphics, Inc. DATE SUBMITTED: January 18, 2011 DATE REVISED: May 17, 2011; August 16, 2011; October 18, 2011; November 3, 2011 DATE ACCEPTED BY IBIS OPEN FORUM: December 9, 2011 ***************************************************************************** ***************************************************************************** STATEMENT OF THE ISSUE: Section 6c of the IBIS v5.0 specification has numerous typographical or editorial issues which may imply incorrect rules or could be confusing to the reader. In Section 6c, "ALGORITHMIC MODELING INTERFACE (AMI)", the use of the keyword Format in parameter declarations is inconsistent with the common use of parameter tree structures. Since the Format keyword really doesn't serve a practical purpose and the existing IBISCHK program does not issue an error or warning when Format is not included, the suggestion is to make the use of the keyword Format optional. ***************************************************************************** STATEMENT OF THE RESOLVED SPECIFICATIONS: Changes in BIRD127 marked with |* Changes in BIRD127.1 marked with |** On pg. 140 replace the following lines: | Usage: (required for model specific parameters) | In Parameter is required Input to executable | Out Parameter is Output only from executable | Info Information for user or EDA platform | InOut Required Input to executable. Executable may return different | value. with these lines: |* Usage : |* |* Required, where must be substituted by one of the following: | In Parameter is required Input to executable | Out Parameter is Output only from executable | Info Information for user or EDA platform | InOut Required Input to executable. Executable may return different | value. |* |* Note that the purpose of Usage Out or InOut is to provide a mechanism |*** for the Algorithmic Model to return values to the EDA tool to be used |*** as described by the IBIS-AMI specification. On pg. 140 replace the following lines: | Type: (default is Float) | Float | Integer | String | Boolean (True/False) | Tap (For use by TX and RX equalizers) | UI (Unit Interval, 1 UI is the inverse of the data rate frequency, | for example 1 UI of a channel operating at 10 Gb/s is 100 ps) with these lines: |* Type : |* |* Required, where must be substituted by one of the following: | Float | Integer | String | Boolean (True/False) | Tap (For use by TX and RX equalizers) | UI (Unit Interval, 1 UI is the inverse of the data rate frequency, | for example 1 UI of a channel operating at 10 Gb/s is 100 ps) On pg. 140 replace the following lines: | Format: (default is range) | Value Single value data | Range | List ... with these lines: |* Format : |* |* Where Format is optional and and are required. |* and must be substituted with one of the following: |* Value Single value data. Note that Value and Default |* (defined below) are mutually exclusive, and must not be used |* together for the same parameter. | Range | List ... On pg. 141 replace the following lines: | (Rx_Clock_PDF | (Usage Info) | (Type Float) | (Format Table | (Labels Row_No Time_UI Density) | (-50 -0.1 1e-35) with these lines: | (Rx_Clock_PDF | (Usage Info) |*** (Type Integer UI Float) |* (Table |* (Labels "Row_No" "Time_UI" "Density") | (-50 -0.1 1e-35) | On pg. 141 reduce the indentation of the following lines: | Gaussian | Dual-Dirac | Composite of two Gaussian | DjRj | Convolve Gaussian (sigma) with uniform Modulation PDF On pg. 141 replace the following lines: | Default : | Depending on the Type, will provide a default value for the | parameter. For example, if the Type is Boolean, could be True | or False, if the Type is Integer, the can be an integer value. with these lines: | Default : |* Default and Value are mutually exclusive, and must not be used together |* for the same parameter. Default is not allowed for Table, Gaussian, |* Dual-Dirac and DjRj. Default is optional for Range, List, Corner, |* Increment and Steps. If a Default is specified, its value must |* have the same Type as the parameter. For example, if Type is Boolean, |* must be either True or False, if Type is Integer, must |* be an integer. Also, if Default is specified, must be a member |* of the set of allowed values of the parameter. If Default is not |* specified, the default value of the parameters will be the value. On pg. 141 replace the following lines: | Description : | ASCII string following Description describes a reserved parameter, | model specific parameter, or the Algorithmic model itself. It is used | by the EDA platform to convey information to the end-user. The entire | line has to be limited to IBIS line length specification. String | literals begin and end with a double quote (") and no double quotes are | allowed inside the string literals. with these lines: | Description : |* The string following Description may describe a reserved parameter, a |* model specific parameter, or the Algorithmic model itself. This string |* is used by the EDA platform to convey information to the end-user. |* Description is optional, but its usage is highly recommended |* for describing the Algorithmic model and the model specific parameters |* of the Algorithmic model. The Description string may span multiple |* lines, but it is recommended that the text contained in the Description |* string should not exceed 120 characters per line. The following modifications assume that the section about Use_Init_Output starting on pg. 144 will be removed as a consequence of the corrections and simplifications made to the reference flow (BIRD 120). On pg. 143 replace the following lines: | The model parameter file must be organized in the parameter | tree format as discussed in section 3.1.2.6 of "NOTES ON | ALGORITHMIC MODELING INTERFACE AND PROGRAMMING GUIDE", | Section 10 of this document. The file must have 2 distinct | sections, or sub-trees, 'Reserved_Parameters' section and | 'Model_Specific' section with sections beginning and ending | with parentheses. The complete tree format is described in | the section 3.1.2.6 of the Section 10 of this document. with these lines: | The model parameter file must be organized in the parameter |* tree format as described in section 3.1.2.6 of "NOTES ON | ALGORITHMIC MODELING INTERFACE AND PROGRAMMING GUIDE", |* Section 10 of this document. The file must contain a distinct |* section or sub-tree named 'Reserved_Parameters' beginning and |* ending with parentheses. The file may also contain another |* section or sub-tree named 'Model_Specific', beginning and |* ending with parentheses. The sub-trees 'Reserved_Parameters' |* and 'Model_Specific' are branches of the root of the tree. |* |* All leaves of the .ami file must begin with one of the |* following reserved words: |* |* Type |* Usage |* Description |* Default |* or Format |* |* A branch in the .ami file is an "AMI Parameter" if it |* contains the leaves Type, Usage, and any of the following |* leaves: |* |* Default |* or Format |* |* and does not contain another branch. Multiple leaves |* containing the same reserved word are not allowed within an |* AMI Parameter branch. A branch which contains one or more |* sub-branches may only contain the (Description ) |* leaf/value pair in addition to the sub-branches. Each |* sub-branch of a branch must have a unique name. |* |*** The parameter string passed in and out of the AMI executable |*** model (described in sections 3.1.2.6, 3.1.2.7 and 3.2.2.4 of |*** Section 10 of this document) is formatted the same way as |*** the tree data structure in the .ami file with the following |*** exceptions. |* |* The EDA tool must process the content of the .ami file so that |* 1) the 'Reserved_Parameters' and 'Model_Specific' branch |* names and their associated open and close parentheses "()" |* are not included in the AMI_parameters_in string, and |* 2) the AMI Parameter branches with Usage In or Usage InOut |* are converted to leaf/value pairs for the AMI_parameters_in |* string, possibly incorporating user selections. In this |* conversion each AMI parameter branch name becomes a leaf |* name in the AMI_parameters_in string and each leaf name |* is followed by a white space, a value and a closing |* parentheses ")". |* |*** The AMI executable model must generate a parameter string that |*** is consistent with the content of the .ami file so that |*** 1) the 'Reserved_Parameters' and 'Model_Specific' branch |*** names and their associated open and close parentheses "()" |*** are not included in the AMI_parameters_out string, and |**** 2) the AMI Parameter branches Usage Out or Usage InOut are |**** returned as leaf/value pairs in the AMI_parameters_out |**** string. |* |* The EDA tool must pass a string to the AMI executable model |** through the AMI_parameters_in argument. This string must |** contain all of the leaf/value pair formatted Usage In and |** Usage InOut AMI parameters if there are any defined in the |** .ami file. No other information may be included in this |** string. The string must always include the root name of |** the parameter tree, even if there are no parameters to pass |** to the algorithmic model. |* |* The AMI executable model must return a string to the EDA tool |** through the AMI_parameters_out argument. This string must |** contain all of the leaf/value pair formatted Usage InOut and |** Usage Out AMI parameters if there are any defined in the |** .ami file. No other information may be included in this |** string. The string must always include the root name of |** the parameter tree, even if there are no parameters to return |** to the EDA tool. |* |* For Usage In, the value in the "AMI Parameter" leaves are |* determined by the EDA tool based on the "AMI Parameter" |* branches in the .ami file. For Usage Out, the value in the |* "AMI Parameter" leaves are determined by the Algorithmic |* Model. For Usage InOut, the value in the "AMI Parameter" |* leaves are first determined by the EDA tool based on the |* "AMI Parameter" branches in the .ami file and passed into |* the Algorithmic Model which may return a new value in the |* "AMI Parameter" leaves after some processing. |* On pg. 144 add these lines before "Reserved Parameters:" |* |* All parameters must be in the following format: |* |* (parameter_name (Usage ) |* (Type ) |* ({Format} ) |* (Default ) |* (Description )) |* |* Notes: |* 1) The order of the entries is not important. |* 2) The word Format is optional as indicated by the curly |* braces "{" and "}" and may be ignored by the EDA tools. |* (The examples do not show the word Format). |* 3) Certain reserved parameter names allow only certain |* selections, as described below. |* 4) The selection of Value and Default are |* always mutually exclusive. Certain parameters may require |* Value or Default, but Value and Default are not allowed to |* be present together for the same parameter. |* 5) is always required for selections other |* than Value. |* 6) Default is optional for Range, List, Corner, |* Increment and Steps. |* 7) Default is not allowed for Table, Gaussian, |* Dual-Dirac and DjRj. |** 8) Additional rules apply when is Table. The |** format for describes a set of rows containing data |** values. Each row has its set of column data values enclosed |** by parentheses '(' and ')'. Each row contains the same |** number of column values. Any or all of these columns may |** have different data types. For this case the |** argument is either a list of data types (one for each |** column), or a single data type. If it is a single data |** type then this type shall be applied to all of the columns |** in each row. |*** 9) Description is optional. On pg. 144 remove the following lines: | Init_Returns_Impulse, Use_Init_Output, GetWave_Exists, | Max_Init_Aggressors and Ignore_Bits On pg. 144 replace the following lines: | The following reserved parameters are used by the EDA tool | and are required if the [Algorithmic Model] keyword is | present. The entries following the reserved parameters | points to its usage, type and default value. All reserved | parameters must be in the following format: | | (parameter_name (Usage )(Type ) | (Default ) (Description )) with these lines: | The following reserved parameters are used by the EDA tool | and are required if the [Algorithmic Model] keyword is |* present. The entries following the reserved parameter |* names determine their usage, type and value. Their value |* may be defined using either Default or Value but not both. |* Description is optional. On pg. 145 remove the following lines: | The following reserved parameter provides textual description | to the user defined parameters. On pg. 145 remove the following lines under Tx_Jitter and Tx_DCD: ... If specified, they must be in the following format: | | ( (Usage )(Type ) | (Format ) (Default ) | (Description )) On pg. 146 replace the following lines: | (Tx_Jitter (Usage Info)(Type Float) | (Format Gaussian )) | | (Tx_Jitter (Usage Info)(Type Float) | (Format Dual-Dirac )) | | (Tx_Jitter (Usage Info)(Type Float) | (Format DjRj )) | | (Tx_Jitter (Usage Info)(Type Float) | (Format Table | (Labels Row_No Time Probability) | (-5 -5e-12 1e-10) | (-4 -4e-12 3e-7) | (-3 -3e-12 1e-4) | (-2 -2e-12 1e-2) | (-1 -1e-12 0.29) | (0 0 0.4) | (1 1e-12 0.29) | (2 2e-12 1e-2) | (3 3e-12 1e-4) | (4 4e-12 3e-7) | (5 5e-12 1e-10) )) with these lines: | (Tx_Jitter (Usage Info)(Type Float) |* (Gaussian )) | | (Tx_Jitter (Usage Info)(Type Float) |* (Dual-Dirac )) | | (Tx_Jitter (Usage Info)(Type Float) |* (DjRj )) | |*** (Tx_Jitter (Usage Info)(Type Integer Float Float) |* (Table |* (Labels "Row_No" "Time" "Probability") | (-5 -5e-12 1e-10) | (-4 -4e-12 3e-7) | (-3 -3e-12 1e-4) | (-2 -2e-12 1e-2) | (-1 -1e-12 0.29) | (0 0 0.4) | (1 1e-12 0.29) | (2 2e-12 1e-2) | (3 3e-12 1e-4) | (4 4e-12 3e-7) | (5 5e-12 1e-10) )) | On pg. 146 replace the following lines: | (Tx_DCD (Usage Info)(Type Float) | (Format Range )) with these lines: | (Tx_DCD (Usage Info)(Type Float) |* (Range )) | On pg. 146 remove the following lines under Rx_Clock_PDF and Rx_Receiver_Sensitivity: ... If specified, they must be in the | following format: | | ( (Usage )(Type ) | (Format ) (Default ) | (Description )) On pg. 147 replace the following lines: | Rx_Receiver_Sensitivity: | | Rx_Receiver_Sensitivity can be of Usage Info and Out and of | Type Float and of Data Format Value, Range and Corner. | Rx_Receiver_Sensitivity tells the EDA platform the voltage | needed at the receiver data decision point to ensure proper | sampling of the equalized signal. In this example, 100 mV | (above +100 mV or below -100 mV) is needed to ensure the | signal is sampled correctly. Examples of Rx_Clock_PDF | declarations are: with these lines: | Rx_Receiver_Sensitivity: | | Rx_Receiver_Sensitivity can be of Usage Info and Out and of | Type Float and of Data Format Value, Range and Corner. | Rx_Receiver_Sensitivity tells the EDA platform the voltage | needed at the receiver data decision point to ensure proper | sampling of the equalized signal. In this example, 100 mV | (above +100 mV or below -100 mV) is needed to ensure the |* signal is sampled correctly. Examples of |* Rx_Receiver_Sensitivity declarations are: On pg. 147 replace the following lines: | (Rx_Clock_PDF (Usage Info)(Type Float) | (Format Gaussian )) | | (Rx_Clock_PDF (Usage Info)(Type Float) | (Format Dual-Dirac )) | | (Rx_Clock_PDF (Usage Info)(Type Float) | (Format DjRj )) | | (Rx_Clock_PDF (Usage Info)(Type Float) | (Format Table | (Labels Row_No Time Probability) | (-5 -5e-12 1e-10) | (-4 -4e-12 3e-7) | (-3 -3e-12 1e-4) | (-2 -2e-12 1e-2) | (-1 -1e-12 0.29) | (0 0 0.4) | (1 1e-12 0.29) | (2 2e-12 1e-2) | (3 3e-12 1e-4) | (4 4e-12 3e-7) | (5 5e-12 1e-10) )) with these lines: | (Rx_Clock_PDF (Usage Info)(Type Float) |* (Gaussian )) | | (Rx_Clock_PDF (Usage Info)(Type Float) |* (Dual-Dirac )) | | (Rx_Clock_PDF (Usage Info)(Type Float) |* (DjRj )) | |*** (Rx_Clock_PDF (Usage Info)(Type Integer Float Float) |* (Table |* (Labels "Row_No" "Time" "Probability") | (-5 -5e-12 1e-10) | (-4 -4e-12 3e-7) | (-3 -3e-12 1e-4) | (-2 -2e-12 1e-2) | (-1 -1e-12 0.29) | (0 0 0.4) | (1 1e-12 0.29) | (2 2e-12 1e-2) | (3 3e-12 1e-4) | (4 4e-12 3e-7) | (5 5e-12 1e-10) )) | On pg. 147 replace the following lines: | (Rx_Receiver_Sensitivity (Usage Info)(Type Float) | (Format Value )) | | (Rx_Receiver_Sensitivity (Usage Info)(Type Float) | (Format Range )) | | (Rx_Receiver_Sensitivity (Usage Info)(Type Float) | (Format Corner )) with these lines: | (Rx_Receiver_Sensitivity (Usage Info)(Type Float) |* (Value )) | | (Rx_Receiver_Sensitivity (Usage Info)(Type Float) |* (Range )) | | (Rx_Receiver_Sensitivity (Usage Info)(Type Float) |** (Corner )) On pg. 149 remove the following lines: | The user defined parameters must be in the following format: | | ( (usage ) (Type ) | (Format ) (Default ) | (Description )) | On pg. 150 replace the following lines: (Model_Specific | Required heading (txtaps (-2 (Usage Inout)(Type Tap) (Format Range 0.1 -0.1 0.2)(Default 0.1) (Description "Second Precursor Tap")) (-1 (Usage Inout)(Type Tap) (Format Range 0.2 -0.4 0.4)(Default 0.2) (Description "First Precursor Tap")) (0 (Usage Inout)(Type Tap) (Format Range 1 -1 2)(Default 1) (Description "Main Tap")) (1 (Usage Inout)(Type Tap) (Format Range 0.2 -0.4 0.4)(Default2 0.2) (Description "First Post cursor Tap")) (2 (Usage Inout)(Type Tap) (Format Range 0.1 -0.1 0.2)(Default 0.1) (Description "Second Post cursor Tap")) ) | End txtaps (tx_freq_offset (Format Range 1 0 150) (Type UI) (Default 0)) ) | End Model_Specific ) | End SampleAMI with these lines: (Model_Specific | Required heading (txtaps * (-2 (Usage InOut)(Type Tap) (Range 0.1 -0.1 0.2)(Default 0.1) (Description "Second Precursor Tap")) * (-1 (Usage InOut)(Type Tap) (Range 0.2 -0.4 0.4)(Default 0.2) (Description "First Precursor Tap")) * (0 (Usage InOut)(Type Tap) (Range 1 -1 2)(Default 1) (Description "Main Tap")) * (1 (Usage InOut)(Type Tap) (Range 0.2 -0.4 0.4)(Default2 0.2) (Description "First Post cursor Tap")) * (2 (Usage InOut)(Type Tap) (Range 0.1 -0.1 0.2)(Default 0.1) (Description "Second Post cursor Tap")) ) | End txtaps * (tx_freq_offset (Range 1 0 150) (Type UI) (Default 0)) ) | End Model_Specific ) | End SampleAMI On pg. 190 replace the following line: | extern long AMI_GetWave (wave, wave_size, clock_times, AMI_memory); with this line: |** extern long AMI_GetWave (wave, wave_size, clock_times, AMI_parameters_out, AMI_memory); ***************************************************************************** ANALYSIS PATH/DATA THAT LED TO SPECIFICATION Careful reading of the specification revealed that these items are misleading and/or redundant. The proposed changes take into account the removal of the Use_Init_Output Boolean in the proposed reference flow. BIRD 127.1 was issued to correct a typo (missing ) in the Rx_Receiver_Sensitivity example on pg. 147 with the usage of Corner, and to correct the missing AMI_parameters_out argument in the example of calling AMI_GetWave on pg. 190. BIRD 127.2 was issued to make the rules consistent with the rules defined in BIRD 137.1 for the parameter strings passed around between the EDA tool and the algorithmic model. Note #8 was added to incorporate the Table syntax described in BIRD 132 in the rules spelled out in this BIRD. BIRD 127.3 was issued to make the Table examples consistent with the new rules defined in BIRD 132, making use of the multiple column Type definition feature. References to specific rules regarding Usage InOut and Out were removed since they will be addressed in a different BIRD. A paragraph was added to describe the content of AMI_parameters_out string more clearly. Rule #9 was added. In BIRD 127.4, "or Usage InOut" was added to the text describing how the parameter string is generated by the algorithmic model. ***************************************************************************** ANY OTHER BACKGROUND INFORMATION: Leaf/value pair terminology may be changed in the editorial process to correspond to pg. 187 in the existing specification. *****************************************************************************