reaction diffusion front propagation chemical wave CMP

# Reaction-Diffusion Front Propagation and Chemical Mechanical Planarization Interface Kinetics

## 1. Introduction: Non-Linear Dynamics at the CMP Interface

Chemical Mechanical Planarization (CMP) is the dominant process for wafer-scale polishing in sub-3nm node manufacturing. The polish rate depends critically on the coupling between chemical dissolution kinetics and slurry transport at the wafer-pad-slurry triple interface. This interface region (< 100 nm thick) exhibits rich reaction-diffusion dynamics including autocatalytic dissolution, passivation layer formation, and traveling wave fronts.

Unlike simple diffusion (linear), the CMP interface exhibits bistability: regions either polish rapidly (high surface reactivity) or slow (passivated). This nonlinearity creates chemical wavefronts that propagate at velocity-dependent rates.

## 2. Reaction-Diffusion PDEs: The Generic Fisher-KPP Model

The fundamental reaction-diffusion system for concentration $C(\vec{r}, t)$ of a chemical species:

$$\frac{\partial C}{\partial t} = D abla^2 C + f(C)$$

where:
- $D$ is diffusion coefficient
- $f(C)$ is the reaction kinetics (source/sink term)

The Fisher-KPP (Fisher-Kolmogorov-Petrovsky-Piskunov) model assumes logistic kinetics:

$$f(C) = r C (1 - C/K)$$

where $r$ is the reaction rate and $K$ is the carrying capacity (saturation concentration).

### Traveling Wave Solutions

The Fisher-KPP equation admits traveling wave solutions of the form $C(x,t) = C(z)$ where $z = x - ct$ (co-moving coordinate):

$$-c \frac{dC}{dz} = D \frac{d^2C}{dz^2} + r C (1 - C/K)$$

The minimum wave speed (slowest self-sustaining front):

$$c^* = 2\sqrt{r D}$$

This speed is universal—independent of the precise form of $f(C)$ in the small-$C$ limit, depending only on linear growth rate $f'(0) = r$ and diffusivity $D$.

## 3. CMP Chemistry and Preston's Equation

The removal rate during CMP depends on:

$$ ext{Polish Rate} = k imes P imes v$$

where:
- $k$ is the CMP rate coefficient (material and slurry dependent)
- $P$ is applied pressure (Pa)
- $v$ is relative velocity between wafer and pad (m/s)

This Preston's equation is empirical but phenomenologically derived from:
1. Mechanical abrasion: Pressure-dependent contact stress
2. Chemical activation: Temperature and pH-dependent dissolution rate
3. Hydrodynamic drag: Slurry transport and oxidant delivery

The reaction kinetics at a Cu/TaN interface during CMP:

$$\frac{d[ ext{Cu}^{2+}]}{dt} = k_{ ext{chem}} [O_2] [ ext{Cu surface}] - k_{ ext{diff}} abla^2 [ ext{Cu}^{2+}]$$

where the chemical term represents oxidation-dissolution and the diffusion term transports Cu²⁺ away from the interface.

## 4. Passivation Layer Dynamics

After polishing, a passivation layer (typically a hydroxide or oxide) forms on the metal surface:

$$ ext{Cu} + \frac{1}{2}O_2 + H_2O o ext{Cu(OH)}_2 \quad ext{(slow)}$$
$$ ext{Cu(OH)}_2 + 2H^+ o ext{Cu}^{2+} + 2H_2O \quad ext{(fast, at acidic pH)}$$

The passivation thickness $h_p(t)$ evolves as:

$$\frac{dh_p}{dt} = k_{ ext{pass}} C_O - k_{ ext{etch}} C_H$$

where $C_O$ is oxidant concentration (O₂) and $C_H$ is dissolved H⁺ from slurry.

At equilibrium passivation thickness:
$$h_{p,eq} = \frac{k_{ ext{pass}} C_O}{k_{ ext{etch}} C_H}$$

Typical values: $h_{p,eq} \sim 1-5$ nm for Cu, $10-50$ nm for TaN.

## 5. Autocatalytic Dissolution Kinetics

Autocatalytic reactions exhibit bistability: the product accelerates its own formation. For Cu dissolution:

$$ ext{Cu} + O_2 o ext{Cu}^{2+} \quad ext{(slow)}$$
$$ ext{Cu} + 2 ext{Cu}^{2+} + H_2O o 3 ext{Cu}^+ + H^+ \quad ext{(fast, autocatalytic in Cu}^{2+} ext{)}$$

The autocatalytic rate law:

$$r_{ ext{etch}} = \frac{k [ ext{Cu}^{2+}]^2}{1 + K[ ext{Cu}^{2+}]}$$

This creates two stable states:
- State 1: Low [Cu²⁺], slow dissolution ($r \propto [ ext{Cu}^{2+}]^2$)
- State 2: High [Cu²⁺], fast dissolution (saturated at $r_{ ext{max}}$)

## 6. Traveling Wave Front Dynamics in CMP

In a 1D model (perpendicular to wafer surface), the coupled system for oxidant $C_O$ and Cu²⁺ concentration $C_{Cu}$:

$$\frac{\partial C_O}{\partial t} = D_O \frac{\partial^2 C_O}{\partial x^2} - r_{ ext{chem}} C_O C_{Cu}$$

$$\frac{\partial C_{Cu}}{\partial t} = D_{Cu} \frac{\partial^2 C_{Cu}}{\partial x^2} + r_{ ext{chem}} C_O C_{Cu} - k_{ ext{sweep}} C_{Cu}$$

(The third term represents convective removal of Cu²⁺ by slurry flow.)

Frontal solutions where the dissolution/passivation boundary moves at constant speed $v_f$ are obtained when $C_O(x, t) = C_O(x - v_f t)$.

The front speed depends on oxidant supply rate, passivation kinetics, and diffusion lengths:

$$v_f = \sqrt{\frac{r_{ ext{chem}} D_O k_{ ext{sweep}}}{1 + ext{(passivation timescale / diffusion timescale)}}}$$

## 7. Python Implementation: Reaction-Diffusion Front Propagation in CMP

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
from scipy.sparse import diags
from scipy.sparse.linalg import spsolve

def cmp_reaction_diffusion_1d(x, t, C_O_init, C_Cu_init, C_H_init,
                              D_O=1e-9, D_Cu=1e-9, v_flow=1e-3,
                              k_chem=1e-8, k_pass=1e-5, k_etch=2e-5):
    """
    Solve 1D reaction-diffusion system for CMP chemistry.
    
    ∂C_O/∂t = D_O ∂²C_O/∂x² - k_chem C_O C_Cu
    ∂C_Cu/∂t = D_Cu ∂²C_Cu/∂x² + k_chem C_O C_Cu - k_sweep C_Cu - dh_p/dt
    
    Parameters:
    -----------
    x : array (m)
        Spatial grid (0 to 1 μm)
    t : array (s)
        Time output points
    C_O_init, C_Cu_init, C_H_init : array
        Initial concentration profiles
    D_O, D_Cu : float (m²/s)
        Diffusion coefficients
    v_flow : float (m/s)
        Slurry flow velocity
    k_chem : float
        Chemical reaction rate
    k_pass, k_etch : float
        Passivation/etching rates
    
    Returns:
    --------
    C_O_history : array (N_space, N_time)
        Oxidant concentration evolution
    C_Cu_history : array (N_space, N_time)
        Cu²⁺ concentration evolution
    h_p_history : array (N_time)
        Passivation layer thickness
    t_out : array
        Output time array
    """
    
    dx = x[1] - x[0]
    dt_internal = 0.1 * dx**2 / (D_O + D_Cu)
    
    N_space = len(x)
    N_time_out = len(t)
    N_time_steps = int(t[-1] / dt_internal)
    
    C_O = C_O_init.copy()
    C_Cu = C_Cu_init.copy()
    C_H = C_H_init  # Assumed constant (large reservoir)
    
    t_out = np.linspace(0, t[-1], N_time_out)
    C_O_history = np.zeros((N_space, N_time_out))
    C_Cu_history = np.zeros((N_space, N_time_out))
    h_p_history = np.zeros(N_time_out)
    
    h_p = 2e-9  # Initial passivation thickness (2 nm)
    
    C_O_history[:, 0] = C_O
    C_Cu_history[:, 0] = C_Cu
    h_p_history[0] = h_p
    
    # Finite difference Laplacian
    L_laplacian = diags([-2, 1, 1], [0, -1, 1], shape=(N_space, N_space)) / dx**2
    L_laplacian[0, :] = 0
    L_laplacian[-1, :] = 0
    
    output_idx = 1
    
    for step in range(N_time_steps):
        t_curr = step * dt_internal
        
        # Chemical reaction rates
        r_chem = k_chem * C_O * C_Cu  # Autocatalytic in Cu²⁺
        
        # Passivation layer dynamics
        dh_p_dt = k_pass * C_O - k_etch * C_H
        h_p += dh_p_dt * dt_internal
        h_p = np.clip(h_p, 0, 50e-9)  # Bound between 0-50 nm
        
        # Convective sweep term (removes Cu²⁺ via slurry flow)
        k_sweep = v_flow / dx
        
        # RHS for oxidant
        dC_O_dt = D_O * (L_laplacian @ C_O) - r_chem
        
        # RHS for Cu²⁺ (includes reaction source and convective loss)
        dC_Cu_dt = D_Cu * (L_laplacian @ C_Cu) + r_chem - k_sweep * C_Cu
        
        # Time-stepping (forward Euler for simplicity)
        C_O += dt_internal * dC_O_dt
        C_Cu += dt_internal * dC_Cu_dt
        
        # Boundary conditions: constant oxidant supply at x=0
        C_O[0] = 1e-3  # Saturation O₂ concentration (mol/m³)
        # Cu²⁺ diffuses out: no-flux at x=L
        C_Cu[-1] = 0.8 * C_Cu[-2]
        
        # Ensure non-negativity
        C_O = np.maximum(C_O, 0)
        C_Cu = np.maximum(C_Cu, 0)
        
        # Store output
        if abs(t_curr - t_out[output_idx]) < dt_internal or \
           (output_idx < N_time_out - 1 and t_curr > t_out[output_idx]):
            C_O_history[:, output_idx] = C_O
            C_Cu_history[:, output_idx] = C_Cu
            h_p_history[output_idx] = h_p
            output_idx += 1
    
    # Interpolate to exact output times if needed
    for i in range(1, N_time_out):
        if i < output_idx:
            continue
        C_O_history[:, i] = C_O
        C_Cu_history[:, i] = C_Cu
        h_p_history[i] = h_p
    
    return C_O_history, C_Cu_history, h_p_history, t_out

def fisher_kpp_minimal_speed(r, D):
    """
    Compute Fisher-KPP minimal traveling wave speed.
    
    c* = 2√(rD)
    
    Parameters:
    -----------
    r : float
        Growth rate (linear at C→0)
    D : float
        Diffusion coefficient
    
    Returns:
    --------
    c_min : float
        Minimal wave speed
    """
    return 2.0 * np.sqrt(r * D)

def cu_dissolution_kinetics_autocatalytic(C_Cu, C_O, k_autocatalytic=1e4):
    """
    Autocatalytic dissolution: r ∝ [Cu²⁺]² / (1 + K[Cu²⁺])
    
    Parameters:
    -----------
    C_Cu : float
        Cu²⁺ concentration
    C_O : float
        Oxidant (O₂) concentration
    k_autocatalytic : float
        Autocatalytic strength
    
    Returns:
    --------
    r_etch : float
        Etching rate
    """
    
    K_inhib = 1e-2  # Inhibition constant
    r_etch = k_autocatalytic * C_O * (C_Cu**2) / (1.0 + K_inhib * C_Cu + 1e-20)
    
    return r_etch

# Simulation setup
x = np.linspace(0, 1e-6, 300)  # 0-1 μm domain
t = np.logspace(-6, -3, 50)    # 1 μs to 1 ms

# Initial conditions: uniform low oxidant, trace Cu²⁺
C_O_init = 1e-3 * np.ones_like(x)
C_Cu_init = np.linspace(0, 0.5e-3, len(x))  # Gradient: Cu²⁺ higher at substrate
C_H_init = 0.01  # Fixed H⁺ concentration

# Solve
C_O_hist, C_Cu_hist, h_p_hist, t_out = cmp_reaction_diffusion_1d(
    x, t, C_O_init, C_Cu_init, C_H_init,
    D_O=1e-9, D_Cu=1e-9, v_flow=1e-2,
    k_chem=1e-6, k_pass=1e-4, k_etch=2e-4
)

# Plotting
fig, axes = plt.subplots(2, 2, figsize=(13, 10))

# Panel A: Cu²⁺ concentration profiles
time_indices = [0, 10, 25, 49]
colors = plt.cm.viridis(np.linspace(0, 1, len(time_indices)))

for idx, i in enumerate(time_indices):
    axes[0, 0].semilogy(x*1e6, C_Cu_hist[:, i] + 1e-10, color=colors[idx],
                       label=f't={t_out[i]*1e6:.1f} μs', linewidth=2)

axes[0, 0].set_xlabel('Distance (μm)', fontsize=11)
axes[0, 0].set_ylabel('[Cu²⁺] (mol/m³)', fontsize=11)
axes[0, 0].set_title('Cu²⁺ Front Propagation in CMP', fontsize=12, fontweight='bold')
axes[0, 0].legend(fontsize=9)
axes[0, 0].grid(True, alpha=0.3, which='both')

# Panel B: Oxidant concentration
for idx, i in enumerate(time_indices):
    axes[0, 1].plot(x*1e6, C_O_hist[:, i], color=colors[idx],
                   label=f't={t_out[i]*1e6:.1f} μs', linewidth=2)

axes[0, 1].set_xlabel('Distance (μm)', fontsize=11)
axes[0, 1].set_ylabel('[O₂] (mol/m³)', fontsize=11)
axes[0, 1].set_title('Oxidant Concentration Profile', fontsize=12, fontweight='bold')
axes[0, 1].legend(fontsize=9)
axes[0, 1].grid(True, alpha=0.3)

# Panel C: Passivation layer thickness evolution
axes[1, 0].plot(t_out*1e6, h_p_hist*1e9, 'r-o', linewidth=2, markersize=4)
axes[1, 0].set_xlabel('Time (μs)', fontsize=11)
axes[1, 0].set_ylabel('Passivation Layer (nm)', fontsize=11)
axes[1, 0].set_title('Passivation Thickness vs. Time', fontsize=12, fontweight='bold')
axes[1, 0].grid(True, alpha=0.3)

# Panel D: Space-time contour of Cu²⁺
X_plot, T_plot = np.meshgrid(x*1e6, t_out*1e6)
contour = axes[1, 1].contourf(X_plot, T_plot, C_Cu_hist.T, levels=20, cmap='plasma')
axes[1, 1].set_xlabel('Distance (μm)', fontsize=11)
axes[1, 1].set_ylabel('Time (μs)', fontsize=11)
axes[1, 1].set_title('Cu²⁺ Reaction-Diffusion Front (Space-Time)', fontsize=12, fontweight='bold')
plt.colorbar(contour, ax=axes[1, 1], label='[Cu²⁺] (mol/m³)')

plt.tight_layout()
plt.savefig('cmp_reaction_diffusion.png', dpi=150, bbox_inches='tight')
plt.show()

# Fisher-KPP minimal speed estimate
r_est = k_chem * C_O_init[0]  # Linear growth rate at low C_Cu
D_est = D_Cu
c_fisher = fisher_kpp_minimal_speed(r_est, D_est)

print("=== CMP Reaction-Diffusion Simulation Complete ===")
print(f"Estimated Fisher-KPP minimal wave speed: {c_fisher*1e6:.2f} μm/s")
print(f"Final passivation thickness: {h_p_hist[-1]*1e9:.2f} nm")
print(f"Cu²⁺ front penetration depth: {np.where(C_Cu_hist[:, -1] > 0.1e-3)[0][-1]*1e6:.2f} μm")

## 8. Preston's Equation and Pressure Dependence

The Preston constant $k$ (in mm³/min/N in classical units) connects linear Polish Rate to mechanical pressure:

$$\frac{dh}{dt} = k P$$

Microscopic interpretation: mechanical abrasion removes the passivation layer at rate $\propto P$, exposing fresh reactive Cu. Thus:

$$\frac{dh}{dt} = k_{ ext{Preston}} P - k_{ ext{repassivate}} C_O$$

The within-field non-uniformity (WFNU) arises from:
1. Pressure variation: Edge vs. center pressure
2. Temperature gradient: Cooling-limited heat dissipation at pad edges
3. Slurry depletion: Oxidant concentration drops as slurry traverses the wafer

## 9. Pattern Density Effects and Local Oxidant Depletion

In pattern-dependent polishing, dense line regions remove oxidant faster than sparse regions. The local dissolved oxygen concentration:

$$C_O(\vec{r}, t) = C_{O, ext{bulk}} - \frac{\int_{ ext{upwind}} ext{Polish Rate} \, dl}{D_O A_{ ext{slurry}}}$$

This creates velocity-dependent selectivity: dense patterns slow (limited oxidant) while sparse patterns accelerate.

## 10. Electro-Kinetic Enhancement and Electrochemical Potential

Applying a bias potential between wafer and pad electrode modulates the electrochemical potential:

$$E = E_0 + \frac{RT}{nF} \ln a$$

This can:
- Shift the dissolution-passivation equilibrium
- Accelerate dissolution kinetics (anodic polarization)
- Suppress defect generation (lower current at optimal potential)

## 11. Dishing and Erosion During CMP

Over-polishing soft metals creates:
- Dishing: Sunken regions within metal lines (diffusion-limited polishing)
- Erosion: Unequal removal of different materials (selectivity breakdown)

The selectivity between materials $A$ and $B$:

$$S = \frac{ ext{Polish Rate}_A}{ ext{Polish Rate}_B} = \frac{k_A P v + f_A(C_O, T)}{k_B P v + f_B(C_O, T)}$$

High selectivity requires carefully tuned slurry chemistry and mechanical parameters.

## 12. Planar Wafer Level Dishing (PWLD) and Across-Chip Uniformity

The global dishing profile after CMP polishing scales as:

$$h_{ ext{dishing}}(r) \propto \sqrt{\frac{R}{r}}$$

where $R$ is the feature size. Mitigation requires:
- Slurry chemistry optimization
- Variable pad hardness (softer edges for shear thinning)
- Wafer rotation protocols

## 13. Oxide CMP and pH-Dependent Kinetics

For oxide polishing, slurry pH dramatically affects the removal rate. At low pH:

$$ ext{SiO}_2 + H^+ + H_2O o H_3SiO_4 \quad ext{(slow)}$$

At high pH (basic slurry, pH > 11):

$$ ext{SiO}_2 + OH^- o HSiO_3^- \quad ext{(fast)}$$

The reaction kinetics follow:

$$r_{ ext{oxide}} = k_{ ext{base}} C_{OH^-} + k_{ ext{acid}} C_{H^+} + k_0$$

where $k_{ ext{base}} \gg k_{ ext{acid}}$, favoring basic slurries.

## 14. Coupling Between Mechanics and Chemistry

During high-pressure CMP, frictional heating raises the interface temperature:

$$T_{ ext{local}} = T_{ ext{bulk}} + \frac{\mu F v}{A k_{ ext{thermal}}}$$

where $\mu$ is friction coefficient, $F$ is normal force, $v$ is velocity, and $k_{ ext{thermal}}$ is thermal conductivity.

At 1 W/μm² power density and 1 W/(m·K) conductance, temperature can rise by 100-200 K, accelerating all kinetic processes.

## 15. Advanced Topics: Multi-Layer CMP and Metal-Dielectric Integration

Modern dual-damascene CMP sequences must:
1. Polish Cu selectively over SiO₂ (oxide CMP first)
2. Achieve planarity within 10 nm over entire wafer
3. Minimize dishing and erosion in both metal and oxide

This requires adaptive slurry chemistry—different abrasive formulations for Cu vs. oxide phases—and precise pressure/velocity control during the transition.

The future of sub-3nm node integration depends critically on mastering these reaction-diffusion processes at the nanometer scale.

Go deeper with CFSGPT

Get AI-powered deep-dives, save terms, and run advanced simulations — free account.

Create Free Account