2015-04-06 06:03:37 -05:00
|
|
|
`timescale 1 ns / 1 ps
|
|
|
|
|
|
|
|
module testbench;
|
|
|
|
reg rd_clk;
|
|
|
|
reg [ 7:0] rd_addr;
|
2015-04-06 10:07:10 -05:00
|
|
|
wire [17:0] rd_data;
|
2015-04-06 06:03:37 -05:00
|
|
|
|
|
|
|
wire wr_clk = 0;
|
|
|
|
wire wr_enable = 0;
|
|
|
|
wire [ 7:0] wr_addr = 0;
|
2015-04-06 10:07:10 -05:00
|
|
|
wire [17:0] wr_data = 0;
|
|
|
|
|
|
|
|
function [17:0] hash(input [7:0] k);
|
|
|
|
reg [31:0] x;
|
|
|
|
begin
|
|
|
|
x = {k, ~k, k, ~k};
|
|
|
|
x = x ^ (x << 13);
|
|
|
|
x = x ^ (x >> 17);
|
|
|
|
x = x ^ (x << 5);
|
|
|
|
hash = x;
|
|
|
|
end
|
|
|
|
endfunction
|
2015-04-06 06:03:37 -05:00
|
|
|
|
|
|
|
myram uut (
|
|
|
|
.rd_clk (rd_clk ),
|
|
|
|
.rd_addr (rd_addr ),
|
|
|
|
.rd_data (rd_data ),
|
|
|
|
.wr_clk (wr_clk ),
|
|
|
|
.wr_enable(wr_enable),
|
|
|
|
.wr_addr (wr_addr ),
|
|
|
|
.wr_data (wr_data )
|
|
|
|
);
|
|
|
|
|
|
|
|
initial begin
|
|
|
|
rd_clk = 0;
|
|
|
|
#1000;
|
|
|
|
forever #10 rd_clk <= ~rd_clk;
|
|
|
|
end
|
|
|
|
|
|
|
|
integer i;
|
|
|
|
initial begin
|
|
|
|
rd_addr <= 0;
|
|
|
|
@(posedge rd_clk);
|
|
|
|
for (i = 0; i < 256; i=i+1) begin
|
|
|
|
rd_addr <= rd_addr + 1;
|
|
|
|
@(posedge rd_clk);
|
|
|
|
// $display("%3d %3d", i, rd_data);
|
2015-04-06 10:07:10 -05:00
|
|
|
if (hash(i) !== rd_data) begin
|
|
|
|
$display("[%1t] ERROR: addr=%3d, data_mem=%18b, data_ref=%18b", $time, i, rd_data, hash(i));
|
2015-04-06 06:03:37 -05:00
|
|
|
$stop;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
$display("[%1t] Passed bram2 test.", $time);
|
|
|
|
$finish;
|
|
|
|
end
|
|
|
|
endmodule
|