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.
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
- First you need to generate input hex data. You can run
my_audio.py
to generate a preprocessing .wav file. Then runtest_mymodel_myaudio.py
to generated input data and result data.
The input data is generated inline 346
fingerprints = my_audio.my_mfcc(my_spectrogram)
And the result data is generated inline 350
prob = sess.run(net.probs[0], feed_dict = {net.fingerprint_input: fingerprints_3d})
- Write the input data and result into a file. This can be done by
fopen
operation which has not been implemented in this project. - Copy the
data.dat
andresult.dat
and into testdata folder. - Copy and run
float2hex.py
andresult_div.py
. Transform and divide input data, also the result data into 40 groups of test folder.
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
(intb
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-compliletest.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.
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.