The LibFPGA blog

Practical FPGA design, one problem at a time: FIFOs and clock domains, timing closure, RISC-V soft cores, and the tools that make the hard parts routine.

How to cross a clock domain without corrupting your data

Every non-trivial FPGA design ends up with more than one clock: a 100 MHz core and a 125 MHz Ethernet MAC, a fast datapath and a slow control bus, an ADC clock and everything else. The moment a signal made in one clock domain is read in another you have a clock domain crossing (CDC), and if you wire it up naively it will work in simulation, pass on the bench, and then fail in the field one time in ten thousand. Here is why, and here is the small set of patterns that make it safe.

Jul 6, 2026 · 8 min read

How to size an async FIFO (and why "double it" isn't a strategy)

The most common FIFO sizing method in industry is: take a guess, double it,

Jul 3, 2026 · 2 min read