How does forever behaves in fork block

In reply to Jyothsna:
It would help readability to remove all of the unnecessary begin/end keywords. Also, I assume the semicolons after the @(posedge clk) are typos. Otherwise your code would hang and there would be no output. Here is your code with that corrected:

task run_phase;
  fork
     test1();
     test2();
  join
endtask : run_phase
task test1();
   forever @(posedge clk)
     fork
	begin
           @(posedge intf.c1);
           `uvm_info("p1",uvm_low)
	end
	begin
           @(posedge intf.c2);
           `uvm_info("p2",uvm_low)
	end 
     join_none
endtask 
task test2();
   forever @(posedge clk1)
     fork
	begin
           @(posedge intf.c6);
           `uvm_info("p6",uvm_low)
	end
	begin
           @(posedge intf.c7);
           `uvm_info("p7",uvm_low)
	end 
     join_none
endtask

Now it is easy to see that for each iteration of the forever loop, you are creating a set 4 processes associated with p1, p2, p6 and p7. And every posedge clk you are creating another 4 processes, but the previous process are still active since you used join_none. So by the time you get your c1,c2, c6, or c7 event, there are many processes waiting for that event.

I don’t know what you are trying to achieve, so it is difficult to recommend an alternative.