| |
| module top(input clk, stb, di, output do); |
| localparam integer DIN_N = 160; |
| localparam integer DOUT_N = 160; |
| |
| 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 ( |
| .clk(clk), |
| .din(din), |
| .dout(dout) |
| ); |
| endmodule |
| |
| module roi(input clk, input [159:0] din, output [159:0] dout); |
| my_ISERDES |
| #( |
| .LOC("BITSLICE_RX_TX_X0Y305"), |
| .DATA_WIDTH(8), |
| .FIFO_ENABLE("FALSE"), |
| .FIFO_SYNC_MODE("FALSE"), |
| .IS_CLK_B_INVERTED(1'b0), |
| .IS_CLK_INVERTED(1'b0), |
| .IS_RST_INVERTED(1'b0), |
| .SIM_DEVICE("ULTRASCALE_PLUS") |
| ) |
| inst_0 ( |
| .clk(clk), |
| .din(din[ 0 +: 3]), |
| .dout(dout[ 0 +: 2]) |
| ); |
| endmodule |
| |
| // --------------------------------------------------------------------- |
| module my_ISERDES (input clk, input [2:0] din, output [1:0] dout); |
| |
| parameter LOC = ""; |
| parameter DATA_WIDTH = 8; |
| parameter FIFO_ENABLE = "FALSE"; |
| parameter FIFO_SYNC_MODE = "FALSE"; |
| parameter IS_CLK_B_INVERTED = 1'b0; |
| parameter IS_CLK_INVERTED = 1'b0; |
| parameter IS_RST_INVERTED = 1'b0; |
| parameter SIM_DEVICE = "ULTRASCALE"; |
| |
| (* LOC=LOC *) |
| ISERDESE3 #( |
| .DATA_WIDTH(DATA_WIDTH), // Parallel data width (4,8) |
| .FIFO_ENABLE(FIFO_ENABLE), // Enables the use of the FIFO |
| .FIFO_SYNC_MODE(FIFO_SYNC_MODE), // Always set to FALSE. TRUE is reserved for later use. |
| .IS_CLK_B_INVERTED(IS_CLK_B_INVERTED), // Optional inversion for CLK_B |
| .IS_CLK_INVERTED(IS_CLK_INVERTED), // Optional inversion for CLK |
| .IS_RST_INVERTED(IS_RST_INVERTED), // Optional inversion for RST |
| .SIM_DEVICE(SIM_DEVICE) // Set the device version (ULTRASCALE, ULTRASCALE_PLUS, ULTRASCALE_PLUS_ES1, |
| // ULTRASCALE_PLUS_ES2) |
| ) |
| ISERDESE3_inst ( |
| .FIFO_EMPTY(dout[1]), // 1-bit output: FIFO empty flag |
| .INTERNAL_DIVCLK(), // 1-bit output: Internally divided down clock used when FIFO is |
| // disabled (do not connect) |
| |
| .Q(dout[0]), // 8-bit registered output |
| .CLK(clk), // 1-bit input: High-speed clock |
| .CLKDIV(din[0]), // 1-bit input: Divided Clock |
| .CLK_B(~clk), // 1-bit input: Inversion of High-speed clock CLK |
| .D(din[1]), // 1-bit input: Serial Data Input |
| .FIFO_RD_CLK(1'b0), // 1-bit input: FIFO read clock |
| .FIFO_RD_EN(1'b0), // 1-bit input: Enables reading the FIFO when asserted |
| .RST(din[2]) // 1-bit input: Asynchronous Reset |
| ); |
| endmodule |