summaryrefslogtreecommitdiff
path: root/src/online_crossbar.h
blob: f89a3068906e721fec274c9bbc44586a5af5f62d (plain)
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
#ifndef ONLINE_CROSSBAR_H
#define ONLINE_CROSSBAR_H

#include "spires_interface.h"
#include <stddef.h>

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