Digital Systems Design with FPGAs and CPLDs