In reply to karala.pandi:
For the most part, there is no behavioral difference between
always begin
@(posedge clk) $display("at the posedge of clk");
end
and
initial begin
forever @(posedge clk) $display("at the posedge of clk");
end
It is mainly a difference in intent. Some synthesis tools ignore all the code in an initial block thinking they are for simulation only and do not describe hardware to be synthesized.
Technically, there are a few thing you can do with a forever statement that you cannot do with an always block. As a looping statement, you can break out of a forever loop, and if you name the statement, you can disable it. So you can terminate the process created by an initial block. There is no way to terminate the process created by an always block.