| module CARRY4( | 
 |   output [3:0] CO, | 
 |   output [3:0] O, | 
 |   input        CI, | 
 |   input        CYINIT, | 
 |   input  [3:0] DI, S | 
 | ); | 
 |   parameter _TECHMAP_CONSTMSK_CI_ = 1; | 
 |   parameter _TECHMAP_CONSTVAL_CI_ = 1'b0; | 
 |   parameter _TECHMAP_CONSTMSK_CYINIT_ = 1; | 
 |   parameter _TECHMAP_CONSTVAL_CYINIT_ = 1'b0; | 
 |  | 
 |   localparam [0:0] IS_CI_ZERO = ( | 
 |       _TECHMAP_CONSTMSK_CI_ == 1 && _TECHMAP_CONSTVAL_CI_ == 0 && | 
 |       _TECHMAP_CONSTMSK_CYINIT_ == 1 && _TECHMAP_CONSTVAL_CYINIT_ == 0); | 
 |   localparam [0:0] IS_CI_ONE = ( | 
 |       _TECHMAP_CONSTMSK_CI_ == 1 && _TECHMAP_CONSTVAL_CI_ == 0 && | 
 |       _TECHMAP_CONSTMSK_CYINIT_ == 1 && _TECHMAP_CONSTVAL_CYINIT_ == 1); | 
 |   localparam [0:0] IS_CYINIT_FABRIC = _TECHMAP_CONSTMSK_CYINIT_ == 0; | 
 |   localparam [0:0] IS_CI_DISCONNECTED = _TECHMAP_CONSTMSK_CI_ == 1 && | 
 |     _TECHMAP_CONSTVAL_CI_ != 1; | 
 |   localparam [0:0] IS_CYINIT_DISCONNECTED = _TECHMAP_CONSTMSK_CYINIT_ == 1 && | 
 |     _TECHMAP_CONSTVAL_CYINIT_ != 1; | 
 |  | 
 |   wire [1023:0] _TECHMAP_DO_ = "proc; clean"; | 
 |   wire [3:0] O; | 
 |   wire [3:0] CO; | 
 |   wire [3:0] CO_output; | 
 |  | 
 |   // Put in a placeholder object CARRY_CO_DIRECT. | 
 |   // | 
 |   // It will be used for 3 purposes: | 
 |   //  - Remain as CARRY_CO_DIRECT when OUT only connects to CARRY_COUT_PLUG | 
 |   //  - Remain as CARRY_CO_DIRECT when CO is used, but O is not used. | 
 |   //  - Change into CARRY_CO_LUT when O and CO are required (e.g. compute CO | 
 |   //    from O ^ S). | 
 |   genvar i; | 
 |   generate for (i = 0; i < 3; i = i + 1) begin:co_outputs | 
 |       CARRY_CO_DIRECT #(.TOP_OF_CHAIN(0)) co_output( | 
 |           .CO(CO_output[i]), | 
 |           .O(O[i+1]), | 
 |           .S(S[i+1]), | 
 |           .OUT(CO[i]) | 
 |       ); | 
 |   end endgenerate | 
 |  | 
 |   CARRY_CO_DIRECT #(.TOP_OF_CHAIN(1)) co_output( | 
 |       .CO(CO_output[3]), | 
 |       .O(O[3]), | 
 |       .S(S[3]), | 
 |       .DI(DI[3]), | 
 |       .OUT(CO[3]) | 
 |   ); | 
 |  | 
 |   if(IS_CYINIT_FABRIC) begin | 
 |     CARRY4_VPR #( | 
 |         .CYINIT_AX(1'b1), | 
 |         .CYINIT_C0(1'b0), | 
 |         .CYINIT_C1(1'b0) | 
 |     ) _TECHMAP_REPLACE_ ( | 
 |         .CO0(CO_output[0]), | 
 |         .CO1(CO_output[1]), | 
 |         .CO2(CO_output[2]), | 
 |         .CO3(CO_output[3]), | 
 |         .CYINIT(CYINIT), | 
 |         .O0(O[0]), | 
 |         .O1(O[1]), | 
 |         .O2(O[2]), | 
 |         .O3(O[3]), | 
 |         .DI0(DI[0]), | 
 |         .DI1(DI[1]), | 
 |         .DI2(DI[2]), | 
 |         .DI3(DI[3]), | 
 |         .S0(S[0]), | 
 |         .S1(S[1]), | 
 |         .S2(S[2]), | 
 |         .S3(S[3]) | 
 |     ); | 
 |   end else if(IS_CI_ZERO || IS_CI_ONE) begin | 
 |     CARRY4_VPR #( | 
 |         .CYINIT_AX(1'b0), | 
 |         .CYINIT_C0(IS_CI_ZERO), | 
 |         .CYINIT_C1(IS_CI_ONE) | 
 |     ) _TECHMAP_REPLACE_ ( | 
 |         .CO0(CO_output[0]), | 
 |         .CO1(CO_output[1]), | 
 |         .CO2(CO_output[2]), | 
 |         .CO3(CO_output[3]), | 
 |         .O0(O[0]), | 
 |         .O1(O[1]), | 
 |         .O2(O[2]), | 
 |         .O3(O[3]), | 
 |         .DI0(DI[0]), | 
 |         .DI1(DI[1]), | 
 |         .DI2(DI[2]), | 
 |         .DI3(DI[3]), | 
 |         .S0(S[0]), | 
 |         .S1(S[1]), | 
 |         .S2(S[2]), | 
 |         .S3(S[3]) | 
 |     ); | 
 |   end else begin | 
 |     wire cin_from_below; | 
 |     CARRY_COUT_PLUG cin_plug( | 
 |         .CIN(CI), | 
 |         .COUT(cin_from_below) | 
 |     ); | 
 |  | 
 |     CARRY4_VPR #( | 
 |         .CYINIT_AX(1'b0), | 
 |         .CYINIT_C0(1'b0), | 
 |         .CYINIT_C1(1'b0) | 
 |     ) _TECHMAP_REPLACE_ ( | 
 |         .CO0(CO_output[0]), | 
 |         .CO1(CO_output[1]), | 
 |         .CO2(CO_output[2]), | 
 |         .CO3(CO_output[3]), | 
 |         .O0(O[0]), | 
 |         .O1(O[1]), | 
 |         .O2(O[2]), | 
 |         .O3(O[3]), | 
 |         .DI0(DI[0]), | 
 |         .DI1(DI[1]), | 
 |         .DI2(DI[2]), | 
 |         .DI3(DI[3]), | 
 |         .S0(S[0]), | 
 |         .S1(S[1]), | 
 |         .S2(S[2]), | 
 |         .S3(S[3]), | 
 |         .CIN(cin_from_below) | 
 |     ); | 
 |   end | 
 | endmodule |