mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Added call_on_selection() and call_on_module() API
This commit is contained in:
		
							parent
							
								
									2e358bd667
								
							
						
					
					
						commit
						8d04ca7d22
					
				
					 4 changed files with 37 additions and 16 deletions
				
			
		|  | @ -198,11 +198,11 @@ void Pass::call(RTLIL::Design *design, std::vector<std::string> args) | |||
| 	design->check(); | ||||
| } | ||||
| 
 | ||||
| void Pass::call_newsel(RTLIL::Design *design, std::string command) | ||||
| void Pass::call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::string command) | ||||
| { | ||||
| 	std::string backup_selected_active_module = design->selected_active_module; | ||||
| 	design->selected_active_module.clear(); | ||||
| 	design->selection_stack.push_back(RTLIL::Selection()); | ||||
| 	design->selection_stack.push_back(selection); | ||||
| 
 | ||||
| 	Pass::call(design, command); | ||||
| 
 | ||||
|  | @ -210,11 +210,37 @@ void Pass::call_newsel(RTLIL::Design *design, std::string command) | |||
| 	design->selected_active_module = backup_selected_active_module; | ||||
| } | ||||
| 
 | ||||
| void Pass::call_newsel(RTLIL::Design *design, std::vector<std::string> args) | ||||
| void Pass::call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::vector<std::string> args) | ||||
| { | ||||
| 	std::string backup_selected_active_module = design->selected_active_module; | ||||
| 	design->selected_active_module.clear(); | ||||
| 	design->selection_stack.push_back(RTLIL::Selection()); | ||||
| 	design->selection_stack.push_back(selection); | ||||
| 
 | ||||
| 	Pass::call(design, args); | ||||
| 
 | ||||
| 	design->selection_stack.pop_back(); | ||||
| 	design->selected_active_module = backup_selected_active_module; | ||||
| } | ||||
| 
 | ||||
| void Pass::call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::string command) | ||||
| { | ||||
| 	std::string backup_selected_active_module = design->selected_active_module; | ||||
| 	design->selected_active_module = module->name; | ||||
| 	design->selection_stack.push_back(RTLIL::Selection(false)); | ||||
| 	design->selection_stack.back().select(module); | ||||
| 
 | ||||
| 	Pass::call(design, command); | ||||
| 
 | ||||
| 	design->selection_stack.pop_back(); | ||||
| 	design->selected_active_module = backup_selected_active_module; | ||||
| } | ||||
| 
 | ||||
| void Pass::call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::vector<std::string> args) | ||||
| { | ||||
| 	std::string backup_selected_active_module = design->selected_active_module; | ||||
| 	design->selected_active_module = module->name; | ||||
| 	design->selection_stack.push_back(RTLIL::Selection(false)); | ||||
| 	design->selection_stack.back().select(module); | ||||
| 
 | ||||
| 	Pass::call(design, args); | ||||
| 
 | ||||
|  |  | |||
|  | @ -60,8 +60,11 @@ struct Pass | |||
| 	static void call(RTLIL::Design *design, std::string command); | ||||
| 	static void call(RTLIL::Design *design, std::vector<std::string> args); | ||||
| 
 | ||||
| 	static void call_newsel(RTLIL::Design *design, std::string command); | ||||
| 	static void call_newsel(RTLIL::Design *design, std::vector<std::string> args); | ||||
| 	static void call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::string command); | ||||
| 	static void call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::vector<std::string> args); | ||||
| 
 | ||||
| 	static void call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::string command); | ||||
| 	static void call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::vector<std::string> args); | ||||
| 
 | ||||
| 	static void init_register(); | ||||
| 	static void done_register(); | ||||
|  |  | |||
|  | @ -338,7 +338,7 @@ struct SubmodPass : public Pass { | |||
| 			if (module == NULL) | ||||
| 				log("Nothing selected -> do nothing.\n"); | ||||
| 			else { | ||||
| 				Pass::call_newsel(design, stringf("opt_clean %s", module->name.c_str())); | ||||
| 				Pass::call_on_module(design, module, "opt_clean"); | ||||
| 				log_header("Continuing SUBMOD pass.\n"); | ||||
| 				SubmodWorker worker(design, module, opt_name); | ||||
| 			} | ||||
|  |  | |||
|  | @ -393,15 +393,7 @@ struct TechmapWorker | |||
| 							tpl->add(data.wire); | ||||
| 
 | ||||
| 							std::string cmd_string = data.value.as_const().decode_string(); | ||||
| 
 | ||||
| 							RTLIL::Selection tpl_mod_sel(false); | ||||
| 							std::string backup_active_module = map->selected_active_module; | ||||
| 							map->selected_active_module = tpl->name; | ||||
| 							tpl_mod_sel.select(tpl); | ||||
| 							map->selection_stack.push_back(tpl_mod_sel); | ||||
| 							Pass::call(map, cmd_string); | ||||
| 							map->selection_stack.pop_back(); | ||||
| 							map->selected_active_module = backup_active_module; | ||||
| 							Pass::call_on_module(map, tpl, cmd_string); | ||||
| 
 | ||||
| 							keep_running = true; | ||||
| 							break; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue