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(Xor,      max(sig_a.size(), sig_b.size()), ID($xor)) | ||||
| 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(Shiftx,   sig_a.size(), ID($shiftx)) | ||||
| DEF_METHOD(Lt,       1, ID($lt)) | ||||
|  | @ -1916,6 +1912,31 @@ DEF_METHOD(LogicAnd, 1, ID($logic_and)) | |||
| DEF_METHOD(LogicOr,  1, ID($logic_or)) | ||||
| #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) \ | ||||
| 	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);                 \ | ||||
|  |  | |||
|  | @ -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
 | ||||
| // 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_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_LUT "strash; ifraig; scorr; dc2; dretime; retime {D}; 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_DFL "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; strash; &get -n; &dch -f; &nf {D}; &put; buffer; upsize {D}; dnsize {D}; stime -p" | ||||
| #define ABC_COMMAND_LUT "strash; ifraig; scorr; dc2; dretime; strash; dch -f; if; mfs2" | ||||
| #define ABC_COMMAND_SOP "strash; ifraig; scorr; dc2; dretime; strash; dch -f; cover {I} {P}" | ||||
| #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_CTR "strash; dretime; retime {D}; map {D}; buffer; upsize {D}; dnsize {D}; stime -p" | ||||
| #define ABC_FAST_COMMAND_LUT "strash; dretime; retime {D}; if" | ||||
| #define ABC_FAST_COMMAND_SOP "strash; dretime; retime {D}; cover -I {I} -P {P}" | ||||
| #define ABC_FAST_COMMAND_DFL "strash; dretime; retime {D}; map" | ||||
| #define ABC_FAST_COMMAND_LIB "strash; dretime; map {D}" | ||||
| #define ABC_FAST_COMMAND_CTR "strash; dretime; map {D}; buffer; upsize {D}; dnsize {D}; stime -p" | ||||
| #define ABC_FAST_COMMAND_LUT "strash; dretime; if" | ||||
| #define ABC_FAST_COMMAND_SOP "strash; dretime; cover -I {I} -P {P}" | ||||
| #define ABC_FAST_COMMAND_DFL "strash; dretime; map" | ||||
| 
 | ||||
| #include "kernel/register.h" | ||||
| #include "kernel/sigtools.h" | ||||
|  | @ -747,6 +747,10 @@ void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std::strin | |||
| 	else | ||||
| 		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)) | ||||
| 		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("\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"); | ||||
|  | @ -152,12 +152,12 @@ struct SynthAchronixPass : public ScriptPass { | |||
|         run("clean -purge"); | ||||
|         run("setundef -undriven -zero"); | ||||
|         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")) | ||||
|       { | ||||
|         run("abc -lut 4" + string(retime ? " -dff" : "")); | ||||
|         run("abc -lut 4" + string(retime ? " -dff -D 1" : "")); | ||||
|         run("clean"); | ||||
|       } | ||||
| 
 | ||||
|  |  | |||
|  | @ -58,7 +58,7 @@ struct SynthAnlogicPass : public ScriptPass | |||
| 		log("        do not flatten design before synthesis\n"); | ||||
| 		log("\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"); | ||||
|  | @ -164,7 +164,7 @@ struct SynthAnlogicPass : public ScriptPass | |||
| 			run("opt -undriven -fine"); | ||||
| 			run("techmap -map +/techmap.v -map +/anlogic/arith_map.v"); | ||||
| 			if (retime || help_mode) | ||||
| 				run("abc -dff", "(only if -retime)"); | ||||
| 				run("abc -dff -D 1", "(only if -retime)"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (check_label("map_ffs")) | ||||
|  |  | |||
|  | @ -55,7 +55,7 @@ struct SynthCoolrunner2Pass : public ScriptPass | |||
| 		log("        do not flatten design before synthesis\n"); | ||||
| 		log("\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"); | ||||
|  | @ -161,7 +161,7 @@ struct SynthCoolrunner2Pass : public ScriptPass | |||
| 
 | ||||
| 		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"); | ||||
| 		} | ||||
| 
 | ||||
|  |  | |||
|  | @ -56,7 +56,7 @@ struct SynthEasicPass : public ScriptPass | |||
| 		log("        do not flatten design before synthesis\n"); | ||||
| 		log("\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"); | ||||
|  | @ -158,7 +158,7 @@ struct SynthEasicPass : public ScriptPass | |||
| 			run("techmap"); | ||||
| 			run("opt -fast"); | ||||
| 			if (retime || help_mode) { | ||||
| 				run("abc -dff", " (only if -retime)"); | ||||
| 				run("abc -dff -D 1", " (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("\n"); | ||||
| 		log("    -retime\n"); | ||||
| 		log("        run 'abc' with -dff option\n"); | ||||
| 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -noccu2\n"); | ||||
| 		log("        do not use CCU2 cells in output netlist\n"); | ||||
|  | @ -290,7 +290,7 @@ struct SynthEcp5Pass : public ScriptPass | |||
| 			else | ||||
| 				run("techmap -map +/techmap.v -map +/ecp5/arith_map.v"); | ||||
| 			if (retime || help_mode) | ||||
| 				run("abc -dff", "(only if -retime)"); | ||||
| 				run("abc -dff -D 1", "(only if -retime)"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (check_label("map_ffs")) | ||||
|  |  | |||
|  | @ -58,7 +58,7 @@ struct SynthEfinixPass : public ScriptPass | |||
| 		log("        do not flatten design before synthesis\n"); | ||||
| 		log("\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"); | ||||
|  | @ -164,7 +164,7 @@ struct SynthEfinixPass : public ScriptPass | |||
| 			run("opt -undriven -fine"); | ||||
| 			run("techmap -map +/techmap.v -map +/efinix/arith_map.v"); | ||||
| 			if (retime || help_mode) | ||||
| 				run("abc -dff", "(only if -retime)"); | ||||
| 				run("abc -dff -D 1", "(only if -retime)"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (check_label("map_ffs")) | ||||
|  |  | |||
|  | @ -62,16 +62,16 @@ struct SynthGowinPass : public ScriptPass | |||
| 		log("        do not flatten design before synthesis\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -retime\n"); | ||||
| 		log("        run 'abc' with -dff option\n"); | ||||
| 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -nowidelut\n"); | ||||
| 		log("        do not use muxes to implement LUTs larger than LUT4s\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -noiopads\n"); | ||||
| 		log("        do not emit IOB at top level ports\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -abc9\n"); | ||||
| 		log("        use new ABC9 flow (EXPERIMENTAL)\n"); | ||||
| 		//log("\n");
 | ||||
| 		//log("    -abc9\n");
 | ||||
| 		//log("        use new ABC9 flow (EXPERIMENTAL)\n");
 | ||||
| 		log("\n"); | ||||
| 		log("\n"); | ||||
| 		log("The following commands are executed by this synthesis command:\n"); | ||||
|  | @ -144,10 +144,10 @@ struct SynthGowinPass : public ScriptPass | |||
| 				nowidelut = true; | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (args[argidx] == "-abc9") { | ||||
| 				abc9 = true; | ||||
| 				continue; | ||||
| 			} | ||||
| 			//if (args[argidx] == "-abc9") {
 | ||||
| 			//	abc9 = true;
 | ||||
| 			//	continue;
 | ||||
| 			//}
 | ||||
| 			if (args[argidx] == "-noiopads") { | ||||
| 				noiopads = true; | ||||
| 				continue; | ||||
|  | @ -209,7 +209,7 @@ struct SynthGowinPass : public ScriptPass | |||
| 			run("techmap -map +/techmap.v -map +/gowin/arith_map.v"); | ||||
| 			run("techmap -map +/techmap.v"); | ||||
| 			if (retime || help_mode) | ||||
| 				run("abc -dff", "(only if -retime)"); | ||||
| 				run("abc -dff -D 1", "(only if -retime)"); | ||||
| 			run("splitnets"); | ||||
| 		} | ||||
| 
 | ||||
|  | @ -227,13 +227,13 @@ struct SynthGowinPass : public ScriptPass | |||
| 
 | ||||
| 		if (check_label("map_luts")) | ||||
| 		{ | ||||
| 			if (nowidelut && abc9) { | ||||
| 			/*if (nowidelut && abc9) {
 | ||||
| 				run("abc9 -lut 4"); | ||||
| 			} else if (nowidelut && !abc9) { | ||||
| 			} else*/ if (nowidelut && !abc9) { | ||||
| 				run("abc -lut 4"); | ||||
| 			} else if (!nowidelut && abc9) { | ||||
| 			} else /*if (!nowidelut && abc9) {
 | ||||
| 				run("abc9 -lut 4:8"); | ||||
| 			} else if (!nowidelut && !abc9) { | ||||
| 			} else*/ if (!nowidelut && !abc9) { | ||||
| 				run("abc -lut 4:8"); | ||||
| 			} | ||||
| 			run("clean"); | ||||
|  |  | |||
|  | @ -59,7 +59,7 @@ struct SynthGreenPAK4Pass : public ScriptPass | |||
| 		log("        do not flatten design before synthesis\n"); | ||||
| 		log("\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"); | ||||
|  | @ -165,7 +165,7 @@ struct SynthGreenPAK4Pass : public ScriptPass | |||
| 			run("dfflibmap -prepare -liberty +/greenpak4/gp_dff.lib"); | ||||
| 			run("opt -fast"); | ||||
| 			if (retime || help_mode) | ||||
| 				run("abc -dff", "(only if -retime)"); | ||||
| 				run("abc -dff -D 1", "(only if -retime)"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (check_label("map_luts")) | ||||
|  |  | |||
|  | @ -65,7 +65,7 @@ struct SynthIce40Pass : public ScriptPass | |||
| 		log("        do not flatten design before synthesis\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -retime\n"); | ||||
| 		log("        run 'abc' with -dff option\n"); | ||||
| 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -nocarry\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"); | ||||
| 			} | ||||
| 			if (retime || help_mode) | ||||
| 				run(abc + " -dff", "(only if -retime)"); | ||||
| 				run(abc + " -dff -D 1", "(only if -retime)"); | ||||
| 			run("ice40_opt"); | ||||
| 		} | ||||
| 
 | ||||
|  |  | |||
|  | @ -71,7 +71,7 @@ struct SynthIntelPass : public ScriptPass { | |||
| 		log("        do not flatten design before synthesis\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -retime\n"); | ||||
| 		log("        run 'abc' with -dff option\n"); | ||||
| 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||
| 		log("\n"); | ||||
| 		log("The following commands are executed by this synthesis command:\n"); | ||||
| 		help_script(); | ||||
|  | @ -210,7 +210,7 @@ struct SynthIntelPass : public ScriptPass { | |||
| 			run("clean -purge"); | ||||
| 			run("setundef -undriven -zero"); | ||||
| 			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")) { | ||||
|  |  | |||
|  | @ -67,7 +67,7 @@ struct SynthSf2Pass : public ScriptPass | |||
| 		log("        insert direct PAD->global_net buffers\n"); | ||||
| 		log("\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"); | ||||
|  | @ -181,7 +181,7 @@ struct SynthSf2Pass : public ScriptPass | |||
| 			run("opt -undriven -fine"); | ||||
| 			run("techmap -map +/techmap.v -map +/sf2/arith_map.v"); | ||||
| 			if (retime || help_mode) | ||||
| 				run("abc -dff", "(only if -retime)"); | ||||
| 				run("abc -dff -D 1", "(only if -retime)"); | ||||
| 		} | ||||
| 
 | ||||
| 		if (check_label("map_ffs")) | ||||
|  |  | |||
|  | @ -2315,7 +2315,7 @@ module DSP48E1 ( | |||
|     endfunction | ||||
| 
 | ||||
|     initial begin | ||||
| `ifdef __ICARUS__ | ||||
| `ifndef YOSYS | ||||
|         if (AUTORESET_PATDET != "NO_RESET") $fatal(1, "Unsupported AUTORESET_PATDET value"); | ||||
|         if (SEL_MASK != "MASK")     $fatal(1, "Unsupported SEL_MASK value"); | ||||
|         if (SEL_PATTERN != "PATTERN") $fatal(1, "Unsupported SEL_PATTERN value"); | ||||
|  | @ -2478,12 +2478,12 @@ module DSP48E1 ( | |||
|         case (OPMODEr[1:0]) | ||||
|             2'b00: X = 48'b0; | ||||
|             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"); | ||||
| `endif | ||||
|             end | ||||
|             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"); | ||||
| `endif | ||||
|             end | ||||
|  | @ -2495,7 +2495,7 @@ module DSP48E1 ( | |||
|         case (OPMODEr[3:2]) | ||||
|             2'b00: Y = 48'b0; | ||||
|             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"); | ||||
| `endif | ||||
|             end | ||||
|  | @ -2509,13 +2509,13 @@ module DSP48E1 ( | |||
|             3'b000: Z = 48'b0; | ||||
|             3'b001: Z = PCIN; | ||||
|             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"); | ||||
| `endif | ||||
|             end | ||||
|             3'b011: Z = Cr; | ||||
|             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 (OPMODEr[3:0] != 4'b1000) $fatal(1, "OPMODEr[3:0] must be 4'b1000 when OPMODEr[6:4] i0s 3'b100"); | ||||
| `endif | ||||
|  |  | |||
|  | @ -108,7 +108,7 @@ struct SynthXilinxPass : public ScriptPass | |||
| 		log("        flatten design before synthesis\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -retime\n"); | ||||
| 		log("        run 'abc' with -dff option\n"); | ||||
| 		log("        run 'abc' with '-dff -D 1' options\n"); | ||||
| 		log("\n"); | ||||
| 		log("    -abc9\n"); | ||||
| 		log("        use new ABC9 flow (EXPERIMENTAL)\n"); | ||||
|  | @ -550,9 +550,9 @@ struct SynthXilinxPass : public ScriptPass | |||
| 			} | ||||
| 			else { | ||||
| 				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 | ||||
| 					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"); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue