TOUCHSTONE ISSUE RESOLUTION DOCUMENT (TSIRD) TSIRD ID#: 7.2 ISSUE TITLE: Standardized Pole-Residue Representation of Touchstone Data REQUESTOR: Arpad Muranyi, Siemens EDA DATE SUBMITTED: February 14, 2024; May 7, 2024; June 3, 2024 DATE REVISED: DATE ACCEPTED: -------------------------------------------------------------------------------- DEFINITION OF THE ISSUE: With the ever-increasing complexity of package and printed circuit board designs, Touchstone files used for interconnect modeling are also increasing in size. Touchstone file sizes are often in the hundreds of Megabytes, or even Gigabytes range. This can have a negative effect on simulation performance and makes the distribution of these files very challenging. Consequently, there is a great need for finding ways to describe large interconnects with smaller files. In addition, different EDA vendors use different (proprietary) algorithms to process the Touchstone file data in simulations, which can cause simulation results to be different from different EDA tools, even with identical Touchstone files. A common method in the industry to reduce the size of Touchstone files - and thereby improve simulation performance - is to convert the large frequency table data to fitted pole-residue format. There are numerous advantages to this method, one of which is that EDA tools can produce identical simulation results with the same pole-residue-based models. While pole-residue fitting (also known as "rational fit" or "vector fit") has been used for decades in the industry, this data format has not been standardized yet, which makes it EDA tool dependent. The goal of this proposal is to standardize the pole-residue format so that all EDA tools could make use of the same pole-residue model files. -------------------------------------------------------------------------------- SOLUTION REQUIREMENTS: The Touchstone specification must meet these requirements: Table 1: Solution Requirements Requirement Notes * Define three new keyword pairs to describe pole-residue data [Begin Pole-Residue Data] / [End Pole-Residue Data], [Begin Common Poles Data] / [End Common Poles Data] and [Begin Residues Data] / [End Residues Data] * Define a new keyword to document the number of pole-residue matrix elements [Number of Pole-Residue Indices] * Define a new keyword pair to document the source of the pole-residue data [Begin Pole-Residue Data Source] / [End Pole-Residue Data Source] * Make the frequency table and the pole residue data mutually exclusive in the same file Change the rules of the existing [Network Data] and [Noise Data] keywords -------------------------------------------------------------------------------- SUMMARY OF PROPOSED CHANGES: For review purposes, the proposed changes are summarized as follows: Table 2: Touchstone Keywords Affected Specification Item New/Modified/Other Notes -------------------------------------------------------------------------------- PROPOSED CHANGES: Note that the existing Touchstone specification does not define the units for [Network Data] (we should probably correct that). Consider adding a File_rev keyword to Touchstone in general... Change the text of the existing Touchstone 2.1 specification throughout for the [Number of Frequencies], [Network Data] and [Noise Data] keywords so that they would be not allowed when the [Begin Pole-Residue Data Source] and related keywords are present. Add the following introduction and keywords to the Touchstone specification in the appropriate location: There are two practical ways of defining pole-residue data. The first approach defines each matrix element by their unique set of poles and residues. The second approach may be used when the set of poles is common for all matrix elements and only the corresponding set of residues (residue data) are different in the matrix elements. The second approach eliminates the need for duplicating the set of poles in each matrix element and may result in smaller files. The [Begin Pole-Residue Data] and [End Pole-Residue Data] keywords are used in the first case to define the set of poles and residues for each matrix element. In the second case, the common set of poles is defined only once using the keyword pair [Begin Common Poles Data] / [End Common Poles Data]. This definition of the set of poles applies to all matrix elements. Since this set of poles is common for all matrix elements, only the set of residues need to be defined individually for each matrix element. The [Begin Residues Data] / [End Residues Data] keywords are used for that purpose. Keyword: [Begin Pole-Residue Data Source] / [End Pole-Residue Data Source] Required: The [Begin Pole-Residue Data Source] / [End Pole-Residue Data Source] keyword pair is required when the [Begin Pole-Residue Data] is present, or when [Begin Common Poles Data] and [Begin Residues Data] are present. Otherwise, it is not permitted. Description: The purpose of the [Begin Pole-Residue Data Source] keyword is to document the original source Touchstone file containing the network data from which the pole-residue data was generated. Sub-Params: Source_file, File_date, File_revision, File_size, Company_name, Source_checksum, Min_valid_frequency, Max_valid_frequency Usage rules: The Source_file and File_date subparameters are required. Each subparameter shall start on a separate line and may appear in any order. Each subparameter and its argument shall be separated by at least one white space. The file name argument of the Source_file subparameter is case-sensitive to support operating systems in which file names are case-sensitive. The month argument in the File_date subparameter should be spelled out for clarity. The File_size argument shall be provided in bytes (not kilo-bytes or mega-bytes, etc.). Min_valid_frequency and Max_valid_frequency define the valid frequency range of the fitted pole residue data as it relates to the original S-parameter data. These frequencies may correspond to the minimum and maximum frequencies found in the original S-parameter network data or the minimum and maximum fitted pole frequencies and indicate the useful bandwidth of the pole-residue data, beyond which the model may not accurately represent the original S-parameter data. Example: [Begin Pole-Residue Data Source] Company_name NoName Corp. Source_file Original_matrix_formatted.s30p File_revision rev0.0 File_date July 4, 2024 File_size 12345678 Source_checksum CE114e4501d2e4E2DcEA3E17B546F339 Min_valid_frequency 0 Max_valid_frequency 10e+9 [End Pole-Residue Data Source] Keyword: [Number of Pole-Residue Indices] Required: The [Number of Pole-Residue Indices] keyword is required when the [Begin Pole-Residue Data] or the [Begin Residues Data] keyword is present, otherwise it is not permitted. Description: The purpose of this keyword is to provide a mechanism to check for possible typographical errors or accidental loss of data in the file. Usage rules: The [Number of Pole-Residue Indices] keyword shall appear after the [Number of Ports] keyword and before the [Begin Pole-Residue Data], [Begin Common Poles Data], or [Begin Residues Data] keywords. The [Number of Pole-Residue Indices] keyword shall be followed by at least one white space and a single integer number. The value of the integer that follows this keyword shall range from zero to N[2] for full matrices, or zero to N*(N+1)/2 for upper or lower triangle matrices, where N is the model's number of ports given in the [Number of Ports] keyword. When the [Matrix Format] keyword is not present, the format of the matrix is full, otherwise it is defined by the [Matrix Format] keyword (upper, lower or full). The total number of indices following the [Begin Pole-Residue Data] or the [Begin Residues Data] keywords shall match the value provided in the [Number of Pole-Residue Indices] keyword. When the value provided by this keyword is less than N[2] for full matrices, or less than N*(N+1)/2 for upper or lower triangle matrices, the matrix element data of the matrix elements whose indices are not present after the [Begin Pole-Residue Data] or the [Begin Residues Data] keyword are considered to be zero. Note that having fewer than N matrix elements may be useful in some situations. For example, S-parameters with all zero values specify an ideal N-port terminator, or Y-parameters with all zero values specify an ideal N-port isolator, or Z-parameters with all zero values specify an ideal grounding (all ports connected to ground). Examples: ! The full matrix of a 4-port network data (.s4p file) would ! consist of 16 matrix elements. [Number of Pole-Residue Indices] 16 ! If all entries of the 4-port network data (.s4p file) are ! zero except its diagonal, it may be described with four ! pole-residue keywords. [Number of Pole-Residue Indices] 4 Keyword: [Begin Pole-Residue Data] Required: The [Begin Pole-Residue Data] keyword is not permitted prior to Version 3.0 files; it is not permitted for parameter types G and H, and it is not permitted when the [Begin Common Poles Data] and [Begin Residues Data] keywords or the [Network Data] keyword are present or when the [Number of Pole-Residue Indices] keyword's argument is zero. Otherwise, at least one instance of the [Begin Pole-Residue Data] keyword is required. Description: This keyword contains the coefficients of the pole-residue representation of the network data. Sub-Params: Delay, Asymptote, Constant_at_infinity, Number_of_data_lines Usage rules: The [Begin Pole-Residue Data] keyword is followed by at least one white space and one or more integer number pairs, which are separated by a comma and enclosed in a pair of open and close parentheses. A white space is not required around the comma between the integer numbers or between the integer numbers and the parentheses or between the parentheses. The integer number pairs (r, c) that follow the [Begin Pole-Residue Data] keyword denote row and column indexing to define which matrix element (or elements) are described by the data that follows. The number of matrix elements described by the [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pair is determined by the number of integer number pairs (r, c) that follow the [Begin Pole-Residue Data] keyword. The list of indices may span multiple lines and is terminated by any of the subparameters that follow. The value of the indices r and c shall range from 1 to N, where N is the model's number of ports given in the [Number of Ports] keyword. The maximum number of matrix elements in a model file shall range from zero to N[2] for full matrices, or zero to N*(N+1)/2 for upper or lower triangle matrices, where N is the model's number of ports given in the [Number of Ports] keyword. When the [Matrix Format] keyword is not present, the format of the matrix is full, otherwise it is defined by the [Matrix Format] keyword (upper, lower or full). The total number of indices following the [Begin Pole-Residue Data] keyword shall match the value provided in the [Number of Pole-Residue Indices] keyword. When the number of matrix elements is less than N[2] for full matrices, or less than N*(N+1)/2 for upper or lower triangle matrices, the matrix element data of the matrix elements whose indices are not present are considered to be zero. All index number pairs following all occurrences of the [Begin Pole-Residue Data] keyword in a model file must be unique. For example, a 4-port model with a full matrix description might have 16 [Begin Pole-Residue Data] keywords with the following indices: [Begin Pole-Residue Data] (1,1) [Begin Pole-Residue Data] (1,2) [Begin Pole-Residue Data] (1,3) [Begin Pole-Residue Data] (1,4) [Begin Pole-Residue Data] (2,1) [Begin Pole-Residue Data] (2,2) [Begin Pole-Residue Data] (2,3) [Begin Pole-Residue Data] (2,4) [Begin Pole-Residue Data] (3,1) [Begin Pole-Residue Data] (3,2) [Begin Pole-Residue Data] (3,3) [Begin Pole-Residue Data] (3,4) [Begin Pole-Residue Data] (4,1) [Begin Pole-Residue Data] (4,2) [Begin Pole-Residue Data] (4,3) [Begin Pole-Residue Data] (4,4) A 4-port model that has a symmetric matrix may be described two different ways. One method would rely on the [Matrix Format] keyword with the argument "Lower" or "Upper" and a corresponding set of indices, as shown here for an "Upper" triangle matrix: [Begin Pole-Residue Data] (1,1) [Begin Pole-Residue Data] (1,2) [Begin Pole-Residue Data] (1,3) [Begin Pole-Residue Data] (1,4) [Begin Pole-Residue Data] (2,2) [Begin Pole-Residue Data] (2,3) [Begin Pole-Residue Data] (2,4) [Begin Pole-Residue Data] (3,3) [Begin Pole-Residue Data] (3,4) [Begin Pole-Residue Data] (4,4) The second method would use explicit indexing without the [Matrix Format] keyword, as follows: [Begin Pole-Residue Data] (1,1) [Begin Pole-Residue Data] (1,2) (2,1) [Begin Pole-Residue Data] (1,3) (3,1) [Begin Pole-Residue Data] (1,4) (4,1) [Begin Pole-Residue Data] (2,2) [Begin Pole-Residue Data] (2,3) (3,2) [Begin Pole-Residue Data] (2,4) (4,2) [Begin Pole-Residue Data] (3,3) [Begin Pole-Residue Data] (3,4) (4,3) [Begin Pole-Residue Data] (4,4) Note that omitting the keywords for any or all of the matrix elements in the above examples is permissible, implying that the matrix element data of the omitted matrix elements are all zero. Also note that for large pin count components with regularly repeating patterns, such as connectors, the explicit indexing syntax allows for a long list of indices after the [Begin Pole-Residue Data] keyword to support reusing the same matrix element data for several matrix elements. When the pole-residue data is generated from Touchstone 1.0 or 1.1 Y or Z parameters (in which case the Y or Z parameters are normalized), the Touchstone 1.0 or 1.1 Y or Z-parameter data from which the pole-residue data is generated shall be unnormalized first by the model maker. Unlike [Network Data] in Touchstone files, the pole-residue data is ordered by matrix elements, not by frequency. For each pole-residue matrix element (r, c), r and c define the row and column indices of the matrix element in the table of poles and residues. Each [Begin Pole-Residue Data] keyword contains the data of one or more matrix elements (r, c), which may consist of a delay parameter, a parameter for the residue of the pole at infinite frequency, an asymptote parameter, and zero or more pole-residue data lines in the form of [αm ωm Am Bm], m=1...M, where M is the number of pole-residue data lines defined in subparameter Number_of_data_lines. Each data line may describe a single real pole or a complex conjugate pair of complex poles. For example, with 7 real poles and 14 complex conjugate pairs of complex poles, the number of data lines M becomes 21. αm and ωm are the coefficients of the real and imaginary parts of the complex poles and Am and Bm are the coefficients of the real and imaginary parts of the (normalized) residues. The unit for αm and ωm is Hz. The unit for Am and Bm depends on the parameter type. For S-parameters it is unitless, for Z-parameters it is ohms, and for Y-parameters it is siemens (1/ohms). The following equation describes how the frequency dependence H(if) of one pole-residue matrix element (r, c) is calculated. Note that, in general, this equation applies to each matrix element independently with unique values in each variable, except in the case of common poles, when αm and ωm have the same values for all m. Hm(s)=12Am-iBm1+s/(αm+iωm)+Am+iBm1+s/(αm-iωm) Here, i represents the imaginary unit √(-1), f represents frequency in Hz, e represents Euler's number, the base of the natural logarithm, D is a delay with units of seconds, e[(][-i2PIfD][)] is a delay operator in the frequency domain, H0 is the residue of the pole at infinite frequency (which is a real constant when delay is zero, or the magnitude of the cosine / sine functions of the delay operator when delay is non-zero), and G defines the linear asymptote, measured in 2*PI*farad or siemens/Hz for Y-parameters, or in 2*PI*henry or ohm/Hz for Z-parameters. Note that delay is only allowed for S-parameters, which cannot have linear asymptotes, and linear asymptotes are only allowed for Y and Z-parameters which do not have delay operators. This means that the delay multiplier D and the asymptote G cannot be present simultaneously in the equation above. (They are shown together in the formula for brevity). If delay is zero, then e[(][-i2PIfD][)] equals 1. If present, this delay is applied to all pole-residue components (except the linear asymptote G which is not allowed to coexist with delay), resulting in a delayed time response. The values (1/2)(Am - iBm) and (1/2)(Am + iBm) are normalized residues (divided by the pole) that correspond to the pair of complex conjugate poles. For a real pole (Bm = 0, ωm = 0), the corresponding summand in the equation above turns into Am/(1 + if/αm), where Am is the coefficient of the normalized residue for the real pole. Coefficient Am is the value that the pair of complex conjugate poles or a real pole contribute to Hm(if) at DC, when f = 0. Duplicate real poles, or duplicate complex-conjugate pairs of complex poles are not permitted for the same matrix element, that is, in the pole-residue data provided between the [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pairs. The subparameters that follow the [Begin Pole-Residue Data] keyword may be in any order, except for the Number_of_data_lines subparameter which shall be the last one before the [End Pole-Residue Data] keyword. Subparameter Delay is optional, but it is not permitted for Y and Z-parameters (it is only allowed for S-parameters). Delay corresponds to D in the equation above. In S-parameter models it may be present (or absent) within any number of [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pairs. If it is not present, its value is assumed to be zero. Its unit is seconds. Subparameter Asymptote is optional, but it is not permitted for S-parameters (it is only allowed for Y and Z-parameters). Asymptote corresponds to G in the equation above. In Y and Z-parameter models it may be present (or absent) within any number of [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pairs. If it is not present, its value is assumed to be zero. Asymptote defines the factor G used in the asymptotic component G*(i*frequency) that linearly grows with frequency, where G = (2*PI)*Linf, where Linf is an equivalent inductance for Z-parameters, or G = (2*PI)*Cinf, where Cinf is an equivalent capacitance for Y-parameters. Since frequency is defined in Hz, the coefficient G has the unit of 2*PI*farad or siemens/Hz for Y-parameters, or 2*PI*henry or ohm/Hz for Z-parameters. The unit for the asymptotic component G*(i*frequency) is ohm for Z-parameters and siemens (1/ohm) for Y-parameters. Subparameter Constant_at_infinity is optional. Constant_at_infinity corresponds to H0 in the equation above. It may be present (or absent) within any number of [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pairs. If it is not present, its value is assumed to be zero. The unit for Constant_at_infinity depends on the parameter type. For S-parameters it is unitless, for Z-parameters it is ohms, for Y-parameters it is siemens (1/ohms). The Number_of_data_lines subparameter is required. The value of Number_of_data_lines is equal to the number of pole-residue data lines that follow. It is permissible to have no data lines, in which case the value of Number_of_data_lines shall be zero. The value of Number_of_data_lines is not required to be the same for each [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pair in a given model file. The Number_of_data_lines subparameter within the [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pair is followed by the pole-residue data lines (if present) and is terminated by the [End Pole-Residue Data] keyword. Each data line contains four numbers corresponding to αm, ωm, Am and Bm, as described above. Keyword: [End Pole-Residue Data] Required: The [End Pole-Residue Data] keyword is required for each [Begin Pole-Residue Data] keyword, otherwise it is not permitted. Description: The [End Pole-Residue Data] keyword indicates the end of the pole-residue data. Examples: ! This example is for S-parameter models ! for which Asymptote is not permitted [Begin Pole-Residue Data] (1,1) Delay = 1.26351e-09 Constant_at_infinity = 0.321123423421 Number_of_data_lines = 35 1.60981891306855e+08 6.03830005978569e+09 -2.15363238798792e-06 1.96534688582861e-05 2.93321810887676e+09 1.91770843721616e+09 -1.05426912887832e+01 -8.82630433918342e+00 1.23990373548953e+08 4.39994357143840e+09 1.25728612812034e-05 2.13669372820529e-05 1.57193681614524e+08 3.10437931944199e+09 5.10972708034658e-05 -1.15663907003945e-05 2.83363448768380e+07 2.10218276754607e+09 3.07314704488451e-06 5.16091015967049e-06 ... 5.23409852743859e+06 1.34534534593845e+07 3.07314704488451e-06 5.16091015967049e-06 [End Pole-Residue Data] ! This example is for Y or Z-parameter models ! for which Delay is not permitted [Begin Pole-Residue Data] (1,1) Asymptote = 0.83754e-12 Constant_at_infinity = 0.321123423421 Number_of_data_lines = 35 1.60981891306855e+08 6.03830005978569e+09 -2.15363238798792e-06 1.96534688582861e-05 2.93321810887676e+09 1.91770843721616e+09 -1.05426912887832e+01 -8.82630433918342e+00 1.23990373548953e+08 4.39994357143840e+09 1.25728612812034e-05 2.13669372820529e-05 1.57193681614524e+08 3.10437931944199e+09 5.10972708034658e-05 -1.15663907003945e-05 2.83363448768380e+07 2.10218276754607e+09 3.07314704488451e-06 5.16091015967049e-06 ... 5.23409852743859e+06 1.34534534593845e+07 3.07314704488451e-06 5.16091015967049e-06 [End Pole-Residue Data] Keyword: [Begin Common Poles Data] Required: The [Begin Common Poles Data] keyword is not permitted prior to Version 3.0 files; it is not permitted for parameter types G and H, and it is not permitted when the [Begin Pole-Residue Data] keyword or the [Network Data] keyword is present or when the [Number of Pole-Residue Indices] keyword's argument is zero. Otherwise, the [Begin Common Poles Data] keyword is required. Description: This keyword is used when all matrix elements (r, c) have the same set of poles. In this case, the [Begin Common Poles Data] keyword contains the coefficients of the common poles from the pole-residue representation of the network data, and the [Begin Residues Data] keyword(s) contain the coefficients of the (normalized) residues for each matrix element. Sub-Param: Number_of_data_lines Usage rules: Only one [Begin Common Poles Data] / [End Common Poles Data] keyword pair is permitted in a model file. Note that [Begin Common Poles Data] does not use indexing after the keyword because the set of poles is common for all matrix elements. When the pole-residue data is generated from Touchstone 1.0 or 1.1 Y or Z-parameters (in which case the Y or Z-parameters are normalized), the Touchstone 1.0 or 1.1 Y or Z-parameter data from which the pole-residue data is generated shall be unnormalized first by the model maker. The Number_of_data_lines subparameter is required. The value of Number_of_data_lines is equal to the number of common poles data lines that follow. It is permissible to have no data lines, in which case the value of Number_of_data_lines shall be zero. However, the [Begin Common Poles Data] keyword and each [Begin Residues Data] keyword must have the same number of data lines in a given model file. The Number_of_data_lines subparameter within the [Begin Common Poles Data] / [End Common Poles Data] keyword pair is followed by the common poles data lines (if present) and is terminated by the [End Common Poles Data] keyword. Each data line contains two numbers corresponding to αm, ωm, as described above. Keyword: [End Common Poles Data] Required: The [End Common Poles Data] keyword is required when the [Begin Common Poles Data] keyword is present, otherwise it is not permitted. Description: The [End Common Poles Data] keyword indicates the end of the common poles data. Example: [Begin Common Poles Data] Number_of_data_lines = 35 1.60981891306855e+08 6.03830005978569e+09 2.93321810887676e+09 1.91770843721616e+09 1.23990373548953e+08 4.39994357143840e+09 1.57193681614524e+08 3.10437931944199e+09 2.83363448768380e+07 2.10218276754607e+09 ... 5.23409852743859e+06 1.34534534593845e+07 [End Common Poles Data] Keyword: [Begin Residues Data] Required: At least one [Begin Residues Data] keyword is required when the [Begin Common Poles Data] keyword is present, otherwise it is not permitted. Description: This keyword contains the coefficients of the (normalized) residues from the pole-residue representation of the network data and is used together with the coefficients of the common poles defined in the [Begin Common Poles Data] keyword. Sub-Params: Delay, Asymptote, Constant_at_infinity, Number_of_data_lines Usage rules: The [Begin Residues Data] keyword is followed by at least one white space and one or more integer number pairs, which are separated by a comma and enclosed in a pair of open and close parentheses. A white space is not required around the comma between the integer numbers or between the integer numbers and the parentheses or between the parentheses. The integer number pairs (r, c) that follow the [Begin Residues Data] keyword denote row and column indexing to define which matrix element (or elements) are described by the data that follows. The number of matrix elements described by the [Begin Residues Data] / [End Residues Data] keyword pair is determined by the number of integer number pairs (r, c) that follow the [Begin Residues Data] keyword. The list of indices may span multiple lines and is terminated by any of the subparameters that follow. The value of the indices shall range from 1 to N, where N is the model's number of ports given in the [Number of Ports] keyword. The maximum number of matrix elements in a model file shall range from zero to N[2] for full matrices, or zero to N*(N+1)/2 for upper or lower triangle matrices, where N is the model's number of ports given in the [Number of Ports] keyword. When the [Matrix Format] keyword is not present, the format of the matrix is full, otherwise it is defined by the [Matrix Format] keyword (upper, lower or full). The total number of indices following the [Begin Residues Data] keyword shall match the value provided in the [Number of Pole-Residue Indices] keyword. When the number of matrix elements is less than N[2] for full matrices, or less than N*(N+1)/2 for upper or lower triangle matrices, the matrix element data of the matrix elements whose indices are not present are considered to be zero. All index number pairs following all occurrences of the [Begin Residues Data] keyword in a model file must be unique. For example, a 4-port model with a full matrix description might have 16 [Begin Residues Data] keywords with the following indices: [Begin Residues Data] (1,1) [Begin Residues Data] (1,2) [Begin Residues Data] (1,3) [Begin Residues Data] (1,4) [Begin Residues Data] (2,1) [Begin Residues Data] (2,2) [Begin Residues Data] (2,3) [Begin Residues Data] (2,4) [Begin Residues Data] (3,1) [Begin Residues Data] (3,2) [Begin Residues Data] (3,3) [Begin Residues Data] (3,4) [Begin Residues Data] (4,1) [Begin Residues Data] (4,2) [Begin Residues Data] (4,3) [Begin Residues Data] (4,4) A 4-port model that has a symmetric matrix may be described two different ways. One method would rely on the [Matrix Format] keyword with the argument "Lower" or "Upper" and a corresponding set of indices, as shown here for an "Upper" triangle matrix: [Begin Residues Data] (1,1) [Begin Residues Data] (1,2) [Begin Residues Data] (1,3) [Begin Residues Data] (1,4) [Begin Residues Data] (2,2) [Begin Residues Data] (2,3) [Begin Residues Data] (2,4) [Begin Residues Data] (3,3) [Begin Residues Data] (3,4) [Begin Residues Data] (4,4) The second method would use explicit indexing without the [Matrix Format] keyword, as follows: [Begin Residues Data] (1,1) [Begin Residues Data] (1,2) (2,1) [Begin Residues Data] (1,3) (3,1) [Begin Residues Data] (1,4) (4,1) [Begin Residues Data] (2,2) [Begin Residues Data] (2,3) (3,2) [Begin Residues Data] (2,4) (4,2) [Begin Residues Data] (3,3) [Begin Residues Data] (3,4) (4,3) [Begin Residues Data] (4,4) Note that omitting the keywords for any or all of the matrix elements in the above examples is permissible, implying that the matrix element data of the omitted matrix elements are all zero. Also note that for large pin count components with regularly repeating patterns, such as connectors, the explicit indexing syntax allows for a long list of indices after the [Begin Residues Data] keyword to support reusing the same matrix element data for several matrix elements. When the pole-residue data is generated from Touchstone 1.0 or 1.1 Y or Z-parameters (in which case the Y or Z-parameters are normalized), the Touchstone 1.0 or 1.1 Y or Z-parameter data from which the pole-residue data is generated shall be unnormalized first by the model maker. The subparameters that follow the [Begin Residues Data] keyword may be in any order, except for the Number_of_data_lines subparameter which shall be the last one before the [End Residues Data] keyword. Subparameter Delay is optional, but it is not permitted for Y and Z-parameters (it is only allowed for S-parameters). Delay corresponds to D in the equation above. In S-parameter models it may be present (or absent) within any number of [Begin Residues Data] / [End Residues Data] keyword pairs. If it is not present, its value is assumed to be zero. Its unit is seconds. Subparameter Asymptote is optional, but it is not permitted for S-parameters (it is only allowed for Y, and Z-parameters). Asymptote corresponds to G in the equation above. In Y and Z-parameter models it may be present (or absent) within any number of [Begin Residues Data] / [End Residues Data] keyword pairs. If it is not present, its value is assumed to be zero. Asymptote defines the factor G used in the asymptotic component G*(i*frequency) that linearly grows with frequency, where G = (2*PI)*Linf, where Linf is an equivalent inductance for Z-parameters, or G = (2*PI)*Cinf, where Cinf is an equivalent capacitance for Y-parameters. Since frequency is defined in Hz, the coefficient G has the unit of 2*PI*farad or siemens/Hz for Y-parameters, or 2*PI*henry or ohm/Hz for Z-parameters. The unit for the asymptotic component G*(i*frequency) is ohm for Z-parameters and siemens (1/ohm) for Y-parameters. Subparameter Constant_at_infinity is optional. Constant_at_infinity corresponds to H0 in the equation above. It may be present (or absent) within any number of [Begin Residues Data] / [End Residues Data] keyword pairs. If it is not present, its value is assumed to be zero. The unit for Constant_at_infinity depends on the parameter type. For S-parameters it is unitless, for Z-parameters it is ohms, for Y-parameters it is siemens (1/ohms). The Number_of_data_lines subparameter is required. The value of Number_of_data_lines is equal to the number of residue data lines that follow. It is permissible to have no data lines, in which case the value of Number_of_data_lines shall be zero. However, each [Begin Residues Data] keyword and the [Begin Common Poles Data] keyword must have the same number of data lines in a given model file. The Number_of_data_lines subparameter within the [Begin Residues Data] / [End Residues Data] keyword pair is followed by the residues data lines (if present) and terminated by the [End Residues Data] keyword. Each data line contains two numbers corresponding to Am and Bm, as described above. Keyword: [End Residues Data] Required: The [End Residues Data] keyword is required for each [Begin Residues Data] keyword, otherwise it is not permitted. Description: The [End Residues Data] keyword indicates the end of the residues data. Examples: ! This example is for S-parameter models ! in which Asymptote is not permitted [Begin Residues Data] (1,1) Constant_at_infinity = 0.321123423421 Number_of_data_lines = 35 -2.15363238798792e-06 1.96534688582861e-05 -1.05426912887832e+01 -8.82630433918342e+00 1.25728612812034e-05 2.13669372820529e-05 5.10972708034658e-05 -1.15663907003945e-05 3.07314704488451e-06 5.16091015967049e-06 ... 3.07314704488451e-06 5.16091015967049e-06 [End Residues Data] ! This example is for Y or Z-parameter models [Begin Residues Data] (1,1) Asymptote = 0.83754e-12 Constant_at_infinity = 0.321123423421 Number_of_data_lines = 35 -2.15363238798792e-06 1.96534688582861e-05 -1.05426912887832e+01 -8.82630433918342e+00 1.25728612812034e-05 2.13669372820529e-05 5.10972708034658e-05 -1.15663907003945e-05 3.07314704488451e-06 5.16091015967049e-06 ... 3.07314704488451e-06 5.16091015967049e-06 [End Residues Data] Full example: ! This is a "full example" of a fictitious S-parameter model using the ! pole-residue representation to illustrate proper keyword usage. [Version] 3.0 # S [Number of Ports] 4 ! The full matrix of a 4-port network data (.s4p file) would consist of ! 16 matrix elements, but an upper or lower triangle matrix needs only ! 10 matrix elements. [Number of Pole-Residue Indices] 10 [Reference] 50 50 50 0.1 [Matrix Format] Upper ! [Begin Pole-Residue Data Source] Company_name NoName Corp. Source_file Original_matrix_formatted.s4p File_revision rev0.0 File_date July 4, 2024 File_size 12345678 Source_checksum CE114e4501d2e4E2DcEA3E17B546F339 Min_valid_frequency 0 Max_valid_frequency 10e+9 [End Pole-Residue Data Source] ! ! This example is for S-parameter models for which Asymptote is not permitted [Begin Pole-Residue Data] (1,1) (2,2) (3,3) (4,4) Delay = 1.234567e-09 Constant_at_infinity = 0.1234567 Number_of_data_lines = 35 1.11997447664287e+08 3.24519226681551e+09 9.09052286272013e-05 6.49242007237459e-05 3.45625059472302e+08 3.13202277859585e+09 -5.42268000295391e-01 2.48747631004809e-01 4.87299986445282e+07 2.75489126930901e+09 1.02425334619334e-06 6.83169670830202e-06 4.09178020913195e+08 2.63376211400015e+09 -8.21075742857057e-01 7.09421412990463e-01 1.25803831342928e+07 2.28501210803170e+09 -6.90884078070982e-07 1.49162488028986e-06 ... 3.84539180679563e+08 1.63825202937485e+09 1.01930938230280e-01 1.80693045098583e+00 [End Pole-Residue Data] ! [Begin Pole-Residue Data] (1,2) (1,3) (1,4) (2,3) (2,4) (3,4) Delay = 1.654321e-09 Constant_at_infinity = 0.7654321 Number_of_data_lines = 32 2.57657596701128e+09 7.26711892771513e+09 -1.79483212033890e+00 -4.37286249216797e-01 2.45747062751230e+08 7.12315022893002e+09 -2.47169488917289e-02 4.52307576480460e-02 2.24603359541219e+08 6.68617182181606e+09 -1.29395685167005e-02 7.66829440907635e-02 2.19006983378440e+08 6.15632147553301e+09 -3.88176154021273e-02 8.26124289582556e-02 9.67891332253463e+07 5.84109173882383e+09 -1.27899882458803e-04 1.08884971149896e-05 ... 1.49750555567436e+08 5.30314608166901e+09 -1.00201770683190e-03 -1.39362341960212e-03 [End Pole-Residue Data] [End] -------------------------------------------------------------------------------- BACKGROUND INFORMATION/HISTORY: TSIRD 7.1 was submitted after a request was received to provide an equation for the subparameter "Residue_at_infinity". As a result, the original equation was updated to include this subparameter, as well as the "Asymptote" subparameter. While making these changes, several terminology inconsistencies were also discovered and corrected. This resulted in changing the name of the subparameter "Residue_at_infinity" to "Constant_at_infinity". In addition, the minimum required matrix elements was changed from N to zero, since in some special situations, fewer than N matrix elements may also be useful. TSIRD 7.2 was submitted after it was discovered that the division by two in front of the summation was accidentally dropped from the equation. The original Touchstone 2.0 [Mixed Mode Order] keyword could be applied to pole-residue data as well, if so desired. However, it's unlikely that time domain simulation (for which the fitted poles are created) can be conducted in a basis that does not represent actual node voltages and branch currents. Technical background information: There are a few reasons we (Mentor/Siemens) prefer the PLS format for S-parameters instead of the Foster format: * It is problematic to write the expression that defines the S-parameter matrix component in the Foster form because it may require hundreds of complex and real poles. The PLS format has a fixed number of columns (4), which are the real/imaginary part of frequency and the real/imaginary part of the coefficient). This greatly simplifies the parser and the writer code. * We'd like to see actual contribution from each pole (or conjugate pair) into the transfer function. In equation (2) below the factor A shows how much a particular pole contributes into DC value. The coefficients A, B have the same dimension as the parameters, i.e., dimensionless for S, or impedance/admittance for Z/Y, but denominator is dimensionless. In the Foster format, denominator is measured in rad/sec therefore the factors in the numerator bear this unit as well and are not normalized. That is, in the Foster format, the coefficients at the larger poles are typically very large as well, so that their contribution into DC equals their ratio. * In the PLS format the pole frequencies are defined in Hz, not rad/s, similar to the sampled Touchstone data. This simplifies interpretation of the values. Since the denominator is dimensionless, the poles could be easily rescaled (into rad/s) without touching the coefficients, which is not possible in Foster format. * There is no difference in the format between the real pole or a complex conjugate pair of poles (except that for a real pole the imaginary parts of the pole frequency or the coefficient are zero), but the Foster format assumes different number of summands. * Delay multiplier could be added by defining it as a single value, e.g., an insertion loss. Of course, the Foster format could always be converted into PLS format, and in many cases an inverse is possible as well. The main reason was convenience and performance when reading and writing complicated PLS files. Some of these reach tens of MB of disk space, especially for multi-port S-parameter models. Ultimately, the spec must be convenient to the users / EDA companies and allow flexibility. The PLS format is closely related to the Foster formula, which defines partial fraction expansion of the frequency dependence. The Foster format defines the function of the complex frequency s as: . (1) (1) is a sum of the constant component k0, the linearly growing imaginary component k1s, and the sum of partial fractions each one being a ratio of the complex coefficient and the difference between the complex frequency and the pole , which could be real or complex. Note that (1), by its structure, doesn't enforce realness and stability of the corresponding time domain responses. Realness requires that the summands corresponding to the complex poles always come in complex conjugate pairs, which makes the corresponding time domain response real. Stability means that with bounded input the system produces a bounded output. The latter requires that the real part of the poles in (1) is negative. The proposed PLS format enforces these conditions. In particular, the component that corresponds to a pair of the complex conjugate poles, is represented as: , (2) where and are complex numbers that define the normalized residue and the complex pole, and , are their complex conjugates. Realness and stability are enforced by the PLS format as follows: Every row of data contains four numbers, , which define the real and imaginary parts of the complex pole and the complex coefficient. The first two define the complex frequency Qm as: With that: * Realness is enforced "by design", because these four numbers in each data row make a pair of summands with complex-conjugate frequencies and coefficients. * Stability is enforced by the requirement that . Indeed, the denominator of the first summand in (2) becomes zero when , where is a mathematical definition of the complex pole. The real part of the stable polemust be negative, which happens when . For any complex conjugate pair of poles the value of specified in the PLS format is positive. This is because we have the freedom to choose the sign of this parameter any way we please (since they go in complex-conjugate pairs, one of them will have a positive). Of course, after we define positive values for and , the values and can't be chosen arbitrarily. In case of a real pole, we have , . We can find the Foster form or as follows: , (3) where and . Expression (2) can define a single real pole when and , which makes and . Conversion of parameters: PLS to FOSTER: , FOSTER to PLS: ,