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.