FPGA问答系列--Block RAM的资源如何计算?

前言:本文章为FPGA问答系列,我们会定期整理FPGA交流群(包括其他FPGA博主的群)里面有价值的问题,并汇总成文章,一方面是希望能帮到不经常看群消息的小伙伴,另一方面也算是我们的技术积累。

Q:当使用ram时,width是960bit,depth是16bit,只有15Kb大小, 为什么占用了很多个BRAM?

A:首先要知道什么是BRAM,就是Block RAM,这些RAM就是分块的,可以当成36kb来使用,也可以当成18kb来使用,如果使用空间小于18kb,也会占用一整个18kb的BRAM。而且还要看使用的位宽和深度,这两个指标综合考虑来计算使用的BRAM的个数。

以7系列为例,每个36Kb BRAM也可以配置成深度×宽度为64K × 1(当与相邻的36KB块RAM级联时)、32K × 1、16K × 2、8K × 4、4K × 9、2K × 18、1K × 36或512 × 72的简单双端口模式。

超过上面这些原语中的宽度和深度时,都要增加一个新的BRAM。

再结合下面这个图,可以知道RAM18和RAM36的输入位宽分别可以是多少。

比如一个512*19的空间,刚好可以使用512x36的原语来覆盖,那就只会占用一个18k BRAM,如果是群友的960bitx16bit,那么需要960/72=13.333,因此需要13个256x72的RAM36,剩下的空间由1个RAM18即可满足。因此总共需要13个RAM36和1个RAM18.

当然,如果每次都这么计算一遍太麻烦,我们还是直接让工具给出结果是最简单的。

现在有了xpm,很多工程师在调用mem时,都喜欢直接用xpm,不用xci文件了,导致有些刚入行的工程师还不知道Block Memory Generator中还可以计算资源。