Reconfigurable computing combines the flexibility of software with the high performance of hardware by using field-programmable gate arrays (FPGAs). There are several open challenges in reconfigurable computing including designing tools to simplify programming FPGAs, developing effective algorithms for FPGA placement and routing as these problems are computationally hard, minimizing the silicon area used, developing effective approaches for partitioning applications between hardware and software, and efficiently mapping and partitioning applications onto FPGAs.