FPGA,现场可编程门阵列(Field Programmable Logic Device),可编程逻辑器件的一种。它可以由用户来进行编程和配置,进而用来解决各种不同的逻辑设计问题。
可编程器件发展的初期主要是用来解决存储问题,随着后来的发展转向各种逻辑应用。在结构、工艺、集成度、功耗、速度等方面有了很大的提高和改进。
可编程逻辑器件的发展阶段
我们一起来了解一下可编程逻辑器件的发展历史。
可编程逻辑器件的发展主要经历以下几个阶段:
早期的可编程逻辑器件,早期的PLD主要是用来解决各种存储问题,如可编程只读存储器(ROM)、可编程只读存储器(PROM)、紫外线可擦除存储器(EPROM)、电可擦除存储器(EEPROM),由于结构限制,它们只能完成简单的数字逻辑功能。
结构上稍微复杂的可编程逻辑器件,80年代初期,AMD公司和Lattice公司先后推出了各自的可编程逻辑器件,主要为可编程逻辑器件(PAL)、通用阵列逻辑(GAL)、可编程逻辑器件(PLA)等等,这些PLD在设计上有很强的灵活性,可以实现速度性能较好的逻辑功能,但它们结构简单,只能实现小规模的电路设计。
复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)和现场可编程门阵列(Field Programmable Logic Device),这类器件的体系结构和逻辑单元灵活、集成度高、适用范围广。这类器件兼容了PLD和通用门阵列的优点,具备实现大规模电路设计的能力,编程也灵活,开发周期短、设计成本低、开发工具成熟、质量可靠,因此被大规模使用。
FPGA芯片内部结构
目前大部分的FPGA仍是基于查找表(LUT)技术,但是随着版本的升级,代与代之间的基本功能差别很大,在现在的FPGA内部,整合了很多常用功能(如RAM、时钟管理 和DSP)的硬核(ASIC型)功能模块。
图一 FPGA芯片的内部结构
图一给出一个通用的内部结构模型,实际上不同系列的FPGA,内部的结构都不尽相同。但是从上图我们可以看出,FPGA芯片的主要部分由6大模块,分别为:可编程输入输出单元(IOB)、基本可编程逻辑单元(CLB)、数字时钟管理(DCM)、嵌入块式RAM(BRAM)、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。
目前FPGA具备的功能
经过这么多年的发展,目前的FPGA已经具备了以下的功能:
支持模数转换和数模转换;
采用片内锁相环,支持高速时钟,减少信号的畸变,时钟可以复用;
有丰富的布线资源;
在片内有分布RAM和块RAM;
包含独立的快速逻辑进位模块,有专门的乘法器;
逻辑功能块的局部布线和相互间的通用布线,可以精确的预测网线的延时;
I/O模块有快速的I/O驱动、寄存的输入输出、三态使能控制等控制特性。
FPGA的发展方向
随着微电子技术的快速发展,速度更快、集成度更高的FPGA在不断出现,结构和工艺的提高,使FPGA的资源越来越丰富,可实现的功能越来越强大。
所以FPGA有如下的发展趋势:
向更高密度、更大容量迈进;
朝着低成本、低电压、低功耗、微封装方向发展;
IP资源复用得到普遍的认同并成为主要的设计方式;
MCU、DSP、MPU等嵌入式处理器IP成为FPGA应用的核心。
FPGA在神经网络方面的应用
近两年,随着AI、神经网络技术等产业的迅猛发展,对计算力的要求越来越高,因为FPGA具有资源丰富、配置灵活以及DSP、MCU等IP集成到一起的巨大优势,所以基于FPGA的NN加速器的研究和产业化,十分火热。比如微软的Bing搜素业务等就使用了基于FPGA的NN加速器。
但是FPGA价格较贵,所带来成本上的压力,在一定上面,可能会抑制它的更大规模的使用。
小结
FPGA作为可以让用户来进行编程和配置,进而用来解决各种不同的逻辑设计问题的器件,在各种新型技术兴起的前期(之前的大数据、如今的神经网络),都表现出了非常好的活力,它降低了新兴技术研究的成本,加快了新兴技术研究的速度,在整个技术演进道路上,扮演着举足轻重的角色。
关于FPGA相关内容,我写了《浅谈FPGA技术》、《浅谈FPGA芯片结构》等多篇文章,详细介绍了FPGA的工作模式、硬件架构等内容,如果有兴趣,欢迎加关注“单眼皮老王”,阅读相关文章,更欢迎和我讨论。
希望回答会对你有所帮助,感谢。