Skip to content

This is an SoC design dedicated to Keyword Spotting (KWS) based on a neural-network accelerator and the wujian100 platform.

Notifications You must be signed in to change notification settings

pig-pig-yang/KWS-SoC

 
 

Repository files navigation

KWS-SoC

This is a SoC for neural-network acceleration based on wujian100_open platform, which is a low power open source MCU by T-Head. Specially, the accelerating kernel is designed for Keyword Spotting(KWS). Thus far, the current version is only for simulation.

QUICK START

This repository includes folders as following:
reference model:

  • my_audio.py: This is a python script for preprocessing data.
  • test_mymodel_myaudio.py: This is a python script to generate software comparison data.
  • test_list.txt: This file contains the label information of the test files in the dataset.
  • ds_rnn_labels.txt: This is a mapping table between results and labels.
  • data.dat: This is 40 groups of floating point input data after preprocessing.
  • result.dat: This is 40 groups of floating point result data after software computing.

tools:

  • float2hex.py: This is a script for transforming all 40 groups floating point input data into hex data and distributing to 40 test folders.
  • result_div.py: This is a script for distributing all 40 groups floating point reference result data into 40 test folders.
  • hex2float.py: This is a script for transforming each kws result hex data generated by KWS-SoC into floating point data, and displaying a result label.

soc: This folder includes source code of KWS-SoC.

tb: This folder includes testbench code of KWS-SoC.

wujiankws.*: These folders include Vivado project files, such as ip source codes and simulation scripts.

testdata: This folder includes test data sets.

test.pat: This is a hexadecimal file generated by compiling C file generation instruction and linking of wujian100 platform, which is used for core execution. The generation method of this file can refer to the wujian100_open

Step 1: Generate input data and reference result

  1. First you need to generate input hex data. You can run my_audio.py to generate a preprocessing .wav file. Then run test_mymodel_myaudio.py to generated input data and result data.
    The input data is generated in line 346
    fingerprints = my_audio.my_mfcc(my_spectrogram)
    And the result data is generated in line 350
    prob = sess.run(net.probs[0], feed_dict = {net.fingerprint_input: fingerprints_3d})
  2. Write the input data and result into a file. This can be done by fopen operation which has not been implemented in this project.
  3. Copy the data.dat and result.dat and into testdata folder.
  4. Copy and run float2hex.py and result_div.py. Transform and divide input data, also the result data into 40 groups of test folder.

Step 2: Run behavior simulation in Vivado

You may use Vivado 2019.2 or later version. Otherwise, there may be IP incompatibility problem.

Run behavior simulation and the testbench will dump the kws_result_data.txt into test folder.

  • To change the test data subset. You can modify the file number tb.v (in tb folder) line 289 and line 300. In default case, KWS-SoC will dump two groups of test data. If you want to change numbers of each excuation, you can modify this file. Also, you need to re-complile test.pat in origin wujian100_open

Also, you need to modify busmnt.v (in tb folder) line 118 and line 130 to change to dump path of result.

Step 3: Check the result

Copy hex2float.py in a test folder(For example, test8 in testdata folder), run this script, and this step will generate kws_result_data.txt transformed by hex file result_data_hex.txt, which is dumped by testbench. Also, this file displays a forecast result label in the last line.

About

This is an SoC design dedicated to Keyword Spotting (KWS) based on a neural-network accelerator and the wujian100 platform.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Verilog 65.1%
  • Coq 31.7%
  • C 2.5%
  • V 0.5%
  • Shell 0.1%
  • Max 0.1%