VisualApplets 基础知识#
本文档的简介与目的#
关键术语
在本教程中,标有 Key Terms 的文本框为尚不了解这些术语的读者解释了常见术语。
VisualApplets 是在 PC 上运行的设计工具。FPGA 是采集卡上的芯片。您可以在 VisualApplets 中绘制流水线。通过构建(Build),该流水线将被配置为 FPGA 上的硬件。相机数据是在采集卡上处理的,而不是在 VisualApplets 编辑器中处理的。
基本设计概念#
借助 VisualApplets,您可以在基于 FPGA 的可编程硬件上创建图像处理功能,而无需使用 VHDL 或 Verilog 等硬件描述语言编写代码。您可以以图形方式使用库中的算子构建设计,并将它们连接起来,使图像数据沿定义的路径流动。

此外,您还可以使用 Python 和 Tcl 脚本语言创建和编辑设计。
在可编程采集卡上,相机或其他图像源将连续的像素流传输到采集路径中,该板卡上的 FPGA 将处理该像素流。您构建的不是由 CPU 获取并执行的程序。相反,构建过程会在 FPGA 上配置专用的数字电路,其结构与您的流水线相匹配。
您可以在 PC 上创建和编辑 VisualApplets 设计(在 *.vad 文件中的算子、模块和链路)。随后,构建步骤会将该流水线转换为硬件逻辑。

在此类 VisualApplets 设计中,您可以从算子库中实例化算子;设计中算子的每个实例都称为一个模块。模块之间通过链路连接,处理顺序由模块的排列和连接方式决定。模块和链路共同构成了一个图像处理流水线,定义了像素数据如何在采集、处理和输出阶段之间移动。
当本教程指出某个模块在运行时处理、缓冲、阻塞或传输数据时,指的是由该模块生成的 FPGA 逻辑。VisualApplets 中的图形模块描述了该硬件行为;它本身并不处理运行时的相机数据。
您可以将可编辑的设计保存为 *.vad 文件。当您针对特定的目标采集卡构建设计时,VisualApplets 会生成扩展名为 *.hap 的二进制硬件 applet 文件。您可以将此文件加载到采集卡上。请勿将 *.hap 文件视为可编辑的设计源。您始终需要修改 *.vad 设计并重新构建。在运行时,您仍然可以更改应用程序或运行时工具写入设备的动态写入参数。
实际目标是实现硬件中的实时图像处理。虽然您是在 PC 上将流水线作为 *.vad 项目进行编辑和验证的,但只有构建后的 *.hap 才会将该处理逻辑和数据流结构作为可运行的硬件带入 FPGA 中。
关键术语
构建是指将您在 VisualApplets 中的图形化设计转换为采集卡 FPGA 可以运行的配置。
硬件 applet 的文件扩展名为 *.hap,这就是可运行的结果。
采集卡是计算机中的一块扩展板,用于接收相机数据、承载 FPGA 并运行您构建的 applet。VisualApplets 本身不包含 FPGA。
FPGA 技术#
现场可编程门阵列(FPGA)是一种包含大量可编程逻辑单元的芯片。这些单元和片上布线可以进行配置,以在硬件中实现复杂的数字电路,从而并行执行许多操作。
当您为目标采集卡构建 VisualApplets 设计时,VisualApplets 会自动将您的算子和链路映射到 FPGA 逻辑上。您无需亲自实现该映射。VisualApplets 会处理厂商专用的 FPGA 工具链(通常为 Xilinx Vivado)以进行布局、布线和比特流生成。有关 PC 上的 *.vad 项目如何与配置 FPGA 的 *.hap 相关联,请参阅基本设计概念。
除了通常用于构建组合逻辑电路的可编程逻辑单元外,FPGA 还提供用于时钟存储的触发器(flip-flops)、用于行缓冲区和其他片上内存的块 RAM(block RAM),以及用于快速乘加及类似功能的 DSP 或算术切片(DSP or arithmetic slices)。作为同一自动化构建流程的一部分,VisualApplets 会将算子和链路映射到这些资源上。设计中的每个算子都对应于具体的硬件,例如逻辑、内存、算术或它们的组合。
您的设计所需的 FPGA 资源取决于您使用的模块数量、选择的算子以及您如何设置 Parallelism、缓冲区大小和其他参数。更多地使用逻辑、内存或并行数据路径会增加资源消耗。如果设计超出了设备可实现的范围,构建将会失败,或者您可能无法达成时序闭包(timing closure)。当您运行 Design Rules Check Level 2(DRC Level 2)时,VisualApplets 会评估并报告 FPGA 资源消耗。请参阅用户手册中的FPGA 资源估计以及用户手册中的设计规则检查。有关资源消耗如何累积、适用哪些规则以及如何权衡设计选择的进一步解释,请参见Parallelism 教程主题和内存元素教程主题。
硬件中的流水线执行#
在图像采集卡上,构建的硬件 applet 将您的设计实现为流水线式硬件路径:像素数据在连续的流动中穿过链接的模块阶段。
您在 VisualApplets 中绘制的流水线是 FPGA 上硬件路径的模型:FPGA 逐阶段处理数据,并以连续流的形式将其向下游传递。该设计并不假定流水线在路径沿线的每个阶段都存储完整的图像。生成的 FPGA 流水线根据此流水线模型在时钟周期内将数据从一个阶段传输到另一个阶段,详见流水线概念教程主题。

与通常在内存中移动大量数据并主要按顺序执行指令的典型 CPU 工作流相比,FPGA 可以沿流水线按像素并行处理和传输数据。与在程序控制下对数据运行许多线程的 GPU 相比,FPGA 流水线更接近于固定传送带。数据通过您在设计中连线的处理阶段进行移动。这就是为什么文档如此频繁地使用流水线隐喻的原因。
关键术语
- 您可以将 FPGA 视为采集卡上的一块芯片,许多小型操作沿着您在 VisualApplets 中设计的路径同时运行。构建过程将该设计转换为 FPGA 上的专用硬件逻辑。随后,像素数据就像传送带上的物品一样流过这些硬件阶段,这就是流水线的概念。
- CPU 通常按顺序一步步地工作,并频繁加载和存储整块的数据。
- GPU 在程序控制下,对许多像素或线程并行执行相同的操作。
时钟周期与时序#
FPGA 设计依赖于时钟信号,该信号指示每个流水线阶段何时捕获、传输和处理数据。VisualApplets 和本教程将该时钟称为 Base Design Clock。它是生成的 FPGA 流水线的时钟,与相机像素时钟不同。时钟周期是 Base Design Clock 的一个滴答。在每个时钟上升沿,流水线中的触发器会存储其输入数据并将其传递到下一阶段。
因此,时钟周期:
- 定义时序:例如流水线中的寄存器等所有元素。
- 确保稳定的数据流,因为数值仅在可预测的时钟沿移动到下一阶段。
- 确定最大处理速度,因为 Base Design Clock 频率必须足够低,以便寄存器之间的所有组合逻辑在下一个周期到来之前正确稳定。
换句话说,时钟节拍保持了整个硬件流水线的对齐。各个运算符也采用了流水线设计:构建时会为每个运算符配置内部寄存器级,以便 FPGA 级能够在每个时钟周期接收新的输入,即使单个输入需要几个周期后其结果才会出现在输出端。在流水线充满后,输出端的吞吐量仍然可以达到每个周期一个结果,而从给定输入到其结果的延迟可能会超过一个周期。这就是为什么构建过程中的流水线和资源映射会直接影响可实现的 Base Design Clock 频率和吞吐量。
信息
您可以在 Device Resources 中找到帧采集卡的 Base Design Clock 频率和其他硬件资源信息。
相关主题#
- From Empty Design to Running Applet 教程主题 — 设计、DRC、仿真和构建
- Pipeline Concept 教程主题 — 数据如何在流水线中移动
- Parallelism 教程主题 — 带宽、时钟和 FPGA 资源
- Memory Elements 教程主题 — FPGA 内存和帧采集卡 DRAM
- Device Resources — Base Design Clock 和平台资源
- 用户手册中的 Design Rules Check — DRC Level 1 和 Level 2