大家好,很高兴在这里跟大家一起分享我的第 15 篇原创文章,喜欢和支持我的工程师,一定记得给我点赞、收藏和分享哦。加微信【woniu26a】与作者进行沟通交流。
一、FPGA全称是Field-Programmable Gate Array,即现场可编程门阵列。
二、跟单片机相比
结构不同
2.1、单片机的引脚、资源以及内部乘法器的数量是确定的,也就是说它的硬件是确定的。只要通过软件编程就可以实现其功能。
2.2 、FPGA内部电路是不确定的,它可以通过编程来改变芯片的内部结构。内部乘法器、除法器和寄存器的数量都可以通过编程来改变。
小结:
A、单片机不改变硬件结构,而是通过改变它的指令执行的先后顺序来实现我们所需要的功能。(指令包括读、写或跳转指令)。
B、FPGA的编程和设计就是为了改变芯片内部的硬件电路结构来实现我们需要的功能。
考虑点不同
2.3、在做单片机或电脑编程的时候,是不需要考虑时序的,只要有个函数,然后有个编程代码实现就好了。写一个函数,反复调用就可以实现很多的功能。
比如一个功能,单片机只需一个小时,但FPGA可能花一天甚至几个月的时间。因为FPGA不仅要想到功能,还要想到电路和时序。它是需要一个一个时钟慢慢去抠的细节化的一种设计方法。
所以,FPGA开发难度远远比单片机高。
难度系数比较从高到低:ASIC集成电路>FPGA>单片机
FPGA是专做底层的开发和设计,专做底层优化的工作,FPGA非常难,这是它的一个特点。
三、FPGA应用场景
3.1、FPGA功能强大,试验难度大,一般用在通信接口的设计以及数字信号处理等比较高端(数据量大、数据传输快、精度要求高)的场合。
日常应用中,要求不是特别高的场合广泛使用单片机来实现。
3.2、FPGA还有一个特殊的应用场合,即ASIC的原型验证。
怎么理解?集成电路开发流程长,风险高,当做一个集成电路开发的时候,从代码编写到仿真验证,到PCB的布局布线,再到最后的生产都需要经过很长的时间周期。
为了保证成功率,希望一次通过,在生产之前可以在FPGA上跑一跑,验证一下功能是否正常。
3.3、FPGA的非标场合(用量少的场合,常用于军工领域。)
例如,USB等接口标准是固定的。但有一些特殊场合,它的市场需求本身不大,它本身也是某种特殊定义的接口,这种接口在市场上很难找到对应的芯片去实现这种接口,这时FPGA就可以派上用场,可以自己设计内部结构电路跟这种接口进行对接。
3.4、新科技的新型运用。
当一个新科技不明朗是否有市场前景的时候,肯定不会大批量的生产某一款芯片,可以先用FPGA来试验,待市场需大量的需求时再大量的生产。
小结:
相较于专用的ASIC,FPGA工具在开发难度上降低了许多,并大大缩短了开发周期,而且由于FPGA是可重复编程的,其研发成本与风险要比ASIC减少许多,更适用于复杂多变的数据应用。
四、FPGA的缺点
FPGA的缺点是成本高,为什么这么说呢?专用的电路一定是把所有的电路都用上了,来实现我们所需要的功能。FPGA要同时满足A、B、C的功能。但满足A的某些功能在B或C上肯定是用不上的,所以它的利用率比较低,也可以理解为它的成本高。
所以FPGA只能做一些高端的少批量的运用。当发现市场前景非常好,想要降成本的时候,可以把FPGA的代码变成集成电路去生产。
五、FPGA的基本结构
FPGA不像专用的ASIC那样通过固定的逻辑门电路来完成,而只能采用一种可重复配置的结构来实现,查找表(LUT)可以很好的满足这一要求。
查找表(Look-Up-Table)是什么?其本质上是一个RAM存储器。
举例说明,以数字逻辑Y=A&B&C为例。在专用ASIC中,为实现该逻辑,逻辑门都已经事先确定好,如下图:
Y=A&B&C的实现结构
在FPGA中就不一样。A、B、C通过编程可以是任意关系。设计过程如下:
先用代码写出Y=A&B&C,
然后用EDA工具(QUARTUS或其他开发工具)分析这一行代码,得出A、B、C在不同输入组合下(共8种),Y的值分别是多少,其真值表如下图所示
然后软件工具将所有结果写到查找表(LUT)上,从而实现该代码的功能。
Y=A&B&C的FPGA实现基本结构
这就是FPGA实现的原理。
六、知识补充:
6.1、在FPGA内部有着软内核和硬内核之分。
软内核:可以通过门电路随意搭起来实现某种功能的电路。比如在芯片内部实现了一个计数器逻辑,那么在构造计数器逻辑过程中使用到的功能可以被称为“软功能”。
硬内核:实现固定功能的芯片。电路是固定好的,通过硬件去实现的。比如:PLL时钟单元,它的电路是固定的,因为时钟通过外部晶振起振后,通过内部PLL时钟倍频,它不是数字电路可实现的,需要模拟电路倍频实现。AD芯片和DA芯片也是模拟芯片,也是需要固定的资源在里面。
6.2、一种新的SOC FPGA(带嵌入式处理器的FPGA)
在FPGA内部有存储单元片内RAM块,数据存放在RAM中,并由其设置工作状态,若想要FPGA进行工作,就要对RAM进行编程,而如果外部有大量数据进行交互时,就要通过增加外设对数据进行暂时性的存储,如SDRAM存储器或DDR3存储器,暂存在外设中的数据最终也是要通过FPGA内部的RAM进行存储和处理。
目前,主流的FPGA都是基于SRAM工艺,在大部分开发板上都是串行配置模式。由于SRAM掉电就会丢失内部数据,因此往往都会外接一个能够掉电保存数据的片外存储器来保存程序。这样一来,上电时FPGA便将外部存储器种的数据读入片内RAM以完成配置,对FPGA编程完成后便进入工作状态。
目前FPGA内部已经有一些芯片电路,不仅仅有接口,门电路,还有ARM及其它CPU等等已经带入嵌入式处理器的功能。
我们会发现电路板上功能有ARM+FPGA或DSP+FPGA协同合作,一个芯片上实现处理器+FPGA功能,这就是我们更强大的嵌入式处理器的功能。
优点:
1、更有利于PCB布局,面积更小,功能更强大。
2、ARM嵌入在芯片内部,ARM和FPGA之间有更多的总线和通信方式,速度可以更快。
6.3、数据的存储及配置方式
当在EDA工具上将程序设计完成之后,便需要将软件上的程序烧录进FPGA内部。通过不同的配置模式,FPGA便有不同的编程方式,以下为几种常见的配置模式:
1、并行模式:通过并行PROM、Flash配置FPGA;
也就是说把FPGA的程序先写到PROM或Flash里面,上电的时候就会自动读取里面的值,配置FPGA;
2、主从模式:使用一片PROM配置多片FPGA;
3、串行模式:串行PROM配置FPGA;
4、外设模式:将FPGA作为微处理器CPU的外设,由微处理器对其编程。
一个是FPGA,一个是CPU,CPU通过接口写FPGA,然后再通过FPGA实现需要的功能。那么CPU配置FPGA参数的数据从哪里来?
可以增加一个RAM或FLASH,CPU读取里面的内容,然后写到FPGA内部,FPGA工作就能实现需要的功能。这是比较常见的一种方式。
这种方式跟CPU直接控制FPGA有什么不同吗?也就是上电后FPGA直接读取PROM的数据不就好了,为什么要多一个CPU呢?
其中一个原因是FPGA的有些程序是加密的,CPU读取数据并解密后再发给FPGA,FPGA再来实现功能。