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.1-cp314-cp314t-musllinux_1_2_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

sanafe-2.2.1-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.1-cp314-cp314-musllinux_1_2_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

sanafe-2.2.1-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.1-cp313-cp313-musllinux_1_2_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

sanafe-2.2.1-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.1-cp312-cp312-musllinux_1_2_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

sanafe-2.2.1-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.1-cp311-cp311-musllinux_1_2_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

sanafe-2.2.1-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.1-cp310-cp310-musllinux_1_2_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

sanafe-2.2.1-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.1-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fe0f28b24f79c3f76526220a6487a74c3c73f62e52cca2b008f018acfc875c6c
MD5 257f406b9974f3fa3880d89531ce18f3
BLAKE2b-256 5239c412e0c8c4006e46984f793188a2ea625d76f0afa62f98c7ede1b07529b4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ac35c916f369a59ee1d364dc6f60bf267d03f5d0563ec3c2d017b3a63d7570bd
MD5 7fa7e9d290de12b11e0a63782d0985df
BLAKE2b-256 03244952d6eee6421bd38912498c15e46ddabdc816ce87954f26633f5d42fdff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.1-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 46e551bafcf319f50ade1fae9d84cf08b1edbe200f0506b6d0dd30cae9587c8f
MD5 155e6b70f06b5ebe44bbd31d90dd25a1
BLAKE2b-256 47340dfdd727ef0302b6bc2ae5eabca153a54b2cacc8b6dc3c11757a84139795

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f86054e46a191213996bb005b614f3a3730f8c80ce5571734045655286fe3b40
MD5 14080a4a653f82966d16e3d69b93c4ae
BLAKE2b-256 c9223662417d784bb6dd297d52ddad7b710f665a4d3e195f8fe41a98a28bfa35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7131d3c144a7d4fa2d7284cc6045e33620c9cfe05750437881436a444206bd46
MD5 fcca22500daf7db4c5b1fc3abf3bfd88
BLAKE2b-256 baa38e528865a584d1c884768d6dc4357764fe6ee614d99a6976c748f88ee926

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9f4a776b32274a1df1045de0d76e52beedeed4682544c96d518c923330814f7f
MD5 7b5bbc8b37eee28839427831869ece6c
BLAKE2b-256 daf6b0781f59650aef85caa8e61b83528d7d1427588b56d306c0f7856d4ac97d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 765f3b954ae62aae52fa8491a660304ad5104d1adecd53e3250408756a2c9e9b
MD5 e301093a7dba9b0e5dd2a39dedf9495a
BLAKE2b-256 fa5cf3c2ce4ceed24c1ac0581824dca2119fefa47c50c466cf3ba7d626429ead

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d0a8acb28b1e528e036cdb063d15b071545acd8179faf90b46e5f8d2a610b891
MD5 df6567a8d1eeed4731daf43977709030
BLAKE2b-256 cddb7e58aeba3e299af99eec91a9da8a7a11d2d03f09e7cc989efe136134f052

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a4422ab88a1d027d8e83853cfa4ebd64610bd50880ddfa776cd073ba34a3b901
MD5 c1f07f06ebab373b7032d53a7c3f15c2
BLAKE2b-256 5df0d47f35e01a952cdc7b89bbc5250e87165f18c229f1d450977fc33f574360

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c9eed5efb1e6ae8506e0aa2308abba038ee44f6f57caaf9395bcf7fa402ac5de
MD5 37b745e3b573f5fdd2211a5a319f838a
BLAKE2b-256 89e72ced69217aa527eb7015bbb88ebbe2095c1b6abcbe5a7764115396632660

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 483534bf36a55aebd7d253ac311376c4f5895e49abb895fe6ad3ab1a155d00dd
MD5 00773289407017dab1a1b85fe7f1a875
BLAKE2b-256 6d43b2467452e5ed147b89394c7ea9445f211f050055f2bf9cb05f902556033f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9de8dc295ea1d45b6b025c64c65ef85957e20ec7e12f4b5e8da369893796564b
MD5 c7e9b52a978fcb6d70efb8503bfd7167
BLAKE2b-256 688d7d01720f6d16df42843385b85f0df4a6672cd5fbb97c017adf630d30cd81

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