diff --git a/techlibs/xilinx/abc9_map.v b/techlibs/xilinx/abc9_map.v
index 29ddf71..bc4a40e 100644
--- a/techlibs/xilinx/abc9_map.v
+++ b/techlibs/xilinx/abc9_map.v
@@ -345,326 +345,326 @@
   \$__ABC9_LUT6 q (.A(\$Q ), .S({1'b1, A}), .Y(Q));
 endmodule
 
-module DSP48E1 (
-    (* techmap_autopurge *) output [29:0] ACOUT,
-    (* techmap_autopurge *) output [17:0] BCOUT,
-    (* techmap_autopurge *) output reg CARRYCASCOUT,
-    (* techmap_autopurge *) output reg [3:0] CARRYOUT,
-    (* techmap_autopurge *) output reg MULTSIGNOUT,
-    (* techmap_autopurge *) output OVERFLOW,
-    (* techmap_autopurge *) output reg signed [47:0] P,
-    (* techmap_autopurge *) output PATTERNBDETECT,
-    (* techmap_autopurge *) output PATTERNDETECT,
-    (* techmap_autopurge *) output [47:0] PCOUT,
-    (* techmap_autopurge *) output UNDERFLOW,
-    (* techmap_autopurge *) input signed [29:0] A,
-    (* techmap_autopurge *) input [29:0] ACIN,
-    (* techmap_autopurge *) input [3:0] ALUMODE,
-    (* techmap_autopurge *) input signed [17:0] B,
-    (* techmap_autopurge *) input [17:0] BCIN,
-    (* techmap_autopurge *) input [47:0] C,
-    (* techmap_autopurge *) input CARRYCASCIN,
-    (* techmap_autopurge *) input CARRYIN,
-    (* techmap_autopurge *) input [2:0] CARRYINSEL,
-    (* techmap_autopurge *) input CEA1,
-    (* techmap_autopurge *) input CEA2,
-    (* techmap_autopurge *) input CEAD,
-    (* techmap_autopurge *) input CEALUMODE,
-    (* techmap_autopurge *) input CEB1,
-    (* techmap_autopurge *) input CEB2,
-    (* techmap_autopurge *) input CEC,
-    (* techmap_autopurge *) input CECARRYIN,
-    (* techmap_autopurge *) input CECTRL,
-    (* techmap_autopurge *) input CED,
-    (* techmap_autopurge *) input CEINMODE,
-    (* techmap_autopurge *) input CEM,
-    (* techmap_autopurge *) input CEP,
-    (* techmap_autopurge *) input CLK,
-    (* techmap_autopurge *) input [24:0] D,
-    (* techmap_autopurge *) input [4:0] INMODE,
-    (* techmap_autopurge *) input MULTSIGNIN,
-    (* techmap_autopurge *) input [6:0] OPMODE,
-    (* techmap_autopurge *) input [47:0] PCIN,
-    (* techmap_autopurge *) input RSTA,
-    (* techmap_autopurge *) input RSTALLCARRYIN,
-    (* techmap_autopurge *) input RSTALUMODE,
-    (* techmap_autopurge *) input RSTB,
-    (* techmap_autopurge *) input RSTC,
-    (* techmap_autopurge *) input RSTCTRL,
-    (* techmap_autopurge *) input RSTD,
-    (* techmap_autopurge *) input RSTINMODE,
-    (* techmap_autopurge *) input RSTM,
-    (* techmap_autopurge *) input RSTP
-);
-    parameter integer ACASCREG = 1;
-    parameter integer ADREG = 1;
-    parameter integer ALUMODEREG = 1;
-    parameter integer AREG = 1;
-    parameter AUTORESET_PATDET = "NO_RESET";
-    parameter A_INPUT = "DIRECT";
-    parameter integer BCASCREG = 1;
-    parameter integer BREG = 1;
-    parameter B_INPUT = "DIRECT";
-    parameter integer CARRYINREG = 1;
-    parameter integer CARRYINSELREG = 1;
-    parameter integer CREG = 1;
-    parameter integer DREG = 1;
-    parameter integer INMODEREG = 1;
-    parameter integer MREG = 1;
-    parameter integer OPMODEREG = 1;
-    parameter integer PREG = 1;
-    parameter SEL_MASK = "MASK";
-    parameter SEL_PATTERN = "PATTERN";
-    parameter USE_DPORT = "FALSE";
-    parameter USE_MULT = "MULTIPLY";
-    parameter USE_PATTERN_DETECT = "NO_PATDET";
-    parameter USE_SIMD = "ONE48";
-    parameter [47:0] MASK = 48'h3FFFFFFFFFFF;
-    parameter [47:0] PATTERN = 48'h000000000000;
-    parameter [3:0] IS_ALUMODE_INVERTED = 4'b0;
-    parameter [0:0] IS_CARRYIN_INVERTED = 1'b0;
-    parameter [0:0] IS_CLK_INVERTED = 1'b0;
-    parameter [4:0] IS_INMODE_INVERTED = 5'b0;
-    parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
-
-    parameter _TECHMAP_CELLTYPE_ = "";
-    localparam techmap_guard = (_TECHMAP_CELLTYPE_ != "");
-
-`define DSP48E1_INST(__CELL__) """
-__CELL__ #(
-            .ACASCREG(ACASCREG),
-            .ADREG(ADREG),
-            .ALUMODEREG(ALUMODEREG),
-            .AREG(AREG),
-            .AUTORESET_PATDET(AUTORESET_PATDET),
-            .A_INPUT(A_INPUT),
-            .BCASCREG(BCASCREG),
-            .BREG(BREG),
-            .B_INPUT(B_INPUT),
-            .CARRYINREG(CARRYINREG),
-            .CARRYINSELREG(CARRYINSELREG),
-            .CREG(CREG),
-            .DREG(DREG),
-            .INMODEREG(INMODEREG),
-            .MREG(MREG),
-            .OPMODEREG(OPMODEREG),
-            .PREG(PREG),
-            .SEL_MASK(SEL_MASK),
-            .SEL_PATTERN(SEL_PATTERN),
-            .USE_DPORT(USE_DPORT),
-            .USE_MULT(USE_MULT),
-            .USE_PATTERN_DETECT(USE_PATTERN_DETECT),
-            .USE_SIMD(USE_SIMD),
-            .MASK(MASK),
-            .PATTERN(PATTERN),
-            .IS_ALUMODE_INVERTED(IS_ALUMODE_INVERTED),
-            .IS_CARRYIN_INVERTED(IS_CARRYIN_INVERTED),
-            .IS_CLK_INVERTED(IS_CLK_INVERTED),
-            .IS_INMODE_INVERTED(IS_INMODE_INVERTED),
-            .IS_OPMODE_INVERTED(IS_OPMODE_INVERTED)
-        ) _TECHMAP_REPLACE_ (
-            .ACOUT(ACOUT),
-            .BCOUT(BCOUT),
-            .CARRYCASCOUT(CARRYCASCOUT),
-            .CARRYOUT(CARRYOUT),
-            .MULTSIGNOUT(MULTSIGNOUT),
-            .OVERFLOW(OVERFLOW),
-            .P(oP),
-            .PATTERNBDETECT(PATTERNBDETECT),
-            .PATTERNDETECT(PATTERNDETECT),
-            .PCOUT(oPCOUT),
-            .UNDERFLOW(UNDERFLOW),
-            .A(iA),
-            .ACIN(ACIN),
-            .ALUMODE(ALUMODE),
-            .B(iB),
-            .BCIN(BCIN),
-            .C(iC),
-            .CARRYCASCIN(CARRYCASCIN),
-            .CARRYIN(CARRYIN),
-            .CARRYINSEL(CARRYINSEL),
-            .CEA1(CEA1),
-            .CEA2(CEA2),
-            .CEAD(CEAD),
-            .CEALUMODE(CEALUMODE),
-            .CEB1(CEB1),
-            .CEB2(CEB2),
-            .CEC(CEC),
-            .CECARRYIN(CECARRYIN),
-            .CECTRL(CECTRL),
-            .CED(CED),
-            .CEINMODE(CEINMODE),
-            .CEM(CEM),
-            .CEP(CEP),
-            .CLK(CLK),
-            .D(iD),
-            .INMODE(INMODE),
-            .MULTSIGNIN(MULTSIGNIN),
-            .OPMODE(OPMODE),
-            .PCIN(PCIN),
-            .RSTA(RSTA),
-            .RSTALLCARRYIN(RSTALLCARRYIN),
-            .RSTALUMODE(RSTALUMODE),
-            .RSTB(RSTB),
-            .RSTC(RSTC),
-            .RSTCTRL(RSTCTRL),
-            .RSTD(RSTD),
-            .RSTINMODE(RSTINMODE),
-            .RSTM(RSTM),
-            .RSTP(RSTP)
-        );
-"""
-
-    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, 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
-            \$__ABC9_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
-        if (BREG == 0 && MREG == 0 && PREG == 0)
-            assign iB = B, pB = 1'bx;
-        else
-            \$__ABC9_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
-        if (CREG == 0 && PREG == 0)
-            assign iC = C, pC = 1'bx;
-        else
-            \$__ABC9_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 pD = 1'bx;
-        if (ADREG == 1 && techmap_guard)
-            $error("Invalid DSP48E1 configuration: ADREG enabled but USE_DPORT == \"FALSE\"");
-        assign pAD = 1'bx;
-    if (PREG == 0) begin
-        if (MREG == 1)
-        \$__ABC9_REG rM (.Q(pM));
-        else
-        assign pM = 1'bx;
-        assign pP = 1'bx;
-    end else begin
-            assign pM = 1'bx;
-            \$__ABC9_REG rP (.Q(pP));
-        end
-
-        if (MREG == 0 && PREG == 0)
-            assign mP = oP, mPCOUT = oPCOUT;
-        else
-            assign mP = 1'bx, mPCOUT = 1'bx;
-        \$__ABC9_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)
-        );
-        \$__ABC9_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(\$__ABC9_DSP48E1_MULT )
-    end
-    else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin
-        // 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
-            \$__ABC9_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
-        if (BREG == 0 && MREG == 0 && PREG == 0)
-            assign iB = B, pB = 1'bx;
-        else
-            \$__ABC9_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
-        if (CREG == 0 && PREG == 0)
-            assign iC = C, pC = 1'bx;
-        else
-            \$__ABC9_REG #(.WIDTH(48)) rC (.I(C), .O(iC), .Q(pC));
-        if (DREG == 0 && ADREG == 0)
-            assign iD = D, pD = 1'bx;
-        else
-            \$__ABC9_REG #(.WIDTH(25)) rD (.I(D), .O(iD), .Q(pD));
-        if (PREG == 0) begin
-            if (MREG == 1) begin
-                assign pAD = 1'bx;
-        \$__ABC9_REG rM (.Q(pM));
-            end else begin
-                if (ADREG == 1)
-                    \$__ABC9_REG rAD (.Q(pAD));
-                else
-                    assign pAD = 1'bx;
-        assign pM = 1'bx;
-        end
-        assign pP = 1'bx;
-    end else begin
-            assign pAD = 1'bx, pM = 1'bx;
-            \$__ABC9_REG rP (.Q(pP));
-        end
-
-        if (MREG == 0 && PREG == 0)
-            assign mP = oP, mPCOUT = oPCOUT;
-        else
-            assign mP = 1'bx, mPCOUT = 1'bx;
-        \$__ABC9_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)
-        );
-        \$__ABC9_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(\$__ABC9_DSP48E1_MULT_DPORT )
-    end
-    else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin
-        // 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
-            \$__ABC9_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
-        if (BREG == 0 && PREG == 0)
-            assign iB = B, pB = 1'bx;
-        else
-            \$__ABC9_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
-        if (CREG == 0 && PREG == 0)
-            assign iC = C, pC = 1'bx;
-        else
-            \$__ABC9_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 pD = 1'bx;
-        if (ADREG == 1 && techmap_guard)
-            $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 pM = 1'bx;
-        if (PREG == 1)
-            \$__ABC9_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;
-        \$__ABC9_DSP48E1_P_MUX muxP (
-            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oP), .Mq(pM), .P(mP), .Pq(pP), .O(P)
-        );
-        \$__ABC9_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(\$__ABC9_DSP48E1 )
-    end
-    else
-        $error("Invalid DSP48E1 configuration");
-    endgenerate
-    `undef DSP48E1_INST
-endmodule
+//module DSP48E1 (
+//    (* techmap_autopurge *) output [29:0] ACOUT,
+//    (* techmap_autopurge *) output [17:0] BCOUT,
+//    (* techmap_autopurge *) output reg CARRYCASCOUT,
+//    (* techmap_autopurge *) output reg [3:0] CARRYOUT,
+//    (* techmap_autopurge *) output reg MULTSIGNOUT,
+//    (* techmap_autopurge *) output OVERFLOW,
+//    (* techmap_autopurge *) output reg signed [47:0] P,
+//    (* techmap_autopurge *) output PATTERNBDETECT,
+//    (* techmap_autopurge *) output PATTERNDETECT,
+//    (* techmap_autopurge *) output [47:0] PCOUT,
+//    (* techmap_autopurge *) output UNDERFLOW,
+//    (* techmap_autopurge *) input signed [29:0] A,
+//    (* techmap_autopurge *) input [29:0] ACIN,
+//    (* techmap_autopurge *) input [3:0] ALUMODE,
+//    (* techmap_autopurge *) input signed [17:0] B,
+//    (* techmap_autopurge *) input [17:0] BCIN,
+//    (* techmap_autopurge *) input [47:0] C,
+//    (* techmap_autopurge *) input CARRYCASCIN,
+//    (* techmap_autopurge *) input CARRYIN,
+//    (* techmap_autopurge *) input [2:0] CARRYINSEL,
+//    (* techmap_autopurge *) input CEA1,
+//    (* techmap_autopurge *) input CEA2,
+//    (* techmap_autopurge *) input CEAD,
+//    (* techmap_autopurge *) input CEALUMODE,
+//    (* techmap_autopurge *) input CEB1,
+//    (* techmap_autopurge *) input CEB2,
+//    (* techmap_autopurge *) input CEC,
+//    (* techmap_autopurge *) input CECARRYIN,
+//    (* techmap_autopurge *) input CECTRL,
+//    (* techmap_autopurge *) input CED,
+//    (* techmap_autopurge *) input CEINMODE,
+//    (* techmap_autopurge *) input CEM,
+//    (* techmap_autopurge *) input CEP,
+//    (* techmap_autopurge *) input CLK,
+//    (* techmap_autopurge *) input [24:0] D,
+//    (* techmap_autopurge *) input [4:0] INMODE,
+//    (* techmap_autopurge *) input MULTSIGNIN,
+//    (* techmap_autopurge *) input [6:0] OPMODE,
+//    (* techmap_autopurge *) input [47:0] PCIN,
+//    (* techmap_autopurge *) input RSTA,
+//    (* techmap_autopurge *) input RSTALLCARRYIN,
+//    (* techmap_autopurge *) input RSTALUMODE,
+//    (* techmap_autopurge *) input RSTB,
+//    (* techmap_autopurge *) input RSTC,
+//    (* techmap_autopurge *) input RSTCTRL,
+//    (* techmap_autopurge *) input RSTD,
+//    (* techmap_autopurge *) input RSTINMODE,
+//    (* techmap_autopurge *) input RSTM,
+//    (* techmap_autopurge *) input RSTP
+//);
+//    parameter integer ACASCREG = 1;
+//    parameter integer ADREG = 1;
+//    parameter integer ALUMODEREG = 1;
+//    parameter integer AREG = 1;
+//    parameter AUTORESET_PATDET = "NO_RESET";
+//    parameter A_INPUT = "DIRECT";
+//    parameter integer BCASCREG = 1;
+//    parameter integer BREG = 1;
+//    parameter B_INPUT = "DIRECT";
+//    parameter integer CARRYINREG = 1;
+//    parameter integer CARRYINSELREG = 1;
+//    parameter integer CREG = 1;
+//    parameter integer DREG = 1;
+//    parameter integer INMODEREG = 1;
+//    parameter integer MREG = 1;
+//    parameter integer OPMODEREG = 1;
+//    parameter integer PREG = 1;
+//    parameter SEL_MASK = "MASK";
+//    parameter SEL_PATTERN = "PATTERN";
+//    parameter USE_DPORT = "FALSE";
+//    parameter USE_MULT = "MULTIPLY";
+//    parameter USE_PATTERN_DETECT = "NO_PATDET";
+//    parameter USE_SIMD = "ONE48";
+//    parameter [47:0] MASK = 48'h3FFFFFFFFFFF;
+//    parameter [47:0] PATTERN = 48'h000000000000;
+//    parameter [3:0] IS_ALUMODE_INVERTED = 4'b0;
+//    parameter [0:0] IS_CARRYIN_INVERTED = 1'b0;
+//    parameter [0:0] IS_CLK_INVERTED = 1'b0;
+//    parameter [4:0] IS_INMODE_INVERTED = 5'b0;
+//    parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
+//
+//    parameter _TECHMAP_CELLTYPE_ = "";
+//    localparam techmap_guard = (_TECHMAP_CELLTYPE_ != "");
+//
+//`define DSP48E1_INST(__CELL__) """
+//__CELL__ #(
+//            .ACASCREG(ACASCREG),
+//            .ADREG(ADREG),
+//            .ALUMODEREG(ALUMODEREG),
+//            .AREG(AREG),
+//            .AUTORESET_PATDET(AUTORESET_PATDET),
+//            .A_INPUT(A_INPUT),
+//            .BCASCREG(BCASCREG),
+//            .BREG(BREG),
+//            .B_INPUT(B_INPUT),
+//            .CARRYINREG(CARRYINREG),
+//            .CARRYINSELREG(CARRYINSELREG),
+//            .CREG(CREG),
+//            .DREG(DREG),
+//            .INMODEREG(INMODEREG),
+//            .MREG(MREG),
+//            .OPMODEREG(OPMODEREG),
+//            .PREG(PREG),
+//            .SEL_MASK(SEL_MASK),
+//            .SEL_PATTERN(SEL_PATTERN),
+//            .USE_DPORT(USE_DPORT),
+//            .USE_MULT(USE_MULT),
+//            .USE_PATTERN_DETECT(USE_PATTERN_DETECT),
+//            .USE_SIMD(USE_SIMD),
+//            .MASK(MASK),
+//            .PATTERN(PATTERN),
+//            .IS_ALUMODE_INVERTED(IS_ALUMODE_INVERTED),
+//            .IS_CARRYIN_INVERTED(IS_CARRYIN_INVERTED),
+//            .IS_CLK_INVERTED(IS_CLK_INVERTED),
+//            .IS_INMODE_INVERTED(IS_INMODE_INVERTED),
+//            .IS_OPMODE_INVERTED(IS_OPMODE_INVERTED)
+//        ) _TECHMAP_REPLACE_ (
+//            .ACOUT(ACOUT),
+//            .BCOUT(BCOUT),
+//            .CARRYCASCOUT(CARRYCASCOUT),
+//            .CARRYOUT(CARRYOUT),
+//            .MULTSIGNOUT(MULTSIGNOUT),
+//            .OVERFLOW(OVERFLOW),
+//            .P(oP),
+//            .PATTERNBDETECT(PATTERNBDETECT),
+//            .PATTERNDETECT(PATTERNDETECT),
+//            .PCOUT(oPCOUT),
+//            .UNDERFLOW(UNDERFLOW),
+//            .A(iA),
+//            .ACIN(ACIN),
+//            .ALUMODE(ALUMODE),
+//            .B(iB),
+//            .BCIN(BCIN),
+//            .C(iC),
+//            .CARRYCASCIN(CARRYCASCIN),
+//            .CARRYIN(CARRYIN),
+//            .CARRYINSEL(CARRYINSEL),
+//            .CEA1(CEA1),
+//            .CEA2(CEA2),
+//            .CEAD(CEAD),
+//            .CEALUMODE(CEALUMODE),
+//            .CEB1(CEB1),
+//            .CEB2(CEB2),
+//            .CEC(CEC),
+//            .CECARRYIN(CECARRYIN),
+//            .CECTRL(CECTRL),
+//            .CED(CED),
+//            .CEINMODE(CEINMODE),
+//            .CEM(CEM),
+//            .CEP(CEP),
+//            .CLK(CLK),
+//            .D(iD),
+//            .INMODE(INMODE),
+//            .MULTSIGNIN(MULTSIGNIN),
+//            .OPMODE(OPMODE),
+//            .PCIN(PCIN),
+//            .RSTA(RSTA),
+//            .RSTALLCARRYIN(RSTALLCARRYIN),
+//            .RSTALUMODE(RSTALUMODE),
+//            .RSTB(RSTB),
+//            .RSTC(RSTC),
+//            .RSTCTRL(RSTCTRL),
+//            .RSTD(RSTD),
+//            .RSTINMODE(RSTINMODE),
+//            .RSTM(RSTM),
+//            .RSTP(RSTP)
+//        );
+//"""
+//
+//    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, 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
+//            \$__ABC9_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
+//        if (BREG == 0 && MREG == 0 && PREG == 0)
+//            assign iB = B, pB = 1'bx;
+//        else
+//            \$__ABC9_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
+//        if (CREG == 0 && PREG == 0)
+//            assign iC = C, pC = 1'bx;
+//        else
+//            \$__ABC9_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 pD = 1'bx;
+//        if (ADREG == 1 && techmap_guard)
+//            $error("Invalid DSP48E1 configuration: ADREG enabled but USE_DPORT == \"FALSE\"");
+//        assign pAD = 1'bx;
+//    if (PREG == 0) begin
+//        if (MREG == 1)
+//        \$__ABC9_REG rM (.Q(pM));
+//        else
+//        assign pM = 1'bx;
+//        assign pP = 1'bx;
+//    end else begin
+//            assign pM = 1'bx;
+//            \$__ABC9_REG rP (.Q(pP));
+//        end
+//
+//        if (MREG == 0 && PREG == 0)
+//            assign mP = oP, mPCOUT = oPCOUT;
+//        else
+//            assign mP = 1'bx, mPCOUT = 1'bx;
+//        \$__ABC9_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)
+//        );
+//        \$__ABC9_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(\$__ABC9_DSP48E1_MULT )
+//    end
+//    else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin
+//        // 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
+//            \$__ABC9_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
+//        if (BREG == 0 && MREG == 0 && PREG == 0)
+//            assign iB = B, pB = 1'bx;
+//        else
+//            \$__ABC9_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
+//        if (CREG == 0 && PREG == 0)
+//            assign iC = C, pC = 1'bx;
+//        else
+//            \$__ABC9_REG #(.WIDTH(48)) rC (.I(C), .O(iC), .Q(pC));
+//        if (DREG == 0 && ADREG == 0)
+//            assign iD = D, pD = 1'bx;
+//        else
+//            \$__ABC9_REG #(.WIDTH(25)) rD (.I(D), .O(iD), .Q(pD));
+//        if (PREG == 0) begin
+//            if (MREG == 1) begin
+//                assign pAD = 1'bx;
+//        \$__ABC9_REG rM (.Q(pM));
+//            end else begin
+//                if (ADREG == 1)
+//                    \$__ABC9_REG rAD (.Q(pAD));
+//                else
+//                    assign pAD = 1'bx;
+//        assign pM = 1'bx;
+//        end
+//        assign pP = 1'bx;
+//    end else begin
+//            assign pAD = 1'bx, pM = 1'bx;
+//            \$__ABC9_REG rP (.Q(pP));
+//        end
+//
+//        if (MREG == 0 && PREG == 0)
+//            assign mP = oP, mPCOUT = oPCOUT;
+//        else
+//            assign mP = 1'bx, mPCOUT = 1'bx;
+//        \$__ABC9_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)
+//        );
+//        \$__ABC9_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(\$__ABC9_DSP48E1_MULT_DPORT )
+//    end
+//    else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin
+//        // 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
+//            \$__ABC9_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
+//        if (BREG == 0 && PREG == 0)
+//            assign iB = B, pB = 1'bx;
+//        else
+//            \$__ABC9_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
+//        if (CREG == 0 && PREG == 0)
+//            assign iC = C, pC = 1'bx;
+//        else
+//            \$__ABC9_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 pD = 1'bx;
+//        if (ADREG == 1 && techmap_guard)
+//            $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 pM = 1'bx;
+//        if (PREG == 1)
+//            \$__ABC9_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;
+//        \$__ABC9_DSP48E1_P_MUX muxP (
+//            .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oP), .Mq(pM), .P(mP), .Pq(pP), .O(P)
+//        );
+//        \$__ABC9_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(\$__ABC9_DSP48E1 )
+//    end
+//    else
+//        $error("Invalid DSP48E1 configuration");
+//    endgenerate
+//    `undef DSP48E1_INST
+//endmodule
