让 FPGA 视觉功能大众化
发布者:jackzhang
时间:2016-04-27 17:48:46
作者: Kiran Nagaraj 国家仪器公司高级软件工程师 kiran.nagaraj@ni.com
视觉系统正在成为主流。技术的成本/效益分析及合理应用已发展到这样的阶段:工程师正在将视觉功能运用到各种应用中,从无人驾驶汽车到消费类电子产品质量检测系统无所不包。这种大规模采用正在推动视觉走出实验室,走进嵌入式系统和工厂车间。所部署的系统往往需要与控制环路中的 I/O、广泛分布的大量摄像头或视觉功能实现高级同步。随着工艺和应用的日趋复杂化,视觉系统正在要求更快、更高级的处理以及更严格的时序与同步。
为满足这些要求,视觉系统设计人员正日渐依赖由实时处理器、FPGA、GPU 或 DSP 处理单元构成的异构处理平台处理专门的任务,满足 I/O 要求和处理性能需求。智能相机、图像采集卡和视觉系统都使用异构架构来满足应用要求。
FPGA 具备的并行处理功能,例如赛灵思 All Programmable FPGA 系列提供的并行处理功能,自然适用于实现大量图像处理算法的。FPGA 可用于同时执行高数据强度处理和高速传感器测量。此外,这类器件时延极低,这对视觉应用来说极为重要,因为时延会增大根据图像数据做出决策所需的时间。FPGA 有助于避免抖动,因此可作为高确定性的处理单元。
但是构建包含一个 FPGA 的异构系统会给系统设计人员带来严重的编程难题。在上市时间的重压下,视觉系统设计人员要能够迅速构建具有复杂特性的解决方案原型。在异构系统上编程需要这样一种工具:在目标硬件上编译和运行算法之前,其不仅可帮助领域专家在多个平台上设计 IP 功能,而且还可帮助他们测试视觉算法。该工具应该支持:在整个原型设计过程中能够轻松访问吞吐量及资源使用信息。
NI 把这称之为算法工程。采用该工艺技术,领域专家,可集中精力解决手里的难题,不必关注底层硬件技术。NI 具有视觉助手的视觉开发模块 (VDM) 能够为您提供支持视觉助手的视觉开发功能。
配备视觉助手的 VDM 有助于快速完成原型设计、代码生成、FPGA 资源估算、自动代码并行化以及并行数据流同步化(针对时延均衡等任务)。VDM 包含超过 50 种 FPGA 图像处理功能以及在处理器与 FPGA 之间高效传输图像的功能。您可使用 VDM 中的视觉助手迅速设计 FPGA 视觉应用原型,开发 FPGA 视觉应用。
基于配置的原型设计
视觉助手是一种基于配置的原型设计工具,可帮助您迭代图像处理算法,查看参数调整如何影响图像。有了视觉助手,您可以在图像流水线中的每一个视觉模块后显示输出(处理后的图像)(图 1)。您可使用该工具测试不同图像集上的不同算法和参数,无需编译 IP,因此可显著减少设计视觉算法所需的时间。
NI 已经定制了用于满足 FPGA 编程人员要求的工具。在 FPGA 上构建任何算法时,主要考虑因素是 FPGA 架构上的资源消耗、流水线的时延以及在特定架构上该算法可实现的最高频率。视觉助手通过为图像流水线中的每个模块提供所消耗资源的估算,起到帮助作用。您可使用该工具测试原型设计环境中算法的结果和所部署代码的结果,以确保实施方案能够获得相同的结果。
一个考虑因素是把多大的内核用于图像滤波运算。内核大小的选择会影响流水线中资源的使用和时延情况,较大的内核一般比较小的内核需要的资源更多。
要为应用选择最合适的内核大小,您可使用视觉助手进行实验,直到您在最小资源耗用和最大性能方面取得最理想的结果。图 1 所示的实时并行运行多个图像流水线是一个常规要求。这种场景要求在多条流水线融合为单条流水线时,并行流水线的时延必须均衡。NI 在其视觉 FPGA IP 工具集中提供一个同步缓存器。视觉助手不仅可自动计算流水线中的时延,而且还可在并行流水线融合时确保均衡的时延,从而可为您配置同步缓冲器。这样就能保证同步缓冲器中的 FIFO 能够根据流水线的最大时延提供足够的深度。
视觉助手中的性能测量实用工具可估算处理每帧所需的最长时间(图 2),告诉您流水线中所有模块的总体时延。NI 硬件系列中的大部分处理器都具有运行于其上的实时操作系统,因此使用视觉助手能轻松估算执行视觉功能所需的时间。
对于使用 LabVIEW 的新手来说,需要注意的是视觉助手可确保创建功能齐全的项目,包括所有的相关组件(如传输虚拟仪器 (VI) 和 DMA FIFO)以及图像采集逻辑等。一个 VI 与其它编程语言中的一个函数或子程序类似。传输 VI 需要在主机/采集逻辑和 FPGA 之间传输图像数据。DMA FIFO 无需主机处理器参与。因此它们是在 FPGA 目标器件和主机之间传输大量数据的、最快捷的可用方法。
采集逻辑取决于视觉系统是基于内处理还是协处理。此外,视觉助手还可帮助您创建其它 VI,比如运行在处理器上的主机 VI 以及 FPGA VI 等。随后您可使用赛灵思 Vivado工具编译 FPGA VI,为部署在 FPGA 上生成比特流。
值得一提的是容纳图像处理流水线的系统可以根据采集逻辑驻留的位置大致划分为内处理或协处理。在内处理中采集逻辑驻留在 FPGA 上;摄像机使用采集逻辑配置,图像在 FPGA 上处理。该结果和处理后的图像随即发送回主机进行评估和进一步分析。在协处理中,摄像头的采集逻辑驻留在处理器上。把图像从处理器传输给 FPGA,然后将处理后的图像从 FPGA 发送回处理器,需要一定量的时间。此外,您还可在处理器和 FPGA 之间对图像流水线的处理进行分区。
作为使用 FPGA 的视觉系统的开发人员,您需要清楚 FPGA 可实现的吞吐量。您可使用吞吐量信息和实时资源估算来判断您可部署多少功能(IP 模块)到 FPGA 上。在协处理条件下,处理器性能决定了最终的吞吐量。在使用 NI 随同视觉开发模块提供的 FPGA IP 功能时也是如此,因为这些功能不仅可全面实现流水线,而且还可提供优于大多数处理器的性能。
从原型到部署视觉开发模块的视觉 FPGA IP 可让开发人员使用大规模并行处理和赛灵思 Vivado 高层次综合 (HLS) 工具在 FPGA 上实现全面流水线的低时延架构优化型视觉 IP。NI 提供的视觉 FPGA IP 目前针对三个赛灵思 FPGA 系列(Kintex?-7、Virtex?-5 和 Spartan?-6)和赛灵思 Zynq?-7000 All Programmable SoC。
图像可视为二维阵列,图像运算一般基于矩阵。FPGA 内在的并行性可为它们实现高速性能。您不仅可使用环路实现图像矩阵运算,也可展开环路,充分利用 FPGA 的并行特性,在展开环路后执行多项任务。LabVIEW FPGA 和 LabVIEW FPGA IP Builder 是开发人员在 FPGA 上创建视觉 IP 使用的主要工具。
视觉 FPGA IP 功能为单像素处理,因此它们先从像素流中接收 1 个像素,然后再输出 1 个像素。这些 IP 功能使用基于使能的握手或 4 线握手协议互动。采用这种实现方案的主要原因是控制路径的复杂性会随图像流水线中功能数量的增加而增大,因此在这些功能之间需要无缝数据转换。4 线协议可在位于单周期时间环路(SCTL)中的视觉 FPGA IP 功能之间实现无损数据传输。使用 SCTL 可确保环路中的模块能够在用户设定的频率下提供时钟功能。
图 3 是通过描述 4 线协议和同步缓冲器来融合像素的 FPGA VI。该 4 线协议专门针对并行运行的算法而设计,它可通过确保数据在生产—消费架构中处理来提高吞吐量。另外,4 线握手在 FPGA 上消耗的资源最少。这非常重要,因为该协议可构成对底层视觉功能的开销。
此外,视觉 FPGA IP 还可为您带来在流水线中添加定制代码,提供开放式环境的高灵活性。定制代码需要具有 4 线握手实现方案的封装程序 VI。随后您可将定制代码插入到图像流水线中。必须确保定制代码为全面流水线的,否则就可能影响流水线的完整性。您可使用 LabVIEW 实现定制代码,
也可通过 LabVIEW FPGA 中的 HDL 集成节点在 VHDL 中使用现有的代码。
该视觉 FPGA IP 工具集提供多种预处理功能,例如边缘检测滤波器、卷积滤波器、低通滤波器、灰度形态、二进制形态和阈值。此外,它还包含执行算术和逻辑运算的视觉 IP 功能以及输出图心等结果的功能。它还有一项功能——简单边缘工具(Simple Edge Tool)。该功能能沿着一条线找到边缘,对测径应用非常实用。量化功能能接收掩膜图像和待处理的图像流,并返回一份报告,提供有关掩膜图像所定义区域的面积、平均偏差和标准偏差的信息。线性平均可计算全部图像或部分图像的平均像素密度(平均线轮廓)。
NI 视觉 FPGA IP 列表中的最新成员是颗粒分析报告。您可通过执行颗粒分析或区块分析来检测图像中的连接区域或像素分组,然后对这些区域进行选择测量。使用该信息,您可检测晶圆片上的瑕疵,检测电路板上的焊接瑕疵,也可定位运动控制应用中的对象。
该 IP 的一项独特特性是,它能在颗粒信息在两个帧间扩散时检测到该颗粒。NI 随同 VDM 提供了一个颗粒分析报告示例。图 4 是具备图像显示功能的主机 VI。检测系统时需要该功能,因为您无法随时保证受检测的对象能在单个帧中捕获。
近 70% 的 NT 视觉 FPGA IP 功能都是使用 IP Builder 开发的。这是 LabVIEW FPGA 中的一个实用工具,有助于您使用 LabVIEW 以图形代码形式编码,然后使用 Vivado HLS 输出 RTL 代码。这种方法的主要优势在于,熟悉图形编码的用户可以在开发应用的同时,生成一个描述应用频率及时延要求
的指令文件。将 LabVIEW IP Builder 与 Vivado HLS 搭配使用即可生成合适的 VHDL 代码。您可在图像上使用基于阵列的运算,而且 Vivado HLS 可确保 VI 将依据指令集实现所需的运算频率及最低时延。
Vivado HLS 是视觉应用开发的理想选择,它能帮助从所生成的 IP Builder C 语言代码抽象化算法描述和数据类规范(整数固定点)。此外,它还能为功能的早期测试生成必要的仿真模型。所生成的架构感知 VHDL 代码可提供高度可重复的高质量结果。
NI 始终坚持的理念是提供开放灵活的系统并辅以合适的软件工具,充分发挥其优势。开发人员正在将基于异构架构的视觉系统设计到数量不断增长的广泛应用中。对这些异构系统的软件设计而言,下一个前沿可能是能使用各种系统组件(CPU、GPU 和 FPGA)的功能与资源智能判断算法组件部署位置的编译器或应用开发引擎。
随着更高级产品和工艺不断推动视觉系统应用范围的扩大,应用开发人员将需要一款支持视觉功能的高效原型设计及算法开发环境。为开发人员及域专家提供合适的工具,将为大众掀起新一轮视觉系统创新浪潮。
如果您有兴趣尝试 NI 的视觉 FPGA IP,您需要安装 LabVIEW FPGA 和 VDM。您可以先尝试 30 天评估期,然后延长期限或通过如下网址购买许可证:
ni.com/vision。