Basic Usage Part1: Create your own device Welcome to the first part of the tutorial "Basic Usage". Let’s learn by example. Throughout this tutorial, we’ll walk you through the creation of your own 1-dimensional MOS device.

We are aiming for a device with an n-doped silicon channel, a 1 nm silicon dioxide and a 2 nm hafnium dioxide insulating layer. Finally, our device will be completed by a metal gate. The flat band structure of the device we are going to create is displayed in Fig. 1:
comphy-band_diagram
Band structure of the tutorial device. The gate stack consists of a silicon channel, a silicon dioxide layer, a hafnium dioxide layer and a metal gate.

This tutorial is not intended to give an in-depth insight into the physical models behind Comphy, but rather to give an introduction to using Comphy for your own simulations. For a detailed description of the employed physical models please read the publications related to Comphy.

Assembling the device It is good practice to build the device layer by layer starting from the semiconductor channel. We will therefore start with the definition of the silicon channel, then move on to the SiO2 layer and the HfO2 layer and finally define the properties of the gate.
Step 1: Create the device object: We start with creating our one-dimensional MOS device and set its initial temperature to room temperature (~300K). Temperature = 300.0
my_device = MOS_1D(
Tinit=Temperature, # initial temperature in K
)
Now that we have created our device object, we can add the different layers of the stack. Step 2: Add semiconductor channel: To create the semiconductor channel, we need a bandgap model describing how the bandgap of the semiconductor depends on temperature. Comphy offers three predefinied bandgap models in the Physics module:
  • The first model BandGapModel_constant has a constant bandgap Eg(T) = Eg0.
  • The second model BandGapModel_Tdep1 exhibits a linear temperature dependence Eg(T) = Eg0 + Eg1 * T
  • The third model BandGapModel_Tdep2 has a more complicated temperature dependence Eg(T) = Eg0 + Eg1 * T + Eg2 * T² / (T + Edg) that matches the temperature dependence used on http://www.ioffe.ru/SVA/NSM/Semicond/Si/.
Let's select the bandgap model with the linear temperature dependence for our device and set the respective parameters: bandgap_model = BandGapModel_Tdep1(
Eg0=1.206, # band gap parameter in eV
Eg1=-2.73E-4, # band gap parameter in eV/K
)


Next we create the carrier models describing how the electrons and holes in the semiconductor react to temperature and bias: e_model = CarrierModel_Electrons_1(
Ncv0=2.541E25, # effective density of states of conduction band
Mc=6, # equivalent minima of conduction band
mt0=0.1905, # transversal effective mass
ml=0.9163, # longitudinal effective mass
bgmodel=bandgap_model, # bandgap model
)


h_model = CarrierModel_Holes_1(
Ncv0=2.54E25, # effective density of states of valence band
mEff_a=0.4435870, # effective mass parameter
mEff_b=0.3609528e-2, # effective mass parameter in K⁻¹
mEff_c=0.1173515e-3, # effective mass parameter in K⁻²
mEff_d=0.1263218e-5, # effective mass parameter in K⁻³
mEff_e=0.3025581e-8, # effective mass parameter in K⁻⁴
mEff_f=0.4683382e-2, # effective mass parameter in K⁻¹
mEff_g=0.2286895e-3, # effective mass parameter in K⁻²
mEff_h=0.7469271e-6, # effective mass parameter in K⁻⁶
mEff_i=0.1727481e-8, # effective mass parameter in K⁻⁸
)

Finally we have everything at hand to create the semiconductor channel. We will create an n-type substrate with a donor concentration of 1.4E23 m⁻³ and an acceptor concentration of 1.0E16 m⁻³: Si = Channel(
Nd=1.4E23, # donor concentration in m⁻³
Na=1.0E16, # acceptor concentration mass in m⁻³
name='Si', # material name
Eg=bandgap_model, # band gap model of channel
m_neff=e_model, # electron effective mass (or carrier model)
m_peff=h_model, # hole effective mass (or carrier model)
Xsi=4.05, # electron affinity in eV
kval=11.68, # relative permittivity
ccs_e=2.0E-23, # capture cross section for electrons in m⁻²
ccs_h=2.0E-23, # capture cross section for holes in m⁻²
)
my_device.channel = Si
Step 3: Add oxide layers: In our next step we define the insulating layers and add them to our device. Each insulating layer requires as input parameters the layer thickness, the relative permitivity kval, the bandgap Eg, the electron affinity Xsi, the material_name and the tunneling mass mt. Eg can either be initialized with a simple float to define a constant bandgap, or with a corresponding temperature-dependent bandgap model as in the case of the silicon channel. To keep this tutorial as simple as possible, we assume constant band gaps for the oxide layers: SiO2 = InsulatingLayer(
thickness=1.0E-9, # thickness of layer in m
kval=3.9, # relative permittivity
Eg=9.0, # band gap in eV (or bandgap model)
Xsi=0.82, # electron affinity in eV
material_name='SiO2', # name of layer-material
mt=0.35, # relative tunneling mass
)
my_device.insulating_layers.append(SiO2)

HfO2 = InsulatingLayer(
thickness=2.0E-9, # thickness of layer in m
kval=20.0, # relative permittivity
Eg=5.8, # band gap in eV (or bandgap model)
Xsi=1.972, # electron affinity in eV
material_name='HfO2', # name of layer-material
mt=0.17, # relative tunneling mass
)
my_device.insulating_layers.append(HfO2)

Step 3: Add gate: Finally, to finish the stack we add a metal gate to our device with a work function of 4.71 eV as displayed in Fig. 1: gate = Metal(
workfunction=4.71, # work function in eV
name='metalgate', # name of gate-material
ccs=2.0E-23, # capture cross section for electrons in m⁻²
)
my_device.gate = gate

Step 4: Plot flatband diagram: In order to perform a consistency check, we want to plot the flatband diagram of our device. For this purpose, we first extract the flat band voltage our device. Then we use the method my_device.get_VB_and_CB() to retrieve the valence band edge and the conduction band edge for an array of x coordinates. Finally, we plot the conduction and valence band edge over the respective position using the Python package matplotlib: # plot flat band diagram

Vfb0 = my_device.get_Vfb0(T=Temperature)
x = np.linspace(-1.0E-9, my_device.oxide_thickness + 1.0E-13, 10000)
VB, CB, potential = my_device.get_VB_and_CB(x=x, T=Temperature, applyVg=True, Vg=Vfb0)

figure = plt.figure(figsize=(8.0, 6.0))
plt.title('Flatband diagram with Vfb0 = %.3f' % Vfb0)
plt.plot(x / 1.0e-9, VB, color='blue', label='VB')
plt.plot(x / 1.0e-9, CB, color='red', label='CB')

plt.axhline(y=0.0, color="grey", label="vacuum level")

xdata = [2.8, 4.0]
ydata = [my_device.get_Ef_gate(Vg=Vfb0, T=Temperature)] * 2
plt.plot(xdata, ydata, color="black", linestyle="dashed", linewidth=2.0, label="work function")

plt.legend(loc="lower right")
plt.xlabel('position / nm')
plt.ylabel('energy / eV')
plt.tight_layout()
plt.grid()
plt.show()
If you followed the tutorial closely, executing the Python script should result in the following image:
comphy-band_diagram_traps
The figure shows the flat band diagram of our device.