加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线15267534595
公司新闻
什么是FPGA
发布时间: 2024-05-13 21:43 更新时间: 2024-07-01 09:10

FPGA的英文全称是Field Programmable Gate Array,翻译成中文则是“现场可编程门阵列”。初听起来,这个名字的确有些拗口。从FPGA的本质上看,它实际上就是半导体芯片的一种。从这个意义上讲,它和我们更加熟悉的中央处理器CPU,或者图形处理器GPU等芯片并无二致。顾名思义,从FPGA的名字上就能体现出它的三个Zui主要的特点:门阵列、可编程、现场。

首先,FPGA芯片由大量的逻辑门阵列组成。我们知道,逻辑门是数字电路的基本组成单元,它们基于“布尔代数”对二进制数0和1进行操作,并完成不同的逻辑运算,例如与、或、非、异或,等等。举例来说,“非”就是把0变成1,或者把1变成0;把一个0和一个1进行“或”操作就会得到1;把一个0和一个1进行“与”操作就会得到0。在图1中,就列举了一些常见逻辑门的电路符号。

图片

图1 几个常见的逻辑门

通过对这些逻辑门的排列组合,可以得到一些稍微复杂的运算单元,例如执行算术运算的加法器和乘法器等。图2就是一个二进制加法器,它的功能是完成一位二进制加法的运算,这个运算只需要五个逻辑门就可以实现。

图片

图2 全加器(full adder)的逻辑结构图

有了这些基于逻辑门的通用运算单元,就能进一步用它们设计出更加复杂的功能模块,并Zui终形成一个个功能各异的IP(Intellectual Property)。对于大部分数字芯片来说,它们都是通过使用不同的IP,实现特定的逻辑功能,然后经过验证、集成、优化等过程,Zui终将设计流片,制造得到Zui终的芯片产品。

我们应该注意到的是,这些芯片一旦被生产出来,它的逻辑功能就已经被“固化”在芯片上了。也就是说,这些功能已经成为了芯片的一部分。尽管很多芯片都可以通过对片上的寄存器进行编程,但这种编程更多的是改变芯片的配置,并不会改变它本身的逻辑功能。如果想要对它的逻辑功能进行更改,或者发现设计的缺陷和漏洞,就要重新对芯片进行设计、验证和制造,而这些过程都需要耗费大量的时间、人力、金钱,这样的投入和风险是很多公司无法承担的。

在这个大背景下,芯片设计者们提出,与其将逻辑固化在芯片中,不如设计一种更加通用的芯片,在其中只包含Zui基本的逻辑门,并通过某种方式对这些逻辑门进行排列组合,使之能够通过编程改变它的逻辑结构。这样,就可以使用一种芯片实现许多不同芯片的功能了。这个想法,就是FPGA的前身。

FPGAZui主要的组成部分就是海量的“逻辑门”,它们通过特定的方式组合成逻辑门阵列,并通过互连单元进行连接。由于逻辑门可以任意组成更加复杂的电路单元,这就使得FPGA在理论上可以实现任意的数字逻辑功能。随着FPGA技术的不断发展,在现代FPGA中集成了上千万个这样的逻辑单元,因此人们可以使用FPGA完成很多非常复杂的功能,它甚至在某些领域替代了专用芯片。

值得一提的是,这里的“逻辑门”加上了引号,是因为FPGA里的逻辑门是通过查找表(Lookup-Table,LUT)的方式实现的。简单来说,就是将某个简单逻辑功能的全部可能结果写到一个存储单元中,并根据输入的变化直接查找结果并输出。除了部分中低端以及较早的FPGA采用了4输入LUT结构之外,在大部分的现代FPGA中,例如英特尔的Arria10、Stratix10和Agilex,以及赛灵思的6系、7系、UltraScale及UltraScale+系列等,查找表LUT的输入通常有6个,也就是说,这样的查找表结构Zui多可以实现任意6输入、1输出的逻辑功能。

除了查找表之外,FPGA的Zui小逻辑单元里还包括寄存器、选择器,甚至一些算术运算单元,例如加法的进位链,等等。不同的厂商对于FPGA的这个Zui小逻辑单元的命名都不尽相同,例如英特尔将其称为ALM(Adaptive Logic Module,自适应逻辑单元),赛灵思称之为CLB(Configurable Logic Block,可配置逻辑模块)。虽然名称有所差异,但它们的主要组成部分都很类似,也都包含上面所说的这几个主要组成部分。图3展示了英特尔Stratix10FPGA芯片的Zui小逻辑单元ALM的结构示意图。

图片

图3 Stratix10 FPGA的ALM逻辑结构示意图

FPGA的第二个主要特点是可编程性。很多人有这样的疑问:CPU、GPU,以及很多专用芯片都可以进行编程,那么FPGA的可编程性又有什么独特之处?事实上,FPGA的可编程性,指的是可以对逻辑阵列进行编程,从而改变FPGA实现的逻辑功能,这与其他芯片的可编程性有着本质区别。相比之下,用户对专用芯片的编程大都是通过改变芯片上各种寄存器的配置实现的,而这并不会改变芯片的主要功能,打个简单的比方,这种编程并不能使一个网络交换芯片变成视频处理芯片。

正是由于FPGA可以对逻辑门阵列进行重复编程,使得FPGA可以在逻辑层面改变自身实现的硬件结构,从而有着极高的灵活性。从理论上讲,如果FPGA的可编程资源足够多,一个FPGA就可以实现任何数字电路的逻辑功能。FPGA的一个重要应用领域,就是用来构建专用芯片ASIC流片前的硬件仿真或原型验证平台,即emulation或prototyping,而这正是利用了FPGA的可编程性。在这个过程中,芯片设计者使用FPGA实现目标功能,与真实的软硬件系统进行交互和仿真,并且可以不断地进行迭代和修改。待设计满足要求后,再进行流片生产。这极大降低了因设计疏漏导致流片失败的风险,还能在芯片尚未流片之前就启动固件、驱动、应用程序的开发,进一步缩短了项目开发周期。

FPGA的第三个主要特点,就是它的“现场”可编程性。“现场”这个词指的是,FPGA可以在使用时进行编程,而无须将芯片拆下并返回生产厂家完成编程。这个特点在现在看起来有些理所当然,毕竟目前的大部分芯片都有着现场编程能力,而且这也并非FPGA专有的特点。

事实上,现场可编程这个特点的存在有着背后的历史原因。在20世纪80年代以前,芯片的固件大都是保存在掩膜ROM(mask ROM)或者基于熔丝的PROM里,只能读取而不能写入,更不用说多次写入了。后来出现了能擦写的PROM(EPROM),但擦写过程非常复杂,需要使用特殊设备,对芯片进行长时间的强紫外线照射,这个过程并不能在芯片的使用现场完成。

在20世纪80年代之后,人们发明了EEPROM和闪存(Flash memory),这才使得现场可编程成为可能。对于现代FPGA而言,人们可以每隔几秒就改变一次FPGA芯片上运行的硬件设计,这也使得FPGA有着极大的灵活性。

由此我们知道了,FPGA作为一种包含大量逻辑门阵列的芯片,可以在使用现场通过编程改变自身的硬件逻辑,并在理论上可以实现任何数字电路的功能。人们对于FPGA有着很多形象的比喻,有人把它比成乐高积木,通过很多基本的积木单元,可以组成汽车、高楼和飞船;也有人把它比成活字印刷,使用一个个字膜,就可以排列组合成任意的诗词歌赋。这些比喻都形象地突出了FPGA的Zui大特点:灵活性和通用性。

随着半导体和芯片技术飞速发展至今,FPGA早已不再是面世之初的简单的可编程门阵列。除了可编程逻辑单元之外,FPGA芯片逐渐变得越来越复杂,并结合Zui新的半导体制造技术,衍生出了很多不同的架构和设计。


联系方式

  • 电  话:18126392341
  • 联系人:梁涛
  • 手  机:15267534595
  • 微  信:15267534595