Generating A High-k Metal Gate Stack Using the HKMG-Builder¶
Version: U-2022.12
Introduction¶
HKMG stacks are complex device building blocks used in transistor gates in modern logic applications. They consist of layers of different materials in different states (e.g. crystalline, poly-crystalline, amorphous). Understanding these stacks at the atomic level will help to tune electronic and structural properties. However, constructing and structurally optimizing such stacks at the DFT level requires considerable computational resources. Instead, we use moment tensor potentials (MTP) which are machine learned force fields (ML-FFs). ML-FFs have become popular in recent years since they can provide ab-initio level of accuracy within a realistic timescale. More information about MTP can be found here.
Workflow¶
Step 1: Prepare the script using the builder¶
Open the High-k Metal Gate Stack Builder found in the Supplementary tools section of NanoLab.

The builder is pre-populated with a four-layer stack consisting of the semiconductor substrate, an insulating oxide, the high-k material and finally a metallic layer. Different choices of materials are available and all layers can be selected either as crystalline or amorphous. In the case of amorphous layers, the stoichiometry may be specified. For this tutorial, the default settings will not be changed except for the lengths of the outer layers which are considered to be bulk-like. The builder produces a script which will generate the actual HKMG-stack when run. To obtain the script, follow the steps below.

Change the target length of silicon and titanium nitride to 15 Å.
Click Update to show the stack preview.
Increase the min. surface vector length to 10 Å to filter out small unit cells.
Select the third stack from the bottom of the size-strain plot. This stack has a square base.
Generate the script by clicking on
and sending to the Editor or download it here:
HKMG_builder_original.py
.
Tip
The displacement of the layers in the AB plane can be adjusted by clicking into the Displacement vector field and using the mouse wheel or arrow keys. The updated interface will be shown in the preview after pressing enter. This is particularly useful for aligning atoms in crystal-crystal interfaces and reducing defects.
Step 2: Get candidate structures by running the script¶
The generated script has to be run in order to build the final stack structure. As an alternative, the preview structure can be sent to the Builder to be inspected and manually modified. However, especially for amorphous layers, it is strongly recommended to refine the initial structure using the MultilayerBuilder, which will take care of optimizing interfaces and properly annealing amorphous layers.
Tip
To run the MultilayerBuilder efficiently we recommend using OpenMP parallelization.
For layers of a certain thickness it might be advisable to change the relaxation_length and interaction_length arguments for better results.
Since generating the amorphous layers is a stochastic procedure, it is not
guaranteed that the result of a single script run will yield a stack
with satisfactory properties. In the following we will therefore build
several candidate stacks by repeating the layer set-up and the
MultilayerBuilder run in a loop using different random seeds.
Take a look at the modified script (HKMG_builder_loop.py
)
and optionally change the sample size or
the random seed. Then run the script. This step might take several hours on
a multi-core workstation.
Note
Validated, ready-to-use MTPs are provided for all material and interface combinations available in the builder. However, user generated potentials can be substituted in the script.
Step 3: Select a high-quality stack from the set of candidates¶
Now that we have a set of initial candidate structure from step 2, we can proceed to select the best stack configuration. The most important quality criteria to consider are unphysical bonding patterns and various forms of (coordination-) defects formed in particular at the interfaces.
Download the provided script (selectHKMGconfigurations.py
) which
first checks for too close atoms. Then, it passivates dangling Si-bonds at
the Si-SiO2 interface by inserting additional hydrogen and
oxygen atoms. Finally it filters out stacks with undesired structural
patterns, such as O-O bonds, as well as clearly over- and under-coordinated atoms.
Run the script in the same folder containing the builder output to receive
a list of low-defect stacks ranked by the number of
added saturating hydrogen atoms.