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:

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

Power — lumped cell‑voltage model

V_cell = E_thermo + |η_act| + |η_conc| + I·R_solution + additive_drop

Then P = V·I, E = P·t, and specific energy in kWh/kg.

Transport, uniformity & smoothness

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

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.