One of the [studies we reproduced](/writing/interface-studies-reproduced) for [Questions we need Emily to answer](/writing/questions-for-emily-testing-a-theory-of-the-interface), the companion to [the essay](/writing/testing-a-theory-of-the-interface-with-an-ontology). Generated by `scripts/reproduce_studies.py` from `reproductions/deal_razouk_1980.py`. Every value from the paper was read by an AI agent and has not been checked by a person; the sample and history were re-read from the PDF alone by a second agent that had not seen our earlier transcription.
The study and why we depend on it
B. E. Deal and R. R. Razouk, Fairchild report on the process-variable dependence of oxide charges and trapping (1980), DTIC ADA091299, Section 4, Tables 4-1 and 4-2.
Twenty-four (111) wafers, each oxidation ended four ways: pulled fast in oxygen, pulled slowly in oxygen, or annealed ten minutes in nitrogen or argon and pulled in that gas. It is the cleanest test we hold of the fixed-charge program, because that program was fitted to Stanford's anneals and has never been adjusted to these wafers: 12 of 16 within tolerance, and 2 of 16 with the inert step switched off.
How well can this study be reproduced?
High. Every wafer has its own row: oxidation temperature and time, anneal gas and time, pull gas and time, oxide thickness and charge. The oxide was held near one thickness at three temperatures, which removes a confound the other studies have. A simulation needs one choice of ours, the temperature path of a pull.
| Sample described | 3 of 5 properties we need are stated and encoded the same |
| History described | 4 of 7 steps are stated and encoded the same; 2 are stated by the paper and absent from our history; 0 are ours because the paper is silent |
| Timing | 2 of 3 simulated steps have a stated duration; 4 of 4 other steps have none; 5 timing gaps listed below |
| How the results are given | Printed tables (4-1, 4-2), one row per wafer, with thickness |
| Repeatability stated by the authors | Not stated; each value is an average over three or more capacitors |
| Internal consistency | Good. Four digits in one column of the scan are hard to read; the fast pull is written three ways |
| Is our model independent of this paper's data? | Yes. The fixed-charge program was fitted to Stanford's anneals and has never been adjusted to these wafers; growth uses the 1965 constants |
| Outcome | 19 of 24 numbers within tolerance |
The grade is ours and is about the paper as a source for simulation, not about the quality of the experiment: high means the sample, every step and its timing are stated well enough that a simulation needs no choices of ours; moderate that some choices are ours and are listed; low that the result depends on choices the paper does not constrain.
The sample and its history, played back
The sample is drawn from the simulation: layer heights and the read-outs are what the ISL programs compute at each moment of the history. Steps the language cannot state (a clean, a metallization, a measurement) are on the clock and marked as recorded, not simulated.
“cleaned in hot sulfuric acid, aqua regia, 10:1 DI water: hydrofluoric acid, and 2-propanol vapor”
| oxide thickness | 0 nm | 81 |
| fixed charge | 4.22×10¹¹ cm⁻² | 4.67×10¹¹ |
Does our sample and history match the paper's?
Left: the paper's own words, with the page of the PDF. Right: what we simulate. 7 same, 2 approximated, 3 not in ours.
The timing of the history
Time is counted from the start of the first simulated step. A step the language cannot state takes no simulated time; where the paper gives its duration, the duration is in the last column. Stated means the paper gives the duration; partly stated that it gives a bound or a range; not stated; assumed that the duration in our history is ours.
TR-5: n-type, 1000 °C, fast pull in oxygen
| # | Step | Starts at | Lasts | Ends at | Temperature | Rate | Gas | Is the timing in the paper? |
|---|---|---|---|---|---|---|---|---|
| 1 | Acid clean, HF, propanol vapour | 0 s | not simulated | not stated | ||||
| 2 | Loaded “in the appropriate ambient” | 0 s | not simulated | not stated. Load gas, push rate and ramp are not given | ||||
| 3 | Dry oxidation, 1000 °C, 84 min | 0 s | 1 h 24 min | 1 h 24 min | 1000 → 1000 °C | held | dry_O2 | stated. Ox/Anneal/Cool time column of the tables |
| 4 | Pull, under 3 s, in oxygen | 1 h 24 min | 3 s | 1 h 24 min 03 s | 1000 → 400 °C | -200 °C/s | dry_O2 | partly stated. “<3 sec” in the table, “1-3 sec” in the text, 0 in the time column |
| 5 | Al-Cu-Si by cold flash evaporation | 1 h 24 min 03 s | not simulated | not stated | ||||
| 6 | After metal: 400 °C, 10 min, nitrogen (this half) | 1 h 24 min 03 s | 10 min | 1 h 34 min 03 s | 400 → 400 °C | held | inert_N2 | stated. 10 min |
| 7 | 1 MHz and quasi-static C-V, before any injection | 1 h 34 min 03 s | not simulated | not stated |
Simulated time in this history: 1 h 34 min 03 s.
Across the samples
| Sample | Oxidation | Pull | PostMetalAnneal | InertAnneal | Total |
|---|---|---|---|---|---|
| TR-5: n-type, 1000 °C, fast pull in oxygen | 1 h 24 min at 1000 °C | 3 s at 1000→400 °C | 10 min at 400 °C | – | 1 h 34 min 03 s |
| TR-6: n-type, 1000 °C, slow pull in oxygen | 1 h 24 min at 1000 °C | 10 min at 1000→400 °C | 10 min at 400 °C | – | 1 h 44 min |
| TR-7: n-type, 1000 °C, nitrogen anneal, slow pull in nitrogen | 1 h 24 min at 1000 °C | 2 min at 1000→400 °C | 10 min at 400 °C | 10 min at 1000 °C | 1 h 46 min |
| TR-8: n-type, 1000 °C, argon anneal, slow pull in argon | 1 h 24 min at 1000 °C | 2 min at 1000→400 °C | 10 min at 400 °C | 10 min at 1000 °C | 1 h 46 min |
| TR-1: n-type, 900 °C, fast pull in oxygen | 5 h 00 min at 900 °C | 3 s at 900→400 °C | 10 min at 400 °C | – | 5 h 10 min 03 s |
| TR-2: n-type, 900 °C, slow pull in oxygen | 5 h 00 min at 900 °C | 10 min at 900→400 °C | 10 min at 400 °C | – | 5 h 20 min |
| TR-3: n-type, 900 °C, nitrogen anneal, slow pull in nitrogen | 5 h 00 min at 900 °C | 2 min at 900→400 °C | 10 min at 400 °C | 10 min at 900 °C | 5 h 22 min |
| TR-9: n-type, 1100 °C, fast pull in oxygen | 28 min at 1100 °C | 3 s at 1100→400 °C | 10 min at 400 °C | – | 38 min 03 s |
| TR-10: n-type, 1100 °C, slow pull in oxygen | 28 min at 1100 °C | 10 min at 1100→400 °C | 10 min at 400 °C | – | 48 min |
| TR-11: n-type, 1100 °C, nitrogen anneal, slow pull in nitrogen | 28 min at 1100 °C | 2 min at 1100→400 °C | 10 min at 400 °C | 10 min at 1100 °C | 50 min |
| TR-17: p-type, 1000 °C, fast pull in oxygen | 1 h 24 min at 1000 °C | 3 s at 1000→400 °C | 10 min at 400 °C | – | 1 h 34 min 03 s |
| TR-19: p-type, 1000 °C, nitrogen anneal, slow pull in nitrogen | 1 h 24 min at 1000 °C | 2 min at 1000→400 °C | 10 min at 400 °C | 10 min at 1000 °C | 1 h 46 min |
Timing the paper does not give
- The design is confounded in time: the oxygen slow pull is 10 min, the inert slow pull is 2 min and always follows a 10 min anneal. There is no 2 min pull in oxygen and no inert pull without an anneal.
- The temperature of the in-situ anneal is never stated.
- The fast pull is “<3 sec” in the tables, “1-3 sec” in the text and 0 in the time column.
- What the wafer's temperature does during a pull, and where it cools afterwards.
- Load gas, push rate and any ramp.
What the second reading changed
- The stored recipes begin after the oxidation. Written out in full, each history is the oxidation (300, 84 or 28 min), the anneal if any, the pull, and ten minutes at 400 °C after metallization.
- The argon runs (TR-4, 8, 12, 16, 20, 24) are stored as nitrogen anneals. The paper treats the two gases as one curve, so the numbers are not affected; the record is wrong.
- Every wafer was split and annealed at 400 °C for 10 min after metallization, one half in nitrogen and one in 10% hydrogen. The stored recipe has neither; the dataset holds both values.
- n-type wafers are 2-inch and p-type 3-inch, so a difference between the two types is also a difference between wafer sizes and furnace loads.
Their terms and ours
| The paper says | We write | Kind in our vocabulary | Note | |
|---|---|---|---|---|
| Nf: fixed oxide charge density | Nf | observable (target: fixed_charge) | ||
| Nit: interface trap density | Dit | observable (target: trap_density) | Tabulated beside Nf; not compared on this page. | |
| O2 FP: fast pull (<3 sec) in O2 | RUN Pull DURATION 3 TEMP T->400 AMBIENT dry_O2 | a RUN; process factor final-anneal | ||
| O2 SP: slow pull (10 min) in O2 | RUN Pull DURATION 600 TEMP T->400 AMBIENT dry_O2 | a RUN; process factor slow-pull-in-oxygen | ||
| N2 SP, Ar SP: in situ anneal, slow pull (2 min) in N2 or Ar | `RUN InertAnneal … AMBIENT inert_N2 | inert_Ar, then RUN Pull … in the same gas` | two RUNs; process factor inert-anneal | |
| anneal at 400 °C in nitrogen / in 10% H2 in N2 | `RUN PostMetalAnneal … AMBIENT inert_N2 | forming_gas_H2` | a RUN; the second is the process factor hydrogen-anneal | |
| dry O2 (liquid source) | dry_O2 | ambient | Moisture is not stated. |
The simulation in our language
Each sample is one history file: a SAMPLE and a CONTROL_TRAJECTORY. This is the whole input; run it with PYTHONPATH=. python -m isl_harness.predict <file>.
TR-5: n-type, 1000 °C, fast pull in oxygen
# TR-5: n-type, 1000 °C, fast pull in oxygen
SAMPLE TR_5 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: sulfuric_aqua_regia_HF
DOPING: n_type
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Acid clean, HF, propanol vapour
EVENT Load KIND load TIMING assumed # Loaded “in the appropriate ambient”
RUN Oxidation DURATION 5040 TEMP 1000->1000 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 3 TEMP 1000->400 AMBIENT dry_O2 TIMING bound VARY T_end 200..700 VARY duration 1..3
EVENT Metal KIND metallization TIMING assumed # Al-Cu-Si by cold flash evaporation
RUN PostMetalAnneal DURATION 600 TEMP 400->400 AMBIENT inert_N2 TIMING stated
EVENT CV KIND measurement TIMING assumed # 1 MHz and quasi-static C-V, before any injection
}TR-6: n-type, 1000 °C, slow pull in oxygen
# TR-6: n-type, 1000 °C, slow pull in oxygen
SAMPLE TR_6 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: sulfuric_aqua_regia_HF
DOPING: n_type
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Acid clean, HF, propanol vapour
EVENT Load KIND load TIMING assumed # Loaded “in the appropriate ambient”
RUN Oxidation DURATION 5040 TEMP 1000->1000 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 600 TEMP 1000->400 AMBIENT dry_O2 TIMING stated VARY T_end 200..700
EVENT Metal KIND metallization TIMING assumed # Al-Cu-Si by cold flash evaporation
RUN PostMetalAnneal DURATION 600 TEMP 400->400 AMBIENT inert_N2 TIMING stated
EVENT CV KIND measurement TIMING assumed # 1 MHz and quasi-static C-V, before any injection
}TR-7: n-type, 1000 °C, nitrogen anneal, slow pull in nitrogen
# TR-7: n-type, 1000 °C, nitrogen anneal, slow pull in nitrogen
SAMPLE TR_7 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: sulfuric_aqua_regia_HF
DOPING: n_type
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Acid clean, HF, propanol vapour
EVENT Load KIND load TIMING assumed # Loaded “in the appropriate ambient”
RUN Oxidation DURATION 5040 TEMP 1000->1000 AMBIENT dry_O2 TIMING stated
RUN InertAnneal DURATION 600 TEMP 1000->1000 AMBIENT inert_N2 TIMING stated VARY T_hold 900..1000
RUN Pull DURATION 120 TEMP 1000->400 AMBIENT inert_N2 TIMING stated VARY T_end 200..700
EVENT Metal KIND metallization TIMING assumed # Al-Cu-Si by cold flash evaporation
RUN PostMetalAnneal DURATION 600 TEMP 400->400 AMBIENT inert_N2 TIMING stated
EVENT CV KIND measurement TIMING assumed # 1 MHz and quasi-static C-V, before any injection
}TR-8: n-type, 1000 °C, argon anneal, slow pull in argon
# TR-8: n-type, 1000 °C, argon anneal, slow pull in argon
SAMPLE TR_8 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: sulfuric_aqua_regia_HF
DOPING: n_type
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Acid clean, HF, propanol vapour
EVENT Load KIND load TIMING assumed # Loaded “in the appropriate ambient”
RUN Oxidation DURATION 5040 TEMP 1000->1000 AMBIENT dry_O2 TIMING stated
RUN InertAnneal DURATION 600 TEMP 1000->1000 AMBIENT inert_Ar TIMING stated VARY T_hold 900..1000
RUN Pull DURATION 120 TEMP 1000->400 AMBIENT inert_Ar TIMING stated VARY T_end 200..700
EVENT Metal KIND metallization TIMING assumed # Al-Cu-Si by cold flash evaporation
RUN PostMetalAnneal DURATION 600 TEMP 400->400 AMBIENT inert_N2 TIMING stated
EVENT CV KIND measurement TIMING assumed # 1 MHz and quasi-static C-V, before any injection
}TR-1: n-type, 900 °C, fast pull in oxygen
# TR-1: n-type, 900 °C, fast pull in oxygen
SAMPLE TR_1 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: sulfuric_aqua_regia_HF
DOPING: n_type
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Acid clean, HF, propanol vapour
EVENT Load KIND load TIMING assumed # Loaded “in the appropriate ambient”
RUN Oxidation DURATION 18000 TEMP 900->900 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 3 TEMP 900->400 AMBIENT dry_O2 TIMING bound VARY T_end 200..700 VARY duration 1..3
EVENT Metal KIND metallization TIMING assumed # Al-Cu-Si by cold flash evaporation
RUN PostMetalAnneal DURATION 600 TEMP 400->400 AMBIENT inert_N2 TIMING stated
EVENT CV KIND measurement TIMING assumed # 1 MHz and quasi-static C-V, before any injection
}TR-2: n-type, 900 °C, slow pull in oxygen
# TR-2: n-type, 900 °C, slow pull in oxygen
SAMPLE TR_2 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: sulfuric_aqua_regia_HF
DOPING: n_type
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Acid clean, HF, propanol vapour
EVENT Load KIND load TIMING assumed # Loaded “in the appropriate ambient”
RUN Oxidation DURATION 18000 TEMP 900->900 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 600 TEMP 900->400 AMBIENT dry_O2 TIMING stated VARY T_end 200..700
EVENT Metal KIND metallization TIMING assumed # Al-Cu-Si by cold flash evaporation
RUN PostMetalAnneal DURATION 600 TEMP 400->400 AMBIENT inert_N2 TIMING stated
EVENT CV KIND measurement TIMING assumed # 1 MHz and quasi-static C-V, before any injection
}TR-3: n-type, 900 °C, nitrogen anneal, slow pull in nitrogen
# TR-3: n-type, 900 °C, nitrogen anneal, slow pull in nitrogen
SAMPLE TR_3 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: sulfuric_aqua_regia_HF
DOPING: n_type
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Acid clean, HF, propanol vapour
EVENT Load KIND load TIMING assumed # Loaded “in the appropriate ambient”
RUN Oxidation DURATION 18000 TEMP 900->900 AMBIENT dry_O2 TIMING stated
RUN InertAnneal DURATION 600 TEMP 900->900 AMBIENT inert_N2 TIMING stated VARY T_hold 800..900
RUN Pull DURATION 120 TEMP 900->400 AMBIENT inert_N2 TIMING stated VARY T_end 200..700
EVENT Metal KIND metallization TIMING assumed # Al-Cu-Si by cold flash evaporation
RUN PostMetalAnneal DURATION 600 TEMP 400->400 AMBIENT inert_N2 TIMING stated
EVENT CV KIND measurement TIMING assumed # 1 MHz and quasi-static C-V, before any injection
}TR-9: n-type, 1100 °C, fast pull in oxygen
# TR-9: n-type, 1100 °C, fast pull in oxygen
SAMPLE TR_9 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: sulfuric_aqua_regia_HF
DOPING: n_type
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Acid clean, HF, propanol vapour
EVENT Load KIND load TIMING assumed # Loaded “in the appropriate ambient”
RUN Oxidation DURATION 1680 TEMP 1100->1100 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 3 TEMP 1100->400 AMBIENT dry_O2 TIMING bound VARY T_end 200..700 VARY duration 1..3
EVENT Metal KIND metallization TIMING assumed # Al-Cu-Si by cold flash evaporation
RUN PostMetalAnneal DURATION 600 TEMP 400->400 AMBIENT inert_N2 TIMING stated
EVENT CV KIND measurement TIMING assumed # 1 MHz and quasi-static C-V, before any injection
}TR-10: n-type, 1100 °C, slow pull in oxygen
# TR-10: n-type, 1100 °C, slow pull in oxygen
SAMPLE TR_10 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: sulfuric_aqua_regia_HF
DOPING: n_type
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Acid clean, HF, propanol vapour
EVENT Load KIND load TIMING assumed # Loaded “in the appropriate ambient”
RUN Oxidation DURATION 1680 TEMP 1100->1100 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 600 TEMP 1100->400 AMBIENT dry_O2 TIMING stated VARY T_end 200..700
EVENT Metal KIND metallization TIMING assumed # Al-Cu-Si by cold flash evaporation
RUN PostMetalAnneal DURATION 600 TEMP 400->400 AMBIENT inert_N2 TIMING stated
EVENT CV KIND measurement TIMING assumed # 1 MHz and quasi-static C-V, before any injection
}TR-11: n-type, 1100 °C, nitrogen anneal, slow pull in nitrogen
# TR-11: n-type, 1100 °C, nitrogen anneal, slow pull in nitrogen
SAMPLE TR_11 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: sulfuric_aqua_regia_HF
DOPING: n_type
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Acid clean, HF, propanol vapour
EVENT Load KIND load TIMING assumed # Loaded “in the appropriate ambient”
RUN Oxidation DURATION 1680 TEMP 1100->1100 AMBIENT dry_O2 TIMING stated
RUN InertAnneal DURATION 600 TEMP 1100->1100 AMBIENT inert_N2 TIMING stated VARY T_hold 1000..1100
RUN Pull DURATION 120 TEMP 1100->400 AMBIENT inert_N2 TIMING stated VARY T_end 200..700
EVENT Metal KIND metallization TIMING assumed # Al-Cu-Si by cold flash evaporation
RUN PostMetalAnneal DURATION 600 TEMP 400->400 AMBIENT inert_N2 TIMING stated
EVENT CV KIND measurement TIMING assumed # 1 MHz and quasi-static C-V, before any injection
}TR-17: p-type, 1000 °C, fast pull in oxygen
# TR-17: p-type, 1000 °C, fast pull in oxygen
SAMPLE TR_17 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: sulfuric_aqua_regia_HF
DOPING: p_type
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Acid clean, HF, propanol vapour
EVENT Load KIND load TIMING assumed # Loaded “in the appropriate ambient”
RUN Oxidation DURATION 5040 TEMP 1000->1000 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 3 TEMP 1000->400 AMBIENT dry_O2 TIMING bound VARY T_end 200..700 VARY duration 1..3
EVENT Metal KIND metallization TIMING assumed # Al-Cu-Si by cold flash evaporation
RUN PostMetalAnneal DURATION 600 TEMP 400->400 AMBIENT inert_N2 TIMING stated
EVENT CV KIND measurement TIMING assumed # 1 MHz and quasi-static C-V, before any injection
}TR-19: p-type, 1000 °C, nitrogen anneal, slow pull in nitrogen
# TR-19: p-type, 1000 °C, nitrogen anneal, slow pull in nitrogen
SAMPLE TR_19 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: sulfuric_aqua_regia_HF
DOPING: p_type
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Acid clean, HF, propanol vapour
EVENT Load KIND load TIMING assumed # Loaded “in the appropriate ambient”
RUN Oxidation DURATION 5040 TEMP 1000->1000 AMBIENT dry_O2 TIMING stated
RUN InertAnneal DURATION 600 TEMP 1000->1000 AMBIENT inert_N2 TIMING stated VARY T_hold 900..1000
RUN Pull DURATION 120 TEMP 1000->400 AMBIENT inert_N2 TIMING stated VARY T_end 200..700
EVENT Metal KIND metallization TIMING assumed # Al-Cu-Si by cold flash evaporation
RUN PostMetalAnneal DURATION 600 TEMP 400->400 AMBIENT inert_N2 TIMING stated
EVENT CV KIND measurement TIMING assumed # 1 MHz and quasi-static C-V, before any injection
}The programs the predictor ran on these histories: experiments/deal_qss/two_equilibria.isl.template, experiments/vitkavage_dit/oxide_growth.isl.template, scripts/search_growth.py (structure generated from the grammar), scripts/search_trap_density.py (structure generated from the grammar).
The model itself, experiments/deal_qss/two_equilibria.isl.template, as it is written. Every equation the simulation uses is in this text; the runtime holds no physics.
# ==============================================================================
# ISL MODEL: FIXED CHARGE WITH AN EQUILIBRIUM IN EACH GAS
#
# In oxygen the charge moves toward a steady value that falls with temperature (the
# line of Deal et al. 1967, unchanged, with the oxygen kinetics fitted there).
# In a gas without oxygen it moves toward a lower equilibrium that also falls with
# temperature, Qi_ref * exp(E_q / k_B * (1/T - 1/T_iref)), at a rate of its own.
#
# The inert clock and the (100) inert equilibrium are fitted to the argon time series
# of Akinwande, Ho and Plummer (1982). The (111) inert equilibrium is fitted to their
# cycling experiment, with the clock carried over from (100). The model is then
# tested, unchanged, on the Fairchild wafers of 1967 and 1980.
# Fields in {{braces}} are filled by scripts/run_fixed_charge_two_lines.py.
# ==============================================================================
SAMPLE Wafer_{tag} {{
FAMILY: Si_Planar
ORIENTATION: Si{orientation}
}}
# The wafer starts at the steady value for its oxidation temperature.
STATE Q_f {{ UNIT: cm^-2; INITIAL: Q_hot + slope * (T_hot - T_ox); MIN: 0; MAX: 1.0e14 }}
CONTROL T {{ UNIT: K }}
CONTROL p_O2 {{ UNIT: atm }}
PARAMETER Q_hot {{ VALUE: {Q_hot}; UNIT: cm^-2; STATUS: sourced; SOURCE: Deal et al. 1967 Table II, steady value after dry oxidation at 1200 C }}
PARAMETER slope {{ VALUE: {slope}; UNIT: cm^-2 K^-1; STATUS: sourced; SOURCE: Deal et al. 1967 Table II, line through the 1200 C and 920 C steady values }}
PARAMETER T_hot {{ VALUE: 1473.15; UNIT: K; STATUS: constant }}
PARAMETER T_ox {{ VALUE: {T_ox_K}; UNIT: K; STATUS: constant }}
# ---- fitted to the pull-rate series ------------------------------------------------
PARAMETER k0 {{ VALUE: 1.0e3; UNIT: s^-1; STATUS: fitted }}
PARAMETER E_a {{ VALUE: 1.0; UNIT: eV; STATUS: fitted }}
# ---- fitted to the argon anneals of Akinwande, Ho and Plummer (1982) -----------------
PARAMETER k_i0 {{ VALUE: 1.0e1; UNIT: s^-1; STATUS: fitted }}
PARAMETER E_i {{ VALUE: 0.9; UNIT: eV; STATUS: fitted }}
PARAMETER Qi_ref {{ VALUE: 2.5e10; UNIT: cm^-2; STATUS: fitted }}
PARAMETER E_q {{ VALUE: 0.4; UNIT: eV; STATUS: fitted }}
PARAMETER T_iref {{ VALUE: 1273.15; UNIT: K; STATUS: constant }}
PARAMETER p_ref {{ VALUE: 1.0; UNIT: atm; STATUS: constant }}
PARAMETER k_B {{ VALUE: 8.617333262e-5; UNIT: eV K^-1; STATUS: constant }}
# ---- where the exchange with oxygen stops as the wafer cools (hypothesis, added 10 November 2026) ----------------------
# The oxygen rate above was fitted with an activation energy at its lower bound (0.05 eV), so on its own it keeps moving
# charge at room temperature. Every history it was fitted and tested on ended its pull at 400 C, a cut-off that stood in for
# this. Reproducing Stanford 1982, Deal 1967 and Deal and Razouk 1980 with a wafer cooling to room temperature made the charge
# 3 to 5 times too high. The cut-off is now stated: the exchange is switched off over about 20 K around T_freeze. At 400 C it
# is 99% on, so every fitted and tested history is unchanged; how high the true freezing point is, is an open question
# (the Deal and Razouk alignment prefers pulls ending near 530 C).
PARAMETER T_freeze {{ VALUE: 623.15; UNIT: K; STATUS: hypothesis }}
PARAMETER w_freeze {{ VALUE: 10.0; UNIT: K; STATUS: hypothesis }}
QUANTITY rate {{ UNIT: s^-1; EQUATION: rate = k0 * exp(-E_a / (k_B * T)) / (1 + exp(-(T - T_freeze) / w_freeze)) }}
QUANTITY rate_inert {{ UNIT: s^-1; EQUATION: rate_inert = k_i0 * exp(-E_i / (k_B * T)) }}
QUANTITY Q_inert {{ UNIT: cm^-2; EQUATION: Q_inert = Qi_ref * exp((E_q / k_B) * (1 / T - 1 / T_iref)) }}
QUANTITY oxidizing {{ UNIT: 1; EQUATION: oxidizing = p_O2 / p_ref }}
QUANTITY Q_steady {{ UNIT: cm^-2; EQUATION: Q_steady = Q_hot + slope * (T_hot - T) }}
CONTROL_TRAJECTORY History_{tag} {{
{runs}
}}
# In oxygen the charge follows the temperature-dependent steady value.
OPERATOR F_OxidizingEquilibration : Relaxation {{
EQUATION: d(Q_f)/dt = -rate * oxidizing * (Q_f - Q_steady)
}}
# Without oxygen it relaxes, at its own rate, toward an equilibrium of its own that falls as temperature rises.
# Akinwande, Ho and Plummer (1982) show the annealed charge cycling reversibly with temperature in argon.
OPERATOR F_InertRelaxation : Relaxation {{
EQUATION: d(Q_f)/dt = -rate_inert * (1 - oxidizing) * (Q_f - Q_inert)
}}
OBSERVATION_MODEL Obs_Fixed_Charge {{ TARGET: Qss; UNIT: cm^-2; EQUATION: Qss = Q_f }}
EVALUATION_CONTRACT Contract_{tag} {{
FROZEN: true
DATASET: data/derived/deal_1967_qss.csv
DATASET_DIGEST: sha256:{dataset_sha256}
SPLIT: {split}
TARGET: Qss = {target} +/- {tolerance} abs
}}Our simulation against the paper
19 within, 4 near, 1 off of 24 numbers. Tolerance is stated per row; nothing was fitted for this page.
| Sample and history | Quantity | The paper | Our simulation | Difference | Verdict | What the program's own evaluation says | Where in the paper |
|---|---|---|---|---|---|---|---|
| TR-5: n-type, 1000 °C, fast pull in oxygen | fixed charge (Nf) | 4.67e+11 cm⁻² | 4.22e+11 cm⁻² | -10% | within (±10.7066%) | supported within scope | Table 4-1, N2-annealed half |
| TR-5: n-type, 1000 °C, fast pull in oxygen | oxide thickness | 81 nm | 84.7 nm | +5% | within (±10%) | supported within scope | Table 4-1 |
| TR-6: n-type, 1000 °C, slow pull in oxygen | fixed charge (Nf) | 8.40e+11 cm⁻² | 9.97e+11 cm⁻² | +19% | near (±10%) | supported within scope | Table 4-1, N2-annealed half |
| TR-6: n-type, 1000 °C, slow pull in oxygen | oxide thickness | 87 nm | 85.4 nm | -2% | within (±10%) | supported within scope | Table 4-1 |
| TR-7: n-type, 1000 °C, nitrogen anneal, slow pull in nitrogen | fixed charge (Nf) | 2.13e+11 cm⁻² | 1.67e+11 cm⁻² | -22% | within (±23.4742%) | supported within scope | Table 4-1, N2-annealed half |
| TR-7: n-type, 1000 °C, nitrogen anneal, slow pull in nitrogen | oxide thickness | 84 nm | 84.7 nm | +1% | within (±10%) | supported within scope | Table 4-1 |
| TR-8: n-type, 1000 °C, argon anneal, slow pull in argon | fixed charge (Nf) | 1.84e+11 cm⁻² | 1.67e+11 cm⁻² | -9% | within (±27.1739%) | supported within scope | Table 4-1, N2-annealed half |
| TR-8: n-type, 1000 °C, argon anneal, slow pull in argon | oxide thickness | 84 nm | 84.7 nm | +1% | within (±10%) | supported within scope | Table 4-1 |
| TR-1: n-type, 900 °C, fast pull in oxygen | fixed charge (Nf) | 5.40e+11 cm⁻² | 5.22e+11 cm⁻² | -3% | within (±10%) | supported within scope | Table 4-1, N2-annealed half |
| TR-1: n-type, 900 °C, fast pull in oxygen | oxide thickness | 79 nm | 80.5 nm | +2% | within (±10%) | supported within scope | Table 4-1 |
| TR-2: n-type, 900 °C, slow pull in oxygen | fixed charge (Nf) | 8.90e+11 cm⁻² | 1.00e+12 cm⁻² | +13% | near (±10%) | supported within scope | Table 4-1, N2-annealed half |
| TR-2: n-type, 900 °C, slow pull in oxygen | oxide thickness | 81 nm | 80.7 nm | -0% | within (±10%) | supported within scope | Table 4-1 |
| TR-3: n-type, 900 °C, nitrogen anneal, slow pull in nitrogen | fixed charge (Nf) | 2.96e+11 cm⁻² | 2.80e+11 cm⁻² | -5% | within (±16.8919%) | supported within scope | Table 4-1, N2-annealed half |
| TR-3: n-type, 900 °C, nitrogen anneal, slow pull in nitrogen | oxide thickness | 79 nm | 80.5 nm | +2% | within (±10%) | supported within scope | Table 4-1 |
| TR-9: n-type, 1100 °C, fast pull in oxygen | fixed charge (Nf) | 4.10e+11 cm⁻² | 3.22e+11 cm⁻² | -21% | near (±12.1951%) | supported within scope | Table 4-1, N2-annealed half |
| TR-9: n-type, 1100 °C, fast pull in oxygen | oxide thickness | 79 nm | 84.5 nm | +7% | within (±10%) | supported within scope | Table 4-1 |
| TR-10: n-type, 1100 °C, slow pull in oxygen | fixed charge (Nf) | 7.16e+11 cm⁻² | 9.92e+11 cm⁻² | +39% | off (±10%) | supported within scope | Table 4-1, N2-annealed half |
| TR-10: n-type, 1100 °C, slow pull in oxygen | oxide thickness | 88 nm | 86.6 nm | -2% | within (±10%) | supported within scope | Table 4-1 |
| TR-11: n-type, 1100 °C, nitrogen anneal, slow pull in nitrogen | fixed charge (Nf) | 1.55e+11 cm⁻² | 1.36e+11 cm⁻² | -13% | within (±32.2581%) | supported within scope | Table 4-1, N2-annealed half |
| TR-11: n-type, 1100 °C, nitrogen anneal, slow pull in nitrogen | oxide thickness | 81 nm | 84.5 nm | +4% | within (±10%) | supported within scope | Table 4-1 |
| TR-17: p-type, 1000 °C, fast pull in oxygen | fixed charge (Nf) | 4.35e+11 cm⁻² | 4.22e+11 cm⁻² | -3% | within (±11.4943%) | supported within scope | Table 4-2, N2-annealed half |
| TR-17: p-type, 1000 °C, fast pull in oxygen | oxide thickness | 80 nm | 84.7 nm | +6% | within (±10%) | supported within scope | Table 4-2 |
| TR-19: p-type, 1000 °C, nitrogen anneal, slow pull in nitrogen | fixed charge (Nf) | 2.22e+11 cm⁻² | 1.67e+11 cm⁻² | -25% | near (±22.5225%) | supported within scope | Table 4-2, N2-annealed half |
| TR-19: p-type, 1000 °C, nitrogen anneal, slow pull in nitrogen | oxide thickness | 81 nm | 84.7 nm | +5% | within (±10%) | supported within scope | Table 4-2 |
Aligning the simulation: what the unstated things would have to be
Every step whose timing or temperature the paper leaves open carries a range in the history above (VARY). scripts/align_study.py searched those ranges against the paper's numbers through the same predictor, first one unknown at a time, then all together. No parameter a program declares fitted was touched. The unknowns were chosen on TR-5, TR-6, TR-7, TR-8 only; every other number is a test they played no part in.
| Unknown | What the paper says | Range searched | The reproduction used | Best alone | Score at the reproduction's value | Best score alone |
|---|---|---|---|---|---|---|
| Pull, under 3 s, in oxygen: T end | “<3 sec” in the table, “1-3 sec” in the text, 0 in the time column | 200 to 700 °C | 400 °C | 533.3 °C | 7 of 8 within tolerance, median error 6.9% | 7 of 8 within tolerance, median error 3.7% |
| Pull, under 3 s, in oxygen: duration | “<3 sec” in the table, “1-3 sec” in the text, 0 in the time column | 1 to 3 s | 3 s | 3 s | 7 of 8 within tolerance, median error 6.9% | 7 of 8 within tolerance, median error 6.9% |
| In-situ nitrogen anneal, 10 min: T hold | 10 min; a footnote elsewhere in the report says 15 min for the HCl runs | -100 to 0 °C shift | 0 °C shift | -66.67 °C shift | 7 of 8 within tolerance, median error 6.9% | 7 of 8 within tolerance, median error 3.2% |
Together: Pull T end 533.3 °C (was 400); Pull duration 3 s (was 3); InertAnneal T hold -66.67 °C shift (was 0).
As reproduced: 19 of 24 within tolerance, median error 5.0%. Aligned: 20 of 24 within tolerance, median error 4.4%. On the held-out samples only: 12 of 16 within tolerance, median error 5.0% as reproduced, 13 of 16 within tolerance, median error 4.4% aligned.
The unknowns were chosen on the four n-type wafers oxidized at 1000 °C, one per ending, and tested on the eight other wafers on this page (900 and 1100 °C, and the p-type wafers at 1000 °C). On the four 1000 °C wafers every setting passes 6 or 7 of 8, so the choice rests on the median error, which is weak evidence.
The end of a pull. The stored recipe ends every pull at 400 °C, a value chosen in 1967 against Deal's Table I. Here a pull that ends near 530 °C does better: the 10 minute pull in oxygen at 900 °C falls from 10.0 to 8.7 × 10^11 cm^-2 against 8.9 measured. Read physically, charge stops following the oxygen equilibrium at a higher temperature than our cut-off says during a slow pull. That is a statement about cooling, which a straight line to a fixed end temperature cannot carry; see below.
The temperature of the in-situ anneal. The report never states it. Moving it below the oxidation temperature improves the 1000 °C p-type wafer (1.67 to 2.12 against 2.22) and the 1100 °C wafer, and spoils the 900 °C wafer (2.80 to 4.01 against 2.96). No single shift serves all three, so this is not evidence that the anneal ran cooler. It is evidence that the program's level without oxygen, fitted to Stanford's argon anneals, does not have the temperature dependence these nitrogen anneals show.
The fast pull's duration (1 to 3 s) moves nothing: at these temperatures three seconds is too short for the program to change the charge.
13 within, 2 near, 1 off of 16 numbers with the aligned settings (the samples used to choose the unknowns are left out).
| Sample | Quantity | The paper | As reproduced above | Aligned | Difference | Verdict | How |
|---|---|---|---|---|---|---|---|
| TR-1: n-type, 900 °C, fast pull in oxygen | fixed charge (Nf) | 5.40e+11 cm⁻² | 5.22e+11 | 5.16e+11 | -4% | within (±10%) | test |
| TR-1: n-type, 900 °C, fast pull in oxygen | oxide thickness | 79 nm | 80.5 | 80.5 | +2% | within (±10%) | test |
| TR-2: n-type, 900 °C, slow pull in oxygen | fixed charge (Nf) | 8.90e+11 cm⁻² | 1.00e+12 | 8.68e+11 | -2% | within (±10%) | test |
| TR-2: n-type, 900 °C, slow pull in oxygen | oxide thickness | 81 nm | 80.7 | 80.7 | -0% | within (±10%) | test |
| TR-3: n-type, 900 °C, nitrogen anneal, slow pull in nitrogen | fixed charge (Nf) | 2.96e+11 cm⁻² | 2.80e+11 | 4.01e+11 | +35% | off (±17%) | test |
| TR-3: n-type, 900 °C, nitrogen anneal, slow pull in nitrogen | oxide thickness | 79 nm | 80.5 | 80.5 | +2% | within (±10%) | test |
| TR-9: n-type, 1100 °C, fast pull in oxygen | fixed charge (Nf) | 4.10e+11 cm⁻² | 3.22e+11 | 3.16e+11 | -23% | near (±12%) | test |
| TR-9: n-type, 1100 °C, fast pull in oxygen | oxide thickness | 79 nm | 84.5 | 84.5 | +7% | within (±10%) | test |
| TR-10: n-type, 1100 °C, slow pull in oxygen | fixed charge (Nf) | 7.16e+11 cm⁻² | 9.92e+11 | 8.59e+11 | +20% | near (±10%) | test |
| TR-10: n-type, 1100 °C, slow pull in oxygen | oxide thickness | 88 nm | 86.6 | 87.1 | -1% | within (±10%) | test |
| TR-11: n-type, 1100 °C, nitrogen anneal, slow pull in nitrogen | fixed charge (Nf) | 1.55e+11 cm⁻² | 1.36e+11 | 1.52e+11 | -2% | within (±32%) | test |
| TR-11: n-type, 1100 °C, nitrogen anneal, slow pull in nitrogen | oxide thickness | 81 nm | 84.5 | 84.5 | +4% | within (±10%) | test |
| TR-17: p-type, 1000 °C, fast pull in oxygen | fixed charge (Nf) | 4.35e+11 cm⁻² | 4.22e+11 | 4.16e+11 | -4% | within (±11%) | test |
| TR-17: p-type, 1000 °C, fast pull in oxygen | oxide thickness | 80 nm | 84.7 | 84.7 | +6% | within (±10%) | test |
| TR-19: p-type, 1000 °C, nitrogen anneal, slow pull in nitrogen | fixed charge (Nf) | 2.22e+11 cm⁻² | 1.67e+11 | 2.12e+11 | -5% | within (±23%) | test |
| TR-19: p-type, 1000 °C, nitrogen anneal, slow pull in nitrogen | oxide thickness | 81 nm | 84.7 | 84.7 | +5% | within (±10%) | test |
What alignment cannot fix. The slow pull in oxygen at 1100 °C stays 20% high (8.6 against 7.2) under every setting, and n-type and p-type wafers on one recipe differ by up to 2.5 × 10^11 cm^-2 in the report while the program gives them one value: doping is not an input to any program. The thickness rows pass throughout and were never in question.
What our language and ontology cannot yet say
- Cooling with a freezing point. With PROFILE exponential the language can now cool a wafer realistically, but the charge program then keeps moving charge down to room temperature, because its oxygen rate was fitted with an activation energy of 0.05 eV. A program needs a rate that vanishes as the wafer cools, fitted against pulls written as real cooling curves; then the pull's end temperature stops being a free number.
- Doping as an input. DOPING is recorded on each sample and read by nothing. The report's n-type and p-type wafers differ by more than the tolerance.
- The anneal's gas as a separate level. Nitrogen and argon are one curve in the report and one level in the program; if they differ (the 1100 °C rows hint that they might), the program needs a level per inert gas.
With heating and cooling transitions
No paper we hold states how its wafers heated up or cooled down. The project owner specified scenarios for one Vitkavage wafer (isl_harness/vitkavage_transitions.py); isl_harness/thermal_transitions.py applies the same numbers to every sample here: a heat-up in nitrogen before the first furnace step (a hot push of 1 to 5 min, or a cold-furnace ramp of 60 to 120 min), the owner's radiative cooling knots after the last furnace step or after the paper's own pull (fast, or every time multiplied by 5), and ramps around an anneal at 300 to 500 °C. The paper's own steps are kept as written. All transitions are assumptions, written in the history with TIMING assumed.
| History | Within tolerance | Median error | Changed numbers |
|---|---|---|---|
| as the paper states it (above) | 19 of 24 | 5.5% | |
| heat-up A (hot push), fast cooling | 16 of 24 | 7.0% | 4 of 24 moved by more than 2% |
| heat-up A (hot push), slow cooling | 16 of 24 | 7.0% | 7 of 24 moved by more than 2% |
| heat-up B (cold-furnace ramp), fast cooling | 16 of 24 | 7.0% | 4 of 24 moved by more than 2% |
| heat-up B (cold-furnace ramp), slow cooling | 16 of 24 | 7.0% | 7 of 24 moved by more than 2% |
The paper's own conclusions
| The paper states | What we find | |
|---|---|---|
| A slow pull in oxygen raises fixed charge; an inert anneal lowers it, at every temperature | Both directions reproduced at 900, 1000 and 1100 °C | direction right |
| After an inert anneal the charge falls with anneal temperature (about 3.5, 2.1, 1.6 × 10^11 at 900, 1000, 1100 °C) | The program has its own equilibrium without oxygen, falling with temperature | see the chart |
What we would like Emily to check
- Is it right to read “in situ” as “at the oxidation temperature” for the ten-minute anneal?
- The n-type and p-type wafers on one recipe differ by up to 2.5 × 10^11 cm^-2. Is that doping, wafer size, or run-to-run scatter?
- Should the charge we compare be the nitrogen half or the hydrogen half of each wafer?