blob: df93aa6f476e22342ba9d4f41cb93e36fa5781c4 [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;
end
end
assign do = dout[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_OSERDES
#(
.LOC("BITSLICE_RX_TX_X0Y305"),
.DATA_WIDTH(8),
.INIT(1'b0),
.IS_CLKDIV_INVERTED(1'b0),
.IS_CLK_INVERTED(1'b0),
.IS_RST_INVERTED(1'b0),
.SIM_DEVICE("ULTRASCALE_PLUS")
)
inst_0 (
.clk(clk),
.din(din[ 0 +: 4]),
.dout(dout[ 0 +: 2])
);
endmodule
// ---------------------------------------------------------------------
module my_OSERDES (input clk, input [3:0] din, output [1:0] dout);
parameter LOC = "";
parameter DATA_WIDTH = 1;
parameter INIT = 1'b0;
parameter IS_CLKDIV_INVERTED = 1'b0;
parameter IS_CLK_INVERTED = 1'b0;
parameter IS_RST_INVERTED = 1'b0;
parameter SIM_DEVICE = "ULTRASCALE_PLUS";
(* LOC=LOC *)
OSERDESE3 #(
.DATA_WIDTH(DATA_WIDTH), // Parallel data width (4,8)
.INIT(INIT), // Initialization value of the OSERDES flip-flops
.IS_CLKDIV_INVERTED(IS_CLKDIV_INVERTED),// Optional inversion for CLKDIV
.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)
)
OSERDESE3_inst (
.OQ(oq), // 1-bit output: Serial Output Data
.T_OUT(t), // 1-bit output: 3-state control output to IOB
.CLK(clk), // 1-bit input: High-speed clock
.CLKDIV(din[0]), // 1-bit input: Divided Clock
.D(din[1]), // 8-bit input: Parallel Data Input
.RST(din[2]), // 1-bit input: Asynchronous Reset
.T(din[3]) // 1-bit input: Tristate input from fabric
);
OBUFT OBUFT_inst (
.O(dout[0]), // 1-bit output: Buffer output (connect directly to top-level port)
.I(oq), // 1-bit input: Buffer input
.T(t) // 1-bit input: 3-state enable input
);
endmodule