Introduction to FPGAs
1. What is an FPGA?
Field Programmable Gate Arrays (FPGA) are perhaps the evolution of technology as we enter the new age. To get a brighter vision, we must first explain what a Micro Processor is. A Microprocessor is software that implemented on a silicon wafer by means of correct transistor connections. In other words, a simple instruction in assembly [ADD EAX, 0x04], which adds 4 to the EAX register, is no more than a command which is read by the processor (the software implemented on a silicon wafer), and executed after.
Due to their nature, processors execute commands in a sequential manner; you can places as many commands as you wish on a storage, and ask your processor to read the storage and execute them one-by-one. This leads into a productive task being done, such as booting a computer, or showing your operating system on your screen.Check out here fpga.
So you might ask what an FPGA is? An FPGA is a silicon wafer, which can have up to several hundred thousand digital Cells. Each cell can perform simple tasks such as adding 2 bits, keeping 8 bits (acting as a very small RAM) or acting as a small multiplexer, decoder or several gates. However, initially they are not connected to each other. Your role, as a hardware engineer, is to design a program that commands each cell what task to perform, and also connect the to other cells in the correct order. FPGAs are programmable, and their interconnection will shaped based on your design. They must be programmed each time on startup, since most of them cannot retain their configuration after power-down, as they use RAM technology.
A good example can be the human brain. The human brain does not have a central processor, but processes data in parallel manner, involving trillions of neurons (corresponds to Digital Cells in FPGAs) who participate in millions of differenet tasks at the same time. Each Neuron can perform a small task, but when trillions of them work together, they easily outperform world fastest supercomputers.
As we mentioned, an FPGA can have up to several hundred thousand digital cells. This gives you the ability to create 100 multipliers, that each can show the multiplication of two numbers at the same time. This is the very nature of FPGAs; the ability to perform unlimited tasks in parallel, something that cannot be achieved in processors, as they can execute instructions one-by-one in a sequential manner.
2. FPGA vs ASIC
ASIC (Application Specified Integrated Circuit) is a sillicon wafer that has the program already hard-coded inside. Beside FPGAs (and CPLDs), all ICs that you see are ASICs. They are static and cannot be reprogrammed. FPGAs themselves can be considered as ASICs that were design to be programmable. One of the advantages ASICs hold over FPGAs, is their operating speed. Since their interconnection are not dynamic (they are already established and cannot be changed), they do not face connection delays as FPGAs do. On the downside, manufacturing an ASIC can be a very expensive process (270K$ for example), where an FPGA can be obtained anywhere between 20$ to 10,000$.
Of course, an ASIC can be cheaper than the equivalent FPGA once in mass-production.
Therefore, FPGAs are ideal for development cycle, low-end applications or military-grade application where pricing is not an issue.
3. Who makes the FPGAs in today’s market?
There are several vendors that hold the majority of the market in their hand. Xilinx, Altera, Actel, Lattice, QuickLogic and Achronix (Specialized in very-high speed FPGAs). Xilinx and Altera are the main manufacturers. You can find their ICs on EBay, Digikey, Arrow and other major electronic distributors. A development kit is always a good place to start and I highly recommended them in case you have no previous experience with these chips.
4. How can you write programs in FPGA?
FPGA programs are called HDLs (Hardware Description Language). It is very different than the normal code you may have already seen. FPGA coding required parallel-programming knowledge and extensive experience in Digital Design. VHDL and Verilog are the main languages used to create applications in this technology. You can search for their tutorial on Google, and rest assured, you will find many.
I hope this article helped making things more clear for you as you move in this path. This technology is a must-know for every hardware or electronic engineer as it will be the future of digital electronics, and in my opinion, there will be an FPGA included in each motherboard in the future, to enable next generation softwares utilize their enormous processing power. I have had almost 8 years of experience with this technology, and enjoyed creating something new everyday with it, as creating is my passion.