From 337b461d26f3cdc34f4a2b6c49d61427ef10ef96 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Sat, 22 Feb 2014 14:25:32 +0100 Subject: [PATCH] Added $lut support to blif backend (by user eddiehung from reddit) --- backends/blif/blif.cc | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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++) { -- 2.30.2