Physics::Electrodeposition
A Perl module for modeling electrodeposition (electroplating) of metals onto semiconductor wafers. It couples Faraday's law, a lumped electrochemical cell‑voltage model, mass‑transport limits, and geometry‑based current‑distribution physics to predict:
- Film thickness and deposition rate
- A full mass balance of the chemistry (ion consumption, anode reaction, hydrogen side reaction, acid balance, gas evolution, additive consumption)
- Power input (cell voltage breakdown, power, energy, specific energy)
- Uniformity and smoothness insight from tool geometry, wafer size, chemistry and process conditions (limiting current, Wagner number, seed terminal effect, within‑wafer non‑uniformity, RMS roughness)
- Photoresist patterning from GDSII for through‑mask plating: open‑area fraction, feature CD, feature (in‑opening) vs applied current density, feature height, and the pattern‑density loading effect on thickness uniformity
Defaults describe an acid copper‑sulfate damascene bath, but any metal/bath can be modeled by overriding constructor arguments.
Files
lib/Physics/Electrodeposition.pm OO plating model (+ POD API docs)
lib/Physics/Electrodeposition/GDSII.pm GDSII reader/writer/flattener
lib/Physics/Electrodeposition/Pattern.pm Pattern (open area, density, loading)
examples/copper_300mm.pl Worked example: Cu on a 300 mm wafer
examples/copper_through_mask_gdsii.pl Through‑mask Cu pillars from a GDSII
t/electrodeposition.t Core physics tests
t/gdsii.t GDSII reader/writer/flatten tests
t/pattern.t Pattern + patterned‑model tests
README.md This file
Requirements
Perl 5.10+ with core modules only (POSIX, Test::More, FindBin). No CPAN
dependencies (the GDSII reader/writer is pure Perl).
Install
perl Makefile.PL
make
make test
make install
Quick start
# run the worked 300 mm copper example (prints the full report)
perl -Ilib examples/copper_300mm.pl
# run the through-mask (GDSII pattern) example
perl -Ilib examples/copper_through_mask_gdsii.pl
# run the tests
perl -Ilib t/electrodeposition.t # or: prove -Ilib t/
Usage
use Physics::Electrodeposition;
my $ecd = Physics::Electrodeposition->new(
metal => 'Copper',
wafer_diameter => 300, # mm
current_density => 20, # mA/cm^2 (galvanostatic)
target_thickness => 1.0, # um (module solves for plating time)
efficiency => 0.97, # cathodic current efficiency
anode_type => 'soluble',
);
print $ecd->report; # full formatted report
my $h = $ecd->film_thickness_um; # 1.0 um
my $P = $ecd->power; # cell power, W
my $mb = $ecd->mass_balance; # hashref: species moles/grams
my $nu = $ecd->nonuniformity_percent; # estimated within-wafer non-uniformity
Give current_density plus either time or target_thickness; the
module solves for whichever you omit.
The physics
Internal units are CGS‑ish (cm, A/cm², mol/cm³, s, g); public convenience methods return engineering units (µm, mA/cm², V, W).
Growth — Faraday's law
m = Q · M · CE / (n · F) deposited mass
h = j · t · M · CE / (n · F · ρ) film thickness
r = j · M · CE / (n · F · ρ) deposition rate
where Q = I·t, I = j·A, A = π·(d/2)², n = electrons, F = Faraday
constant, M = molar mass, ρ = density, CE = current efficiency.
Mass balance
- Cathode:
Mⁿ⁺ + n e⁻ → M(removes one metal ion per atom plated) - Soluble anode:
M → Mⁿ⁺ + n e⁻(replenishes the bath — closed loop) - Inert anode:
2 H₂O → O₂ + 4 H⁺ + 4 e⁻(bath depletes, O₂ + acid produced) - Cathode side reaction when
CE < 1:2 H⁺ + 2 e⁻ → H₂ - Additives (accelerator/suppressor/leveler) consumed per amp‑hour of charge
Power — lumped cell‑voltage model
V_cell = E_thermo + |η_act| + |η_conc| + I·R_solution + additive_drop
η_act— Tafel activation overpotential= (RT/αnF)·ln(j/j₀)η_conc— concentration overpotential= (RT/nF)·ln(1 − j/j_lim)I·R_solution— ohmic drop= j·gap/κadditive_drop— extra kinetic suppression from the organic package
Then P = V·I, E = P·t, and specific energy in kWh/kg.
Transport, uniformity & smoothness
- Limiting current density
j_lim = n·F·D·C_b / δ(δ = diffusion boundary layer). Operating well belowj_limgives dense, bright, level films; near it gives rough/powdery growth. - Wagner number
Wa = κ·(∂η/∂j)/L.Wa ≫ 1→ kinetics throw the current out uniformly;Wa ≪ 1→ ohmic/primary distribution dominates and the tool (anode shields, segmented/virtual anode, flow baffles) must shape the field. - Terminal effect (the key large‑wafer problem): current flows radially
through the thin, resistive seed, so the center‑to‑edge voltage drop is
ΔV = j·R_s·R²/4(with seed sheet resistanceR_s = ρ_seed/t_seed). Because it scales withR², it is far worse on 300 mm than 200 mm and drives edge‑fast plating. Severity is the ratio ofΔVto the wafer‑normal voltagej·R_series. - Within‑wafer non‑uniformity (WIWNU) — a bounded, uncompensated estimate of the terminal‑effect‑driven edge/center swing (before tool countermeasures).
- RMS roughness — grows with thickness and
j/j_lim, suppressed by leveling additives.
Worked example — copper on a 300 mm wafer
examples/copper_300mm.pl plates 1.0 µm of Cu at 20 mA/cm² from an acid
Cu‑sulfate bath with a soluble anode. Representative results:
| Quantity | Value | |---|---| | Cell current | 14.1 A | | Plating time | 140 s (2.3 min) | | Deposition rate | 0.43 µm/min | | Final film thickness | 1.00 µm | | Cu deposited | 0.633 g (9.97 mmol) | | Cell voltage | 0.55 V (IR drop is the largest term) | | Power / energy | 7.8 W / 0.30 Wh | | Specific energy | 0.48 kWh/kg Cu | | j / j_lim | 0.51 (below the transport limit → good smoothness) | | Terminal‑effect drop | 356 mV center‑to‑edge (bare 60 nm seed) | | Uncompensated WIWNU | ~31 % → needs mitigation |
The script then prints a sensitivity sweep (current density vs time, power, smoothness) and a process‑design comparison showing how a thicker seed, a high‑resistance (high‑throwing‑power) chemistry, tighter flow, and a gentle cold‑entry current cut the uncompensated WIWNU from ~31 % to ~7 %.
Interpreting the uniformity result
A bare 60 nm seed plated at 20 mA/cm² on 300 mm shows a strong terminal effect — this is real and is exactly why production Cu ECD uses thicker seeds, resistive chemistries, edge thieves, and current ramps. The model reports the uncompensated tendency so you can size those countermeasures.
Photoresist patterning from GDSII (through‑mask plating)
Real plating is often through‑mask: a photoresist covers the field and metal grows only in the openings (Cu pillars, micro‑bumps, RDL, MEMS). Feed the mask geometry straight from a GDSII layout:
my $ecd = Physics::Electrodeposition->new(
gdsii => 'reticle.gds', # layout file
pattern_layer => 10, # photoresist‑opening layer
resist_thickness => 50, # µm (mask height, for aspect ratio)
current_density => 10, # mA/cm² ...
current_density_basis => 'active', # ... referenced to the openings (ASD)
target_thickness => 40, # µm pillar height
);
print $ecd->report; # now includes a PATTERN section
The pure‑Perl GDSII reader parses units, boundaries/boxes and flattens the
SREF/AREF hierarchy (translation, rotation, reflection, magnification, arrays);
Pattern turns the polygons on the chosen layer into the geometry the model
needs. A minimal GDSII writer is included so examples/tests synthesise their
own layouts.
What patterning changes physically
- Open fraction
D= open (plating) area ÷ field area (pattern density). - Two current densities. The tool sets a total current; referenced to the
wafer it is
j_applied, but inside the openings the surface sees the active densityj_active = j_applied / D. Growth, transport (j_lim) and kinetics usej_active; total current, seed terminal effect and bulk IR usej_applied. For the same charge, features grow 1/D× thicker than a blanket film. - Loading (pattern‑density) effect. With a globally fixed current, low‑density
(isolated) openings draw current from a larger catchment and plate thicker
than dense arrays: local thickness ∝ (local density)
^(−loading_exponent). The model maps density across the die and reports the within‑die non‑uniformity and the isolated‑to‑dense height ratio. - Aspect ratio / fill risk. With
resist_thickness, deep openings (AR ≥ 3) near the transport limit are flagged for seam/void risk.
Worked example — through‑mask copper pillars
examples/copper_through_mask_gdsii.pl synthesises a reticle with a dense
(50 µm‑pitch) and a sparse (150 µm‑pitch) 25 µm bump field, then plates 40 µm
pillars at 10 mA/cm² active density. Representative results:
| Quantity | Value | |---|---| | Openings / CD | 2000 / 25 µm | | Pattern density (open fraction) | 0.144 (14.4 % open) | | Applied → active current density | 1.44 → 10.0 mA/cm² | | Charge concentration | 6.96× into the openings | | Feature (pillar) thickness | 40 µm (blanket‑equivalent only 5.7 µm) | | Cell current | 1.0 A (vs ~14 A for a blanket wafer) | | Terminal‑effect drop | 8 mV (thick seed + low applied current) | | Loading within‑die NU | ~56 % (isolated pillars ~4× taller than dense) | | Feature fill risk | LOW (9 % of j_lim, AR 2) |
The dominant non‑uniformity here is the loading effect, not the terminal effect — the model makes that trade‑off explicit and points to levelers, a resistive bath, or dummy‑fill as mitigations.
API summary
| Method | Returns |
|---|---|
| film_thickness_um, deposition_rate_um_min, process_time | growth results |
| mass_deposited, moles_deposited, charge, mass_balance | chemistry mass balance |
| cell_voltage, power, energy, specific_energy_kWh_kg | electrical power |
| limiting_current_density, current_fraction_of_limit | transport limit |
| wagner_number, terminal_effect_drop, terminal_effect_ratio | current distribution |
| nonuniformity_percent, roughness_nm, smoothness_verdict | uniformity/smoothness |
| open_fraction, j_applied, j_active, active_area, blanket_equivalent_thickness_um | patterning |
| loading_nonuniformity, isolated_to_dense_ratio, feature_aspect_ratio, fill_risk_verdict | pattern effects |
| report | full formatted text report |
See the modules' POD (perldoc lib/Physics/Electrodeposition.pm, …/GDSII.pm,
…/Pattern.pm) for the complete list of constructor parameters and defaults.
Caveats
The thickness, mass‑balance and power results are first‑principles. The uniformity, roughness, loading and additive‑consumption figures are calibrated engineering estimates, not a full 3‑D primary/secondary/tertiary current‑ distribution simulation. Pattern density assumes non‑overlapping mask openings (polygon areas are summed, no Boolean union) and bins feature area onto a grid. Use them for scoping, trade‑off studies and sensitivity analysis.