blob: 615bc095e5e0671e5bc1600bb0948b26c9d3e415 [file] [edit]
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