$__ABC_REG to have WIDTH parameter
[yosys.git] / techlibs / xilinx / abc_map.v
index 1b7900af8cd227e2e0a90daefc59c0c25f4763a9..423da3fdb3ca978fa8722fd80d9ca0526d05a045 100644 (file)
@@ -292,30 +292,31 @@ __CELL__ #(
         );
 """
 
-    generate
-    if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin
-        wire [29:0] iA;
-        wire [17:0] iB;
-        wire [47:0] iC;
-        wire [24:0] iD;
+    wire [29:0] iA;
+    wire [17:0] iB;
+    wire [47:0] iC;
+    wire [24:0] iD;
 
-        wire pA, pB, pC, pD, pAD, pM, pP;
-        wire [47:0] oP, oPCOUT;
+    wire pA, pB, pC, pD, pAD, pM, pP;
+    wire [47:0] oP, mP;
+    wire [47:0] oPCOUT, mPCOUT;
 
+    generate
+    if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin
                // Disconnect the A-input if MREG is enabled, since
                //   combinatorial path is broken
         if (AREG == 0 && MREG == 0 && PREG == 0)
             assign iA = A, pA = 1'bx;
         else
-            \$__ABC_DSP48E1_REG rA (.I(A), .O(iA), .Q(pA));
+            \$__ABC_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
         if (BREG == 0 && MREG == 0 && PREG == 0)
             assign iB = B, pB = 1'bx;
         else
-            \$__ABC_DSP48E1_REG rB (.I(B), .O(iB), .Q(pB));
+            \$__ABC_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
         if (CREG == 0 && PREG == 0)
             assign iC = C, pC = 1'bx;
         else
-            \$__ABC_DSP48E1_REG rC (.I(C), .O(iC), .Q(pC));
+            \$__ABC_REG #(.WIDTH(48)) rC (.I(C), .O(iC), .Q(pC));
         if (DREG == 0)
             assign iD = D;
         else if (techmap_guard)
@@ -327,97 +328,89 @@ __CELL__ #(
                if (PREG == 0) begin
             assign pP = 1'bx;
                        if (MREG == 1)
-                               \$__ABC_DSP48E1_REG rM (.Q(pM));
+                               \$__ABC_REG rM (.Q(pM));
             else
                 assign pM = 1'bx;
                end
         else begin
-            \$__ABC_DSP48E1_REG rP (.Q(pP));
+            \$__ABC_REG rP (.Q(pP));
             assign pM = 1'bx;
         end
 
+        if (MREG == 0 && PREG == 0)
+            assign mP = oP, mPCOUT = oPCOUT;
+        else
+            assign mP = 1'bx, mPCOUT = 1'bx;
         \$__ABC_DSP48E1_MULT_P_MUX muxP (
-            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .Mq(pM), .P(oP), .Pq(pP), .O(P)
+            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oP), .Mq(pM), .P(mP), .Pq(pP), .O(P)
         );
         \$__ABC_DSP48E1_MULT_PCOUT_MUX muxPCOUT (
-            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .Mq(pM), .P(oPCOUT), .Pq(pP), .O(PCOUT)
+            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oPCOUT), .Mq(pM), .P(mPCOUT), .Pq(pP), .O(PCOUT)
         );
 
         `DSP48E1_INST(\$__ABC_DSP48E1_MULT )
     end
     else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin
-        wire [29:0] iA;
-        wire [17:0] iB;
-        wire [47:0] iC;
-        wire [24:0] iD;
-
-        wire pA, pB, pC, pD, pAD, pM, pP;
-        wire [47:0] oP, oPCOUT;
-
                // Disconnect the A-input if MREG is enabled, since
                //   combinatorial path is broken
         if (AREG == 0 && ADREG == 0 && MREG == 0 && PREG == 0)
             assign iA = A, pA = 1'bx;
         else
-            \$__ABC_DSP48E1_REG rA (.I(A), .O(iA), .Q(pA));
+            \$__ABC_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
         if (BREG == 0 && MREG == 0 && PREG == 0)
             assign iB = B, pB = 1'bx;
         else
-            \$__ABC_DSP48E1_REG rB (.I(B), .O(iB), .Q(pB));
+            \$__ABC_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
         if (CREG == 0 && PREG == 0)
             assign iC = C, pC = 1'bx;
         else
-            \$__ABC_DSP48E1_REG rC (.I(C), .O(iC), .Q(pC));
+            \$__ABC_REG #(.WIDTH(48)) rC (.I(C), .O(iC), .Q(pC));
         if (DREG == 0 && ADREG == 0)
             assign iD = D, pD = 1'bx;
         else
-            \$__ABC_DSP48E1_REG rD (.I(D), .O(iD), .Q(pD));
+            \$__ABC_REG #(.WIDTH(25)) rD (.I(D), .O(iD), .Q(pD));
                if (PREG == 0) begin
                        if (MREG == 1)
-                               \$__ABC_DSP48E1_REG rM (.Q(pM));
+                               \$__ABC_REG rM (.Q(pM));
             else begin
                 assign pM = 1'bx;
                 if (ADREG == 1)
-                    \$__ABC_DSP48E1_REG rAD (.Q(pAD));
+                    \$__ABC_REG rAD (.Q(pAD));
                 else
                     assign pAD = 1'bx;
             end
                end
                else
-            \$__ABC_DSP48E1_REG rP (.Q(pP));
+            \$__ABC_REG rP (.Q(pP));
 
+        if (MREG == 0 && PREG == 0)
+            assign mP = oP, mPCOUT = oPCOUT;
+        else
+            assign mP = 1'bx, mPCOUT = 1'bx;
         \$__ABC_DSP48E1_MULT_DPORT_P_MUX muxP (
-            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .Mq(pM), .P(oP), .Pq(pP), .O(P)
+            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oP), .Mq(pM), .P(mP), .Pq(pP), .O(P)
         );
         \$__ABC_DSP48E1_MULT_DPORT_PCOUT_MUX muxPCOUT (
-            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .Mq(pM), .P(oPCOUT), .Pq(pP), .O(PCOUT)
+            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oPCOUT), .Mq(pM), .P(mPCOUT), .Pq(pP), .O(PCOUT)
         );
 
         `DSP48E1_INST(\$__ABC_DSP48E1_MULT_DPORT )
     end
     else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin
-        wire [29:0] iA;
-        wire [17:0] iB;
-        wire [47:0] iC;
-        wire [24:0] iD;
-
-        wire pA, pB, pC, pD, pAD, pM, pP;
-        wire [47:0] oP, oPCOUT;
-
                // Disconnect the A-input if MREG is enabled, since
                //   combinatorial path is broken
         if (AREG == 0 && PREG == 0)
             assign iA = A, pA = 1'bx;
         else
-            \$__ABC_DSP48E1_REG rA (.I(A), .O(iA), .Q(pA));
+            \$__ABC_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
         if (BREG == 0 && PREG == 0)
             assign iB = B, pB = 1'bx;
         else
-            \$__ABC_DSP48E1_REG rB (.I(B), .O(iB), .Q(pB));
+            \$__ABC_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
         if (CREG == 0 && PREG == 0)
             assign iC = C, pC = 1'bx;
         else
-            \$__ABC_DSP48E1_REG rC (.I(C), .O(iC), .Q(pC));
+            \$__ABC_REG #(.WIDTH(48)) rC (.I(C), .O(iC), .Q(pC));
         if (MREG == 1 && techmap_guard)
             $error("Invalid DSP48E1 configuration: MREG enabled but USE_MULT == \"NONE\"");
         assign pM = 1'bx;
@@ -428,15 +421,19 @@ __CELL__ #(
                        $error("Invalid DSP48E1 configuration: ADREG enabled but USE_DPORT == \"FALSE\"");
         assign pAD = 1'bx;
                if (PREG == 1)
-            \$__ABC_DSP48E1_REG rP (.Q(pP));
+            \$__ABC_REG rP (.Q(pP));
         else
             assign pP = 1'bx;
 
+        if (MREG == 0 && PREG == 0)
+            assign mP = oP, mPCOUT = oPCOUT;
+        else
+            assign mP = 1'bx, mPCOUT = 1'bx;
         \$__ABC_DSP48E1_P_MUX muxP (
-            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .Mq(pM), .P(oP), .Pq(pP), .O(P)
+            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oP), .Mq(pM), .P(mP), .Pq(pP), .O(P)
         );
         \$__ABC_DSP48E1_PCOUT_MUX muxPCOUT (
-            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .Mq(pM), .P(oPCOUT), .Pq(pP), .O(PCOUT)
+            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oPCOUT), .Mq(pM), .P(mPCOUT), .Pq(pP), .O(PCOUT)
         );
 
         `DSP48E1_INST(\$__ABC_DSP48E1 )