Remove (* techmap_autopurge *) from abc_unmap.v since no effect
[yosys.git] / techlibs / xilinx / abc_map.v
index 124ce6d8f7d60ac4b56f2aceda95dcda5aba2127..9d78725df81f50ad79467ad0f5ef45667e3c317d 100644 (file)
@@ -292,176 +292,156 @@ __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 pAP, pBP, pCP, pDP, pADP, pMP, pPP;
-        wire pAPCOUT, pBPCOUT, pCPCOUT, pDPCOUT, pADPCOUT, pMPCOUT, pPPCOUT;
-        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, pAP = 1'bx, pAPCOUT = 1'bx;
+            assign iA = A, pA = 1'bx;
         else
-            \$__ABC_DSP48E1_MULT_AREG rA (.I(A), .O(iA), .P(pAP), .PCOUT(pAPCOUT));
+            \$__ABC_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
         if (BREG == 0 && MREG == 0 && PREG == 0)
-            assign iB = B, pBP = 1'bx, pBPCOUT = 1'bx;
+            assign iB = B, pB = 1'bx;
         else
-            \$__ABC_DSP48E1_MULT_BREG rB (.I(B), .O(iB), .P(pBP), .PCOUT(pBPCOUT));
+            \$__ABC_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
         if (CREG == 0 && PREG == 0)
-            assign iC = C, pCP = 1'bx, pCPCOUT = 1'bx;
+            assign iC = C, pC = 1'bx;
         else
-            \$__ABC_DSP48E1_MULT_CREG rC (.I(C), .O(iC), .P(pCP), .PCOUT(pCPCOUT));
+            \$__ABC_REG #(.WIDTH(48)) rC (.I(C), .O(iC), .Q(pC));
         if (DREG == 0)
             assign iD = D;
         else if (techmap_guard)
-            $error("Invalid DSP48E1 configuration: DREG enabled but USE_DPORT == \"FALSE\"");
-        assign pDP = 1'bx, pDPCOUT = 1'bx;
+        $error("Invalid DSP48E1 configuration: DREG enabled but USE_DPORT == \"FALSE\"");
+        assign pD = 1'bx;
         if (ADREG == 1 && techmap_guard)
             $error("Invalid DSP48E1 configuration: ADREG enabled but USE_DPORT == \"FALSE\"");
-        assign pADP = 1'bx, pADPCOUT = 1'bx;
-               if (PREG == 0) begin
-                       if (MREG == 1)
-                               \$__ABC_DSP48E1_MULT_MREG rM (.P(pMP), .PCOUT(pMPCOUT));
-            else
-                assign pMP = 1'bx, pMPCOUT = 1'bx;
-            assign pPP = 1'bx, pPPCOUT = 1'bx;
-               end
-        else begin
-            assign pMP = 1'bx, pMPCOUT = 1'bx;
-            \$__ABC_DSP48E1_MULT_PREG rP (.P(pPP), .PCOUT(pPPCOUT));
+        assign pAD = 1'bx;
+    if (PREG == 0) begin
+        if (MREG == 1)
+        \$__ABC_REG rM (.Q(pM));
+        else
+        assign pM = 1'bx;
+        assign pP = 1'bx;
+    end else begin
+            assign pM = 1'bx;
+            \$__ABC_REG rP (.Q(pP));
         end
 
-        if (MREG == 0 && PREG == 0) begin
-            \$__ABC_DSP48E1_MUX muxP (
-                .Aq(pAP), .Bq(pBP), .Cq(pCP), .Dq(pDP), .ADq(pADP), .Mq(pMP), .P(oP), .Pq(pPP), .O(P)
-            );
-            \$__ABC_DSP48E1_MUX muxPCOUT (
-                .Aq(pAPCOUT), .Bq(pBPCOUT), .Cq(pCPCOUT), .Dq(pDPCOUT), .ADq(pADPCOUT), .Mq(pMPCOUT), .P(oPCOUT), .Pq(pPPCOUT), .O(PCOUT)
-            );
-        end
-        else begin
-            \$__ABC_DSP48E1_MUX muxP (
-                .Aq(pAP), .Bq(pBP), .Cq(pCP), .Dq(pDP), .ADq(pADP), .Mq(pMP), .P(1'bx), .Pq(pPP), .O(P)
-            );
-            \$__ABC_DSP48E1_MUX muxPCOUT (
-                .Aq(pAPCOUT), .Bq(pBPCOUT), .Cq(pCPCOUT), .Dq(pDPCOUT), .ADq(pADPCOUT), .Mq(pMPCOUT), .P(1'bx), .Pq(pPPCOUT), .O(PCOUT)
-            );
-        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), .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), .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 pAP, pBP, pCP, pDP, pADP, pMP, pPP;
-        wire pAPCOUT, pBPCOUT, pCPCOUT, pDPCOUT, pADPCOUT, pMPCOUT, pPPCOUT;
-        wire [47:0] oP, oPCOUT;
-
-               // Disconnect the A-input if MREG is enabled, since
-               //   combinatorial path is broken
+        // 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, pAP = 1'bx, pAPCOUT = 1'bx;
+            assign iA = A, pA = 1'bx;
         else
-            \$__ABC_DSP48E1_MULT_DPORT_AREG rA (.I(A), .O(iA), .P(pAP), .PCOUT(pAPCOUT));
+            \$__ABC_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
         if (BREG == 0 && MREG == 0 && PREG == 0)
-            assign iB = B, pBP = 1'bx, pBPCOUT = 1'bx;
+            assign iB = B, pB = 1'bx;
         else
-            \$__ABC_DSP48E1_MULT_DPORT_BREG rB (.I(B), .O(iB), .P(pBP), .PCOUT(pBPCOUT));
+            \$__ABC_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
         if (CREG == 0 && PREG == 0)
-            assign iC = C, pCP = 1'bx, pCPCOUT = 1'bx;
+            assign iC = C, pC = 1'bx;
         else
-            \$__ABC_DSP48E1_MULT_DPORT_CREG rC (.I(C), .O(iC), .P(pCP), .PCOUT(pCPCOUT));
+            \$__ABC_REG #(.WIDTH(48)) rC (.I(C), .O(iC), .Q(pC));
         if (DREG == 0 && ADREG == 0)
-            assign iD = D, pDP = 1'bx, pDPCOUT = 1'bx;
+            assign iD = D, pD = 1'bx;
         else
-            \$__ABC_DSP48E1_MULT_DPORT_DREG rD (.I(D), .O(iD), .P(pDP), .PCOUT(pDPCOUT));
-               if (PREG == 0) begin
+            \$__ABC_REG #(.WIDTH(25)) rD (.I(D), .O(iD), .Q(pD));
+        if (PREG == 0) begin
             if (MREG == 1) begin
-                assign pADP = 1'bx, pADPCOUT = 1'bx;
-                               \$__ABC_DSP48E1_MULT_DPORT_MREG rM (.P(pMP), .PCOUT(pMPCOUT));
-            end
-            else begin
+                assign pAD = 1'bx;
+        \$__ABC_REG rM (.Q(pM));
+            end else begin
                 if (ADREG == 1)
-                    \$__ABC_DSP48E1_MULT_DPORT_ADPREG rAD (.P(pADP), .PCOUT(pADPCOUT));
+                    \$__ABC_REG rAD (.Q(pAD));
                 else
-                    assign pADP = 1'bx, pADPCOUT = 1'bx;
-                assign pMP = 1'bx, pMPCOUT = 1'bx;
-            end
-            assign pPP = 1'bx, pPPCOUT = 1'bx;
-               end
-        else begin
-            assign pADP = 1'bx, pADPCOUT = 1'bx;
-            assign pMP = 1'bx, pMPCOUT = 1'bx;
-            \$__ABC_DSP48E1_MULT_DPORT_PREG rP (.P(pPP), .PCOUT(pPPCOUT));
+                    assign pAD = 1'bx;
+        assign pM = 1'bx;
+        end
+        assign pP = 1'bx;
+    end else begin
+            assign pAD = 1'bx, pM = 1'bx;
+            \$__ABC_REG rP (.Q(pP));
         end
 
-        \$__ABC_DSP48E1_MUX muxP (
-            .Aq(pAP), .Bq(pBP), .Cq(pCP), .Dq(pDP), .ADq(pADP), .Mq(pMP), .P(oP), .Pq(pPP), .O(P)
+        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), .I(oP), .Mq(pM), .P(mP), .Pq(pP), .O(P)
         );
-        \$__ABC_DSP48E1_MUX muxPCOUT (
-            .Aq(pAPCOUT), .Bq(pBPCOUT), .Cq(pCPCOUT), .Dq(pDPCOUT), .ADq(pADPCOUT), .Mq(pMPCOUT), .P(oPCOUT), .Pq(pPPCOUT), .O(PCOUT)
+        \$__ABC_DSP48E1_MULT_DPORT_PCOUT_MUX muxPCOUT (
+            .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 pAP, pBP, pCP, pDP, pADP, pMP, pPP;
-        wire pAPCOUT, pBPCOUT, pCPCOUT, pDPCOUT, pADPCOUT, pMPCOUT, pPPCOUT;
-        wire [47:0] oP, oPCOUT;
-
-               // Disconnect the A-input if MREG is enabled, since
-               //   combinatorial path is broken
+        // Disconnect the A-input if MREG is enabled, since
+        //   combinatorial path is broken
         if (AREG == 0 && PREG == 0)
-            assign iA = A, pAP = 1'bx, pAPCOUT = 1'bx;
+            assign iA = A, pA = 1'bx;
         else
-            \$__ABC_DSP48E1_AREG rA (.I(A), .O(iA), .P(pAP), .PCOUT(pAPCOUT));
+            \$__ABC_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
         if (BREG == 0 && PREG == 0)
-            assign iB = B, pBP = 1'bx, pBPCOUT = 1'bx;
+            assign iB = B, pB = 1'bx;
         else
-            \$__ABC_DSP48E1_BREG rB (.I(B), .O(iB), .P(pB), .PCOUT(pBPCOUT));
+            \$__ABC_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
         if (CREG == 0 && PREG == 0)
-            assign iC = C, pCP = 1'bx, pCPCOUT = 1'bx;
+            assign iC = C, pC = 1'bx;
         else
-            \$__ABC_DSP48E1_CREG rC (.I(C), .O(iC), .P(pC), .PCOUT(pCPCOUT));
+            \$__ABC_REG #(.WIDTH(48)) rC (.I(C), .O(iC), .Q(pC));
         if (DREG == 1 && techmap_guard)
-                       $error("Invalid DSP48E1 configuration: DREG enabled but USE_DPORT == \"FALSE\"");
-        assign iD = 25'bx, pDP = 1'bx, pDPCOUT = 1'bx;
+            $error("Invalid DSP48E1 configuration: DREG enabled but USE_DPORT == \"FALSE\"");
+        assign pD = 1'bx;
         if (ADREG == 1 && techmap_guard)
-                       $error("Invalid DSP48E1 configuration: ADREG enabled but USE_DPORT == \"FALSE\"");
-        assign pADP = 1'bx, pADPCOUT = 1'bx;
+            $error("Invalid DSP48E1 configuration: ADREG enabled but USE_DPORT == \"FALSE\"");
+        assign pAD = 1'bx;
         if (MREG == 1 && techmap_guard)
             $error("Invalid DSP48E1 configuration: MREG enabled but USE_MULT == \"NONE\"");
-        assign pMP = 1'bx, pMPCOUT = 1'bx;
-               if (PREG == 1)
-            \$__ABC_DSP48E1_PREG rP (.P(pPP), .P(pPCOUT));
+        assign pM = 1'bx;
+        if (PREG == 1)
+            \$__ABC_REG rP (.Q(pP));
         else
-            assign pPP = 1'bx, pPPCOUT = 1'bx;
+            assign pP = 1'bx;
 
-        \$__ABC_DSP48E1_MUX muxP (
-            .Aq(pAP), .Bq(pBP), .Cq(pCP), .Dq(pDP), .ADq(pADP), .Mq(pMP), .P(oP), .Pq(pPP), .O(P)
+        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), .I(oP), .Mq(pM), .P(mP), .Pq(pP), .O(P)
         );
-        \$__ABC_DSP48E1_MUX muxPCOUT (
-            .Aq(pAPCOUT), .Bq(pBPCOUT), .Cq(pCPCOUT), .Dq(pDPCOUT), .ADq(pADPCOUT), .Mq(pMPCOUT), .P(oPCOUT), .Pq(pPPCOUT), .O(PCOUT)
+        \$__ABC_DSP48E1_PCOUT_MUX muxPCOUT (
+            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oPCOUT), .Mq(pM), .P(mPCOUT), .Pq(pP), .O(PCOUT)
         );
 
         `DSP48E1_INST(\$__ABC_DSP48E1 )
     end
     else
         $error("Invalid DSP48E1 configuration");
-       endgenerate
-       `undef DSP48E1_INST
+    endgenerate
+    `undef DSP48E1_INST
 endmodule