#include "fpga.h" #include "fpga_global.h" #include #include #include int fpga_generate_bitstream(struct fpga_chain *chain, char *filename, int ascii) { int i; char *buf = NULL; FILE *bitstream = stdout; if (strcmp(filename, "-")) { bitstream = fopen(filename, "wb"); } if (!bitstream) { report(LL_ERROR, "Could not open output file '%s'.", filename); errno = EIO; goto fail; } report(LL_INFO, "Generating bitstream..."); for (i = chain->length - 1; i >= 0; --i) { report(LL_DEBUG, "Generating bitstream for cell %p (%c)...", chain->head[i], chain->head[i]->type->identifier); buf = chain->head[i]->type->isp_generate_bitstream(chain->head[i]); if (!buf) { report(LL_ERROR, "Error during bitstream generation for cell %p.", chain->head[i]); errno = ETYPE; goto fail; } for (int j = 0; j < chain->head[i]->type->isp_length; ++j) { if (ascii) fprintf(bitstream, "%02X ", buf[j] & 0xFF); else fputc(buf[j] & 0xFF, bitstream); } if (ascii) fprintf(bitstream, "\n"); free(buf); } return 0; fail: if (bitstream && (strcmp(filename, "-"))) fclose(bitstream); return 1; }