File size: 3,720 Bytes
aaed8c9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | #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"
// hls-fpga-machine-learning insert bram
#define CHECKPOINT 5000
namespace nnet {
bool trace_enabled = true;
std::map<std::string, void *> *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<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-fpga-machine-learning insert data
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");
// 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<result_t, 64*64*1>(layer40_out, std::cout, true);
}
e++;
// hls-fpga-machine-learning insert tb-output
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-fpga-machine-learning insert zero
hls::stream<input_t> x("x");
nnet::fill_zero<input_t, 1*64*64*1>(x);
hls::stream<result_t> 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<result_t, 64*64*1>(layer40_out, std::cout, true);
// hls-fpga-machine-learning insert tb-output
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;
}
|