FPGA design

A field programmable gate array (FPGA) is a sheet of reconfigurable silicon that becomes whatever digital circuit you describe. This series builds real hardware on it from the ground up. It starts with the two primitives every design rests on, the lookup table and the flip-flop, and works upward through combinational logic, state machines, arithmetic, on-chip memory, pipelining, and timing closure, ending at a pipelined matrix-multiply engine of the kind that accelerates machine learning. Every module is written in synthesizable SystemVerilog, kept small enough to read in one sitting, and checked in simulation. The bias throughout is toward the way the fabric actually works rather than toward toy examples, because on an FPGA the difference between a design that meets timing and one that does not is usually a fact about the silicon.

Start here

Inside the fabric, the lookup table and the flip-flop

What an FPGA is actually made of. The lookup table as a tiny reprogrammable truth table, the flip-flop as the only thing that remembers, and how logic slices, carry chains, block RAM, and the routing between them turn a description into a circuit.

Read the page →

The modules from this series live in the advanced-fpga-design repository, each with a self-checking testbench you can run.

Building blocks

The primitives, and the smallest correct ways to combine them. Read in order, each page assumes the one before it.

Datapath

The arithmetic and storage a real design is built around.

Timing and structure

Making it fast, and making it safe across clocks.

Interfaces and the capstone

Connecting blocks together and building the accelerator.