next up previous contents
Next: A.8 Setup of the Up: A. Input-Deck Interface to Previous: A.6 Output Functions


A.7 Setup for the Cut-Off Frequency Extraction

The simulation concept is divided into two steps:

  1. Simulation configuration and test
  2. Simulation
Since the curve shape is known in advance the configuration is usually performed very quickly. After setting up a standard input-deck consisting of all parts necessary for the device simulation, the definition of the stepping variables $ V_\mathrm{B}$ and frequency remain. The base voltage is stepped to vary the collector current in a range between $ 10^{-6}$ and $ 10^{-1}$. The frequency variable is combined with the new conditional stepping function. This function requires two boundaries that should be updated for each base voltage step. Thus, an index stepping is used to step through three different arrays (tables): one array contains the base voltages (vbtbl), one the lower and one the upper boundaries. Usually these arrays are defined in the global section of the input-deck (see below).

After the basic part of the configuration is finished, the boundaries have to be tested since their condition values must have different signs. Note the optional argument maxCount of the frequency stepping function. It is now set to $ 3$, which forces the simulator to give additional information on the stepping and which restricts each voltage step to three frequency steps being the minimal conditional simulation.

Thus, the boundaries as defined in tables lower and higher of each voltage step can be tested. After each step the simulator gives detailed information on the steps, for example

Conditional Stepping Information: Interval [ 1.500e+08,  2.000e+08]
                                  Values = [ 3.257e-01, -4.488e-03]

and in case of invalid boundaries a similar error message, for example

#### mmnt: Invalid range for step condition (count=1)
#### mmnt:    Interval [  1.000e+06,  4.000e+06 ]
#### mmnt:    Values = [  4.150e+00,  2.893e-01]

Obviously, the only remedy for these errors is adjusting the boundaries. In case of the $ f_\textrm {T}$ extraction as presented in this work the first condition value must be positive (lower frequency means higher $ \beta$), the second one must be negative. If both conditional values are positive, the frequencies should be increased, in case of the opposite, they should be decreased. Note, performance is directly proportional to the narrowness of the boundaries.

A useful feature to speed up the configuration process is to adapt the start index value that should always be the index of the (latest) erroneous index. For example, indices 0 and $ 1$ are processed successfully, but index $ 2$ fails, the start index should be set to $ 2$:

index = step(2, <Number of Steps n>, 1);

If the complete simulation is done, the start index should be reset to 0 and the maxCount argument should be set to a higher value, for example $ 150$. Then, the simulation can be restarted again. Due to the narrow and tested boundaries it will be both fast, successful and as accurate as in the fourth argument of the stepping function given.

Conditional stepping has been extended by an automatic adaptation for the boundaries. Since it can be generally employed for several applications, for example threshold voltage extraction, the automatic adaptation is implemented as an input-deck-based feature (see Section B.4).

The example demonstrates the setup for the cut-off frequency extraction by conditional stepping (see also Appendix B.3).

index = step(0, 10, 1);
vbtbl = [0.74, 0.76, 0.78, 0.80, 0.82, 0.84, 0.86, 0.87, 0.88, 0.90, 0.92];
lower = [1,    32,   15,   12,   3,    5,    20,   29,   29,   0.5,  0.5];
upper = [2,    35,   45,   13,   4,    9,    40,   30,   30,   10,   10]
Vb    = ~vbtbl[~index];

In order to step these three arrays simultaneously, it is necessary to introduce an index variable which is actually stepped. By using this index, the base voltage $ V_\mathrm{B}$ is then obtained by subscripting the vbtbl array. The Solve section of the input-deck should look like this:

Solve
{
   ac  = yes;

   +lb = ~lower[~index] * 1 Hz;  // lower boundary
   +ub = ~upper[~index] * 1 Hz;  // upper boundary

   frequency = stepCond(lb,
                        ub, 
                        ~Curve.Response.beta - 1.0, 
                        1e-2,
                        maxCount = 3);
}

The Curve section of the input-deck contains the calculation of variable beta:

Curve
{
  file = "sim_out_ft.crv";
  Response
  {
     +ic = abs(output("Device", "I", "C", ac = yes));
     +ib = abs(output("Device", "I", "B", ac = yes));
     +beta = ic/(ib + 1e-300A);
  }
}

It is important to note that the currents are zero while the simulator is initialized. To prevent a division by zero, a very small and thus negligible current is added to the numerator in the beta assignment.


next up previous contents
Next: A.8 Setup of the Up: A. Input-Deck Interface to Previous: A.6 Output Functions

S. Wagner: Small-Signal Device and Circuit Simulation