diff options
| author | Eddie Hung <eddie@fpgeh.com> | 2019-08-20 11:57:52 -0700 | 
|---|---|---|
| committer | Eddie Hung <eddie@fpgeh.com> | 2019-08-20 11:57:52 -0700 | 
| commit | d9fe4cccbf3cc03fa57b177fd13c6e900a2134f7 (patch) | |
| tree | aceb37b755f6b112e754bbdd50f0a4a6a6ee111d /backends/aiger | |
| parent | 297a9802122817e143b1e4b87fd0d4e357606a72 (diff) | |
| parent | 3f4886e7a3ff14578b9c6d614efd360478e5886e (diff) | |
| download | yosys-d9fe4cccbf3cc03fa57b177fd13c6e900a2134f7.tar.gz yosys-d9fe4cccbf3cc03fa57b177fd13c6e900a2134f7.tar.bz2 yosys-d9fe4cccbf3cc03fa57b177fd13c6e900a2134f7.zip  | |
Merge remote-tracking branch 'origin/master' into eddie/synth_xilinx
Diffstat (limited to 'backends/aiger')
| -rw-r--r-- | backends/aiger/xaiger.cc | 43 | 
1 files changed, 24 insertions, 19 deletions
diff --git a/backends/aiger/xaiger.cc b/backends/aiger/xaiger.cc index 69f63486c..5e12e9a34 100644 --- a/backends/aiger/xaiger.cc +++ b/backends/aiger/xaiger.cc @@ -53,7 +53,7 @@ PRIVATE_NAMESPACE_BEGIN  inline int32_t to_big_endian(int32_t i32) {  #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ -	return __builtin_bswap32(i32); +	return bswap32(i32);  #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__  	return i32;  #else @@ -312,7 +312,7 @@ struct XAigerWriter  #if 0  			toposort.analyze_loops = true;  #endif -			bool no_loops = toposort.sort(); +			bool no_loops YS_ATTRIBUTE(unused) = toposort.sort();  #if 0  			unsigned i = 0;  			for (auto &it : toposort.loops) { @@ -388,11 +388,11 @@ struct XAigerWriter  						RTLIL::SigSpec rhs;  						if (it != cell->connections_.end()) {  							if (GetSize(it->second) < GetSize(w)) -								it->second.append(RTLIL::SigSpec(RTLIL::S0, GetSize(w)-GetSize(it->second))); +								it->second.append(RTLIL::SigSpec(State::S0, GetSize(w)-GetSize(it->second)));  							rhs = it->second;  						}  						else { -							rhs = RTLIL::SigSpec(RTLIL::S0, GetSize(w)); +							rhs = RTLIL::SigSpec(State::S0, GetSize(w));  							cell->setPort(port_name, rhs);  						} @@ -400,10 +400,10 @@ struct XAigerWriter  						for (auto b : rhs.bits()) {  							SigBit I = sigmap(b);  							if (b == RTLIL::Sx) -								b = RTLIL::S0; +								b = State::S0;  							else if (I != b) {  								if (I == RTLIL::Sx) -									alias_map[b] = RTLIL::S0; +									alias_map[b] = State::S0;  								else  									alias_map[b] = I;  							} @@ -610,19 +610,18 @@ struct XAigerWriter  			std::stringstream h_buffer;  			auto write_h_buffer = std::bind(write_buffer, std::ref(h_buffer), std::placeholders::_1);  			write_h_buffer(1); -			log_debug("ciNum = %zu\n", input_bits.size() + ci_bits.size()); +			log_debug("ciNum = %d\n", GetSize(input_bits) + GetSize(ci_bits));  			write_h_buffer(input_bits.size() + ci_bits.size()); -			log_debug("coNum = %zu\n", output_bits.size() + co_bits.size()); +			log_debug("coNum = %d\n", GetSize(output_bits) + GetSize(co_bits));  			write_h_buffer(output_bits.size() + co_bits.size()); -			log_debug("piNum = %zu\n", input_bits.size()); +			log_debug("piNum = %d\n", GetSize(input_bits));  			write_h_buffer(input_bits.size()); -			log_debug("poNum = %zu\n", output_bits.size()); +			log_debug("poNum = %d\n", GetSize(output_bits));  			write_h_buffer(output_bits.size()); -			log_debug("boxNum = %zu\n", box_list.size()); +			log_debug("boxNum = %d\n", GetSize(box_list));  			write_h_buffer(box_list.size()); -			RTLIL::Module *holes_module = nullptr; -			holes_module = module->design->addModule("$__holes__"); +			RTLIL::Module *holes_module = module->design->addModule("$__holes__");  			log_assert(holes_module);  			int port_id = 1; @@ -672,7 +671,7 @@ struct XAigerWriter  							if (holes_cell)  								port_wire.append(holes_wire);  							else -								holes_module->connect(holes_wire, RTLIL::S0); +								holes_module->connect(holes_wire, State::S0);  						}  						if (!port_wire.empty())  							holes_cell->setPort(w->name, port_wire); @@ -719,27 +718,33 @@ struct XAigerWriter  				Pass::call(holes_module->design, "flatten -wb");  				// TODO: Should techmap/aigmap/check all lib_whitebox-es just once, -				// instead of per write_xaiger call +				//       instead of per write_xaiger call  				Pass::call(holes_module->design, "techmap");  				Pass::call(holes_module->design, "aigmap");  				for (auto cell : holes_module->cells())  					if (!cell->type.in("$_NOT_", "$_AND_"))  						log_error("Whitebox contents cannot be represented as AIG. Please verify whiteboxes are synthesisable.\n"); -				Pass::call(holes_module->design, "clean -purge"); +				holes_module->design->selection_stack.pop_back(); + +				// Move into a new (temporary) design so that "clean" will only +				// operate (and run checks on) this one module +				RTLIL::Design *holes_design = new RTLIL::Design; +				holes_module->design->modules_.erase(holes_module->name); +				holes_design->add(holes_module); +				Pass::call(holes_design, "clean -purge");  				std::stringstream a_buffer;  				XAigerWriter writer(holes_module, true /* holes_mode */);  				writer.write_aiger(a_buffer, false /*ascii_mode*/); -				holes_module->design->selection_stack.pop_back(); +				delete holes_design;  				f << "a";  				std::string buffer_str = a_buffer.str();  				int32_t buffer_size_be = to_big_endian(buffer_str.size());  				f.write(reinterpret_cast<const char*>(&buffer_size_be), sizeof(buffer_size_be));  				f.write(buffer_str.data(), buffer_str.size()); -				holes_module->design->remove(holes_module);  				log_pop();  			} @@ -772,7 +777,7 @@ struct XAigerWriter  				if (output_bits.count(b)) {  					int o = ordered_outputs.at(b); -					output_lines[o] += stringf("output %lu %d %s\n", o - co_bits.size(), i, log_id(wire)); +					output_lines[o] += stringf("output %d %d %s\n", o - GetSize(co_bits), i, log_id(wire));  					continue;  				}  | 
