ICM Issue Resolution Document (IIRD) IIRD ID#: 2.3 ISSUE TITLE: Frequency Dependent RLGC Matrices REQUESTOR: Michael Mirmak, Intel Corporation DATE SUBMITTED: July 8, 2004 DATE REVISED: July 22, 2004; September 3, 2004; November 4, 2004 DATE ACCEPTED BY IBIS OPEN FORUM: January 28, 2005 **************************************************************************** **************************************************************************** STATEMENT OF THE ISSUE: To improve the accuracy of interconnect modeling data using RLGC matrices, several common matrix formats exist which describe interconnect electrical data extracted at particular frequencies. To enable ICM to support this data, a new keyword, [Frequency], is proposed. **************************************************************************** STATEMENT OF THE RESOLVED SPECIFICATIONS: Changes in IIRD2 are denoted by |*. Changes in IIRD2.1 are denoted by |**. Changes in IIRD2.2 are denoted by |***. Changes in IIRD2.3 are denoted by |****. The text of Section 8 should be changed as follows (note that changes made in IIRD7.1 are included here): ============================================================================= Keyword: [Resistance Matrix], [Inductance Matrix], [Conductance Matrix], [Capacitance Matrix] Required: Yes, at least one Argument: Text String (Matrix Type) Used By: [Begin ICM Section] Uses: [Row], [Bandwidth], Change the above line to: |* Uses: [Frequency], [Row], [Bandwidth], Description: Each keyword marks the beginning of its respective matrix data set and also specifies how the matrix data is formatted. Usage Rules: Following each matrix keyword, one of the following arguments is required: Diagonal_matrix, Banded_matrix, Sparse_matrix, or Full_matrix. No more than one of each matrix type is allowed per section. If model type is one of the SLM_* types, only a diagonal matrix is allowed. Change to: Usage Rules: Following each matrix keyword, one of the following arguments is required: Diagonal_matrix, Banded_matrix, Sparse_matrix, or |** Full_matrix. No more than one data set of each matrix type is allowed |** for a given matrix keyword. If the ICM_model_type used is SLM_* |** only the Diagonal_matrix type may be used in matrix section descriptions |** for that model. The [Resistance Matrix], [Inductance Matrix], [Conductance Matrix], and [Capacitance Matrix] keywords may appear multiple times in the file, however they may appear only once between the [Begin ICM Section]/[End ICM Section] keyword pair, and they must be placed after the [Derivation Method] keyword. After each of these keywords, insert the matrix data in the appropriate format. (These formats are described in detail below). For all matrix keyword data sets below, both diagonal and non-diagonal entries are assumed to contain actual values of resistance, conductance, etc. For example, a [Resistance Matrix] is assumed to contain information in the form of ohms or ohms per unit length, depending on the use of the Mult or Len modifiers. Values for non-listed [Row] or column entries or for matrices not explicitly defined shall be assumed equal to zero. |* The following section is added: |* If [Frequency] is omitted, the data for the matrix description is assumed |* to be frequency-invariant, or identical at all frequencies (see |* [Frequency] below). |* |*** The following section is added: |*** If a matrix keyword, such as [Resistance Matrix] etc., is used in combination with |*** one or more [Frequency] keyword data sets, all other matrix keywords, if |**** present and consisting of non-zero frequency-dependent data, must contain [Frequency] |*** data sets at the same frequency points. |**** The following text is from previous IIRDs and is removed from consideration. |**** START DELETION |**** For any matrix keyword, the same row and column data points must be used for any and all |**** [Frequency] blocks within that matrix keyword data set. For example, if an |**** [Inductance Matrix] of type Sparse_matrix contains data for only columns 1 and |**** 3 for [Row] 5 at 1e9 Hz, then all other [Frequency] data blocks within that matrix |**** must contain data for columns 1 and 3 of [Row] 5. |*** The following section is deleted: |** If [Frequency] data is present under a particular matrix keyword, |** other matrix keywords in the same ICM Section need not provide data |** at the same frequency points. |**** END DELETION Arguments: Diagonal_matrix, Banded_matrix, Sparse_matrix, or Full_matrix |** The following section is added: |** Note that, if the [Frequency] keyword is used for a matrix keyword, all the |** data under that matrix keyword, for all frequencies, must use the same matrix type. |** For example, if data for [Resistance Matrix] is available for three [Frequency] points, |** and the [Resistance Matrix] is declared to be of type Banded_matrix, all three [Frequency] |** data sets must follow the Banded_matrix format. |**** Under "Banded_matrix," the following section is added: |**** Matrix data sets of type Banded_matrix within the same ICM Section, regardless of frequency-dependence, |**** are not required to use the same bandwidth. For example, a [Resistance Matrix] may have a bandwidth |**** of 5, while the [Inductance Matrix] for the same ICM Section may have a bandwidth of 2. |**** |**** Under "Resistance Matrix Description," the following section is deleted: |**** The resistance matrix represents the total DC resistance in ohms between the two ends |**** of this section of the interconnect. |* The following section is removed: |* Loss Matrix Description: |* |* The [ICM S-parameter] keyword introduced later provides a format |* for describing losses that vary with frequency. |* The following section is added: |* ============================================================================= |* Keyword: [Frequency] |* Required: No |* Argument: Numeric Value |* Used By: [Resistance Matrix], [Inductance Matrix], [Conductance Matrix], |* [Capacitance Matrix] |* Uses: [Row] |* Description: Indicates the start of a data block within a matrix where all the |* data applies for a particular given frequency |* Usage Rules: The argument to [Frequency] may be any positive number or zero |* (see number format rules in Section 3.0). Units of hertz (Hz) are assumed. |* |* Following each Matrix keyword described above, the [Frequency] keyword may be |* used to define the frequency at which the matrix data was extracted. |*** [Frequency] may appear more than once within any matrix keyword data set. |* However, the numeric value associated with any [Frequency] keyword may not |*** be used more than once within the same matrix data set for any one [ICM Section]. |*** For example, a [Resistance Matrix] may not contain more than one block of data for |* "[Frequency] 1.0e9." |**** The following text is from previous IIRDs and is removed from consideration. |**** START DELETION |** For any matrix keyword, the same row and column data points must be used for all |** [Frequency] blocks within that matrix keyword data set. For example, if an |** [Inductance Matrix] of type Sparse_matrix contains data for only columns 1 and |** 3 for [Row] 5 at 1e9 Hz, then blocks for all other frequencies must contain data |** for columns 1 and 3 of [Row] 5. |**** END DELETION |** If [Frequency] is omitted, the data for that matrix keyword description is assumed |*** to be frequency-invariant, or identical at all frequencies. |**** As with all other data under the matrix keywords, values for non-listed [Row] |**** or column entries under [Frequency] shall be assumed equal to zero. |**** The following text is from previous IIRDs and is removed from consideration. |**** START DELETION |*** If a matrix keyword, such as [Resistance Matrix], etc., is used in combination |*** with one or more [Frequency] keyword data sets, all other matrix keywords, |*** if present and consisting of frequency-dependent data, must contain |*** [Frequency] data sets at the same frequency points. |**** END DELETION |*** No explicit limit is defined on the number of [Frequency] data sets which may |** be present under any matrix keyword. |*** Model authors should take care to ensure that sufficient [Frequency] data |*** points are provided to reduce simulation errors due to interpolation. |*** Additionally, model authors should ensure that frequency-dependent models |*** involving multiple [ICM Section]s share appropriate frequency ranges. ============================================================================= Keyword: [Row] Required: Yes Argument: Numeric Value Used By: [Resistance Matrix], [Inductance Matrix], [Conductance Matrix], [Capacitance Matrix] Change the above lines to: |* Used By: [Resistance Matrix], [Inductance Matrix], [Conductance Matrix], |* [Capacitance Matrix], [Frequency] Description: Indicates the beginning of a new row of the matrix Usage Rules: The argument must be a sequential number beginning at 1 and continuing to the last row for the matrix. Following a [Row] keyword is a block of numbers that represent the entries for that row. Suppose that the current row is number M. Then the first number listed is the diagonal entry, [M,M]. Following this number are the entries of the upper half of the matrix that belong to row M: [M, M+1], [M, M+2], ... up to [M,N]. For even a modest-sized matrix, this data will not all fit on one line. It is allowed to break the data up with new-line characters so that the line length limit is observed. Example: Suppose the matrix has 40 conductors and that we are currently working on Row 19. There is 1 diagonal entry, plus 40 - 19 = 21 entries in the upper half of the matrix to be specified, for 22 entries total. Row 1 always has the most entries, and that each successive row has one fewer entry than the last; the last row always has just a single entry. |*** The following section is deleted: |*** The [Row] keyword must be placed directly after the [Bandwidth] |*** keyword. The data entries for the row defined by this keyword |*** begin on the line below the keyword and may span multiple lines. |*** The following section is added: |*** For frequency-invariant matrices of type Banded_matrix, the |*** first [Row] keyword must be placed directly below the [Bandwidth] |*** keyword. In all other cases, the [Row] keyword appears |*** below either the [Frequency] keyword, below one of the four |*** matrix keywords or below data from the previous [Row]. |*** The data entries for the row defined by this keyword begin |*** on the line below the keyword and may span multiple lines. ------------------------------------------------------------------------------ See example "Matrix Example" lower in this document. ... ----------------------------------------------------------------------------- Matrix Examples: ... |* An example of an ICM Section which uses frequency-dependent RLGC |* data is shown below. |* |* Note that Resistance does not use the [Frequency] keyword; the |* resulting data set is assumed to be frequency-invariant or identical |* at all frequencies. |* |* [Begin ICM Section] ExampleMatrix01 |* [Derivation Method] Distributed |* [Resistance Matrix] Banded_matrix |* [Bandwidth] 0 |* [Row] 1 |*** 10 |* [Row] 2 |*** 15 |* [Row] 3 |*** 15 |* [Row] 4 |*** 10 |* [Row] 5 |*** 10 |* [Row] 6 |*** 15 |* [Row] 7 |*** 15 |* [Row] 8 |*** 10 |* |* [Inductance Matrix] Full_matrix |* [Frequency] 0 |* [Row] 1 |* 3.04859000E-07 4.73185000E-08 1.34280000E-08 6.12191000E-09 |* 1.74022000E-07 7.35469000E-08 2.73201000E-08 1.33807000E-08 |* [Row] 2 |* 3.04859000E-07 4.73185000E-08 1.34280000E-08 7.35469000E-08 |* 1.74022000E-07 7.35469000E-08 2.73201000E-08 |* [Row] 3 |* 3.04859000E-07 4.73185000E-08 2.73201000E-08 7.35469000E-08 |* 1.74022000E-07 7.35469000E-08 |* [Row] 4 |* 3.04859000E-07 1.33807000E-08 2.73201000E-08 7.35469000E-08 |* 1.74022000E-07 |* [Row] 5 |* 4.70049000E-07 1.43791000E-07 5.75805000E-08 2.95088000E-08 |* [Row] 6 |* 4.70049000E-07 1.43791000E-07 5.75805000E-08 |* [Row] 7 |* 4.70049000E-07 1.43791000E-07 |* [Row] 8 |* 4.70049000E-07 |* |* [Frequency] 1.0M |* [Row] 1 |* 1.52429500E-07 2.36592500E-08 6.71400000E-09 3.06095500E-09 |* 8.70110000E-08 3.67734500E-08 1.36600500E-08 6.69035000E-09 |* [Row] 2 |* 1.52429500E-07 2.36592500E-08 6.71400000E-09 3.67734500E-08 |* 8.70110000E-08 3.67734500E-08 1.36600500E-08 |* [Row] 3 |* 1.52429500E-07 2.36592500E-08 1.36600500E-08 3.67734500E-08 |* 8.70110000E-08 3.67734500E-08 |* [Row] 4 |* 1.52429500E-07 6.69035000E-09 1.36600500E-08 3.67734500E-08 |* 8.70110000E-08 |* [Row] 5 |* 2.35024500E-07 7.18955000E-08 2.87902500E-08 1.47544000E-08 |* [Row] 6 |* 2.35024500E-07 7.18955000E-08 2.87902500E-08 |* [Row] 7 |* 2.35024500E-07 7.18955000E-08 |* [Row] 8 |* 2.35024500E-07 |* |* [Frequency] 1.00000000E+09 |* [Row] 1 |* 7.62147500E-08 1.18296250E-08 3.35700000E-09 1.53047750E-09 |* 4.35055000E-08 1.83867250E-08 6.83002500E-09 3.34517500E-09 |* [Row] 2 |* 7.62147500E-08 1.18296250E-08 3.35700000E-09 1.83867250E-08 |* 4.35055000E-08 1.83867250E-08 6.83002500E-09 |* [Row] 3 |* 7.62147500E-08 1.18296250E-08 6.83002500E-09 1.83867250E-08 |* 4.35055000E-08 1.83867250E-08 |* [Row] 4 |* 7.62147500E-08 3.34517500E-09 6.83002500E-09 1.83867250E-08 |* 4.35055000E-08 |* [Row] 5 |* 1.17512250E-07 3.59477500E-08 1.43951250E-08 7.37720000E-09 |* [Row] 6 |* 1.17512250E-07 3.59477500E-08 1.43951250E-08 |* [Row] 7 |* 1.17512250E-07 3.59477500E-08 |* [Row] 8 |* 1.17512250E-07 |* |* The capacitance matrix has sparse coupling: |* |* [Capacitance Matrix] Sparse_matrix |* [Frequency] 0 |* [Row] 1 |* 1 2.48227000E-10 |* 2 -1.56651000E-11 |* 5 -9.54158000E-11 |* 6 -7.15684000E-12 |* [Row] 2 |* 2 2.51798000E-10 |* 3 -1.56552000E-11 |* 5 -6.85199000E-12 |* 6 -9.04860000E-11 |* 7 -6.82003000E-12 |* [Row] 3 |* 3 2.51798000E-10 |* 4 -1.56651000E-11 |* 6 -6.82003000E-12 |* 7 -9.04860000E-11 |* 8 -6.85199000E-12 |* [Row] 4 |* 4 2.48227000E-10 |* 7 -7.15684000E-12 |* 8 -9.54158000E-11 |* [Row] 5 |* 5 1.73542000E-10 |* 6 -3.38247000E-11 |* [Row] 6 |* 6 1.86833000E-10 |* 7 -3.27226000E-11 |* [Row] 7 |* 7 1.86833000E-10 |* 8 -3.38247000E-11 |* [Row] 8 |* 8 1.73542000E-10 |* |* [Frequency] 1.0M |* [Row] 1 |* 1 6.20567500E-11 |* 2 -3.91627500E-12 |* 5 -2.38539500E-11 |* 6 -1.78921000E-12 |* [Row] 2 |* 2 6.29495000E-11 |* 3 -3.91380000E-12 |* 5 -1.71299750E-12 |* 6 -2.26215000E-11 |* 7 -1.70500750E-12 |* [Row] 3 |* 3 6.29495000E-11 |* 4 -3.91627500E-12 |* 6 -1.70500750E-12 |* 7 -2.26215000E-11 |* 8 -1.71299750E-12 |* [Row] 4 |* 4 6.20567500E-11 |* 7 -1.78921000E-12 |* 8 -2.38539500E-11 |* [Row] 5 |* 5 4.33855000E-11 |* 6 -8.45617500E-12 |* [Row] 6 |* 6 4.67082500E-11 |* 7 -8.18065000E-12 |* [Row] 7 |* 7 4.67082500E-11 |* 8 -8.45617500E-12 |* [Row] 8 |* 8 4.33855000E-11 |* |* [Frequency] 1.00000000E+09 |* [Row] 1 |* 1 3.10283750E-11 |* 2 -1.95813750E-12 |* 5 -1.19269750E-11 |* 6 -8.94605000E-13 |* [Row] 2 |* 2 3.14747500E-11 |* 3 -1.95690000E-12 |* 5 -8.56498750E-13 |* 6 -1.13107500E-11 |* 7 -8.52503750E-13 |* [Row] 3 |* 3 3.14747500E-11 |* 4 -1.95813750E-12 |* 6 -8.52503750E-13 |* 7 -1.13107500E-11 |* 8 -8.56498750E-13 |* [Row] 4 |* 4 3.10283750E-11 |* 7 -8.94605000E-13 |* 8 -1.19269750E-11 |* [Row] 5 |* 5 2.16927500E-11 |* 6 -4.22808750E-12 |* [Row] 6 |* 6 2.33541250E-11 |* 7 -4.09032500E-12 |* [Row] 7 |* 7 2.33541250E-11 |* 8 -4.22808750E-12 |* [Row] 8 |* 8 2.16927500E-11 |* [End ICM Section] ExampleMatrix01 Further, Section 4 is changed as follows: ============================================================================= Section 4 K E Y W O R D T R E E D I A G R A M ============================================================================= /-- Start of File | ------------- | |--/--[Begin Header] | | |--[ICM Ver] | | |--[File Name] | | |--[File Rev] | | |--[Date] | | |--[Source] | | |--[Notes] | | |--[Disclaimer] | | |--[Copyright] | | |--[Support] | | |--[Redistribution] | | |--[Redistribution Text] | \--[End Header] | |--[Comment Char]* | |--/--[Begin ICM Family] | (see Chapter 7) | | |--[Manufacturer] | | |--[ICM Family Description] | | |--[ICM Model List] | | | |--/--[Begin ICM Model] | | | | ICM_model_type | | | | SGR | | | | Ref_impedance | | | |--[ICM Model Description] | | | |--[Tree Path Description] | | | | Model_pinmap | | | | Fork, Endfork | | | | Section | | | |--[Nodal Path Description] | | | | Model_nodemap | | | | N_section | | | |--[ICM Swath Parameters] | (optional, for swaths) | | | | Left_edge | | | | Right_edge | | | | Top_edge | | | | Bottom_edge | | | |--[ICM Swath Pin Numbers] | (optional, for swaths) | | \--[End ICM Model] | | | |--[ICM Pin Map] | Pins to Physical | | Pin_order | | Num_of_columns | | Num_of_rows | | Pin_list | |--[ICM Node Map] | Nodes to Physical | \--[End ICM Family] | | |--/--[Begin ICM Section] | (see Chapter 8) | | |--[Derivation Method] | | |--[Resistance Matrix] | | | /-- [Bandwidth] |*| | | |-- [Frequency] | | | \-- [Row] | | |--[Inductance Matrix] | | | /-- [Bandwidth] |*| | | |-- [Frequency] | | | \-- [Row] | | |--[Conductance Matrix] | | | /-- [Bandwidth] |*| | | |-- [Frequency] | | | \-- [Row] | | |--[Capacitance Matrix] | | | /-- [Bandwidth] |*| | | |-- [Frequency] | | | \-- [Row] | | | | | |--[ICM S-parameter] | | | File_name | | | Port_assignment | | | | \--[End ICM Section] | | \--[End] **************************************************************************** ANALYSIS PATH/DATA THAT LED TO SPECIFICATION: The intent of the [Frequency] keyword is to permit variations in RLGC data with frequency to be described, while also permitting minimal descriptions of frequency-invariant data. Therefore, [Frequency] is entirely optional. In the absence of [Frequency], RLGC matrix data is assumed to be invariant with frequency. This also permits backward compatibility with existing ICM 1.0 model data. Data interpolation is left entirely to the tools using the data. Recommendations for optimal data extraction are assumed to be included as part of an ICM cookbook or documentation provided with individual tools. IIRD2.1 clarifies that not all matrices for a particular ICM Section must use [Frequency]. IIRD2.1 also removes the 100 [Frequency] section restriction and clarifies an error in the usage rules of matrices. IIRD2.2 addresses concerns raised during the August 6, 2004 IBIS Open Forum meeting, pertaining to the relationship between R, L, C and G matrices and the frequency-dependent data within them. IIRD2.2 establishes that all matrices must share the same frequency points if the [Frequency] keyword is used. No other relationships are implied or should be inferred. IIRD2.2 also corrects a minor stylistic issue where the values of a simple, purely resistive matrix were unnecessarily presented in scientific notaion. Additionally, IIRD2.2 fixes a too-narrow definition of the placement of [Row]. IIRD2.3 accounts for changes proposed and approved in IIRD7.1. It also simplifies the text by reinforcing that missing data will be assumed zero in value. **************************************************************************** ANY OTHER BACKGROUND INFORMATION: Note that the hierarchical position of [Row] becomes ambiguous with the introduction of [Frequency]. [Row] can either be directly "under" the matrix keywords or "under" [Frequency]. IIRD2.2: Kelly Green, author of the ICM 1.0 parser, notes that the position of [Row] is not ambiguous, but rather is fixed as a subparameter of [Frequency], which itself may or may not be explicit in any ICM 1.1 matrix. The changes in IIRD2.2 are constructed in such a way to allow both lossless and lossy transmission lines to be described. An open question remains as to how data which is not defined for the same conductors across different matrices will be handled by EDA tools, even if the available data is defined across the same frequencies for all matrix data sets within an [ICM Section]. IIRD2.3: The changes in this version update the description of [Resistance Matrix] data sets to permit resistance data which does not represent the "total DC resistance in ohms between the two ends of this section of the interconnect." The IIRD also adds a warning to model authors that missing column data for Sparse_matrix and Banded_matrix matrices will be assumed zero. This could cause passivity and/or convergence problems if data has been inappropriately omitted. This change required inclusion of the changes in IIRD7.1 to ensure proper clarity. ****************************************************************************