diff options
author | Eddie Hung <eddie@fpgeh.com> | 2019-08-20 21:30:16 -0700 |
---|---|---|
committer | Eddie Hung <eddie@fpgeh.com> | 2019-08-20 21:30:16 -0700 |
commit | 8182cb9d91555d5be52abbfeeb5d22af05342d8a (patch) | |
tree | 0f464109754ad70093d12939e1b0b122889c4813 /backends/aiger/xaiger.cc | |
parent | 4d123b7638b7036da70de169d16d2ae21b89b8e2 (diff) | |
download | yosys-8182cb9d91555d5be52abbfeeb5d22af05342d8a.tar.gz yosys-8182cb9d91555d5be52abbfeeb5d22af05342d8a.tar.bz2 yosys-8182cb9d91555d5be52abbfeeb5d22af05342d8a.zip |
Fix omode which inserts an output if none exists (otherwise abc9 breaks)
Diffstat (limited to 'backends/aiger/xaiger.cc')
-rw-r--r-- | backends/aiger/xaiger.cc | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/backends/aiger/xaiger.cc b/backends/aiger/xaiger.cc index 0d69e0f13..8c8ff2f7e 100644 --- a/backends/aiger/xaiger.cc +++ b/backends/aiger/xaiger.cc @@ -504,16 +504,16 @@ struct XAigerWriter aig_outputs.push_back(bit2aig(bit)); } + if (output_bits.empty()) { + output_bits.insert(State::S0); + omode = true; + } + for (auto bit : output_bits) { ordered_outputs[bit] = aig_o++; aig_outputs.push_back(bit2aig(bit)); } - if (output_bits.empty()) { - aig_o++; - aig_outputs.push_back(0); - omode = true; - } } void write_aiger(std::ostream &f, bool ascii_mode) @@ -575,6 +575,7 @@ struct XAigerWriter f << "c"; + log_assert(!output_bits.empty()); auto write_buffer = [](std::stringstream &buffer, int i32) { int32_t i32_be = to_big_endian(i32); buffer.write(reinterpret_cast<const char*>(&i32_be), sizeof(i32_be)); @@ -796,11 +797,11 @@ struct XAigerWriter f << stringf("box %d %d %s\n", box_count++, 0, log_id(cell->name)); output_lines.sort(); + if (omode) + output_lines[State::S0] = "output 0 0 $__dummy__\n"; for (auto &it : output_lines) f << it.second; log_assert(output_lines.size() == output_bits.size()); - if (omode && output_bits.empty()) - f << "output " << output_lines.size() << " 0 $__dummy__\n"; wire_lines.sort(); for (auto &it : wire_lines) |