A Guide to Using SystemVerilog for Hardware Design and Modeling