How do I implement the clock into this testbench?
The problem is with this block:

always@(clk) begin
    clk = 1;
    #20;
    clk = 0;
    #20;
end


It will only run when clk is high, since you have @(clk) as the sensitivity list at the beginning of the block. A more typical way to generate your clock is this:

initial clk = 0;
always #20 clk = ~clk;


Actually, though, your original code might work fine if you just remove the sensitivity to clk, changing it to:

always begin
    clk = 1;
    #20;
    clk = 0;
    #20;
end