A Survey on Assertion-based Hardware Verification