【干货】基于ZYNQ的CameraLink图像采集与边缘检测开发详解 - 创龙小识堂 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3532|回复: 1

【干货】基于ZYNQ的CameraLink图像采集与边缘检测开发详解

[复制链接]

94

主题

97

帖子

790

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
790
发表于 2020-5-13 09:09:06 | 显示全部楼层 |阅读模式
基于ZYNQ的CameraLink图像采集与边缘检测开发详解
1. 案例说明

(1) PL端接入CameraLink相机通过Base模式采集图像(1280*1024),然后通过VDMA缓存到PSDDR
(2) 使用AXI4-Stream Switch IP核将图像复分成两路,一路用于边缘检测处理(Sobel算法),另一路直接回显
(3) 利用Video Mixer IP核将图像叠加通过HDMI输出原始图像或者算法处理后的图像。本案例支持CameraLink Base/Full模式、彩色/黑白相机。
此开发详解基于创龙ZYNQ Z-7045/Z-7100评估板TLZ7xH-EVM展开。

2. 案例框图

807355ebb49bf7effa.png

3. 申请IPlicense
开发案例使用的Video MixerChroma Resampler IP,需要到官网下载IP免费license,否则将无法通过TcL脚本生成Vivado工程。
请参照创龙TLZ7xH-EVM评估板(ZYNQ Z-7045/Z-7100)用户手册Xilinx Vivado 2017.4License安装教程》文档导入IP

725955ebb49e2f1ed4.png

成功导入后,点击View License Status可以查看新添加的IPlicense如下图。

67275ebb4a1c1824e.png

4. Vivado工程说明
参照创龙TLZ7xH-EVM评估板(ZYNQ Z-7045/Z-7100《基于TcL脚本生成Vivado工程及编译》文档,使用TcL脚本生成Vivado工程。
1)生成评估板TLZ7xH-EVMZYNQ型号为xc7z100Vivado工程:
Vivado# vivado -mode batch -source tl_cameralink_edge_display_project.tcl  -tclargs tlz7xh-evm  xc7z100ffg900-2
2)生成评估板TLZ7xH-EVMZYNQ型号为xc7z045Vivado工程:
Vivado# vivado -mode batch -source tl_cameralink_display_project.tcl  -tclargs tlz7xh-evm  xc7z045ffg900-2
进入Vivado工程所在的runs路径,双击.xpr文件打开工程

519115ebb4a381ba88.png

点击"IP INTEGRATOR -> Open Block Design"打开Vivado工程如下图所示。

547685ebb4a46e4064.png
                     (Base模式
点击Address Editor选项,可以看到IP核分配的地址,在PS端可以通过配置这些地址(寄存器)来控制IP核。

738345ebb4a765425a.png

5. IP核与模块简介
lvds_n_x_1to7_sdr_rx模块
源码路径:hw\src\hdl\lvds_n_x_1to7_sdr_rx.v

90605ebb4a91bdb5f.png

模块实现了将差分输入数据转化成并行数据,参考时钟delay_refclk_in需接200MHz或者300MHz本例程使用PS端的200MHzFCLK1。双击打开配置界面。参数N表示通道数,X表示每个通道的数据差分对数量。
根据CameraLink V2.0标准:
  • Lite/Base模式:单通道,每通道数据差分对为4对,需要1个连接器。
  • Medium模式:双通道,每通道数据差分对为4对,需要2个连接器。
  • Full/80bit模式:三通道,每通道数据差分对为4对,需要2个连接器。
配置N=1表示使用Base模式,N=2Medium模式,N=3Full模式。X固定为4。更详细的说明请查阅文档xapp585-lvds-source-synch-serdes-clock-multiplication.pdf

30185ebb4aa4a6e00.png

cameralink_bit_allocation_rx模块
源码路径hw\src\hdl\cameralink_bit_allocation_rx.v

877075ebb4ab30dc05.png

功能:将lvds_n_x_1to7_sdr_rx模块Serdes串并转换出来的数据进行重组,分离出行同步信号、场同步型号、数据有效信号和每个像素数据参数N表示通道数量和lvds_n_x_1to7_sdr_rx模块功能一致。
  • N=1Base模式,输出端PortAPortBPortC有效。
  • N=2Meduim模式,输出端PortAPortBPortCPortDPortEPortF有效。
  • N=3Full模式,输出端PortAPortBPortCPortDPortEPortFPortGPortH有效。
关键代码解释:
(1) data_in的数据排列格式(lvds_n_x_1to7_sdr_rx模块串转并后的数据)。
lvds_n_x_1to7_sdr_rx模块将每一对数据差分对转换后的数据如下(XAPP585文档):

535255ebb4ac354f64.png

CameraLinkLVDS视频)协议标准如下图所示。

694735ebb4b3677b50.png

结合CameraLinkLVDS视频)协议标准得出4对数据通道转换后的数据在data_in数据的排列顺序如下

843395ebb4b4e44787.png

(2) 分离出行场同步信号、数据有效信号和像素数据。
根据CameraLink协议:
  • RX24对应行有效信号LVAL(行同步信号)。
  • RX25对应帧有效信号FVAL(场同步信号)。
  • RX26对应数据有效信号DVAL
其他对应关系如图:

828285ebb4b63798b1.png

因此,根据上图即可将各信号分离出来

425965ebb4b89b84c4.png

Video In to AXI4-Stream IP
Video In to AXI4-Stream IP核配置为Mono/Sensor视频格式,Base模式2 pixels per clk,每个色彩数据位宽为8bits关于IP核的详细技术说明可以查看《pg043_v_vid_in_axi4s.pdf》文档。

404065ebb4b93ee96f.png

VDMA(AXI Video Direct Memory Access) IP
VDMA IP核技术说明文档为《pg020_axi_vdma.pdf》。S2MM是将视频流传到DDR中,MM2S是从DDR中把图像数据传输出去。配置如下图所示

693925ebb4b9fe1e8b.png

配置VDMA为读写跟随模式。

116345ebb4ba7e9c40.png

AXI4-StreamSubsetConverter IP
实现功能:YRGB。

273805ebb4bb8c44da.png

AXI4-Stream Switch IP
实现功能:将图像复分成两路,一路用于边缘检测处理(Sobel算法),另一路直接回显

51845ebb4bcf405e2.png

YCrCbto RGB Color-SpaceConverter IP
实现功能:RGBYCrCb444

35015ebb4bdfce0db.png

810895ebb4be505fb9.png

ChromeResampler IP
实现功能:YCbCr444YCbCr422,输入24YCbCr444数据,输出16YCbCr422数据。

984925ebb4bf0e0bcf.png

Image_filter IP
Image_filter IP核源码是基于Xilinxxapp1167Sobel边缘检测算法例程,对应的HLS源码在FPGA-HLS-demos目录下,技术说明文档为《ug925-zynq-zc702-base-trd.pdf》。

382515ebb4bfc8dd5a.png

ug925-zynq-zc702-base-trd.pdf》文档附录A:Register Description -> Sobel Filter Registers小节有相关寄存器说明
318185ebb4c06c8395.png

  • 寄存器0x00:控制和状态寄存器,可控制IP核的停止和启动
  • 寄存器0x14:设置图像的行数(最大支持1920x1080
  • 寄存器0x1c:设置图像的列数
  • 寄存器0xb4Sobel滤波的高阈值
  • 寄存器0xbcSobel滤波的低阈值
  • 寄存器0xc4:反转Sobel滤波器的输出(黑白反转)
寄存器的定义也可以可查看以下文件:ip_package/xilinx_com_hls_image_filter_1_0/drivers/image_filter_v1_0/src/ximage_filter_hw.h

Video Mixer IP
Video Mixer IP核可以对多路视频进行叠加输出,为OSD IP的升级版,功能和OSD相似。本例程的作用为,将相机输入的图像,通过Mixer IP核叠加到1920*1080的视频中,最终通过HDMI输出显示。需要通过PS端,配置寄存器使能Mixer

307055ebb4c1264959.png
878915ebb4c1832f2b.png

404235ebb4c1dcc18a.png

AXI Uartlite IP
用于和CameraLink相机通信,PS端可通过该接口对CameraLink相机进行配置(分辨率、Base/Full模式等功能)。具体说明请参考pg142-axi-uartlite.pdf

116995ebb4c31c8984.png

Video Timing Controller IP
Video Timing Controller IP核用于产生分辨率为1080P60的时序,用于HDMI输出,关于IP核的详细技术说明可以查看《pg016_v_tc.pdf》文档。双击Vivado工程v_tc IP框图。在弹出的界面,点击"Default/Constant",可以看到已将Video Timing Controller IP核配置成1080P60的时序,如下图所示。

746295ebb4c40a5b87.png

AXI-Stream to video out IP
AXI-Stream to video out IP核配置视频格式为RGB1 pixels per clk,每个色彩数据位宽为8bits关于IP核的详细技术说明可以查看《pg044_v_axis_vid_out.pdf》文档。双击v_axi4s_vid_out IP核框图,查看IP核具体配置如下图。

248665ebb4c4dbf0ec.png

Clocking Wizard IP
配置一路148.5MHz的时钟,用于HDMI输出。该时钟对应的是1080P60的像素时钟。

100615ebb4c62f1784.png

若输入其他分辨率的视频,则需要修改VDMA IP核中图像大小的配置、Video Timing Controller IP的时序和Clocking Wizard IP核输出的像素时钟。

6. 案例演示
实验硬件说明
CameraLink相机参考型号:
  • 彩色RS-A5241-CC107-S00支持Full/Base分辨率2560*2048,帧率107Hz
  • l黑白RS-A5241-CM107-S00支持Full/Base分辨率2560*2048,帧率107Hz
参考下表和图将相机接到评估板CameraLink接口,显示器接到HDMI OUT接口。

模式
接口(相机-评估板)
Base
CL0-CON18

177175ebb4c898c26c.png
                    (Base模式


基于Linux系统测试
评估板上电启动进入文件系统,执行如下指令新建一个"/lib/firmware"文件夹。将由Vivado工程编译生成的xxx.bin文件传送到评估板文件系统的"/lib/firmware/"目录下,并重命名为system_wrapper.bin
参考创龙TLZ7xH-EVM评估板(Z-7045/Z-7100)用户手册《生成PL设备树及动态加载PL程序和设备树》文档,生成设备树,然后将编译好的dtbo文件拷贝到文件系统"lib/firmware"目录下。
Target#         mkdir -p /lib/firmware/

312215ebb4ce40d852.png

HDMI OUT芯片接的是PS端的I2C,需要加载PS端设备树,加载成功后如下图所示。
Target#mkdir /configfs
Target#mount -t configfs configfs /configfs
Target#mkdir /configfs/device-tree/overlays/full
Target#                echo -n zynq-zc706-overlay.dtbo >  /configfs/device-tree/overlays/full/path

305165ebb4cffe8cae.png

再加载PL端程序和设备树。可以看到AXI UART对应的节点为/dev/ttyUL1
Target#mkdir /configfs/device-tree/overlays/cameralink
Target#echo -n "pl.dtbo" > /configfs/device-tree/overlays/cameralink/path

39935ebb4d0f68765.png

将例程image目录下的脚本拷贝到文件系统,执行脚本进行配置,即可显示器看到相机采集的视频。
Target#                ./camera_init.sh base                //初始化CameraLink相机

692745ebb4d18e7e65.png
              (Base模式
脚本说明:

90965ebb4d4430857.png

Target#                ./sil9022_i2c_1080p.sh                //初始化HDMI OUT
Target#./axi_vdma_cameralink.sh                //初始化VDMA
Target#./switch_video.sh 1                //配置AXI4-Stream Switch IP核,参数1为原始图像
Target#                ./mixer_init.sh 1                //初始化Video Mixer IP核,参数1为原始图像

42715ebb4d61a75f7.png

205105ebb4d678c19a.png

Target#                ./sobel_filter_init.sh                //初始化Image_filter IP
Target#                ./mixer_init.sh 2 && ./switch_video.sh 2                //切换到算法处理后的图像

203835ebb4d7452421.png

789135ebb4d8143fee.png

对于RS-A5241的相机,Base模式下,1280*1024的分辨率状态下,图像帧率有120+帧,所以图像曝光短,图像较暗,增大Image_filter IP的阈值可以获得更好的效果。
Target#devmem 0x43c000b4 w 0xff                //设置高阈值为0xff
Target#devmem 0x43c000bc w 0xa0                //设置低阈值为0xa0

684965ebb4d9284f23.png

设置颜色反转:
Target#devmem 0x43c000c4 w 1  //0xc4寄存器设置为1边缘为白色,若为0边缘为黑色

78885ebb4d9fcd564.png

7. 资料下载
可点击以下链接或扫描二维码,获取TLZ7xH-EVM评估板详细资料及案例源码。

       896935ebb4dc0f3fe6.png



回复

使用道具 举报

94

主题

97

帖子

790

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
790
 楼主| 发表于 2020-5-13 09:52:49 | 显示全部楼层
423045ebb52dde699b.png        612845ebb52e45e323.png
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-3-28 18:29 , Processed in 0.051747 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表