In reply to samid:
A
forever loop used to generate a clock has a blocking delay in it; usually half the period. Any kind of loop needs to terminate or have a blocking statement in order for time to advance. Otherwise you wind up needed to execute an infinite number of statements in one timestep.