初识FPGA

183 阅读14分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

写在前面

  • 本篇简要介绍一下FPGA,学习FPGA首先要了解认识它。知己知彼,才能更好的进行沟通交流。
  • 本篇是本专栏第一个短篇,后续会持续根据一个个小工程来创作高质量内容,大家共同进步。
  • 本专栏不在对软件安装和软件配置进行介绍,关于软件安装各大平台都有详尽的教程,笔者在这里就不介绍了。
  • 笔者才疏学浅,本篇错误及不妥之处在所难免,欢迎读者批评指正,大家共同进步。

你总得知道点什么吧,要不我们怎么交流呢?

什么是FPGA?

FPGA,英文全称Field-Programmable Gate Array,翻译成中文即现场可编程门阵列。

FPGA是一种以数字电路为主的集成芯片,属于可编程器件中的一种。FPGA作为ASIC(专用集成电路)领域中的一种半定制电路而出现,既解决了定制电路缺乏灵活性的不足,又克服了原有可编程器件门电路数容量过小的缺点,因此在业界得到了广泛的应用。

FPGA 的类型从内部实现机理来讲,可以分为几类,分别是:基于 SRAM 技术、基于 反熔丝技术、基于 EEPROM/FLASH 技术。就电路结构来讲,FPGA 可编程是指三个方面 的可编程:可编程逻辑块、可编程 I/O、可编程布线资源。可编程逻辑块是 FPGA 可编程 的核心,我们上面提到的三种技术也是针对可编程逻辑块的技术。

FPGA结构图

image.png

发展简史

在还没有发明出可编程逻辑器件(PLD)之前,设计师们只能使用一些专用的小芯片来搭建系统,这些小芯片被称作离散逻辑芯片。每一种离散逻辑芯片实现的功能也就相当于几个逻辑门,例如几个逻辑与门等。因此,为了实现略微复杂一点的逻辑功能,设计者们可能需要同时使用几十个或更多这样的离散逻辑芯片来完成。这会使得电路板的布局,布线难度极大地增加,并且会极大地影响系统的性能。

为了改变这种状况,20世纪70年代早期出现了第一类可编程逻辑器件PLA,即可编程逻辑阵列。PLA中包含了一些固定数量的与门,非门,它们分别组成了“与平面”和“或平面”,以及仅可编程一次的连接矩阵(因为编程基于的是熔丝工艺),即“与连接矩阵”和“或连接矩阵”,因此可以实现一些功能相对复杂些的与、或多项表达式的逻辑。

20220502220841.png

在PLA的基础上,又发展出了一种叫GAL的器件,即通用阵列逻辑。它相比于PAL有两点改进:

  • 采用了电可擦除的CMOS工艺,极大增强了器件的可重配置性和灵活性;
  • 采用了可编程的输出逻辑宏单元OLMC,通过编程OLMC来将GAL的输出设置成为不同的状态,从而达到了仅用一个型号的GAL就可以实现所有的输出电路工作模式,从而增强了器件的通用性。

随着编程工艺的更新,在PLA的基础上又发展出了FPLA,即现场可编程逻辑阵列。它相比于PLA的主要改进就是可以多次编程,增加了芯片的使用灵活性。

早期的可编程逻辑器件主要由上述四种类型的芯片组成,即PLA、PAL、GAL和FPLA,它们的一个共同特点是可以实现速度特性较好的逻辑功能,但由于其过于简单的结构也制约它们只能实现规模较小的数字电路。随着科技的发展和技术的进步,人们对芯片的集成度要求越来越高。这些早期的PLD产品日渐不能满足人们的需求,于是新的可编程逻辑器件诞生了,它的名字叫CPLD,即复杂可编程逻辑器件。光从名字我们就可以看出它比之前的PLD器件都要强大不少。

CPLD可以看成是PLA器件解构的延续。在CPLD芯片的四周,分布着一系列称为宏单元的逻辑块,而芯片的中间部分则分布着一个连接矩阵,用于在各个逻辑块之间建立连接。每一个逻辑块的内部结构跟PLA非常类似,所以一个CPLD器件也可以被看成集成了若干个PLA和一个可编程连接矩阵的芯片。

CPLD的出现将数字电路的设计带到了一个新的高度,但是随着时间的推移,这种结构还是不能满足日益增大的电路规模需求,于是本专栏的重点FPGA诞生了。

FPGA和CPLD并称为高密度可编程逻辑器件,但是它们有着本质的不同。FPGA芯片的内部架构相对于以往的可编程逻辑器件有着本质的变革,它并没有沿用类似PLA的结构,而是采用了逻辑单元阵列LCA这样一个概念,一改以往PLD器件大量使用与门、非门的思路,而是大量使用查找表和寄存器等元素。目前,CPLD从集成度、规模、功耗、编程灵活性等方面都远远落后于FPGA,不过它还是有着它自身的一些特定优势,在今后的一段时间内还会与FPGA并存,原因如下:

  • CPLD更适合于触发器有限而乘积项丰富的结构;
  • 由于布线结构不同,CPLD时序延迟是均匀的和可预测的,而FPGA的时序延迟则具有不可预测性,所以CPLD的速度会比FPGA更快;
  • CPLD使用起来较方便,因为配置内容掉电不丢失,一般不需要外加配置芯片,所以CPLD保密性好,而FPGA的配置数据流容易被黑客截获,所以保密性差。

FPGA与CPLD性能比较

器件种类特性FPGACPLD
内部结构查找表(Look Up Table)乘积项(Product Term)
程序存储内部SRAM结构,外挂EEPROM或Flash存储程序内部EEPROM或Flash
资源种类触发器资源丰富组合逻辑资源丰富
集成度
使用场景完成比较复杂的算法完成控制逻辑
速度
其他资源RAM、PLL、DSP等------
保密性一般不能保密(可以使用加密核)可加密

应用方向

FPGA的应用方向非常广泛,按照应用领域来看,FPGA在通信、数据处理、网络、仪器、工业控制、医学、生物、军事和航空航天等众多领域都已经得到了广泛的应用。FPGA已经从最早的只应用于辅助功能以及胶合逻辑(连接各种功能块以及集成电路的逻辑电路)的简单器件,发展到现今众多产品的核心器件。并且随着功耗和成本的进一步降低,FPGA还将进入更多的应用领域。

20220502220354.png

当然了,以上所有这些领域,并不是只有FPGA可以做,那么为什么FPGA会在这么多领域有这么大的用武之地呢?这要从基于FPGA的产品特点来看。下面按照产品特点介绍FPGA几大应用方向。

  • ASIC原型验证

image.png

ASIC即专用集成电路,它是应特定用户需求和特定电子系统的需要而设计、制造的集成电路。ASIC的特点是面向特定用户的需求,它在批量生产时与通用集成电路相比具有体积更小、功耗更低、可靠性提高、性能提高、保密性提高、成本降低等优点。

现代的ASIC产品常包括完整的处理器,类似ROM、RAM、EEPROM或Flash的存储单元以及其它模块,因此这样的ASIC产品也常被称为SOC即片上系统。

随着IC设计的密度越来越高、产品的需求越来越苛刻,ASIC芯片的设计也已经变得越来越复杂,其中软件设计或软件协助设计的成分越来越多。而把软件设计转换成为ASIC芯片的过程叫做“流片”,在集成电路设计领域,“流片”指的是“试生产”,就是说设计完电路以后,先生产几片几十片,供测试用。如果测试通过,就照着这个样子开始大规模生产了;如果测试失败,可不是简单的会头修改软件,等待再次流片这么简单。要知道,“流片”的成本是十分高昂的,如果连续两次以上的“流片”都失败,那么公司很可能就会取消该ASIC芯片的制造计划,因为继续下去投入的人力、物力和资金过多,即使最后“流片”成功也挽回不了损失。因此在“流片”之前,对软件设计的正确性进行充分的验证是十分且非常必要的。

而研究表明,60%以上“流片”失败的原因是由于软件设计中存在逻辑或功能性的错误,剩下的才是时序或功率、功耗问题。由此可见,功能验证已经成为ASIC开发周期中最最关键的环节。可是,随着ASIC密度的提高和设计复杂性的增加,对“流片”一次性成功的需求越来越迫切,而此时设计中出现错误的可能性也会越来越高,所以设计师无疑需要一种能够在短时间内发现复杂芯片设计中错误的高效验证方法。

以典型的移动电话芯片组设计来说:RTL级软件模拟的方法光导入设计就需要约30天时间;采用较高层模型的软硬件协同仿真方法可以将导入设计缩短为10天;C代码模型可以提供更短的运行时间,但差不多也需要24小时。由于ASIC设计师需要一种接近于ASIC运行速度的验证方法,所以上述几种方法都无法投入实际应用。并且这种验证方法不仅能全速运行相关功能仿真,并且还能方便地集成外部系统组件或接口。于是人们想到了FPGA,事实上FPGA针对上述电话芯片设计组设计来说,只需要30秒钟的时间就可以完成原型验证。

从30天到30秒,FPGA的性能优势是毋庸置疑的,因此,目前90%以上的ASIC在“流片”之前都部分甚至全部地利用FPGA进行原型验证。因此,为ASIC提供原型验证平台是FPGA应用的一个重要领域。

  • SoPC

image.png

SoPC即可编程片上系统。SoPC是一种特殊的SoC,因为它也是由单个芯片完成整个系统的主要逻辑功能。所不同的是SoPC所基于的单个芯片主要是可编程的FPGA芯片,所以它具有灵活的设计方式:可裁减、可扩充、可升级,并具备软硬件在系统可编程的功能。

目前Xilinx公司的FPGA芯片支持嵌入Power PC系列CPU,Altera公司也推出了自己的CPU软核nios系列,并且随着FPGA资源的爆炸式增长,只要肯尝试,我们可以将越来越多的处理器用FPGA内部的资源来实现。在FPGA芯片上嵌入软核,再配合上适当FPGA的IP核以及必要的外围存储芯片和接口芯片,这样的片上系统兼顾软件、硬件的特点,能够让开发者更加方便、灵活的实现系统需求的各种功能。因此以FPGA芯片为核心来搭建一套系统已经成为当前电路设计的一个重要方向。

  • 小规模产品

在介绍ASIC的FPGA原型验证的重要性时,介绍了“流片”的概念,并且了解到“流片”的成本是十分高昂的,因此,如果某个功能模块不是能够大量销售的,或者不存在潜在大规模用户,那么就不会采用ASIC的形式来实现它,因为小规模的生产无法拉低ASIC芯片生产时的边际成本。例如,PC机的CPU和手机中的相关通信芯片都是ASIC的,因为它们的销售市场相当大,可以把ASIC芯片的边际成本拉到很低。若没有大批量的后续产能作为支撑,FPGA芯片将成为这类功能模块的一个很好的承载平台。

除此之外,有些公司由于规模较小,财力有限,也不会采用ASIC“流片”的冒险形式来实现自己的产品。虽然目前市面上的微处理器和DSP芯片的发展都比较成熟,但FPGA芯片和它们相比有着得天独厚的并行处理优势,再加上可以基于FPGA构建SOPC,因此这类公司也会对FPGA青睐有加。

还有的公司和机构虽然彩礼充沛,但是由于其行业的特点,导致产品的数量相对较少。例如航天领域,同步卫星轨道有限,不可能任由你发射太空垃圾,因此这类行业使用FPGA也比较多。

最后还有一些公司,虽然它们的产品规模可能不小,但由于它们出售的产品本身就价格高昂,早就赚的盆满钵满,因此也就不在乎并且也懒得用FPGA替代ASIC。

  • 要求功能灵活可配置的产品

如果你生产的产品的应用领域不确定,也就是说他不是一个专用的设备,例如测试测量行业的某些测试仪器或测试板卡,你不知道客户会拿它去测试什么信号。而这个行业不可能针对每个客户的测试需求来生产一个专用的测试设备,但如果你的测试设备不能满足客户的要求又卖不出去,这时FPGA就派上了用场。这些厂商,一般会使用FPGA来搭建一个通用的测试平台,然后再根据客户的要求去适当地对系统进行少量的外围器件重配置和内部FPGA的功能修改,快速地满足客户的需求。

  • 更新换代快的产品

数字产品的更新换代速度是异常快的,2年前一块2000元的伪高端显卡,即是在通货膨胀的环境下,游戏性能也还比不上今天一块950元的中低端显卡。当然,显卡中GPU芯片的技术非常成熟,并且目前已经基本被NVIDIA和ATI两家公司垄断,所以显卡没有使用FPGA,这里只是通过显卡举个例子。但是类似这样的行业,有时候为了抢得先机,抢占客户,就必须使用FPGA。

  • 科研领域

在科研领域中使用FPGA的很多,例如众多高校和科研院所,此时科研工作者们可以利用FPGA开发速度快,有很多现成的IP核可供使用的特点来快速搭建实验系统。并且可以利用FPGA并行的特点来验证某些理论、算法的可行性或者效率。尤其是科研领域最重要的就是创新性、与众不同、灵感闪现,他们要研究的主要都是现在没有的东西或者现在不成熟的东西,所以定制的电路无法为这些充满活力的大脑提供“胡作非为”的平台,此时FPGA就能成为他们的好帮手!