minitests: Add LUTRAM minitest

Signed-off-by: Tomasz Michalak <tmichalak@antmicro.com>
diff --git a/minitests/clb/dram/Makefile b/minitests/clb/dram/Makefile
new file mode 100644
index 0000000..baa7935
--- /dev/null
+++ b/minitests/clb/dram/Makefile
@@ -0,0 +1 @@
+include ../../util/common.mk
diff --git a/minitests/clb/dram/top.v b/minitests/clb/dram/top.v
new file mode 100644
index 0000000..9256621
--- /dev/null
+++ b/minitests/clb/dram/top.v
@@ -0,0 +1,93 @@
+
+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);
+    DRAM32X1S
+        #(
+            .LOC("SLICE_X1Y240")
+        )
+        inst_0 (
+            .clk(clk),
+            .din(din[  0 +: 10]),
+            .dout(dout[  0 +: 1])
+        );
+
+    DRAM64X1S
+        #(
+            .LOC("SLICE_X1Y241")
+        )
+        inst_1 (
+            .clk(clk),
+            .din(din[  10 +: 10]),
+            .dout(dout[  1 +: 1])
+        );
+endmodule
+
+// ---------------------------------------------------------------------
+
+module DRAM32X1S(input clk, input [5:0] din, output dout);
+	parameter LOC = "";
+
+    (* LOC=LOC *)
+    RAM32X1S #(
+        .INIT(32'h00000000),    // Initial contents of RAM
+        .IS_WCLK_INVERTED(1'b0) // Specifies active high/low WCLK
+     ) RAM32X1S_inst (
+        .O(dout),       // RAM output
+        .A0(din[0]),     // RAM address[0] input
+        .A1(din[1]),     // RAM address[1] input
+        .A2(din[2]),     // RAM address[2] input
+        .A3(din[3]),     // RAM address[3] input
+        .A4(din[4]),     // RAM address[4] input
+        .D(din[5]),       // RAM data input
+        .WCLK(clk), // Write clock input
+        .WE(1'b1)      // Write enable input
+     );
+endmodule
+
+module DRAM64X1S(input clk, input [6:0] din, output dout);
+	parameter LOC = "";
+
+    (* LOC=LOC *)
+    RAM64X1S #(
+        .INIT(64'h00000000),    // Initial contents of RAM
+        .IS_WCLK_INVERTED(1'b0) // Specifies active high/low WCLK
+     ) RAM64X1S_inst (
+        .O(dout),       // RAM output
+        .A0(din[0]),     // RAM address[0] input
+        .A1(din[1]),     // RAM address[1] input
+        .A2(din[2]),     // RAM address[2] input
+        .A3(din[3]),     // RAM address[3] input
+        .A4(din[4]),     // RAM address[4] input
+        .A5(din[5]),     // RAM address[5] input
+        .D(din[6]),       // RAM data input
+        .WCLK(clk), // Write clock input
+        .WE(1'b1)      // Write enable input
+     );
+endmodule