SystemVerilog for Design by Stuart Sutherland, Peter Flake & Simon Davidmann