Pergunta

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!

Foi útil?

Solução 2

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.

Outras dicas

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.

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 !

Disclaimer: I work for SRC Computers, a reconfigurable system developer/manufacturer.

16 years ago at SRC computers, we created (and patented) an interface that allows an FPGA and its associated memory to sit on the microprocessor's memory bus. This allows our FPGA "processor" and microprocessor to work together as peers on system memory. On top of that hardware architecture, we created a C and Fortran system programming environment, performance libraries and a system run-time to tie it all together.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top