From: Clifford Wolf Date: Sat, 22 Feb 2014 13:25:32 +0000 (+0100) Subject: Added $lut support to blif backend (by user eddiehung from reddit) X-Git-Tag: yosys-0.3.0~112 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=337b461d26f3cdc34f4a2b6c49d61427ef10ef96;p=yosys.git Added $lut support to blif backend (by user eddiehung from reddit) --- diff --git a/backends/blif/blif.cc b/backends/blif/blif.cc index 1c06fe519..498f13511 100644 --- a/backends/blif/blif.cc +++ b/backends/blif/blif.cc @@ -190,6 +190,29 @@ struct BlifDumper continue; } + if (!config->icells_mode && cell->type == "$lut") { + fprintf(f, ".names"); + auto &inputs = cell->connections.at("\\I"); + auto width = cell->parameters.at("\\WIDTH").as_int(); + log_assert(inputs.width == width); + for (int i = 0; i < inputs.width; i++) { + fprintf(f, " %s", cstr(inputs.extract(i, 1))); + } + auto &output = cell->connections.at("\\O"); + log_assert(output.width == 1); + fprintf(f, " %s", cstr(output)); + fprintf(f, "\n"); + auto mask = cell->parameters.at("\\LUT").as_string(); + for (int i = 0; i < (1 << width); i++) { + if (mask[i] == '0') continue; + for (int j = width-1; j >= 0; j--) { + fputc((i>>j)&1 ? '1' : '0', f); + } + fprintf(f, " %c\n", mask[i]); + } + continue; + } + fprintf(f, ".%s %s", subckt_or_gate(cell->type), cstr(cell->type)); for (auto &conn : cell->connections) for (int i = 0; i < conn.second.width; i++) {