電子產業(yè)一站式賦能平臺

PCB聯(lián)盟網

搜索
查看: 2290|回復: 0
收起左側

基于ZYNQ的CameraLink圖像采集與邊緣檢測開發(fā)詳解

[復制鏈接]

678

主題

902

帖子

8293

積分

高級會員

Rank: 5Rank: 5

積分
8293
跳轉到指定樓層
樓主
發(fā)表于 2020-5-11 16:10:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  • 案例說明
  • PL端接入CameraLink相機,通過Base模式采集圖像(1280*1024),然后通過VDMA緩存到PS端DDR。
  • 使用AXI4-Stream Switch IP核將圖像復分成兩路,一路用于邊緣檢測處理(Sobel算法),另一路直接回顯。
  • 利用Video Mixer IP核將圖像疊加,通過HDMI輸出原始圖像或者算法處理后的圖像。本案例支持CameraLink Base/Full模式、彩色/黑白相機。
此開發(fā)詳解基于創(chuàng)龍ZYNQ Z-7045/Z-7100評估板TLZ7xH-EVM展開。
增加TLZ7xH-EVM視頻播放框
2.案例框圖
3.申請IP核license
本開發(fā)案例使用的Video Mixer和Chroma Resampler IP核,需要到官網下載IP核免費license,否則將無法通過TcL腳本生成Vivado工程。
請參照創(chuàng)龍TLZ7xH-EVM評估板(ZYNQ Z-7045/Z-7100)用戶手冊《Xilinx Vivado 2017.4及License安裝教程》文檔,導入IP核。
成功導入后,點擊View License Status可以查看新添加的IP核license如下圖。
4.Vivado工程說明
參照創(chuàng)龍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工程如下圖所示。
點擊Address Editor選項,可以看到IP核分配的地址,在PS端可以通過配置這些地址(寄存器)來控制IP核。
5.IP核與模塊簡介
lvds_n_x_1to7_sdr_rx模塊
源碼路徑:hw\src\hdl\lvds_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模塊
源碼路徑:hw\src\hdl\cameralink_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有效。
關鍵代碼解釋:
  • data_in的數據排列格式(lvds_n_x_1to7_sdr_rx模塊串轉并后的數據)。
lvds_n_x_1to7_sdr_rx模塊將每一對數據差分對轉換后的數據如下(XAPP585文檔):

CameraLink(LVDS視頻)協(xié)議標準如下圖所示。

結合CameraLink(LVDS視頻)協(xié)議標準,得出4對數據通道轉換后的數據在data_in數據的排列順序如下。

2.分離出行場同步信號、數據有效信號和像素數據。
根據CameraLink協(xié)議:
  • 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-Stream Subset Converter IP
實現功能:Y轉RGB。

AXI4-Stream Switch IP
實現功能:將圖像復分成兩路,一路用于邊緣檢測處理(Sobel算法),另一路直接回顯。
YCrCb to RGB Color-Space Converter IP
實現功能:RGB轉YCrCb444
Chrome Resampler IP
實現功能: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小節(jié)有相關寄存器說明
  • 寄存器0x00:控制和狀態(tài)寄存器,可控制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-Stream to 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接口。

模式
接口(相機-評估板)
Base
CL0-CON18
基于Linux系統(tǒng)測試
評估板上電啟動進入文件系統(tǒng),執(zhí)行如下指令新建一個"/lib/firmware"文件夾。將由Vivado工程編譯生成的xxx.bin文件傳送到評估板文件系統(tǒng)的"/lib/firmware/"目錄下,并重命名為system_wrapper.bin。
參考創(chuàng)龍TLZ7xH-EVM評估板(Z-7045/Z-7100)用戶手冊《生成PL設備樹及動態(tài)加載PL程序和設備樹》文檔,生成設備樹,然后將編譯好的dtbo文件拷貝到文件系統(tǒng)"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對應的節(jié)點為/dev/ttyUL1。
Target# mkdir /configfs/device-tree/overlays/cameralink
Target#        echo -n "pl.dtbo" > /configfs/device-tree/overlays/cameralink/path
將例程image目錄下的腳本拷貝到文件系統(tǒng),執(zhí)行腳本進行配置,即可在顯示器看到相機采集的視頻。
Target#        ./camera_init.sh base             //初始化CameraLink相機

腳本說明:
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的分辨率狀態(tài)下,圖像幀率有120+幀,所以圖像曝光短,圖像較暗,增大Image_filter IP的閾值可以獲得更好的效果。
Target#        devmem 0x43c000b4 w 0xff       //設置高閾值為0xff
Target#        devmem 0x43c000bc w 0xa0             //設置低閾值為0xa0
設置顏色反轉:
Target#        devmem 0x43c000c4 w 1  //0xc4寄存器設置為1,邊緣為白色,若為0;邊緣為黑色


嵌入式DSP、ARM、FPGA多核技術開發(fā),學習資料下載:http://site.tronlong.com/pfdownload
回復

使用道具 舉報

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關注微信 下載APP 返回頂部 返回列表