亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial Internet of Things >> 嵌入式

FPGA 嵌入式设计:硬件资源

编者注:随着用于智能产品设计的高级算法不断涌现,开发人员经常发现自己难以实现能够满足这些算法相关处理需求的嵌入式系统。 FPGA 可以提供所需的性能,但长期以来,使用 FPGA 进行设计一直被认为仅限于 FPGA 编程专家的权限。然而,如今功能更强大的 FPGA 和更有效的开发环境的出现使得 FPGA 开发变得更加容易。在此摘录中,即《架构高性能嵌入式系统》一书中的第 4 章,作者全面回顾了 FPGA 器件、实现语言和 FPGA 开发过程,并详细介绍了如何开始在您自己的环境中实现 FPGA。设计。以下系列文章中提供了完整的摘录:
1:硬件资源(本文)
2:实现语言
3:开发过程
4:构建项目
5:实现

改编自《架构高性能嵌入式系统》,作者:Jim Ledin。


开发您的第一个 FPGA 程序

本章首先讨论在实时嵌入式系统中有效使用 FPGA 设备,然后继续描述标准 FPGA 中包含的功能元素。 FPGA 设计语言的范围,包括硬件 描述语言 (HDLs )、框图方法和流行的软件编程语言,包括 C 和 C++,被介绍。本章继续概述 FPGA 开发过程,并以 FPGA 开发周期的完整示例结束,从系统要求声明开始,到在低成本 FPGA 开发板上实现的功能系统结束。

完成本章后,您将了解 FPGA 如何应用于实时嵌入式系统架构,并了解构成 FPGA 集成电路的组件。您将了解 FPGA 算法设计中使用的编程语言,并将了解开发基于 FPGA 的应用程序的步骤顺序。您还将使用免费的 FPGA 软件工具在低成本开发板上完成完整的 FPGA 开发示例。

我们将在本章中讨论以下主题:

技术要求

本章的文件可从 https://github.com/PacktPublishing/Architecting-High-Performance-Embedded-Systems 获得。

在实时嵌入式系统设计中使用 FPGA

正如我们在FPGA 元素中所见 第一章的部分 , 构建高性能 嵌入式系统 ,典型的 FPGA 器件包含大量查找表、触发器、块 RAM 元件、DSP 片和其他组件。虽然了解每个组件的详细功能很有帮助,但在 FPGA 开发过程中,这些问题不一定能提供信息。要记住的最重要的限制是,特定的 FPGA 部件号包含有限数量的每个元素,并且针对该特定 FPGA 模型的设计不能超过这些限制。

相反,从嵌入式系统的需求声明的角度来看 FPGA 开发过程会更有效率。您可以开始针对任意选择的 FPGA 模型开发 FPGA 设计。随着开发的进行,您可能会遇到资源限制或识别设计所需的 FPGA 功能,而该功能在当前目标 FPGA 中不存在。此时,您可以选择不同的、更有能力的目标并继续开发。

或者,随着设计的开发接近完成,您可能会意识到您最初选择的目标 FPGA 包含过多的资源,并且可以通过选择更小的 FPGA 来改进设计,在更低的成本、更少的引脚、更小的封装尺寸等方面具有潜在优势,并降低功耗。

在这两种情况中的任何一种情况下,将目标 FPGA 切换到同一系列中的不同模型通常很简单。到目前为止,您创建的开发工具和设计工件应该可以与新的目标 FPGA 模型完全重用。如果有必要切换到来自同一供应商的不同系列 FPGA,或切换到来自不同供应商的模型,则切换可能会涉及更多工作。

本次讨论的重点是强调在高性能嵌入式系统开发工作开始时确定特定的 FPGA 模型并不太重要。相反,早期的考虑应侧重于验证使用 FPGA 作为设计一部分的决定,然后,如果 FPGA 是最佳设计方法,则继续选择合适的 FPGA 供应商和设备系列。

本书中的示例项目将基于 Xilinx Vivado 系列 FPGA 开发工具。尽管必须购买 Vivado 许可证才能为某些 Xilinx FPGA 系列进行开发,但 Vivado 免费支持我们将使用的 Artix-7 中的 FPGA 器件。 Artix-7 FPGA 系列结合了高性能、低功耗和降低系统总成本的特性。其他 FPGA 供应商提供类似的 FPGA 器件系列和开发工具套件。

FPGA 开发是一个相当复杂的过程,需要输入各种类型的分析和设计数据。为了避免在过于抽象的层面上讨论这些主题,并根据工作示例项目呈现具体结果,我们将在整本书中使用 Vivado。一旦您熟悉了此处讨论的工具和技术,您应该能够使用其他供应商提供的类似工具来应用它们。

以下部分将讨论 FPGA 系列和这些系列中的各个模型的一些关键差异化特性,包括块 RAM 的数量、可用的 I/O 信号的数量和类型、专用的片上硬件资源以及包含的FPGA 封装中的一个或多个硬件处理器内核。

块 RAM 和分布式 RAM

块内存 用于在 FPGA 内实现存储器区域。一个特定的内存区域是根据位宽(通常为 8 位或 16 位)和深度来指定的,深度定义了内存区域中存储位置的数量。

FPGA 中 Block RAM 的总量通常以 千位 为单位指定 (KB )。可用块 RAM 的数量因 FPGA 系列和特定系列内的模型而异。正如您所料,更大、更昂贵的部件通常具有更多可用作块 RAM 的资源。

在 Xilinx FPGA 中,以及在不同程度上在其他供应商的 FPGA 中,除了块 RAM 之外,还有一种称为分布式 RAM 的独特存储器类别。 分布式内存 由查找表中使用的逻辑元素构成,并重新利用这些设备的电路来形成微小的 RAM 段,每个段包含 16 位。必要时可以将这些段聚合起来形成更大的内存块。

Block RAM 往往用于传统上与 RAM 相关的用途,例如实现处理器高速缓存或用作 I/O 数据的存储缓冲区。分布式 RAM 可用于临时存储中间计算结果等目的。由于分布式 RAM 基于查找表电路,因此在设计中使用分布式 RAM 会减少可用于实现逻辑运算的资源。

Block RAM 可以有单端口或双端口。单端口块 RAM 代表了处理器在操作期间读写 RAM 的常见使用模式。

双端口 Block RAM 提供两个读/写端口,可以同时主动读写同一个内存区域。

双端口块 RAM 非常适合在以不同时钟速度运行的 FPGA 部分之间传输数据的情况。例如,I/O 子系统在接收传入数据流时可能具有数百 MHz 的时钟速度。当传入数据通过 FPGA 的高速 I/O 通道之一到达时,I/O 子系统将传入数据写入 Block RAM。 FPGA 中的一个独立子系统以不同的时钟速度运行,可以从 Block RAM 的第二个端口读取数据,而不会干扰 I/O 子系统的操作。

Block RAM 也可以先进先出运行 (先进先出 ) 模式。在传入串行数据流的示例中,I/O 子系统可以在数据字到达时将其插入到 FIFO 中,并且处理子系统可以以相同的顺序将它们读出。 FIFO 模式下的 Block RAM 提供指示 FIFO 是满、空、几乎满还是几乎空的信号。 几乎完整的定义 并且几乎是空的 由系统设计人员决定。如果你分配几乎是空的 意味着 FIFO 中剩余的项目少于 16 个,那么您可以放心,只要 FIFO 没有指示它几乎为空,您就可以读取 16 个项目,而无需进一步检查数据可用性。

在 FIFO 模式下使用 Block RAM 时,至关重要的是,当 FIFO 已满时,将项插入 FIFO 的逻辑从不尝试写入,并且当 FIFO 为空时,从 FIFO 中读取的逻辑从不尝试读取。如果发生这些事件中的任何一个,系统将丢失数据或尝试处理未定义的数据。

FPGA I/O 引脚和相关特性

由于 FPGA 旨在用于高性能应用,因此它们的 I/O 引脚通常能够实现各种高速 I/O 标准。在使用 FPGA 开发工具套件实现设计期间,系统开发人员必须执行任务,包括将功能分配给 FPGA 封装上的特定引脚,以及配置每个引脚以使用适当的接口标准运行。必须执行额外的步骤来将 FPGA 模型代码中的输入和输出信号与正确的封装引脚相关联。

在引脚级别,单个 I/O 信号要么是单端的,要么是差分的。

单端信号 以地为参考。传统的晶体管-晶体管逻辑 (TTL ) 和 互补金属氧化物半导体 (CMOS ) 数字信号在相对于地的 0-5 VDC 范围内工作。

现代 FPGA 通常不支持传统的 5 VDC 信号范围,而是支持在降低的电压范围内运行的 TTL 和 CMOS 信号,从而降低功耗并提高速度。 低电压TTL (LVTTL ) 信号在 0-3.3VDC 的范围内工作。 低压CMOS (LVCMOS ) 信号可选择 1.2、1.5、1.8、2.5 和 3.3 V 的信号电压。这些信号类型被命名为 LVCMOS12、LVCMOS15、LVCMOS18、LVCMOS25 和 LVCMOS33。其他高性能单端信号类型可用,包括高速收发器逻辑 (HSTL ) 和 Stub 系列终止逻辑 (SSTL ).

单端信号广泛用于低频用途,例如读取按钮输入和点亮 LED。单端信号也用于许多低速通信协议,例如 I2C 和 SPI。单端信号的一个重要缺点是,任何耦合到传输信号的导线和印刷电路板走线中的噪声都有可能破坏接收器的输入。通过使用差分信号可以大大减少这个问题。

对于最高的数据传输速率,差分信号是首选方法。

差分信号 使用一对 I/O 引脚并将相反的信号驱动到两个引脚上。

换句话说,一个管脚被驱动到更高的电压,另一个管脚被驱动到更低的电压以表示0数据位,而引脚电压被反转以表示1位。差分接收器将两个信号相减以确定数据位是 0 还是 1。 由于携带差分信号的两条线或迹线在物理上非常靠近,因此耦合到其中一个信号中的任何噪声都会耦合到另一个信号中以非常相似的方式。减法运算消除了绝大多数噪声,从而以比单端信号高得多的数据传输速率实现可靠运行。

标准 FPGA 支持多种差分信号标准。定义了HSTL和SSTL的几个差分版本,每个版本都有不同的信号电压电平。

低压差分信号 (LVDS ) 于 1994 年作为标准引入,并继续用于各种应用。 LVDS 信号发送器产生 3.5 mA 的恒定电流并切换流经接收器电阻的电流方向,以产生代表 0 和 1 数据值的状态变化,如图 4.1 :


图 4.1 – LVDS 接口

在 LVDS 通信中,与其他差分和单端信号标准一样,发送器和接收器之间通信路径的阻抗必须与端接阻抗紧密匹配,在 LVDS 的情况下为 100 欧姆。如果通信通道的阻抗与端接阻抗不匹配,线路上会发生反射,从而妨碍可靠的数据接收。

差分信号走线对的阻抗是对走线几何形状及其与接地层关系的函数。正如我们将在第 6 章中看到的那样 , 使用 KiCad 设计电路 ,设计出满足高速差分信号标准要求的电路板很简单。

专业硬件资源

FPGA 通常包括一系列专用硬件资源,用于通常需要的功能,并且可以在硬件中更有效地实现而不是使用合成的 FPGA 功能,或者无法使用 FPGA 组件实现。这些资源的一些示例如下:

  • 与外部动态 RAM 的接口 (DRAM ) 用于存储大量这些接口通常支持常见的 DRAM 标准,例如 DDR3。
  • 模数转换器。
  • 锁相环,用于生成多个时钟频率。
  • 数字信号处理乘法-累加 (MAC ) 硬件。

这些硬件资源支持开发具有广泛功能的复杂系统。为MAC操作等功能提供了专用硬件,因为硬件性能明显优于使用FPGA逻辑资源合成的等效功能。

处理器内核

一些 FPGA 系列包括硬件处理器内核,目的是将峰值软件执行速度与 FPGA 实现算法的性能优势相结合。例如,Xilinx Zynq-7000 系列将硬件 ARM Cortex-A9 处理器与传统 FPGA 架构集成在一起。

不需要硬件处理器的FPGA设计可以使用FPGA资源实现处理器,称为软处理器 .软处理器具有高度可配置性,但它们通常无法与硬件实现的处理器的性能相匹配。

下一节将介绍用于开发FPGA算法的主要编程语言和数据输入方法。

经 Packt Publishing 许可转载。版权所有 © 2021 Packt Publishing


吉姆·莱丁 是 Ledin Engineering, Inc. 的首席执行官。Jim 是嵌入式软件和硬件设计、开发和测试方面的专家。他还擅长嵌入式系统网络安全评估和渗透测试。他拥有学士学位爱荷华州立大学航空航天工程学士学位和硕士学位。佐治亚理工学院电气和计算机工程学士学位。 Jim 是加利福尼亚州的注册专业电气工程师、认证信息系统安全专家 (CISSP)、认证道德黑客 (CEH) 和认证渗透测试员 (CPT)。

相关内容:

  • 开源工具有助于简化 FPGA 编程
  • 在 FPGA 或 ASIC 中实现浮点算法
  • 利用 FPGA 进行深度学习
  • 软件工具将 GPU 代码迁移到 FPGA 以用于 AI 应用
  • FPGA 取代了 Subaru Eyesight 基于视觉的 ADAS 中的 ASIC
  • 基于闪存的 FPGA 如何简化功能安全要求
  • 获得即时启动 FPGA 的优势
  • 使用高速 NOR 闪存的 FPGA 配置
  • FPGA 技术如何发展以满足新的中端系统要求

有关 Embedded 的更多信息,请订阅 Embedded 的每周电子邮件通讯。


嵌入式

  1. 如何在互联硬件设计中避免代价高昂的意外
  2. 什么是嵌入式系统设计:设计过程中的步骤
  3. 使用 Eclipse IoT 简化 IoT 开发
  4. 使用测试驱动开发开发状态机
  5. 通过嵌入式人工智能将大数据转化为智能数据
  6. 社区驱动的资源跟踪硬件设计安全弱点
  7. 嵌入式视觉 MIPI 相机的 FPGA 加速器
  8. Cypress:ModusToolbox Suite 降低了物联网设计的复杂性
  9. Lattice:MachX03D FPGA 通过硬件信任根功能增强安全性
  10. 设计套件通过光学传感器测量血压
  11. Java 9 - 尝试资源改进
  12. 全加加法