`timescale 1ns/1ps

module testbench;
    reg clk;

    initial begin
       // $dumpfile("testbench.vcd");
       // $dumpvars(0, testbench);

        #0 clk = 0;
        repeat (10000) begin
            #5 clk = 1;
            #5 clk = 0;
        end

        $display("OKAY");
    end

	reg [7:0] addr = 0;
	reg [7:0] wdata = 0;
	wire [7:0] rdata;
	wire [7:0] rdata_o;

	always @(posedge clk)
	begin
		addr = addr + 1;
		wdata = wdata + 17;
	end

	reg [7:0] memory [255:0];
	assign rdata = memory[addr];
	always @(posedge clk) memory[addr] <= wdata;



    top uut(clk,addr,wdata,rdata_o);

	uut_mem_checker port_b_test(.clk(clk), .A(rdata), .B(rdata_o));

endmodule

module uut_mem_checker(input clk, input [7:0] A, input [7:0] B);
    always @(posedge clk)
    begin
        #1;
        if (A == B)
        begin
            $display("ERROR: ASSERTION FAILED in %m:",$time,"      ",A," != ",B);
            $stop;
        end
    end
endmodule