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

The timing-closure triage checklist: what to do when slack goes negative

The timing report says -0.42 ns and the demo is Friday. Timing closure

Jul 3, 2026 · 3 min read

FPGAs in high-frequency trading: the anatomy of a nanosecond

High-frequency trading is the one industry where FPGAs aren't the

Jul 3, 2026 · 6 min read

FPGA reset strategies: async assert, sync deassert, and when to skip reset entirely

Reset looks like the simplest signal in a design and behaves like one of

Jul 3, 2026 · 3 min read