`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 [6:0] D = 0;
    reg [1:0] S = 0;
    wire [1:0] Y;
	reg [1:0] Y_p;

    always @(posedge clk)
    begin
		D = D + 3;
		S = S + 1;
    end

    always @* begin : block
		reg [3:0] data [0:3];
		data[0] = D[3:0];
		data[1] = D[4:1];
		data[2] = D[5:2];
		data[3] = D[6:3];
		Y_p = data[S];
	end

    top uut(D,S,Y);

    assert_dff check_Y0 (clk,Y[0],Y_p[0]);
    assert_dff check_Y1 (clk,Y[1],Y_p[1]);

endmodule