mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Added some additional checks to techmap
This commit is contained in:
		
							parent
							
								
									a9b11d7c83
								
							
						
					
					
						commit
						6d63f39eb6
					
				
					 1 changed files with 14 additions and 0 deletions
				
			
		|  | @ -293,11 +293,16 @@ struct TechmapWorker | ||||||
| 					bool keep_running = true; | 					bool keep_running = true; | ||||||
| 					techmap_do_cache[tpl] = true; | 					techmap_do_cache[tpl] = true; | ||||||
| 
 | 
 | ||||||
|  | 					std::set<std::string> techmap_wire_names; | ||||||
|  | 
 | ||||||
| 					while (keep_running) | 					while (keep_running) | ||||||
| 					{ | 					{ | ||||||
| 						TechmapWires twd = techmap_find_special_wires(tpl); | 						TechmapWires twd = techmap_find_special_wires(tpl); | ||||||
| 						keep_running = false; | 						keep_running = false; | ||||||
| 
 | 
 | ||||||
|  | 						for (auto &it : twd) | ||||||
|  | 							techmap_wire_names.insert(it.first); | ||||||
|  | 
 | ||||||
| 						for (auto &it : twd["_TECHMAP_FAIL_"]) { | 						for (auto &it : twd["_TECHMAP_FAIL_"]) { | ||||||
| 							RTLIL::SigSpec value = it.value; | 							RTLIL::SigSpec value = it.value; | ||||||
| 							if (value.is_fully_const() && value.as_bool()) { | 							if (value.is_fully_const() && value.as_bool()) { | ||||||
|  | @ -320,7 +325,9 @@ struct TechmapWorker | ||||||
| 							if (!data.value.is_fully_const()) | 							if (!data.value.is_fully_const()) | ||||||
| 								log_error("Techmap yielded config wire %s with non-const value %s.\n", RTLIL::id2cstr(data.wire->name), log_signal(data.value)); | 								log_error("Techmap yielded config wire %s with non-const value %s.\n", RTLIL::id2cstr(data.wire->name), log_signal(data.value)); | ||||||
| 
 | 
 | ||||||
|  | 							techmap_wire_names.erase(it.first); | ||||||
| 							tpl->wires.erase(data.wire->name); | 							tpl->wires.erase(data.wire->name); | ||||||
|  | 
 | ||||||
| 							const char *p = data.wire->name.c_str(); | 							const char *p = data.wire->name.c_str(); | ||||||
| 							const char *q = strrchr(p+1, '.'); | 							const char *q = strrchr(p+1, '.'); | ||||||
| 							q = q ? q : p+1; | 							q = q ? q : p+1; | ||||||
|  | @ -335,10 +342,13 @@ struct TechmapWorker | ||||||
| 							std::string cmd_string = data.value.as_const().decode_string(); | 							std::string cmd_string = data.value.as_const().decode_string(); | ||||||
| 
 | 
 | ||||||
| 							RTLIL::Selection tpl_mod_sel(false); | 							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); | 							tpl_mod_sel.select(tpl); | ||||||
| 							map->selection_stack.push_back(tpl_mod_sel); | 							map->selection_stack.push_back(tpl_mod_sel); | ||||||
| 							Pass::call(map, cmd_string); | 							Pass::call(map, cmd_string); | ||||||
| 							map->selection_stack.pop_back(); | 							map->selection_stack.pop_back(); | ||||||
|  | 							map->selected_active_module = backup_active_module; | ||||||
| 
 | 
 | ||||||
| 							keep_running = true; | 							keep_running = true; | ||||||
| 							break; | 							break; | ||||||
|  | @ -353,7 +363,11 @@ struct TechmapWorker | ||||||
| 							for (auto &it2 : it.second) | 							for (auto &it2 : it.second) | ||||||
| 								if (!it2.value.is_fully_const()) | 								if (!it2.value.is_fully_const()) | ||||||
| 									log_error("Techmap yielded config wire %s with non-const value %s.\n", RTLIL::id2cstr(it2.wire->name), log_signal(it2.value)); | 									log_error("Techmap yielded config wire %s with non-const value %s.\n", RTLIL::id2cstr(it2.wire->name), log_signal(it2.value)); | ||||||
|  | 						techmap_wire_names.erase(it.first); | ||||||
| 					} | 					} | ||||||
|  | 
 | ||||||
|  | 					for (auto &it : techmap_wire_names) | ||||||
|  | 						log_error("Techmap special wire %s disappeared. This is considered a fatal error.\n", RTLIL::id2cstr(it)); | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if (techmap_do_cache.at(tpl) == false) | 				if (techmap_do_cache.at(tpl) == false) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue