Skip to main content

SANA-FE: Simulating Advanced Neuromorphic Architectures for Fast Exploration

Project description

SANA-FE

PyPI version Documentation Status License: GPL v3 DOI

Simulating Advanced Neuromorphic Architectures for Fast Exploration (SANA-FE) is a framework for modeling the energy usage and performance of different neuromorphic hardware. Given a description of a neuromorphic chip and a mapped spiking neural network (SNN), SANA-FE simulates execution at time-step granularity and reports energy, latency, and detailed per-unit performance statistics.

Quickstart

SANA-FE has two interfaces: A Python API (recommended for most users) and a standalone command-line simulator.

Python

import sanafe

arch, net = sanafe.load_example()
chip = sanafe.SpikingChip(arch)
chip.load(net)
results = chip.sim(100)
print(results)

Standalone Simulator

./sim arch/example_chip.yaml snn/example_snn.yaml 100

This simulates 100 time-steps of a small connected spiking neural network (SNN). For an example simulation of a real-world architecture (Intel's Loihi) running DVS gesture classification with spike traces, run:

./sim -s arch/loihi.yaml snn/dvs.yaml 1000

General usage:

./sim [optional flags] <architecture description> <SNN description> <N timesteps>

Command-line Flags

  • -m: Enable message traces to messages.csv
  • -n: Use the (legacy) netlist format for SNNs, instead of YAML.
  • -o: Output directory
  • -p: Record the simulated performance of each timestep to perf.csv
  • -s: Enable spike traces to spikes.csv
  • -t [simple/detailed/cycle]: Specify the timing model (default=detailed)
  • -v: Enable potential (voltage) traces to potential.csv
  • -x: Enable extra user neuron traces to neurons.csv
  • -N: Number of neuron/message processing threads (default=1)
  • -S: Number of scheduling threads (default=0, use main thread)

Installation

The latest Python release is available on PyPI and can be installed with: pip install sanafe

Custom Builds

The project can also be manually installed from source. This project uses CMake as its build system and dependency manager. To setup compilation, first create a temporary build directory:

mkdir build && cd build

Run the following command in this build directory:

cmake ..

Then compile SANA-FE and copy it to the project directory by running the command:

make -j ${NPROC} && make install && cd ..

The option -j indicates the number of parallel build threads.

Dependencies

Building this project requires cmake, make, and a compiler that supports the C++17 standard (e.g., GCC >= 8, Clang >= 5). This project uses RapidYAML for all YAML file parsing, and Booksim 2 for optional cycle-accurate NoC modeling. To build the Python interfaces, you must also have Python >= 3.10 installed with PyBind11. You can install PyBind11 using:

pip install pybind11

Simulator Overview

SANA-FE uses a user-provided spiking architecture, a mapped SNN, and run-time configuration to simulate a spiking chip as it executes a spiking application. SANA-FE uses the Architecture to compile a SpikingChip, which it then loads the mapped SNN. SANA-FE then rapidly simulates the design at a time-step granularity.

During each time-step SANA-FE models custom spike-processing pipelines executing within each core, modeling the processing of neurons and spike messages. Using our spiking hardware template, we enable custom hardware blocks to be incorporated for axonal, synaptic, dendritic and somatic hardware. Each hardware unit is implemented using a model - you can take the built-in hardware unit models provided in models.cpp, or implement models externally as hardware unit plugins using the fixed base class interfaces. The SANA-FE kernel coordinates all on-chip activity, makes calls to the models and tracks the total energy and latency across the chip.

SANA-FE includes efficient but detailed semi-analytical timing models. This takes aggregated information about all spike messages generated in a time-step and calls a custom scheduler in schedule.cpp. The on chip schedule ultimately gives you a reasonably accurate prediction of the chip timings, accounting for effects such as blocking in the NoC and custom latency simulations within hardware units.

Simulator Outputs

If corresponding traces are enabled, output is saved to trace files with hard-coded names using either csv or yaml extensions.

spikes.csv: The spikes for each time-step on probed neurons

potential.csv: The potentials for each time-step on probed neurons

neurons.csv: Any extra neuron state traces for each time-step (if supported).

perf.csv: Detailed statistics for each timestep and each hardware unit

messages.csv: Information on spike messages for each time-step

run_summary.yaml: High-level statistics for the simulation e.g. runtime

This project has been written in C++ and Python. C++ code has been written using the C++17 standard.

For more details, see:

Citation

We hope that you find this project useful. If you use SANA-FE in your work, please cite our paper:

James A. Boyle, Mark Plagge, Suma George Cardwell, Frances S. Chance, and Andreas Gerstlauer, "SANA-FE: Simulating Advanced Neuromorphic Architectures for Fast Exploration," in IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems (TCAD), vol. 44, no. 8, pp. 3165–3178, 2025, doi:10.1109/TCAD.2025.3537971.

@article{boyle2025sanafe,
  title={SANA-FE: Simulating Advanced Neuromorphic Architectures for Fast Exploration},
  author={James A. Boyle and Mark Plagge and Suma George Cardwell and Frances S. Chance and Andreas Gerstlauer},
  journal={IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems (TCAD)},
  volume={44},
  number={8},
  pages={3165--3178},
  year={2025},
  doi={10.1109/TCAD.2025.3537971}
}

Projects using SANA-FE

We are currently inviting any SANA-FE users to send their projects! We would like to include references here.

References

James A. Boyle, Jason Ho, Mark Plagge, Suma George Cardwell, Frances S. Chance, and Andreas Gerstlauer, "Exploring Dendrites in Large-Scale Neuromorphic Architectures," in International Conference on Neuromorphic Systems (ICONS), Seattle, WA, USA, 2025, doi:10.1109/ICONS69015.2025.00018.

James A. Boyle, Mark Plagge, Suma George Cardwell, Frances S. Chance, and Andreas Gerstlauer, "SANA-FE: Simulating Advanced Neuromorphic Architectures for Fast Exploration," in IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems (TCAD), vol. 44, no. 8, pp. 3165–3178, 2025, doi:10.1109/TCAD.2025.3537971.

James A. Boyle, Mark Plagge, Suma George Cardwell, Frances S. Chance, and Andreas Gerstlauer, "Tutorial: Large-Scale Spiking Neuromorphic Architecture Exploration using SANA-FE," in International Conference on Hardware/Software Codesign and System Synthesis (CODES+ISSS), Raleigh, NC, USA, 2024, doi:10.1109/CODES-ISSS60120.2024.00007.

James A. Boyle, Mark Plagge, Suma George Cardwell, Frances S. Chance, and Andreas Gerstlauer, "Performance and Energy Simulation of Spiking Neuromorphic Architectures for Fast Exploration," in International Conference on Neuromorphic Systems (ICONS), Santa Fe, NM, USA, 2023, doi:10.1145/3589737.3605970.

License and Acknowledgements

Copyright (c) 2026 - The University of Texas at Austin (GPL 3)

This work was produced under contract #2317831 to National Technology and Engineering Solutions of Sandia, LLC which is under contract No. DE-NA0003525 with the U.S. Department of Energy.

Contact

James Boyle: james.boyle@utexas.edu

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

sanafe-2.2.2-cp314-cp314t-musllinux_1_2_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

sanafe-2.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

sanafe-2.2.2-cp314-cp314-musllinux_1_2_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

sanafe-2.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

sanafe-2.2.2-cp313-cp313-musllinux_1_2_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

sanafe-2.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

sanafe-2.2.2-cp312-cp312-musllinux_1_2_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

sanafe-2.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

sanafe-2.2.2-cp311-cp311-musllinux_1_2_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

sanafe-2.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

sanafe-2.2.2-cp310-cp310-musllinux_1_2_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

sanafe-2.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

File details

Details for the file sanafe-2.2.2-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.2-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 020b324492b8ec2628554517538da30929d3dff1d6c42c8b18342d48bff4037b
MD5 7e74d95c0a9952b7197fe0deb53860b7
BLAKE2b-256 320e301dc40dcb0b83ea8051caa99752b89e777b407ab73bb237c846adbe0880

See more details on using hashes here.

File details

Details for the file sanafe-2.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 51bd4883876c1edc072309341b102e8689ebd2fd72f7d1e669c93e7f8cbf7f10
MD5 2809e9fd528951c552d6c7944c3328ce
BLAKE2b-256 5c46a3340cba1a6a3035c2d4f84e2e3b6aec6b85c496daa79c7b954309791bb8

See more details on using hashes here.

File details

Details for the file sanafe-2.2.2-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.2-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cf85e0245f4114013e08df6566e2231fb74cb18d58117d0bc5e3187f800b9deb
MD5 56f7bc1ee71014166f95b92e19eccbfb
BLAKE2b-256 8c328cd9218945f5006587f242cc11d664359d401fdc7dc566b196456407fced

See more details on using hashes here.

File details

Details for the file sanafe-2.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4d5e1307343fd2422cfd0956c1b17c95b10b39e560e5c1aa07e18a5b95270c54
MD5 cd8bec1f724756fa2aea97673d0935a4
BLAKE2b-256 3920ea299f9cf6db87d4f27a26285b47ba900099d5f86278864418ab47f53e51

See more details on using hashes here.

File details

Details for the file sanafe-2.2.2-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8089c64c7b0fe3d0a0c1d7482bb8fd0a242fe2e7d2f040eeba76caa7fdbcc517
MD5 2f1e0cb0b7a40e8ec7b4a582894c619c
BLAKE2b-256 c87df7e634c51df45a8864b460a06775d0d476e28d041463340aa3cb6ee0ba0f

See more details on using hashes here.

File details

Details for the file sanafe-2.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f09451d87fc8f844aebf37b146245b6a979f32394a4dbc9913b0ed3f8a7d9a3d
MD5 4536fd6905975a9e1f6061fb6c60fc25
BLAKE2b-256 94c2d7cdfbbb4887641c2fd034eb539ac12eb44353a0254842806ea753e02845

See more details on using hashes here.

File details

Details for the file sanafe-2.2.2-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4dfcacf7d955051839d6d40d1c899c20a93dc12089d0ff78b28947fa930e223c
MD5 96b6a558b8dcf318408aebc9e653fcd2
BLAKE2b-256 d6d6f5007fb99cb548b32ed1c2230d593f5265f433c75ae08becba0b35d3e5d1

See more details on using hashes here.

File details

Details for the file sanafe-2.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c78c394db72a7a399cfa060367f25a6b846c78d4683f3d108043c86be1b15b6e
MD5 abcee7dc419a5f5266431493343784ec
BLAKE2b-256 ef074048242e8595c48dd769410983a41b8ec6dbedab1d1aace138626b3afb37

See more details on using hashes here.

File details

Details for the file sanafe-2.2.2-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 647d69b535dc1eec26d268798557dcf3f25589af5946b4f752342400cc9f676e
MD5 9d9f9ca9db92fdfd47968fa6fef32373
BLAKE2b-256 5205750ddead35d5e4945f77c893c5ea0c266c0aaba70a4b43ec10e3df0e97cd

See more details on using hashes here.

File details

Details for the file sanafe-2.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 47926ed20fa5338cc47ce97da9813410a57196f1111430e9f41be8ddb43a32c3
MD5 11f4d9946b7d3b8ebf09deeba38c66dc
BLAKE2b-256 158f9252f2a80e0309b6cc65e0b7767686a5af3868ebc239dca76eaf287b1c64

See more details on using hashes here.

File details

Details for the file sanafe-2.2.2-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b41b9df1a3b873b4e3be992f2c869db47f911a9e363b31d13adcbcba500624ed
MD5 605a78fec803c8019f28e93ba91b0cea
BLAKE2b-256 88cce405a572d9694700730f758bfeb8986dfd7678e86af8ef44df643dc126fa

See more details on using hashes here.

File details

Details for the file sanafe-2.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0175a1c7b39b72bba739837db8eddb3a069a26afd937453e35c37360e0d82991
MD5 e0924a27bb5bb758517132059b31130b
BLAKE2b-256 3a30c010794df9c04f11fd95f7ed3c3d75c07ac32ff6f828982f028dbdf60393

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page