The design of digital systems