Skip to content

Doping and devices

    from matplotlib import pyplot

import numpy as np
from scipy.optimize import root_scalar

import plotly.graph_objs as go

from common import draw_classic_axes, configure_plotting

configure_plotting()


def sqrt_plus(x):
    return np.sqrt(x * (x >= 0))


# Band structure parameters.
E_V, E_C, E_F = -1.2, 1.8, .4
E_D, E_A = E_C - .7, E_V + .5
m_h, m_e = 1, .5
  

Expected prerequisites

Before the start of this lecture, you should be able to:

  • Compute the electron/hole carrier densities and the Fermi level of an intrinsic semiconductor
  • Compute the intrinsic carrier density of a semiconductor
  • Describe how these quantities scale with temperature, effective mass, and bandgap

Learning goals

After this lecture you will be able to:

  • Compute the carrier density and Fermi level of doped semiconductors
  • Describe the functioning principles of semiconducting devices

In the previous lecture, we learned how to deal with partially filled bands. The concept of electrons/holes established the foundations needed to understand semiconductors. We saw that the carrier density, and thereby the electrical conductivity, of semiconductors can be controlled by tuning the temperature. However, such temperature control is too constrained for many applications, and leads to equal electron and hole densities \(n_e = n_h\). The full utility of semiconductors is achieved through another Fermi-level control method: doping. In today's lecture, we will take a look at how doping allows fine control of the Fermi level and the practical applications that come with it.

Adding an impurity to semiconductor

In order to understand doping, we need to remember some basic chemistry. Most semiconductors are made up of group IV elements (Si, Ge) or binary compounds between group III-V elements (GaAs). In both cases, there are 4 valence electrons per atom. If we want to increase the average number of electrons per atom, we can add a group V element that has an extra valence electron. However, the extra electron is bound to the impurity because group V elements also have an extra proton. In order to estimate the binding strength, we treat the lattice as a background and only consider the system of an electron bound to a proton. We immediately recognize that this system can be modeled as a Hydrogen atom with energy levels

\[ E_n = - \frac{m_e e^4}{8\pi^2\hbar^3\varepsilon^2_0n^2} = -R_E /n^2= -\frac{13.6\text{eV}}{n^2}. \]

The spatial extent of the bound state is given by the Bohr radius:

\[ r_B = 4 \pi \varepsilon_0 \hbar^2/m_e e^2. \]

However, we have to remember that the above equations are valid for a hydrogen atom in free space. In our case, the extra electron moves in the semiconductor. Therefore, there are a couple of differences from the Hydrogen model. One difference is that the electron's mass is determined by the conduction band's effective mass. Another difference is that the interaction between the electron and the nucleus is screened by the lattice. As a result, we need to introduce the following substitutions: \(m_e \to m_e^*\), \(\epsilon_0 \to \epsilon\epsilon_0\). This turns out to yield the following estimation of the energy of the bound state associated with the impurity:

\[ E = -\frac{m_e^*}{m_e \varepsilon^2} R_E = -0.01 \text{eV (in Ge)}, \]

with Bohr radius \(r_B = 4\) nm (vs \(r_B = 0.5\)Å in hydrogen). The electron is very weakly bound to the impurity! Therefore, at room temperature (0.026 eV), the donor electron is easily thermally excited into the conduction band. We therefore refer to group V elements as donor impurities.

Instead of adding a group V element, we can add a group III element to reduce the average number of electrons in the system. Group III elements have 1 electron and proton less. In this case, we treat the lacking electron as a hole that is weakly bound to the negative charge associated with the lacking proton. As a result, we again have a hydrogen-like atom, except this time the charges are flipped (the hole circles around a negative center charge). That allows us to use the previous results and to conclude that the group III element creates a weakly bound hole state that is easily ionized into the valence band. Because the group III elements easily inject holes into the valence band, and thereby accept an electron from the valence band, they are called acceptors.

We conclude that we can control the number of holes in the valence band by implanting acceptors into the semiconductor. Likewise, we can control the number of electrons in the conduction band by implanting donors. We will now analyze this control in more detail.

Density of states with donors and acceptors

E = np.linspace(-3, 3, 1000)
fig_dos, ax = pyplot.subplots()

n_F = 1/(np.exp(2*(E - E_F)) + 1)
g_e = m_e * sqrt_plus(E - E_C)
g_h = m_h * sqrt_plus(E_V - E)
ax.plot(E, g_h, label="$g_h$")
ax.plot(E, g_e, label="$g_e$")

sigma = 0.01
g_D = np.exp(-(E_D - E)**2 / sigma**2)
g_A = .7 * np.exp(-(E_A - E)**2 / sigma**2)
ax.plot(E, g_D, label='$g_D$')
ax.plot(E, g_A, label='$g_A$')
ax.legend()
ax.set_xticks([E_V, E_C, E_A, E_D])
ax.set_xticklabels(['$E_V$', '$E_C$', '$E_A$', '$E_D$'])
ax.set_yticks([])
ax.set_ylabel('$g$')
ax.set_xlabel('$E$')
draw_classic_axes(ax, xlabeloffset=.2)

svg

In order to model multiple donor states, we assume that they are all degenerate at energy \(E_D\), which is located at a (very small) binding energy's distance from the conduction band edge \(E_c\). Similarly, we call the energy of the acceptor states \(E_A\), which is just above the valence band edge \(E_v\). Because of the degeneracy, the density of states of the donors/acceptors are Dirac delta functions:

\[ g_D(E) = N_D \delta(E- E_D), \quad g_A(E) = N_A \delta(E-E_A), \]

where \(N_D\) and \(N_A\) are the donor and acceptor concentrations, respectively.

How good is this Dirac delta approximation? That depends on the concentrations. If we keep on adding impurities, then at some point the weakly bound states will begin to overlap. The overlap will create an effective tight-binding model that leads to a formation of an "impurity" band which breaks our approximation. We must therefore prevent the overlap of impurity bound states. From the previous section, we know that the extent of the bound state is roughly 4 nm and thus the distance between impurity atoms cannot exceed that. As a result, the impurity concentration is bounded to \(N_D \lesssim (1/4\textrm{nm})^3\).

Number of carriers

We now have the necessary tools to determine how we can control the Fermi level using doping. The algorithm to determine the Fermi level of a semiconductor was outlined in the previous lecture and we continue to use it here. The process is the same up until the third step—charge conservation. The semiconductor now contains dopant atoms that become ionized, and therefore charged. For example, if a donor impurity bound state loses an electron, it becomes positively charged. To solve the problem let us introduce all the necessary concentrations:

Symbol Concentration of
\(n_e\) electrons in the conduction band
\(n_h\) holes in the valence band
\(n_D\) donor-bound electrons
\(n_A\) acceptor-bound holes
\(N_D\) donor atoms
\(N_A\) acceptor atom

The concentrations of the donor-bound electrons and the acceptor-bound holes are given by the Fermi-Dirac distribution:

\[ n_D = N_D \frac{1}{e^{(E_D-E_F)/kT} + 1}, n_A = N_A \frac{1}{e^{-(E_A-E_F)/kT} + 1}. \]

(This follows from \(n_{D}=\int g_D(E) n_F(E)dE\) and corresponding equation for holes). Keeping track of all electrons and holes, we obtain the charge balance equation:

\[n_e - n_h + n_D - n_A = N_D - N_A.\]

The equation is not easy to solve: all of the terms on the left-hand side depend non-trivially on \(E_F\). In order to solve it, we require several approximations:

  • Firstly, we assume that the Fermi level is far from both bands \(E_F−E_v \gg kT\) and \(E_c−E_F \gg kT\). The approximation allows us to use the law of mass action from the previous lecture:

    \[ n_e n_h = N_C N_V e^{-E_G/kT} \equiv n_i^2. \]

    We highlight that this equation is still valid as it is independent of the Fermi energy, and the Fermi energy is the only thing that changes by introducing dopants.

  • Secondly, we determined that electrons/holes are weakly bound to the impurities. Therefore, at ambient temperatures, we assume that all the dopants are fully ionized and therefore \(n_D = n_A = 0\).

These approximations allow us to simplify the charge balance equation:

\[ n_e - n_i^2/n_e = N_D - N_A, \]

which is simply a quadratic equation for \(n_e\) that we can solve. Note that only \(n_e\) depends on the Fermi energy. So, once we know \(n_e\), we can extract the Fermi energy.

When \(|N_D-N_A| \gg n_i\) the semiconductor is extrinsic. In this case, if \(N_D > N_A\) (\(n\)-doped semiconductor), \(n_e \approx N_D -N_A\) and \(n_h = n_i^2/(N_D-N_A)\). I.e., the electron density in the conduction band is set by the dopant concentration (and not by temperature). If, on the other hand, \(N_D < N_A\) (\(p\)-doped semiconductor), the hole concentration is \(n_h \approx N_A -N_D\) and \(n_e = n_i^2/(N_A-N_D)\).

We can now easily find the Fermi level. From the first approximation, we know that the simplified relation between \(n_{e/h}\) and \(E_F\) is:

\[\begin{align*} n_e &\approx N_C e^{-(E_c - E_F)/kT},\\ n_h &\approx N_V e^{(E_v-E_F)/kT}. \end{align*}\]

We substitute the solutions for \(n_e\) and \(n_h\) found above and solve for the Fermi level:

\[E_F = E_c - kT\ln[N_C/(N_D-N_A)], \textrm{ for } N_D > N_A,\]

and

\[E_F = E_v + kT\ln[N_V/(N_A-N_D)], \textrm{ for } N_A > N_D.\]
When is a semiconductor intrinsic, and when it is extrinsic?

By definition the semiconductor is intrinsic when \(|N_D-N_A| \ll n_i\), so \(kT \gtrsim E_G/\log[N_C N_V/(N_D-N_A)^2]\).

Temperature dependence of the carrier density and Fermi level

It is instructive to consider how \(E_F\), \(n_e\) and \(n_h\) depend on temperature. Below we show what happens in an n-doped semiconductor. The same logic applies to p-doped semiconductors.

def n(E_F, T, N_C, N_V, N_D, N_A, E_C, E_V, E_D, E_A, /):
    """Compute total charge density of a doped semiconductor."""
    n_e = N_C * np.exp(-(E_C - E_F) / T)
    n_h = N_V * np.exp((E_V - E_F) / T)
    n_ionized_D = N_D / (1 + np.exp((E_F - E_D) / T))
    n_ionized_A = N_A / (1 + np.exp((E_A - E_F) / T))
    return n_e - n_h - n_ionized_D + n_ionized_A


def equilibrium_E_F(*args):
    """Compute the Fermi energy in equilibrium"""
    E_C, E_V = args[5], args[6]
    return root_scalar(n, args, bracket=(E_C, E_V)).root


N_C, N_V, N_D, N_A, E_C, E_V, E_D, E_A = 1, 4, 0.01, 0.003, 1, -1, 0.8, -0.9
Ts = np.linspace(0.001, .4, 100)
E_Fs = np.array(
    [equilibrium_E_F(T, N_C, N_V, N_D, N_A, E_C, E_V, E_D, E_A) for T in Ts]
)

fig = pyplot.figure(figsize=(10, 10))
ax1, ax2 = fig.subplots(nrows=2)
ax1.plot(Ts, E_Fs, label=r"$N_A \neq 0$")
ax1.plot(
    Ts,
    [equilibrium_E_F(T, N_C, N_V, N_D - N_A, 0, E_C, E_V, E_D, E_A) for T in Ts],
    label="$N_A = 0$",
    linestyle="--",
    c="#1f77b4",
)
ax1.hlines([E_C, (E_C + E_V) / 2, E_D], Ts[0], Ts[-1], 'k', linestyles=":")
ax1.set_ylim(-.1, 1.1)
ax1.set_ylabel("$E_F$")
ax1.set_xlabel("$T$")
ax1.set_yticks([E_C, (E_C + E_V) / 2, E_D])
ax1.set_yticklabels(["$E_C$", "$(E_C + E_V) / 2$", "$E_D$"])
ax1.set_xticks([])
ax1.legend()
draw_classic_axes(ax1, y=-.05, ylabeloffset=0.01)

ax2.plot(Ts, N_V * np.exp((E_V - E_Fs) / Ts), label="$n_h$")
ax2.plot(Ts, N_C * np.exp(-(E_C - E_Fs) / Ts), label="$n_e$")
ax2.hlines((N_D - N_A), Ts[0], Ts[-1], 'k', linestyles=":")
ax2.set_ylim(0, (N_D - N_A) * 3)
ax2.legend()
ax2.set_ylabel("$n$")
ax2.set_xlabel("$T$")
ax2.set_yticks([(N_D - N_A)])
ax2.set_yticklabels(["$N_D - N_A$"])
ax2.set_xticks([])
draw_classic_axes(ax2, ylabeloffset=0.01)

svg

As we go from highest to lowest temperature, we observe several regimes:

  • Intrinsic limit . If the temperature is sufficiently large, then \(n_i \gg |N_D-N_A|\) and therefore \(n_e \approx n_h \approx n_i\). Additionally, if holes are heavier than electrons, then \(E_F\) grows with temperature in this limit.
  • Extrinsic limit. As we decrease the temperature, we decrease the number of intrinsic carriers to the point where most of the electrons in the conduction band (the charge carriers) originate from the fully ionized donors. As a result, the number of carriers stays approximately constant in this temperature range.
  • Freeze-out limit. Once the temperature is sufficiently low \(kT \ll E_C - E_D\), we expect the electrons to "freeze away" from the conduction band to the donor band. The charge carriers still originate from the donors, however, not all donors are ionized now.
  • Zero temperature. There are no charge carriers in neither conduction nor valence bands. If there are no acceptors, then the Fermi level goes to halfway between the donor and the conduction bands. Otherwise, the highest energy electrons are in the donor band and therefore \(E_F\) should match the donor band.

Exercise

check that you can reproduce all the relevant limits in a calculation.

Combining semiconductors: pn-junction

What happens if we bring two differently doped semiconductors together (one of \(p\)-type, one of \(n\)-type)?

Band diagram

Until now we dealt with spatially homogeneous materials. From now on the position coordinate (let's call it \(x\)) starts playing a role. We represent the properties of inhomogeneous materials using the band diagram. The main idea is to plot the dependence of various energies (\(E_F\), bottom of conduction band \(E_C\), top of the valence band \(E_V\)) as a function of position.

Let us build up the band diagram step by step:


def trans(x, a, b):
    x = (x-a)/(b-a)
    return h(x)/(h(x) + h(1-x))


def h(x):
    return (x > 0) * np.exp(-1/x)

left_cutoff = 0.3
right_cutoff = 0.7
x = np.linspace(0, 1, 100)
mid_idx = (x > left_cutoff) * (x < right_cutoff)


Ef_p = 0.5
Ef_n = Ef_p + 0.25
Ef_delta = Ef_n - Ef_p

E_C_1 = 1
E_V_1 = 0.25

E_C = E_C_1 - trans(x, left_cutoff, right_cutoff)*Ef_delta
E_V = E_V_1 - trans(x, left_cutoff, right_cutoff)*Ef_delta

fig1 = go.Figure()

fig1.add_trace(go.Scatter(
        x = [0, left_cutoff],
        y = [E_V_1, E_V_1],
        line_color = 'red',
        mode = 'lines',
        name = r'$E_V$',
    ))

fig1.add_trace(go.Scatter(
        x = [0, left_cutoff],
        y = [E_C_1, E_C_1],
        line_color = 'blue',
        mode = 'lines',
        name = r'$E_C$',
    ))

# n bands (button 1)
fig1.add_trace(go.Scatter(
        x = [right_cutoff, 1],
        y = [E_V_1, E_V_1],
        line_color = 'red',
        mode = 'lines',
        showlegend=False
    ))

fig1.add_trace(go.Scatter(
        x = [right_cutoff, 1],
        y = [E_C_1, E_C_1],
        line_color = 'blue',
        mode = 'lines',
        showlegend=False
    ))

# p fermi
fig1.add_trace(go.Scatter(
        x = [0, left_cutoff],
        y = [Ef_p, Ef_p],
        line_color='black',
        mode = 'lines',
        line_dash='dot',
        name=r'$E_F$'

    ))

# n fermi (button 1)
fig1.add_trace(go.Scatter(
        x = [right_cutoff, 1],
        y = [Ef_n, Ef_n],
        line_color='black',
        mode = 'lines',
        line_dash='dot',
        name='r$E_f$',
        showlegend=False
    ))

fig1.add_trace(go.Scatter(
        x = [right_cutoff, 1],
        y = [E_V_1-Ef_delta, E_V_1-Ef_delta],
        line_color = 'red',
        mode = 'lines',
        showlegend=False,
        visible=False
    ))

fig1.add_trace(go.Scatter(
        x = [right_cutoff, 1],
        y = [E_C_1-Ef_delta, E_C_1-Ef_delta],
        line_color = 'blue',
        mode = 'lines',
        showlegend=False,
        visible=False
    ))


fig1.add_trace(go.Scatter(
        x = [0, 1],
        y = [Ef_p, Ef_p],
        line_color='black',
        mode = 'lines',
        line_dash='dot',
        name='r$E_F$',
        visible=False,

    ))


fig1.add_trace(go.Scatter(
        x = x[mid_idx],
        y = E_C[mid_idx],
        line_color='blue',
        line_dash='dot',
        visible=False,
        showlegend=False

    ))

fig1.add_trace(go.Scatter(
        x = x[mid_idx],
        y = E_V[mid_idx],
        line_color = 'red',
        line_dash='dot',
        visible=False,
        showlegend=False
    ))

base_annot = [
    dict(
    x = 1.065,
    y = -0.1,
    xref = "x", yref = "y",
    axref = "x", ayref = "y",
    text = "",
    ax = 0.9,
    ay = -0.1,
    showarrow=True,
    arrowhead=3,
    arrowsize=30,
    arrowwidth=0.1,
    arrowcolor='black'),

    dict(
    x = -0.05,
    y = 1.12,
    xref = "x", yref = "y",
    axref = "x", ayref = "y",
    text = "",
    ax = -0.05,
    ay = 1.1,
    showarrow=True,
    arrowhead=3,
    arrowsize=30,
    arrowwidth=0.1,
    arrowcolor='black'),

    dict(
    showarrow=False,
    x = 0.15,
    y = -0.05,
    xref = "x", yref = "y",
    axref = "x", ayref = "y",
    text = "p-region"),

    dict(
    showarrow=False,
    x = 0.5,
    y = -0.05,
    xref = "x", yref = "y",
    axref = "x", ayref = "y",
    text = "depletion region"),

    dict(
    showarrow=False,
    x = 0.85,
    y = -0.05,
    xref = "x", yref = "y",
    axref = "x", ayref = "y",
    text = "n-region")
]

annot = [
    dict(
    x = 0.85,
    y = 0.75,
    xref = "x", yref = "y",
    axref = "x", ayref = "y",
    ax = 0.85,
    ay = 0.9,
    showarrow=True,
    arrowhead=3,
    arrowsize=2,
    arrowwidth=1,
    arrowcolor='black'),

    dict(
    x = 0.85,
    y = 1,
    xref = "x", yref = "y",
    axref = "x", ayref = "y",
    ax = 0.85,
    ay = 0.849,
    showarrow=True,
    arrowhead=3,
    arrowsize=2,
    arrowwidth=1,
    arrowcolor='black'),

    dict(
    x = 0.8,
    y = 0.9,
    xref = "x", yref = "y",
    axref = "x", ayref = "y",
    text = r'$\delta \varphi$',
    font = dict(size=40),
    showarrow=False),

    *base_annot
        ]

updatemenus=list([
    dict(
        type="buttons",
        direction="down",
        active=0,
        buttons=list([
            dict(label="n and p",
                 method="update",
                 args=[{"visible": [True, True, True, True, True, True, False, False, False, False, False]}, {'annotations':base_annot}]),
            dict(label="Equilibrium",
                 method="update",
                 args=[{"visible": [True, True, False, False, False, False, True, True, True, False, False]},  {'annotations':annot}]),
            dict(label="Band Bending",
                 method="update",
                 args=[{"visible": [True, True, False, False, False, False, True, True, True, True, True]},  {'annotations':annot}]),
        ]),
    )
]
)

layout = dict(
    dragmode=False,
    showlegend = True,
    updatemenus=updatemenus,
    plot_bgcolor = 'rgb(254, 254, 254)',
    yaxis_range=[(E_V_1-Ef_delta)-0.1, 0.1+E_C_1],
    xaxis_range=[-0.05, 1.05],
    width = 800,
    height = 600,
    xaxis=dict(title=r'$x$', showticklabels=False),
    yaxis=dict(title=r'$E$', showticklabels=False),
    title='Band Diagram'
)


fig1.add_annotation(
    x = 1.065,
    y = -0.1,
    xref = "x", yref = "y",
    axref = "x", ayref = "y",
    text = "",
    ax = 0.9,
    ay = -0.1,
    showarrow=True,
    arrowhead=3,
    arrowsize=30,
    arrowwidth=0.1,
    arrowcolor='black')

fig1.add_annotation(
    x = -0.05,
    y = 1.12,
    xref = "x", yref = "y",
    axref = "x", ayref = "y",
    text = "",
    ax = -0.05,
    ay = 1.1,
    showarrow=True,
    arrowhead=3,
    arrowsize=30,
    arrowwidth=0.1,
    arrowcolor='black')

fig1.add_annotation(
    showarrow=False,
    x = 0.15,
    y = -0.05,
    xref = "x", yref = "y",
    axref = "x", ayref = "y",
    text = "p-region")

fig1.add_annotation(
    showarrow=False,
    x = 0.5,
    y = -0.05,
    xref = "x", yref = "y",
    axref = "x", ayref = "y",
    text = "depletion region")

fig1.add_annotation(
    showarrow=False,
    x = 0.85,
    y = -0.05,
    xref = "x", yref = "y",
    axref = "x", ayref = "y",
    text = "n-region")

fig1.update_xaxes(showline=True, linewidth=2, linecolor='black')
fig1.update_yaxes(showline=True, linewidth=2, linecolor='black')

fig1.update_layout(layout)
fig1

The main difference between \(n\)-type and \(p\)-type semiconductors is the location of the Fermi level \(E_F\) (see "n and p" tab above). The Fermi level of an \(n\)-type semiconductor is close to the donor states. On the other hand, the \(p\)-type semiconductor has its Fermi level near the acceptor states. At equilibrium (i.e., in the absence of an external electric field), we do not expect to see any currents in the system. Therefore, the Fermi level \(E_F\) must be constant across the system (see "Equilibrium" tab). To achieve a constant Fermi level, we bring up in energy the \(p\)-type region or bring down the \(n\)-type region until the Fermi levels are aligned. However, a question arises: what happens at the junction?

We can understand the junction with a simple picture. In physics, most of the time we expect things to change continuously. Therefore, we expect that the valence \(E_V\) and conduction \(E_C\) bands connect continuously in the middle region, as shown in the "Band Bending" tab. On the contrary, if the bands were to be discontinuous, then an electric field must develop at a single point in the middle region to shift the bands in energy. However, we do not expect such point-like electric fields to develop because electrons can move freely in semiconductors.

On a more microscopic level, the electrons at the junction in the \(n\)-type semiconductor will move into the \(p\)-type semiconductor to recombine with the holes. After the recombination, the \(n\) and \(p\)-type semiconductors lose an electron and a hole respectively. As a result, a positive ionized donor dopant is not screened anymore and the \(n\)-type semiconductor obtains a positive overall charge. Similarly, \(p\)-type region obtains a negative charge. Therefore, an electric field develops across the junction. As the recombination process continues, a larger charge density \(\rho\) develops and thus the electric field grows until it is large enough to prevent the electrons/holes from crossing the junction. Inside the region, energy deviates by \(\delta \varphi \gg kT\) from the bulk value and thus the density of electrons/holes drops exponentially fast. Therefore, we refer to the region as the depletion region.

The charge density \(\rho\) distribution inside the depletion region is shown below:

The typical values of \(w_n+w_p\) are \(\sim 1 \mu \textrm{m}\) at \(N_A,\,N_D \sim 10^{16} \textrm{cm}^{-3}\), and \(\sim 0.1 \mu \textrm{m}\) at \(N_A,\,N_D \sim 10^{18} \textrm{cm}^{-3}\), so it may be much larger than the distance between the dopant atoms.

PN-junction diode

What happens if we apply voltage to a junction?

Because the conductivity of the \(p\)-region and \(n\)-region is much larger than that of the depletion region, most of the voltage difference will appear in the depletion region:

The number of majority carriers moving across the junction is proportional to their concentration. Increasing the voltage bias "pushes" carriers up in energy, it depends exponentially on the voltage.

We therefore get the Shockley diode equation:

\[I = I_0 \left(\exp(eV/kT) -1\right)\]

Solar cell

Light absorbed in the \(pn\)-junction creates electron-hole pairs. The eletric field then moves electrons to the \(n\)-doped region, holes to the \(p\)-doped one, and therefore generates a voltage.

Semiconducting laser

A heavily doped \(pn\)-junction so that the Fermi level is in the conduction/valence band produces an extremely high rate electron-hole recombination with an extremely high rate, and makes the \(pn\)-junction function like a laser.

MOSFET and quantum well

See the book for details.

Summary

Density of states in a doped semiconductor:

fig_dos

svg

Charge balance determines the number of electrons and holes as well as the position of the Fermi level.

If dopant concentration is low, then \(n_e = n_h = n_i \equiv \sqrt{N_C N_V}e^{-E_G/2kT}\).

If dopant concentration is high, then in \(n\)-doped semiconductor \(n_e = N_D - N_A\) and \(n_h = n_i^2/n_e\) (or vice versa in \(p\)-doped one).

Temperature switches between intrinsic and extrinsic regimes, and controls the carrier density

Conductance combines the contributions of electrons and holes, and allows to determine \(E_G\).

A \(pn\)-junction has a depletion layer in its middle with the potential in a \(pn\)-junction having the following shape (where the transition region is made out of two parabolas):

Exercises

Exercises with an asterisk (*) are considered to be at the essential/basic level

Warm-up exercises*

  1. Write down the law of mass action. Does the intrinsic carrier concentration depend on the Fermi energy?
  2. Write down the approximate charge balance condition for a doped semiconductor in the intrinsic regime.
  3. Write down the charge balance condition in case there are only donors and no acceptors
  4. Again considering only donors, compute the Fermi energy in the extrinsic regime
  5. Draw the band diagram of the PN diode. Suppose you want to send a current through the diode by a applying a voltage. On which side should you connect the positive-voltage terminal to get a large current?

Exercise 1*: Crossover between extrinsic and intrinsic regimes

In the lecture we have identified the intrinsic and extrinsic regimes. Let us now work out what happens when the semiconductor is at the border between these two regimes, and the dopant concentration \(|N_D - N_A|\) is comparable to the intrinsic one \(n_i\).

  1. Write down the law of mass action and the charge balance condition for a doped semiconductor.
  2. Solve this system of equations for \(n_e\) and \(n_h\) only assuming \(E_G \gg k_B T\).
  3. Verify that your solution reproduces intrinsic regime when \(|N_D - N_A| ≪ n_i\) and the extrinsic regime when \(|N_D - N_A| ≫ n_i\)

Exercise 2: Donor ionization

Let us examine when the full donor ionization is a good assumption. For that we consider a doped semiconductor in the extrinsic regime.

  1. Assume that all dopants are ionized, determine the position of the Fermi level.
  2. Write down the concentration of dopants that are not ionized.
  3. Determine at what donor concentration one cannot assume anymore that all donors are ionized in germanium at room temperature.

Exercise 3: Performance of a diode

Consider a pn-junction diode as follows

pn diode

pn diode by Raffamaiden: Source, CC BY-SA 3.0

The current flowing through a diode as a function of applied bias voltage is given by the Shockley diode equation:

\[ I(V) = I_s(T)\left(e^{\frac{eV}{kT}}-1\right)\]

where \(I_s(T)\) is the saturation current.

  1. What is the significance of adding dopant atoms to an intrinsic semiconductor? Can two intrinsic semiconductors joined together make a diode?
  2. Discuss which processes carry current in a diode under reverse bias.
  3. Based on this, estimate how the saturation current \(I_s\) depends on temperature.

Exercise 4: Quantum well heterojunction in detail

Consider a a quantum well formed from a layer of GaAs of thickness \(L\), surrounded by layers of Al\(_{x}\)Ga\(_{1−x}\)As.

Quantum Well

Quantum well. Source vectorised by the user: Sushant savla from the work by Gianderiu, CC BY-SA 3.0 "Creative Commons Attribution-Share Alike 3.0"

Assume that the band gap of the Al\(_{x}\)Ga\(_{1−x}\)As is substantially larger than that of GaAs. The electron effective mass in GaAs is 0.068 \(m_{e}\), the hole effective mass is 0.45 \(m_{e}\) with \(m_{e}\) the mass of the electron.

  1. Sketch the band diagram of this quantum well.
  2. Write down the Schrödinger's equation for electrons and holes
  3. Find the energies of electron and holes in the quantum well as a function of \(k_x, k_y\).
  4. Sketch the density of states in the quantum well.
  5. If we want to design a quantum well with a bandgap 0.1 eV larger than that of bulk GaAs, what thickness \(L\) do we need?
  6. Suppose you use electron-hole recombination in the quantum well to create a laser. How can you tune the color of this laser?
  7. What would be the advantage of doping the Al\(_{x}\)Ga\(_{1−x}\)As compared to the GaAs in this quantum well?