From Atoms to DevicesNanoelectronic modeling, lecture by lecture

ECE 606 Lecture 2.2

Applications of elemental and compound semiconductors

In the lecture

  • elemental semiconductors: Si for transistors (a $260 billion industry), Ge as its larger and heavier neighbour
  • SiGe is a random alloy: no long-range order, interfaces that are not atomically flat, and bonds that do not all have the same length
  • strained Si on a SiGe substrate: the top layer is forced to the lattice constant of the layer below, the bonds deform, and band gaps, effective masses and mobilities change
  • III–V compounds (InP, GaAs, InGaAsP) for light-emitting diodes, lasers and detectors: different gaps enable heterostructures and "artificial atoms" with designed wavelengths
  • II–VI Hg₁₋ₓCdₓTe for far-infrared detectors, IV–VI PbS for the first diodes, and the materials as a Lego-like toolbox limited by lattice mismatch and stability

In this notebook

relaxes a random Si₀.₅Ge₀.₅ crystal with the Keating valence force field and shows its three bond lengths, computes the band edges of Si strained on a SiGe substrate with strain-dependent tight binding, designs the emission wavelength of a GaAs/AlGaAs quantum well with the effective-mass Schrödinger equation (checked against the analytic finite-well levels), and maps the HgCdTe gap against composition and temperature as on the lecture's slide.

Run the notebookEvery number and figure on this page comes from it. Change it, rerun it, take it further.
Run it on your own machine

The notebook needs open-nemo (Python ≥ 3.10 and a C++20 compiler; BLAS/LAPACK).

git clone https://github.com/denphi/open-nemo.git && cd open-nemo
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[notebooks]"
jupyter lab From_Atoms_to_Devices/02_materials_and_quantum_mechanics/02_2_applications_of_semiconductors.ipynb
Code10 lines · cell 1
import numpy as np
import matplotlib.pyplot as plt
import opennemo as nemo
from opennemo.visualization import style

style.use(notebook=True)
from opennemo.core.units import HBAR2_2M0
from opennemo.models import mechanics as M
from opennemo.structures.structure import Structure
from scipy.optimize import brentq

1. Elemental semiconductors: Si and Ge#

Silicon carries the transistor industry, which Klimeck puts at about $260 billion a year. Germanium sits one row below it in column IV: one more electron shell, heavier and larger atoms and so a larger lattice constant. The two are completely miscible and form the alloy Si₁₋ₓGeₓ, and the difference in their lattice constants is what the rest of the lecture keeps returning to.

Code7 lines · cell 3
B = nemo.structures.materials.load("boykin2004_sp3d5s")  # sp3d5s* + spin–orbit, with strain tables
a_si, a_ge = B["Si"].lattice_constant, B["Ge"].lattice_constant
d_si = nemo.structures.lattice.from_material(B["Si"]).nearest_neighbor_distance
d_ge = nemo.structures.lattice.from_material(B["Ge"]).nearest_neighbor_distance
print(f"Si: a = {a_si:.4f} nm, bond {d_si:.4f} nm")
print(f"Ge: a = {a_ge:.4f} nm, bond {d_ge:.4f} nm")
print(f"lattice mismatch (a_Ge − a_Si) / a_Si = {100 * (a_ge / a_si - 1):.2f} %")
Si: a = 0.5431 nm, bond 0.2352 nm
Ge: a = 0.5658 nm, bond 0.2450 nm
lattice mismatch (a_Ge − a_Si) / a_Si = 4.18 %

The 4.2 % mismatch looks small, but it is large for a crystal: a layer of Si grown on Ge would have to stretch every bond by that amount.

2. SiGe is a random alloy#

In a SiGe crystal the atoms occupy the same diamond lattice as in Si, but which site holds Si and which holds Ge is random. The lecture's picture shows a few Ge atoms (dark) scattered through the Si matrix. Klimeck lists three consequences: there is no long-range order, the interfaces of SiGe layers are not atomically flat, and the bonds do not all have the same length.

Slide 4: SiGe random alloy below a Si layer
Slide 4: a random SiGe alloy under a Si layer. The Ge atoms (dark) have no long-range order, and the interface is not atomically flat.

The virtual-crystal approximation (VCA) replaces the alloy with an average crystal: one lattice constant interpolated linearly between Si and Ge (Vegard's law) and one bond length \(d = \sqrt{3}\,a/4\). The cell below tests that picture on a random crystal. It fills 4 × 4 × 4 cubic cells (512 atoms) with Si and Ge at random, \(x = 0.5\), and relaxes the atom positions and the cell with the Keating valence-force-field model (bond-stretching and bond-bending springs fitted to the elastic constants of Si and Ge).

Code44 lines · cell 5
K = {el: M.KEATING_PARAMETERS[el][2] for el in ("Si", "Ge")}  # Keating equilibrium lattice constants (nm)
lat = nemo.structures.lattice.from_material(B["Si"])
unit = lat.conventional_basis / lat.conventional[0, 0]  # 8 atoms of the cubic cell, in units of a
N, x = 4, 0.5
cells_ = np.stack(np.meshgrid(*(np.arange(N),) * 3, indexing="ij"), -1).reshape(-1, 3)
a_vca = (1 - x) * K["Si"] + x * K["Ge"]
pos = ((cells_[:, None, :] + unit[None]) * a_vca).reshape(-1, 3)
species = np.array(["Si"] * len(pos), dtype=object)
species[np.random.default_rng(7).choice(len(pos), int(round(x * len(pos))), replace=False)] = "Ge"
r = M.relax(M.Keating(Structure(pos, list(species), np.eye(3) * N * a_vca)), tol=1e-6, cell=True)
box, X = np.diag(r["periods"]), r["positions"]

bonds = {"Si–Si": [], "Si–Ge": [], "Ge–Ge": []}
for i in range(len(X)):
    d = X - X[i]
    d -= box * np.round(d / box)  # minimum image in the periodic cell
    dist = np.linalg.norm(d, axis=1)
    dist[i] = np.inf
    for j in np.argsort(dist)[:4]:
        if j > i:
            pair = "–".join(sorted((species[i], species[j]), key=["Si", "Ge"].index))
            bonds[pair].append(dist[j])
print(f"{len(X)} atoms, converged: {r['converged']}; a = {box.mean() / N:.4f} nm (Vegard {a_vca:.4f} nm)")
print(
    f"bulk bonds: Si {np.sqrt(3) / 4 * K['Si']:.4f} nm, Ge {np.sqrt(3) / 4 * K['Ge']:.4f} nm; "
    f"VCA bond {np.sqrt(3) / 4 * a_vca:.4f} nm"
)
for pair, v in bonds.items():
    print(f"{pair}: {len(v):4d} bonds, mean {np.mean(v):.4f} nm, spread (std) {1e3 * np.std(v):.2f} pm")

fig, ax = plt.subplots(figsize=(7, 3.8))
bins = np.linspace(0.234, 0.246, 61)
for (pair, v), c in zip(bonds.items(), style.sweep(3)):
    ax.hist(v, bins=bins, color=c, alpha=0.8, label=pair)
ax.axvline(np.sqrt(3) / 4 * a_vca, color=style.CONTEXT, ls="--", label="VCA bond")
for el in ("Si", "Ge"):
    ax.axvline(np.sqrt(3) / 4 * K[el], color=style.REFERENCE, ls=":", lw=1)
ax.set(
    xlabel="bond length (nm)",
    ylabel="number of bonds",
    title="relaxed random Si₀.₅Ge₀.₅ (dotted: bulk Si and Ge)",
)
ax.legend(frameon=False, fontsize=8)
fig.tight_layout();
512 atoms, converged: True; a = 0.5541 nm (Vegard 0.5544 nm)
bulk bonds: Si 0.2352 nm, Ge 0.2450 nm; VCA bond 0.2401 nm
Si–Si:  276 bonds, mean 0.2367 nm, spread (std) 0.59 pm
Si–Ge:  472 bonds, mean 0.2400 nm, spread (std) 0.58 pm
Ge–Ge:  276 bonds, mean 0.2431 nm, spread (std) 0.60 pm
Figure computed by the notebook with open-nemo

The relaxed alloy has the Vegard lattice constant to within 0.1 % (0.5541 nm against 0.5544 nm), but its bonds do not take the single VCA length of 0.2401 nm. They split into three families: Si–Si bonds of 0.2367 nm, Si–Ge bonds of 0.2400 nm and Ge–Ge bonds of 0.2431 nm. Each bond keeps most of its own length (bulk: 0.2352 and 0.2450 nm), and the crystal absorbs the difference by bending bonds. This is Klimeck's "not a uniform bond length"; since the electronic coupling between two atoms depends on their distance, the atomistic models of the course work with the actual positions, not with the average crystal.

3. Strained silicon on a SiGe substrate#

When a thin Si layer is grown on a thicker relaxed SiGe substrate, the top layer has a different natural lattice constant and is strained to fit: it is stretched in the plane of the interface and, following its Poisson ratio, compressed perpendicular to it. Strained bonds change the electron sharing and therefore the electronic properties: band gaps, effective masses and mobility. Strained Si channels and SiGe stressors are used in every modern Si transistor for this reason.

Slide 5: strained silicon on a silicon–germanium substrate
Slide 5: a Si layer (top) stretched in-plane to match the larger lattice constant of the SiGe substrate below it.

For a (001) layer the in-plane strain is fixed by the substrate and the out-of-plane strain follows from the elastic constants:

\[\varepsilon_\parallel = \frac{a_\text{SiGe}}{a_\text{Si}} - 1, \qquad \varepsilon_\perp = -\frac{2C_{12}}{C_{11}}\,\varepsilon_\parallel .\]

The cell builds the strained Si cell for substrates with Ge fraction \(x\) up to 0.4, with the bond-length and shear dependence of the sp3d5s* parameters (Boykin et al.), and follows the six conduction-band valleys of Si. Without strain they are equivalent; tensile in-plane strain splits them into two valleys along \(z\) (Δ₂) and four in the plane (Δ₄).

Code39 lines · cell 7
sk = nemo.models.tb.SlaterKoster(B["Si"], spin=True, strain="bond_length_shear")
c11, c12 = 165.7, 63.9  # GPa, Si (experiment)
g = 2 * np.pi / a_si


def strained_si(x):
    """Band edges of Si strained biaxially to the lattice constant of a relaxed Si(1-x)Ge(x) substrate."""
    e_par = (a_si + x * (a_ge - a_si)) / a_si - 1
    f = np.diag([1 + e_par, 1 + e_par, 1 - 2 * c12 / c11 * e_par])
    base = nemo.structures.structure.bulk(lat)
    h = sk.build(Structure(base.positions @ f.T, base.species, base.periods @ f.T, base.sublattice, lat))
    finv = np.linalg.inv(f).T  # reciprocal vectors transform with the inverse transpose
    ts = np.linspace(0.7, 0.95, 26)

    def valley(direction):  # minimum of the lowest conduction band along Gamma -> X
        return min(np.linalg.eigvalsh(h.dense(finv @ (t * g * direction)))[8] for t in ts)

    vbm = np.linalg.eigvalsh(h.dense(np.zeros(3)))[7]
    return e_par, valley(np.array([1.0, 0, 0])) - vbm, valley(np.array([0, 0, 1.0])) - vbm


xs = np.linspace(0, 0.4, 9)
e_par, d4, d2 = np.array([strained_si(x) for x in xs]).T
for x, e, a4, a2 in zip(xs[::2], e_par[::2], d4[::2], d2[::2]):
    print(
        f"x = {x:.1f}: ε_∥ = {100 * e:.2f} %, Δ4 − E_v = {a4:.3f} eV, Δ2 − E_v = {a2:.3f} eV, "
        f"gap {min(a4, a2):.3f} eV, splitting {1e3 * abs(a4 - a2):.0f} meV"
    )

fig, ax = plt.subplots(figsize=(6.5, 3.8))
ax.plot(xs, d4, "o-", color=style.sweep(2)[0], label="Δ₄ valleys (in plane)")
ax.plot(xs, d2, "s-", color=style.sweep(2)[1], label="Δ₂ valleys (along z)")
ax.set(
    xlabel="Ge fraction x of the substrate",
    ylabel="E − E_v (eV)",
    title="conduction valleys of Si strained on Si₁₋ₓGeₓ",
)
ax.legend(frameon=False, fontsize=8)
fig.tight_layout();
x = 0.0: ε_∥ = 0.00 %, Δ4 − E_v = 1.131 eV, Δ2 − E_v = 1.131 eV, gap 1.131 eV, splitting 0 meV
x = 0.1: ε_∥ = 0.42 %, Δ4 − E_v = 1.125 eV, Δ2 − E_v = 1.067 eV, gap 1.067 eV, splitting 58 meV
x = 0.2: ε_∥ = 0.84 %, Δ4 − E_v = 1.114 eV, Δ2 − E_v = 0.999 eV, gap 0.999 eV, splitting 114 meV
x = 0.3: ε_∥ = 1.25 %, Δ4 − E_v = 1.101 eV, Δ2 − E_v = 0.931 eV, gap 0.931 eV, splitting 170 meV
x = 0.4: ε_∥ = 1.67 %, Δ4 − E_v = 1.088 eV, Δ2 − E_v = 0.864 eV, gap 0.864 eV, splitting 224 meV
Figure computed by the notebook with open-nemo

On a Si₀.₇Ge₀.₃ substrate (in-plane strain 1.25 %) the gap of the Si layer shrinks from 1.131 eV to 0.931 eV, and the Δ₂ valleys drop 170 meV below the Δ₄ valleys. Electrons then fill the two Δ₂ valleys, whose light mass lies in the plane of the channel; that, together with the suppressed scattering between the split valleys, is the mobility gain of strained Si. The book notebooks on strain in Further reading follow this through the valence band and the deformation potentials.

4. III–V compounds: direct gaps and artificial atoms#

The III–V compounds InP, GaAs and their alloys such as (InₓGa₁₋ₓ)(AsᵧP₁₋ᵧ) are the materials of light-emitting diodes, lasers and detectors. They are more expensive than Si, but many of them have a direct gap (Lecture 2.1), so an electron at the bottom of the conduction band can drop into the valence band and emit a photon, \(\hbar\omega \approx E_g\), without the help of a phonon. Because different III–V compounds have different gaps, they can be stacked into heterostructures. A thin layer of a small-gap material between layers with a larger gap confines electrons and holes, and the confinement energies add to the gap: Klimeck calls such structures artificial atoms with custom designed wavelengths.

Slide 6: interband optical transition in a quantum well
Slide 6: an electron in the conduction-band well recombines with a hole in the valence-band well and emits a photon ħω.

The cell designs such a structure: a GaAs well of width \(L\) between Al₀.₃Ga₀.₇As barriers, at low temperature. With the parameters of Vurgaftman et al. (2001) the GaAs gap is 1.519 eV, the barrier gap is larger by 0.374 eV, and the offset divides about 65 : 35 between the conduction band (0.243 eV) and the valence band (0.131 eV). The effective masses are 0.067 (well) and 0.092 (barrier) for electrons and 0.35 and 0.37 for heavy holes along [001]. open-nemo solves the effective-mass Schrödinger equation of the well for the lowest electron and hole levels; the photon energy is

\[\hbar\omega = E_g + E_{1e} + E_{1hh}, \qquad \lambda = \frac{hc}{\hbar\omega} = \frac{1239.84\ \text{eV nm}}{\hbar\omega}.\]

The analytic check is the even ground state of a finite well with different masses inside and outside (BenDaniel–Duke matching of \(\psi\) and \(\psi'/m\)):

\[\frac{k}{m_w}\tan\frac{kL}{2} = \frac{\kappa}{m_b}, \qquad k = \sqrt{\frac{m_w E}{\hbar^2/2m_0}}, \quad \kappa = \sqrt{\frac{m_b (V_0 - E)}{\hbar^2/2m_0}} .\]
Code59 lines · cell 9
EM = nemo.structures.materials.EffectiveMassMaterial
EG = 1.519  # GaAs gap at low temperature (eV)
CARRIERS = {
    "electron": (0.067, 0.092, 0.243),
    "heavy hole": (0.35, 0.37, 0.131),
}  # m_well, m_barrier, V0 (eV)


def ground_level(width, m_w, m_b, v0, dx=0.05):
    """Lowest confined level (eV above the well bottom) from open-nemo's effective-mass Hamiltonian."""
    well, barrier = (
        EM("well", m_w, 12.9, conduction_band_edge=0.0),
        EM("barrier", m_b, 12.0, conduction_band_edge=v0),
    )
    dev = nemo.Heterostructure1D(
        [nemo.Layer(barrier, 10.0), nemo.Layer(well, width), nemo.Layer(barrier, 10.0)], spacing=dx
    )
    return np.min(nemo.eigenstates(dev.hamiltonian.sparse, num=2)["energies"])


def finite_well(width, m_w, m_b, v0):
    """Even ground state of the finite well with BenDaniel–Duke boundary conditions."""
    k = lambda e: np.sqrt(m_w * e / HBAR2_2M0)
    q = lambda e: np.sqrt(m_b * (v0 - e) / HBAR2_2M0)
    top = min(v0, HBAR2_2M0 * (np.pi / width) ** 2 / m_w) * (1 - 1e-9)
    return brentq(lambda e: k(e) / m_w * np.tan(k(e) * width / 2) - q(e) / m_b, 1e-9, top)


widths = np.array([2.0, 3.0, 4.0, 5.0, 6.0, 8.0, 10.0, 15.0, 20.0])
lev = {c: np.array([ground_level(w, *p) for w in widths]) for c, p in CARRIERS.items()}
ana = {c: np.array([finite_well(w, *p) for w in widths]) for c, p in CARRIERS.items()}
photon = EG + lev["electron"] + lev["heavy hole"]
print(" L (nm)   E1e (meV)  analytic   E1hh (meV)  analytic   ħω (eV)   λ (nm)")
for i, w in enumerate(widths):
    print(
        f"{w:6.1f}   {1e3 * lev['electron'][i]:8.1f}  {1e3 * ana['electron'][i]:8.1f}   "
        f"{1e3 * lev['heavy hole'][i]:9.1f}  {1e3 * ana['heavy hole'][i]:8.1f}   {photon[i]:7.3f}  "
        f"{1239.84 / photon[i]:6.1f}"
    )
err = max(np.max(abs(lev[c] - ana[c])) for c in CARRIERS)
print(f"largest difference open-nemo − analytic: {1e3 * err:.2f} meV")

fig, ax = plt.subplots(figsize=(6.5, 3.8))
ax.plot(widths, 1239.84 / photon, "o-", color=style.OPEN_NEMO, label="open-nemo levels")
ax.plot(
    widths,
    1239.84 / (EG + ana["electron"] + ana["heavy hole"]),
    "--",
    color=style.REFERENCE,
    label="analytic finite well",
)
ax.axhline(1239.84 / EG, color=style.CONTEXT, ls=":", label="bulk GaAs gap")
ax.set(
    xlabel="well width L (nm)",
    ylabel="emission wavelength λ (nm)",
    title="GaAs / Al₀.₃Ga₀.₇As well: designed wavelength",
)
ax.legend(frameon=False, fontsize=8)
fig.tight_layout();
 L (nm)   E1e (meV)  analytic   E1hh (meV)  analytic   ħω (eV)   λ (nm)
   2.0      163.6     163.6        65.2      65.2     1.748   709.4
   3.0      123.4     123.4        43.2      43.3     1.686   735.5
   4.0       94.9      94.9        30.4      30.4     1.644   754.0
   5.0       74.9      74.9        22.4      22.4     1.616   767.1
   6.0       60.4      60.4        17.2      17.2     1.597   776.6
   8.0       41.6      41.6        11.0      11.0     1.572   788.9
  10.0       30.3      30.3         7.6       7.6     1.557   796.4
  15.0       16.2      16.2         3.8       3.8     1.539   805.6
  20.0       10.1      10.1         2.2       2.2     1.531   809.7
largest difference open-nemo − analytic: 0.02 meV
Figure computed by the notebook with open-nemo

The open-nemo levels agree with the analytic finite well to better than 0.1 meV (largest difference 0.02 meV). A 20 nm well emits at 809.7 nm, close to the bulk GaAs line at 816.2 nm, while narrowing it to 2 nm moves the emission to 709.4 nm: the well width is a design knob for the colour, which is what makes these structures artificial atoms.

5. II–VI and IV–VI compounds#

Further out on the periodic table the bonds become more ionic and the crystals softer. The II–VI alloy Hg₁₋ₓCdₓTe is the material of far-infrared detectors, although it is soft and difficult to grow and process. Its two end members are the semimetal HgTe (a negative gap of −0.30 eV) and CdTe (1.6 eV), so the gap of the alloy can be tuned through zero. The lecture shows the gap as a colour map over composition and temperature.

Slide 7: HgCdTe band gap against composition x and temperature
Slide 7: the band gap of Hg₁₋ₓCdₓTe for x from 0.1 to 0.35 and temperatures up to 300 K (Wikimedia Commons, Hgcdte_bandgap_x_t.png).

Such maps are drawn from the empirical fit of Hansen, Schmit and Casselman (1982):

\[E_g(x, T) = -0.302 + 1.93\,x - 0.81\,x^2 + 0.832\,x^3 + 5.35\times10^{-4}\,T\,(1 - 2x)\ \text{eV},\]

with \(T\) in kelvin. A detector absorbs photons with \(\hbar\omega > E_g\), so its cut-off wavelength is \(\lambda_c = 1.2398\ \mu\text{m eV}/E_g\). The fit is a hand formula, not an open-nemo model; the cell checks its CdTe end against the tight-binding gap of open-nemo's NEMO5 II–VI set (the one II–VI set whose gap is accurate) and then reproduces the slide.

Code32 lines · cell 11
def eg_hgcdte(x, t):
    """Hansen–Schmit–Casselman band gap of Hg(1-x)Cd(x)Te (eV), T in K."""
    return -0.302 + 1.93 * x - 0.81 * x**2 + 0.832 * x**3 + 5.35e-4 * t * (1 - 2 * x)


cdte = nemo.structures.materials.load("nemo5_iivi_sp3d5s")["CdTe"]
lt = nemo.structures.lattice.from_material(cdte)
h = nemo.models.tb.SlaterKoster(cdte, spin=True).build(nemo.structures.structure.bulk(lt))
gap_tb = nemo.band_gap(h, nemo.structures.kpath.auto(lt.periods, 40), num_occupied=8)["gap"]
print(f"CdTe (x = 1, T = 0): fit {eg_hgcdte(1.0, 0):.3f} eV, tight binding {gap_tb:.3f} eV")
print(f"HgTe (x = 0, T = 0): fit {eg_hgcdte(0.0, 0):.3f} eV")
for x in (0.2, 0.3):
    e = eg_hgcdte(x, 77.0)
    print(f"x = {x}: E_g(77 K) = {e:.3f} eV, cut-off wavelength {1.2398 / e:.1f} µm")

xg, tg = np.meshgrid(np.linspace(0.1, 0.35, 101), np.linspace(0, 300, 61))
fig, (a1, a2) = plt.subplots(1, 2, figsize=(11, 4))
pc = a1.pcolormesh(xg, tg, eg_hgcdte(xg, tg), cmap="jet", shading="auto")
fig.colorbar(pc, ax=a1, label="band gap (eV)")
a1.set(xlabel="composition x", ylabel="temperature T (K)", title="Hg₁₋ₓCdₓTe gap (Hansen fit)")
xx = np.linspace(0.17, 0.4, 200)
for t, c in zip((77.0, 300.0), style.sweep(2)):
    a2.plot(xx, 1.2398 / eg_hgcdte(xx, t), color=c, label=f"T = {t:.0f} K")
a2.axhspan(8, 14, color=style.CONTEXT, alpha=0.2, label="8–14 µm atmospheric window")
a2.set(
    xlabel="composition x",
    ylabel="cut-off wavelength λ_c (µm)",
    ylim=(0, 30),
    title="detector cut-off wavelength",
)
a2.legend(frameon=False, fontsize=8)
fig.tight_layout();
CdTe (x = 1, T = 0): fit 1.650 eV, tight binding 1.579 eV
HgTe (x = 0, T = 0): fit -0.302 eV
x = 0.2: E_g(77 K) = 0.083 eV, cut-off wavelength 14.9 µm
x = 0.3: E_g(77 K) = 0.243 eV, cut-off wavelength 5.1 µm
Figure computed by the notebook with open-nemo

The fit gives 1.650 eV at the CdTe end, against 1.579 eV from tight binding (and 1.606 eV measured); it is a fit to the Hg-rich alloys used in detectors, not to CdTe. Its map matches the slide: the gap runs from about −0.1 eV at \(x = 0.1\) to about 0.36 eV at \(x = 0.35\), and it grows with temperature for \(x < 0.5\). At 77 K (liquid nitrogen), \(x = 0.2\) gives a 0.083 eV gap and a cut-off of 14.9 µm, which covers the 8–14 µm window in which the atmosphere is transparent and room-temperature objects radiate most; \(x = 0.3\) gives 0.243 eV and 5.1 µm.

The last family in the lecture is IV–VI, with lead sulfide (PbS, the mineral galena) as its example. It breaks the four-electrons-per-atom rule of the tetrahedral semiconductors: PbS crystallizes in the rock-salt structure with six neighbours per atom. It was the material of the first semiconductor diodes, the cat's-whisker detectors of early radio, and it is very soft.

6. Materials are the toolbox for devices#

Klimeck closes with the periodic table as a Lego-like toolbox. Chemical differences give different band gaps (sections 4 and 5 and Lecture 2.1); physical lattice mismatch gives strain, which can be a design feature (section 3) or a source of instability; and not every combination is possible, because of lattice mismatch or because some compounds are not stable at room temperature. The relaxed alloy of section 2 shows the atomistic side of this: in real alloys and strained layers each bond responds locally, which is why the course builds its models from atoms.

Summary#

  • Si and Ge have lattice constants of 0.5431 and 0.5658 nm, a mismatch of 4.2 %.
  • SiGe is a random alloy. In a relaxed random Si₀.₅Ge₀.₅ crystal the lattice constant follows Vegard's law, but the bonds split into Si–Si (0.2367 nm), Si–Ge (0.2400 nm) and Ge–Ge (0.2431 nm) families instead of one VCA bond.
  • Si strained on Si₀.₇Ge₀.₃ (ε∥ = 1.25 %) has its six Δ valleys split by 170 meV and its gap reduced from 1.131 to 0.931 eV.
  • A GaAs/Al₀.₃Ga₀.₇As quantum well emits between 809.7 nm (20 nm wide) and 709.4 nm (2 nm wide); the open-nemo levels agree with the analytic finite well to better than 0.1 meV.
  • The Hg₁₋ₓCdₓTe gap passes through zero; at 77 K, \(x = 0.2\) gives a 14.9 µm cut-off wavelength.

Exercises#

  1. Repeat the random-alloy relaxation of section 2 for \(x = 0.2\) and \(x = 0.8\). Do the three bond lengths change with composition? Compare with the Ga–As and In–As bonds of the InGaAs alloy in Lecture 23.6.
  2. In section 3, strain Ge instead of Si: a Ge layer on a Si substrate is compressed in the plane by about 4 %. Use B["Ge"] with the same construction and follow the L and Δ valleys. Which valleys move down now, and does the gap stay at L?
  3. Design a GaAs/AlGaAs well that emits at 780 nm. How does the required width change if the barrier is Al₀.₂Ga₀.₈As (offsets scaled by 2/3)?
  4. With the Hansen fit, find the composition that gives a 10 µm cut-off at 77 K, and the change in cut-off wavelength when the detector warms up by 10 K.

Further reading#