RVSCC/test/test_two_way_lru_cache.sv

49 lines
1016 B
Systemverilog
Raw Normal View History

2023-03-20 01:05:28 +00:00
`include "timescale.sv"
import rv32i_defs::*;
module test_two_way_lru_cache();
logic clk, rst;
data_memory_if mem_if(.clk(clk), .rst(rst));
two_way_lru_cache DUT(
.data_mem_if(mem_if)
);
localparam int ClockCycle = 2;
always #(ClockCycle/2) clk = !clk;
localparam int MemoryWriteRange = 64;
logic [MemoryWriteRange-1:0][OperandSize-1:0] write_values;
int start_addr;
initial begin
// Reset
clk = 0;
rst = 1;
mem_if.write_enable = 0;
#4;
rst = 0;
// Write to a range of values in memory
mem_if.write_enable = 1;
start_addr = $urandom;
for (int i = 0; i < MemoryWriteRange; i++) begin
mem_if.addr = 32'(start_addr + i * 4);
write_values[i] = $urandom;
mem_if.write_data = write_values[i];
#2;
2023-01-01 22:28:56 +00:00
end
2023-03-20 01:05:28 +00:00
// Read and compare the same range of values
mem_if.write_enable = 0;
#4;
for (int i = 0; i < MemoryWriteRange; i++) begin
mem_if.addr = 32'(start_addr + i * 4);
#2;
end
$finish;
end
2023-01-01 22:28:56 +00:00
endmodule