FPGA内部资源基础知识第四弹来啦!今天讲的是FPGA的基础知识BLOCK RAM,小伙伴们在学习FPGA时不仅需要具备动手实践能力,同时也需要具备一定的基础理论知识,快来看看今天学习的BLOCK RAM知识点吧~~
FPGA 设计中一般都少不了数据缓存,虽然FPGA 中的寄存器资源比起 CPLD来说可以算是相当丰富了,但是,如果想利用寄存器作为批量数据的缓存,那么对逻辑资源块的侵蚀还是很恐怖的(寄存器用来存储、查找表等用来实现地址,数据选择相关逻辑),而如果数据量不是特别大,采用片外的独立存储器芯片又显得有些“杀鸡用了宰牛刀”,利用率太低并且还需要编写额外的接口驱动逻辑。除此以外,在一个FPGA设计中,也许有很多地方都用到了数据缓存,而这些地方对缓存的需求都是同时的,那么不太可行也不太可能在片外挂几十个存储芯片来解决问题。因此,为了应对中、小规模的数据缓存问题,FPGA生产厂商相继为自己的FPGA芯片中引人了硬件的存储核,我们称之为BLOCK RAM。
由于BLOCK RAM不同于寄存器的硬件结构,使得实现同样的存储容量所消耗的资源要远比寄存器少得多。当然了,同一时刻一般只能操作 BLOCK RAM中一个地址的数据,而如果是用寄存器实现缓存,我们完全可以在同一时刻操作所有的寄存器。与逻辑资源块一样,BLOCK RAM资源也均匀分布于整个FPGA芯片中,当然在列的方向它们的排列也紧密一些,估计是为了便于拼凑起来形成更大的缓存。
有的FPGA中仅有一种容量的BLOCK RAM,而有的FPGA中会有若干种不同容量的 BLOCK RAM。 BLOCK RAM本身的配置也比较灵活,对于存储量一定的 BLOCK RAM 来说,几乎可以将它配置为任意位宽的形式(其实位宽一般都是2的整数次幂,只不过可以不使用多余的位宽罢了,上限大概为32bit,不同的芯片型号会有所不同),当然位宽不同的时候,单块 BLOCK RAM 的所能存伤的数据个数也会不同。
BLOCK RAM的应用范围非常之广,它可以被配置为同步、异步、单端口、双端口的RAM或FIFO,或者ROM。除此以外,它本身就是一个先天的查找表,对于一些普通LUT难以应付的大容量表格情况,使用 BLOCK RAM 可以很好解决。