Giter Club home page Giter Club logo

mram_simulation_framework's Introduction

Arm's MRAM Simulation/Characterization Framework

Authors and Related Publications

Thanks to Cyrille Dray and Milos Milosavljevic for his helpful discussions.

The following frameworks have been presented at

  • A Compact Model for Scalable MTJ Simulation, IEEE International Conference on Synthesis, Modeling, Analysis and Simulation Methods and Applications to Circuit Design, SMACD 2021. link to manuscript
  • A Fokker-Planck Solver to Model MTJ Stochasticity European Solid-State Device Research Conference, ESSDERC 2021. link to manuscript

This repository contains a framework for the characterization and analysis of MRAM behavior including stochasticity, and a compact model and framework for the efficient and scalable simulation of circuits with MRAMs.

We provide Verilog-A and Python compact models, able to emulate the behavior of MRAMs switching at significant statistic events. To calibrate the models for such stochastic based events, we implemented and analyzed two FPE solvers (numerical FVM and analytical), and presented an optimization module that orchestrates the efficient computation of MRAM statistics and parameter regression.

Quick Start & More info

Summary:

  • test_sllgs_solver.py shows you the basic s-LLGS solver config, calling (sllgs_solver.py)
  • stochastic_multithread_simulation.py (calling sllgs_solver.py) is the script that helps you launching parallel python s-LLGS simulations
  • These results can be compared against Fooker-Plank simulations (see plot_sllgs_fpe_comparison.py script)
  • analytical.py and mtj_fp_fvm.py contain the Fooker-Plank solvers. Analytical contains the WER/RER fitter for the problem optimization
  • Verilog-a compact models: run the testbenches tb.scs and tb_subckt.scs

Please, read the full description at MRAM Framework Description.

IMPORTANT: Before using the compact models, read the s-LLGS Solvers info.

Files organization

  • doc
    • README.md for the full MRAM framework description
  • src
    • python_compact_model
      • README.md for the MRAM python s-LLGS description
      • sllgs_solver.py Python s-LLGS solver
      • stochastic_multithread_simulation.py Multi-thread stochastic simulations
      • test_sllgs_solver.py Simple s-LLGS tests
      • ode_solver_custom_fn.py solve_ivp auxilar fns derived from Scipy
    • sllgs_fpe_comparison
      • plot_sllgs_fpe_comparison.py Script for s-LLGS/Fooker-Plank comparison
      • sllgs_importer.py Script for importing stochastic_multithread_simulation.py results
    • fokker_plank
      • README.md for the MRAM Fokker-Plank description
      • fvm
        • fvm_classes.py Finite Volume Method classes, see FVM
        • mtj_fp_fvm.py MTJ Fokker-Plank FVM solver
      • analytical
        • analytical.py MTJ Fokker-Plank Analytical solver and WER/RER curves fitter
    • verilog_a_compact_model
      • README.md for the MRAM verilog-a compact model description
      • tb Testbenches
        • tb.scs Example testbench calling full Verilog-a model (conduction and s-LLGS fully written in verilog-a)
        • tb_subckt.scs Example testbench calling full Spectre subcircuit model (s-LLGS fully written in verilog-a, conduction writen in Spectre)
      • mram_lib Verilog-a compact model and Spectre library
        • llg_spherical_solver.va Verilog-a s-LLGS solver, key file
        • *.va Parameters or auxiliar functions
        • *.scs Spectre subcircuits and library

s-LLGS Solvers

No-thermal or emulated-thermal simulations

  • Use Scipy solver in python (scipy_ivp=True)
  • Use Spherical coordinates
  • Control the simulation through tolerances (atol, rtol in python)
    # No thermal, no fake_thermal, solved with scipy_ivp
    llg_a = sllg_solver.LLG(do_fake_thermal=False,
                            do_thermal=False,
                            i_amp_fn=current,
                            seed=seed_0)
    data_a = llg_a.solve_and_plot(15e-9,
                                  scipy_ivp=True,
                                  solve_spherical=True,
                                  solve_normalized=True,
                                  rtol=1e-4,
                                  atol=1e-9)
    # No thermal, EMULATED THERMAL, solved with scipy_ivp
    llg_b = sllg_solver.LLG(do_fake_thermal=True,
                            d_theta_fake_th=1/30,
                            do_thermal=False,
                            i_amp_fn=current,
                            seed=seed_0)
    data_b = llg_b.solve_and_plot(15e-9,
                                  scipy_ivp=True,
                                  solve_spherical=True,
                                  solve_normalized=True,
                                  max_step=1e-11,
                                  rtol=1e-4,
                                  atol=1e-9)

Thermal Stochastic Simulations

Require stochastic differential equation solvers

  • Use SDE solvers in python (scipy_ivp=False)
  • Use Cartesian coordinates
  • Control the simulation through maximum time step (max_step in python)
    llg_c = sllg_solver.LLG(do_fake_thermal=False,
                            do_thermal=True,
                            i_amp_fn=current,
                            seed=seed_0)
    data_c = llg_c.solve_and_plot(10e-9,
                                  scipy_ivp=False,
                                  solve_spherical=False,
                                  solve_normalized=True,
                                  max_step=1e-13,
                                  method='stratonovich_heun')

MRAM Magnetization and stochasticity

mram_simulation_framework's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.