mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Merge remote-tracking branch 'origin/master' into eddie/abc9_dsp_refactor
This commit is contained in:
		
						commit
						3012e9eebc
					
				
					 15 changed files with 82 additions and 57 deletions
				
			
		|  | @ -1893,10 +1893,6 @@ DEF_METHOD(And,      max(sig_a.size(), sig_b.size()), ID($and)) | ||||||
| DEF_METHOD(Or,       max(sig_a.size(), sig_b.size()), ID($or)) | DEF_METHOD(Or,       max(sig_a.size(), sig_b.size()), ID($or)) | ||||||
| DEF_METHOD(Xor,      max(sig_a.size(), sig_b.size()), ID($xor)) | DEF_METHOD(Xor,      max(sig_a.size(), sig_b.size()), ID($xor)) | ||||||
| DEF_METHOD(Xnor,     max(sig_a.size(), sig_b.size()), ID($xnor)) | DEF_METHOD(Xnor,     max(sig_a.size(), sig_b.size()), ID($xnor)) | ||||||
| DEF_METHOD(Shl,      sig_a.size(), ID($shl)) |  | ||||||
| DEF_METHOD(Shr,      sig_a.size(), ID($shr)) |  | ||||||
| DEF_METHOD(Sshl,     sig_a.size(), ID($sshl)) |  | ||||||
| DEF_METHOD(Sshr,     sig_a.size(), ID($sshr)) |  | ||||||
| DEF_METHOD(Shift,    sig_a.size(), ID($shift)) | DEF_METHOD(Shift,    sig_a.size(), ID($shift)) | ||||||
| DEF_METHOD(Shiftx,   sig_a.size(), ID($shiftx)) | DEF_METHOD(Shiftx,   sig_a.size(), ID($shiftx)) | ||||||
| DEF_METHOD(Lt,       1, ID($lt)) | DEF_METHOD(Lt,       1, ID($lt)) | ||||||
|  | @ -1916,6 +1912,31 @@ DEF_METHOD(LogicAnd, 1, ID($logic_and)) | ||||||
| DEF_METHOD(LogicOr,  1, ID($logic_or)) | DEF_METHOD(LogicOr,  1, ID($logic_or)) | ||||||
| #undef DEF_METHOD | #undef DEF_METHOD | ||||||
| 
 | 
 | ||||||
|  | #define DEF_METHOD(_func, _y_size, _type) \ | ||||||
|  | 	RTLIL::Cell* RTLIL::Module::add ## _func(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool is_signed, const std::string &src) { \ | ||||||
|  | 		RTLIL::Cell *cell = addCell(name, _type);           \ | ||||||
|  | 		cell->parameters[ID(A_SIGNED)] = is_signed;         \ | ||||||
|  | 		cell->parameters[ID(B_SIGNED)] = false;             \ | ||||||
|  | 		cell->parameters[ID(A_WIDTH)] = sig_a.size();       \ | ||||||
|  | 		cell->parameters[ID(B_WIDTH)] = sig_b.size();       \ | ||||||
|  | 		cell->parameters[ID(Y_WIDTH)] = sig_y.size();       \ | ||||||
|  | 		cell->setPort(ID::A, sig_a);                        \ | ||||||
|  | 		cell->setPort(ID::B, sig_b);                        \ | ||||||
|  | 		cell->setPort(ID::Y, sig_y);                        \ | ||||||
|  | 		cell->set_src_attribute(src);                       \ | ||||||
|  | 		return cell;                                        \ | ||||||
|  | 	} \ | ||||||
|  | 	RTLIL::SigSpec RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed, const std::string &src) { \ | ||||||
|  | 		RTLIL::SigSpec sig_y = addWire(NEW_ID, _y_size);         \ | ||||||
|  | 		add ## _func(name, sig_a, sig_b, sig_y, is_signed, src); \ | ||||||
|  | 		return sig_y;                                            \ | ||||||
|  | 	} | ||||||
|  | DEF_METHOD(Shl,      sig_a.size(), ID($shl)) | ||||||
|  | DEF_METHOD(Shr,      sig_a.size(), ID($shr)) | ||||||
|  | DEF_METHOD(Sshl,     sig_a.size(), ID($sshl)) | ||||||
|  | DEF_METHOD(Sshr,     sig_a.size(), ID($sshr)) | ||||||
|  | #undef DEF_METHOD | ||||||
|  | 
 | ||||||
| #define DEF_METHOD(_func, _type, _pmux) \ | #define DEF_METHOD(_func, _type, _pmux) \ | ||||||
| 	RTLIL::Cell* RTLIL::Module::add ## _func(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_s, RTLIL::SigSpec sig_y, const std::string &src) { \ | 	RTLIL::Cell* RTLIL::Module::add ## _func(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_s, RTLIL::SigSpec sig_y, const std::string &src) { \ | ||||||
| 		RTLIL::Cell *cell = addCell(name, _type);                 \ | 		RTLIL::Cell *cell = addCell(name, _type);                 \ | ||||||
|  |  | ||||||
|  | @ -29,17 +29,17 @@ | ||||||
| // Kahn, Arthur B. (1962), "Topological sorting of large networks", Communications of the ACM 5 (11): 558-562, doi:10.1145/368996.369025
 | // Kahn, Arthur B. (1962), "Topological sorting of large networks", Communications of the ACM 5 (11): 558-562, doi:10.1145/368996.369025
 | ||||||
| // http://en.wikipedia.org/wiki/Topological_sorting
 | // http://en.wikipedia.org/wiki/Topological_sorting
 | ||||||
| 
 | 
 | ||||||
| #define ABC_COMMAND_LIB "strash; ifraig; scorr; dc2; dretime; retime {D}; strash; &get -n; &dch -f; &nf {D}; &put" | #define ABC_COMMAND_LIB "strash; ifraig; scorr; dc2; dretime; strash; &get -n; &dch -f; &nf {D}; &put" | ||||||
| #define ABC_COMMAND_CTR "strash; ifraig; scorr; dc2; dretime; retime {D}; strash; &get -n; &dch -f; &nf {D}; &put; buffer; upsize {D}; dnsize {D}; stime -p" | #define ABC_COMMAND_CTR "strash; ifraig; scorr; dc2; dretime; strash; &get -n; &dch -f; &nf {D}; &put; buffer; upsize {D}; dnsize {D}; stime -p" | ||||||
| #define ABC_COMMAND_LUT "strash; ifraig; scorr; dc2; dretime; retime {D}; strash; dch -f; if; mfs2" | #define ABC_COMMAND_LUT "strash; ifraig; scorr; dc2; dretime; strash; dch -f; if; mfs2" | ||||||
| #define ABC_COMMAND_SOP "strash; ifraig; scorr; dc2; dretime; retime {D}; strash; dch -f; cover {I} {P}" | #define ABC_COMMAND_SOP "strash; ifraig; scorr; dc2; dretime; strash; dch -f; cover {I} {P}" | ||||||
| #define ABC_COMMAND_DFL "strash; ifraig; scorr; dc2; dretime; retime {D}; strash; &get -n; &dch -f; &nf {D}; &put" | #define ABC_COMMAND_DFL "strash; ifraig; scorr; dc2; dretime; strash; &get -n; &dch -f; &nf {D}; &put" | ||||||
| 
 | 
 | ||||||
| #define ABC_FAST_COMMAND_LIB "strash; dretime; retime {D}; map {D}" | #define ABC_FAST_COMMAND_LIB "strash; dretime; map {D}" | ||||||
| #define ABC_FAST_COMMAND_CTR "strash; dretime; retime {D}; map {D}; buffer; upsize {D}; dnsize {D}; stime -p" | #define ABC_FAST_COMMAND_CTR "strash; dretime; map {D}; buffer; upsize {D}; dnsize {D}; stime -p" | ||||||
| #define ABC_FAST_COMMAND_LUT "strash; dretime; retime {D}; if" | #define ABC_FAST_COMMAND_LUT "strash; dretime; if" | ||||||
| #define ABC_FAST_COMMAND_SOP "strash; dretime; retime {D}; cover -I {I} -P {P}" | #define ABC_FAST_COMMAND_SOP "strash; dretime; cover -I {I} -P {P}" | ||||||
| #define ABC_FAST_COMMAND_DFL "strash; dretime; retime {D}; map" | #define ABC_FAST_COMMAND_DFL "strash; dretime; map" | ||||||
| 
 | 
 | ||||||
| #include "kernel/register.h" | #include "kernel/register.h" | ||||||
| #include "kernel/sigtools.h" | #include "kernel/sigtools.h" | ||||||
|  | @ -747,6 +747,10 @@ void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std::strin | ||||||
| 	else | 	else | ||||||
| 		abc_script += fast_mode ? ABC_FAST_COMMAND_DFL : ABC_COMMAND_DFL; | 		abc_script += fast_mode ? ABC_FAST_COMMAND_DFL : ABC_COMMAND_DFL; | ||||||
| 
 | 
 | ||||||
|  | 	if (script_file.empty() && !delay_target.empty()) | ||||||
|  | 		for (size_t pos = abc_script.find("dretime;"); pos != std::string::npos; pos = abc_script.find("dretime;", pos+1)) | ||||||
|  | 			abc_script = abc_script.substr(0, pos) + "dretime; retime -o {D};" + abc_script.substr(pos+8); | ||||||
|  | 
 | ||||||
| 	for (size_t pos = abc_script.find("{D}"); pos != std::string::npos; pos = abc_script.find("{D}", pos)) | 	for (size_t pos = abc_script.find("{D}"); pos != std::string::npos; pos = abc_script.find("{D}", pos)) | ||||||
| 		abc_script = abc_script.substr(0, pos) + delay_target + abc_script.substr(pos+3); | 		abc_script = abc_script.substr(0, pos) + delay_target + abc_script.substr(pos+3); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -52,7 +52,7 @@ struct SynthAchronixPass : public ScriptPass { | ||||||
|     log("        do not flatten design before synthesis\n"); |     log("        do not flatten design before synthesis\n"); | ||||||
|     log("\n"); |     log("\n"); | ||||||
|     log("    -retime\n"); |     log("    -retime\n"); | ||||||
|     log("        run 'abc' with -dff option\n"); |     log("        run 'abc' with '-dff -D 1' options\n"); | ||||||
|     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"); | ||||||
|  | @ -152,12 +152,12 @@ struct SynthAchronixPass : public ScriptPass { | ||||||
|         run("clean -purge"); |         run("clean -purge"); | ||||||
|         run("setundef -undriven -zero"); |         run("setundef -undriven -zero"); | ||||||
|         if (retime || help_mode) |         if (retime || help_mode) | ||||||
|           run("abc -markgroups -dff", "(only if -retime)"); |           run("abc -markgroups -dff -D 1", "(only if -retime)"); | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|     if (check_label("map_luts")) |     if (check_label("map_luts")) | ||||||
|       { |       { | ||||||
|         run("abc -lut 4" + string(retime ? " -dff" : "")); |         run("abc -lut 4" + string(retime ? " -dff -D 1" : "")); | ||||||
|         run("clean"); |         run("clean"); | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -58,7 +58,7 @@ struct SynthAnlogicPass : public ScriptPass | ||||||
| 		log("        do not flatten design before synthesis\n"); | 		log("        do not flatten design before synthesis\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -retime\n"); | 		log("    -retime\n"); | ||||||
| 		log("        run 'abc' with -dff option\n"); | 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||||
| 		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"); | ||||||
|  | @ -164,7 +164,7 @@ struct SynthAnlogicPass : public ScriptPass | ||||||
| 			run("opt -undriven -fine"); | 			run("opt -undriven -fine"); | ||||||
| 			run("techmap -map +/techmap.v -map +/anlogic/arith_map.v"); | 			run("techmap -map +/techmap.v -map +/anlogic/arith_map.v"); | ||||||
| 			if (retime || help_mode) | 			if (retime || help_mode) | ||||||
| 				run("abc -dff", "(only if -retime)"); | 				run("abc -dff -D 1", "(only if -retime)"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (check_label("map_ffs")) | 		if (check_label("map_ffs")) | ||||||
|  |  | ||||||
|  | @ -55,7 +55,7 @@ struct SynthCoolrunner2Pass : public ScriptPass | ||||||
| 		log("        do not flatten design before synthesis\n"); | 		log("        do not flatten design before synthesis\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -retime\n"); | 		log("    -retime\n"); | ||||||
| 		log("        run 'abc' with -dff option\n"); | 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||||
| 		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"); | ||||||
|  | @ -161,7 +161,7 @@ struct SynthCoolrunner2Pass : public ScriptPass | ||||||
| 
 | 
 | ||||||
| 		if (check_label("map_pla")) | 		if (check_label("map_pla")) | ||||||
| 		{ | 		{ | ||||||
| 			run("abc -sop -I 40 -P 56"); | 			run("abc -sop -I 40 -P 56" + string(retime ? " -dff -D 1" : "")); | ||||||
| 			run("clean"); | 			run("clean"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -56,7 +56,7 @@ struct SynthEasicPass : public ScriptPass | ||||||
| 		log("        do not flatten design before synthesis\n"); | 		log("        do not flatten design before synthesis\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -retime\n"); | 		log("    -retime\n"); | ||||||
| 		log("        run 'abc' with -dff option\n"); | 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||||
| 		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"); | ||||||
|  | @ -158,7 +158,7 @@ struct SynthEasicPass : public ScriptPass | ||||||
| 			run("techmap"); | 			run("techmap"); | ||||||
| 			run("opt -fast"); | 			run("opt -fast"); | ||||||
| 			if (retime || help_mode) { | 			if (retime || help_mode) { | ||||||
| 				run("abc -dff", " (only if -retime)"); | 				run("abc -dff -D 1", " (only if -retime)"); | ||||||
| 				run("opt_clean", "(only if -retime)"); | 				run("opt_clean", "(only if -retime)"); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -62,7 +62,7 @@ struct SynthEcp5Pass : public ScriptPass | ||||||
| 		log("        do not flatten design before synthesis\n"); | 		log("        do not flatten design before synthesis\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -retime\n"); | 		log("    -retime\n"); | ||||||
| 		log("        run 'abc' with -dff option\n"); | 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -noccu2\n"); | 		log("    -noccu2\n"); | ||||||
| 		log("        do not use CCU2 cells in output netlist\n"); | 		log("        do not use CCU2 cells in output netlist\n"); | ||||||
|  | @ -290,7 +290,7 @@ struct SynthEcp5Pass : public ScriptPass | ||||||
| 			else | 			else | ||||||
| 				run("techmap -map +/techmap.v -map +/ecp5/arith_map.v"); | 				run("techmap -map +/techmap.v -map +/ecp5/arith_map.v"); | ||||||
| 			if (retime || help_mode) | 			if (retime || help_mode) | ||||||
| 				run("abc -dff", "(only if -retime)"); | 				run("abc -dff -D 1", "(only if -retime)"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (check_label("map_ffs")) | 		if (check_label("map_ffs")) | ||||||
|  |  | ||||||
|  | @ -58,7 +58,7 @@ struct SynthEfinixPass : public ScriptPass | ||||||
| 		log("        do not flatten design before synthesis\n"); | 		log("        do not flatten design before synthesis\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -retime\n"); | 		log("    -retime\n"); | ||||||
| 		log("        run 'abc' with -dff option\n"); | 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||||
| 		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"); | ||||||
|  | @ -164,7 +164,7 @@ struct SynthEfinixPass : public ScriptPass | ||||||
| 			run("opt -undriven -fine"); | 			run("opt -undriven -fine"); | ||||||
| 			run("techmap -map +/techmap.v -map +/efinix/arith_map.v"); | 			run("techmap -map +/techmap.v -map +/efinix/arith_map.v"); | ||||||
| 			if (retime || help_mode) | 			if (retime || help_mode) | ||||||
| 				run("abc -dff", "(only if -retime)"); | 				run("abc -dff -D 1", "(only if -retime)"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (check_label("map_ffs")) | 		if (check_label("map_ffs")) | ||||||
|  |  | ||||||
|  | @ -62,16 +62,16 @@ struct SynthGowinPass : public ScriptPass | ||||||
| 		log("        do not flatten design before synthesis\n"); | 		log("        do not flatten design before synthesis\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -retime\n"); | 		log("    -retime\n"); | ||||||
| 		log("        run 'abc' with -dff option\n"); | 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -nowidelut\n"); | 		log("    -nowidelut\n"); | ||||||
| 		log("        do not use muxes to implement LUTs larger than LUT4s\n"); | 		log("        do not use muxes to implement LUTs larger than LUT4s\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -noiopads\n"); | 		log("    -noiopads\n"); | ||||||
| 		log("        do not emit IOB at top level ports\n"); | 		log("        do not emit IOB at top level ports\n"); | ||||||
| 		log("\n"); | 		//log("\n");
 | ||||||
| 		log("    -abc9\n"); | 		//log("    -abc9\n");
 | ||||||
| 		log("        use new ABC9 flow (EXPERIMENTAL)\n"); | 		//log("        use new ABC9 flow (EXPERIMENTAL)\n");
 | ||||||
| 		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"); | ||||||
|  | @ -144,10 +144,10 @@ struct SynthGowinPass : public ScriptPass | ||||||
| 				nowidelut = true; | 				nowidelut = true; | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
| 			if (args[argidx] == "-abc9") { | 			//if (args[argidx] == "-abc9") {
 | ||||||
| 				abc9 = true; | 			//	abc9 = true;
 | ||||||
| 				continue; | 			//	continue;
 | ||||||
| 			} | 			//}
 | ||||||
| 			if (args[argidx] == "-noiopads") { | 			if (args[argidx] == "-noiopads") { | ||||||
| 				noiopads = true; | 				noiopads = true; | ||||||
| 				continue; | 				continue; | ||||||
|  | @ -209,7 +209,7 @@ struct SynthGowinPass : public ScriptPass | ||||||
| 			run("techmap -map +/techmap.v -map +/gowin/arith_map.v"); | 			run("techmap -map +/techmap.v -map +/gowin/arith_map.v"); | ||||||
| 			run("techmap -map +/techmap.v"); | 			run("techmap -map +/techmap.v"); | ||||||
| 			if (retime || help_mode) | 			if (retime || help_mode) | ||||||
| 				run("abc -dff", "(only if -retime)"); | 				run("abc -dff -D 1", "(only if -retime)"); | ||||||
| 			run("splitnets"); | 			run("splitnets"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -227,13 +227,13 @@ struct SynthGowinPass : public ScriptPass | ||||||
| 
 | 
 | ||||||
| 		if (check_label("map_luts")) | 		if (check_label("map_luts")) | ||||||
| 		{ | 		{ | ||||||
| 			if (nowidelut && abc9) { | 			/*if (nowidelut && abc9) {
 | ||||||
| 				run("abc9 -lut 4"); | 				run("abc9 -lut 4"); | ||||||
| 			} else if (nowidelut && !abc9) { | 			} else*/ if (nowidelut && !abc9) { | ||||||
| 				run("abc -lut 4"); | 				run("abc -lut 4"); | ||||||
| 			} else if (!nowidelut && abc9) { | 			} else /*if (!nowidelut && abc9) {
 | ||||||
| 				run("abc9 -lut 4:8"); | 				run("abc9 -lut 4:8"); | ||||||
| 			} else if (!nowidelut && !abc9) { | 			} else*/ if (!nowidelut && !abc9) { | ||||||
| 				run("abc -lut 4:8"); | 				run("abc -lut 4:8"); | ||||||
| 			} | 			} | ||||||
| 			run("clean"); | 			run("clean"); | ||||||
|  |  | ||||||
|  | @ -59,7 +59,7 @@ struct SynthGreenPAK4Pass : public ScriptPass | ||||||
| 		log("        do not flatten design before synthesis\n"); | 		log("        do not flatten design before synthesis\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -retime\n"); | 		log("    -retime\n"); | ||||||
| 		log("        run 'abc' with -dff option\n"); | 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||||
| 		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"); | ||||||
|  | @ -165,7 +165,7 @@ struct SynthGreenPAK4Pass : public ScriptPass | ||||||
| 			run("dfflibmap -prepare -liberty +/greenpak4/gp_dff.lib"); | 			run("dfflibmap -prepare -liberty +/greenpak4/gp_dff.lib"); | ||||||
| 			run("opt -fast"); | 			run("opt -fast"); | ||||||
| 			if (retime || help_mode) | 			if (retime || help_mode) | ||||||
| 				run("abc -dff", "(only if -retime)"); | 				run("abc -dff -D 1", "(only if -retime)"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (check_label("map_luts")) | 		if (check_label("map_luts")) | ||||||
|  |  | ||||||
|  | @ -65,7 +65,7 @@ struct SynthIce40Pass : public ScriptPass | ||||||
| 		log("        do not flatten design before synthesis\n"); | 		log("        do not flatten design before synthesis\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -retime\n"); | 		log("    -retime\n"); | ||||||
| 		log("        run 'abc' with -dff option\n"); | 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -nocarry\n"); | 		log("    -nocarry\n"); | ||||||
| 		log("        do not use SB_CARRY cells in output netlist\n"); | 		log("        do not use SB_CARRY cells in output netlist\n"); | ||||||
|  | @ -316,7 +316,7 @@ struct SynthIce40Pass : public ScriptPass | ||||||
| 				run("techmap -map +/techmap.v -map +/ice40/arith_map.v"); | 				run("techmap -map +/techmap.v -map +/ice40/arith_map.v"); | ||||||
| 			} | 			} | ||||||
| 			if (retime || help_mode) | 			if (retime || help_mode) | ||||||
| 				run(abc + " -dff", "(only if -retime)"); | 				run(abc + " -dff -D 1", "(only if -retime)"); | ||||||
| 			run("ice40_opt"); | 			run("ice40_opt"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -71,7 +71,7 @@ struct SynthIntelPass : public ScriptPass { | ||||||
| 		log("        do not flatten design before synthesis\n"); | 		log("        do not flatten design before synthesis\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -retime\n"); | 		log("    -retime\n"); | ||||||
| 		log("        run 'abc' with -dff option\n"); | 		log("        run 'abc' with '-dff -D 1' options\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"); | ||||||
| 		help_script(); | 		help_script(); | ||||||
|  | @ -210,7 +210,7 @@ struct SynthIntelPass : public ScriptPass { | ||||||
| 			run("clean -purge"); | 			run("clean -purge"); | ||||||
| 			run("setundef -undriven -zero"); | 			run("setundef -undriven -zero"); | ||||||
| 			if (retime || help_mode) | 			if (retime || help_mode) | ||||||
| 				run("abc -markgroups -dff", "(only if -retime)"); | 				run("abc -markgroups -dff -D 1", "(only if -retime)"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (check_label("map_luts")) { | 		if (check_label("map_luts")) { | ||||||
|  |  | ||||||
|  | @ -67,7 +67,7 @@ struct SynthSf2Pass : public ScriptPass | ||||||
| 		log("        insert direct PAD->global_net buffers\n"); | 		log("        insert direct PAD->global_net buffers\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -retime\n"); | 		log("    -retime\n"); | ||||||
| 		log("        run 'abc' with -dff option\n"); | 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||||
| 		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"); | ||||||
|  | @ -181,7 +181,7 @@ struct SynthSf2Pass : public ScriptPass | ||||||
| 			run("opt -undriven -fine"); | 			run("opt -undriven -fine"); | ||||||
| 			run("techmap -map +/techmap.v -map +/sf2/arith_map.v"); | 			run("techmap -map +/techmap.v -map +/sf2/arith_map.v"); | ||||||
| 			if (retime || help_mode) | 			if (retime || help_mode) | ||||||
| 				run("abc -dff", "(only if -retime)"); | 				run("abc -dff -D 1", "(only if -retime)"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (check_label("map_ffs")) | 		if (check_label("map_ffs")) | ||||||
|  |  | ||||||
|  | @ -2315,7 +2315,7 @@ module DSP48E1 ( | ||||||
|     endfunction |     endfunction | ||||||
| 
 | 
 | ||||||
|     initial begin |     initial begin | ||||||
| `ifdef __ICARUS__ | `ifndef YOSYS | ||||||
|         if (AUTORESET_PATDET != "NO_RESET") $fatal(1, "Unsupported AUTORESET_PATDET value"); |         if (AUTORESET_PATDET != "NO_RESET") $fatal(1, "Unsupported AUTORESET_PATDET value"); | ||||||
|         if (SEL_MASK != "MASK")     $fatal(1, "Unsupported SEL_MASK value"); |         if (SEL_MASK != "MASK")     $fatal(1, "Unsupported SEL_MASK value"); | ||||||
|         if (SEL_PATTERN != "PATTERN") $fatal(1, "Unsupported SEL_PATTERN value"); |         if (SEL_PATTERN != "PATTERN") $fatal(1, "Unsupported SEL_PATTERN value"); | ||||||
|  | @ -2478,12 +2478,12 @@ module DSP48E1 ( | ||||||
|         case (OPMODEr[1:0]) |         case (OPMODEr[1:0]) | ||||||
|             2'b00: X = 48'b0; |             2'b00: X = 48'b0; | ||||||
|             2'b01: begin X = $signed(Mrx); |             2'b01: begin X = $signed(Mrx); | ||||||
| `ifdef __ICARUS__ | `ifndef YOSYS | ||||||
|                 if (OPMODEr[3:2] != 2'b01) $fatal(1, "OPMODEr[3:2] must be 2'b01 when OPMODEr[1:0] is 2'b01"); |                 if (OPMODEr[3:2] != 2'b01) $fatal(1, "OPMODEr[3:2] must be 2'b01 when OPMODEr[1:0] is 2'b01"); | ||||||
| `endif | `endif | ||||||
|             end |             end | ||||||
|             2'b10: begin X = P; |             2'b10: begin X = P; | ||||||
| `ifdef __ICARUS__ | `ifndef YOSYS | ||||||
|                 if (PREG != 1) $fatal(1, "PREG must be 1 when OPMODEr[1:0] is 2'b10"); |                 if (PREG != 1) $fatal(1, "PREG must be 1 when OPMODEr[1:0] is 2'b10"); | ||||||
| `endif | `endif | ||||||
|             end |             end | ||||||
|  | @ -2495,7 +2495,7 @@ module DSP48E1 ( | ||||||
|         case (OPMODEr[3:2]) |         case (OPMODEr[3:2]) | ||||||
|             2'b00: Y = 48'b0; |             2'b00: Y = 48'b0; | ||||||
|             2'b01: begin Y = 48'b0; // FIXME: more accurate partial product modelling? |             2'b01: begin Y = 48'b0; // FIXME: more accurate partial product modelling? | ||||||
| `ifdef __ICARUS__ | `ifndef YOSYS | ||||||
|                 if (OPMODEr[1:0] != 2'b01) $fatal(1, "OPMODEr[1:0] must be 2'b01 when OPMODEr[3:2] is 2'b01"); |                 if (OPMODEr[1:0] != 2'b01) $fatal(1, "OPMODEr[1:0] must be 2'b01 when OPMODEr[3:2] is 2'b01"); | ||||||
| `endif | `endif | ||||||
|             end |             end | ||||||
|  | @ -2509,13 +2509,13 @@ module DSP48E1 ( | ||||||
|             3'b000: Z = 48'b0; |             3'b000: Z = 48'b0; | ||||||
|             3'b001: Z = PCIN; |             3'b001: Z = PCIN; | ||||||
|             3'b010: begin Z = P; |             3'b010: begin Z = P; | ||||||
| `ifdef __ICARUS__ | `ifndef YOSYS | ||||||
|                 if (PREG != 1) $fatal(1, "PREG must be 1 when OPMODEr[6:4] i0s 3'b010"); |                 if (PREG != 1) $fatal(1, "PREG must be 1 when OPMODEr[6:4] i0s 3'b010"); | ||||||
| `endif | `endif | ||||||
|             end |             end | ||||||
|             3'b011: Z = Cr; |             3'b011: Z = Cr; | ||||||
|             3'b100: begin Z = P; |             3'b100: begin Z = P; | ||||||
| `ifdef __ICARUS__ | `ifndef YOSYS | ||||||
|                 if (PREG != 1) $fatal(1, "PREG must be 1 when OPMODEr[6:4] is 3'b100"); |                 if (PREG != 1) $fatal(1, "PREG must be 1 when OPMODEr[6:4] is 3'b100"); | ||||||
|                 if (OPMODEr[3:0] != 4'b1000) $fatal(1, "OPMODEr[3:0] must be 4'b1000 when OPMODEr[6:4] i0s 3'b100"); |                 if (OPMODEr[3:0] != 4'b1000) $fatal(1, "OPMODEr[3:0] must be 4'b1000 when OPMODEr[6:4] i0s 3'b100"); | ||||||
| `endif | `endif | ||||||
|  |  | ||||||
|  | @ -108,7 +108,7 @@ struct SynthXilinxPass : public ScriptPass | ||||||
| 		log("        flatten design before synthesis\n"); | 		log("        flatten design before synthesis\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -retime\n"); | 		log("    -retime\n"); | ||||||
| 		log("        run 'abc' with -dff option\n"); | 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    -abc9\n"); | 		log("    -abc9\n"); | ||||||
| 		log("        use new ABC9 flow (EXPERIMENTAL)\n"); | 		log("        use new ABC9 flow (EXPERIMENTAL)\n"); | ||||||
|  | @ -550,9 +550,9 @@ struct SynthXilinxPass : public ScriptPass | ||||||
| 			} | 			} | ||||||
| 			else { | 			else { | ||||||
| 				if (nowidelut) | 				if (nowidelut) | ||||||
| 					run("abc -luts 2:2,3,6:5" + string(retime ? " -dff" : "")); | 					run("abc -luts 2:2,3,6:5" + string(retime ? " -dff -D 1" : "")); | ||||||
| 				else | 				else | ||||||
| 					run("abc -luts 2:2,3,6:5,10,20" + string(retime ? " -dff" : "")); | 					run("abc -luts 2:2,3,6:5,10,20" + string(retime ? " -dff -D 1" : "")); | ||||||
| 			} | 			} | ||||||
| 			run("clean"); | 			run("clean"); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue