mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	Converted "prep" to ScriptPass
This commit is contained in:
		
							parent
							
								
									096c25d29d
								
							
						
					
					
						commit
						77aa2031e7
					
				
					 2 changed files with 53 additions and 66 deletions
				
			
		| 
						 | 
					@ -25,22 +25,11 @@
 | 
				
			||||||
USING_YOSYS_NAMESPACE
 | 
					USING_YOSYS_NAMESPACE
 | 
				
			||||||
PRIVATE_NAMESPACE_BEGIN
 | 
					PRIVATE_NAMESPACE_BEGIN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool check_label(bool &active, std::string run_from, std::string run_to, std::string label)
 | 
					struct PrepPass : public ScriptPass
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!run_from.empty() && run_from == run_to) {
 | 
						PrepPass() : ScriptPass("prep", "generic synthesis script") { }
 | 
				
			||||||
		active = (label == run_from);
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		if (label == run_from)
 | 
					 | 
				
			||||||
			active = true;
 | 
					 | 
				
			||||||
		if (label == run_to)
 | 
					 | 
				
			||||||
			active = false;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return active;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct PrepPass : public Pass {
 | 
						virtual void help() YS_OVERRIDE
 | 
				
			||||||
	PrepPass() : Pass("prep", "generic synthesis script") { }
 | 
					 | 
				
			||||||
	virtual void help()
 | 
					 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		//   |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
 | 
							//   |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
 | 
				
			||||||
		log("\n");
 | 
							log("\n");
 | 
				
			||||||
| 
						 | 
					@ -63,31 +52,21 @@ struct PrepPass : public Pass {
 | 
				
			||||||
		log("\n");
 | 
							log("\n");
 | 
				
			||||||
		log("\n");
 | 
							log("\n");
 | 
				
			||||||
		log("The following commands are executed by this synthesis command:\n");
 | 
							log("The following commands are executed by this synthesis command:\n");
 | 
				
			||||||
		log("\n");
 | 
							help_script();
 | 
				
			||||||
		log("    begin:\n");
 | 
					 | 
				
			||||||
		log("        hierarchy -check [-top <top>]\n");
 | 
					 | 
				
			||||||
		log("\n");
 | 
					 | 
				
			||||||
		log("    prep:\n");
 | 
					 | 
				
			||||||
		log("        proc\n");
 | 
					 | 
				
			||||||
		log("        opt_expr -keepdc\n");
 | 
					 | 
				
			||||||
		log("        opt_clean\n");
 | 
					 | 
				
			||||||
		log("        check\n");
 | 
					 | 
				
			||||||
		log("        opt -keepdc\n");
 | 
					 | 
				
			||||||
		log("        wreduce\n");
 | 
					 | 
				
			||||||
		log("        memory_dff [-nordff]\n");
 | 
					 | 
				
			||||||
		log("        opt_clean\n");
 | 
					 | 
				
			||||||
		log("        memory_collect\n");
 | 
					 | 
				
			||||||
		log("        opt -keepdc -fast\n");
 | 
					 | 
				
			||||||
		log("\n");
 | 
					 | 
				
			||||||
		log("    check:\n");
 | 
					 | 
				
			||||||
		log("        stat\n");
 | 
					 | 
				
			||||||
		log("        check\n");
 | 
					 | 
				
			||||||
		log("\n");
 | 
							log("\n");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	virtual void execute(std::vector<std::string> args, RTLIL::Design *design)
 | 
					
 | 
				
			||||||
 | 
						string top_module, fsm_opts, memory_opts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual void clear_flags() YS_OVERRIDE
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		std::string top_module, memory_opts;
 | 
							top_module.clear();
 | 
				
			||||||
		std::string run_from, run_to;
 | 
							memory_opts.clear();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							string run_from, run_to;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		size_t argidx;
 | 
							size_t argidx;
 | 
				
			||||||
		for (argidx = 1; argidx < args.size(); argidx++)
 | 
							for (argidx = 1; argidx < args.size(); argidx++)
 | 
				
			||||||
| 
						 | 
					@ -118,41 +97,49 @@ struct PrepPass : public Pass {
 | 
				
			||||||
		if (!design->full_selection())
 | 
							if (!design->full_selection())
 | 
				
			||||||
			log_cmd_error("This comannd only operates on fully selected designs!\n");
 | 
								log_cmd_error("This comannd only operates on fully selected designs!\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool active = run_from.empty();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		log_header(design, "Executing PREP pass.\n");
 | 
							log_header(design, "Executing PREP pass.\n");
 | 
				
			||||||
		log_push();
 | 
							log_push();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (check_label(active, run_from, run_to, "begin"))
 | 
							run_script(design, run_from, run_to);
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			if (top_module.empty())
 | 
					 | 
				
			||||||
				Pass::call(design, stringf("hierarchy -check"));
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
				Pass::call(design, stringf("hierarchy -check -top %s", top_module.c_str()));
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (check_label(active, run_from, run_to, "coarse"))
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			Pass::call(design, "proc");
 | 
					 | 
				
			||||||
			Pass::call(design, "opt_expr -keepdc");
 | 
					 | 
				
			||||||
			Pass::call(design, "opt_clean");
 | 
					 | 
				
			||||||
			Pass::call(design, "check");
 | 
					 | 
				
			||||||
			Pass::call(design, "opt -keepdc");
 | 
					 | 
				
			||||||
			Pass::call(design, "wreduce");
 | 
					 | 
				
			||||||
			Pass::call(design, "memory_dff" + memory_opts);
 | 
					 | 
				
			||||||
			Pass::call(design, "opt_clean");
 | 
					 | 
				
			||||||
			Pass::call(design, "memory_collect");
 | 
					 | 
				
			||||||
			Pass::call(design, "opt -keepdc -fast");
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (check_label(active, run_from, run_to, "check"))
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			Pass::call(design, "stat");
 | 
					 | 
				
			||||||
			Pass::call(design, "check");
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		log_pop();
 | 
							log_pop();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual void script() YS_OVERRIDE
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (check_label("begin"))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (help_mode) {
 | 
				
			||||||
 | 
									run("hierarchy -check [-top <top>]");
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									if (top_module.empty())
 | 
				
			||||||
 | 
										run("hierarchy -check");
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
										run(stringf("hierarchy -check -top %s", top_module.c_str()));
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (check_label("coarse"))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								run("proc");
 | 
				
			||||||
 | 
								run("opt_expr -keepdc");
 | 
				
			||||||
 | 
								run("opt_clean");
 | 
				
			||||||
 | 
								run("check");
 | 
				
			||||||
 | 
								run("opt -keepdc");
 | 
				
			||||||
 | 
								run("wreduce");
 | 
				
			||||||
 | 
								run("memory_dff" + (help_mode ? " [-nordff]" : memory_opts));
 | 
				
			||||||
 | 
								run("opt_clean");
 | 
				
			||||||
 | 
								run("memory_collect");
 | 
				
			||||||
 | 
								run("opt -keepdc -fast");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (check_label("check"))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								run("stat");
 | 
				
			||||||
 | 
								run("check");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
} PrepPass;
 | 
					} PrepPass;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PRIVATE_NAMESPACE_END
 | 
					PRIVATE_NAMESPACE_END
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,7 +68,7 @@ struct SynthPass : public ScriptPass
 | 
				
			||||||
		log("\n");
 | 
							log("\n");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	std::string top_module, fsm_opts, memory_opts;
 | 
						string top_module, fsm_opts, memory_opts;
 | 
				
			||||||
	bool noalumacc, nofsm, noabc;
 | 
						bool noalumacc, nofsm, noabc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	virtual void clear_flags() YS_OVERRIDE
 | 
						virtual void clear_flags() YS_OVERRIDE
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue