什么是FPGA?

文章目录


FPGA即现场可编程门阵列,是一种芯片,它具有很大的灵活性,几乎可以让你实现任何你能想到的数字逻辑功能,但是它本身并不做任何事情,它没有预设的功能。 单片机有内置的计算核心,所有功能都是硬件实现好的,你只需要设计应用程序。而FPGA不是这样的,你给它通电后他只会呆在那里什么事也不做,但是你可以编程FPGA芯片来实现数字电路,可以把FPGA变成AVR或者PIC单片机,可以把它变成数字信号处理器,可以把他变成能驱动数千个LED的驱动器,他非常灵活,因为他是通过数千,数万,数十万甚至更多的独立逻辑单元CLB(可配置逻辑单元configuration logic block)来实现。他基本能实现任何你能想到的基础逻辑功能,因为有数千,数万甚至数十万计的逻辑单元,他们配合可以完成复杂的或者简单的数字逻辑功能,这些逻辑单元位于红色的交叉互联矩阵中。芯片内部的金属连接线可以被配置成任意的连接方式,可以把分布在各个地方的逻辑单元和IO针脚连接起来,来实现你想要的功能。FPGA芯片是由许多与非门和连接线组成,FPGA的内部布线是个问题,非常多的CLB和连接线, 现代的FPGA包含门电路,触发器,查找表等。外围是一定数量的互联接线网络
CLB的结构 :
基本有4个输入(A,B,C,D),不同的FPGA可能有更多的输入的查找表
所有可编程熔断器都在LUT里面,可以对熔断器编程来实现特定的功能,熔断器基本上是门电路组成,另外一般还会有一个或多个触发器,可以以不同的方式操作他们,他们可以连接到外部时钟信号,也可以连接到内部结构,中间可能存在一些切换的逻辑,还有触发器的复位线,你可以选择触发器的正反相输出中的一个作为CLB的输出,基本上就是一些输入,一些逻辑门,一些触发器和锁存器,让你可以实现锁存和时钟逻辑,然后你就得到了输出信号。

四周有连接到外部引脚的IO单元,它们的内部结构其实相当复杂,它们不只是外部引脚的驱动电路,它们还可以被编程,配置成不同的功能,输入,输出,三态。配置成差分对线而不是单线输出,你可以在不同的引脚上用不同的逻辑电平,内部有触发器,锁存器驱动DDR存储器 ,还有很多这些复杂的功能
FPGA 是易失性的,他不能记住自己的内部配置,当你断开电源,FPGA 中的所有配置都没了。就像刚出厂的时候一样的空白芯片,但是FPGA 内部有一个复杂的配置模块,当他连接到一个外部的存储配置信息的闪存芯片,一般是4位或者8位的串行,并行也可 以,它里面存储了所有的熔断器的配置信息, 逻辑单元之间是怎么连接的,逻辑单元内部是怎么配置的,IO内部是怎么配置的,所以FPGA工作需要很大的闪存,而且因为需要编程的熔断器的数量很多,它们不是一次性的,它实际上是用于存储功能配置信息的晶体管或锁存器。
当FPGA断电又上电时,FPGA内部没有任何配置信息,但他的配置模块当你上电时,他就会知道,来电了,我要从外部闪存读取配置信息,然后对熔断器进行配置,配置过程要花上几秒钟,所以FPGA上电后不能马上开始运行。
FPGA的优点:
1、他能做任何数字逻辑的事情,可以变成单片机,超级计算机,驱动器驱动巨量的LED。
2、他的速度也很快,最基础的FPGA,IO的串行传输性能也能达到Gbps的级别,他的收发器速度可以支持Gbps级别的串行数据的解码,速度非常快。
相比之下,有比较快的现代处理器的单片机,比如树莓派上的ARM芯片,可能操作IO引脚,达到100MHz左右的速度,但是处理器会成为瓶颈,当输入信号达到100MHz的时候,就做不了重要的计算了。对于FPGA,它里面有许多逻辑单元可以来处理,海量并行,它们可以配置成专门用来处理输入信号,如果你需要高速实时的处理一些输入信号并且输出,你可以配置一部分逻辑资源专门来做这个事情,他在速度上有不可思议的灵活性。
FPGA是现场可编程的,单片机也是可以重新编程的,你可以现场刷新硬件。这两者的区别在于FPGA并不一定就是一个处理器,事实上他并没有内置处理器功能,除非你给他塞进去一个。假如你设计了一个产品,用到了单片机,当你把它拿到现场的时候发现,啊…不!我要改下设计,但是改不了,芯片没有足够的剩余资源了。但是如果是FPGA,如果你的处理器是实现在FPGA里面的,如果片上的剩余资源还足够的话,你在现场需要一个FIR滤波器,或类似的东西,你可以按你想要的重新配置,只要FPGA中有剩余资源 ,你可以配置一个FIR滤波器,调整一下PID控制器什么的,他比可编程的单片机更强大,它功能不仅限于单片机和处理器,他可以做任何东西。
海量并行是FPGA的最大优势之一,当你用单片机时,所有事都由处理器串行处理,一行一行的执行你的代码,即使你用上了实时操作系统,也不是真的实时,操作系统处理A的时刻,不可能同时处理B。但是用FPGA,就可以做到,因为FPGA中的逻辑单元是完全可配置的,完全独立,所以当你在输出A的时刻,可以输入B,在这一时刻,还可以做许多操作,只要你有足够的IO引脚和逻辑单元,你可以并行的处理数百计地事情。如模数转换器,如果你有50个通道的ADC数据进来,ADC是外置的,因为它只有数字功能,干不了模拟的事情,而你需要一次处理这些数据,可以搞50个通道的采样、保持,然后再全部处理,但是有速度的瓶颈。对于FPGA,你可以用一些特定的逻辑单元专门处理一个通道,再在FPGA上把这个配置复制50次,100次…你有数十万的逻辑单元可以使用,非常好,这就是FPGA海量并行的优势,如果你想一次性并行处理很多事,应该用FPGA而不是单片机。
多IO引脚优势:
FPGA是专长于大量IO的应用场景 ,FPGA的研发有向高IO能力倾斜的趋势,当你在讨论FPGA的好坏时等于是在讨论它内部逻辑单元的数量,你很难找到只有很少引脚的好的FPGA,你找不到SO16.QFP44这样封装的FPGA,它们有几百个到上千个引脚,因为引脚多,FPGA芯片一般都是像BGA这样很难用的封装。
如果你想驱动一个巨大的LED阵列(几百乘几百的)可以用单片机加上一大堆74HC595锁存器之类的,来锁存行列信息,但是会遇到速度瓶颈,处理器需要处理的非常快。FPGA可以并行的完成,它有几百个IO引脚,你可以选一个有几百个引脚的,然后一次性完成。
FPGA也有很多缺点:
1、很贵,它们比能实 现类似功能的芯片要贵,FPGA 是市场上最复杂,最尖端的信号处理芯片之一,因为它整合了数百万的逻辑单元,布线,熔断器等等东西以满足灵活行的需要
2、因为它具有这种灵活性, 他的功耗是没有优化的,如果你做低功耗的设计FPGA的功耗不可能接近同样功能的专用芯片,他所用的技术和复杂性让它做不到这一点,他是一种功耗比较高的器件,他们启动时会消耗很多的功率,例如他启动和初始化时会有浪涌电流,所以在低功耗设计中不要用他。
3、无法实现立马唤醒功能。
4、FPGA很复杂,对于新手来说坑很多,容易出错,因为你相当于自己设计芯片,你要考虑所有的时序,所有的布线,器件的复杂程度,怎么配置IO单元等等但是不要太害怕,编译器帮你搞定了很多细节,你不用知道所有细节也能做很多事情。他不仅是在配置上有很多坑,比如如何选择时钟引脚,因为一些IO 单元的时钟引脚连接了内部的高速布线,如果你需要很高速的设计,你需要知道怎么配置FPGA中正确位置的逻辑单元,布局配置不同产生的效果也会不同,开发工具会帮你搞定一些事,但真的要注意,光配置和选择FPGA这里就有很多坑。
5、开发工具很复杂

在这里插入图片描述

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值