#ifndef MYPROJECT_BRIDGE_H_ #define MYPROJECT_BRIDGE_H_ #include "firmware/myproject.h" #include "firmware/nnet_utils/nnet_helpers.h" #include #include // hls-fpga-machine-learning insert bram namespace nnet { bool trace_enabled = false; std::map *trace_outputs = NULL; size_t trace_type_size = sizeof(double); } // namespace nnet extern "C" { struct trace_data { const char *name; void *data; }; void allocate_trace_storage(size_t element_size) { nnet::trace_enabled = true; nnet::trace_outputs = new std::map; nnet::trace_type_size = element_size; } void free_trace_storage() { for (std::map::iterator i = nnet::trace_outputs->begin(); i != nnet::trace_outputs->end(); i++) { void *ptr = i->second; free(ptr); } nnet::trace_outputs->clear(); delete nnet::trace_outputs; nnet::trace_outputs = NULL; nnet::trace_enabled = false; } void collect_trace_output(struct trace_data *c_trace_outputs) { int ii = 0; for (std::map::iterator i = nnet::trace_outputs->begin(); i != nnet::trace_outputs->end(); i++) { c_trace_outputs[ii].name = i->first.c_str(); c_trace_outputs[ii].data = i->second; ii++; } } // hls-fpga-machine-learning insert tb_input_writer // Wrapper of top level function for Python bridge void myproject_float( float *x, float *layer40_out ) { hls::stream x_ap("x"); nnet::convert_data(x, x_ap); hls::stream layer40_out_ap("layer40_out"); myproject(x_ap,layer40_out_ap); nnet::convert_data(layer40_out_ap, layer40_out); } void myproject_double( double *x, double *layer40_out ) { hls::stream x_ap("x"); nnet::convert_data(x, x_ap); hls::stream layer40_out_ap("layer40_out"); myproject(x_ap,layer40_out_ap); nnet::convert_data(layer40_out_ap, layer40_out); } } #endif