FPGAs aren't anything new but they also are probably one of the most difficult pieces of electronics to learn to use. In the tutorial below, we are going to cover the basics of what creating designs for an FPGA looks like, and the fundamental building blocks you'll use.
Let’s just get something cleared up first: You don’t really program FPGAs. It is often convenient to say we do because it feels like programming - you write some text, the text is turned into a binary file, and the binary file is loaded on to the FPGA - but you aren’t writing a program, you're creating a circuit. You don’t use programming languages to create circuits; you use hardware description languages (HDLs).
It’s important to keep in mind when creating designs for an FPGA that you are describing hardware, and whatever you write will eventually end up as a physical circuit. It is possible to describe circuits that are impossible to implement, or to describe something that seems simple but takes a huge amount of resources to implement, so having a good idea of how the circuit you are trying to describe could be implemented is critical.
In this tutorial, we'll show you the structure of a design, which HDLs to use, the anatomy of a module and more! Of course if you need a good place to get started with FPGAs before you learn how to program them, start by learning all about what an FPGA is and how they work!
If you are new to FPGAs this is the place to start. We explore what an FPGA is, how they work, and everything you need to know in between. If creating hardware with text seems like magic, don’t worry. The way they work is actually quite simple in concept and in this tutorial we really break it down.
For more about the world of FPGAs, visit our resource page:
 
 
Despite the claims in the article, you really do program FPGAs. You do use a programming language (Lucid). HDL (hardware description language) is just another name for a declarative programming language. This produces a binary image that you download into the RAM on the FPGA and it executes. Yes, it's not a standard imperative programming language like most people are used to (e.g., C++ or Python), but it is a programming language nonetheless. The fact that you are loading values into lookup tables to simulate logic functions is really irrelevant to the discussion. It's software because it's soft and easily changeable (as opposed to hardware which is hard and difficult to change).
On page 36ff of the January, 1990 issue of Popular Electronics (PDF readers think it's page 29) there was a programmer for 18CV8 PEEL device (long since obsolete). It's a far simpler device than the FPGAs, but it uses much the same principles in a 20 pin DIP (solderless breadboard-friendly) package. I built the project, and played with it a bit -- the one "significant" project I did was a 4-state Finite State Machine (FSM) that turned on 2 of 6 LEDs depending on the state (a traffic light simulator, with a 555 timer to generate ~1Hz signal to step from one state to the next).
Today there are (still) 22V10 chips in DIP packages available at Digi-Key, and I ran across this programmer, though I haven't checked it out in great detail.
IMHO, these Programmable Logic Devices (PLDs) would be a great way to "stick your toes in to check the temperature" before diving headlong into FPGA stuff.