minitests: Add ISERDES minitest

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