| module top (input clk, stb, di, output do); | |
| localparam integer DIN_N = 256; | |
| localparam integer DOUT_N = 256; | |
| reg [DIN_N-1:0] din; | |
| wire [DOUT_N-1:0] dout; | |
| reg [DIN_N-1:0] din_shr; | |
| reg [DOUT_N-1:0] dout_shr; | |
| always @(posedge clk) begin | |
| din_shr <= {din_shr, di}; | |
| dout_shr <= {dout_shr, din_shr[DIN_N-1]}; | |
| if (stb) begin | |
| din <= din_shr; | |
| dout_shr <= dout; | |
| end | |
| end | |
| assign do = dout_shr[DOUT_N-1]; | |
| roi roi ( | |
| .ci(din[0]), | |
| .s0(din[1]), | |
| .o0(dout[0]) | |
| ); | |
| endmodule | |
| module roi (input ci, input s0, output o0); | |
| wire [7:0] o, passthru_co, passthru_carry8_single_co; | |
| (* LOC="SLICE_X67Y332", DONT_TOUCH *) | |
| CARRY8 #(.CARRY_TYPE("DUAL_CY4")) | |
| carry8_dual_inst ( | |
| .CI_TOP(passthru_carry8_single_co[7]), | |
| .CI(1'b0), | |
| .DI(4'b00000000), | |
| .S({7'b0000000, s0}), | |
| .O(o) | |
| ); | |
| (* LOC="SLICE_X67Y331", DONT_TOUCH *) | |
| CARRY8 #(.CARRY_TYPE("SINGLE_CY8")) | |
| carry8_inst ( | |
| .CI(passthru_co[7]), | |
| .CI_TOP(1'b0), | |
| .DI(4'b00000000), | |
| .S({7'b0000000, s0}), | |
| .CO(passthru_carry8_single_co) | |
| ); | |
| (* LOC="SLICE_X67Y330", DONT_TOUCH *) | |
| CARRY8 #(.CARRY_TYPE("SINGLE_CY8")) | |
| carry8_passthru ( | |
| .CI(1'b1), | |
| .CI_TOP(1'b0), | |
| .DI({ci, 7'b0000000}), | |
| .S(8'b00000000), | |
| .CO(passthru_co) | |
| ); | |
| assign o0 = o; | |
| endmodule |