add MUX support
authorPepijn de Vos <pepijndevos@gmail.com>
Thu, 5 Sep 2019 11:36:41 +0000 (13:36 +0200)
committerPepijn de Vos <pepijndevos@gmail.com>
Thu, 5 Sep 2019 11:36:41 +0000 (13:36 +0200)
techlibs/gowin/cells_map.v
techlibs/gowin/cells_sim.v
techlibs/gowin/synth_gowin.cc

index ebdc88a0a08549d6a20fb546d539c27f6c9f7300..c38805b91b6d867324285d57517bbbd410461b55 100644 (file)
@@ -5,6 +5,9 @@ module  \$__DFFS_PN0_ (input D, C, R, output Q); DFFR _TECHMAP_REPLACE_ (.D(D),
 module  \$__DFFS_PP0_ (input D, C, R, output Q); DFFR _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R)); endmodule
 module  \$__DFFS_PP1_ (input D, C, R, output Q); DFFR  _TECHMAP_REPLACE_ (.D(D), .Q(Q), .CLK(C), .RESET(R)); endmodule
 
+module  \$_MUX_ (input A, B, S, output Y); MUX2  _TECHMAP_REPLACE_ (.I0(A), .I1(B), .S0(S), .O(Y)); endmodule
+module  \$_MUX4_ (input A, B, C, D, S, T, output Y); MUX4  _TECHMAP_REPLACE_ (.I0(A), .I1(B), .I2(C), .I3(D), .S0(S), .S1(T), .O(Y)); endmodule
+
 module \$lut (A, Y);
   parameter WIDTH = 0;
   parameter LUT = 0;
index ebb238bad1e720a414f2beb0301ee40eaa458af1..98dfef9bfac3d2a170b69408585be2786ccd3879 100644 (file)
@@ -24,6 +24,19 @@ module LUT4(output F, input I0, I1, I2, I3);
        assign F = I0 ? s1[1] : s1[0];
 endmodule
 
+module MUX2 (I0, I1, S0, O);
+input I0, I1, S0;
+output O;
+assign O = S0 ? I1 : I0;
+endmodule
+
+module MUX4 (I0, I1, I2, I3, S0, S1, O);
+input I0, I1, I2, I3, S0, S1;
+output O;
+assign O = S1 ? (S0 ? I3 : I2) :
+                (S0 ? I1 : I0);
+endmodule
+
 module DFF (output reg Q, input CLK, D);
        parameter [0:0] INIT = 1'b0;
        initial Q = INIT;
index f7a5006bcbb994b22327d226001c7e9a0b390342..4d32f62d4a6d17d37020ddd7f4f3f7c0d9fb04a2 100644 (file)
@@ -196,6 +196,7 @@ struct SynthGowinPass : public ScriptPass
                        run("opt_clean");
                        if (!nodffe)
                                run("dff2dffe -direct-match $_DFF_* -direct-match $__DFFS_*");
+                       run("muxcover -mux4");
                        run("techmap -map +/gowin/cells_map.v");
                        run("opt_expr -mux_undef");
                        run("simplemap");