导读:
在选择FPGA时,关注LUT(Look-Up Table)和BRAM(Block RAM)是非常重要的,因为它们是FPGA架构中的两个核心资源,对于设计的性能和资源利用至关重要。
BRAM(Block Random Access Memory,随机存取内存块),块RAM是嵌在FPGA内部、固定大小(容量)的硬IP。
为什么要嵌入丰富的块RAM?对于需要大量存储器的应用,比如需要大规模的数据存储,如图像、视频、音频等,块RAM是一个理想的选择。块RAM提供了高密度的存储,能够有效地存储和检索大量数据;对于需要频繁访问的数据,块RAM可以用作数据缓存;一些算法可能需要大量的中间数据存储,使用块RAM可以提供快速且容量大的存储,用来支持这些算法的运行;异步时钟域之间的数据传输通常需要使用FIFO(First-In-First-Out)缓冲区。
在FPGA开发中,使用块RAM的多少取决于设计的性质和对性能的需求。在设计过程中,通过合理的资源规划和优化,可以有效地利用块RAM以满足应用的需求。
注:以xilinx7系列690T为例
块RAM的分布
图1:产品选型指南
一些应用可能更加侧重于逻辑资源,而另一些应用可能更加侧重于存储资源,如上图1所示,以690t为例,Block RAM总数目为1470,总容量为52920kb。上图中的Distributed RAM 是 FPGA中的一种内置存储器资源。与块RAM不同,分布式RAM分散在FPGA的逻辑区域中,而不是集中在特定的块中。分布式RAM主要由可编程逻辑元件(LUTs)和触发器(Flip-Flops)组成。每个LUT都有一些存储单元,用于存储少量的数据。这些存储单元可以被组合起来,形成一个分布式的存储器。简单的说Distributed RAM就是FPGA用内部的逻辑单元拼凑而来的。一般较少使用,本文不重点讨论。
图2:7系列 块RAM资源
如图2可知,690T一共包含1470个块RAM,一个有15“列” 36Kb的BRAM,每“列”有100个36Kb的BRAM。结合下文图3、图4用Vivado打开实际device(690T)的视图说明,看过我前面文章的读者可知,690T一共20个时钟区域,图4是将图3最上方4个时钟区域放大后的截图,先看图4,其中每一个小红箭头代表1“列”36kb的BRAM,一共15个小红箭头(每以列共100个36kb的BRAM)。细心的读者可能发现,图2的表格一共有15列,每列100个,总数应该是1500个,为什么图2的表格总数只有1470?答案就在图3里面,因为有一些BRAM已经分配给一些高速硬核使用了,比如690T的PCIe 硬IP。
图3:Device视图
图4:Device视图(图3最上方4个时钟区域放大截图)
图5:工程“综合实现”后的资源消耗指示图
图5是笔者基于690T开发的一个实际工程综合实现后的资源消耗,BRAM一共使用273个,评估你所选择的FPGA是否合适,最主要就是看逻辑资源和BRAM使用情况,当然特殊要求除外(如DSP、其他硬IP等)
块RAM的特性和按“列”分布原因
FPGA块RAM的特性很多,读者不在这里细述每一个特性,读者自行参考厂商原文档,因为是硬IP。可能每个厂商支持的特性各不相同,使用时需要注意几点的是:
FPGA中的块RAM按列分布的设计选择通常是出于性能和资源利用的考虑。这种设计决策涉及到FPGA内部架构和数据流的优化。
总结
按列分布块RAM是一种有效的设计选择,有助于提高性能、优化资源利用,并简化时序和布线操作。不过,具体的FPGA架构和设计工具可能会有一些差异,因此在具体的FPGA系列和工具链中可能会有一些微妙的差异。
全部0条评论
快来发表一下你的评论吧 !