| #include <algorithm> |
| #include <fstream> |
| #include <iostream> |
| #include <map> |
| #include <math.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <vector> |
|
|
| #include "firmware/myproject.h" |
| #include "firmware/nnet_utils/nnet_helpers.h" |
|
|
| |
|
|
| #define CHECKPOINT 5000 |
|
|
| namespace nnet { |
| bool trace_enabled = true; |
| std::map<std::string, void *> *trace_outputs = NULL; |
| size_t trace_type_size = sizeof(double); |
| } |
|
|
| int main(int argc, char **argv) { |
|
|
| |
| std::ifstream fin("tb_data/tb_input_features.dat"); |
| |
| std::ifstream fpr("tb_data/tb_output_predictions.dat"); |
|
|
| #ifdef RTL_SIM |
| std::string RESULTS_LOG = "tb_data/rtl_cosim_results.log"; |
| #else |
| std::string RESULTS_LOG = "tb_data/csim_results.log"; |
| #endif |
| std::ofstream fout(RESULTS_LOG); |
|
|
| std::string iline; |
| std::string pline; |
| int e = 0; |
|
|
| if (fin.is_open() && fpr.is_open()) { |
| while (std::getline(fin, iline) && std::getline(fpr, pline)) { |
| if (e % CHECKPOINT == 0) |
| std::cout << "Processing input " << e << std::endl; |
| char *cstr = const_cast<char *>(iline.c_str()); |
| char *current; |
| std::vector<float> in; |
| current = strtok(cstr, " "); |
| while (current != NULL) { |
| in.push_back(atof(current)); |
| current = strtok(NULL, " "); |
| } |
| cstr = const_cast<char *>(pline.c_str()); |
| std::vector<float> pr; |
| current = strtok(cstr, " "); |
| while (current != NULL) { |
| pr.push_back(atof(current)); |
| current = strtok(NULL, " "); |
| } |
|
|
| |
| hls::stream<input_t> x("x"); |
| nnet::copy_data<float, input_t, 0, 1*64*64*1>(in, x); |
| hls::stream<result_t> layer40_out("layer40_out"); |
|
|
| |
| myproject(x,layer40_out); |
|
|
| if (e % CHECKPOINT == 0) { |
| std::cout << "Predictions" << std::endl; |
| |
| for(int i = 0; i < 64*64*1; i++) { |
| std::cout << pr[i] << " "; |
| } |
| std::cout << std::endl; |
| std::cout << "Quantized predictions" << std::endl; |
| |
| nnet::print_result<result_t, 64*64*1>(layer40_out, std::cout, true); |
| } |
| e++; |
|
|
| |
| nnet::print_result<result_t, 64*64*1>(layer40_out, fout); |
| } |
| fin.close(); |
| fpr.close(); |
| } else { |
| std::cout << "INFO: Unable to open input/predictions file, using default input." << std::endl; |
| const unsigned NUM_TEST_SAMPLES = 5; |
| for (unsigned i = 0; i < NUM_TEST_SAMPLES; i++) { |
| |
| hls::stream<input_t> x("x"); |
| nnet::fill_zero<input_t, 1*64*64*1>(x); |
| hls::stream<result_t> layer40_out("layer40_out"); |
|
|
| |
| myproject(x,layer40_out); |
|
|
| |
| nnet::print_result<result_t, 64*64*1>(layer40_out, std::cout, true); |
|
|
| |
| nnet::print_result<result_t, 64*64*1>(layer40_out, fout); |
| } |
| } |
|
|
| fout.close(); |
| std::cout << "INFO: Saved inference results to file: " << RESULTS_LOG << std::endl; |
|
|
| return 0; |
| } |
|
|