From 8671410a0f9bdd4b405762ad4790c15d601b0fba Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 28 Aug 2026 13:42:10 -0700 Subject: online crossbar inputs --- src/crossbar_generator.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'src/crossbar_generator.c') diff --git a/src/crossbar_generator.c b/src/crossbar_generator.c index 4e0b935..4bf6746 100644 --- a/src/crossbar_generator.c +++ b/src/crossbar_generator.c @@ -86,6 +86,19 @@ static int write_input_series(FILE *file, const Crossbar_Config *config) return ferror(file) ? -1 : 0; } +static int write_external_inputs(FILE *file, const Crossbar_Config *config) +{ + if (fprintf(file, "\n* Online SPIRES reservoir states\n") < 0) + return -1; + + for (size_t row = 0; row < config->rows; row++) { + if (fprintf(file, "VROW%zu row%zu 0 dc 0 external\n", row, + row) < 0) + return -1; + } + return 0; +} + static int write_memristor_array(FILE *file, const Crossbar_Config *config) { if (fprintf(file, "\n* Memristor Array\n") < 0) { @@ -201,3 +214,40 @@ int generate_crossbar(const char *output_filename, } return 0; } + +int generate_online_crossbar(const char *output_filename, + const Crossbar_Config *config) +{ + if (validate_config(config) < 0) { + fprintf(stderr, "invalid config"); + return -1; + } + + FILE *file = fopen(output_filename, "w"); + if (file == NULL) { + fprintf(stderr, "could not create online crossbar file"); + return -1; + } + + if (write_header(file, config) != 0 || + write_external_inputs(file, config) != 0 || + write_memristor_array(file, config) != 0 || + write_column_loads(file, config) != 0 || + fprintf(file, "\n* Online simulation\n.tran %.17g %.17g uic\n", + config->time_step, config->stop_time) < 0 || + fprintf(file, ".save time") < 0) { + fclose(file); + return -1; + } + + for (size_t column = 0; column < config->columns; column++) { + if (fprintf(file, " v(col%zu)", column) < 0) { + fclose(file); + return -1; + } + } + + if (fprintf(file, "\n.end\n") < 0 || fclose(file) != 0) + return -1; + return 0; +} -- cgit v1.2.3