#include #include #include #include #include #include #include #include #include "firmware/myproject.h" #include "firmware/nnet_utils/nnet_helpers.h" // hls-fpga-machine-learning insert bram #define CHECKPOINT 5000 namespace nnet { bool trace_enabled = true; std::map *trace_outputs = NULL; size_t trace_type_size = sizeof(double); } // namespace nnet int main(int argc, char **argv) { // load input data from text file std::ifstream fin("tb_data/tb_input_features.dat"); // load predictions from text file 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(iline.c_str()); char *current; std::vector in; current = strtok(cstr, " "); while (current != NULL) { in.push_back(atof(current)); current = strtok(NULL, " "); } cstr = const_cast(pline.c_str()); std::vector pr; current = strtok(cstr, " "); while (current != NULL) { pr.push_back(atof(current)); current = strtok(NULL, " "); } // hls-fpga-machine-learning insert data hls::stream x("x"); nnet::copy_data(in, x); hls::stream layer40_out("layer40_out"); // hls-fpga-machine-learning insert top-level-function myproject(x,layer40_out); if (e % CHECKPOINT == 0) { std::cout << "Predictions" << std::endl; // hls-fpga-machine-learning insert predictions for(int i = 0; i < 64*64*1; i++) { std::cout << pr[i] << " "; } std::cout << std::endl; std::cout << "Quantized predictions" << std::endl; // hls-fpga-machine-learning insert quantized nnet::print_result(layer40_out, std::cout, true); } e++; // hls-fpga-machine-learning insert tb-output nnet::print_result(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-fpga-machine-learning insert zero hls::stream x("x"); nnet::fill_zero(x); hls::stream layer40_out("layer40_out"); // hls-fpga-machine-learning insert top-level-function myproject(x,layer40_out); // hls-fpga-machine-learning insert output nnet::print_result(layer40_out, std::cout, true); // hls-fpga-machine-learning insert tb-output nnet::print_result(layer40_out, fout); } } fout.close(); std::cout << "INFO: Saved inference results to file: " << RESULTS_LOG << std::endl; return 0; }