FPGA's are used widely in the industry to gain better performance by implementing programs on the FPGA instead of software.
How do these companies efficiently integrate the FPGA's into their systems?
I have very limited experience with FPGA's and have only used them by hooking them up with USB and serial ports, which I guess isn't the best way to get the most out of your FPGA implementation.
So what does these companies do?, Do they for example use some special FPGA's that can be inserted into a PCI slot in a computer system, or do they maybe buy some special SoC with integrated FPGA that can easily be overwritten by the programmers?
I have most experience with programming in high level languages very very far away from the hardware, so I'm sorry if the question sounds stupid -I just don't have much knowledge and experience with the lower layers :). But I once had a course in which we used FPGA's and it was a very mind opening experience. So now I'm dreaming of having a computer system where I can code up some parts in a high level language which then does some communication to an integrated FPGA on which I have uploaded some synthesized VHDL.
Maybe one could even code up programs consisting of both high level code and some VHDL which is automatically synthesized and uploaded to the FPGA board when the program is started... That would be so awesome!
FPGA hardware acceleration assures offloading of certain computational tasks within an application platform and gains higher efficiency than running the same tasks on a generic processor. It is somewhat similar to activity migration in MPSoC.
Programming an FPGA consists of writing code, translating that program into a lower-level language as needed, and converting that program into a binary file. Then, you'll feed the program to the FPGA just like you'd do for a GPU reading a piece of software written in C++. It's as simple as that.
From early uses, such as accelerating network packet processing, signal processing, and logic emulation, FPGAs are now additionally used across the computing fabric in IoT devices, memory and storage systems, and as compute node accelerators.
Low latency This is where FPGAs are much better than CPUs (or GPUs, which have to communicate via the CPU). With an FPGA it is feasible to get a latency around or below 1 microsecond, whereas with a CPU a latency smaller than 50 microseconds is already very good.
PCIe
It is often required to have the higher possible bandwidth between the FPGA and the main processor of the system, thus the FPGA is often connected to the main CPU as a PCIe device.
Electronic board
All recent FPGA can interface with high speed I/O interfaces, so no "special" FPGA is required to connect it with DDR3, PCI, or PCIe, only the electronic board requires a PCIe connector.
It may be required to design a custom electronic board if none of the available FPGA devkit boards really fit for the system.
Between Sensor and CPU
Note that the FPGA is often "between" an external interface and the main processor.
It is then in charge of processing data comming from an external sensor or transmission system (camera, optical fiber, ethernet, radio, ...), offloading the processor with low level real time processing.
Embedded system
But all systems are not "PC based". There are embedded systems using the FPGA as their main "processor". In such system, you may have an electronic board with the FPGA as the heart of the system (for critic system, normal processor with the associated possible software bugs are not allowed).
On other embedded system, the electronic board is equipped with both a processor and an FPGA.
Soft-core
For certains embedded system, a small micro controller is required. Instead of having it it on the electronic board along side the FPGA, it can be implemented inside the FPGA as a soft-core.
FPGA SoC
But recent FPGA (xilinx zynq, altera cyclone V soc) includes a "hard-core" dual core A9 ARM. It's like a SoC, with an "FPGA" part with high speed connection between the ARM and the programmable logic part (PL). So the processor and the FPGA are in the same chip.
Hope this helps.
FPGA System Integration
How companies integrate an FPGA into a system can vary a lot from one system to the next due to the flexible nature of an FPGA. No 'special' FPGA is needed because the FPGA is inherently programmable. A company is free to program into it whatever interface best suits their needs, whether that be a complex bus like PCI or a simple interface like SPI or I2C. Some additional ICs may be needed external to the FPGA to support the desired interface, but this a meek point.
The question is sort of like asking how software companies integrate they're software in an operating system. Does it interfaces with a database? If so maybe it will use SQL queries. Does it have online capabilities? If so, maybe it will access web services. In any case, it's a very open-ended scenario.
The latest trend, however, is to integrate processors and FPGAs on the same SoC. In this case an interface named AXI (Advanced eXtensible Interface) is used between the processor and programmable logic. AXI uses a topology similar to PCIe but specialized for high-performance on-chip communication.
High-Level Programming
This is possible. It's called high-level synthesis (HLS) and allows the programming of FPGAs from C code. HLS, however, has it's limitations. For one thing, it's been around for ten years now and only very recently starting to gain more traction. But ultimately, systems with FPGAs will tend to use a combination of high-level languages (C/C++) and RTL (Verilog/VHDL). High-level languages are used to program the processor while RTL is used to program the FPGA. And now, optionally, C can also be used to program the FPGA through HLS.
There are many works that go in your direction.
For instance, I managed to compile Ruby and Python (a large subset) to ARM+FPGA (Xilinx, but our generated VHDL is intended to be portable). For instance, high level iterators are synthesized either on embedded C code or VHDL on the FPGA.
I know other colleagues work on Haskell, lisp or Smalltalk.
For this very small community, your dream already came true !
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With