Are FPGAs Software or Hardware?

TLDR: Yes.

To answer this question, you need to actually know what software, hardware, and FPGAs are, and in a world where all three are sophisticated and ubiquitous, clear answers aren’t easy to come by.

In the hardware-centric world I come from, hardware and FPGAs are well-defined, and software is this nebulous stuff that somehow makes high-power adding machines play the Legend of Zelda, so I’ll focus a little more attention on the part that is more mysterious from my point of view: that dang ol’ software.

So the reason high-power adding machines are somehow delivering our videos of cats jumping into boxes and short loops cut from Star Wars movies with floating commentary in front of them is sheer, raw, unmitigated scale.  And we tell undergraduates that “computers only know how to add, subtract, multiply, and divide,” but the real magic they do is shove information from place to place.  The shuffling around of bits is done according to rules, though, and those rules exist as a set of zeroes and ones.

An FPGA that has been configured to act a certain way has actually had the movement within it of signals specified by rules that exist as a set of zeroes and ones.

Funny.

So the difference, at the actual, physical level, is what those zeroes and ones do.  In the computer, they are a list of commands.  In the FPGA, they are, basically, a routing number.  But they’re still both physical systems, being ordered around by numbers.  So the FPGA is hardware, sure, but it’s definitely got something very closely related to software inside it, causing it to be what we want it to be.

Funny aside note, the legal arguments which allow the existence of software patents sound explicitly like the arguments that FPGAs are hardware: that the zeroes and ones physically change the system to do some other kind of work.  Which, um, they do.

Software is physical.  And that’s kind of weird.  It’s very easy to forget that it’s physical, because it moves around so quickly, is duplicated so easily, and really, really looks like non-physical, ethereal magic.  But ultimately it’s a (large) collection of electrons in a particular pattern.  So the distinction between software and hardware is kind of an artificial construct.  Most things are.

It gets worse, in terms of drawing a clear line.  Let’s look at how we get these collections of zeroes and ones.  In both cases, we start with text, which is then processed by a specialized computer program, which chooses the specific zeroes and ones that will have the desired effect.

The differences between these processes are not big and obvious but small and subtle.  Languages like Verilog are designed to provide comforting similarity to the experience of writing software.  This is a serious mixed blessing not because FPGAs are hardware.  It’s a mixed blessing because the difference that is easily painted over by syntax is complicated and subtle.