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