aboutsummaryrefslogtreecommitdiffstats
path: root/techlibs
diff options
context:
space:
mode:
authorMarcelina Koƛcielnicka <mwk@0x04.net>2020-07-22 12:27:15 +0200
committerMarcelina Koƛcielnicka <mwk@0x04.net>2020-07-30 22:26:09 +0200
commit8501342fc5898ea1e6aadc33a27df54fa82d9107 (patch)
treef800244288989c3d848a0a283a9d1b4975d4f686 /techlibs
parent4a05cad7f8a6ee57292e5360eb06305e13fc308b (diff)
downloadyosys-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.cc29
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) {