diff options
author | Clifford Wolf <clifford@clifford.at> | 2014-02-22 14:25:32 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2014-02-22 14:25:32 +0100 |
commit | 337b461d26f3cdc34f4a2b6c49d61427ef10ef96 (patch) | |
tree | b182b4a4f11846dbc267a960e84561b7b2eb0bab /backends | |
parent | 357f3f6e93df1ebf2aa28a6c433a84f320fad043 (diff) | |
download | yosys-337b461d26f3cdc34f4a2b6c49d61427ef10ef96.tar.gz yosys-337b461d26f3cdc34f4a2b6c49d61427ef10ef96.tar.bz2 yosys-337b461d26f3cdc34f4a2b6c49d61427ef10ef96.zip |
Added $lut support to blif backend (by user eddiehung from reddit)
Diffstat (limited to 'backends')
-rw-r--r-- | backends/blif/blif.cc | 23 |
1 files changed, 23 insertions, 0 deletions
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++) { |