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

1.
案例说明
(1) pl端接入cameralink相机,通过base模式采集图像(1280*1024),然后通过vdma缓存到ps端ddr。
(2)使用axi4-stream switch ip核将图像复分成两路,一路用于边缘检测处理(sobel算法),另一路直接回显。
(3)利用video mixer ip核将图像叠加,通过hdmi输出原始图像或者算法处理后的图像。
本案例支持cameralink base/full模式、彩色/黑白相机。
此开发详解基于创龙zynq z-7045/z-7100评估板tlz7xh-evm展开。
tlz7xh-evm评估板
2.
案例框图
3.
申请ip核license
本开发案例使用的video mixer和chroma resampler ip核,需要到官网下载ip核免费license,否则将无法通过tcl脚本生成vivado工程。
请参照创龙tlz7xh-evm评估板(zynq z-7045/z-7100)用户手册《xilinx vivado 2017.4及license安装教程》文档,导入ip核。
成功导入后,点击view license status可以查看新添加的ip核license如下图。
4.
vivado工程说明
参照创龙tlz7xh-evm评估板(zynq z-7045/z-7100)《基于tcl脚本生成vivado工程及编译》文档,使用tcl脚本生成vivado工程。
(1)生成评估板tlz7xh-evm、zynq型号为xc7z100的vivado工程:
vivado#vivado -mode batch -source tl_cameralink_edge_display_project.tcl -tclargs tlz7xh-evm xc7z100ffg900-2
(2)生成评估板tlz7xh-evm、zynq型号为xc7z045的vivado工程:
vivado#vivado -mode batch -source tl_cameralink_display_project.tcl -tclargs tlz7xh-evm xc7z045ffg900-2
进入vivado工程所在的runs路径,双击.xpr文件打开工程。
点击ip integrator -> open block design,打开vivado工程如下图所示。
base模式
点击address editor选项,可以看到ip核分配的地址,在ps端可以通过配置这些地址(寄存器)来控制ip核。
5.
ip核与模块简介
lvds_n_x_1to7_sdr_rx模块
源码路径:
hwsrchdllvds_n_x_1to7_sdr_rx.v
模块实现了将差分输入数据转化成并行数据,参考时钟delay_refclk_in需接200mhz或者300mhz,本例程使用ps端的200mhz的fclk1。双击打开配置界面。参数n表示通道数,x表示每个通道的数据差分对数量。
根据cameralink v2.0标准:
lite/base模式:单通道,每通道数据差分对为4对,需要1个连接器。
medium模式:双通道,每通道数据差分对为4对,需要2个连接器。
full/80bit模式:三通道,每通道数据差分对为4对,需要2个连接器。
配置n=1表示使用base模式,n=2为medium模式,n=3为full模式。x固定为4。更详细的说明请查阅文档xapp585-lvds-source-synch-serdes-clock-multiplication.pdf。
cameralink_bit_allocation_rx模块
源码路径:
hwsrchdlcameralink_bit_allocation_rx.v
功能:将lvds_n_x_1to7_sdr_rx模块serdes串并转换出来的数据进行重组,分离出行同步信号、场同步型号、数据有效信号和每个像素数据。参数n表示通道数量和lvds_n_x_1to7_sdr_rx模块功能一致。
n=1,base模式,输出端porta、portb、portc有效。
n=2,meduim模式,输出端porta、portb、portc、portd、porte、portf有效。
n=3,full模式,输出端porta、portb、portc、portd、porte、portf、portg、porth有效。
关键代码解释:
(1) data_in的数据排列格式(lvds_n_x_1to7_sdr_rx模块串转并后的数据)。
lvds_n_x_1to7_sdr_rx模块将每一对数据差分对转换后的数据如下(xapp585文档):
cameralink(lvds视频)协议标准如下图所示。
结合cameralink(lvds视频)协议标准,得出4对数据通道转换后的数据在data_in数据的排列顺序如下。
(2)分离出行场同步信号、数据有效信号和像素数据。
根据cameralink协议:
rx24对应行有效信号lval(行同步信号)。
rx25对应帧有效信号fval(场同步信号)。
rx26对应数据有效信号dval。
其他对应关系如下图:
因此,根据上图即可将各信号分离出来。
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》文档。
vdma(axi video direct memory access) ip核
vdma ip核技术说明文档为《pg020_axi_vdma.pdf》。s2mm是将视频流传到ddr中,mm2s是从ddr中把图像数据传输出去。配置如下图所示。
配置vdma为读写跟随模式。
axi4-streamsubsetconverterip核
实现功能:y转rgb。
axi4-stream switch ip核
实现功能:将图像复分成两路,一路用于边缘检测处理(sobel算法),另一路直接回显。
ycrcbtorgb color-spaceconverterip核
实现功能:rgb转ycrcb444。
chromeresamplerip核
实现功能:ycbcr444转ycbcr422,输入24位ycbcr444数据,输出16位ycbcr422数据。
image_filter ip核
image_filter ip核源码是基于xilinx的xapp1167的sobel边缘检测算法例程,对应的hls源码在fpga-hls-demos目录下,技术说明文档为《ug925-zynq-zc702-base-trd.pdf》。
《ug925-zynq-zc702-base-trd.pdf》文档附录a:register description -> sobel filter registers小节有相关寄存器说明。
寄存器0x00:控制和状态寄存器,可控制ip核的停止和启动
寄存器0x14:设置图像的行数(最大支持1920x1080)
寄存器0x1c:设置图像的列数
寄存器0xb4:sobel滤波的高阈值
寄存器0xbc:sobel滤波的低阈值
寄存器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。
axi uartlite ip核
用于和cameralink相机通信,ps端可通过该接口对cameralink相机进行配置(分辨率、base/full模式等功能)。具体说明请参考pg142-axi-uartlite.pdf。
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的时序,如下图所示。
axi-streamto video out ip核
axi-stream to video out ip核配置视频格式为rgb,1 pixels per clk,每个色彩数据位宽为8bits。关于ip核的详细技术说明可以查看《pg044_v_axis_vid_out.pdf》文档。双击v_axi4s_vid_out ip核框图,查看ip核具体配置如下图。
clocking wizard ip核
配置一路148.5mhz的时钟,用于hdmi输出。该时钟对应的是1080p60的像素时钟。
若输入其他分辨率的视频,则需要修改vdma ip核中图像大小的配置、video timing controller ip的时序和clocking wizard ip核输出的像素时钟。
6.
案例演示
实验硬件说明
cameralink相机参考型号:
彩色rs-a5241-cc107-s00,支持full/base,分辨率2560*2048,帧率107hz
黑白rs-a5241-cm107-s00,支持full/base,分辨率2560*2048,帧率107hz
参考下表和图将相机接到评估板cameralink接口,显示器接到hdmi out接口。
基于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/
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
再加载pl端程序和设备树。可以看到axi uart对应的节点为/dev/ttyul1。
target#mkdir /configfs/device-tree/overlays/cameralink
target#echo -n pl.dtbo > /configfs/device-tree/overlays/cameralink/path
将例程image目录下的脚本拷贝到文件系统,执行脚本进行配置,即可在显示器看到相机采集的视频。
target#./camera_init.sh base //初始化cameralink相机
base模式
脚本说明:
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为原始图像
target#./sobel_filter_init.sh //初始化image_filter ip核
target#./mixer_init.sh 2 && ./switch_video.sh 2 //切换到算法处理后的图像
对于rs-a5241的相机,base模式下,1280*1024的分辨率状态下,图像帧率有120+帧,所以图像曝光短,图像较暗,增大image_filter ip的阈值可以获得更好的效果。
target#devmem 0x43c000b4 w 0xff //设置高阈值为0xff
target#devmem 0x43c000bc w 0xa0 //设置低阈值为0xa0
设置颜色反转:
target#devmem 0x43c000c4 w 1 //0xc4寄存器设置为1,边缘为白色,若为0;边缘为黑色

基于STC12C5A60S2单片机的无线方向盘设计
GPRS网络的PLC分布式控制系统
苹果13promax最高预售价格是多少
随着智能家居的发展,电信运营商该如何才能抢夺市场?
“快递最后一公里”难题将被攻克,快递机器人有望6月上岗
基于ZYNQ的CameraLink图像采集与边缘检测开发详解
BLE的系统级芯片与蜂窝物联网芯片的区别
PORON(R)电动汽车电池衬垫材料产品组合,延长了电动汽车电池的寿命
智慧物流开启了怎样的新模式
莫大康:台积电兴建8英寸生产线的思考
基于单片机C8051F410的精确信号模拟电路设计
生活中的静电知识
自动化法律咨询人工智能和专家系统
LIFAair新品润宝宝加湿器,帮助我们击退秋冬干燥
dfrobotLilyPad SimpleSnap主板介绍
2021年人工智能的四大趋势
中国移动建成全球规模最大5G网络
萨科微以新技术引领公司发展
适合iPhone13的分体式耳机有哪些?分体式蓝牙耳机推荐
拙进通信发布RFID技术新产品:智能校徽