summaryrefslogtreecommitdiff
path: root/playground/my_mem_tb.v
diff options
context:
space:
mode:
Diffstat (limited to 'playground/my_mem_tb.v')
-rw-r--r--playground/my_mem_tb.v99
1 files changed, 99 insertions, 0 deletions
diff --git a/playground/my_mem_tb.v b/playground/my_mem_tb.v
new file mode 100644
index 0000000..c8c2e12
--- /dev/null
+++ b/playground/my_mem_tb.v
@@ -0,0 +1,99 @@
+// LLM generated, because I'm too lazy to do this manually
+
+`timescale 1us/1ns
+
+module my_mem_tb();
+
+ localparam DATA_WIDTH = 8;
+ localparam DATA_DEPTH = 16;
+ localparam ADDR_WIDTH = $clog2(DATA_DEPTH);
+
+ // DUT signals
+ logic clk;
+ logic write_en_i;
+ logic read_en_i;
+ logic [ADDR_WIDTH-1:0] r_read_addr;
+ logic [ADDR_WIDTH-1:0] r_write_addr;
+ logic [DATA_WIDTH-1:0] data_i;
+ logic [DATA_WIDTH-1:0] data_o;
+
+ // Instantiate DUT
+ my_mem #(
+ .DATA_WIDTH(DATA_WIDTH),
+ .DATA_DEPTH(DATA_DEPTH)
+ ) dut (
+ .clk_i(clk),
+ .write_en_i(write_en_i),
+ .read_en_i(read_en_i),
+ .r_read_addr(r_read_addr),
+ .r_write_addr(r_write_addr),
+ .data_i(data_i),
+ .data_o(data_o)
+ );
+
+ string filename;
+ initial begin
+ `ifdef DUMP_FILE_NAME
+ filename=`DUMP_FILE_NAME;
+ `else
+ filename="my_mem.lxt2";
+ `endif
+ $dumpfile(filename); $dumpvars();
+ end
+
+ // Clock generator
+ always #10 clk = ~clk;
+
+ // Test sequence
+ initial begin
+ clk = 0;
+ write_en_i = 0;
+ read_en_i = 0;
+ r_read_addr = '0;
+ r_write_addr = '0;
+ data_i = '0;
+
+ repeat (3) @(negedge clk);
+
+ // -------------------------
+ // Write some values
+ // -------------------------
+ @(negedge clk);
+ write_en_i = 1;
+ r_write_addr = 10;
+ data_i = 8'hA5;
+
+ @(negedge clk);
+ r_write_addr = 11;
+ data_i = 8'h3C;
+
+ @(negedge clk);
+ write_en_i = 0;
+
+ // -------------------------
+ // Read back values
+ // -------------------------
+
+ @(negedge clk);
+ read_en_i = 1;
+ r_read_addr = 10;
+
+ @(negedge clk);
+ assert (data_o == 8'hA5)
+ else $error("ASSERTION FAILED: addr 10 expected 0xA5, got 0x%02h", data_o);
+
+ @(negedge clk);
+ r_read_addr = 11;
+
+ @(negedge clk);
+ assert (data_o == 8'h3C)
+ else $error("ASSERTION FAILED: addr 11 expected 0x3C, got 0x%02h", data_o);
+
+ @(negedge clk);
+ read_en_i = 0;
+
+ repeat (3) @(negedge clk);
+ $finish;
+ end
+
+endmodule