Practical Formal Methods for Hardware Design