FPGA基础知识:现场基础知识

概述

现场可编程门阵列(FPGA)是可重新配置以满足设计师需求的集成电路。FPGA芯片包含可编程逻辑块数组,其灵活性、硬件定时速度和可靠性以及并行性推动了芯片的广泛应用。

内容

与处理器不同的是,FPGA属于真正的并行结构,因此不同的处理操作无需竞争相同的资源。每个独立的处理任务都配有专用的芯片部分,在不受其它逻辑块的影响下自主运作。因此,加入更多处理任务时,应用的其它性能也不会受到影响。

fpga应用逻辑

图1: 与基于处理器的系统相比,FPGA的优点之一是应用逻辑在硬件电路中实现,而不是在操作系统、驱动程序和应用软件之中执行。

定义FPGA组成部分

每个FPGA芯片由有限数量的预定义资源和可编程互连组成,以实现可重配置的数字电路,并通过I/O块使电路访问外部世界。

FPGA芯片的组成部分

图2: FPGA的不同部分

FPGA资源规范通常包括可配置逻辑块的数量、乘法器等固定功能逻辑块的数量,以及嵌入式块RAM等存储器资源的大小。在众多FPGA规范中,这些通常是在为特定应用选择和比较FPGA时最重要的规范。

可配置逻辑块(CLB)是FPGA的基本逻辑单元。CLB有时也称为逻辑片或逻辑单元,由两个基本部分组成:触发器和查找表(LUT)。不同的FPGA系列将触发器和LUT封装在一起的方式不同,因此理解触发器和LUT非常重要。

触发器

触发器是用于在FPGA电路的时钟周期之间同步逻辑和保存逻辑状态的二进制移位寄存器。在每个时钟边沿,触发器在其输入上锁存1或0(TRUE或FALSE)值,并保持该值不变直到下一个时钟边沿。

触发器符号

图3. 触发器符号

触发器是用于在FPGA电路的时钟周期之间同步逻辑和保存逻辑状态的二进制移位寄存器。在每个时钟边沿,触发器在其输入上锁存1或0(TRUE或FALSE)值,并保持该值不变直到下一个时钟边沿。

查找(LUT)

4输入LUT

图4: 4输入LUT

CLB中的大多数逻辑使用极少量的RAM以LUT的形式实现。很容易认为FPGA中的系统门数量是指特定芯片中的NAND门和NOR门的数量。但实际上,所有组合逻辑(AND、OR、NAND、XOR等)都在LUT内存中以真值表的形式实现。真值表为每个输入组合存储预定义的输出列表。

以下内容是数字逻辑课程的快速复习。

例如,布尔与运算如图5所示:

LabVIEW布尔与运算

图5: NI LabVIEW布尔与运算

与运算的两个输入对应的真值表见表1。

输入1

输入2输出

0

0

0

0

1

0

1

0

0

1

1

1

表1: 布尔与运算的真值表

乘法器DSP逻辑片

LabVIEW乘法函数

图6: NI LabVIEW乘法函数

将两个数字相乘的任务看似简单,但在数字电路中实现起来却极为消耗资源且复杂。为了提供参考,图6显示了使用组合逻辑实现4位乘4位乘法器的一种方法的原理图。

图7: 4位×4位乘法器的示意图

现在想象一下,将两个32位数字相乘,一个乘法器将产生2000多个运算。因此,FPGA具有预建的乘法器电路,可节省数学和信号处理应用中的LUT和触发器使用量。

许多信号处理算法需要对正在相乘的数值进行累加,因此,高性能FPGA(如Xilinx Virtex-5 FPGA)具有预构建的乘法器累加电路。这些预构建处理块(也称为DSP48逻辑片)集成了25位乘18位乘法器和加法器电路。

RAM

存储器资源是选择FPGA时需要考虑的另一个关键规范。嵌入整个FPGA芯片的用户定义RAM可用于存储数据集或在并行任务间传递值。根据FPGA系列,板载RAM可配置为16或36 kb。用户仍可选择使用触发器将数据集实现为数组,但大型数组很快就会占用大量的FPGA逻辑资源。100个元素的32位数字数组可占用Virtex-II 1000 FPGA中30%以上的触发器,或不到1%的嵌入式块RAM。数字信号处理算法通常需要跟踪整个数据块或复杂方程的系数,如果没有板载内存,许多处理功能将无法适配FPGA芯片的可配置逻辑。

FPGA固有的并行执行允许独立的硬件逻辑由不同的时钟驱动。在不同速率运行的逻辑间传递数据可能较为复杂,板载内存通常用于使用先进先出(FIFO)内存缓冲区平滑传输。

系统设计FPGA

虽然FPGA具有许多优点(如速度、可靠性和灵活性),但使用FPGA时也需要权衡利弊。FPGA没有微处理器架构和操作系统那样的驱动程序生态系统和代码/IP基础。此外,微处理器和操作系统为文件结构和外设通信奠定了基础,这些外设通常用于记录数据至磁盘等重要任务。

因此,在过去十年中,出现了一种混合架构(有时称为异构架构),其中微处理器与FPGA配对,然后连接至I/O。现代FPGA通常将逻辑门与处理器组合为单个芯片,称为片上系统(SoC),以提高计算性能。该方法利用了这两种终端的优势。

NI在其支持FPGA的设备中实现了这一强大的微处理器加FPGA架构。这些设备具有多种不同的外形规格,从坚固型到高性能系统,全部基于同一架构。

NI FPGA支持的硬件包括以下技术:

FPGA设计工具

既然您了解FPGA芯片的构建模块,您可能会问“如何配置所有这些数百万个组件以构建所需执行的逻辑?”

答案是使用开发工具在软件中定义数字计算任务,然后将其编译为配置文件或比特流,其中包含组件应如何连线的信息。过去FPGA技术的挑战是,底层FPGA设计工具只能由对数字硬件设计有深入理解的工程师使用。然而,高级综合(HLS)设计工具(如LabVIEW)的出现改变了FPGA编程的规则,将图形化程序框图转换为数字硬件电路的新技术应运而生。

传统FPGA设计工具

在FPGA发展的最初20年中,硬件描述语言(HDL)(如VHDL和Verilog)已发展成为设计在FPGA芯片上运行的算法的主要语言。这些底层语言集成了其他文本语言提供的一些优点,并认识到在FPGA上构建电路。生成的混合语法要求信号从外部I/O端口映射或连接至内部信号,内部信号最终连接至包含算法的函数。这些函数按顺序执行,并可引用FPGA中的其他函数。但是,FPGA上任务执行的真正并行性质很难在顺序的逐行流程中可视化。HDL反映了其他文本语言的一些属性,但由于它们基于数据流模型,I/O通过信号连接至一系列功能块,因此它们有实质性区别。

然后,为了验证FPGA程序员创建的逻辑,通常的做法是使用HDL编写测试台,通过设置输入有效并验证输出来包装和测试FPGA设计。测试台和FPGA代码在仿真环境中运行,该环境对FPGA芯片的硬件定时行为建模,并向设计人员显示所有输入和输出信号以用于测试验证。创建HDL测试台和执行仿真的过程通常比创建原始FPGA HDL设计本身所需的时间更长。

使用HDL创建FPGA设计并验证后,需将其输入编译工具,该工具将基于文本的逻辑通过多个复杂步骤将HDL综合为配置文件或比特流,其中包含组件的连线方式。作为该多步手动过程的一部分,通常需要指定信号名称与所用FPGA芯片引脚的映射。

图8: VHDL中的简单计数器FPGA设计

最终,该设计流程的挑战在于传统HDL编程所需的专业知识尚未普及,因此绝大多数工程师和科学家无法获得FPGA技术。

高级综合设计工具

图形化HLS设计工具(如LabVIEW)的出现消除了传统HDL设计过程中的一些主要障碍。LabVIEW编程环境非常适用于FPGA编程,因为它清晰地表示并行性和数据流,因此无论是对传统FPGA设计流程有经验还是缺乏经验的用户都可以利用FPGA技术。此外,为了不丢失之前的知识产权(IP),可使用LabVIEW将现有的VHDL集成到LabVIEW FPGA设计中。由于LabVIEW FPGA与硬件高度集成,因此无需重写VHDL中的代码以满足定时或资源限制。

图9: 左侧为LabVIEW-用于FPGA的高级设计工具。为创建和扩展VHDL设计时常见的底层复杂度提供了抽象。

为了仿真和验证FPGA逻辑的行为,LabVIEW直接在开发环境中提供相关功能。无需了解底层HDL语言,即可创建测试台来测试设计逻辑。此外,LabVIEW环境的灵活性可帮助高级用户通过导出至Xilinx ISim等周期精确仿真器来模拟其设计的定时和逻辑。

LabVIEW FPGA编译工具可使编译过程自动化,因此单击按钮即可开始编译过程,并在编译阶段完成后接收报告和错误(如有)。如FPGA设计导致定时错误,LabVIEW将以图形方式高亮显示这些关键路径,以加快调试过程。

结语

随着LabVIEW等更高级别的工具使FPGA更易于使用,FPGA技术的采用也不断增加。但是,查看FPGA内部并了解程序框图编译为硅片执行时实际发生的情况仍然非常重要。比较和选择基于触发器、LUT、乘法器和块RAM的硬件终端是为您的应用选择合适FPGA芯片的最佳方法。了解资源使用情况在开发过程中非常有帮助,尤其是在优化尺寸和速度时。本文并非包含全部FPGA基本构件的完整列表。关于FPGA和数字硬件设计的更多信息,见下列资源。