缓存在图像处理中非常重要,FPGA可以用来调整时序,CPU运算时用于存放数据。在Zynq UltraScale+ MPSoC一般存在三种方式实现缓存,连接到PS的DDR、连接到PL的DDR和PL上的片上BRAM。如果不涉及到处理器处理数据,数据只在FPGA中流转,那么PL的DDR或者BRAM的方式是最合适的,既可以降低延迟,又能减少编程的复杂度。如果要进行算法处理,需要ARM处理器的参与,就必须用到挂载在PS的DDR。
大量数据的搬移如果让CPU来完成,性价比会非常的低,不仅占用CPU大量的运行时间,效率也不高。所以DMA技术应用而生,可以在CPU不参与的情况下,自主搬移和传输数据,CPU做的工作也只是将DMA配置好。PS中数据的搬移可以使用PS的DMA,PL的数据要向搬移到PS的DDR,就要用到AXI DMA,AXI VDMA是AXI DMA的扩展IP,专门针对图像设计,在满足数据流的传输机制后,增加了usr信号,用于表示图像起始。同时,设置了多帧缓存,将读写数据分开,避免了读写冲突,用户也可以访问当前读写的帧缓存号,加入算法操作。
Camera Link接收IP接收的图像数据需要经VDMA送入PS的DDR,VDMA的输入使用的是Xilinx标准的Axi Stream接口,而Camera Link输出的信号是行场有效信号,中间需要加入一个转接模块,这个就是Video In To Axi Stream,Xilinx的图像处理IP核,可以将行场信号转换为Stream信号。所以,完整的采集摄像头数据逻辑为Camera Link In+Video In To Axi Stream+VDMA+PS DDR。在Vivado中的Block Design如下图所示,红色连接线为PS产生的100MHz时钟,绿色连接线为相机产生的65MHz时钟,也是采集数据时钟。Camera Link还需要一个300MHz的参考时钟,由PS产生的100MHz时钟倍频得到。