Task which always and forever is executed

In reply to saritr:
Whenever I see #0’s or #1 in a user’s code, I view that as a workaround for code they wrote and do not completely understand, or a workaround for code that someone else wrote who did not know what they were doing. If you must put #0 or #1 in your code, you need to document why you thought it was needed. In almost all cases, it’s not needed, or there is a much better way to write your code without it.

Without knowing all the timing of your signals, my best guess is to move the forever loops inside each process of the fork

fork
  begin : process1
    forever begin
        ...
    end
  end
  begin : process2
    forever begin
    ...
    end
  end
join

The join will never be reached, and that is OK for a monitor or driver.