Bridging the Gap Between CPUs and FPGAs