  FPGA accelerators are gaining increasing attention in both cloud and edge
computing because of their hardware flexibility, high computational throughput,
and low power consumption. However, the design flow of FPGAs often requires
specific knowledge of the underlying hardware, which hinders the wide adoption
of FPGAs by application developers. Therefore, the virtualization of FPGAs
becomes extremely important to create a useful abstraction of the hardware
suitable for application developers. Such abstraction also enables the sharing
of FPGA resources among multiple users and accelerator applications, which is
important because, traditionally, FPGAs have been mostly used in single-user,
single-embedded-application scenarios. There are many works in the field of
FPGA virtualization covering different aspects and targeting different
application areas. In this survey, we review the system architectures used in
the literature for FPGA virtualization. In addition, we identify the primary
objectives of FPGA virtualization, based on which we summarize the techniques
for realizing FPGA virtualization. This survey helps researchers to efficiently
learn about FPGA virtualization research by providing a comprehensive review of
the existing literature.
