Foundations of Digital Logic Design and Computer Architecture