Understanding the LabVIEW FPGA Compile System (FPGA Module)

The LabVIEW FPGA compile system consists of three major components: LabVIEW, the compile server, and the compile worker. These three components have the following roles in compiling FPGA VIs into bitfiles to download to the FPGA on the target:

LabVIEW—Sends compilation requests to the compile server.

Compile server—Receives requests from LabVIEW and sends compilation jobs to an available compile worker.

Compile worker—Takes job requests from the compile server and compiles the FPGA VI.

If you installed the LabVIEW FPGA Module and the compilation tools on the same computer, this three-component architecture does not require any special configuration. By default, LabVIEW and the compile worker use the compile server installed on the local computer, called localhost. If you install the compilation tools on a remote computer, you can compile the FPGA VI remotely.

How the Compilation Process Works

The compilation time depends on the size of the VI, the processor speed, and amount of memory in the computer on which you are compiling. If the computer does not have sufficient memory, smaller block diagrams might compile quickly, but larger block diagrams might use large amounts of virtual memory, which can cause compilations to fail or take over 10 times longer to complete.

The following steps outline the process of compiling FPGA VIs. LabVIEW displays compilation status in the Compilation Status window. You can view the different compilation reports if you are connected to the compile server.

Generation of Intermediate Files—LabVIEW converts the FPGA VI into intermediate files (HDL code) to send to the compile server.

Queuing—The compile server queues jobs and send the intermediate files to the compile worker for compiling.

Mapping—The compile worker divides the application logic between the physical building block on the FPGA.

Placing and Routing—The compile worker assigns the logic to physical building blocks on the FPGA and routes the connections between the logic blocks to meet the space or timing constraints of the compilation.