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_1967.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, M. Sklar, A. S. Grove and E. H. Snow, “Characteristics of the Surface-State Charge (Qss) of Thermally Oxidized Silicon”, J. Electrochem. Soc. 114, 266 (1967).
The origin of the statement that fixed charge is set by the last hot step. Its Table I (charge against pull time) is what our pull model was fitted on, and its Tables II and III give 16 values in the graph. The fixed-charge program the predictor runs was fitted to another laboratory's anneals and uses this paper's steady-state line as a sourced input.
How well can this study be reproduced?
Moderate. The charge values are printed and the pull times are given to the second, but the paper gives a pull as tube travel time, never as wafer temperature, and gives an oxidation time for one table only. The quantity that carries the result, how the slice cools, is the one thing a simulation must invent.
| Sample described | 1 of 5 properties we need are stated and encoded the same |
| History described | 2 of 8 steps are stated and encoded the same; 4 are stated by the paper and absent from our history; 0 are ours because the paper is silent |
| Timing | 1 of 3 simulated steps have a stated duration; 5 of 5 other steps have none; 6 timing gaps listed below |
| How the results are given | Printed tables (I to III); Figures 3 and 4 not used |
| Repeatability stated by the authors | Yes: “always better than 5 × 10^10 cm-2” |
| Internal consistency | Fair: the standard fast pull is 1.9 in Table I and 1.7 in Tables II to IV; the tube is 50, 54 or 53.3 cm |
| Is our model independent of this paper's data? | Mostly. The program was fitted to another laboratory's anneals and takes this paper's steady-state line as a sourced input; the end temperature of a pull (400 °C) was chosen against Table I |
| Outcome | 9 of 13 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 both organic and inorganic solvents using ultrasonic agitation … chemically polished in a 4HF:10HNO3 solution … Approximately 50µ per side were removed”
| oxide thickness | 0 nm | |
| fixed charge | 2.23×10¹¹ cm⁻² | 1.90×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. 3 same, 4 approximated, 6 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.
(111), 1200 °C, standard fast pull
| # | Step | Starts at | Lasts | Ends at | Temperature | Rate | Gas | Is the timing in the paper? |
|---|---|---|---|---|---|---|---|---|
| 1 | Solvent clean and chemical polish | 0 s | not simulated | not stated | ||||
| 2 | Slices flat on a quartz boat, into the tube | 0 s | not simulated | not stated. Push rate and push gas not given | ||||
| 3 | Dry oxidation at 1200 °C | 0 s | 1 h 00 min | 1 h 00 min | 1200 → 1200 °C | held | dry_O2 | stated. 60 min, from the Table I caption; Tables II and III give no time |
| 4 | Pull from the furnace, 3 s | 1 h 00 min | 3 s | 1 h 00 min 03 s | 1200 → 400 °C | -267 °C/s | dry_O2 | partly stated. “less than 3 sec” is a bound; 3 s used; the end temperature is not given and is searched from 25 to 700 °C |
| 5 | 50–100 Å of oxide removed in dilute HF, back oxide removed | 1 h 00 min 03 s | not simulated | not stated | ||||
| 6 | Aluminium field plates, 375 µm | 1 h 00 min 03 s | not simulated | not stated | ||||
| 7 | Heat treatment after metal, 550 °C in nitrogen | 1 h 00 min 03 s | 3 min 30 s | 1 h 03 min 33 s | 550 → 550 °C | held | inert_N2 | partly stated. “2-5 min”; 3.5 min used, searched from 2 to 5 min |
| 8 | C-V at about 100 kc, 25 °C | 1 h 03 min 33 s | not simulated | not stated |
Simulated time in this history: 1 h 03 min 33 s.
Across the samples
| Sample | Oxidation | Pull | MetalAnneal | OxygenHold | NitrogenAnneal | Oxidation920 | ArgonAnneal | Total |
|---|---|---|---|---|---|---|---|---|
| (111), 1200 °C, standard fast pull | 1 h 00 min at 1200 °C | 3 s at 1200→400 °C | 3 min 30 s at 550 °C | – | – | – | – | 1 h 03 min 33 s |
| (111), 1200 °C, pulled in 10 s | 1 h 00 min at 1200 °C | 10.02 s at 1200→400 °C | 3 min 30 s at 550 °C | – | – | – | – | 1 h 03 min 40 s |
| (111), 1200 °C, pulled in 30 s | 1 h 00 min at 1200 °C | 30 s at 1200→400 °C | 3 min 30 s at 550 °C | – | – | – | – | 1 h 04 min |
| (111), 1200 °C, pulled in 1 min | 1 h 00 min at 1200 °C | 1 min at 1200→400 °C | 3 min 30 s at 550 °C | – | – | – | – | 1 h 04 min 30 s |
| (111), 1200 °C, pulled in 2.8 min | 1 h 00 min at 1200 °C | 2 min 48 s at 1200→400 °C | 3 min 30 s at 550 °C | – | – | – | – | 1 h 06 min 18 s |
| (111), 1200 °C, pulled in 34 min | 1 h 00 min at 1200 °C | 34 min at 1200→400 °C | 3 min 30 s at 550 °C | – | – | – | – | 1 h 37 min 30 s |
| (111), 1200 °C, then oxygen at 900 °C | 1 h 00 min at 1200 °C | 3 s at 900→400 °C | 3 min 30 s at 550 °C | 10 min at 900 °C | – | – | – | 1 h 13 min 33 s |
| (111), 1200 °C, then oxygen at 550 °C | 1 h 00 min at 1200 °C | 3 s at 550→400 °C | 3 min 30 s at 550 °C | 1 h 30 min at 550 °C | – | – | – | 2 h 33 min 33 s |
| (111), 1200 °C, then nitrogen at 1200 °C | 1 h 00 min at 1200 °C | 3 s at 1200→400 °C | 3 min 30 s at 550 °C | – | 10 min at 1200 °C | – | – | 1 h 13 min 33 s |
| (111), 920 °C, then argon at 920 °C | – | 3 s at 920→400 °C | 3 min 30 s at 550 °C | – | – | 1 h 00 min at 920 °C | 30 min at 920 °C | 1 h 33 min 33 s |
| (100), 1200 °C, standard fast pull | 1 h 00 min at 1200 °C | 3 s at 1200→400 °C | 3 min 30 s at 550 °C | – | – | – | – | 1 h 03 min 33 s |
| (100), 1200 °C, then oxygen at 550 °C | 1 h 00 min at 1200 °C | 3 s at 550→400 °C | 3 min 30 s at 550 °C | 1 h 30 min at 550 °C | – | – | – | 2 h 33 min 33 s |
| (100), 920 °C, then argon at 920 °C | – | 3 s at 920→400 °C | 3 min 30 s at 550 °C | – | – | 1 h 00 min at 920 °C | 30 min at 920 °C | 1 h 33 min 33 s |
Timing the paper does not give
- The wafer's temperature against time during a pull. The paper gives the time to travel from the centre of the furnace to the end of the tube; where and in what gas the slice then cools is not said.
- The tube length: 50 cm in the text, 54 cm in the Table I caption, 53.3 cm from the tabulated rate times the time.
- Oxidation time for everything except Table I (60 min). Tables II and III give neither time nor thickness.
- How the temperature was changed between the 1200 °C oxidation and the lower-temperature hold in oxygen: the same tube cooling, or a move to a second furnace. “Immediately” is all the paper says.
- The pull after an anneal (speed and gas).
- The 550 °C nitrogen treatment after metallization is “2-5 min”.
What the second reading changed
- The recipe stored with each of these measurements is one step: the pull, or the anneal. The oxidation that came before it (1200 °C, 60 min, dry oxygen, 0.2 µm) is absent, and so is the pull that must follow an anneal.
- The argon anneal at 920 °C is stored as
inert_N2. The language has hadinert_Arsince the SiC work; the row was never updated. - Metallized samples were heated at 550 °C for 2 to 5 min in dry nitrogen before measurement. No stored recipe has this step. Samples measured with a gold probe did not get it, and the paper does not say which table values are which.
- Table I's fast-pull value is 1.9 × 10^11 cm^-2 and Tables II to IV give 1.7 for the same recipe; the slow pull of 2 min in Table III (7.4) sits beside 7.3 at 1.0 min and 8.9 at 2.8 min in Table I. The paper's own repeatability is about 0.5 × 10^11.
- The end temperature of the pull (400 °C) is not from the paper. It was chosen by us as the best of six candidates against Table I, so the pull rows are fitted in one more number than their record says.
Their terms and ours
| The paper says | We write | Kind in our vocabulary | Note | |
|---|---|---|---|---|
| Qss: surface-state charge | Qss | observable (target: fixed_charge), same as Nf and Qf; quantity fixed-charge | The 1967 name for what was later called fixed oxide charge. | |
| pulling rate, pulling time | RUN Pull DURATION t TEMP T->400 AMBIENT dry_O2 | a RUN; process factor slow-pull-in-oxygen | The paper's variable is tube travel time; ours is a temperature ramp. | |
| dry O2 | dry_O2 | ambient | ||
| wet O2 (oxygen bubbled through 95 °C water) | wet_O2 | ambient | The language gives wet_O2 no partial pressures, so the Table III C rows are not simulated. | |
| annealed in nitrogen or argon | `RUN … AMBIENT inert_N2 | inert_Ar` | a RUN; process factor inert-anneal | The datasets write the argon anneal as inert_N2. |
| steady state value (of Qss at a temperature) | Q_hot + slope × (T_ref − T) | QUANTITY in the program; operator kind Relaxation | The triangle of Figure 5, as a line. | |
| heat treated at 550 °C … in dry nitrogen | RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 | a RUN | No hydrogen: not the factor hydrogen-anneal. | |
| (111), (110), (100) | ORIENTATION: Si111 … | sample field; process factor orientation |
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>.
(111), 1200 °C, standard fast pull
# (111), 1200 °C, standard fast pull
SAMPLE Slice_111_pull_3s {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1p4e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND clean TIMING assumed # Solvent clean and chemical polish
EVENT Load KIND load TIMING assumed # Slices flat on a quartz boat, into the tube
RUN Oxidation DURATION 3600 TEMP 1200->1200 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 3 TEMP 1200->400 AMBIENT dry_O2 TIMING bound VARY T_end 25..700 VARY duration 1..3
EVENT Strip KIND etch TIMING assumed # 50–100 Å of oxide removed in dilute HF, back oxide removed
EVENT Metal KIND metallization TIMING assumed # Aluminium field plates, 375 µm
RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 TIMING range VARY duration 120..300
EVENT CV KIND measurement TIMING assumed # C-V at about 100 kc, 25 °C
}(111), 1200 °C, pulled in 10 s
# (111), 1200 °C, pulled in 10 s
SAMPLE Slice_111_pull_10s {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1p4e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND clean TIMING assumed # Solvent clean and chemical polish
EVENT Load KIND load TIMING assumed # Slices flat on a quartz boat, into the tube
RUN Oxidation DURATION 3600 TEMP 1200->1200 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 10.02 TEMP 1200->400 AMBIENT dry_O2 TIMING stated VARY T_end 25..700
EVENT Strip KIND etch TIMING assumed # 50–100 Å of oxide removed in dilute HF, back oxide removed
EVENT Metal KIND metallization TIMING assumed # Aluminium field plates, 375 µm
RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 TIMING range VARY duration 120..300
EVENT CV KIND measurement TIMING assumed # C-V at about 100 kc, 25 °C
}(111), 1200 °C, pulled in 30 s
# (111), 1200 °C, pulled in 30 s
SAMPLE Slice_111_pull_30s {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1p4e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND clean TIMING assumed # Solvent clean and chemical polish
EVENT Load KIND load TIMING assumed # Slices flat on a quartz boat, into the tube
RUN Oxidation DURATION 3600 TEMP 1200->1200 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 30 TEMP 1200->400 AMBIENT dry_O2 TIMING stated VARY T_end 25..700
EVENT Strip KIND etch TIMING assumed # 50–100 Å of oxide removed in dilute HF, back oxide removed
EVENT Metal KIND metallization TIMING assumed # Aluminium field plates, 375 µm
RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 TIMING range VARY duration 120..300
EVENT CV KIND measurement TIMING assumed # C-V at about 100 kc, 25 °C
}(111), 1200 °C, pulled in 1 min
# (111), 1200 °C, pulled in 1 min
SAMPLE Slice_111_pull_60s {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1p4e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND clean TIMING assumed # Solvent clean and chemical polish
EVENT Load KIND load TIMING assumed # Slices flat on a quartz boat, into the tube
RUN Oxidation DURATION 3600 TEMP 1200->1200 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 60 TEMP 1200->400 AMBIENT dry_O2 TIMING stated VARY T_end 25..700
EVENT Strip KIND etch TIMING assumed # 50–100 Å of oxide removed in dilute HF, back oxide removed
EVENT Metal KIND metallization TIMING assumed # Aluminium field plates, 375 µm
RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 TIMING range VARY duration 120..300
EVENT CV KIND measurement TIMING assumed # C-V at about 100 kc, 25 °C
}(111), 1200 °C, pulled in 2.8 min
# (111), 1200 °C, pulled in 2.8 min
SAMPLE Slice_111_pull_168s {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1p4e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND clean TIMING assumed # Solvent clean and chemical polish
EVENT Load KIND load TIMING assumed # Slices flat on a quartz boat, into the tube
RUN Oxidation DURATION 3600 TEMP 1200->1200 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 168 TEMP 1200->400 AMBIENT dry_O2 TIMING stated VARY T_end 25..700
EVENT Strip KIND etch TIMING assumed # 50–100 Å of oxide removed in dilute HF, back oxide removed
EVENT Metal KIND metallization TIMING assumed # Aluminium field plates, 375 µm
RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 TIMING range VARY duration 120..300
EVENT CV KIND measurement TIMING assumed # C-V at about 100 kc, 25 °C
}(111), 1200 °C, pulled in 34 min
# (111), 1200 °C, pulled in 34 min
SAMPLE Slice_111_pull_2040s {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1p4e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND clean TIMING assumed # Solvent clean and chemical polish
EVENT Load KIND load TIMING assumed # Slices flat on a quartz boat, into the tube
RUN Oxidation DURATION 3600 TEMP 1200->1200 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 2040 TEMP 1200->400 AMBIENT dry_O2 TIMING stated VARY T_end 25..700
EVENT Strip KIND etch TIMING assumed # 50–100 Å of oxide removed in dilute HF, back oxide removed
EVENT Metal KIND metallization TIMING assumed # Aluminium field plates, 375 µm
RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 TIMING range VARY duration 120..300
EVENT CV KIND measurement TIMING assumed # C-V at about 100 kc, 25 °C
}(111), 1200 °C, then oxygen at 900 °C
# (111), 1200 °C, then oxygen at 900 °C
SAMPLE Slice_111_O2_900 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1p4e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND clean TIMING assumed # Solvent clean and chemical polish
EVENT Load KIND load TIMING assumed # Slices flat on a quartz boat, into the tube
RUN Oxidation DURATION 3600 TEMP 1200->1200 AMBIENT dry_O2 TIMING stated
RUN OxygenHold DURATION 600 TEMP 900->900 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 3 TEMP 900->400 AMBIENT dry_O2 TIMING bound VARY T_end 25..700 VARY duration 1..3
EVENT Strip KIND etch TIMING assumed # 50–100 Å of oxide removed in dilute HF, back oxide removed
EVENT Metal KIND metallization TIMING assumed # Aluminium field plates, 375 µm
RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 TIMING range VARY duration 120..300
EVENT CV KIND measurement TIMING assumed # C-V at about 100 kc, 25 °C
}(111), 1200 °C, then oxygen at 550 °C
# (111), 1200 °C, then oxygen at 550 °C
SAMPLE Slice_111_O2_550 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1p4e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND clean TIMING assumed # Solvent clean and chemical polish
EVENT Load KIND load TIMING assumed # Slices flat on a quartz boat, into the tube
RUN Oxidation DURATION 3600 TEMP 1200->1200 AMBIENT dry_O2 TIMING stated
RUN OxygenHold DURATION 5400 TEMP 550->550 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 3 TEMP 550->400 AMBIENT dry_O2 TIMING bound VARY duration 1..3
EVENT Strip KIND etch TIMING assumed # 50–100 Å of oxide removed in dilute HF, back oxide removed
EVENT Metal KIND metallization TIMING assumed # Aluminium field plates, 375 µm
RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 TIMING range VARY duration 120..300
EVENT CV KIND measurement TIMING assumed # C-V at about 100 kc, 25 °C
}(111), 1200 °C, then nitrogen at 1200 °C
# (111), 1200 °C, then nitrogen at 1200 °C
SAMPLE Slice_111_N2_1200 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1p4e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND clean TIMING assumed # Solvent clean and chemical polish
EVENT Load KIND load TIMING assumed # Slices flat on a quartz boat, into the tube
RUN Oxidation DURATION 3600 TEMP 1200->1200 AMBIENT dry_O2 TIMING stated
RUN NitrogenAnneal DURATION 600 TEMP 1200->1200 AMBIENT inert_N2 TIMING stated
RUN Pull DURATION 3 TEMP 1200->400 AMBIENT inert_N2 TIMING bound VARY T_end 25..700 VARY duration 1..3
EVENT Strip KIND etch TIMING assumed # 50–100 Å of oxide removed in dilute HF, back oxide removed
EVENT Metal KIND metallization TIMING assumed # Aluminium field plates, 375 µm
RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 TIMING range VARY duration 120..300
EVENT CV KIND measurement TIMING assumed # C-V at about 100 kc, 25 °C
}(111), 920 °C, then argon at 920 °C
# (111), 920 °C, then argon at 920 °C
SAMPLE Slice_111_Ar_920 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1p4e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND clean TIMING assumed # Solvent clean and chemical polish
EVENT Load KIND load TIMING assumed # Slices flat on a quartz boat, into the tube
RUN Oxidation920 DURATION 3600 TEMP 920->920 AMBIENT dry_O2 TIMING assumed VARY duration 1800..86400
RUN ArgonAnneal DURATION 1800 TEMP 920->920 AMBIENT inert_Ar TIMING stated
RUN Pull DURATION 3 TEMP 920->400 AMBIENT inert_Ar TIMING bound VARY T_end 25..700 VARY duration 1..3
EVENT Strip KIND etch TIMING assumed # 50–100 Å of oxide removed in dilute HF, back oxide removed
EVENT Metal KIND metallization TIMING assumed # Aluminium field plates, 375 µm
RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 TIMING range VARY duration 120..300
EVENT CV KIND measurement TIMING assumed # C-V at about 100 kc, 25 °C
}(100), 1200 °C, standard fast pull
# (100), 1200 °C, standard fast pull
SAMPLE Slice_100_pull_3s {
FAMILY: Si_Planar
ORIENTATION: Si100
CLEAN: not_stated
DOPING: p_type_boron_1p4e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND clean TIMING assumed # Solvent clean and chemical polish
EVENT Load KIND load TIMING assumed # Slices flat on a quartz boat, into the tube
RUN Oxidation DURATION 3600 TEMP 1200->1200 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 3 TEMP 1200->400 AMBIENT dry_O2 TIMING bound VARY T_end 25..700 VARY duration 1..3
EVENT Strip KIND etch TIMING assumed # 50–100 Å of oxide removed in dilute HF, back oxide removed
EVENT Metal KIND metallization TIMING assumed # Aluminium field plates, 375 µm
RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 TIMING range VARY duration 120..300
EVENT CV KIND measurement TIMING assumed # C-V at about 100 kc, 25 °C
}(100), 1200 °C, then oxygen at 550 °C
# (100), 1200 °C, then oxygen at 550 °C
SAMPLE Slice_100_O2_550 {
FAMILY: Si_Planar
ORIENTATION: Si100
CLEAN: not_stated
DOPING: p_type_boron_1p4e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND clean TIMING assumed # Solvent clean and chemical polish
EVENT Load KIND load TIMING assumed # Slices flat on a quartz boat, into the tube
RUN Oxidation DURATION 3600 TEMP 1200->1200 AMBIENT dry_O2 TIMING stated
RUN OxygenHold DURATION 5400 TEMP 550->550 AMBIENT dry_O2 TIMING stated
RUN Pull DURATION 3 TEMP 550->400 AMBIENT dry_O2 TIMING bound VARY duration 1..3
EVENT Strip KIND etch TIMING assumed # 50–100 Å of oxide removed in dilute HF, back oxide removed
EVENT Metal KIND metallization TIMING assumed # Aluminium field plates, 375 µm
RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 TIMING range VARY duration 120..300
EVENT CV KIND measurement TIMING assumed # C-V at about 100 kc, 25 °C
}(100), 920 °C, then argon at 920 °C
# (100), 920 °C, then argon at 920 °C
SAMPLE Slice_100_Ar_920 {
FAMILY: Si_Planar
ORIENTATION: Si100
CLEAN: not_stated
DOPING: p_type_boron_1p4e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND clean TIMING assumed # Solvent clean and chemical polish
EVENT Load KIND load TIMING assumed # Slices flat on a quartz boat, into the tube
RUN Oxidation920 DURATION 3600 TEMP 920->920 AMBIENT dry_O2 TIMING assumed VARY duration 1800..86400
RUN ArgonAnneal DURATION 1800 TEMP 920->920 AMBIENT inert_Ar TIMING stated
RUN Pull DURATION 3 TEMP 920->400 AMBIENT inert_Ar TIMING bound VARY T_end 25..700 VARY duration 1..3
EVENT Strip KIND etch TIMING assumed # 50–100 Å of oxide removed in dilute HF, back oxide removed
EVENT Metal KIND metallization TIMING assumed # Aluminium field plates, 375 µm
RUN MetalAnneal DURATION 210 TEMP 550->550 AMBIENT inert_N2 TIMING range VARY duration 120..300
EVENT CV KIND measurement TIMING assumed # C-V at about 100 kc, 25 °C
}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
9 within, 4 near of 13 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 |
|---|---|---|---|---|---|---|---|
| (111), 1200 °C, standard fast pull | fixed charge (Qss/q) | 1.90e+11 cm⁻² | 2.23e+11 cm⁻² | +17% | within (±26.3158%) | supported within scope | Table I (Tables II–IV give 1.7) |
| (111), 1200 °C, pulled in 10 s | fixed charge (Qss/q) | 2.80e+11 cm⁻² | 3.30e+11 cm⁻² | +18% | near (±17.8571%) | supported within scope | Table I |
| (111), 1200 °C, pulled in 30 s | fixed charge (Qss/q) | 5.60e+11 cm⁻² | 5.41e+11 cm⁻² | -3% | within (±10%) | supported within scope | Table I |
| (111), 1200 °C, pulled in 1 min | fixed charge (Qss/q) | 7.30e+11 cm⁻² | 7.09e+11 cm⁻² | -3% | within (±10%) | supported within scope | Table I |
| (111), 1200 °C, pulled in 2.8 min | fixed charge (Qss/q) | 8.90e+11 cm⁻² | 8.95e+11 cm⁻² | +1% | within (±10%) | supported within scope | Table I |
| (111), 1200 °C, pulled in 34 min | fixed charge (Qss/q) | 9.80e+11 cm⁻² | 1.02e+12 cm⁻² | +4% | within (±10%) | supported within scope | Table I |
| (111), 1200 °C, then oxygen at 900 °C | fixed charge (Qss/q) | 4.60e+11 cm⁻² | 5.23e+11 cm⁻² | +14% | near (±10.8696%) | supported within scope | Table III A |
| (111), 1200 °C, then oxygen at 550 °C | fixed charge (Qss/q) | 1.00e+12 cm⁻² | 8.75e+11 cm⁻² | -13% | near (±10%) | supported within scope | Table III A |
| (111), 1200 °C, then nitrogen at 1200 °C | fixed charge (Qss/q) | 1.80e+11 cm⁻² | 9.74e+10 cm⁻² | -46% | near (±27.7778%) | supported within scope | Table III B |
| (111), 920 °C, then argon at 920 °C | fixed charge (Qss/q) | 1.90e+11 cm⁻² | 2.08e+11 cm⁻² | +9% | within (±26.3158%) | supported within scope | Table III B |
| (100), 1200 °C, standard fast pull | fixed charge (Qss/q) | 2.00e+10 cm⁻² | 4.65e+10 cm⁻² | +132% | within (±250%) | supported within scope | Table II |
| (100), 1200 °C, then oxygen at 550 °C | fixed charge (Qss/q) | 4.20e+11 cm⁻² | 3.72e+11 cm⁻² | -11% | within (±11.9048%) | supported within scope | Table III A |
| (100), 920 °C, then argon at 920 °C | fixed charge (Qss/q) | 7.00e+10 cm⁻² | 3.59e+10 cm⁻² | -49% | within (±71.4286%) | supported within scope | Table III B |
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 111_pull_10s, 111_pull_168s, 111_pull_2040s, 111_pull_30s, 111_pull_3s, 111_pull_60s 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 from the furnace, 3 s: T end | “less than 3 sec” is a bound; 3 s used; the end temperature is not given and is searched from 25 to 700 °C | 25 to 700 °C | 400 °C | 250 °C | 5 of 6 within tolerance, median error 3.5% | 6 of 6 within tolerance, median error 7.5% |
| Pull from the furnace, 3 s: duration | “less than 3 sec” is a bound; 3 s used; the end temperature is not given and is searched from 25 to 700 °C | 1 to 3 s | 3 s | 1 s (flat: the data do not constrain it) | 5 of 6 within tolerance, median error 3.5% | 5 of 6 within tolerance, median error 3.1% |
| Heat treatment after metal, 550 °C in nitrogen: duration | “2-5 min”; 3.5 min used, searched from 2 to 5 min | 120 to 300 s | 210 s | 120 s | 5 of 6 within tolerance, median error 3.5% | 6 of 6 within tolerance, median error 3.5% |
Together: Pull T end 400 °C (was 400); Pull duration 1 s (was 3); MetalAnneal duration 180 s (was 210).
As reproduced: 9 of 13 within tolerance, median error 12.5%. Aligned: 10 of 13 within tolerance, median error 9.3%. On the held-out samples only: 4 of 7 within tolerance, median error 13.6% as reproduced, 4 of 7 within tolerance, median error 13.1% aligned.
Choices of program or material property, each scored on its own and on top of the aligned history:
| Variant | Alone | With the aligned history |
|---|---|---|
| exponential pull toward 25 °C, TAU = pull time | 9 of 13 within tolerance, median error 12.5% | 9 of 13 within tolerance, median error 9.6% |
| exponential pull toward 25 °C, TAU = 0.3 × pull time | 9 of 13 within tolerance, median error 11.3% | 8 of 13 within tolerance, median error 12.0% |
| exponential pull toward 400 °C, TAU = 0.5 × pull time | 9 of 13 within tolerance, median error 12.5% | 9 of 13 within tolerance, median error 9.5% |
| then 20 s more cooling in oxygen (TAU 60 s) | 4 of 13 within tolerance, median error 42.6% | 3 of 13 within tolerance, median error 39.3% |
| then 10 min cooling to 25 °C in oxygen (TAU 60 s) | 4 of 13 within tolerance, median error 42.7% | 3 of 13 within tolerance, median error 39.3% |
| then 10 min cooling to 25 °C in air (TAU 60 s) | 7 of 13 within tolerance, median error 13.1% | 8 of 13 within tolerance, median error 13.1% |
| then 10 min cooling to 25 °C in nitrogen (TAU 60 s) | 9 of 13 within tolerance, median error 12.5% | 10 of 13 within tolerance, median error 9.3% |
What was searched. Four things the paper leaves open: the temperature at which a pull ends (25 to 700 °C, one value for every pull that starts hot), the length of the standard fast pull (“less than 3 sec”: 1 to 3 s), the 550 °C nitrogen treatment after metal (“2-5 min”) and the 920 °C oxidation time (not given; 30 min to 24 h). They were chosen on Table I's six pulls only; the seven values of Tables II and III are the test.
The pull end temperature is pinned, and 400 °C stands. Scanned alone on Table I it passes 2 of 6 at 25 °C, 2 at 137 °C, 3 at 250 °C, 5 at 362 and 400 °C, 6 at 475 °C, 2 at 587 °C and 2 at 700 °C. The window that works is about 360 to 480 °C; outside it the six pulls cannot all be matched by any one end temperature. Combined with the other unknowns the search returned to 400 °C. This number is a fit: it was first chosen against Table I when the pull model was built, and it is chosen against Table I again here.
The other three unknowns barely matter. The fast-pull length moves the median error on Table I from 3.5% (3 s) to 3.1% (1 s) and changes no verdict. The 550 °C nitrogen treatment moves one Table I value across its tolerance (6 of 6 at 2 to 2.5 min, 5 of 6 at 3 to 5 min): the program's charge relaxes slightly without oxygen even at 550 °C. The 920 °C oxidation time changes nothing, because the charge program starts from its steady state and does not simulate the oxidation. Together: pull 1 s, metal treatment 2.5 min, pull end 400 °C, the 920 °C oxidation left at 60 min (its scan is flat).
On the held-out tables nothing improves. Tables II and III: 4 of 7 within tolerance as reproduced and 4 of 7 aligned, median error 13.6% and 13.1%. The (111) hold in oxygen at 900 °C moves inside its tolerance (5.02 against 4.6 × 10^11 cm^-2) and the (100) hold at 550 °C moves just outside (3.70 against 4.2). The nitrogen anneal at 1200 °C stays at about half the paper's value (0.97 against 1.8) and the (100) argon anneal at 920 °C stays at half (0.36 against 0.7): those are the program's equilibria without oxygen, which no timing unknown reaches.
The shape of the pull. An exponential fall toward 25 °C with a time constant equal to the pull time does as well as the straight fall to 400 °C (9 of 13, median 12.5%; 9.7% on the aligned history); it ends each pull at about 460 °C. So does an exponential fall toward 400 °C with a time constant of half the pull time (9 of 13). A faster exponential, time constant 0.3 × the pull time toward 25 °C, ends below 100 °C and fails (5 of 13, median 28.8%, simulation high). The data cannot tell a linear from an exponential pull; what they fix is that the charge must stop moving once the slice is somewhere around 400 to 480 °C.
Cooling to room temperature: a finding about the program, not the paper. The program's oxygen rate was fitted with an activation energy of 0.05 eV (k0 = 0.081 s^-1), so in oxygen its time constant is about 18 s at 1200 °C and still about 90 s at 25 °C, and the value it relaxes toward is the steady-state line extrapolated down in temperature: 14.3 × 10^11 cm^-2 on (111) and 6.5 × 10^11 on (100) at 25 °C. Twenty more seconds of cooling in oxygen after the pull takes the score from 9 of 13 to 2 of 13 (median 72%, every value high); ten minutes of cooling to 25 °C in oxygen gives 1 of 13 (median 210%), and in air 1 of 13 (median 172%). The same ten minutes in nitrogen changes nothing (9 of 13). A slice in 1967 did cool to room temperature, in oxygen or air, and kept 1.9 × 10^11. So the program reproduces Table I only because its histories stop at 400 °C: the end temperature of the pull is standing in for an activation energy the oxygen kinetics do not have.
4 within, 3 near of 7 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 |
|---|---|---|---|---|---|---|---|
| (111), 1200 °C, then oxygen at 900 °C | fixed charge (Qss/q) | 4.60e+11 cm⁻² | 5.23e+11 | 5.02e+11 | +9% | within (±11%) | test |
| (111), 1200 °C, then oxygen at 550 °C | fixed charge (Qss/q) | 1.00e+12 cm⁻² | 8.75e+11 | 8.69e+11 | -13% | near (±10%) | test |
| (111), 1200 °C, then nitrogen at 1200 °C | fixed charge (Qss/q) | 1.80e+11 cm⁻² | 9.74e+10 | 9.68e+10 | -46% | near (±28%) | test |
| (111), 920 °C, then argon at 920 °C | fixed charge (Qss/q) | 1.90e+11 cm⁻² | 2.08e+11 | 2.08e+11 | +9% | within (±26%) | test |
| (100), 1200 °C, standard fast pull | fixed charge (Qss/q) | 2.00e+10 cm⁻² | 4.65e+10 | 2.91e+10 | +46% | within (±250%) | test |
| (100), 1200 °C, then oxygen at 550 °C | fixed charge (Qss/q) | 4.20e+11 cm⁻² | 3.72e+11 | 3.70e+11 | -12% | near (±12%) | test |
| (100), 920 °C, then argon at 920 °C | fixed charge (Qss/q) | 7.00e+10 cm⁻² | 3.59e+10 | 3.59e+10 | -49% | within (±71%) | test |
Alignment cannot fix the oxygen kinetics. With a 0.05 eV activation energy the charge keeps following the extrapolated steady-state line at any temperature, which no measurement supports below about 550 °C (the lowest temperature in Table III). A freeze-out is needed: a rate with a real activation energy (refitted on Table I with histories that cool to room temperature), or a steady-state line that stops falling below some temperature. That is a change to a fitted program, which this page does not make.
Alignment cannot fix the anneals without oxygen either: nitrogen at 1200 °C and argon at 920 °C on (100) come out at about half the paper's values whatever the timing, because the inert equilibrium was fitted to another laboratory's wafers.
What our language and ontology cannot yet say
- A pull as a motion through a furnace profile:
PULL DISTANCE 54 cm DURATION t PROFILE <furnace axial temperature profile>, so that the wafer's temperature against time follows from the paper's own words (time and distance) instead of an end temperature and a shape we invent. The paper gives distance and time; we have to write a temperature ramp. - A history that ends at the measurement temperature by default (a final cooling to 25 °C written explicitly, with its gas). Our histories stop at the end of the last hot step, which is what hid the low-temperature behaviour of the charge program.
- A way to search a PROFILE TAU as an unknown (
VARY tau <lo>..<hi>, orVARY tau_factorrelative to the duration). The exponential pull had to be tried as a handful of declared variants. - A tag for which samples were measured with a gold probe on bare oxide and which were metallized and given the 550 °C treatment: an optional step (
EVENT … OPTIONAL, or two histories under one measured value), since the paper does not say which tabulated value is which. - An ambient for “the end of the tube”: where the slice sits after the pull (open tube, flowing oxygen, room air) is part of the history and has no word.
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) | 9 of 13 | 12.5% | |
| heat-up A (hot push), fast cooling | 7 of 13 | 15.6% | 9 of 13 moved by more than 2% |
| heat-up A (hot push), slow cooling | 5 of 13 | 45.8% | 10 of 13 moved by more than 2% |
| heat-up B (cold-furnace ramp), fast cooling | 7 of 13 | 15.7% | 9 of 13 moved by more than 2% |
| heat-up B (cold-furnace ramp), slow cooling | 5 of 13 | 45.6% | 10 of 13 moved by more than 2% |
The paper's own conclusions
| The paper states | What we find | |
|---|---|---|
| A slower pull in oxygen raises the charge (Table I: 1.9 to 9.8 × 10^11 cm^-2) | The six pull times are simulated above | see the chart |
| An inert anneal lowers the charge to the value of a high-temperature oxidation | Simulated for nitrogen at 1200 °C and argon at 920 °C | see the chart |
| The charge after an inert anneal does not depend on the anneal temperature (the triangle, Figure 5) | Contradicted by other sources' measurements in the graph (123 matched pairs, 80% differ) | not supported |
What we would like Emily to check
- What does a slice's temperature do during and after a pull of this kind (a thin quartz boat, about 50 cm of tube)? A linear fall to 400 °C over the pull time is the weakest assumption on this page.
- Between the 1200 °C oxidation and a hold at 900 or 550 °C, was the practice of the time to move the boat to a second furnace?
- Does the 550 °C nitrogen treatment after aluminium change the fixed charge, in your experience, or only the interface traps?