⬇ Download Markdown  ·  ⬇ Download LaTeX  ·  ⬇ original  ·  view original  ·  CSV: table 1, table 2, table 3, table 4

FastHenry USER'S GUIDE Version 3.0

M. Kamon C. Smithhisler J. White

Research Laboratory of Electronics Department of Electrical Engineering and Computer Science

Massachusetts Institute of Technology Cambridge, MA 02139 U.S.A.

26 September 1996 This work was supported by Defense Advanced Research Projects Agency contract N00014- 91-J-1698, a National Science Foundation Graduate Fellowship, and grants from IBM and Digital Equipment Corporation.

iCopyright c 1996 Massachusetts Institute of Technology, Cambridge, MA. All rights reserved. This Agreement gives you, the LICENSEE, certain rights and obligations. By using the software, you indicate that you have read, understood, and will comply with the terms. M.I.T. MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IM- PLIED. By way of example, but not limitation, M.I.T. MAKES NO REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PAR- TICULAR PURPOSE OR THAT THE USE OF THE LICENSED SOFTWARE COMPONENTS OR DOCUMENTATION WILL NOT INFRINGE ANY PATENTS, COPY- RIGHTS, TRADEMARKS OR OTHER RIGHTS. M.I.T. shall not be held liable for any liability nor for any direct, indirect or consequential damages with respect to any claim by LICENSEE or any third party on account of or arising from this Agreement or use of this software.

ii CONTENTS Contents 1 How to Prepare Input Files 1.1 A Simple Example : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

1.2 Another Simple Example : : : : : : : : : : : : : : : : : : : : : : : : : : : 1.3 Input File Syntax : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

1.3.1 Node De nitions : : : : : : : : : : : : : : : : : : : : : : : : : : : 1.3.2 Segment De nitions : : : : : : : : : : : : : : : : : : : : : : : : : : 1.3.3 .Units keyword : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1.3.4 .Default keyword : : : : : : : : : : : : : : : : : : : : : : : : : : 1.3.5 .External keyword : : : : : : : : : : : : : : : : : : : : : : : : : : 1.3.6 .Freq keyword : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1.3.7 .Equiv keyword : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1.3.8 .End keyword : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1.3.9 Reference Plane de nitions : : : : : : : : : : : : : : : : : : : : : : 1.4 Other Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1.4.1 Printed Circuit Board : : : : : : : : : : : : : : : : : : : : : : : :

1.4.2 Vias and Meshed Planes : : : : : : : : : : : : : : : : : : : : : : : 1.4.3 Holey ground plane : : : : : : : : : : : : : : : : : : : : : : : : : : 1.4.4 Pin-connect : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1.4.5 Right Angle Connector : : : : : : : : : : : : : : : : : : : : : : : : 1.4.6 Photodetector : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

1 1 3 6 6 7 8 8 8 9 9 9 9 12 13 13 13 13 15 15 2 Running FastHenry 15 3 Geometry Postscript Pictures 29 4 Reference Plane Current Visualization 32 2.1 Example Run : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2.2 Processing the Output : : : : : : : : : : : : : : : : : : : : : : : : : : : :

2.2.1 The impedance matrix : : : : : : : : : : : : : : : : : : : : : : : : 2.2.2 Creating Equivalent Circuits : : : : : : : : : : : : : : : : : : : : : 2.3 Command Line Options : : : : : : : : : : : : : : : : : : : : : : : : : : : 2.4 Discretization Error Analysis : : : : : : : : : : : : : : : : : : : : : : : : :

2.4.1 The DC case : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2.4.2 The highest frequency case : : : : : : : : : : : : : : : : : : : : : :

3.1 3.2 3.3 3.4 Creating the panel le : : : : : : : : : : : : : : : : : : : : : : : : : : : : Creating the postscript le : : : : : : : : : : : : : : : : : : : : : : : : : : Tricks : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Visualization artifacts : : : : : : : : : : : : : : : : : : : : : : : : : : : :

4.1 Current Files : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4.2 Examples : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

4.2.1 Traces over a solid plane : : : : : : : : : : : : : : : : : : : : : : : 4.2.2 Traces over a divided plane : : : : : : : : : : : : : : : : : : : : : 4.2.3 Trace over a plane with holes : : : : : : : : : : : : : : : : : : : :

17 19 19 20 22 25 25 26

29 29 30 30

32 33 33 35 38 CONTENTS iii A Compiling FastHenry 38 B Changes in Version 3.0 40 A.1 Compilation Procedure : : : : : : : : : : : : : : : : : : : : : : : : : : : : 39 A.2 Producing this Guide : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 40

1 This manual describes FastHenry, a three-dimensional inductance extraction program. FastHenry computes the frequency dependent self and mutual inductances and resistances between conductors of complex shape. The algorithm used in FastHenry is an acceleration of the mesh formulation approach. The linear system resulting from the mesh formulation is solved using a generalized minimal residual algorithm with a fast multipole algorithm to eciently compute the iterates. See Appendix A for references. This manual is divided into four sections. The rst section explains the syntax for preparing input les for FastHenry. The input les contain the description of the conductor geometries. The second section describes how to run the program and process the output. The third section describes the generation of postscript images to visualize the three dimensional geometries de ned in the input le. The fourth section shows how to use Matlab to observe current distribution in reference plances. The les \nonuniform manual *.ps" constitute an important supplement to this man- ual and describe the new routines for specifying a nonuniformly discretized reference plane. Information on compiling FastHenry, obtaining the FastHenry source code, producing this document, and corresponding about FastHenry is given in Appendix A. Appendix B summarizes most of the changes in this version, 3.0, over the previous version, 2.5. 1 How to Prepare Input Files This section of the manual describes how to prepare input les for FastHenry. The input les specify the discretization of conductor volumes into laments. The input le speci es each conductor as a sequence of straight segments, or elements, connected together at nodes. Each segment has a nite conductivity and its shape is a cylinder of rectangular cross section of some width and height. A node is simply a point in 3-space. The cross section of each segment can then be broken into a number of parallel, thin laments, each of which will be assumed to carry a uniform cross section of current along its length. The rst two parts of this section describe the le format through simple examples. A detailed description is in the third part, and more complex examples can be found in the last section and later in the manual.

1.1 A Simple Example

The following is an input le which calculates the loop inductance of four segments nearly tracing the perimeter of a square. It is described more thoroughly on the next page.

This is the title line. It will always be ignored. * Everything is case INsensitive * An asterisk starts a comment line.

* since the default units .Default z=0 sigma=.e

* The nodes of N x=0 y=0 N x= y=0 N x= y= N x=0 y= N x=0 y=0.0

* The segments connec E N N w=0. h=0. E N N w=0. h=0. E N N w=0. h=0. E N N w=0. h=0.

* Frequency range of interest. .freq fmin=e fmax=e ndec=

E de ne segments. In particular, the line

E N N w=0. h=0.

de nes segment E1 to extend from node N1 to N2 and have a width of 0.2 mm and height of 0.1 mm as drawn in Figure 1. If the n  n impedance matrix, Z ( ! ), for an n -conductor problem is thought of as the parameters describing an n -port network, then the line

.external N1 N5 de nes N1 and N5 as one port of the network. In this example, only one port is speci ed, so the output will be a 1  1 matrix containing the value of the impedance looking into this one port. FastHenry calculates Z ( ! ) at the discrete frequencies described by the line

.freq fmin=e fmax=e ndec=

1.2 Another Simple Example 3 N2 1 mm

W=0.2 mm H = 0.1 mm N1

Figure 1: Example Segment for Sample Input File 1 mm

W=0.2 mm nwinc = 7 H = 0.1 mm nhinc = 5 N1

Figure 2: Segment discretized into 35 laments where fmin and fmax are the minimum and maximum frequencies of interest, and ndec is the number of desired frequency points per decade. In this case, Z ( ! ) will be calculated at 10 4 ; 10 5 ; 10 6 ; 10 7 ; and 10 8 Hz. All input les must end with .end . In the above example, FastHenry created one lament per segment since no discretization of the segments into laments was speci ed. In order to properly model non-uniform cross sectional current due to skin and proximity e ects, a ner discretization must be used. Finer laments are easily speci ed in the segment de nition. For example, replac- ing the de nition for

E1 with

E N N w=0. h=0. nhinc= nwinc=

speci es that E1 is to be broken up into thirty- ve laments: ve along its height ( nhinc=5 ) and seven along its width ( nwinc=7 ). See Figure 2.

1.2 Another Simple Example

To continue teaching by example, what follows is an example of computing the loop inductance of an L shaped trace over a ground plane with the trace's return path through the plane as shown in Figure 3. Note that a line beginning with `+' is a continuation of the previous line.

Trace Input port Ground plane (1000,0,0)

Trace shorted to plane (1000,1000,0) Figure 3: L-shaped trace over ground plane * * This example defines an L shaped trace above a ground plane which has a return path through the plane * Set the units for all following dimensions .units mils * * Define ground plane and nodes to reference later * * First define 3 corners of the plane, in clockwise or counter-cw order

* First define corners of the g x = 0 y = 0 z = 0 + x = 000 y = 0 z = 0 + x = 000 y = 000 z = 0

* thickness + thick = .

* discretization: + seg = 0 seg = 0

* Some defaults to model s .default nwinc= nhinc=

* The nodes N x=0 y=00 z=. N x=00 y=00 z=. N x=00 y=00 z=.

E N N w= h= E N N w= h=

* and one very high frequency .freq fmin=e- fmax=e ndec=0.0

.equiv nin n3 and then the other end is declared as the \port" with the .external statement. In this case, a single loop impedance will be computed. If, however, the

.equiv and .external were replaced with .external N1 N3 .external nout nin then the partial inductances and resistances of these two paths would be computed yielding a 2  2 impedance matrix. Computing the impedance for only two frequencies is useful for visualization of the distribution of current in the reference plane as described later in Section 4.

6 1 HOW TO PREPARE INPUT FILES

1.3 Input File Syntax

The previous section described many of the basics required for an input le. This section gives a more complete and detailed description of the input le format and should serve as a reference. Some general facts about le syntax:

 Lines are processed sequentially.  Uppercase is converted to lower case.  *" at the beginning of a line marks a comment line.  Lines are restricted to 1000 characters but can be continued with a +" as the rst character of subsequent lines. Intervening *" lines are allowed in this release.  The rst line in the le is considered the title line and is ignored. It is recommended that this line start with an *" for future compatibility and le concatenation.  The le must end with the .End keyword.  Names of objects are limited to 80 characters. In general, each line of the input le will either de ne some geometrical object, such as a node or segment, or it will specify some program parameter. All input lines that de ne geometrical objects begin with a letter de ning their type, and then some unique alphanumeric string of up to 80 characters. For instance, all node de nitions begin with the letter N . This sets object lines apart from parameter speci cation lines which begin with a period, .". The remainder of this section will describe all possible input lines. In the following description, any argument enclosed in `[ ]' indicates an optional argument. If not included on the input line, the actual value used for this argument will be either the program default, or the user default de ned by the

.Default keyword (described below). 1.3.1 Node De nitions

Syntax: Nstr [x = x_val] [y = y_val] [z = z_val]

This de nes a node called Nstr where str is any alphanumeric string. The rst character on the line must begin with an N for this to be interpreted as a node de nition. The node will have location ( x val; y val; z val ) where each coordinate has units de ned by the .Units keyword. Any of the coordinates can be omitted assuming that a default value has been previously speci ed with the .Default keyword. Otherwise, an error will occur and the program will exit.

1.3 Input File Syntax 7 1.3.2 Segment De nitions Syntax: Estr node1 node2 [w = value] [h = value] [sigma, rho = value]

[wx = value wy = value wz = value]

[wx = value wy = value wz = value] [nhinc = value] [nwinc = value] [rh = value] [rw = value]

This de nes a segment called Estr where str is any alphanumeric string. The rst character on the line must begin with the letter E for this to be interpreted as a segment de nition. The segment will extend from node node1 to node node2 which must be previously de ned node names.

h and w are the segment height and width. Either sigma , the conductivity, or rho , the resistivity, can be speci ed for the segment. Discretization of the segment into multiple, parallel thin laments is speci ed with the nhinc and nwinc arguments. nhinc speci es the number of laments in the height direction, and nwinc , the number in the width direction. Both must be integers. See Figure 2. By default, the ratio of adjacent laments is 2.0 as in Figure 2, however this can changed with the rh and rw arguments which specify the ratio in the height and width direction, respectively. While an automatic technique of dividing a section into laments based on the skin depth may be a better approach, no such feature is available. See Section 2.4 for guidance in choosing lament discretizations. To specify the orientation of the cross section, wx , wy , and wz represent any vector pointing along the width of the segment's cross section. If these are omitted, the width vector is assumed to lie in x-y plane perpendicular to the length. If the length direction is parallel to the z-axis, then the width is assumed along the x-axis.

h and w can be omitted provided they are assigned a default value in a previous .Default line. nhinc , nwinc , and sigma or rho can be omitted, and if not previously given a default value, then 1, 1, and the conductivity of copper, respectively, are used as default values. Note that the nodes used to de ne the elements must be de ned under Node Def- initions described above and cannot be reference plane nodes (See Section 1.3.9 for a description of reference planes). To connect to a reference plane, the user must instead create a new node at the desired location as described in Node De nitions and then use the .Equiv keyword to equivalence the reference plane node and the new node. For instance, the following is not allowed:

g x = 0 y = 0 z = 0 + x = 000 y = 0 z = 0 . . + n_gp (,,0) N x= y= z=0 E N n_gp

The legal way to de ne the segment would be

g x = 0 y = 0 z = 0 + x = 000 y = 0 z = 0

8 1 HOW TO PREPARE INPUT FILES . . + n_gp (5,5,0)

N x= y= z=0 N x= y= z=0

E1 N1 N2 .equiv N2 n_gp 1.3.3 .Units keyword Syntax: .Units unit-name This speci es the units to be used for all subsequent coordinates and lengths until the end of le or another .Units speci cation is encountered. Allowed units are kilometers, meters, centimeters, millimeters, micrometers, inches, and mils with unit-name speci ed as

km, m, cm, mm, um, in, mils , respectively. Note that this keyword a ects the expected units for the conductivity and resistivity. 1.3.4 .Default keyword

Syntax: .Default [x = value] [y = value] [z = value] [w = value] [h = value] [sigma, rho = value] [nhinc = value] [nwinc = value] [rh = value] [rw = value]

This keyword speci es default values to be used for subsequent object de nitions. A certain default value is used until the end of the le, or until it is superseded by another .Default line changing that value. 1.3.5 .External keyword Syntax: .External node1 node2 [portname] This keyword speci es node node1 and node node2 as a terminal pair or port whose impedance parameters should be calculated for the output impedance matrix. If an input le includes n .External lines, then the impedance matrix will be an n  n complex matrix. The port can be given a name by specifying a single word string portname . This name is used to reference this port in the output le, Zc.mat , and is also used with the command line

-x option described in Section 2.3. This keyword e ectively places a voltage source between these nodes and will later use the current through that source to determine an entry in the admittance matrix. The rst node speci ed is the positive node. Note that it is up to the user to insure that there are NO loops of only voltage sources. Also, a voltage source with no possible return path will always carry zero current producing a row of zeros in the admittance matrix. The output impedance matrix will thus be nonsense (NaN).

1.3 Input File Syntax 9 1.3.6 .Freq keyword

Syntax: .Freq fmin=value fmax=value [ndec = value]

This keyword speci es the frequency range of interest. fmin and fmax are the mini- mum and maximum frequencies of interest, and ndec is the number of desired frequency points per decade. FastHenry must perform the entire solution process for each frequency.

Note that ndec need not be an integer. For instance,

.freq fmin=e fmax=e ndec=0.

will have FastHenry calculate impedance matrices for f = 10 3 ; 10 5 ; and 10 7 Hz. If

fmin is zero, FastHenry will run only the DC case regardless of the value of fmax . 1.3.7 .Equiv keyword Syntax: .Equiv node1 node2 node3 node4 ... This keyword speci es that nodes node1, node2, node3, node4,... are to be con- sidered electrically equivalent yet maintain their separate spatial coordinates. The nodes are e ectively `shorted' together. If any of the node names are not previously de ned, then they become pseudonyms for those nodes in the list which are de ned. 1.3.8 .End keyword Syntax: .End This keyword speci es the end of the le. All subsequent lines are ignored. This line must end the le. 1.3.9 Reference Plane de nitions Note: It is recommended that nonuniformly discretized planes be used instead of what is described here if possible. See the document \nonuniform manual *.ps". Uniform planes described below can still be used if they satisfy your needs. Also, for new users, under- standing uniform planes is necessary to understand the nonuniform manual.ps document. Uniformly discretized planes

Syntax: Gstr x=value y=value z=value x=value y=value z=value x=value y=value z=value thick=value seg=value seg=value [segwid = value] [segwid = value] [sigma, rho = value] [nhinc=value] [rh=value] [relx=value] [rely=value] [relz=value] [Nstr (x_val,y_val,z_val) ] [Nstr (x_val,y_val,z_val) ]

10 1 HOW TO PREPARE INPUT FILES (x1,y1,z1)

seg1 = 7 (x2,y2,z2)

seg2 = 5 (x3,y3,z3) Figure 4: Discretization of a Reference Plane. Segments are one-third actual width.

[Nstr3 (x_val,y_val,z_val) ]..... [hole (val1,val2,....)] [hole (val1,val2,....)]..... This de nes a uniformly discretized reference plane of nite extent and conductivity called Gstr where str is any alphanumeric string. The rst character on the line must begin with the letter G for this to be interpreted as a reference (originally \ground") plane de nition. The three locations ( x 1 ; y 1 ; z 1) ; ( x 2 ; y 2 ; z 2) ; ( x 3 ; y 3 ; z 3) mark three of the four corners of the plane in either clockwise or counterclockwise order. FastHenry will determine the fourth corner assuming the rst three are corners of a rectangle. The thickness of the plane is speci ed with the thick argument and the conductivity with either the sigma or rho argument. Note that current is modelled to ow two dimensionally, i.e., not in the thickness direction. The reference plane is approximated by rst laying down a grid of nodes, and then with segments, connecting every node to its adjacent nodes excluding diagonally adjacent nodes. Each segment is given a height equal to the speci ed thickness of the plane and, by default, width equal to the node spacing. This choice of width completely lls the space between segments. Figure 4 shows a sample reference plane with segments that are one-third full width for illustration. seg1 and seg2 specify the number of segments along each edge of the plane. seg1 is the number of segments along the edge from ( x 1 ; y 1 ; z 1) to ( x 2 ; y 2 ; z 2) and seg2 , the number along the edge from ( x 2 ; y 2 ; z 2) to ( x 3 ; y 3 ; z 3). Thus the total number of nodes created will be ( seg1 +1)*( seg2 +1), and the total number of segments created will be ( seg1 + 1)  seg2 + seg1  ( seg2 + 1) . Note that the line from the node at ( x 1 ; y 1 ; z 1) to the node at ( x 2 ; y 2 ; z 2) de ne the edge of the plane, however segments that run from ( x 1 ; y 1 ; z 1) to ( x 2 ; y 2 ; z 2) will overhang the edge by half their width since nodes are de ned at the center of segments. This slight overapproximation to the width of the plane is avoided in the nonuniform discretization code described in nonuniform manual *.ps . nhinc and rh can be used to specify a number of laments for discretization of each segment along the thickness (See Section 1.3.2). This could be used for modelling nonuniform current across the thickness. If nhinc is omitted, the value of 1 is used regardless of the

.Default setting. If rh is omitted, the default value is used.

1.3 Input File Syntax 11 Note: If you do not want to use segwid1 and segwid2 or holes as described below, you can use the nonuniform plane de nition as described in \nonuniform manual.ps". Connections to the plane Since the reference plane nodes are generated internally, there is no way to refer to them later in the input le. The exceptions to this are the nodes explicitly referenced in the reference plane de nition. The argument Nstr1 (x_val,y_val,z_val) where str1 is an alphanumeric string, will cause all subsequent references to Nstr1 to refer to the node in the plane closest to the point ( x val; y val; z val ). Note that no spaces are allowed between the `()'. The referencing is accomplished internally by e ectively doing .Equiv Nstr1 where is the internal node name of the nearest reference plane node. If one or more of relx , rely , and relz are speci ed, then the above node referencing instead chooses the node closest to ( x val + relx; y val + rely; z val + relz ). In other words, relx , rely , and relz default to 0 if not speci ed. A coarsely discretized plane (small seg1 , seg2 ) may cause two di erent node refer- ences to refer to the same reference plane node. FastHenry will warn of such an event, but it is not an error condition. Note: It is recommended that connections to the plane be done with the \contact equiv rect" utility for nonuniformly discretized planes as described in \nonuni- form manual.ps". Meshed Planes By default, the width of the segments of the plane are chosen to ll the space between adjacent segments. However, to model meshed planes the width of the segments can be chosen to be smaller with the segwid1 and segwid2 arguments. This gives the plane the appearance of a \mesh" as shown is Figure 4. segwid1 speci es the width of the segments that are in the direction parallel to the plane edge from ( x 1 ; y 1 ; z 1) to ( x 2 ; y 2 ; z 2). segwid2 speci es the width along the edge from ( x 2 ; y 2 ; z 2) to ( x 3 ; y 3 ; z 3). Note that if the section of conductor between meshes is large compared to the size of the mesh holes, this method of discretization may be too coarse. For instance, assume the mesh consists of only nine holes on a 3x3 grid. In such a situation, consider using the hole functions described below to make the speci c holes on a plane with seg1,seg2 >> 3. See also Section 1.4.3. Holes in the plane Holes can be speci ed in the plane with hole (val1,val2,val3,...)

12 1 HOW TO PREPARE INPUT FILES where is the hole type and the valn 's make the list of arguments to be sent to the hole generating function. Holes are generated by rst removing reference plane nodes, and then removing all segments connected to those nodes. The following describes the available hole generating functions:

hole point (x,y,z) removes the node nearest to the point (x,y,z).

hole rect (x1,y1,z1,x2,y2,z2) removes a rectangular region whose opposite corners are the nodes in the plane nearest (x1,y1,z1) and (x2,y2,z2).

hole circle (x,y,z,r) removes the nodes contained within the circle of radius r centered at (x,y,z).

hole user1 (val1,val2,...) calls the user de ned function hole user1() to remove nodes. user1 - user7 are available. The user can add the functions to the source le hole.c contained in the release. See the functions hole rect(), hole point(), and hole circle() to see examples of the format for writing user hole functions. Any shaped hole can be formed with a combination of hole directives. A few exceptions exist, however. Forming a hole that isolates or nearly isolates a section of the plane is not allowed. FastHenry warns of this with:

Warning: Multiple boundaries found around one hole region

possibly due to an isolated or nearly isolated region of conductor. This may lead to no unique solution. If a nearly isolated section of conductor is truly desired, consider de ning two separate planes and connecting them. Holes may not be produced as expected if the discretization of the plane is coarse. It is recommended that the plane be viewed by using the options \ -f simple -g on " options to generate a zbuf le which can be used to generate a postscript image of the plane as described in Section 3.

1.4 Other Examples

This section describes other examples using more of the features of FastHenry. Some examples were created by the authors and some contributed from users. All les are available with the FastHenry source code.

1.4 Other Examples 13 Figure 5: Printed Circuit Board example 1.4.1 Printed Circuit Board The example le gpexamp copper.inp shown in Figure 5 is a portion of a printed circuit board from Digital Equipment Corporation. This structure is to be placed underneath a PGA package. This geometry includes 2 reference planes sandwiching a large number of copper lines which lead to the center where the package would be placed. The set of copper lines are grouped into 18 groups according to functionality (see the many .equiv statements at the bottom of the le). 1.4.2 Vias and Meshed Planes The example le vias.inp shown in Figure 6 shows three vias passing through a meshed ground plane. To form the mesh structure, the standard reference plane de nition is used with the segwid1 and segwid2 arguments. Some of the dimensions for this example were taken from B.J. Rubin, \An electromagnetic approach for modeling high-performance computer packages," IBM J. Res. Dev. , Vol. 34, No. 4, July 1990. 1.4.3 Holey ground plane The example le holey gp.inp shown in Figure 7 is a punctured version of the reference plane example of section 1.2. The holes of the plane are formed with the rect and circle hole directives. 1.4.4 Pin-connect The example le pin-connect.inp shown in Figure 8 is thirty- ve pins of a 68-pin cerquad pin package from Digital Equipment Corporation.

14 1 HOW TO PREPARE INPUT FILES Figure 6: Vias through a meshed ground plane Rectangular hole formed with hole rect (100,700,0,300,900,0)

Circular hole Long rectangular hole Trace Figure 7: Trace over Ground Plane with holes 15 Figure 8: Thirty-Five Pins of a 68 pin Cerquad Package 1.4.5 Right Angle Connector The example le 30pin.inp from Teradyne Connection Systems Inc. shown in Figure 9 is a PCB right angle connector plugged into its thirty corresponding pins. The V-shaped clamping portion and right angle bend make up the connector as shown in the single pin illustration of Figure 10. In reality, the pin protrudes through the V-shaped clamp, but that section conducts no current and is not included. Each of the thirty pins is a di erent shade of gray. The white portions of the V are also part of each pin but appear white due to the limits of the shading algorithm. 1.4.6 Photodetector The example le msm.inp shown in Figure 11 is a metal-semiconductor-metal photode- tector from NASA Langley Research Center and University of Virginia. These devices consist of a set of closely spaced, interdigitated electrodes deposited on an optically active semiconductor layer. Every other electrode is biased to the same potential, so that any two adjacent electrodes are at opposite electrostatic potentials. Becuase the electrodes are closely spaced, the electric elds between them are quite strong with application of low to moderate bias voltages. As a result, any carriers generated by absorption of light between the ngers are transported to the electrodes extremely rapidly giving fast response to short pulses of light.

2 Running FastHenry

The basic form of the FastHenry program command line is

fasthenry [] [] Usually only the input file is speci ed. For example, the command

16 2 RUNNING FASTHENRY Figure 9: Thirty pin right angle connector V-shaped clamp Pin Right angle bend Figure 10: One pin of the thirty pin right angle connector 2.1 Example Run 17 Figure 11: Metal-semiconductor-metal Photodetector fasthenry pin-connect.inp runs fasthenry on the example pin connect structure. Information about the input le and other FastHenry information are sent to the standard output. The impedance matrices for the frequencies speci ed in the input le will be placed in the text le Zc.mat . This le also lists the correspondence between columns in the impedance matrix and the ports speci ed in the input le. The source le ReadOutput.c described in Section 2.2 is provided as a sample program for reading the output le for postprocessing.

2.1 Example Run

This section contains a sample run of FastHenry for the 30 pin connector example, 30pin.inp shown in Figure 9. Comments describing the output appear along the right margin in addition to the FastHenry command line option which would change the de- scribed setting.

prompt % fasthenry 30pin Running FastHenry 2.0 (10Aug94)

Date: Wed Aug 10 16:31:35 1994 Host: lyapunov Solution technique: ITERATIVE Matrix vector product method: MULTIPOLE

Order of expansion: 2 Preconditioner: ON Error tolerance: 0.001 Reading from file: 30pin Title: 30 pin, right angle connector <-- use GMRES (-s) <-- and multipole algorithm (-m) <-- order of multipole (-o) <-- GMRES preconditioner (-p) <-- relative tol (-t, -b)

<-- first line from input file 18 2 RUNNING FASTHENRY all lengths multiplied by 0.001 to convert to meters Total number of filaments before multipole refine: 290 Total number of filaments after multipole refine: 455 <-- multipole needed

to refine (-a) Multipole Summary

Expansion order: 2 <-- -o option Number of partitioning levels: 3 <-- -l option Total number of filaments: 455 Percentage of multiplies done by multipole: 100% Scanning graph to find fundamental circuits... <-- find meshes Number of Groundplanes : 0 <-- some data about Number of filaments: 455 input geometry Number of segments: 455 Number of nodes: 605 Number of meshes: 60

----from tree: 60 <--fundamental circuits ----from planes: (before holes) 0 from graph Number of conductors: 30 (rows of matrix in Zc.mat) Number of columns: 30 (columns of matrix in Zc.mat) Number of real nodes:455 filling M... filling R and L... Total Memory allocated: 1985 kilobytes <-- Total memory consumed so Frequency = 10000 far (more consumed later) Forming sparse matrix preconditioner.. <-- form preconditioner for this freq. conductor 0 from node npin4_5_1 <-- do 1st column of admittance matrix Calling gmres... 1 2 3 4 5 6 7 8 <-- Iterations until convergence conductor 1 from node npin4_4_1 <-- Begin next column Calling gmres... 1 2 3 4 5 6 7 8 conductor 2 from node npin4_3_1 Calling gmres... 1 2 3 4 5 6 7 8 conductor 3 from node npin4_2_1 . . . conductor 28 from node npin0_1_1 Calling gmres... 1 2 3 4 5 6 7 8 conductor 29 from node npin0_0_1 Calling gmres... 1 2 3 4 5 6 7 8 All impedance matrices dumped to file Zc.mat <-- Where the results are Times: <-- some execution time info Read geometry 1.51 2.2 Processing the Output 19 Multipole setup 11.94 Scanning graph 0.01 Form A M and Z 0.06 form M'ZM 0 Form precond 1.36 GMRES time 75.92 Total: 90.8 90.980u 0.640s 1:36.62 94.8% 321+2448k 0+0io 4pf+0w prompt %

2.2 Processing the Output

2.2.1 The impedance matrix The le Zc.mat is a text le containing the impedance matrices for the frequencies re- quested. The le ReadOutput.c in directory src/misc/ is an example program for read- ing the text le for whatever processing is necessary. It contains the function ReadZc() which reads from a le and returns a linked list of impedance matrices and their corresponding frequencies. See the source le for more details. This function can be extracted and included in whatever program the user desires. The function main() is provided as an example use of ReadZc() . For each of the matrices, it divides the imaginary part by the frequency to give the matrix R + jL and then dumps the result to the standard output.

ReadOutput.c can be compiled by typing

cc -o ReadOutput ReadOutput.c Here is a sample of its output after processing Zc.mat produced by running fasthenry on example le

onebargp.inp :

prompt % ReadOutput Zc.mat Not part of any matrix: Row 2 : nodein to nodeout Not part of any matrix: Row 1 : nb1 to nbout Reading Frequency 10000 Reading Frequency 100000 Reading Frequency 1e+06 Reading Frequency 1e+07 Reading Frequency 1e+08

Reading Freque freq = e+0

Row 0: 0.00112838+3.50478e-08j -2.21062e-05-7.0003e-09j Row 1: -2.23118e-05-6.99564e-09j 4.83217e-05+2.02958e-08j

Row : -. freq = e+0

Row 0: 0.00112837+3.50478e-08j -2.21055e-05-7.0003e-09j Row 1: -2.2311e-05-6.99564e-09j 4.83217e-05+2.02958e-08j

Row : -. freq = e+0

Row 0: 0.0011272+3.50501e-08j -2.20335e-05-7.00045e-09j Row 1: -2.22379e-05-6.99578e-09j 4.83168e-05+2.02958e-08j

Row : -. freq = 00000

20 2 RUNNING FASTHENRY Row 0: 0.00106093+3.51782e-08j -1.7938e-05-7.00794e-09j Row 1: -1.80765e-05-7.00341e-09j 4.80425e-05+2.02964e-08j

Row : -.0 freq = 0000

Row 0: 0.000955377+3.58555e-08j -1.25489e-05-7.01913e-09j Row 1: -1.25828e-05-7.01518e-09j 4.75474e-05+2.03045e-08j prompt % 2.2.2 Creating Equivalent Circuits Two approaches for generating spice equivalent circuits are available: Approach 1: An equivalent circuit for a single frequency.

 Run fasthenry for EXACTLY one frequency.  Compile (with some C compiler) the le MakeLcircuit.c in the directory fasthenry- 3.0/src/misc/

cc -o MakeLcircuit MakeLcircuit.c -lm

 Run MakeLcircuit on the Zc.mat produced by FastHenry

MakeLcircuit Zc.mat > my_circuit.spice This produces a circuit where nodes 0 and 1 correspond to the plus and minus nodes of the rst FastHenry port (also called .external). 2 and 3 correspond to the second port. 4 and 5 the third, etc. Approach 2: A circuit which models the frequency dependent resistances and inductances This approach generates a reduced order model for the system using the arguments -r n -M" to FastHenry. This gives an equivalent circuit which is valid for a range of frequencies.

 Run FastHenry: fasthenry -r n -M myinput.inp Where \n" is replaced with the desired order, say 20. This produces the le equiv circuitROM.spice containing a single spice subcircuit.  Include the subcircuit in a spice input le and connect devices to it. The subcircuit will be named ROMequiv and its port nodes are p0 and m0 for the plus and minus terminals of port 0, p1 and m1 for port 1, etc. See the header of the equiv circuitROM.spice le for more description. Any sux speci ed with -S" will be appended to both the subcircuit name,

ROMequiv , and the subcircuit lename, equiv circuitROM.spice . Comments: Approach 1 will not model frequency dependent resistance and inductance since it gives an R and L at the single speci ed frequency. Approach 2 will model the full

2.2 Processing the Output 21 frequency dependent e ects up to some frequency where that frequency is higher for a higher chosen order, n . The reduced order model of Approach 2 is converted to a circuit from its state-space form through capacitors, resistors, and VCCSs so insight can only be gained by simulating the subcircuit in spice rather than looking inside the subcircuit le. An example is provided below. For a description of reduced order modeling for inductance computation see the paper tchmt-epep94.ps in the pub/fasthenry directory at the

rle-vlsi.mit.edu ftp site: L. Miguel Silveira and Mattan Kamon and Jacob K. White, \Ecient Reduced- Order Modeling of Frequency-Dependent Coupling Inductances associated with 3-D Interconnect Structures", IEEE Transactions on Components, Hy- brids, and Manufacturing Technology, Part B: Advanced Packaging , Vol. 19, No. 2, May 1996, pp. 283-288. An example of Approach 2 The le examples/pin-con7.inp is 7 pins of a larger package shown in Figure 8. Each conductor is discretized into laments to capture skin and proximity e ects up to around 10 10 Hz. One can generate an equivalent circuit via Approach 2 with

fasthenry -r 20 -M pin-con7.inp -S_pin_con7_r20 which produces the le equiv circuitROM pin con7 r20.spice which is an equiva- lent circuit for a 140th (20*7) order model. To test its accuracy, consider computing impedance matrices at many frequencies with

fasthenry pin-con7.inp -S_pin_con7 which produces Zc pin con7 r20.mat which is the impedance matrix for frequencies 1 ; 10 ; 10 2 ; : : : ; 10 12 . A spice le is included in the examples directory to test this subcircuit and put the results in

rom check con7 r20.out :

spice3 -b -o rom_check_con7_r20.out rom_check_con7_r20.ckt The spice le in rom check con7 r20.ckt has a spice .include line to include the subcircuit of le equiv circuitROM pin con7 r20.spice . It then does an AC analysis of the response of the circuit when 1 Amp is applied to port 0 and 0 Amp to the other ports. The results correspond to column 1 of the impedance matrix, Zc . A comparison of the accuracy of entry (1,1) of the impedance matrix is given in Figure 12 for both -r 7" and -r 20". As can be seen in the gures the resistance matches the directly computed values (Zc.mat) up to about 10 8 Hz for order 7 and 10 9 Hz for order 20. Unfortunately the inductance in the example chosen does not have a strong frequency dependence but nonetheless the inductance deviates at roughly the same frequencies as the resistance. Note that if Approach 1 were used, a single frequency would have to be chosen to generate an equivalent circuit, however the Spice simulation time may be shorter.

22 2 RUNNING FASTHENRY −9 0.6 9.2 Explicit computation (Zc.mat)

x 10 9.1 ROM circuit 7th order 0.5

ROM circuit 7th order ROM circuit 20th order Approach 1, f = 1e+08 9

Table 1 · 3 columns × 0 rows · p.27–27 · CSV
0.4Explicit computation (Zc.mat)
(Ohm)8.9(H)ROM circuit 7th order ROM circuit 20th order
Resistance 0.3Inductance 8.7 8.8Approach 1, f = 1e+08

ROM circuit 20th order Approach 1, f = 1e+08 8.7 8.8 I n d u c t a n c e ( H

0.2 8.6 0.1

8.5 0 0 10 2 10 4 10 6 10

Frequency (Hz)

8 10 10 10 12 10 8.4 0 10 2 10 4 10 6 10

Frequency (Hz)

8 10 10 10 12 10

Figure 12: Comparison of impedance computation done via explicit solution at speci ed frequency points and reduced-order models

2.3 Command Line Options

This section describes using the command line options to change the defaults settings. All arguments are case insensitive.

-R option to perform better than cube .

2.3 Command Line Options 23 - Speci es n as the order of multipole expansions. Default is 2. Choosing values less than 2 result in faster execution at the expense of poorer accuracy. Changes in the order of expansions should accompany changes in iteration error tolerance with the -t option.

-o n -l f n | auto g - Speci es n as the number of partitioning levels for the multipole algorithm.

auto chooses the level automatically and is the default. -f f off | simple | refined | both | hierarchy g - Switches FastHenry to vi- sualization mode only and speci es the type of FastCap generic le to make (for visualization ONLY!). off will produce no le and is the default. simple will produce a le named zbuffile from the segments de ned in the input le. refined produces a similar le, named

zbuffile2 , but uses the segments after either user re nement speci ed with -i or required re nement necessary for accuracy of the multipole algorithm ( -l option). both produces both les. One FastCap \panel" is created for each of the four sides along the length of the each segment. Reference planes are handled di erently as described under the -g option below. See Section 3 for details on producing postscript. FastHenry will exit after creating the visualization les. hierarchy will dump a 2D representation of the nonuniform reference plane discretization hierarchy to the FIXED le hier.qui which can also be processed like the

zbuffile . -g f on | off | thin | thick g - controls appearance of the ground plane when using the -f option. off is the default and only four panels are produced for each plane, one for each of the edges. Thus only the outline of each plane is drawn. This makes generation of the postscript image much faster and also makes the planes transparent. No holes are visible, however. on or thin will draw all the overlapping segments of the ground plane as if in ntely thin. Note that using this option for a nely discretized plane may take a long time to generate a postscript image with zbuf . thick will completely draw the segments of the plane and will be even slower for generating postscript images. -a f on | off g - on allows the multipole algorithm to automatically re ne the struc- ture as is necessary to maintain accuracy in the approximation. The structure will be re ned whether or not the multipole algorithm is used. off prevents re nement and will produce a warning if the multipole algorithm is used and prevented from necessary renement. on is the default and is equivalent to -l auto . Note that this is not re nement to reduce discretization error. See the

-i option. - Speci es n as the level for initial re nement. This option allows the user to re ne the structure if the input le is too coarse. It will divide each segment of the geometry into multiple segments so that no segment has a length greater than 2 1 n times the length of the smallest cube which contains the whole structure. The default is 0 (no re nement). This option is rarely used since the multipole algorithm will re ne as it needs and discretization errors of this sort are usually small.

-i n 24 2 RUNNING FASTHENRY -d f on | off | mrl | mzmt | grids | meshes | pre | a | m | rl | ls g - dump certain internal matrices to les. The format of some of the les can be speci ed with the -k option. on dumps the M; R; L; MZM and preconditioner matrices. off dumps none and is the default. mrl dumps the M, R, and L matrices. mzmt dumps the MZM matrix for w = 1. grids dumps matrices for viewing the current distribution inside each reference plane (only in matlab format). meshes is a matlab le for viewing the KVL meshes chosen by FastHenry. pre dumps the preconditioner in a sparse matrix text format. ls dumps the sparsi ed L matrix in sparse text format. a is the branch incidence matrix, A . m can be used to dump only the mesh matrix M . Similarly, only R and L can be dumped with

rl . The right-hand-side vector, V , is dumped to the le b.mat whenever anything but off is speci ed.

tt s

f g - Speci es type of le to dump with the -d option. -k matlab | text | both matlab

text dumps the les as M.mat, MRL.mat, MZMt.mat, and A.mat in a format readable by matlab. saves the les M.dat, L.dat, R.dat, MZMt.dat, and A.dat as text. both saves les in both formats. - Speci es the tolerance for iteration error. FastHenry calculates each column of the impedance matrix separately. The iterative algorithm will stop iterating when both the real and imaginary part of each element, x , of the current column being calculated satisfy

j x , 1 , x j < rtol  ( j x j + atol  ( max j x j )) (1) where i is the iteration number. The defaults are rtol = 10 , 3 and atol = 10 , 2 . In essence, this causes GMRES iterations to stop if every element of solution vector has changed by less than the fraction rtol since the last iteration. If, however, element x is smaller than atol times the largest element in the solution vector, then the stopping criteria is less stringent. Note that real and imaginary parts are treated separately.

-t rtol, -b atol k i k i k i k j i j k - n = maximum number of iterations to perform for each solve (column). Over- rides the default of 200. -c n

-D f on | off g - Controls the printing of debugging information. off is the default. will cause FastHenry to print more detailed information about the automatic partitioning level selection, memory consumption, preconditioner calculation, and convergence of the iterates. The Matlab le Ycond.mat is also produced which contains the admit- tance matrices at each frequency and also the norm of the residual at each step of the GMRES algorithm.

on - Speci es that only the column in the admittance matrix speci ed by should be computed. Multiple -x speci cations can be used. In this case, the output le will contain the requested columns of the admittance matrix instead of the impedance matrix. The portname is speci ed in the input le with the .External keyword. The primary uses of this option are either to exploit symmetry or to compute single columns for observing current distribution. For instance, if a 10 pin package is -x portname portname

Zc.mat 2.4 Discretization Error Analysis 25 symmetric about some axis, then only ve columns need be computed. The user is then responsible for forming the 10  10 impedance matrix from the 10  5 result. Also, if the -d grids option is used, the port which is the source of current would be speci ed with this option.

Zc blah.mat .

-S suffix -S blah - Speci es a reduced order model of the system as output. The size of the model will be order *number-of-ports. A matlab le rom.m will contain the A,B,C,D matrices representing the state-space reduced order model. More useful is the le equiv circuitROM.spice which is a spice3 compatible subcircuit which can be in- cluded for circuit simulation.

-r order -M - If -r is speci ed with a nonzero order, then this option will cause FastHenry to exit after generating a reduced order model. -R radius use. - If -p shells is speci ed, then this speci es the radius of the shells to - Regurgitate internal representation of the geometry to stdout in the input le format. Good for debugging. User can compare output to the original input le. Also, by altering the le regurgitate.c , the user can also call functions to translate and re ect the geometry for use as another input le.

-v

2.4 Discretization Error Analysis

This section gives some guidelines and describes an experimental approach to determining an appropriate discretization to model skin and proximity e ects in long, thin condutors de ned with FastHenry segments. (For a description of discretization for reference planes, see \nonuniform manual.ps".) To begin, assume it is desired to compute the impedance matrix for the pin connect structure of Figure 8 for frequencies up to 10 8 Hz. 2.4.1 The DC case If only the DC case were of desired, it could be computed rapidly since there is no skin e ect. The number of laments per segment for the entire structure is set to one by setting nhinc=1 and nwinc=1 with the line

.DEFAULT Z=. H=. W=. nhinc= nwinc=

In order to extract a nonzero value for the inductance, the frequency is set small, but nonzero

.freq fmin=e0 fmax=e0 ndec=

26 2 RUNNING FASTHENRY Since there are only a few hundred laments, there is no advantage to the multipole algorithm so LU decomposition can be used to save a few seconds: fasthenry pin-connect.inp -sludecomp -S _DC The output will be in le Zc DC.mat 2.4.2 The highest frequency case Next, consider deciding how many laments are needed to accurately compute the re- sistance and inductance at the highest frequency point of interest, f = 10 8 Hz. A good rule of thumb is to choose the discretization such that the width of the smallest la- ment is roughly equal to the skin depth. For this geometry,  = 0 : 0238 ohm-mil or  = 1 : 641  10 6 mho/m giving a skin depth of

= s f = : mils: ()

To observe the error involved with various discretizations, we will look at the impedance matrix for two typical adjacent segments from the

pin-connect.inp example:

Two segments from: PACKAGE INDUCTANCE - 35 of 68 pins * For experimenting with skin/proximity effect modeling * .UNITS MILS

.UNITS MILS .DEFAULT RHO=.0 .DEFAULT Z=. H=. W=. nhinc= nwinc= rh= rw=

* NB Y=00. X=. NC Y=00. X= . EC NB NC .EXTERNAL NB NC port

* NB Y=0. X=. NC Y=0. X= . EC NB NC .EXTERNAL NB NC port

* .freq fmin=e fmax=e ndec=

.END 2.4 Discretization Error Analysis 27

l be a complex matrix for each frequency point, Z( ! ) = " R ( ! ) + j!L ( ! ) R ( ! ) + j!L ( ! ) R ( ! ) + j!L ( ! ) R ( ! ) + j!L ( ! ) #

If we choose nhinc = 3 and nwinc = 5 with a default ratio of adjacent laments equal to 2 ( rh = rw = 2), then the width of the smallest lament on the right and left of the segment will be 1/10 the width ((1 + 2 + 4 + 2 + 1) , 1 ), or 2 : 4 mils. The thickness of the laments on the top and bottom of the segment will be 1/4 of the height ((1 + 2 + 1) , 1 ) or 2 : 1 mils. To run fasthenry, fasthenry pin-con2seg.inp -sludecomp -aoff -S _3x5_2 In this case, since there are so few laments, LU decomposition is slightly faster. Also, automatic re nement is prevented with the -aoff option since the multipole algorithm is not being used and this problem is essentially two-dimensional. The smallest laments are slightly above the skin depth and thus the results are inaccurate at f = 10 8 as shown by the dotted lines in Figure 13. The next logical step might be to increase the discretization to nhinc  nwinc = 4  6 however using even numbers of laments is not ecient since the center of the segment, where current is relatively constant, will be divided into 4 separate laments. For the odd case, the center is modeled by only one lament. Instead, consider changing the ratio of adjacent segments to rh = 4, rw = 3. Now, the width of the smallest lament on the left and right sides of the segment will be 1/17 of the total width ((1 + 3 + 9 + 3 + 1) , 1 ) or 1 : 41 mils and the thickness of the smallest lament on the top and bottom, 1 : 42 mils. This is much closer to the skin depth and gives better results as shown by the dash-dot lines in Figure 13. Another possibility is to reduce the number of laments below 3  5 but further increase the ratio of adjacent laments. This change would result in faster execution since there would be fewer laments, however some accuracy at midrange frequencies would be sacri ced. For instance, consider maintaining the width of the smallest laments by changing the discretization above to 3  3 with rh = 4, rw = 15. In this case there are too few laments to model the decay of current density from the outside edge to center for f 2 [10 6 ; 10 8 ] as shown by the dashed line in Figure 13. After the user has decided which error for the above cases is tolerable for a given problem, the discretization can then be used for the full pin-connect.inp example. The default nhinc and nwinc must be set with

.DEFAULT Z=. H=. W=. nhinc= nwinc= rh= rw=

and the frequencies of interest with

.freq fmin=e0 fmax=e ndec=

The frequency setting above was used to generate Figure 13. Note that with the sparsi ed-L preconditioner, used by default, the low frequency impedance matrix is computed in very few iterations. Thus, while the low frequency case could have been com- puted with a coarser discretization as in Section 2.4.1, there is not much added execution time in computing it at a ner discretization.

28 2 RUNNING FASTHENRY R11 - real part of the self term (resistance) 1

10

3x5, rh=2, rw=2 3x5, rh=4, rw=3 3x3, rh=4, rw=15

Table 2 · 4 columns × 5 rows · p.33–33 · CSV
1R11 -real part of the self term (resistance)0Error in R11
1010
3x5, rh=2, rw=2-1
3x5, rh=4, rw=310
3x3, rh=4, rw=15
(Ohm) 100exactError 10-2

3x5, rh=2, rw=2 3x5, rh=4, rw=3 3x3, rh=4, rw=15

-5 10 -2 10 -6 4 6 10 10 8 10 Frequency (Hz)

10 10 10 12 10 R12 - real part of the mutual term (resistance) -12 6 10 0 -10 8 10 Frequency (Hz) Error in R12

3x5, rh=2, rw=2 3x5, rh=4, rw=3 3x3, rh=4, rw=15

exact -8 -10 12 10 -1 Relative Error -10 -6 -10 -4 -10 10 -2 10

3x5, rh=2, rw=2 3x5, rh=4, rw=3 3x3, rh=4, rw=15

-2 -10 0 -3

Table 3 · 7 columns × 3 rows · p.33–33 · CSV
4 106 8 1010 10 1012104106108 1010 1010
Frequency (Hz)Frequency (Hz)
-9 1.25 x 10L11 -self-inductance-110Error in L11
-10 4.58 x 10L12 -mutual inductance-210Error in L12

3x5, rh=2, rw=2 3x5, rh=4, rw=3 3x3, rh=4, rw=15 exact 1.2 e ( H )

12 10 -2 10 1.15 -3 10 -4 10

01 2 3x5, rh=2, rw=2 3x5, rh=4, rw=3 3x3, rh=4, rw=15 104 106 108 101 0 1 10- 6 10- 5 Frequency (Hz) 10- 2 Error in L12

1.1 4 10 6 10 -10 4.58 10 10 10 Relative Error -10 Inductance 10 10 10 -10 Resistance (Ohm)

4 10 8 10 Frequency (Hz)

10 10 L12 - mutual inductance x 10 4.56 -3 Relative Error Inductance (H)

10 4.54 4.52

3x5, rh=2, rw=2 3x5, rh=4, rw=3 3x3, rh=4, rw=15

exact 4.5 4.48 4

10 -4 10 -5 10

3x5, rh=2, rw=2 3x5, rh=4, rw=3 3x3, rh=4, rw=15

-6 6 10 8 10 Frequency (Hz)

10 10 12 10 10 4

10 6 10 8 10 Frequency (Hz)

10 10 12 10 Figure 13: Values and errors for the impedance matrix as a function of frequency for the 2 segment experiment 29 The exact values in Figure 13 were generated using a 21  25 discretization with rh = rw = 2. It was run with

fasthenry pin-con2seg.inp -aoff -mdirect The multipole algorithm would require space be divided, and thus the laments also be divided, tripling the number of laments in this case. Since the original number of laments is small and, again, this is essentially a two-dimensional problem, we can avoid both dividing space ( -aoff ) and using the multipole algorithm ( -mdirect ). The problem is small enough to t in memory with all the matrices formed directly however is large enough to warrant using the iterative algorithm instead of LU decomposition. For the 21  25 problem, the time spent forming the preconditioner is signi cant. The -pdiag option could have been used to reduce the preconditioner time, however this would come at the expense of slower convergence especially at the higher frequencies.

3 Geometry Postscript Pictures

The ability to see the geometry under analysis is an important tool for debugging input les. This section describes how to generate postscript les for visualizing the three dimensional structures de ned by a given input le. The process involves rst running FastHenry to generate a le of \panels" and then running zbuf to generate the postscript le.

3.1 Creating the panel le

When FastHenry is given the -f option, it changes from calculation to visualization mode. It will produce a le of panels readable by the zbuf program. Each panel is a quadrilateral representing one of the faces of a segment in the input geometry. This le of panels can either be formed from the segments of the geometry before FastHenry's re nement with the simple argument, or after re nement with the refined argument. The basenames for the les produced are zbuffile for simple geometry and zbuffile2 for re ned unless the

-S is used. In addition, the le zbuffile shadings or zbuffile2 shadings is produced which speci es a shade of gray to assign to each of the panels. zbuffile shadings is produced for -f simple and shades each of the reference planes (if drawn with -g on ) of the struc- ture di erently, and leaves all other structures white. zbuffile2 shadings , produced with -f refined , does the same, however it attempts to shade di erently each of the conductors speci ed with a

.external statement.

3.2 Creating the postscript le

The panel le described in the previous section can be rendered in postsciprt with the zbuf program. This program is a modi ed version of the algorithms used for visualization in the capacitance extraction program, FastCap, developed by Keith Nabors.

30 3 GEOMETRY POSTSCRIPT PICTURES

The complete command line format of the zbuf program is

zbuf [-a] [-e] []

[-r] [-h] [-s] [-w] [-u] [-q] [-x] [-b<.figfile>] [-c] [-v] [-n] [-f] [-g] [-m] Table 2 itemizes the options and Table 1 gives several examples of their use. Usually the default settings produce an acceptable plot, but many adjustments are possible, the most important being the view angles (relative to a coordinate system parallel to the input coordinates and centered on the center of the object) which are adjusted using the -a and -e options. Other options control view distance ( -h ), two- dimensional projection scale ( -s ), rotation ( -r and -u ) and line width ( -w ). Axes of any length may be included with the -x option and lines, arrows and dots may be added using -b . Shading can be accomplished with the -q option. Table 1 gives the commands used to produce the line drawings in this guide as examples. In version 3.0, the zbuf program now takes the -m" argument to produce a Matlab le for faster visualization in matlab. This is very bene cial for large les since producing the postscript le with zbuf can take n 2 time. The matlab le can be viewed within matlab with the fasthenry-3.0/bin/plotfastH.m matlab function. The le zbuffile.mat would be produced with \zbuf -m zbule" which can then be viewed in matlab with \plotfastH('zbule.mat')". Also, you can modify the le src/zbuf/dump struct.c to output in YOUR own format instead of matlab.

3.3 Tricks

For Figure 7, the shading of the trace and ground plane were swapped by negating all the shading values with the awk le invert.awk provided in the zbuf source directory. Also, Figure 10, since it is only one pin, would normally appear white and all panels would have shade 0 in the shading le. By randomly changing one panel to , 5 and another to 10, then , 5 becomes white, 10 becomes black, and 0, a shade of gray. The single black panel is seen on the left end of the gure and the white panel is obscured by other panels.

3.4 Visualization artifacts

This section discribes possible problems with producing pictures. Many of the listed items come directly from the FastCap documentation.

  1. To minimize the number of panels that zbuf must deal with, FastHenry does not output panels for the end faces of a segment. Thus, segments often appear hollow.

Uncomment the appropriate regions in writefastcap.c to change this. 2. zbuf sometimes produces panel ordering errors (and usually print warning mes- sages) when panels intersect. However, often the postscript le is correct. 3. Occasionally the postscript pictures are incorrect even for legal discretizations. There are two known bugs leading to this problem. The rst is often avoided by

3.4 Visualization artifacts Figure 5

6 7 8 9 10 31 Usage FastHenry/Zbuf fasthenry gpexamp copper.inp -f simple -S pcb zbuf zbuffile pcb fasthenry vias.inp -f refined -g on zbuf -a60 -e60 zbuffile2 -q fasthenry holey gp.inp -f simple -g on mv zbuffile holey gp awk -f src/zbuf/invert.awk zbuffile shadings > holey gp shadings zbuf holey gp -e0 -q -uy fasthenry pin-connect.inp -f simple -S pin zbuf zbuffilepin -a25 fasthenry 30pin -f refined zbuf zbuffile -a30 -q fasthenry one of 30pin -f simple zbuf zbuffile -q -e20 -a0 Table 1: Commands used to generate some representative gures in this guide.

Option Default

-a -e -r -h -s -w -u 50.0 50.0 0.0 2.0 1.0 1.0 z -q | -x -b -c -v -n -f -g -m Range y y y  0.0 > 0.0 

0.0 1.0 , , or z | > 0.0 | | | | | | | | | | | |  x y  zbuf Options Function Speci es azimuth view angle in degrees. Speci es elevation view angle in degrees. Speci es nal rotation of 2-D image in degrees. Speci es distance from surface of object in object radii. Speci es nal scaling of 2-D image. Speci es postscript le line width. Speci es which 3-D axis is mapped to y-axis in 2-D image. Uses zbule shading shadings le to give grayscale shading to conductors. Includes axes of length axeslength in picture. Speci es lines, dots and arrows to superimpose on picture. Puts the command line in postscript le pictures. Removes showpage from postscript le. Numbers faces in order input. Suppresses hidden line removal. Prints the graph used to order the panels in postscript le. Produces a matlab le rather than a postscript le Table 2: Zbuf Options y Range is unrestricted.  See function readLines() in src/zbuf/zbufInOut.c for a description of the .fig le format.

32 4 REFERENCE PLANE CURRENT VISUALIZATION

changing the view angle slightly. The second is caused by problems with dimensions on the order of 10 , 4 or less. This problem can only be avoided by rescaling the input by changing the .Units to km . 4. The panel sorting algorithm used to write out the postscript les takes time pro- portional to the number of panels squared. This limits its usefulness to problems

with fewer than a few thousand panels. 5. The shading algorithm uses one shade of gray to shade all the segments along only one path between the two nodes of a

.external statement. Thus, if there are multiple paths, such as in Figure 9, the other paths will appear white. 6. When axes are included in postscript les using the -x option, the axes' two-dimensional projections appear in the postscript le before the panel

lls. This means that the object should be between the view point and the axes, otherwise the axes can be obscured strangely. Thus the option works best when viewing objects that lie entirely in the positive orthant from a view point in the positive orthant.

4 Reference Plane Current Visualization

When FastHenry is given the -d grids option, it dumps Matlab readable les of the current distribution in each reference plane of the geometry under analysis. One le is dumped for each of the columns computed for the admittance matrix. The le holds the current distribution produced by setting the source across the port corresponding to the current column to one volt and all others ports to zero. This process is then repeated for each freqeuncy point. Note: For nonuniformly discretized planes, the lename is the same, but the le format is very di erent. See nonuniform manual.ps . This document also describes viewing the current distribution in other than reference planes.

4.1 Current Files

The les are named according to the column in Zc.mat and frequency point. They have the form Grid n m .mat where n is the column (and row) in Zc.mat of the port which has the one volt source and m is the frequency point number. The frequency points start at 0 and increment by one for each new frequency. Inside each le are matrices for each reference plane named

grid1g and grid2g where name is the name of the reference plane de ned in the input le. Each entry in

grid1g is the complex valued current phasor for a lament in the seg1 direction. grid2g corresponds to lament currents in the seg2 direction. In general it is dicult to visualize complex current, but when the current is purely real (DC) or purely imaginary (high frequency), these two matrices can be thought of as the current in two orthogonal directions.

4.2 Examples 33 Figure 14: Two traces over a ground plane

4.2 Examples

4.2.1 Traces over a solid plane Consider the example le together.inp shown in Figure 14. This structure is simply two traces passing over a ground plane with one end of each trace shorted to the plane. Thus, when one volt is applied to the other end of one of the traces, current travels down the trace and returns through the plane. To generate the current distribution les:

fasthenry together.inp -d grids -x trace1 The les Grid1 0.mat and Grid1 1.mat are produced in addition to FastHenry's normal output les. By default, FastHenry would compute the current distribution for the source voltage placed one trace and then again for the other trace. Since the current distribution is nearly identical for both cases, we need only compute one of these cases and thus the -x option is used to specify that only the column of the admittance matrix corresponding to port

trace1 is to be computed (see input le). Also, since visualization is the goal, together.inp speci es that only a low frequency case, f = 10 , 1 Hz , and a high frequency case, f = 10

19 Hz are to be computed. In this example, the discretization of the plane is coarse for visualization purposes. The current distribution can then be viewed using the following Matlab commands to produce Figures 15 and 16.

< M A T L A B (R) > (c) Copyright 1984-93 The MathWorks, Inc.

All Rights Reserved

Version 4.1 Jun 15 1993 Commands to get started: intro, demo, help help 34 4 REFERENCE PLANE CURRENT VISUALIZATION DC current distribution for together.inp 12 10 8 6 4 2 0 -2

5 10 15 20

Figure 15:

High Frequency current distribution for together.inp 12 10 8 6 4 2 0 -2

5 10

Figure 16:

15 20 4.2 Examples 35 Commands for more information: help, whatsnew, info, subscribe >> load Grid1_0.mat >> who Your variables are:

grid1g1 grid2g1 >> quiver(real(grid1g1),real(grid2g1),2) >> title('DC current distribution for together.inp') >> print together_DC.ps >> load Grid1_1.mat >> who Your variables are:

grid1g1 grid2g1 >> quiver(imag(grid1g1),imag(grid2g1),2) >> title('High Frequency current distribution for together.inp') >> print together_highf.ps

Note that for the DC case in Figure 15 the current spreads across the plane as it travels from its source to sink points but at high frequency the current is focused underneath

from itss ource to si nk p oints but athighfr equency thecu rrent i s focused undernea th the trace.N ote als o tha t the high frequency current travels in the opposite direction as the current at DC since I = V =( j wL) = j V =( w L) .

4.2.2 Traces over a divided plane Next consider the example le broken.inp shown in Figure 17. This is identical to together.inp except that the plane is now broken in two pieces and connected by copper \tethers" as shown.

After running FastHenry with fasthenry broken.inp -d grids -x trace1 the two matrices can be concatenated in matlab to produce Figures 18 and 19 with the following commands: >> load Grid1_0 >> who Your variables are:

grid1g_one grid2g_one

36 4 REFERENCE PLANE CURRENT VISUALIZATION Figure 17: Two traces over a divided ground plane DC current distribution for broken.inp 14 12 10 8 6 4 2 0 -2 5 10 15

Figure 18:

20 25 4.2 Examples 37 High Frequency current distribution for broken.inp 14 12 10 8 6 4 2 0 -2 5 10 15 20 25

Figure 19:

grid1g_two grid2g_two >> size(grid1g_one)

ans = 11 11

>> space = zeros(,); >> new = [-gridg_two(:,:-:) space gridg_one]; >> new = [gridg_two(:,:-:) space gridg_one];

quiver(real(new1),real(new2),2);

(similarly for Grid1_1.mat) Note that some diculty is involved in combining the matrices because the seg1 direction in space is di erent for the two planes since the corners of the plane are de ned in counter-clockwise order for one plane, and clockwise for the other. From Figure 18 it may seem unusual that current can point into the empty space between the planes. This, however, is only an artifact of the method of visualization since the current vectors do not precisely represent the current ow at a particular point. Since the ground plane is discretized as a grid of segments (see Figure 4), one could attempt to represent the current as that passing through each node. But each node on the plane has four segments attached to it while only two are needed to de ne a vector direction. FastHenry consistently picks the segments with the smaller indices. This choice can be altered in the function makegrids() in fillM.c if the user wishes to average the currents, for instance.

38 A COMPILING FASTHENRY High Frequency current distribution for holey_gp.inp 50 40 30 20 10 0

0 10 20 30 40 50

Figure 20:

4.2.3 Trace over a plane with holes As a nal, more interesting example, consider observing the current for example le holey gp.inp shown previously in Figure 7. To produce Figure 20,

fasthenry holey_gp.inp -d grids and then in Matlab,

load Grid1_1 >> quiver(imag(grid1g1),imag(grid2g1),3) Again in this high frequency case, the current is observed to try its best to stay underneath the trace, outlining the holes it must circumvent.

A Compiling FastHenry

A tar le containing the source les for fasthenry and this guide may be obtained on tape by sending a written request to

Prof. Jacob White Massachusetts Institute of Technology Department of Electrical Engineering and Computer Science Room 36-880 Cambridge, MA 02139 U.S.A.

A.1 Compilation Procedure 39 This address may also be used for general correspondence regarding fasthenry , although electronic mail may be sent to [email protected] , for bug reports, and to [email protected] , for questions or comments, if it is more convenient. Comments on FastHenry are encouraged as well as comments on unclear portions of this manual. The tar le has the form

fasthenry-3.0-9Oct96.tar.Z and yields a one level directory when untarred with the commands

uncompress fasthenry-3.0-9Oct96.tar.Z tar xvf fasthenry-3.0-9Oct96.tar It will create a directory tree underneath fasthenry-3.0 which contains all the C source les underneath

src/ , this manual in doc/ , and the example les in examples/ . The tar les may also be obtained via anonymous ftp to rle-vlsi.mit.edu . Use username anonymous with your email address as the password. The FastHenry tar les are contained in directory pub/fasthenry . This directory also contains various publica- tions on multiplole accelerated inductance extraction. The most complete description is the compressed postscript le ms thesis.ps.Z :

Mattan Kamon, Ecient Techniques for Inductance Extraction of Complex 3-D Geometries , M.S. thesis, Massachusetts Institute of Technology, Cambridge, MA., February 1994. mtt.ps.Z is a preprint of

M. Kamon, M.J. Tsuk, and J. White, \FASTHENRY: A Multipole-Accelerated 3-D Inductance Extraction Program", IEEE Transactions on Microwave Theory and Techniques , Vol. 42, September 1994. See the README le at the ftp site for update information on releases, manuals, publica- tions.

A.1 Compilation Procedure

FastHenry is compiled by changing to the fasthenry-3.0 directory, and typing

make all to create the executables fasthenry and zbuf in the bin/ directory. If you are compiling on a DEC 5000, DEC 3000 (Alpha), SGI, or a system running System V (HP and Suns running Solaris, perhaps), other ags are required for compila- tion. In this case, before compilation as instructed above, give the command:

config 40 B CHANGES IN VERSION 3.0 where is one of dec , alpha , or sgi , or solaris for compilation on a DEC 5000, DEC 3000 (Alpha), and Silicon Graphics workstation, respectively. Additional steps for compiling on an SGI are given in the le README.sgi in the fasthenry-3.0 directory. config sysV is also provided for compilation on HP-UX, and other machines running System V, but has not been thoroughly tested. For more details on compilation, see the fasthenry-3.0/README le.

A.2 Producing this Guide

This guide is available in postscript as three separate les: manual 001.ps, manual 002.ps , and

manual 003.ps in the doc/ directory. manual 001.ps contains up through page 13, manual 002.ps is pages 14{31, and manual 003.ps is pages 32{36. Note that these les contain many detailed postscript images and may take signi cant time to print. The L a TEX version of the manual without the gures is also available. Also, the nonuniform plane discretization manual is in the les nonuniform manual 1.ps and

nonuniform manual 2.ps

B Changes in Version 3.0

 Specify a nonuniform discretization of a reference plane to capture small features in fewer elements.  Two approaches for generating spice equivalent circuits are available:

1. An equivalent circuit for a single frequency.

  1. A circuit which models the frequency dependent resistances and inductances through a reduced state-space representation Comments: Method 1 will not model frequency dependent resistance and induc- tance since it gives and R and L at the single speci ed frequency. Method 2 will model the full e ects up to some frequency.  Major Bug x: For reference planes which form segments with di erent widths in the x-direction versus the Y direction, the sizes weren't computed correctly in version 2.0 and above. This has been xed.  The zbuf program now takes the -m" argument to produce a Matlab le for faster visualization in matlab. This is very bene cial for large les since producing the postscript le can take n 2 time. The matlab le can be viewed within matlab with the fasthenry-3.0/bin/plotfastH.m matlab function. The le zbuffile.mat would be produced with \zbuf -m zbule" which can then be viewed in matlab with >> plotfastH('zbule.mat')". Also, you can modify the le src/zbuf/dump struct.c to output in YOUR own format instead of matlab.  Sparse preconditioner. Specify -p shells to use a preconditioner based on Byron Krauter's sparse inductance technique.

41  Regurgitate the input le with -v to see what FastHenry thinks it has read. Also can translate and re ect geometry before output.