mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Added "extract -map %<design_name>"
This commit is contained in:
		
							parent
							
								
									483c99fe46
								
							
						
					
					
						commit
						236fc4209c
					
				
					 1 changed files with 29 additions and 9 deletions
				
			
		|  | @ -315,6 +315,10 @@ struct ExtractPass : public Pass { | ||||||
| 		log("        use the modules in this file as reference. This option can be used\n"); | 		log("        use the modules in this file as reference. This option can be used\n"); | ||||||
| 		log("        multiple times.\n"); | 		log("        multiple times.\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
|  | 		log("    -map %%<design-name>\n"); | ||||||
|  | 		log("        use the modules in this in-memory design as reference. This option can\n"); | ||||||
|  | 		log("        be used multiple times.\n"); | ||||||
|  | 		log("\n"); | ||||||
| 		log("    -verbose\n"); | 		log("    -verbose\n"); | ||||||
| 		log("        print debug output while analyzing\n"); | 		log("        print debug output while analyzing\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
|  | @ -524,16 +528,32 @@ struct ExtractPass : public Pass { | ||||||
| 		if (!mine_mode) | 		if (!mine_mode) | ||||||
| 		{ | 		{ | ||||||
| 			map = new RTLIL::Design; | 			map = new RTLIL::Design; | ||||||
| 			for (auto &filename : map_filenames) { | 			for (auto &filename : map_filenames) | ||||||
| 				FILE *f = fopen(filename.c_str(), "rt"); | 			{ | ||||||
| 				if (f == NULL) | 				if (filename.substr(0, 1) == "%") | ||||||
| 					log_cmd_error("Can't open map file `%s'.\n", filename.c_str()); | 				{ | ||||||
| 				Frontend::frontend_call(map, f, filename, (filename.size() > 3 && filename.substr(filename.size()-3) == ".il") ? "ilang" : "verilog"); | 					if (!saved_designs.count(filename.substr(1))) { | ||||||
| 				fclose(f); | 						delete map; | ||||||
|  | 						log_cmd_error("Can't saved design `%s'.\n", filename.c_str()+1); | ||||||
|  | 					} | ||||||
|  | 					for (auto &it : saved_designs.at(filename.substr(1))->modules) | ||||||
|  | 						if (!map->modules.count(it.first)) | ||||||
|  | 							map->modules[it.first] = it.second->clone(); | ||||||
|  | 				} | ||||||
|  | 				else | ||||||
|  | 				{ | ||||||
|  | 					FILE *f = fopen(filename.c_str(), "rt"); | ||||||
|  | 					if (f == NULL) { | ||||||
|  | 						delete map; | ||||||
|  | 						log_cmd_error("Can't open map file `%s'.\n", filename.c_str()); | ||||||
|  | 					} | ||||||
|  | 					Frontend::frontend_call(map, f, filename, (filename.size() > 3 && filename.substr(filename.size()-3) == ".il") ? "ilang" : "verilog"); | ||||||
|  | 					fclose(f); | ||||||
| 
 | 
 | ||||||
| 				if (filename.size() <= 3 || filename.substr(filename.size()-3) != ".il") { | 					if (filename.size() <= 3 || filename.substr(filename.size()-3) != ".il") { | ||||||
| 					Pass::call(map, "proc"); | 						Pass::call(map, "proc"); | ||||||
| 					Pass::call(map, "opt_clean"); | 						Pass::call(map, "opt_clean"); | ||||||
|  | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue