diff options
| -rw-r--r-- | backends/aiger/xaiger.cc | 6 | ||||
| -rw-r--r-- | tests/various/abc9.ys | 15 | 
2 files changed, 18 insertions, 3 deletions
diff --git a/backends/aiger/xaiger.cc b/backends/aiger/xaiger.cc index a9b75ecc7..b72dd6890 100644 --- a/backends/aiger/xaiger.cc +++ b/backends/aiger/xaiger.cc @@ -222,6 +222,8 @@ struct XAigerWriter  					alias_map[Q] = D;  					auto r YS_ATTRIBUTE(unused) = ff_bits.insert(std::make_pair(D, cell));  					log_assert(r.second); +					if (input_bits.erase(Q)) +						log_assert(Q.wire->attributes.count(ID::keep));  					continue;  				} @@ -568,9 +570,6 @@ struct XAigerWriter  		//	write_o_buffer(0);  		if (!box_list.empty() || !ff_bits.empty()) { -			RTLIL::Module *holes_module = module->design->module(stringf("%s$holes", module->name.c_str())); -			log_assert(holes_module); -  			dict<IdString, std::tuple<int,int,int>> cell_cache;  			int box_count = 0; @@ -653,6 +652,7 @@ struct XAigerWriter  			f.write(reinterpret_cast<const char*>(&buffer_size_be), sizeof(buffer_size_be));  			f.write(buffer_str.data(), buffer_str.size()); +			RTLIL::Module *holes_module = module->design->module(stringf("%s$holes", module->name.c_str()));  			if (holes_module) {  				std::stringstream a_buffer;  				XAigerWriter writer(holes_module, true /* holes_mode */); diff --git a/tests/various/abc9.ys b/tests/various/abc9.ys index 81d0afd1b..0c7695089 100644 --- a/tests/various/abc9.ys +++ b/tests/various/abc9.ys @@ -14,6 +14,7 @@ design -import gate -as gate  miter -equiv -flatten -make_assert -make_outputs gold gate miter  sat -verify -prove-asserts -show-ports miter +  design -load read  hierarchy -top abc9_test028  proc @@ -23,6 +24,7 @@ select -assert-count 1 t:$lut r:LUT=2'b01 r:WIDTH=1 %i %i  select -assert-count 1 t:unknown  select -assert-none t:$lut t:unknown %% t: %D +  design -load read  hierarchy -top abc9_test032  proc @@ -38,3 +40,16 @@ design -import gate -as gate  miter -equiv -flatten -make_assert -make_outputs gold gate miter  sat -seq 10 -verify -prove-asserts -show-ports miter + + +design -reset +read_verilog -icells <<EOT +module abc9_test036(input clk, d, output q); +(* keep *) reg w; +$__ABC9_FF_ ff(.D(d), .Q(w)); +wire \ff.clock = clk; +wire \ff.init = 1'b0; +assign q = w; +endmodule +EOT +abc9 -lut 4 -dff  | 
