diff options
| author | Your Name <[email protected]> | 2026-08-28 13:42:10 -0700 |
|---|---|---|
| committer | Your Name <[email protected]> | 2026-08-28 13:42:10 -0700 |
| commit | 8671410a0f9bdd4b405762ad4790c15d601b0fba (patch) | |
| tree | 988a4169f731e680fa01d813b5be7294f1965339 /src/crossbar_generator.c | |
| parent | 50dbc1066944263e43c0bf4bc62f8a848e1e6eba (diff) | |
online crossbar inputs
Diffstat (limited to 'src/crossbar_generator.c')
| -rw-r--r-- | src/crossbar_generator.c | 50 |
1 files changed, 50 insertions, 0 deletions
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; +} |
