Does it Race?

In reply to emin:

I think using < instead of <= is what you need to do. Also, you should be using real numbers for simulation time. If your timescale is 1ns, but your time precision is 1ps, $time truncates to ns. Use $realtime and realtime variables. Then, dealing with real numbers is another reason not to use equality because of rounding errors.

There are ways to move certain operations to later regions, but I do not recommend doing that.