What is FPGA Programming?

FPGA programming is the process of developing your own hardware architecture (using purpose-built, reprogrammable circuit boards) in order to perform specific tasks. This is achieved using a type of programming language called a Hardware Description Language (HDL) or a Register Transfer Language (RTL).

My name is Jamie Smith, and I’ve been playing around with computer programming for two decades. Beyond that, I’m also up to date  with the latest advancements in the world of hardware and software development.

Today, I’m going to provide a brief primer on the world of the Field Programmable Grid Array (FPGA). I’ll talk about what it is, its strengths, and also provide some information that will be of use to prospective FPGA developers as well.

So, without any further adieu, let’s get to it!

What Is FPGA in Simple Words?

Put simply, FPGA refers to integrated circuits which can be programmed by consumers (in the “field”) after production. An FPGA unit will consist of a series of logic blocks (so-called “logic elements” and “adaptive logic modules”) which are linked together with programmable interconnects.

Most microprocessors are already pre-configured for specific use cases. A CPU might be capable of incredible things using its instruction set, but you’re going to have trouble getting it to act like anything other than a CPU.

In contrast, an FPGA can be configured (and reconfigured) by the user to act like any kind of computer chip (including, as you will see later, a CPU!).

Why Is FPGA Used?

There are a lot of benefits to using an FPGA, including: 

  • Handling data very efficiently
  • Allowing manufacturers to test new chip designs without having to print them onto circuit boards
  • Allowing embedded systems developers to begin hardware and software development simultaneously 

They are also becoming an increasingly appealing prospect to retro computer and video game enthusiasts. Unlike traditional emulation, which relies on a modern processor using code to mimic the behaviour of older hardware, an FPGA can effectively become another computer by being programmed to behave exactly like it.

Ideal Use Cases for FPGA

An FPGA is often the best option for solving issues which require exhaustic and efficient computer processing. 

Microsoft, for example, rely on FPGA to speed-up their Bing search engine and Azure cloud computing platforms. Likewise, High Frequency Trading platforms often use FPGA to enable them to respond to market changes with extremely low latency.

Because of their incredible versatility, they’re also used in many first-generation products while the vendor prepares the production of a printed microchip to replace them; this often happens with televisions, satellites, photocopiers, and aerospace.

If you look closely inside a consumer electronic device such as a laptop or hi-fi (while taking the correct precautions, of course!), you might also find an FPGA used to remedy an incorrect wiring job. This is fairly common, as they can often be the cheapest and most time-efficient way to correct so-called “glue logic” issues.

Times When FPGA Isn’t Quite So Important

There are also, of course, situations when an FPGA is not the right candidate for the job; this would include situations when a standard off-the-shelf microchip already performs the task needed adequately, or if time and energy efficiency are not significant concerns for your project.

How Does FPGA Work?

As we mentioned above, most modern FPGAs will rely on a series of interconnected Logic Blocks which, in turn, are comprised of a number of Logic Cells (sometimes referred to as  Adaptive Logic Modules” or “Logic Elements”)

Within each Logic Block is a programmable lookup table, which is responsible for defining how each cell will handle the functional operations (i.e. what it will do with the data) of each cell’s contents.

Using Programmable Interconnects, the user can direct the flow of information between the cells as needed. The user can also instruct the circuit to perform simultaneous instructions (such as reading and outputting data at the same time), which microprocessors are unable to do (instead, they handle all operations sequentially).

A simple metaphor might be to think of FPGA as a set of LEGO building blocks, and microprocessors as toy buildings. While the toy buildings might be more ideal for a situation where you need that type of building, the LEGO blocks can be reused to create the exact building you need for any scenario.

Is FPGA Programming Hard?

Yes, there is a certain amount of consensus in development circles that FPGA development is one of the more challenging areas of programming.

Before you even get into the actual development, you should know that the software used for each FPGA (generally provided by the hardware vendor) tends to be bulky and far less intuitive than your usual Integrated Development Environment (IDE).

What you’re doing when you develop for FPGA is describing the actual hardware and how it will communicate with itself, rather than just typing in high-level programming code and converting it to instructions which can be interpreted by the final circuit.

Essentially, this means that you should expect to develop a much deeper understanding of the hardware you’re working with (even if you’ve previously used assembly, or “bare metal”, code in the past). If required, you could end up writing code so low-level that you even need to define your own integer types!

Is FPGA Worth Learning?

Whether you’re a hobbyist or someone who intends to pursue a career in FPGA development, there is a very good chance that it will benefit you; even if not financially, your coding chops (and bragging rights!) will improve dramatically.

According to Comparably, FPGA developers make – on average – $155,000 per year. Even lower estimates, such as Indeed’s $118,820, would put you in one of the higher tax-brackets and allow for a (relatively speaking) very comfortable lifestyle. 

With that said, a junior FPGA developer is likely to make significantly less (somewhere around $40,000 per year).

It’s also worth noting that, even if you never intend to work with FPGA professionally, employers will be impressed by any successful implementation of the technology in your own projects (due to the enthusiasm, work, and patience required!). 

What Do FPGA Engineers Do?

FPGA Engineers work on the research, design, and implementation of new integrated circuits. They sometimes carry out the latter two steps with a separate software team, but not always.

They will be tasked with providing prototypes of new solutions, while also ensuring that their designs abide by the budgets of their employer. During the actual testing process, an engineer can also expect to be involved in lots of troubleshooting.

Are FPGA Programmers in Demand?

Yes! FPGA programmers are always needed, particularly in the fields of military, aerospace, medicine, high-frequency trading, consumer electronics, and more!

One caveat we should note is that – in the US, in particular – developer roles are often placed in certain tech hotspots. This means that, if you are serious about a career in FPGA, you should be prepared to relocate in order to take up a job in the field.

How To Become an FPGA Programmer

The best way to become an FPGA programmer is to start learning today! Many universities with an engineering department will have Design Engineer programs, or elective VHDL modules which could be integrated into your curriculum.

Alternatively, you can start by learning at home. We’ve provided a few links to relevant tutorials in the FAQs below.

FAQs

The below FPGA questions are frequently asked by newcomers, so I’ve answered them here for ease of access.

Is FPGA hardware or software?

FPGA is both hardware and software. It involves taking a programmable integrated circuit (hardware) and describing how it will work (software, or programming).

What are the best tutorials for learning FPGA development?

One of the most frequently recommended introductions for FPGA beginners is the ASIC-World Verilog Tutorial. We would also recommend nandland’s Introduction to Verilog

FPGA vs Microcontroller: what’s the main difference?

The main difference between an FPGA and a microcontroller is that a microcontroller can only process data in the order and structures permitted by its manufacturer; an FPGA, on the other hand, can be reconfigured to handle data in an almost infinite number of ways.

Which programming language does FPGA use?

FPGA uses Hardware Description Languages such as VHDL and Verilog. These are fairly unique, and bear more of a resemblance to the syntax of languages like Pascal and ADA than something like C/C++.

Is an Arduino an FPGA?

An Arduino is not an FPGA. It is a microcontroller which will process information sequentially, and this order cannot be reconfigured.

The Future of FPGAs

The future of FPGAs is, indeed, bright. Whether used in military applications, neural networks, or data centres, they are increasingly being required for exciting new uses (whether as part of a prototype or a finished product).

In recent years, oil and gas drilling calculations made a brief shift to FPGA before reverting back to ASIC-based solutions; even though it didn’t last, it’s yet another sign of a lucrative industry experimenting with – if not relying on – FPGA due to its highly versatile range of applications and abilities.

Closing Thoughts

Despite the massive technical understanding needed to develop for FPGA platforms, they are still in constant use. This is because of their ability to circumvent convoluted chip design and production processes, as well as their ability to process information at speeds your average microcontroller can’t touch.

Hopefully, you now have a greater understanding of how they work, and we’d love to hear some of your feedback, questions, and/or thoughts in the comment section!

Leave a Reply

Your email address will not be published. Required fields are marked *