基于Zynq的光流法软硬件协同设计与实现--4.系统设计
 
- UID
- 1023229
- 来自
- 中国
|

基于Zynq的光流法软硬件协同设计与实现--4.系统设计
在分析了算法的并行性后,下面将从硬件设计、软件设计与系统的优化等角度来说明如何在Zedboard上实现与优化复杂的图像算法的加速机制。
4.1 流水线设计
根据上一章的流水线并行性的分析,可以知道迭代模块是破坏流水性能下降的一个关键点,降低或者消除它的影响成为一个关键点。从流水线的角度,可以通过拉长流水线的级数,来增加流水线的性能;也就是在迭代内部,使用多份P4模块来缓冲从P3级进来的数据,减少了外部迭代的次数,如图5所示。

图5 流水线的优化1 从通信量的角度,光流场的计算需要迭代,需要高速并行访问存储器的结构,因此,数据位宽的大小对通信量有很大的影响。比如迭代的起始点放在P4上,需要256-bit的数据位宽即(J11, J12, J13, J22, J23, u, v),这样会对存储器的读写速率有很高的要求,然而一旦存储器达不到,也同样会堵塞数据流的操作。因此,选择合适的迭代起始点也是一个很重要的因素。如图6所示,如果把迭代的起始点放在P1模块,只需要128-bit的数据位宽即(img1,img2,u, v),相比较图5的流水线结构,它的通信量会下降一半。

图6 流水线的优化2 4.2 迭代系统的设计
在优化完算法的流水线后,流水线与存储器的接口需要进一步优化。在Zedboard的PL端FPGA与DDR的通信方式是基于AXI总线协议的,PL端通用AXI VDMA来读写DDR的数据,具体的硬件结构图如图7表示。

图7 迭代系统的硬件结构图 数据流从HP0口通过VDMA0的MM2S端流到光流算法的IP核,经过流水线处理后写到VDMA0的S2MM端,从VDMA0的S2MM端把数据流写到输出数据区;接着VDMA1的MM2S从HP2口读更新好的值,送给光流算法的IP核处理,处理完的数据由VDMA1的S2MM写入输入数据区;这样流水线的输入输出数据才能与DDR高效地流起来。
4.3 光流算法IP核的设计
根据第三章的并行性分析可知,在光流场计算的内部,迭代阶段的并行性不是很好,具体地表现为每产生一个像素点的光流新值都会去更新,也就是一个像素点与之相邻的上下左右四个像素点的光流值有数据依赖性,因此,消除数据相关性会大大地提高算法的并行性。在设计FPGA的IP核时,采用改进的奇偶超松弛迭代法,能够有效地消除光流的数据相关性。如图8所示,红颜色表示奇数层的迭代,等奇数层的迭代完成之后偶数层再迭代,这样大大提高了算法的并行性。

图8 奇偶机制的数据相关性 光流算法的IP核是使用Xilinx的高层综合语言(HLS)来实现的,它能快速地把C、C++和SystemC三种高层次的软件语言转化为VHDL或者Verilog的硬件描述语言。
图8显示了简单的综合流程,从C/C++/SystemC设计开始。C/C++/SystemC 测试平台用于验证设计功能的正确性,同时还可用于RTL和C的协同仿真。协同仿真包括验证生成的RTL设计(.v或.vhd)功能,这要使用C/C++/SystemC测试平台而不是RTL测试平台或者采用e或Vera验证语言编写的测试平台。时钟周期约束设置了设计应该运行的目标时钟周期。设计将被映射到目标FPGA器件——Xilinx FPGA上,如图9所示。

图9 采用Vivado HLS进行FPGA综合的流程 对于Vivado HLS中的许多高级特性而言,需要了解什么样的硬件架构,从而进行源代码的调整, 具体地开发手册可以参考[26]。为了适应不同图片的大小,增强IP核的通用性,综合硬件资源等方面的考虑,调用IP核中图片宽度最大支持到640,具体的光流算法的HLS设计可以参考我们的源代码。
4.4 FPGA的资源利用率
表2是在Zedboard下FPGA的资源利用率,其中光流计算的IP核中P5的硬件结构是2份,数据通路的工作频率是100MHZ,控制通路的工作频率是50MHZ。从表中可以看出,FPGA的资源已经消耗了一大半,如果在硬件资源足够的情况下,可以把P5做成更多的份数,这样可以减少外部迭代的次数,从而提高整个系统的吞吐率。

表2 FPGA的资源利用率 4.5 软硬件协同设计
在硬件结构的设计中,模块中需要软件去控制或者配置FPGA的IP核,这些信号线通过AXI4-lite总线映射到内存区域,也就是地址线。这样就使得硬件的可扩展性大大地增强。光流算法的IP核的地址控制信号如表3所示,通过地址信号线的寄存器的设置对FPGA的IP核进行软件配置、复位、启动。VDMA的IP核的控制可以参考[27] 。

表3 光流计算的IP核的软件控制 Note: SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write,
COH = Clear on Handshake
来源:stepzhibin的专栏 |
|
|
|
|
|