Practical Digital Logic Design and Testing