MDM File Format

Keysight's PD1000A Control Software saves the measurement data in the .MDM file format. This measurement data is imported into the PEMG software for device modeling.

The .MDM file format provides the following advantages:

  • ASCII based
  • 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. Because it is possible for input values listed later in the file to conflict with the header information due to hand editing or incorrect formation of the mdm file, the input definition is taken as the correct description of the independent sweep information for the MDM file. This means all input values that occur later on in the file are informational only. When written from IC-CAP these values are correct and meaningful for human inspection of the file, but when read by IC-CAP they are ignored and the definition of the input from the HEADER is taken. 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> <type>
.
.
<output_name_p> <mode> [<mode_options_list>] <unit> <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>:

<mode_options_list>

<mode> Fields
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>:

<sweep_options_list>

<sweep_type> Fields
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> <number of points>
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> <module 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, forward and reverse Gummel DC measurements on a bipolar device are measured with different sweeps, so the file headers for each of these are incompatible. 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 and so require only 1 column.
  • TwoPort (S, H, Z, Y, K, or A) output modes are always 2-port complex and so 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> &#8230; <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) ...
<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 data set 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 the file must contain, 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.