AR# 39618: Design Assistant for XST - Inference concerns with Distributed RAM
Design Assistant for XST - Inference concerns with Distributed RAM
Please refer to this Answer Record for help on understand how or why a dedicated RAM is inferred.
Note: This Answer Record is a part of the Xilinx Solution Center for XST (Xilinx Answer 38927). The Xilinx Solution Center for XST is available to address all questions related to XST. Whether you are starting a new design or troubleshooting a problem, use the Solution Center for XST to guide you to the right information.
If you are intending to infer Distributed RAM and XST is failing to do so, then you may want to double check the following:
Compare your RTL to the "RAMs Coding Examples"of the XST user guide. The user guide will show you specific examples for Distributed RAM rather than Block RAM. See (Xilinx Answer 38931) for XST documentation.
If the Distributed RAM is pipelined, ensure that asynchronous resets are not used.
Double check in the Synthesis Report that the Distributed RAM is not being optimized out.
Make sure to not have a keep or save-net-flag constraint on the array that consists of the Distributed RAM. This will force XST to keep all of the registers instead of inferring a Distributed RAM.
Larger RAM depths may cause XST to infer Block RAM rather than Distributed RAM. You can force XST to infer a Distributed RAM by adding the RAM_STYLE constraint to the array. See (Xilinx Answer 39749) for help with attributes.
Be sure to not reset the entire array as this can not be done with Distributed RAM. You can only reset the output of the Distributed RAM or the pipeline stages since there are internal registers inside of the Distributed RAM are allowed to be reset.
If XST is inferring a Distributed RAM and you do not want this, then you can force XST to infer a Block RAM by using the RAM_STYLE constraint. If you want XST to infer registers rather than a RAM macro, then you can place a KEEP constraint on the entire array.