equiv_opt: pass -D EQUIV when techmapping.
authorwhitequark <whitequark@whitequark.org>
Fri, 7 Dec 2018 16:58:33 +0000 (16:58 +0000)
committerwhitequark <whitequark@whitequark.org>
Fri, 7 Dec 2018 17:20:34 +0000 (17:20 +0000)
This allows avoiding techmap crashes e.g. because of large memories
in white-box cell models.

passes/equiv/equiv_opt.cc
techlibs/ice40/cells_sim.v
tests/opt/ice40_carry.v [deleted file]
tests/opt/opt_lut.ys

index 68593d3018f006fa9436bb79513629970b58a57a..408afd3e475f4a00244b45f68e127259ecf5e09c 100644 (file)
@@ -137,10 +137,12 @@ struct EquivOptPass : public ScriptPass
 
     if ((!techmap_opts.empty() || help_mode) && check_label("techmap", "(only with -map)"))
     {
+      string opts;
       if (help_mode)
-        run("techmap -autoproc -map <filename> ...");
+        opts = " -map <filename> ...";
       else
-        run("techmap -autoproc" + techmap_opts);
+        opts = techmap_opts;
+      run("techmap -D EQUIV -autoproc" + opts);
     }
 
     if (check_label("prove"))
index e0a07af32874d9d2b1f31c221c4a468630335ada..c554c3f35e3a3aa40141d22394c2d6a13cca0407 100644 (file)
@@ -928,6 +928,7 @@ module SB_SPRAM256KA (
        output reg [15:0] DATAOUT
 );
 `ifndef BLACKBOX
+`ifndef EQUIV
        reg [15:0] mem [0:16383];
        wire off = SLEEP || !POWEROFF;
        integer i;
@@ -954,6 +955,7 @@ module SB_SPRAM256KA (
                end
        end
 `endif
+`endif
 endmodule
 
 (* blackbox *)
diff --git a/tests/opt/ice40_carry.v b/tests/opt/ice40_carry.v
deleted file mode 100644 (file)
index ed93893..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-module SB_CARRY (output CO, input I0, I1, CI);
-    assign CO = (I0 && I1) || ((I0 || I1) && CI);
-endmodule
index f3c1e28220d364402b29886e69ad4e0955138b4a..59b12c3511544f7c20351948f0110e9606f686b5 100644 (file)
@@ -1,4 +1,4 @@
 read_verilog opt_lut.v
 synth_ice40
 ice40_unlut
-equiv_opt -map ice40_carry.v -assert opt_lut -dlogic SB_CARRY:I0=1:I1=2:CI=3
+equiv_opt -map +/ice40/cells_sim.v -assert opt_lut -dlogic SB_CARRY:I0=1:I1=2:CI=3