与ASIC的概念截然相反,FPGA的概念是在短时间能以低成本让用户得到想要的逻辑,这一概念得到了用户的支持。然而,在FPGA发布初期,并没有获得业界人士的认同和支持。初期的FPGA实际集成度仅为门阵列的1/5,其原因是当时的设计工具无法充分利用器件特性进行设计。 如今,通过先进的半导体工艺技术,65/90nm这类的芯片提高了集成度,各种设计工具得到了发展,可以高集成度,高效率地进行设计。不过,我认为FPGA能够普及的最大原因是它的价格。FPGA器件本身的价格已经降到了所有人都能接受的价格范围内。
FPGA和ASIC的对比

关于FPGA的编程技术

2000年初,SRAM是当时主流的FPGA编程技术,除此之外还有各种其他类型的FPGA编程技
在20世纪80年代后期,出现了一种具有与SRAM型FPGA不同概念的技术,被称为“熔丝技术”(反熔丝技术)。在熔丝技术中,电路的连接点是熔丝,通过烧掉熔丝形成回路。反熔丝元件是一种只能编程一次的存储元件,一旦编程,它就会以低阻抗导通。据说它比SRAM器件更紧凑,可以实现高集成度、低阻抗的高速运行。熔丝技术(反熔丝技术)的弊端是不能重写,不能反复使用。此外,难以降低的价格也是其缺点。
与此同时,又一个新的器件“CPLD”(Complex PLD)发布了。这是一个通过将多个小型 PLD 集成到一个 LSI 中形成的可以实现任意大规模逻辑电路的PLD。与小规模PLD一样,非易失性和可重写的易用性是CPLD的最大特点。但是,CPLD在设计自由度方面不如FPGA高。
在1990年代,出现了使用Flash memory的“FLASH型FPGA”。Flash型FPGA同时具备了SRAM技术和反熔丝技术的两大有点,即可重写和非易失性。但是,由于其构造和制造工序复杂,难以提高集成度和降低价格。因此,Flash基本没有被用在大规模、高速运行的FPGA中。
FPGA和PLD的架构
基于SRAM的FPGA和CPLD是目前的主流工艺,高速和大规模的应用使用基于SRAM的FPGA,对不需要高速和规模的应用容易上手的CPLD是最合适的。无论哪种,都有制造简单和价格便宜的优点。
FPGA和PLD的放置

FPGA的工作原理

那么,从现在开始我们来具体说明FPGA的工作原理。第一个话题是关于构成逻辑电路的基础—程序。FPGA的程序到底在哪儿呢?对于SRAM型,程序被记录在 FPGA 的闪存或 EEPROM 等外部储存器中。
当SRAM型FPGA上电时,程序文件从外部储存中载入。这里被加载的程序文件称为“Bit Stream Data(比特流数据)”。 这些信息被加载到配置存储器中,该存储器由FPGA中的SRAM型存储器单元组成。被加载的比特流数据的各个bit,成为了在FPGA上实现用户所需要的回路的信息源,它把FPGA设备上的资源进行客户化,从而实现要求的回路。这与PC等CPU的启动过程非常相似。它不依赖于硬件,而是通过连接在外部储存器内的配置数据实现,有很高的普遍性和灵活性。
第二个话题是关于FPGA内部结构的说明。FPGA可分为6大部分(如图3),分别为:
I/O:可编程输入/输出单元(I/O单元)内部布线:丰富的布线资源逻辑单元:可配置逻辑块(CLB)时钟网络:数字时钟管理模块(DCM)JTAG边界扫描电路块RAM・乘法器:嵌入式块RAM
图3
首先,我们针对FPGA的特征“逻辑单元”进行说明(图4)。 FPGA逻辑单元通常由两个4或6输入的“表”(Look Up Table:LUT)和“触发器”(Flip Flop)组成。
图4
一旦SRAM的地址部分有信号输入,就会在LUT中查找对应地址的数据并输出。
图4展示了AND的使用场景。地址全为1的地方,对应写入high(1)的数据,否则全写入low(0)。因此,当输入全部是“1”时,输出始终是“1”。然后触发器再与系统时间同步,输出数据。逻辑单元分布在整个FPGA上,通过内部布线的连接,实现用户期望的功能。
“I/O”主要位于FPGA与外界电路接口的位置,与外部的信号进行信号交换。如今,有超过20种电压等级和规格的I/O可供开发者灵活使用,能自由地实现电路板上的布线。
“内部布线”是通过逻辑单元和I/O单元等的连接,来实现用户的功能。
时钟网络是用于配置FPGA内部时钟的资源。可提供整个FPGA上的全局时钟和本地使用的局部时钟,能在不同的位置实现最佳的电路动作。特别是对于同步电路的设计是必不可少的。
“JTAG边界扫描电路”是为了测试而提供的功能。
“块RAM・乘法器“是用于实现逻辑的资源。如图3所示,FPGA通过在电路内提供均分的块RAM,用户可以不受FPGA内电路的位置限制,进行运算处理和数据保持。
另外,逻辑单元内的查询表不仅可以用作逻辑的实现,还可以当做小型存储器使用(4输入的LUT是16位存储器)。因此,在块RAM之外,可以增加局部存储。在这种情况下,将LUT被称为“分布式存储”。
将以上6种资源组合在一个硅片上,几乎可以在FPGA内不受限制的实现用户所需要的大部分功能。

FPGA的设计流程

这一部分,我们来说明一下FPGA的设计流程。
首先是设计环境。一般设计环境由供应商和第三方提供。主要包括逻辑生成和布线工具两种。
目前,FPGA的逻辑设计绝大多数采用HDL(Hardware Description Language)或Verilog HDL等硬件描述语言设计。 所以在早期,硬件和软件处理在文档设计阶段就是分开的,硬件用HDL,软件用C语言等。
然而,随着处理器和DSP等功能在FPGA内实现成为可能,能够与软件相兼容的硬件设计变得十分必要。在使用统一的语言(比如C语言)进行软硬件的设计之后,合适的任务分解工具(Co Design)变得越发重要,因此软硬件供应商开始协作起来,提供系统级开发环境工具。
图5
图5为FPGA设计流程。 首先,用HDL之类的语言开始做设计输入,然后使用逻辑综合工具执行设计综合,这个阶段要使用仿真工具进行设计验证
设计综合完成后,将进行设计实施。就是在FPGA内嵌入逻辑电路的具体操作。包括各种功能在逻辑单元上如何实现最有效率(最优)、在FPGA内如何进行配置和布线等,这个阶段决定了FPGA内部的具体配置。
对于高速作动的电路,在这个节点要进行静态时序分析和时序仿真,验证其是否在预期的时间内作动。特别是当作动频率接近极限时,连接逻辑单元之间的布线会导致延迟,因此检查确认是必须的。如果事先知道影响时间的关键点,则可以先在工具上施加约束。
一旦验证了设计在工具上能正常按照要求作动,就可以生成一个编程所需的比特流文件,下载到 FPGA中。也就是使用JTAG之类的下载方式,将比特流文件写入系统的外部储存设备中。
最后是实物测试,由于实际系统是在FPGA和外围电路以及设备交互运行的,因此实物验证和回路验证都是必不可少的。

FPGA产业的最新趋势

自从FPGA问世以来,除了逻辑系统外,其应用领域也在扩大已经愈加广泛。因为伴随半导体工艺技术的进步,FPGA器件的设计技术取得了飞跃发展及突破。很多以前的外围器件逐渐在FPGA上集成进来。
FPGA有“低成本“”周期短“”可重写“的优势,使得其已经被许多领域和用户所使用。包括机器学习,高性能计算,数据分析等,FPGA在更多样化的应用领域中崭露头角。这与FPGA上嵌入了越来越多可用的on-chip存储器密不可分,这些都是FPGA制造商和潜在终端用户所期待的。
FPGA是可以容许挑战的设备,如果你还没有尝试过 FPGA,不妨试一试。 而ASIC是不容许失败的,因为其NRE成本很高。即使ASIC在NRE方面妥协了, 也必须要制作可靠的电路。 但FPGA不同,其NRE为0,方便重新设计,有助于工程师的成长。
或许,这是一个属于FPGA的黄金时代!
人生只有一次,FPGA却可以重写(￣Д ￣)
- END -