Merge pull request #312 from shenki/sdcard-soc-features
[microwatt.git] / dram_tb.vhdl
index af0578e4933396103122ff619ce50b65ba4ccea2..852dbb7ae8de9ab64568d78b0e9313b3bc271279 100644 (file)
@@ -43,6 +43,8 @@ begin
         generic map(
             DRAM_ABITS => 24,
             DRAM_ALINES => 1,
+            DRAM_DLINES => 16,
+            DRAM_PORT_WIDTH => 128,
             PAYLOAD_FILE => DRAM_INIT_FILE,
             PAYLOAD_SIZE => DRAM_INIT_SIZE
             )
@@ -61,9 +63,6 @@ begin
             wb_ctrl_is_csr      => '0',
             wb_ctrl_is_init     => '0',
 
-            serial_tx           => open,
-            serial_rx           => '1',
-
             init_done           => open,
             init_error          => open,
 
@@ -105,10 +104,10 @@ begin
 
     -- Read data receive queue
     data_queue: entity work.sync_fifo
-       generic map (
-           DEPTH => 16,
-           WIDTH => rd_data'length
-           )
+        generic map (
+            DEPTH => 16,
+            WIDTH => rd_data'length
+            )
         port map (
             clk      => clk,
             reset    => soc_rst or reset_acks,
@@ -239,14 +238,14 @@ begin
         wb_read(a);
         wait_acks(1);
         read_data(d);
-        assert d = x"0123456789abcdef" report "bad data" severity failure;
+        assert d = x"0123456789abcdef" report "bad data, got " & to_hstring(d) severity failure;
 
         report "Simple read hit...";
         clr_acks;
         wb_read(a);
         wait_acks(1);
         read_data(d);
-        assert d = x"0123456789abcdef" report "bad data" severity failure;
+        assert d = x"0123456789abcdef" report "bad data, got " & to_hstring(d) severity failure;
 
         report "Back to back 4 stores 4 reads on hit...";
         clr_acks;
@@ -296,6 +295,43 @@ begin
             check_data(make_pattern(i));
         end loop;
 
+        report "Pre-fill a line";
+        a(11) := '1';
+        clr_acks;
+        wb_write(add_off(a,  0), x"1111111100000000", x"ff");
+        wb_write(add_off(a,  8), x"3333333322222222", x"ff");
+        wb_write(add_off(a, 16), x"5555555544444444", x"ff");
+        wb_write(add_off(a, 24), x"7777777766666666", x"ff");
+        wb_write(add_off(a, 32), x"9999999988888888", x"ff");
+        wb_write(add_off(a, 40), x"bbbbbbbbaaaaaaaa", x"ff");
+        wb_write(add_off(a, 48), x"ddddddddcccccccc", x"ff");
+        wb_write(add_off(a, 56), x"ffffffffeeeeeeee", x"ff");
+        wb_write(add_off(a, 64), x"1111111100000000", x"ff");
+        wb_write(add_off(a, 72), x"3333333322222222", x"ff");
+        wb_write(add_off(a, 80), x"5555555544444444", x"ff");
+        wb_write(add_off(a, 88), x"7777777766666666", x"ff");
+        wb_write(add_off(a, 96), x"9999999988888888", x"ff");
+        wb_write(add_off(a,104), x"bbbbbbbbaaaaaaaa", x"ff");
+        wb_write(add_off(a,112), x"ddddddddcccccccc", x"ff");
+        wb_write(add_off(a,120), x"ffffffffeeeeeeee", x"ff");
+        wait_acks(16);
+
+        report "Scattered from middle of line...";
+        clr_acks;
+        wb_read(add_off(a,24));
+        wb_read(add_off(a,32));
+        wb_read(add_off(a, 0));
+        wb_read(add_off(a,16));
+        wait_acks(4);
+        read_data(d);
+        assert d = x"7777777766666666" report "bad data (24), got " & to_hstring(d) severity failure;
+        read_data(d);
+        assert d = x"9999999988888888" report "bad data (32), got " & to_hstring(d) severity failure;
+        read_data(d);
+        assert d = x"1111111100000000" report "bad data (0), got " & to_hstring(d) severity failure;
+        read_data(d);
+        assert d = x"5555555544444444" report "bad data (16), got " & to_hstring(d) severity failure;
+
         std.env.finish;
     end process;
 end architecture;