Xilinx FPGA 推动人群自动监测技术的发展

图 4:右下被运动向量网格覆盖的、经过 FPGA 处理后的实际帧
基于 Vivado HLS 的硬件加速器
在前文介绍的人群运动分类算法中,最为耗时、计算最密集的工作是计算运动向量。另一项系统工作——进行分类——因不涉及像素级的处理,非常简单而且易于实现。注意到设计的这个方面,我们为计算运动向量构建了一个硬件加速器。我们借助赛灵思 Vivado HLS,用 C/C++ 语言在 RTL 中对该加速器进行了设计、测试和综合。
Vivado 生成的 RTL 代码的关键特征之一是其在很大程度上已经过了精心优化。Vivado HSL 把阵列存取(例如存储在阵列中的像素数据)综合到存储器接口中,通过分析代码自动生成所需的地址。Vivado HSL 还可分析预先计算好的偏移和常量,从而非常快速地执行所谓的“跨步式”存储器访问。跨步式存储器访问从图像的多行数据访问开始(就如同在 2D 卷积中)。
设计基于 Vivado 的加速器的主要考虑因素是并行处理运动向量的计算,最大限度地提高从主存储器中的数据读取。为此目的,我们使用八个 Block RAM 并行加载和存储视频帧数据。硬件加速器的内核能够并行计算四个运动向量,而且在计算中它会用到所有八个 Block RAM。从主存储器传输到这些 Block RAM 的数据由 MicroBlaze 通过 DMA 加以控制。
Vivado HLS 生成的硬件加速器具有部分自动生成的握手信号,这些信号对于启停硬件加速器必不可少。 这些握手信号包含“启动”、“繁忙”、“闲置”、“完成”等标志。这些标志通过 GPIO 传送到 MicroBlaze 处理器以完成握手。图 5 所示为该硬件加速器、八个 Block RAM 和 MicroBlaze 处理器主外设总线之间的互联。

图 5:基于 Vivado HLS 的硬件加速器及其互联
图 5 中分别被命名为 SA1、TA1 到 SA4、TA4 的这些 Block RAM,每个的容量为 16KB。每对 SA1、TA1 到 SA4、TA4 能够保存计算一个完整行的运动向量所需的数据。因此硬件加速器在完成运行后,会输出四行运动向量写回到相同的 Block RAM 存储器中。这些计算完的运动向量随即由 MicroBlaze 处理器读回,然后把结果以运动向量网格的形式复制到自己的主存储器中。(图 4 所示的是被硬件加速器计算出的运动向量网格覆盖的实际帧)
该硬件加速器在 200MHz 频率下工作,计算整个图像的运动向量所需的全部处理任务能够在不足 10 毫秒内完成,包括与存储器之间的所有数据往来传输。
算法控制和数据流
在视频流水线和硬件加速器开发就绪后,完成该系统的最后一步是把这两个单元与 MicroBlaze 主机处理器集成,并使用赛灵思软件开发套件 (SDK_,用 C/C++ 实现用户层应用的算法控制和数据流。 在赛灵思 SDK 中实现算法控制和数据流能为设计带来极大的灵活性。这是因为用户可以用相同的方式设计和集成新的硬件加速器,同时还可以修改必要的控制和数据流以集成新的硬件加速器。最终得到的就是一种软件控制、硬件加速的设计,其灵活度可媲美纯软件实现方案,同时其性能可媲美纯硬件实现方案。
本文介绍的人群运动分类算法的控制和数据流从通过视频帧队列 API 功能采集视频帧开始。当视频帧获取完毕,用户应用把当前的和之前的视频帧数据传输到硬件加速器,完成运动向量的计算。
此时系统在软件中计算运动向量的统计属性和分类结果。这样做的原因是这些步骤不涉及任何像素级处理,只会增加很少的处理开销。当分类结果计算完成时,用屏幕显示(OSD)功能把结果和运动向量显示在处理后的帧上。这些屏幕显示功能也是在赛灵思 SDK 中用 C/C++ 语言实现的。
这些构建模块(实时视频流水线、硬件加速器和算法控制/数据流)全部就绪后,总体系统设计即告完成。随后我们对基于 FPGA 的实现方案进行了测试,并与之前的桌面 PC 型实现方案比较结果的准确性。两个结果是完全一致的。我们使用来自明尼苏达大学数据库( http://mha.cs.umn.edu/proj_recognition.s
- DSP+FPGA嵌入式多路视频监控系统硬件平台(04-10)
- FPGA最小系统之:实例2 在Xilinx的FPGA开发板上运行第一个FPGA程序(07-15)
- 利用XPS工具快速生成Virtex FPGA的板级支持包(03-18)
- 利用NI CompactRIO与NI Single-Board RIO实现从快速构造原型到低成本发布(03-19)
- 创建还是购买:什么是您嵌入式设计的最好选择?(07-06)
- Pmod规范,或Arduino伪标准(08-27)
