summaryrefslogtreecommitdiff
path: root/src/online_crossbar.h
diff options
context:
space:
mode:
authorYour Name <[email protected]>2026-08-28 13:42:10 -0700
committerYour Name <[email protected]>2026-08-28 13:42:10 -0700
commit8671410a0f9bdd4b405762ad4790c15d601b0fba (patch)
tree988a4169f731e680fa01d813b5be7294f1965339 /src/online_crossbar.h
parent50dbc1066944263e43c0bf4bc62f8a848e1e6eba (diff)
online crossbar inputs
Diffstat (limited to 'src/online_crossbar.h')
-rw-r--r--src/online_crossbar.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/online_crossbar.h b/src/online_crossbar.h
new file mode 100644
index 0000000..f89a306
--- /dev/null
+++ b/src/online_crossbar.h
@@ -0,0 +1,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