Automatic Assertion Generation for Simulation, Formal Verification and Emulation