Skip to content

ISSCC27: A Pulse-Programmable STT-MRAM Stochastic Primitive for Uncertainty-Aware Neural Inference - #198

Open
taanayd wants to merge 3 commits into
sscs-ose:mainfrom
taanayd:ISSCC27-stt-mram
Open

taanayd wants to merge 3 commits into
sscs-ose:mainfrom
taanayd:ISSCC27-stt-mram

Conversation

@taanayd

@taanayd taanayd commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Submission overview — ISSCC 2027 Code-a-Chip

A Pulse-Programmable STT-MRAM Stochastic Primitive for Uncertainty-Aware Neural Inference
Open-source 1T1MTJ stochastic primitive using a SKY130 CMOS access circuit with an abstract MTJ interface, DRC/LVS-verified layout, device-variation analysis, and Monte-Carlo dropout demonstration.

Author: Tanay Das (AMD India) · License: Apache 2.0
Files: ISSCC27/submitted_notebooks/stt_mram_uncertainty_aware_inference/ — notebook (executed, with outputs), README.md, LICENSE

Research question

Can a stochastic MTJ be engineered into a calibrated hardware primitive whose probability, electrical interface, physical implementation, variation sensitivity, and system-level behavior are all characterized in one open, reproducible workflow?

Flow

MTJ physics (Néel-Brown) → pulse-width-controlled switching probability → calibration engine (p* → PW*) → SKY130 CMOS access circuit (official sky130_fd_pr__nfet_01v8, ngspice) → Magic layout (cell + 4×4 array) → DRC / LVS / PEX → post-layout simulation → device-variation analysis → Monte-Carlo dropout on MNIST with Fashion-MNIST OOD

Key results

  • Calibration: p* = 0.30 programmed at PW* ≈ 0.53 ns
  • Layout: 1T1MTJ cell 3.24 µm² and 4×4 array; flat DRC 0 errors; Netgen LVS match (cell and array)
  • Post-layout: C-only PEX; I_BL and E_pulse change < 0.05 %
  • Key finding: nominal calibration does not guarantee uniform calibration across devices — ECE spans 0.012–0.172 over 20 static virtual devices (ideal 0.062 ± 0.003) and tracks each device's switching probability, motivating per-device pulse-width trimming
  • MC dropout: MNIST accuracy ≈ 94 %; device variation degrades calibration (ECE) while accuracy and OOD AUROC are essentially unchanged
  • Energy (negative result, reported as-is): E_pulse 721 fJ (755 fJ with extracted 4×4 capacitance) = 4.7–4.9× a parametric LFSR estimate; the notebook states the design-space requirements for parity instead of claiming efficiency

Scope

The MTJ is an abstract interface — a fixed behavioral resistor in SPICE and an abstract M2/M3 device in layout (SKY130 has no MTJ process). Switching is decided by the analytical model in Python; ngspice evaluates the resulting electrical state. Variation magnitudes are assumed stress-test values. Not claimed: energy efficiency, a fabricated MRAM cell, or an embedded-MRAM SKY130 implementation.

Reproducibility

Runs end-to-end on Google Colab (Runtime → Run all, ~15–25 min). The notebook installs ngspice, downloads a pinned SKY130 PDK build, builds Magic from source, installs Netgen, and fetches MNIST / Fashion-MNIST automatically. If Magic/Netgen cannot be installed, the layout sections fall back to reference results embedded in the notebook and say so explicitly.

Note on the failing CI checks

Both checks fail before reaching any notebook: the workflows use **/*.ipynb, which in bash without shopt -s globstar matches only one directory level, so notebooks under ISSCC27/submitted_notebooks/<project>/ are never found ("collected 0 items" / "No such file or directory"). This affects all ISSCC27 submissions. Possible fix: add shopt -s globstar before the commands, or use find . -name "*.ipynb". I have not modified any files outside my project directory, per the submission rules.

@taanayd

taanayd commented Sep 27, 2026

Copy link
Copy Markdown
Contributor Author

Submission overview — ISSCC 2027 Code-a-Chip

A Pulse-Programmable STT-MRAM Stochastic Primitive for Uncertainty-Aware Neural Inference
Open-source 1T1MTJ stochastic primitive using a SKY130 CMOS access circuit with an abstract MTJ interface, DRC/LVS-verified layout, device-variation analysis, and Monte-Carlo dropout demonstration.

Author: Tanay Das (AMD India) · License: Apache 2.0
Files: ISSCC27/submitted_notebooks/stt_mram_uncertainty_aware_inference/ — notebook (executed, with outputs), README.md, LICENSE

Research question

Can a stochastic MTJ be engineered into a calibrated hardware primitive whose probability, electrical interface, physical implementation, variation sensitivity, and system-level behavior are all characterized in one open, reproducible workflow?

Flow

MTJ physics (Néel-Brown) → pulse-width-controlled switching probability → calibration engine (p* → PW*) → SKY130 CMOS access circuit (official sky130_fd_pr__nfet_01v8, ngspice) → Magic layout (cell + 4×4 array) → DRC / LVS / PEX → post-layout simulation → device-variation analysis → Monte-Carlo dropout on MNIST with Fashion-MNIST OOD

Key results

  • Calibration: p* = 0.30 programmed at PW* ≈ 0.53 ns
  • Layout: 1T1MTJ cell 3.24 µm² and 4×4 array; flat DRC 0 errors; Netgen LVS match (cell and array)
  • Post-layout: C-only PEX; I_BL and E_pulse change < 0.05 %
  • Key finding: nominal calibration does not guarantee uniform calibration across devices — ECE spans 0.012–0.172 over 20 static virtual devices (ideal 0.062 ± 0.003) and tracks each device's switching probability, motivating per-device pulse-width trimming
  • MC dropout: MNIST accuracy ≈ 94 %; device variation degrades calibration (ECE) while accuracy and OOD AUROC are essentially unchanged
  • Energy (negative result, reported as-is): E_pulse 721 fJ (755 fJ with extracted 4×4 capacitance) = 4.7–4.9× a parametric LFSR estimate; the notebook states the design-space requirements for parity instead of claiming efficiency

Scope

The MTJ is an abstract interface — a fixed behavioral resistor in SPICE and an abstract M2/M3 device in layout (SKY130 has no MTJ process). Switching is decided by the analytical model in Python; ngspice evaluates the resulting electrical state. Variation magnitudes are assumed stress-test values. Not claimed: energy efficiency, a fabricated MRAM cell, or an embedded-MRAM SKY130 implementation.

Reproducibility

Runs end-to-end on Google Colab (Runtime → Run all, ~15–25 min). The notebook installs ngspice, downloads a pinned SKY130 PDK build, builds Magic from source, installs Netgen, and fetches MNIST / Fashion-MNIST automatically. If Magic/Netgen cannot be installed, the layout sections fall back to reference results embedded in the notebook and say so explicitly.

Note on the failing CI checks

Both checks fail before reaching any notebook: the workflows use **/*.ipynb, which in bash without shopt -s globstar matches only one directory level, so notebooks under ISSCC27/submitted_notebooks/<project>/ are never found ("collected 0 items" / "No such file or directory"). This affects all ISSCC27 submissions. Possible fix: add shopt -s globstar before the commands, or use find . -name "*.ipynb". I have not modified any files outside my project directory, per the submission rules.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant