MDM File Structure
The MDM file format provides the following advantages:
• |
Table-based, row-column format with column header lines that make reading easy—includes a list of the inner-most independent variables. |
• |
All data tables have identical shape. A header at the top of the file provides an outline of all the data in the file. After the header has been parsed, the location of any data group can be computed quickly, permitting rapid location of arbitrary data groups scattered throughout the file. Comment lines are denoted by the exclamation character (!). The file extension for the data files is .mdm (measured data management). |
File Header Format
The file header contains all the relevant information about the inputs sweeps as well as a listing of all the outputs. The header information begins with the BEGIN_HEADER keyword and ends with the END_HEADER keyword. The header information is contained in one of four separate sections: ICCAP_INPUTS, ICCAP_OUTPUTS, USER_INPUTS, and ICCAP_VALUES. The ICCAP_INPUTS and ICCAP_OUTPUTS sections contain information that would be contained in an IC-CAP setup. These portions of the header are mandatory. The optional USER_INPUTS section contains sweep information on variables that can't be swept in a traditional IC-CAP setup (such as, Length, Width and Temperature). The optional ICCAP_VALUES section contains parameter and variable data. When IC-CAP reads the MDM file, the parameter or variable values are reset to the value in the file. If the parameter or variable does not exist, IC-CAP creates a variable by that name in the setup where the file is being read. The header structure is as follows:
BEGIN_HEADER
USER_INPUTS
<user_input_name_1> <sweep_type> [<sweep_type_options_list>]
.
.
<user_input_name_n> <sweep_type> [<sweep_type_options_list>]
ICCAP_INPUTS
<input_name_1> <mode> [<mode_options_list>] <sweep_type> [<sweep_type_options_list>]
.
.
<input_name_m> <mode> [<mode_options_list>] <sweep_type> [<sweep_type_options_list>]
ICCAP_OUTPUTS
<output_name_1> <mode> [<mode_options_list>] <unit> <compliance> <type>
.
.
<output_name_p> <mode> [<mode_options_list>] <unit> <compliance> <type>
ICCAP_VALUES
<value_name_1> <value_1>
.
.
<value_name_q> <value_q>
END_HEADER
|
where,
- <input_name> is a unique but arbitrary name for a user sweep or an IC-CAP sweep
- <mode> is set to one of the following values: V, I, F, T, P, U, W (inputs) or V, I, C, G, T, S, H, Z, Y, K, A (outputs)
- <mode_options_list> is a list of fields that depend on the <mode>. The following shows the fields for each <mode>:
Table 55 <mode_options_list>
|
|
Inputs
|
|
V, U
|
<+ Node><- Node> <Unit> <Compliance>
|
I
|
<To Node><From Node> <Unit> <Compliance>
|
P
|
<Param Name><Unit>
|
W
|
<+ Node><- Node> <dBm(d)/Watts(W)> <Resistance> <Fund> <Unit> <Compliance>
|
F, T
|
(no options)
|
Outputs
|
|
V, N, U
|
<+ Node><- Node>
|
I
|
<To Node><From Node>
|
C, G
|
<High Node><Low Node>
|
T
|
<Node><Pulse Param>
|
S, H, Z, K, A, Y
|
<Port 1><Port 2><AC Ground>
|
- <sweep_type> is set to one of the following IC-CAP sweeps: LIN, LOG, SYNC, LIST, CON, AC, HB, EXP, PULSE, PWL, SFFM, SIN, TDR, SEG
- <sweep_options_list> is a list of fields that depend on the <sweep_type>. The following shows the fields for each <sweep_type>:
Table 56 <sweep_options_list>
|
|
LIN
|
<sweep order> <start> <stop> <number of points> <step size>
|
LOG
|
<sweep order> <start> <stop> <number of points> <sweep scale (D or O)> <total number of points>
|
SYNC
|
<ratio> <offset> <master sweep>
|
LIST
|
<sweep order> <n = number of values> <value1> <value2> … <valueN>
|
CON
|
<value>
|
AC
|
<magnitude> <phase>
|
HB
|
<sweep order> <value> <order>
|
EXP
|
<initial value> <pulsed value> <rise delay> <rise const> <fall delay> <fall const>
|
PULSE
|
<initial value> <pulsed value> <delay time> <rise time> <fall time> <pulse width> <period>
|
PWL
|
<number of pairs> <time 1> <value 1> ... <time 7> <value 7> <start time> <repeat times>
|
SFFM
|
<offset> <amplitude> <carrier frequency> <modul index> <signal frequency>
|
SIN
|
<offset v> <amplitude> <frequency> <delay time> <damp factor> <phase>
|
TDR
|
<initial value> <pulsed value> <delay time> <rise time> <fall time> <pulse width> <period> <resistance>
|
SEG
|
<sweep order> <number of segments> <number of points> <value 1> ... <value 10>
|
- <unit> is set to the IC-CAP instrument unit associated with the output (use DEFAULT for unspecified)
- <compliance> is the compliance limit for the output (use DEFAULT for unspecified)
- <type> is a single character—M, S, or B. M indicates that the output, if created from an MDM file, is for measured data only. S indicates simulated data only and B indicates either.
The data in the ICCAP_OUTPUTS block is restricted to data that can exist in a single IC-CAP setup. For example, since forward and reverse gummel DC measurements on a bipolar device are measured with different sweeps, the file headers for each of these would be incompatible. In order to make all the data within a file importable into a standard IC-CAP setup, two separate files (one for each setup) would be required to store this data.
File Data Format
The data within a file is organized into multiple groups of tabular data. Each group of tabular data is arranged in columns representing the innermost sweep data and its associated dependent data. The innermost sweep is always the first column. Any inputs with SYNC sweep type and with the innermost sweep as its master are listed next. Dependent data may be either real or complex, depending on the following rules:
• |
C, G, and T output modes are always real—therefore require only 1 column. |
• |
TwoPort (S, H, Z, Y, K, or A) output modes are always 2-port complex—therefore require 8 columns. |
• |
V and I output modes depend on the sweep types of the inputs specified in the setup. If any of the inputs in a setup have sweep type AC or HB, V and I output modes require 2 columns—one for real and one for imaginary data. For all other setups, V and I output modes require a single real column. |
• |
Any output mode not covered in the preceding rules have 2 columns for complex data. |
For real data, the tabular data is structured as follows:
<input_name> <output_name 1> <output_name 2> …
<output_name n> input1 (output 1) 1 (output 2) 1 …
(output n) 1
.
.
.
inputm (output 1) m (output 2) m … (output n) m
For matrix data (such as, multiport data), the data format for a single output is structured as follows:
<in_name> R:<out_name>(1,1) I:<out_name>(1,1) …
R:<out_name>(n,m) I:<out_name>(n,m)
input1 real(output 1,1)1 imag(output 1,1)
1 … real(output n,m) 1 imag(output n,m) 1
.
.
.
inputk real(output 1,1) k imag(output 1,1)
k … real(output n,m) k imag(output n,m) k
Each group of tabular data is preceded by a list of each remaining input name (i.e., all inputs except the innermost sweep) and its current value for the data group in question. Each group begins with the keyword BEGIN_DB and ends with the END_DB keyword. Note that the IC-CAP inputs always vary faster than the user inputs. The file structure of each group is as follows:
BEGIN_DB
<user_input_1> <user_value_1> … <user_input_n>
<user_value_n> <iccap_input_2> <iccap_value_2> …
<iccap_input_m> <iccap_value_m>
[tabular data goes here]
END_DB
Since the import function in IC-CAP determines the size of the dataset from the header information alone, the data following the header must be consistent with the description in the header. After parsing the header, IC-CAP knows exactly how many data blocks should be contained in the file, as well as the number of lines occupied by a single data block. If any data blocks are missing, or if the number of lines within a data block are inconsistent with the header, the data import fails.
File Examples
This section contains three example .mdm files that were generated with IC-CAP's export functions.
Example 1: Forward Gummel Data
The Forward Gummel Data example (code listing below) shows how some forward Gummel data can be stored in an .mdm file. In this example, the variables vb and Temp are being swept. The variable vb is the inner most (fastest varying) sweep. Since vc is synchronized to vb, the values of vc must appear in each data block. The actual ordering of the sweeps within the USER_INPUTS, ICCAP_INPUTS or ICCAP_OUTPUTS block, as well as the ordering of the variables in the secondary header (USER_VAR, ICCAP_VAR), is immaterial.
Figure 42 Example: Forward Gummel Data
! VERSION = 6.00
BEGIN_HEADER
ICCAP_INPUTS
vb V B GROUND SMU1 0.01 LIN 1 0.33 0.83 51 0.01
ve V E GROUND GND 0.1 CON 0
vc V C GROUND SMU2 0.2 SYNC 1 0 vb
ICCAP_OUTPUTS
ib I B GROUND SMU1 B
ic I C GROUND SMU2 B
END_HEADER
BEGIN_DB
ICCAP_VAR ve 0
#vb vc ib ic
0.33 0.33 4.87574e-011 4.67239e-010
0.34 0.34 5.77546e-011 6.85381e-010
0.35 0.35 6.86361e-011 1.00538e-009
0.36 0.36 8.18976e-011 1.47476e-009
0.37 0.37 9.82047e-011 2.16325e-009
0.38 0.38 1.18461e-010 3.17307e-009
0.39 0.39 1.4391e-010 4.65412e-009
0.4 0.4 1.76281e-010 6.82619e-009
0.41 0.41 2.18003e-010 1.00115e-008
0.42 0.42 2.72518e-010 1.46826e-008
0.43 0.43 3.44737e-010 2.15321e-008
0.44 0.44 4.41716e-010 3.15754e-008
0.45 0.45 5.73646e-010 4.63009e-008
0.46 0.46 7.55304e-010 6.78903e-008
0.47 0.47 1.0082e-009 9.95413e-008
0.48 0.48 1.36373e-009 1.45941e-007
0.49 0.49 1.86784e-009 2.13956e-007
0.5 0.5 2.58788e-009 3.13654e-007
0.51 0.51 3.62273e-009 4.59782e-007
0.52 0.52 5.11772e-009 6.7395e-007
0.53 0.53 7.28674e-009 9.87821e-007
0.54 0.54 1.04447e-008 1.44778e-006
0.55 0.55 1.50555e-008 2.12177e-006
0.56 0.56 2.18032e-008 3.10934e-006
0.57 0.57 3.16961e-008 4.55624e-006
0.58 0.58 4.62218e-008 6.67595e-006
0.59 0.59 6.75746e-008 9.78105e-006
0.6 0.6 9.89915e-008 1.43291e-005
0.61 0.61 1.45248e-007 2.09898e-005
0.62 0.62 2.1339e-007 3.07431e-005
0.63 0.63 3.13803e-007 4.50218e-005
0.64 0.64 4.61803e-007 6.59204e-005
0.65 0.65 6.79941e-007 9.64972e-005
0.66 0.66 1.0014e-006 0.000141213
0.67 0.67 1.47494e-006 0.000206561
0.68 0.68 2.17197e-006 0.000301974
0.69 0.69 3.19683e-006 0.000441095
0.7 0.7 4.70103e-006 0.000643565
0.71 0.71 6.9031e-006 0.00093743
0.72 0.72 1.01148e-005 0.00136231
0.73 0.73 1.47739e-005 0.00197331
0.74 0.74 2.14824e-005 0.00284535
|
0.75 0.75 3.10425e-005 0.00407717
0.76 0.76 4.44792e-005 0.00579344
0.77 0.77 6.30296e-005 0.0081425
0.78 0.78 8.80775e-005 0.0112877
0.79 0.79 0.000121025 0.015391
0.8 0.8 0.000163119 0.0205921
0.81 0.81 0.000215278 0.0269887
0.82 0.82 0.000277987 0.0346245
0.83 0.83 0.000351277 0.0434891
END_DB
|
Example 2: Saving Transformed Data
The Saving Transformed Data example (code listing below) shows how some forward Gummel data can be stored along with additional data beta, which has been computed from the measured data. Since the beta data has been computed rather than measured, information such as node connections is not relevant. The IC-CAP import functions accept outputs in the ICCAP_OUTPUTS block in the abbreviated form shown in the example for beta, as well as in the standard form for measured quantities, such as ib and ic. In order to differentiate between real data (such as, current, voltage, and capacitance) and 2-port data (such as, s-parameters) non-measured quantities must have one of two mode types listed after the variable name:
• |
Real quantities should use V as the generic real data mode type. |
• |
Two-port quantities should use S as the generic 2-port mode type. |
Figure 43 Example: Saving Transformed Data
! VERSION = 6.00
BEGIN_HEADER
ICCAP_INPUTS
vb V B GROUND SMU1 0.01 LIN 1 0.3 0.8 51 0.01
ve V E GROUND GND 0.1 CON 0
vc V C GROUND SMU2 0.2 SYNC 1 0 vb
ICCAP_OUTPUTS
ib I B GROUND SMU1 B
ic I C GROUND SMU2 B
beta U
END_HEADER
BEGIN_DB
ICCAP_VAR ve 0
vb vc ib ic R:beta(1,1) I:beta(1,1)
0.3 0.3 2.97359e-011 1.48082e-010 4.9799 0
0.31 0.31 3.50033e-011 2.17173e-010 6.20438 0
0.32 0.32 4.12693e-011 3.18536e-010 7.71848 0
0.33 0.33 4.87574e-011 4.67239e-010 9.58294 0
0.34 0.34 5.77546e-011 6.85381e-010 11.8671 0
0.35 0.35 6.8636e-011 1.00538e-009 14.648 0
.
.
.
0.73 0.73 1.47739e-005 0.00197331 133.567 0
0.74 0.74 2.14824e-005 0.00284535 132.45 0
0.75 0.75 3.10425e-005 0.00407717 131.342 0
0.76 0.76 4.44792e-005 0.00579344 130.25 0
0.77 0.77 6.30296e-005 0.0081425 129.185 0
0.78 0.78 8.80775e-005 0.0112877 128.156 0
0.79 0.79 0.000121025 0.015391 127.172 0
0.8 0.8 0.000163119 0.0205921 126.24 0
END_DB
|
Example 3: 2-Port Data
The 2-Port Data (code listing below) example shows how some 2-port data is stored in an .mdm file. This a simple example with only one data block. Multiple blocks of 2-port data are easily handled using the same approach as illustrated in the Forward Gummel data example.
Figure 44 Example: 2-Port Data
BEGIN_HEADER
ICCAP_INPUTS
freq F LIN 1 1e+09 2e+10 20
vd V D 0 CON 2
vg V G 0 CON 0
vs V S 0 CON 0
ICCAP_OUTPUTS
s S G D 0
END_HEADER
BEGIN_DB
ICCAP_VAR vd 2
ICCAP_VAR vg 0
ICCAP_VAR vs 0
freq R:s(1,1) I:s(1,1) R:s(1,2) I:s(1,2) R:s(2,1) I:s(2,1) R:s(2,2) I:s(2,2)
1e+09 0.952765 -0.224466 0.00250463 0.0181728 -9.12695 4.09933 0.826825 -0.133475
2e+09 0.823887 -0.4131 0.00927818 0.0338053 -8.015 7.68155 0.721175 -0.242516
3e+09 0.643912 -0.545612 0.0185764 0.0453976 -6.51225 10.4343 0.572444 -0.313754
4e+09 0.445355 -0.620653 0.0285869 0.0527403 -4.93111 12.3018 0.406526 -0.347128
5e+09 0.251996 -0.648786 0.038045 0.0564729 -3.48076 13.4015 0.242814 -0.35067
6e+09 0.0767755 -0.643938 0.0463266 0.0575208 -2.25457 13.9149 0.0923492 -0.334344
7e+09 -0.0755289 -0.618357 0.0532653 0.0567453 -1.26671 14.0161 -0.0403101 -0.306557
8e+09 -0.204864 -0.58103 0.0589388 0.0548157 -0.492037 13.8452 -0.154513 -0.273196
9e+09 -0.313372 -0.537902 0.0635211 0.0522049 0.10741 13.5041 -0.251554 -0.237929
1e+10 -0.403927 -0.492642 0.0672037 0.0492289 0.569153 13.0635 -0.333484 -0.202836
1.1e+10 -0.479404 -0.447392 0.0701604 0.046091 0.925146 12.5706 -0.402492 -0.16899
1.2e+10 -0.542383 -0.403328 0.0725371 0.0429182 1.20076 12.0562 -0.460617 -0.136866
1.3e+10 -0.595055 -0.361041 0.0744508 0.0397875 1.41544 11.54 -0.509644 -0.106604
1.4e+10 -0.639233 -0.320776 0.0759938 0.0367433 1.5838 11.034 -0.551083 -0.0781668
1.5e+10 -0.676397 -0.282583 0.0772385 0.0338096 1.71675 10.5454 -0.586187 -0.0514345
1.6e+10 -0.707743 -0.246403 0.0782409 0.0309975 1.82244 10.0781 -0.615993 -0.0262538
1.7e+10 -0.734241 -0.212124 0.0790451 0.0283101 1.90696 9.63396 -0.641346 -0.00246532
1.8e+10 -0.756675 -0.179609 0.0796856 0.0257459 1.97487 9.21352 -0.662944 0.0200831
1.9e+10 -0.775683 -0.148716 0.0801897 0.0233003 2.02964 8.81648 -0.681355 0.0415301
2e+10 -0.791784 -0.119307 0.0805791 0.0209675 2.07389 8.44203 -0.69705 0.0619992
END_DB
|
|