xilinx/ecp5: disable abc9's "&mfs" optimisation
authorEddie Hung <eddie@fpgeh.com>
Mon, 20 Apr 2020 17:30:10 +0000 (10:30 -0700)
committerEddie Hung <eddie@fpgeh.com>
Mon, 20 Apr 2020 17:30:10 +0000 (10:30 -0700)
Can sometimes fire an assertion, e.g. #1962

passes/techmap/abc9_exe.cc
techlibs/ecp5/synth_ecp5.cc
techlibs/xilinx/synth_xilinx.cc

index 18618ff91ba4570957567f23e1b7d2e106bdffad..1aabbd396020867e20bead2f153a033de311e4c5 100644 (file)
@@ -219,6 +219,10 @@ void abc9_module(RTLIL::Design *design, std::string script_file, std::string exe
        for (size_t pos = abc9_script.find("{R}"); pos != std::string::npos; pos = abc9_script.find("{R}", pos))
                abc9_script = abc9_script.substr(0, pos) + R + abc9_script.substr(pos+3);
 
+       if (design->scratchpad_get_bool("abc9.nomfs"))
+               for (size_t pos = abc9_script.find("&mfs"); pos != std::string::npos; pos = abc9_script.find("&mfs", pos))
+                       abc9_script = abc9_script.erase(pos, strlen("&mfs"));
+
        abc9_script += stringf("; &ps -l; &write -n %s/output.aig", tempdir_name.c_str());
        if (design->scratchpad_get_bool("abc9.verify")) {
                if (dff_mode)
index ab740ea0dfe4e49bba35a9740cf4f81b50a3a649..31794797812d84092d55ae25d1098cab47b9d769 100644 (file)
@@ -324,6 +324,8 @@ struct SynthEcp5Pass : public ScriptPass
 
                        if (abc9) {
                                run("read_verilog -icells -lib -specify +/abc9_model.v +/ecp5/abc9_model.v");
+                               if (!help_mode && !active_design->scratchpad.count("abc9.nomfs"))
+                                       active_design->scratchpad_set_bool("abc9.nomfs", true);
                                if (nowidelut)
                                        run("abc9 -maxlut 4 -W 200");
                                else
index 1c190d37e5b6dbb2298c6c7ccaa73d15c15389c5..eb9fa1e8265d2048a246467f4a420457f28310ad 100644 (file)
@@ -613,6 +613,8 @@ struct SynthXilinxPass : public ScriptPass
                                if (family != "xc7")
                                        log_warning("'synth_xilinx -abc9' not currently supported for the '%s' family, "
                                                        "will use timing for 'xc7' instead.\n", family.c_str());
+                               if (!help_mode && !active_design->scratchpad.count("abc9.nomfs"))
+                                       active_design->scratchpad_set_bool("abc9.nomfs", true);
                                std::string techmap_args = "-map +/xilinx/abc9_map.v -max_iter 1";
                                if (dff_mode)
                                        techmap_args += " -D DFF_MODE";