All Projects → RTC-research-group → OpenNAS

RTC-research-group / OpenNAS

Licence: GPL-3.0 license
OpenN@S: Open-source software to NAS automatic VHDL code generation

Programming Languages

C#
18002 projects
VHDL
269 projects
Verilog
626 projects
python
139335 projects - #7 most used programming language
c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to OpenNAS

Spiking-Restricted-Boltzmann-Machine
RBM implemented with spiking neurons in Python. Contrastive Divergence used to train the network.
Stars: ✭ 23 (+53.33%)
Mutual labels:  spiking-neural-networks, neuromorphic-hardware, neuromorphic-engineering
SpinalCrypto
SpinalHDL - Cryptography libraries
Stars: ✭ 36 (+140%)
Mutual labels:  vhdl
captouch
👇 Add capacitive touch buttons to any FPGA!
Stars: ✭ 96 (+540%)
Mutual labels:  vhdl
BenEaterVHDL
VHDL project to run a simple 8-bit computer very similar to the one built by Ben Eater (see https://eater.net)
Stars: ✭ 30 (+100%)
Mutual labels:  vhdl
snn-encoder-tools
Data encoders
Stars: ✭ 26 (+73.33%)
Mutual labels:  spiking-neural-networks
vhdl-hdmi-out
HDMI Out VHDL code for 7-series Xilinx FPGAs
Stars: ✭ 36 (+140%)
Mutual labels:  vhdl
brian2cuda
A brian2 extension to simulate spiking neural networks on GPUs
Stars: ✭ 46 (+206.67%)
Mutual labels:  spiking-neural-networks
FPGA-I2C-Minion
A simple I2C minion in VHDL
Stars: ✭ 50 (+233.33%)
Mutual labels:  vhdl
pyaer
Low-level Python APIs for Accessing Neuromorphic Devices.
Stars: ✭ 20 (+33.33%)
Mutual labels:  neuromorphic-engineering
SiaFpgaMiner
VHDL FPGA design of an optimized Blake2b pipeline to mine Siacoin
Stars: ✭ 58 (+286.67%)
Mutual labels:  vhdl
verilog-vcd-parser
A parser for Value Change Dump (VCD) files as specified in the IEEE System Verilog 1800-2012 standard.
Stars: ✭ 46 (+206.67%)
Mutual labels:  vhdl
DL-NC
spiking-neural-networks
Stars: ✭ 34 (+126.67%)
Mutual labels:  spiking-neural-networks
BrainPy
Brain Dynamics Programming in Python
Stars: ✭ 242 (+1513.33%)
Mutual labels:  spiking-neural-networks
xeda
Cross EDA Abstraction and Automation
Stars: ✭ 25 (+66.67%)
Mutual labels:  vhdl
Cache
Simple implementation of cache using VHDL
Stars: ✭ 17 (+13.33%)
Mutual labels:  vhdl
VHDLFormatter
VHDL formatter web online written in typescript
Stars: ✭ 44 (+193.33%)
Mutual labels:  vhdl
norse
Deep learning for spiking neural networks
Stars: ✭ 59 (+293.33%)
Mutual labels:  spiking-neural-networks
spore-nest-module
Synaptic Plasticity with Online Reinforcement learning
Stars: ✭ 24 (+60%)
Mutual labels:  spiking-neural-networks
vboard
Virtual development board for HDL design
Stars: ✭ 32 (+113.33%)
Mutual labels:  vhdl
rA9
JAX-based Spiking Neural Network framework
Stars: ✭ 60 (+300%)
Mutual labels:  spiking-neural-networks

OpenNAS extended logo

Description

OpenNAS is an open source VHDL-based Neuromorphic Auditory Sensor (NAS) code generator capable of automatically generating the necessary files to create a VHDL project for FPGA. OpenNAS guides designers with a friendly interface and allows NAS specification using a five-steps wizard for later code generation. It includes several audio input interfaces (AC'97 audio codec, I2S ADC and PDM microphones), different processing architectures (cascade and parallel), and a set of neuromorphic output interfaces (parallel AER, Spinnaker). After NAS generation, designers have everything ready for building and synthesizing the VHDL project for a target FPGA using manufacturer's tools.

Table of contents

Getting started

OpenNAS is a five-steps wizard which helps you to design and configurate a NAS in an easy way. Each step is focused on a specific section of the sensor, divided in: Commons, Input, Processing and Output. The user can set many parameters, like filters attenuation and number of frequency channels, among others. The meaning of all of these parameters is detailed in the OpenNAS wiki.

This video shows how it works if different architectures.

In this brief tutorial, we will guide the user in how to download, configure and run OpenNAS tool. There is also a videotutorial which summarizes the information showed here on the GitHub repository. You can watch it by clicking on the following image:

Prerequisites

OpenNAS has been programmed using Visual Studio Community 2015. Hence, user needs to have installed Visual Studio Community 2015 or greater to compile the project. In addition, Microsoft Windows 7 OS or greater is needed, since the .NET Framework version used in this work is not supported by Microsoft Windows XP OS. For Linux or MAC users, Visual Studio Code is not able to compile the OpenNAS project. Thus, a virtual machine with a Microsoft Windows OS installed have to be used.

Software dependencies

OpenNAS has several software dependencies which needs to be solved before executing it in your computer:

  • Microsoft .NET Framework 4.5
  • By clicking in this link you will be redirected to the Microsoft .NET Framework download website. You only need to select the desired language and then click on the "Download" button. Once the download has finished, execute the Microsoft .NET Framework installation file.
  • FPGA Synthesis or simulation Suite
  • After HDL generation, users can use FPGA vendors specific tools for synthesis and/or simulation, depending on target hardware paltform.

Supported IDEs, simulators and devices

Files generated by OpenNAS are currently compatible with VHDL versions from VHDL'93 in advance. They are also supported by Verilog 95 and Verilog 2001 versions.

OpenNAS has been tested for synthesis and bitfile generation with the following IDEs:

  • Xilinx ISE 14.1.
  • Xilinx Vivado (versions from 2016.1 to 2020.1) in several editions: WebPack, Systems Edition, HLS, etc.
  • Intel Quartus Prime.

For simulations, OpenNAS has been simulated in:

  • ISim from Xilinx ISE 14.1.
  • Vivado integrated simulator (versions from 2016.1 to 2020.1).
  • ModelSim (versions from PE 9.2B to PE 10.5C) from Intel Quartus Prime.

OpenNAS was conceived as a technology- and manufacturer-independent design in order to allow the community to use it with its preferred FPGA-based platform. According to our possibilities, and with the aim to provide technical support to the users, the OpenNAS output files hab been synthesized and tested in the following FPGA chips:

  • Xilinx Spartan 3.
  • Xilinx Virtex 5.
  • Xilinx Spartan 6.
  • Xilinx Artix 7.
  • Xilinx Kintex 7.
  • Xilinx Zynq-7000 SoC.
  • Xilinx Zynq UltraScale+ SoC.
  • Intel Cyclone IV.
  • Intel Cyclone V.
  • Intel Arria 10.
However, if you have successfully tried OpenNAS in any other device that does not appear in the list, please let us know. We will add it!

Installation

The first step to use OpenNAS software is to download the repository from the RTC-OpenNAS GitHub main webpage. Click on "Clone or download" button, and select "Download ZIP".

Download OpenNAS repository

When downloaded, extract the project. There is a main folder, OpenNAS, which contains the OpenNAS.sln file and the OpenNAS C# project folder. To run the OpenNAS software tool, open the OpenNAS project by clicking on OpenNAS.sln, and then the VisualStudio environment will be launched. Click on the "Start" button. Then, the Welcome window of the OpenNAS tool will appear.

OpenNAS tool usage flow

Usage

Once OpenNAS tool has been executed, and the Welcome screen appears, the user only needs to complete the five steps of the OpenNAS wizard to obtain the generated VHDL files.

OpenNAS wizard Welcome screen

The Welcome screen shows a brief text which indicates to the user what OpenNAS tool does and also the information about our research group. Click on Next button to move forward in the wizard.

OpenNAS wizard step_1 screen

The first step allows to the user to select the NAS common settings, which are the target FPGA chip and its clock frequency, if the NAS is MONO or STEREO, and the number of frequency channels. A picture of the FPGA-based board selected in NAS chip is shown to the user to quickly identify the needed hardware components.

OpenNAS wizard step_2 screen

In this step, the input audio source must be selected. There are several options, among which we can find the AC'97 audio codec, a pair of Pulse Density Modulation (PDM) microphones, and an I2S-based audio codec. Each input option has its own configuration parameters, which the user can set according to its project requirements.

OpenNAS wizard step_3 screen

NAS processing architecture is defined in step 3, where the user can choose either a cascade or parallel architecture. Besides, filters order and filters output attenuation can be set. Finally, the user can define a frequency range between which the NAS will work, set by default as the human audible sounds range (from 20Hz to 22KHz).

OpenNAS wizard step_4 screen

The output interface is selected in the fourth step. As in the most of the event-based neuromorphic devices, the AER protocol is used as output. For this reason, the AER monitor is used as output interface by default and then to connect our neuromorphic sensor to the application jAER and to be able to visualize the NAS output in real-time. However, it is also interesting to connect the NAS output to others neuromorphic hardware, as the SpiNNaker board, in which Spiking Neural Networks (SNN) can be deployed and it can get as input data the output spikes from the NAS.

OpenNAS wizard step_5 screen

Finally, when all previous steps have been done, the destination folder in which the VHDL files are going to be generated has to be selected by the user. It needs to create a new folder by hand, and then select it as the destination folder.

OpenNAS wizard success screen

A new message will appear if the generation process was done successfully, indicating the destination folder. Click on the Ok button to close the message. At this point, the process of the NAS generation has finished. Navigating to the destination folder, the user can find all the VHDL files needed to synthetize and generate the NAS .bit file and run it using an FPGA. Apart from VHDL files, OpenNAS also generates an XML file summarizing the parameters selection made by the user.

Post-processing

A set of post-processing tools are available to open, analyze, and post-process the output spikes of the NAS. The NAS' output can be logged into a file by using jAER. Then, the spikes file (with .aedat format) can be loaded using one of those tools:

  1. NAVIS: C# based desktop application (Windows only)
  2. pyNAVIS: python package (multiplatform)
Take a look to those repositories to learn more about neuromorphic audio processing!

Contributing

New functionalities or improvements to the existing project are welcome. To contribute to this project please follow these guidelines:

  1. Search previous suggestions before making a new one, as yours may be a duplicate.
  2. Fork the project.
  3. Create a branch.
  4. Commit your changes to improve the project.
  5. Push this branch to your GitHub project.
  6. Open a Pull Request.
  7. Discuss, and optionally continue committing.
  8. Wait untill the project owner merges or closes the Pull Request.
If it is a new feature request (e.g., a new functionality), post an issue to discuss this new feature before you start coding. If the project owner approves it, assign the issue to yourself and then do the steps above.

Thank you for contributing in the OpenN@S project!

Credits

The author of the OpenN@S' original idea is Angel F. Jimenez-Fernandez, and it is mainly based on the paper "A Binaural Neuromorphic Auditory Sensor for FPGA: A Spike Signal Processing Approach", which was published in 2017 in the journal Transactions on Neural Networks and Learning Systems.

The author would like to thank and give credit to:

  • Robotics and Technology of Computers Lab. from the University of Sevilla (Spain).
  • Advanced Processor Technologies group from the University of Manchester (UK), for letting us include the SpiNNaker-AER interface in this project.
  • Gabriel Jimenez-Moreno, for his support and contribution.

License

This project is licensed under the GPL License - see the LICENSE.md file for details. Third party software components are under MSPL license

Copyright © 2016 Ángel F. Jiménez-Fernández
[email protected]

License: GPL v3

Cite this work

APA: Gutierrez-Galan, D., Dominguez-Morales, J. P., Jimenez-Fernandez, A., Linares-Barranco, A., & Jimenez-Moreno, G. (2021). OpenNAS: Open Source Neuromorphic Auditory Sensor HDL code generator for FPGA implementations. Neurocomputing.

ISO 690: GUTIERREZ-GALAN, D., et al. OpenNAS: Open Source Neuromorphic Auditory Sensor HDL code generator for FPGA implementations. Neurocomputing, 2021.

MLA: Gutierrez-Galan, D., et al. "OpenNAS: Open Source Neuromorphic Auditory Sensor HDL code generator for FPGA implementations." Neurocomputing (2021).

BibTeX: @article{gutierrez2021opennas, title={OpenNAS: Open Source Neuromorphic Auditory Sensor HDL code generator for FPGA implementations}, author={Gutierrez-Galan, D and Dominguez-Morales, JP and Jimenez-Fernandez, A and Linares-Barranco, A and Jimenez-Moreno, G}, journal={Neurocomputing}, year={2021}, publisher={Elsevier} }

Cite NAS work

APA: Jiménez-Fernández, A., Cerezuela-Escudero, E., Miró-Amarante, L., Domínguez-Morales, M. J., Gomez-Rodriguez, F., Linares-Barranco, A., & Jiménez-Moreno, G. (2017). A Binaural Neuromorphic Auditory Sensor for FPGA: A Spike Signal Processing Approach. IEEE Trans. Neural Netw. Learning Syst., 28(4), 804-818.

ISO 690: JIMÉNEZ-FERNÁNDEZ, Angel, et al. A Binaural Neuromorphic Auditory Sensor for FPGA: A Spike Signal Processing Approach. IEEE Trans. Neural Netw. Learning Syst., 2017, vol. 28, no 4, p. 804-818.

MLA: Jiménez-Fernández, Angel, et al. "A Binaural Neuromorphic Auditory Sensor for FPGA: A Spike Signal Processing Approach." IEEE Trans. Neural Netw. Learning Syst. 28.4 (2017): 804-818.

BibTeX: @article{jimenez2017binaural, title={A Binaural Neuromorphic Auditory Sensor for FPGA: A Spike Signal Processing Approach.}, author={Jim{\'e}nez-Fern{\'a}ndez, Angel and Cerezuela-Escudero, Elena and Mir{\'o}-Amarante, Lourdes and Dom{\'\i}nguez-Morales, Manuel Jesus and Gomez-Rodriguez, Francisco and Linares-Barranco, Alejandro and Jim{\'e}nez-Moreno, Gabriel}, journal={IEEE Trans. Neural Netw. Learning Syst.}, volume={28}, number={4}, pages={804--818}, year={2017}

OpenNAS extended logo

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].