文章目录

前言

BLOCK RAM以及DSP都是FPGA内部嵌入的硬核资源,也可以说很底层的资源了,二者为开阔FPGA的应用途径起到了很大的作用,BRAM的出现在很多种情况下节省了FPGA内部的寄存器资源,对于需要稍大容量存储的数据可以使用BRAM来实现,而DSP是进行信号处理的重要单元,很多种数学运算都可以通过DSP核来实现。下面通过摘自《FPGA之道》这本书的内容来更深刻地了解这两种硬核资源。
另外,关于FPGA底层资源可以参考之前的 博文:
https://blog.csdn.net/Reborn_Lee/article/details/98599268

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的整数次幂,只不过可以不使用多余的位宽罢了,上限大概为32bits,这个不同的芯片型号会有所不同),当然位宽不同的时候,单块BLOCK RAM的所能存储的数据个数也会不同。
BLOCK RAM的应用范围非常之广,它可以被配置为同步、异步、单端口、双端口的RAM或FIFO,或者ROM。除此以外,它本身就是一个先天的查找表胚子,对于一些普通LUT难以应付的大容量表格情况,使用BLOCK RAM可以很好解决。

DSP

如果有大量简单的运算需要处理,FPGA可以利用自身并行运算的特点,迅速搞定,这点相比于其他处理器芯片非常具有优势。不过,FPGA对于复杂的运算并不擅长,例如乘法运算,如果用逻辑资源块来实现乘法器的话,不仅资源消耗较大,并且运算速度太慢,虽然利用流水线的思路可以为运算提速,但是带来的副作用就是给资源消耗再次带来成倍的增长。而乘法运算几乎可以说是数字信号处理的基本运算,如果FPGA不能很好的解决高效的乘法问题,那么其在数字处理界的地位必将受到极大抑制。因此,为了FPGA芯片的可持续发展,各大厂商又相继在它们的FPGA芯片产品里集成了高性能的硬件DSP核。拥有了DSP后的FPGA,犹如猛虎添翼,它左青龙,右白虎,人挡杀人,佛挡杀佛,自此开始了称霸数字信号处理江湖的传奇历程。下面,分别列出Xilinx和Altera公司的DSP硬核原理图供大家鉴赏:
FPGA之道(9)BLOCK RAM以及DSP硬核_数字信号处理
图一:Xilinx公司DSP48宏细节实现图
FPGA之道(9)BLOCK RAM以及DSP硬核_数据_02
图二:Altera公司Stratix V FPGA可变精度DSP架构18bits精度模式
FPGA之道(9)BLOCK RAM以及DSP硬核_数据_03
图三:Altera公司Stratix V FPGA可变精度DSP架构高精度模式

结合上面几副图,我们可以看到,DSP硬核中的核心资源就是一个高性能的硬件乘法器,外加一些累加器和寄存器、复用器等资源。DSP硬核通过将这些高性能的资源紧密的结合在一起,从而让FPGA芯片具有强大的数字信号处理运算的能力。