|  | 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 |