mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Cleanup abc9.cc
This commit is contained in:
		
							parent
							
								
									fb30fcb7c5
								
							
						
					
					
						commit
						6bf73e3546
					
				
					 1 changed files with 17 additions and 15 deletions
				
			
		|  | @ -80,7 +80,7 @@ void handle_loops(RTLIL::Design *design) | |||
| { | ||||
| 	Pass::call(design, "scc -set_attr abc_scc_id {}"); | ||||
| 
 | ||||
|         dict<IdString, vector<IdString>> module_break; | ||||
|         dict<IdString, vector<IdString>> abc_scc_break; | ||||
| 
 | ||||
| 	// For every unique SCC found, (arbitrarily) find the first
 | ||||
| 	// cell in the component, and select (and mark) all its output
 | ||||
|  | @ -116,12 +116,11 @@ void handle_loops(RTLIL::Design *design) | |||
| 			cell->attributes.erase(it); | ||||
| 		} | ||||
| 
 | ||||
| 		auto jt = module_break.find(cell->type); | ||||
| 		if (jt == module_break.end()) { | ||||
| 		auto jt = abc_scc_break.find(cell->type); | ||||
| 		if (jt == abc_scc_break.end()) { | ||||
| 			std::vector<IdString> ports; | ||||
| 			if (!yosys_celltypes.cell_known(cell->type)) { | ||||
| 				RTLIL::Module* box_module = design->module(cell->type); | ||||
| 				log_assert(box_module); | ||||
| 			RTLIL::Module* box_module = design->module(cell->type); | ||||
| 			if (box_module) { | ||||
| 				auto ports_csv = box_module->attributes.at("\\abc_scc_break", RTLIL::Const::from_string("")).decode_string(); | ||||
| 				for (const auto &port_name : split_tokens(ports_csv, ",")) { | ||||
| 					auto port_id = RTLIL::escape_id(port_name); | ||||
|  | @ -131,7 +130,7 @@ void handle_loops(RTLIL::Design *design) | |||
| 					ports.push_back(port_id); | ||||
| 				} | ||||
| 			} | ||||
| 			jt = module_break.insert(std::make_pair(cell->type, std::move(ports))).first; | ||||
| 			jt = abc_scc_break.insert(std::make_pair(cell->type, std::move(ports))).first; | ||||
| 		} | ||||
| 
 | ||||
| 		for (auto port_name : jt->second) { | ||||
|  | @ -554,17 +553,20 @@ void abc9_module(RTLIL::Design *design, RTLIL::Module *current_module, std::stri | |||
| 			signal = std::move(bits); | ||||
| 		} | ||||
| 
 | ||||
| 		dict<IdString, bool> abc_box; | ||||
| 		vector<RTLIL::Cell*> boxes; | ||||
| 		for (auto it = module->cells_.begin(); it != module->cells_.end(); ) { | ||||
| 			RTLIL::Cell* cell = it->second; | ||||
| 			if (cell->type.in("$_AND_", "$_NOT_", "$__ABC_FF_")) { | ||||
| 				it = module->remove(it); | ||||
| 		for (auto cell : module->cells()) { | ||||
| 			if (cell->type.in("$_AND_", "$_NOT_")) { | ||||
| 				module->remove(cell); | ||||
| 				continue; | ||||
| 			} | ||||
| 			RTLIL::Module* box_module = design->module(cell->type); | ||||
| 			if (box_module && box_module->attributes.count("\\abc_box_id")) | ||||
| 				boxes.emplace_back(it->second); | ||||
| 			++it; | ||||
| 			auto it = abc_box.find(cell->type); | ||||
| 			if (it == abc_box.end()) { | ||||
| 				RTLIL::Module* box_module = design->module(cell->type); | ||||
| 				it = abc_box.insert(std::make_pair(cell->type, box_module && box_module->attributes.count("\\abc_box_id"))).first; | ||||
| 			} | ||||
| 			if (it->second) | ||||
| 				boxes.emplace_back(cell); | ||||
| 		} | ||||
| 
 | ||||
| 		std::map<std::string, int> cell_stats; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue