mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Renamed opt_share to opt_merge
This commit is contained in:
		
							parent
							
								
									1d0f0d668a
								
							
						
					
					
						commit
						ec93680bd5
					
				
					 8 changed files with 28 additions and 28 deletions
				
			
		|  | @ -16,13 +16,13 @@ passes that each perform a simple optimization: | ||||||
| \item Once at the beginning of {\tt opt}: | \item Once at the beginning of {\tt opt}: | ||||||
| \begin{itemize} | \begin{itemize} | ||||||
| \item {\tt opt\_expr} | \item {\tt opt\_expr} | ||||||
| \item {\tt opt\_share -nomux} | \item {\tt opt\_merge -nomux} | ||||||
| \end{itemize} | \end{itemize} | ||||||
| \item Repeat until result is stable: | \item Repeat until result is stable: | ||||||
| \begin{itemize} | \begin{itemize} | ||||||
| \item {\tt opt\_muxtree} | \item {\tt opt\_muxtree} | ||||||
| \item {\tt opt\_reduce} | \item {\tt opt\_reduce} | ||||||
| \item {\tt opt\_share} | \item {\tt opt\_merge} | ||||||
| \item {\tt opt\_rmdff} | \item {\tt opt\_rmdff} | ||||||
| \item {\tt opt\_clean} | \item {\tt opt\_clean} | ||||||
| \item {\tt opt\_expr} | \item {\tt opt\_expr} | ||||||
|  | @ -130,7 +130,7 @@ This pass identifies unused signals and cells and removes them from the design. | ||||||
| creates an \B{unused\_bits} attribute on wires with unused bits. This attribute can be | creates an \B{unused\_bits} attribute on wires with unused bits. This attribute can be | ||||||
| used for debugging or by other optimization passes. | used for debugging or by other optimization passes. | ||||||
| 
 | 
 | ||||||
| \subsection{The opt\_share pass} | \subsection{The opt\_merge pass} | ||||||
| 
 | 
 | ||||||
| This pass performs trivial resource sharing. This means that this pass identifies cells | This pass performs trivial resource sharing. This means that this pass identifies cells | ||||||
| with identical inputs and replaces them with a single instance of the cell. | with identical inputs and replaces them with a single instance of the cell. | ||||||
|  |  | ||||||
|  | @ -489,7 +489,7 @@ select.cc}, {\tt show.cc}, \dots) and a couple of other small utility libraries. | ||||||
| This directory contains a subdirectory for each pass or group of passes. For example as | This directory contains a subdirectory for each pass or group of passes. For example as | ||||||
| of this writing the directory {\tt passes/opt/} contains the code for seven | of this writing the directory {\tt passes/opt/} contains the code for seven | ||||||
| passes: {\tt opt}, {\tt opt\_expr}, {\tt opt\_muxtree}, {\tt opt\_reduce}, | passes: {\tt opt}, {\tt opt\_expr}, {\tt opt\_muxtree}, {\tt opt\_reduce}, | ||||||
| {\tt opt\_rmdff}, {\tt opt\_rmunused} and {\tt opt\_share}. | {\tt opt\_rmdff}, {\tt opt\_rmunused} and {\tt opt\_merge}. | ||||||
| 
 | 
 | ||||||
| \item {\tt techlibs/} \\ | \item {\tt techlibs/} \\ | ||||||
| This directory contains simulation models and standard implementations for the | This directory contains simulation models and standard implementations for the | ||||||
|  | @ -513,7 +513,7 @@ Yosys. So it is not needed to add additional commands to a central list of comma | ||||||
| \end{sloppypar} | \end{sloppypar} | ||||||
| 
 | 
 | ||||||
| Good starting points for reading example source code to learn how to write passes | Good starting points for reading example source code to learn how to write passes | ||||||
| are {\tt passes/opt/opt\_rmdff.cc} and {\tt passes/opt/opt\_share.cc}. | are {\tt passes/opt/opt\_rmdff.cc} and {\tt passes/opt/opt\_merge.cc}. | ||||||
| 
 | 
 | ||||||
| See the top-level README file for a quick {\it Getting Started} guide and build | See the top-level README file for a quick {\it Getting Started} guide and build | ||||||
| instructions. The Yosys build is based solely on Makefiles. | instructions. The Yosys build is based solely on Makefiles. | ||||||
|  |  | ||||||
|  | @ -145,12 +145,12 @@ is a macro command that calls other commands: | ||||||
| 
 | 
 | ||||||
| \begin{lstlisting}[xleftmargin=0.5cm, basicstyle=\ttfamily\fontsize{8pt}{10pt}\selectfont, language=ys] | \begin{lstlisting}[xleftmargin=0.5cm, basicstyle=\ttfamily\fontsize{8pt}{10pt}\selectfont, language=ys] | ||||||
| opt_expr                # const folding and simple expression rewriting | opt_expr                # const folding and simple expression rewriting | ||||||
| opt_share -nomux        # merging identical cells | opt_merge -nomux        # merging identical cells | ||||||
| 
 | 
 | ||||||
| do | do | ||||||
|     opt_muxtree         # remove never-active branches from multiplexer tree |     opt_muxtree         # remove never-active branches from multiplexer tree | ||||||
|     opt_reduce          # consolidate trees of boolean ops to reduce functions |     opt_reduce          # consolidate trees of boolean ops to reduce functions | ||||||
|     opt_share           # merging identical cells |     opt_merge           # merging identical cells | ||||||
|     opt_rmdff           # remove/simplify registers with constant inputs |     opt_rmdff           # remove/simplify registers with constant inputs | ||||||
|     opt_clean           # remove unused objects (cells, wires) from design |     opt_clean           # remove unused objects (cells, wires) from design | ||||||
|     opt_expr            # const folding and simple expression rewriting |     opt_expr            # const folding and simple expression rewriting | ||||||
|  |  | ||||||
|  | @ -746,7 +746,7 @@ struct MemorySharePass : public Pass { | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("Note that in addition to the algorithms implemented in this pass, the $memrd\n"); | 		log("Note that in addition to the algorithms implemented in this pass, the $memrd\n"); | ||||||
| 		log("and $memwr cells are also subject to generic resource sharing passes (and other\n"); | 		log("and $memwr cells are also subject to generic resource sharing passes (and other\n"); | ||||||
| 		log("optimizations) such as opt_share.\n"); | 		log("optimizations) such as \"share\" and \"opt_merge\".\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 	} | 	} | ||||||
| 	virtual void execute(std::vector<std::string> args, RTLIL::Design *design) { | 	virtual void execute(std::vector<std::string> args, RTLIL::Design *design) { | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| 
 | 
 | ||||||
| OBJS += passes/opt/opt.o | OBJS += passes/opt/opt.o | ||||||
| OBJS += passes/opt/opt_share.o | OBJS += passes/opt/opt_merge.o | ||||||
| OBJS += passes/opt/opt_muxtree.o | OBJS += passes/opt/opt_muxtree.o | ||||||
| OBJS += passes/opt/opt_reduce.o | OBJS += passes/opt/opt_reduce.o | ||||||
| OBJS += passes/opt/opt_rmdff.o | OBJS += passes/opt/opt_rmdff.o | ||||||
|  |  | ||||||
|  | @ -38,12 +38,12 @@ struct OptPass : public Pass { | ||||||
| 		log("passes in the following order:\n"); | 		log("passes in the following order:\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    opt_expr [-mux_undef] [-mux_bool] [-undriven] [-clkinv] [-fine] [-full] [-keepdc]\n"); | 		log("    opt_expr [-mux_undef] [-mux_bool] [-undriven] [-clkinv] [-fine] [-full] [-keepdc]\n"); | ||||||
| 		log("    opt_share [-share_all] -nomux\n"); | 		log("    opt_merge [-share_all] -nomux\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    do\n"); | 		log("    do\n"); | ||||||
| 		log("        opt_muxtree\n"); | 		log("        opt_muxtree\n"); | ||||||
| 		log("        opt_reduce [-fine] [-full]\n"); | 		log("        opt_reduce [-fine] [-full]\n"); | ||||||
| 		log("        opt_share [-share_all]\n"); | 		log("        opt_merge [-share_all]\n"); | ||||||
| 		log("        opt_rmdff\n"); | 		log("        opt_rmdff\n"); | ||||||
| 		log("        opt_clean [-purge]\n"); | 		log("        opt_clean [-purge]\n"); | ||||||
| 		log("        opt_expr [-mux_undef] [-mux_bool] [-undriven] [-clkinv] [-fine] [-full] [-keepdc]\n"); | 		log("        opt_expr [-mux_undef] [-mux_bool] [-undriven] [-clkinv] [-fine] [-full] [-keepdc]\n"); | ||||||
|  | @ -53,7 +53,7 @@ struct OptPass : public Pass { | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    do\n"); | 		log("    do\n"); | ||||||
| 		log("        opt_expr [-mux_undef] [-mux_bool] [-undriven] [-clkinv] [-fine] [-full] [-keepdc]\n"); | 		log("        opt_expr [-mux_undef] [-mux_bool] [-undriven] [-clkinv] [-fine] [-full] [-keepdc]\n"); | ||||||
| 		log("        opt_share [-share_all]\n"); | 		log("        opt_merge [-share_all]\n"); | ||||||
| 		log("        opt_rmdff\n"); | 		log("        opt_rmdff\n"); | ||||||
| 		log("        opt_clean [-purge]\n"); | 		log("        opt_clean [-purge]\n"); | ||||||
| 		log("    while <changed design in opt_rmdff>\n"); | 		log("    while <changed design in opt_rmdff>\n"); | ||||||
|  | @ -68,7 +68,7 @@ struct OptPass : public Pass { | ||||||
| 		std::string opt_clean_args; | 		std::string opt_clean_args; | ||||||
| 		std::string opt_expr_args; | 		std::string opt_expr_args; | ||||||
| 		std::string opt_reduce_args; | 		std::string opt_reduce_args; | ||||||
| 		std::string opt_share_args; | 		std::string opt_merge_args; | ||||||
| 		bool fast_mode = false; | 		bool fast_mode = false; | ||||||
| 
 | 
 | ||||||
| 		log_header("Executing OPT pass (performing simple optimizations).\n"); | 		log_header("Executing OPT pass (performing simple optimizations).\n"); | ||||||
|  | @ -111,7 +111,7 @@ struct OptPass : public Pass { | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
| 			if (args[argidx] == "-share_all") { | 			if (args[argidx] == "-share_all") { | ||||||
| 				opt_share_args += " -share_all"; | 				opt_merge_args += " -share_all"; | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
| 			if (args[argidx] == "-fast") { | 			if (args[argidx] == "-fast") { | ||||||
|  | @ -126,7 +126,7 @@ struct OptPass : public Pass { | ||||||
| 		{ | 		{ | ||||||
| 			while (1) { | 			while (1) { | ||||||
| 				Pass::call(design, "opt_expr" + opt_expr_args); | 				Pass::call(design, "opt_expr" + opt_expr_args); | ||||||
| 				Pass::call(design, "opt_share" + opt_share_args); | 				Pass::call(design, "opt_merge" + opt_merge_args); | ||||||
| 				design->scratchpad_unset("opt.did_something"); | 				design->scratchpad_unset("opt.did_something"); | ||||||
| 				Pass::call(design, "opt_rmdff"); | 				Pass::call(design, "opt_rmdff"); | ||||||
| 				if (design->scratchpad_get_bool("opt.did_something") == false) | 				if (design->scratchpad_get_bool("opt.did_something") == false) | ||||||
|  | @ -139,12 +139,12 @@ struct OptPass : public Pass { | ||||||
| 		else | 		else | ||||||
| 		{ | 		{ | ||||||
| 			Pass::call(design, "opt_expr" + opt_expr_args); | 			Pass::call(design, "opt_expr" + opt_expr_args); | ||||||
| 			Pass::call(design, "opt_share -nomux" + opt_share_args); | 			Pass::call(design, "opt_merge -nomux" + opt_merge_args); | ||||||
| 			while (1) { | 			while (1) { | ||||||
| 				design->scratchpad_unset("opt.did_something"); | 				design->scratchpad_unset("opt.did_something"); | ||||||
| 				Pass::call(design, "opt_muxtree"); | 				Pass::call(design, "opt_muxtree"); | ||||||
| 				Pass::call(design, "opt_reduce" + opt_reduce_args); | 				Pass::call(design, "opt_reduce" + opt_reduce_args); | ||||||
| 				Pass::call(design, "opt_share" + opt_share_args); | 				Pass::call(design, "opt_merge" + opt_merge_args); | ||||||
| 				Pass::call(design, "opt_rmdff"); | 				Pass::call(design, "opt_rmdff"); | ||||||
| 				Pass::call(design, "opt_clean" + opt_clean_args); | 				Pass::call(design, "opt_clean" + opt_clean_args); | ||||||
| 				Pass::call(design, "opt_expr" + opt_expr_args); | 				Pass::call(design, "opt_expr" + opt_expr_args); | ||||||
|  |  | ||||||
|  | @ -31,7 +31,7 @@ | ||||||
| USING_YOSYS_NAMESPACE | USING_YOSYS_NAMESPACE | ||||||
| PRIVATE_NAMESPACE_BEGIN | PRIVATE_NAMESPACE_BEGIN | ||||||
| 
 | 
 | ||||||
| struct OptShareWorker | struct OptMergeWorker | ||||||
| { | { | ||||||
| 	RTLIL::Design *design; | 	RTLIL::Design *design; | ||||||
| 	RTLIL::Module *module; | 	RTLIL::Module *module; | ||||||
|  | @ -212,14 +212,14 @@ struct OptShareWorker | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	struct CompareCells { | 	struct CompareCells { | ||||||
| 		OptShareWorker *that; | 		OptMergeWorker *that; | ||||||
| 		CompareCells(OptShareWorker *that) : that(that) {} | 		CompareCells(OptMergeWorker *that) : that(that) {} | ||||||
| 		bool operator()(const RTLIL::Cell *cell1, const RTLIL::Cell *cell2) const { | 		bool operator()(const RTLIL::Cell *cell1, const RTLIL::Cell *cell2) const { | ||||||
| 			return that->compare_cells(cell1, cell2); | 			return that->compare_cells(cell1, cell2); | ||||||
| 		} | 		} | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	OptShareWorker(RTLIL::Design *design, RTLIL::Module *module, bool mode_nomux, bool mode_share_all) : | 	OptMergeWorker(RTLIL::Design *design, RTLIL::Module *module, bool mode_nomux, bool mode_share_all) : | ||||||
| 		design(design), module(module), assign_map(module), mode_share_all(mode_share_all) | 		design(design), module(module), assign_map(module), mode_share_all(mode_share_all) | ||||||
| 	{ | 	{ | ||||||
| 		total_count = 0; | 		total_count = 0; | ||||||
|  | @ -286,13 +286,13 @@ struct OptShareWorker | ||||||
| 	} | 	} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct OptSharePass : public Pass { | struct OptMergePass : public Pass { | ||||||
| 	OptSharePass() : Pass("opt_share", "consolidate identical cells") { } | 	OptMergePass() : Pass("opt_merge", "consolidate identical cells") { } | ||||||
| 	virtual void help() | 	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"); | ||||||
| 		log("    opt_share [options] [selection]\n"); | 		log("    opt_merge [options] [selection]\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("This pass identifies cells with identical type and input signals. Such cells\n"); | 		log("This pass identifies cells with identical type and input signals. Such cells\n"); | ||||||
| 		log("are then merged to one cell.\n"); | 		log("are then merged to one cell.\n"); | ||||||
|  | @ -328,7 +328,7 @@ struct OptSharePass : public Pass { | ||||||
| 
 | 
 | ||||||
| 		int total_count = 0; | 		int total_count = 0; | ||||||
| 		for (auto module : design->selected_modules()) { | 		for (auto module : design->selected_modules()) { | ||||||
| 			OptShareWorker worker(design, module, mode_nomux, mode_share_all); | 			OptMergeWorker worker(design, module, mode_nomux, mode_share_all); | ||||||
| 			total_count += worker.total_count; | 			total_count += worker.total_count; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -336,6 +336,6 @@ struct OptSharePass : public Pass { | ||||||
| 			design->scratchpad_set_bool("opt.did_something", true); | 			design->scratchpad_set_bool("opt.did_something", true); | ||||||
| 		log("Removed a total of %d cells.\n", total_count); | 		log("Removed a total of %d cells.\n", total_count); | ||||||
| 	} | 	} | ||||||
| } OptSharePass; | } OptMergePass; | ||||||
| 
 | 
 | ||||||
| PRIVATE_NAMESPACE_END | PRIVATE_NAMESPACE_END | ||||||
|  | @ -128,7 +128,7 @@ struct Ice40OptPass : public Pass { | ||||||
| 		log("    do\n"); | 		log("    do\n"); | ||||||
| 		log("        <ice40 specific optimizations>\n"); | 		log("        <ice40 specific optimizations>\n"); | ||||||
| 		log("        opt_expr -mux_undef -undriven [-full]\n"); | 		log("        opt_expr -mux_undef -undriven [-full]\n"); | ||||||
| 		log("        opt_share\n"); | 		log("        opt_merge\n"); | ||||||
| 		log("        opt_rmdff\n"); | 		log("        opt_rmdff\n"); | ||||||
| 		log("        opt_clean\n"); | 		log("        opt_clean\n"); | ||||||
| 		log("    while <changed design>\n"); | 		log("    while <changed design>\n"); | ||||||
|  | @ -159,7 +159,7 @@ struct Ice40OptPass : public Pass { | ||||||
| 				run_ice40_opts(module); | 				run_ice40_opts(module); | ||||||
| 
 | 
 | ||||||
| 			Pass::call(design, "opt_expr " + opt_expr_args); | 			Pass::call(design, "opt_expr " + opt_expr_args); | ||||||
| 			Pass::call(design, "opt_share"); | 			Pass::call(design, "opt_merge"); | ||||||
| 			Pass::call(design, "opt_rmdff"); | 			Pass::call(design, "opt_rmdff"); | ||||||
| 			Pass::call(design, "opt_clean"); | 			Pass::call(design, "opt_clean"); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue