We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 61995

Vivado Synthesis - Sub-optimal inference of block RAM (bad area QoR) when the depth is non-power of 2


When the memory depth is non-power of 2, Vivado Synthesis extends the depth to a power of 2 to do BRAM inference, which results in more BRAMs being inferred than expected.

An example of this is as follows:

For a RAM with depth=1146880 and width=3, which is 1146880x3 = 70 x (16K x 1) x 3, the expectation is 70x3=210 RAMB18s.

However, Vivado Synthesis extends the depth to a power of 2 (2^21 = 2097152), which means it needs 128x3=384 RAMB18s=192 RAMB36s.


Block RAM inference with a supported depth other than power of 2 has been supported for UltraScale and newer devices.

However, this is not supported for 7 Series devices.

To work around this issue in the meantime, manually change the code to split the RAM into several parts so that it consists of several small RAMs whose depth is a power of 2.

For the example above, this 1146880x3 RAM can be split into three parts: 1048576 (2^20) x 3 + 65536 (2^16) x 3 + 32768 (2^15) x 3

AR# 61995
Date 01/05/2018
Status Active
Type Known Issues
  • Vivado Design Suite
Page Bookmarked