Work out block ram requirement instantly with clear inputs, formula shown and shareable results.
Block RAMs are allocated as a two-dimensional array: blocks in parallel to reach the data width, and blocks in series to reach the depth. Because both dimensions round up, the achieved bit utilisation is often well below 100% — a real cost when BRAM is the limiting resource.
BRAM allocation
width blocks = ceil(width / native width); depth blocks = ceil(depth / native depth); total = product
Rounding in both dimensions. A memory 40 bits wide needs two 36-bit blocks, wasting 32 bits of width across the whole depth.
For small memories — a few hundred bits — where a whole block RAM would be wasted. LUT-based distributed RAM is far more efficient there.