The FPGAs have become more and more popular in the last times. Even for professional applications these chips are often used, but also for DIY and makers who want to implement a discrete circuit inside a chip with all the advantages that this implies. It is not cheap or easy to find a factory to send your layouts or patterns and have a custom chip manufactured for you.
It is true that some foundries allow make wafers or multiproject wafers to make chips from individuals or universities to test with them. These types of factories are, as I say, difficult to find, they are usually abroad and they are not cheap. After a while, samples of your chips are sent to the agreed address, but they are not in charge of testing these or checking that they work. It all depends on your design ...
A alternative solution to that is to purchase an FPGA and program whatever you need to implement inside the chip ...
Table of Contents
What is an FPGA?
FPGA stands for Field Programmable Gate Array. They are digital devices or chips that are capable of being configured to allow practically anything to be implemented. That is, in other words, it is a blank chip where you can "write." That means that you can implement a CPU, a memory, a controller, any logic, etc., achieving a very fast operation and with all the advantages of having it integrated into a chip and not with electronic elements.
Ross Freeman and Bernard Vonderschmitt, co-founders of Xilinx, were the ones who invented the FPGA in 1984. They did it as an evolution to the CPLD chips of that time. The CPLD programmable chips had some shortcomings that solved the new FPGA designs and since then they have been evolving to date.
The FPGA market is so fruitful that companies like Intel, Xilinx, Altera, Quick Logic, Lattice, etc., they have invested a lot to develop better FPGAs and also embedded programming environments or IDEs for them. Thus providing very good platforms to facilitate the task of developers or makers.
Currently these manufacturers not only provide a programmable chip, but also include numerous auxiliary elements to bring more possibilities to developers. For example, they include flash memory cells, SDRAM memory cells, and so on.
What are they used for?
Therefore, an FPGA can be similar to an ASIC but that we can choose what will be. For example, we could create a code to program it and turn it into a CPU, a GPU, an adder, a memory controller, or any other logic circuit implemented on a single chip.
The possibilities are pretty endless. In fact, I recommend you visit the website opencores.org, a site dedicated to offering a multitude of free hardware projects. You will find codes in VHDL, Verligo, etc., for RAM, CPU, GPU, controllers, ALUs, FPUs, decoders, and a long etc..
How is it programmed?
To program an FPGA we can do it from our favorite operating system, such as GNU / Linux, Windows and MacOS, although there are certainly more development environments for Windows. Generally, the same companies that make the FPGA offer a Very complete IDE to work with and where to find all the tools you need in the same software suite.
You will also need the FPGA chip or board and the necessary cable or programmer with which you can connect the FPGA to your PC to pass the written code to the FPGA and so it is programmed. That's something similar to what you do with the Arduino board, writing the Arduino IDE program into the microcontroller's programmable memory.
Only in the case of the FPGA what we have is a matrix or array of elementary components such as memory cells, AND gates, OR, NOT, Flip-flops, and others. basic elements or blocks of digital electronics that we can use. With the written program what we are going to do is impose the way in which these essential blocks are going to be grouped together to form the little circuit we want, such as an ALU.
That is, if we program an adder in our IDE, the necessary blocks to implement this adder they are going to link in the correct way inside the FPGA so that the chip works as an adder. Simple right? In general, several methods are used for this programming at a physical level, such as memories or fuses to make a permanent link in that case.
The speed at which they operate will depend on clock frequency to which the FPGA we have purchased works. For example, the most basic ones usually work at 50 Mhz, others will do so at much higher frequencies. In the case of the FPGA at 50 Mhz, that means that it will operate at a rate of 50.000.000 times per second. If we continue with the adder that I have given as an example, you will be able to do that amount of sums in one second ...
Continuing with the theme of The programingOnce we know that you can write code like we would in the Arduino IDE or to develop any other program, and seeing how it is done at the hardware level, I will say that it really is not programming as such. Rather it is a hardware description. In fact, hardware description languages are used such as VHDL, Verilog, etc.
With that program is described at a logical level what the little circuit we want to implement does. And then it goes to the FPGA. Although it is true that some platforms allow programming in programming languages such as C to be able to implement a CPU in the FPGA and then generate programs to load into memory and be processed by said processor.
Integration with Arduino
FPGAs are usually used separately, but it is true that there are many tools and kits on the market that will make your life easier to integrate your FPGA with the Arduino platform. An example of a board to bring FPGAs to your projects with Arduino is MKR Vidor 4000, although there are others.
MKR Vidor 4000 it is a board with three chips. One of them is an FPGA, specifically an Intel Cyclone 10. There are also other chips for Bluetooth LE or low consumption connectivity and also WiFi compatibility. A good complement to provide your Arduino with connectivity functionalities and to be able to implement what you need in the FPGA.
With it you have a customizable hardware, configured by yourself for the purpose you want. That offers endless possibilities.