minitests: Add OSERDES minitest
Signed-off-by: Tomasz Michalak <tmichalak@antmicro.com>
diff --git a/minitests/serdes/oserdes/Makefile b/minitests/serdes/oserdes/Makefile
new file mode 100644
index 0000000..baa7935
--- /dev/null
+++ b/minitests/serdes/oserdes/Makefile
@@ -0,0 +1 @@
+include ../../util/common.mk
diff --git a/minitests/serdes/oserdes/top.v b/minitests/serdes/oserdes/top.v
new file mode 100644
index 0000000..df93aa6
--- /dev/null
+++ b/minitests/serdes/oserdes/top.v
@@ -0,0 +1,81 @@
+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