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

MyHDL: describe hardware in Python (and try it in your browser now)

Verilog and VHDL are the languages of FPGA design, and they're worth

Jul 4, 2026 · 5 min read

How many bits do you actually need? Precision as a design knob

Software gives you a fixed menu of number formats: float, double, maybe

Jul 4, 2026 · 5 min read

"Why did I infer a latch?" · the warning, the cause, the two-line fix

It's the most-Googled synthesis warning in FPGA design:

Jul 3, 2026 · 3 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