System Verilog Assertions and Functional Coverage : Guide to Language, Methodology and Applications