Merge pull request #3247 from jix/smtbmc-keepgoing
[yosys.git] / techlibs / gowin / arith_map.v
index e15de6423471b362672b1450cb0d493a573fdd04..2d48fa752a220ecfb4b4ac66a9f24d7a5ca4697e 100644 (file)
@@ -1,8 +1,8 @@
 /*
  *  yosys -- Yosys Open SYnthesis Suite
  *
- *  Copyright (C) 2012  Clifford Wolf <clifford@clifford.at>
- *  Copyright (C) 2018  David Shah <dave@ds0.me>
+ *  Copyright (C) 2012  Claire Xenia Wolf <claire@yosyshq.com>
+ *  Copyright (C) 2018  gatecat <gatecat@ds0.me>
  *
  *  Permission to use, copy, modify, and/or distribute this software for any
  *  purpose with or without fee is hereby granted, provided that the above
@@ -26,29 +26,37 @@ module _80_gw1n_alu(A, B, CI, BI, X, Y, CO);
    parameter B_WIDTH = 1;
    parameter Y_WIDTH = 1;
 
+   (* force_downto *)
    input [A_WIDTH-1:0] A;
+   (* force_downto *)
    input [B_WIDTH-1:0] B;
+   (* force_downto *)
    output [Y_WIDTH-1:0] X, Y;
 
    input               CI, BI;
+   (* force_downto *)
    output [Y_WIDTH-1:0] CO;
 
    wire                _TECHMAP_FAIL_ = Y_WIDTH <= 2;
 
+   (* force_downto *)
    wire [Y_WIDTH-1:0]  A_buf, B_buf;
    \$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(A_buf));
    \$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(B_buf));
 
+   (* force_downto *)
    wire [Y_WIDTH-1:0]  AA = A_buf;
-   wire [Y_WIDTH-1:0]  BB = BI ? ~B_buf : B_buf;
+   (* force_downto *)
+   wire [Y_WIDTH-1:0]  BB = B_buf;
+   (* force_downto *)
    wire [Y_WIDTH-1:0]  C = {CO, CI};
 
    genvar              i;
    generate for (i = 0; i < Y_WIDTH; i = i + 1) begin:slice
-      ALU #(.ALU_MODE(32'b0))
+      ALU #(.ALU_MODE(2)) // ADDSUB I3 ? add : sub
       alu(.I0(AA[i]),
          .I1(BB[i]),
-         .I3(1'b0),
+         .I3(~BI),
          .CIN(C[i]),
          .COUT(CO[i]),
          .SUM(Y[i])