mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Support ability for "script -select" to take commands from wires
This commit is contained in:
		
							parent
							
								
									2c6aaef3db
								
							
						
					
					
						commit
						06971385fa
					
				
					 1 changed files with 39 additions and 8 deletions
				
			
		|  | @ -1254,24 +1254,55 @@ struct HistoryPass : public Pass { | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| struct ScriptCmdPass : public Pass { | struct ScriptCmdPass : public Pass { | ||||||
| 	ScriptCmdPass() : Pass("script", "execute commands from script file") { } | 	ScriptCmdPass() : Pass("script", "execute commands from file or wire") { } | ||||||
| 	void help() YS_OVERRIDE { | 	void help() YS_OVERRIDE { | ||||||
|  | 		//   |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
 | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    script <filename> [<from_label>:<to_label>]\n"); | 		log("    script <filename> [<from_label>:<to_label>]\n"); | ||||||
|  | 		log("    script -select [selection]\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("This command executes the yosys commands in the specified file.\n"); | 		log("This command executes the yosys commands in the specified file (default\n"); | ||||||
|  | 		log("behaviour), or commands embedded in the constant text value connected to the\n"); | ||||||
|  | 		log("selected wires.\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("The 2nd argument can be used to only execute the section of the\n"); | 		log("In the default (file) case, the 2nd argument can be used to only execute the\n"); | ||||||
| 		log("file between the specified labels. An empty from label is synonymous\n"); | 		log("section of the file between the specified labels. An empty from label is\n"); | ||||||
| 		log("for the beginning of the file and an empty to label is synonymous\n"); | 		log("synonymous with the beginning of the file and an empty to label is synonymous\n"); | ||||||
| 		log("for the end of the file.\n"); | 		log("with the end of the file.\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("If only one label is specified (without ':') then only the block\n"); | 		log("If only one label is specified (without ':') then only the block\n"); | ||||||
| 		log("marked with that label (until the next label) is executed.\n"); | 		log("marked with that label (until the next label) is executed.\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 	} | 	} | ||||||
| 	void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE { | 	void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE | ||||||
| 		if (args.size() < 2) | 	{ | ||||||
|  | 		bool select_mode = false; | ||||||
|  | 
 | ||||||
|  | 		size_t argidx; | ||||||
|  | 		for (argidx = 1; argidx < args.size(); argidx++) { | ||||||
|  | 			if (args[argidx] == "-select") { | ||||||
|  | 				select_mode = true; | ||||||
|  | 				continue; | ||||||
|  | 			} | ||||||
|  | 			break; | ||||||
|  | 		} | ||||||
|  | 		if (select_mode) { | ||||||
|  | 			extra_args(args, argidx, design); | ||||||
|  | 
 | ||||||
|  | 			for (auto mod : design->selected_modules()) | ||||||
|  | 				for (auto &c : mod->connections()) { | ||||||
|  | 					if (!c.first.is_wire()) | ||||||
|  | 						continue; | ||||||
|  | 					auto w = c.first.as_wire(); | ||||||
|  | 					if (!mod->selected(w)) | ||||||
|  | 						continue; | ||||||
|  | 					if (!c.second.is_fully_const()) | ||||||
|  | 						log_error("RHS of selected wire %s.%s is not constant.\n", log_id(mod), log_id(w)); | ||||||
|  | 					auto v = c.second.as_const(); | ||||||
|  | 					Pass::call(design, v.decode_string()); | ||||||
|  | 				} | ||||||
|  | 		} | ||||||
|  | 		else if (args.size() < 2) | ||||||
| 			log_cmd_error("Missing script file.\n"); | 			log_cmd_error("Missing script file.\n"); | ||||||
| 		else if (args.size() == 2) | 		else if (args.size() == 2) | ||||||
| 			run_frontend(args[1], "script", design); | 			run_frontend(args[1], "script", design); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue