The Design of Digital Systems