diff options
| author | Marcelina KoĆcielnicka <mwk@0x04.net> | 2020-07-22 12:27:15 +0200 | 
|---|---|---|
| committer | Marcelina KoĆcielnicka <mwk@0x04.net> | 2020-07-30 22:26:09 +0200 | 
| commit | 8501342fc5898ea1e6aadc33a27df54fa82d9107 (patch) | |
| tree | f800244288989c3d848a0a283a9d1b4975d4f686 /techlibs | |
| parent | 4a05cad7f8a6ee57292e5360eb06305e13fc308b (diff) | |
| download | yosys-8501342fc5898ea1e6aadc33a27df54fa82d9107.tar.gz yosys-8501342fc5898ea1e6aadc33a27df54fa82d9107.tar.bz2 yosys-8501342fc5898ea1e6aadc33a27df54fa82d9107.zip  | |
synth_xilinx: Use opt_dff.
The main part is converting xilinx_dsp to recognize the new FF types
created in opt_dff instead of trying to recognize the patterns on its
own.
The fsm call has been moved upwards because the passes cannot deal with
$dffe/$sdff*, and other optimizations don't help it much anyway.
Diffstat (limited to 'techlibs')
| -rw-r--r-- | techlibs/xilinx/synth_xilinx.cc | 29 | 
1 files changed, 12 insertions, 17 deletions
diff --git a/techlibs/xilinx/synth_xilinx.cc b/techlibs/xilinx/synth_xilinx.cc index 45b4f5165..dc293f237 100644 --- a/techlibs/xilinx/synth_xilinx.cc +++ b/techlibs/xilinx/synth_xilinx.cc @@ -358,6 +358,10 @@ struct SynthXilinxPass : public ScriptPass  			run("opt_clean");  			run("check");  			run("opt"); +			run("fsm"); +			run("opt"); +			run("opt_dff"); +			run("opt");  			if (help_mode)  				run("wreduce [-keepdc]", "(option for '-widemux')");  			else @@ -444,8 +448,6 @@ struct SynthXilinxPass : public ScriptPass  			run("alumacc");  			run("share");  			run("opt"); -			run("fsm"); -			run("opt -fast");  			run("memory -nomap");  			run("opt_clean");  		} @@ -504,28 +506,21 @@ struct SynthXilinxPass : public ScriptPass  		}  		if (check_label("map_ffram")) { -			// Required for dff2dffs to work. -			run("simplemap t:$dff t:$adff t:$mux"); -			// Needs to be done before opt -mux_bool happens. -			if (help_mode) -				run("dff2dffs [-match-init]", "(-match-init for xc6s only)"); -			else if (family == "xc6s") -				run("dff2dffs -match-init"); -			else -				run("dff2dffs"); -			if (widemux > 0) +			if (widemux > 0) {  				run("opt -fast -mux_bool -undriven -fine"); // Necessary to omit -mux_undef otherwise muxcover  									    // performs less efficiently -			else +			} else {  				run("opt -fast -full"); +			}  			run("memory_map");  		}  		if (check_label("fine")) { -			run("dff2dffe -direct-match $_DFF_* -direct-match $_SDFF_*"); -			if (help_mode) -				run("muxcover <internal options> ('-widemux' only)"); -			else if (widemux > 0) { +			if (help_mode) { +				run("simplemap t:$mux", "('-widemux' only)"); +				run("muxcover <internal options>", "('-widemux' only)"); +			} else if (widemux > 0) { +				run("simplemap t:$mux");  				constexpr int cost_mux2 = 100;  				std::string muxcover_args = stringf(" -nodecode -mux2=%d", cost_mux2);  				switch (widemux) {  | 
