Principles of VLSI RTL Design: A Practical Guide