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.