In reply to ram007:
The general rule is if one process writes to a variable, and another process reads the same variable synchronized to the same event, you must use a non-blocking assignment to that variable to prevent race conditions.
The process that generates a clock is not synchronized to itself, so you should not be using non-blocking assignments. Reset depends if it is synchronous or asynchronous.