基于ZYNQ的CameraLink圖像采集與邊緣檢測(cè)開發(fā)詳解
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1.
案例說明
(1) PL端接入CameraLink相機(jī),通過Base模式采集圖像(1280*1024),然后通過VDMA緩存到PS端DDR。
(2) 使用AXI4-Stream Switch IP核將圖像復(fù)分成兩路,一路用于邊緣檢測(cè)處理(Sobel算法),另一路直接回顯。
(3) 利用Video Mixer IP核將圖像疊加,通過HDMI輸出原始圖像或者算法處理后的圖像。
本案例支持CameraLink Base/Full模式、彩色/黑白相機(jī)。
此開發(fā)詳解基于創(chuàng)龍ZYNQ Z-7045/Z-7100評(píng)估板TLZ7xH-EVM展開。

TLZ7xH-EVM評(píng)估板
2.
案例框圖

3.
申請(qǐng)IP核license
本開發(fā)案例使用的Video Mixer和Chroma Resampler IP核,需要到官網(wǎng)下載IP核免費(fèi)license,否則將無法通過TcL腳本生成Vivado工程。
請(qǐng)參照創(chuàng)龍TLZ7xH-EVM評(píng)估板(ZYNQ Z-7045/Z-7100)用戶手冊(cè)《Xilinx Vivado 2017.4及License安裝教程》文檔,導(dǎo)入IP核。

成功導(dǎo)入后,點(diǎn)擊View License Status可以查看新添加的IP核license如下圖。

4.
Vivado工程說明
參照創(chuàng)龍TLZ7xH-EVM評(píng)估板(ZYNQ Z-7045/Z-7100)《基于TcL腳本生成Vivado工程及編譯》文檔,使用TcL腳本生成Vivado工程。
(1)生成評(píng)估板TLZ7xH-EVM、ZYNQ型號(hào)為xc7z100的Vivado工程:
Vivado# vivado -mode batch -source tl_cameralink_edge_display_project.tcl -tclargs tlz7xh-evm xc7z100ffg900-2
(2)生成評(píng)估板TLZ7xH-EVM、ZYNQ型號(hào)為xc7z045的Vivado工程:
Vivado# vivado -mode batch -source tl_cameralink_display_project.tcl -tclargs tlz7xh-evm xc7z045ffg900-2
進(jìn)入Vivado工程所在的runs路徑,雙擊.xpr文件打開工程。

點(diǎn)擊"IP INTEGRATOR -> Open Block Design",打開Vivado工程如下圖所示。

Base模式
點(diǎn)擊Address Editor選項(xiàng),可以看到IP核分配的地址,在PS端可以通過配置這些地址(寄存器)來控制IP核。

5.
IP核與模塊簡(jiǎn)介
lvds_n_x_1to7_sdr_rx模塊

源碼路徑:
hw\src\hdl\lvds_n_x_1to7_sdr_rx.v

模塊實(shí)現(xiàn)了將差分輸入數(shù)據(jù)轉(zhuǎn)化成并行數(shù)據(jù),參考時(shí)鐘delay_refclk_in需接200MHz或者300MHz,本例程使用PS端的200MHz的FCLK1。雙擊打開配置界面。參數(shù)N表示通道數(shù),X表示每個(gè)通道的數(shù)據(jù)差分對(duì)數(shù)量。
根據(jù)CameraLink V2.0標(biāo)準(zhǔn):
-
Lite/Base模式:單通道,每通道數(shù)據(jù)差分對(duì)為4對(duì),需要1個(gè)連接器。
-
Medium模式:雙通道,每通道數(shù)據(jù)差分對(duì)為4對(duì),需要2個(gè)連接器。
-
Full/80bit模式:三通道,每通道數(shù)據(jù)差分對(duì)為4對(duì),需要2個(gè)連接器。
配置N=1表示使用Base模式,N=2為Medium模式,N=3為Full模式。X固定為4。更詳細(xì)的說明請(qǐng)查閱文檔xapp585-lvds-source-synch-serdes-clock-multiplication.pdf。

cameralink_bit_allocation_rx模塊

源碼路徑:
hw\src\hdl\cameralink_bit_allocation_rx.v

功能:將lvds_n_x_1to7_sdr_rx模塊Serdes串并轉(zhuǎn)換出來的數(shù)據(jù)進(jìn)行重組,分離出行同步信號(hào)、場(chǎng)同步型號(hào)、數(shù)據(jù)有效信號(hào)和每個(gè)像素?cái)?shù)據(jù)。參數(shù)N表示通道數(shù)量和lvds_n_x_1to7_sdr_rx模塊功能一致。
-
N=1,Base模式,輸出端PortA、PortB、PortC有效。
-
N=2,Meduim模式,輸出端PortA、PortB、PortC、PortD、PortE、PortF有效。
-
N=3,F(xiàn)ull模式,輸出端PortA、PortB、PortC、PortD、PortE、PortF、PortG、PortH有效。
關(guān)鍵代碼解釋:

(1) data_in的數(shù)據(jù)排列格式(lvds_n_x_1to7_sdr_rx模塊串轉(zhuǎn)并后的數(shù)據(jù))。
lvds_n_x_1to7_sdr_rx模塊將每一對(duì)數(shù)據(jù)差分對(duì)轉(zhuǎn)換后的數(shù)據(jù)如下(XAPP585文檔):

CameraLink(LVDS視頻)協(xié)議標(biāo)準(zhǔn)如下圖所示。

結(jié)合CameraLink(LVDS視頻)協(xié)議標(biāo)準(zhǔn),得出4對(duì)數(shù)據(jù)通道轉(zhuǎn)換后的數(shù)據(jù)在data_in數(shù)據(jù)的排列順序如下。

(2) 分離出行場(chǎng)同步信號(hào)、數(shù)據(jù)有效信號(hào)和像素?cái)?shù)據(jù)。
根據(jù)CameraLink協(xié)議:
-
RX24對(duì)應(yīng)行有效信號(hào)LVAL(行同步信號(hào))。
-
RX25對(duì)應(yīng)幀有效信號(hào)FVAL(場(chǎng)同步信號(hào))。
-
RX26對(duì)應(yīng)數(shù)據(jù)有效信號(hào)DVAL。
其他對(duì)應(yīng)關(guān)系如下圖:

因此,根據(jù)上圖即可將各信號(hào)分離出來。

Video In to AXI4-Stream IP核

Video In to AXI4-Stream IP核配置為Mono/Sensor視頻格式,Base模式2 pixels per clk,每個(gè)色彩數(shù)據(jù)位寬為8bits。關(guān)于IP核的詳細(xì)技術(shù)說明可以查看《pg043_v_vid_in_axi4s.pdf》文檔。

VDMA(AXI Video Direct Memory Access) IP核

VDMA IP核技術(shù)說明文檔為《pg020_axi_vdma.pdf》。S2MM是將視頻流傳到DDR中,MM2S是從DDR中把圖像數(shù)據(jù)傳輸出去。配置如下圖所示。

配置VDMA為讀寫跟隨模式。

AXI4-Stream Subset Converter IP核

實(shí)現(xiàn)功能:Y轉(zhuǎn)RGB。

AXI4-Stream Switch IP核

實(shí)現(xiàn)功能:將圖像復(fù)分成兩路,一路用于邊緣檢測(cè)處理(Sobel算法),另一路直接回顯。

YCrCb to RGB Color-Space Converter IP核

實(shí)現(xiàn)功能:RGB轉(zhuǎn)YCrCb444。

Chrome Resampler IP核

實(shí)現(xiàn)功能:YCbCr444轉(zhuǎn)YCbCr422,輸入24位YCbCr444數(shù)據(jù),輸出16位YCbCr422數(shù)據(jù)。

Image_filter IP核

Image_filter IP核源碼是基于Xilinx的xapp1167的Sobel邊緣檢測(cè)算法例程,對(duì)應(yīng)的HLS源碼在FPGA-HLS-demos目錄下,技術(shù)說明文檔為《ug925-zynq-zc702-base-trd.pdf》。

《ug925-zynq-zc702-base-trd.pdf》文檔附錄A:Register Description -> Sobel Filter Registers小節(jié)有相關(guān)寄存器說明。

-
寄存器0x00:控制和狀態(tài)寄存器,可控制IP核的停止和啟動(dòng)
-
寄存器0x14:設(shè)置圖像的行數(shù)(最大支持1920x1080)
-
寄存器0x1c:設(shè)置圖像的列數(shù)
-
寄存器0xb4:Sobel濾波的高閾值
-
寄存器0xbc:Sobel濾波的低閾值
-
寄存器0xc4:反轉(zhuǎn)Sobel濾波器的輸出(黑白反轉(zhuǎn))
寄存器的定義也可以可查看以下文件: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核可以對(duì)多路視頻進(jìn)行疊加輸出,為OSD IP的升級(jí)版,功能和OSD相似。本例程的作用為,將相機(jī)輸入的圖像,通過Mixer IP核疊加到1920*1080的視頻中,最終通過HDMI輸出顯示。需要通過PS端,配置寄存器使能Mixer。



AXI Uartlite IP核

用于和CameraLink相機(jī)通信,PS端可通過該接口對(duì)CameraLink相機(jī)進(jìn)行配置(分辨率、Base/Full模式等功能)。具體說明請(qǐng)參考pg142-axi-uartlite.pdf。

Video Timing Controller IP核

Video Timing Controller IP核用于產(chǎn)生分辨率為1080P60的時(shí)序,用于HDMI輸出,關(guān)于IP核的詳細(xì)技術(shù)說明可以查看《pg016_v_tc.pdf》文檔。雙擊Vivado工程v_tc IP核框圖。在彈出的界面,點(diǎn)擊"Default/Constant",可以看到已將Video Timing Controller IP核配置成1080P60的時(shí)序,如下圖所示。

AXI-Stream to video out IP核

AXI-Stream to video out IP核配置視頻格式為RGB,1 pixels per clk,每個(gè)色彩數(shù)據(jù)位寬為8bits。關(guān)于IP核的詳細(xì)技術(shù)說明可以查看《pg044_v_axis_vid_out.pdf》文檔。雙擊v_axi4s_vid_out IP核框圖,查看IP核具體配置如下圖。

Clocking Wizard IP核

配置一路148.5MHz的時(shí)鐘,用于HDMI輸出。該時(shí)鐘對(duì)應(yīng)的是1080P60的像素時(shí)鐘。

若輸入其他分辨率的視頻,則需要修改VDMA IP核中圖像大小的配置、Video Timing Controller IP的時(shí)序和Clocking Wizard IP核輸出的像素時(shí)鐘。
6.
案例演示
實(shí)驗(yàn)硬件說明

CameraLink相機(jī)參考型號(hào):
-
彩色RS-A5241-CC107-S00,支持Full/Base,分辨率2560*2048,幀率107Hz
-
黑白R(shí)S-A5241-CM107-S00,支持Full/Base,分辨率2560*2048,幀率107Hz
參考下表和圖將相機(jī)接到評(píng)估板CameraLink接口,顯示器接到HDMI OUT接口。


基于Linux系統(tǒng)測(cè)試

評(píng)估板上電啟動(dòng)進(jìn)入文件系統(tǒng),執(zhí)行如下指令新建一個(gè)"/lib/firmware"文件夾。將由Vivado工程編譯生成的xxx.bin文件傳送到評(píng)估板文件系統(tǒng)的"/lib/firmware/"目錄下,并重命名為system_wrapper.bin。
參考創(chuàng)龍TLZ7xH-EVM評(píng)估板(Z-7045/Z-7100)用戶手冊(cè)《生成PL設(shè)備樹及動(dòng)態(tài)加載PL程序和設(shè)備樹》文檔,生成設(shè)備樹,然后將編譯好的dtbo文件拷貝到文件系統(tǒng)"lib/firmware"目錄下。
Target# mkdir -p /lib/firmware/

HDMI OUT芯片接的是PS端的I2C,需要加載PS端設(shè)備樹,加載成功后如下圖所示。
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端程序和設(shè)備樹??梢钥吹紸XI UART對(duì)應(yīng)的節(jié)點(diǎn)為/dev/ttyUL1。
Target# mkdir /configfs/device-tree/overlays/cameralink
Target# echo -n "pl.dtbo" > /configfs/device-tree/overlays/cameralink/path

將例程image目錄下的腳本拷貝到文件系統(tǒng),執(zhí)行腳本進(jìn)行配置,即可在顯示器看到相機(jī)采集的視頻。
Target# ./camera_init.sh base //初始化CameraLink相機(jī)

Base模式
腳本說明:

Target# ./sil9022_i2c_1080p.sh //初始化HDMI OUT
Target# ./axi_vdma_cameralink.sh //初始化VDMA
Target# ./switch_video.sh 1 //配置AXI4-Stream Switch IP核,參數(shù)1為原始圖像
Target# ./mixer_init.sh 1 //初始化Video Mixer IP核,參數(shù)1為原始圖像


Target# ./sobel_filter_init.sh //初始化Image_filter IP核
Target# ./mixer_init.sh 2 && ./switch_video.sh 2 //切換到算法處理后的圖像


對(duì)于RS-A5241的相機(jī),Base模式下,1280*1024的分辨率狀態(tài)下,圖像幀率有120+幀,所以圖像曝光短,圖像較暗,增大Image_filter IP的閾值可以獲得更好的效果。
Target# devmem 0x43c000b4 w 0xff //設(shè)置高閾值為0xff
Target# devmem 0x43c000bc w 0xa0 //設(shè)置低閾值為0xa0

設(shè)置顏色反轉(zhuǎn):
Target# devmem 0x43c000c4 w 1 //0xc4寄存器設(shè)置為1,邊緣為白色,若為0;邊緣為黑色
