#ifndef ONLINE_CROSSBAR_H #define ONLINE_CROSSBAR_H #include "spires_interface.h" #include typedef struct Online_Crossbar Online_Crossbar; typedef struct { size_t num_neurons; size_t num_outputs; size_t num_timesteps; double time_step; double spike_amplitude; double load_resistance; double r_on; double r_off; const char *model_path; const char *subcircuit_name; const char *netlist_path; } Online_Crossbar_Config; int online_crossbar_init(const Online_Crossbar_Config *config, const spires_reservoir *reservoir, Online_Crossbar **crossbar_out); int online_crossbar_start(Online_Crossbar *crossbar); /* * Submit state[t]. On return, output_ready is zero for t=0 and otherwise * previous_output contains output[t-1]. Calls apply bounded backpressure. */ int online_crossbar_submit(Online_Crossbar *crossbar, size_t timestep, const double *state, double *previous_output, int *output_ready); /* Wait for and copy the output belonging to the final submitted state. */ int online_crossbar_finish(Online_Crossbar *crossbar, double *final_output); void online_crossbar_destroy(Online_Crossbar *crossbar); #endif