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(sanafe.load_net('snn/example_snn.yaml', arch))
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.8 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.0-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.0-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.0-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.0-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.0-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.0-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.0-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.0-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.0-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.0-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.0-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.0-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.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for sanafe-2.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 56eeab1a31b7e37ef82583e4b41ddd97a602d373e19f01c4b254c5afc8568ee8
MD5 ad63992af907aac731d5250b6d6421d9
BLAKE2b-256 496bff452a43b2775ee8f5a800d22a98476c0271602c831a3a0809f0a7e5d26f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 739e45e4120eddb6ebe8129309ebb51b759213335716d5c5ba664d1e9d435128
MD5 bfb1c29b993194ed47fedc65192cc6a2
BLAKE2b-256 a92ea6ae9d1154bef889a1b2b2eb26c18192443d2b2cc503ae4f2809746c9b81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a42493389289dfe218c12d66776682b1dbfaf363007c3bfb15c305cc9c9808c4
MD5 accebdd74e4b16810aa476efa62eafaa
BLAKE2b-256 d8297a6439a0907f1b1c3ed8eda7efc85997ac818dbd7f11470d8489370d1df3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b051d0090457f52d20a029ac1c68ed07027049a14610d16528e4d2143472f735
MD5 9f9c90485f16de9e415db1c1b815ef06
BLAKE2b-256 7f9548831a0fbd260194fe9d2f70a32bb55fabade553c814f230a9216a01d741

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5da35f47cf0dcf99c697c792dc3e42df8c76fb44853a48a3aacc716ff9d93123
MD5 6c477cd36076688597a4e8f2c200c1ee
BLAKE2b-256 19bb06bb996359ebc6a8efbb985b689d07481341a701391f13e15c977705c455

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cccefebf5b44e14290f7bd2b5a705216eead6c1dbe08c78fba7ce303c3256f43
MD5 6b328278f17b9363d4cb6d3f706901d9
BLAKE2b-256 5fc253b2ceb96df1582d9fd7a8fcf16d13f363e7b5f16b9c32afffe365f52d77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b807646344efed6ce48f6c9369a98499b90385b146fc16c23093a4c2add5f47b
MD5 6e20930dc0e8f99a3c7dc04a84c4ad06
BLAKE2b-256 35a86782ecb76c1281d56b05de18b91d56828287ec4678255eb4aae694da2be9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 793fa33e8012fdea68369a4969d9a99e16d6f4dea68f972c24e602429b6b1b90
MD5 cea50adfd003595993ea6e95b80b63cb
BLAKE2b-256 b4bfbf06023ccbf2b1cbd2bfe32890d7562cb5bd15243a9ea3bf6258bb6e7b40

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2c0f8e1e41d376d9ae86bcedf6a04a77bf3678b764180b52eefb46eb6ced258c
MD5 b9b67a83c77fffd977eb6e526ba4352e
BLAKE2b-256 ef649c10ef68441fc6dbd5600ad058e4a3c7409faa53a7b0278aeb4bb7736313

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e98b498d362e6398b1fe4b5266bbf888f6fe26a3d274fee30919fe6406230cc7
MD5 489e8919146941cf777e37138a6e6241
BLAKE2b-256 959e70d1f5b197e29778480604680da8277bd248328a2a0ca2ca0957e610b239

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7e269dd0d9e48a655aafd23ff0789da91d3cc6fe3a0f1bd7ff30a846e4f2caac
MD5 a90c343dc1943054de782f774a135a05
BLAKE2b-256 297341485325e3352cdfbc29fe840e8eb2600433cd58c61f94983122fd27b436

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sanafe-2.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f03e1768bb082958ac5ab1d595b57c7d816c0e73a5997acb3c2e3f1ecf5c0672
MD5 e2b77d60e8cf286dac2a0377d5bf1928
BLAKE2b-256 998aaddb845daa042339d0c02786f4237fcc0cb400c6c93519d46ba06c81590c

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