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

PCB聯(lián)盟網(wǎng)

搜索
查看: 2389|回復: 0
收起左側(cè)

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

[復制鏈接]

678

主題

902

帖子

8293

積分

高級會員

Rank: 5Rank: 5

積分
8293
跳轉(zhuǎn)到指定樓層
樓主
發(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核,需要到官網(wǎng)下載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
模塊實現(xiàn)了將差分輸入數(shù)據(jù)轉(zhuǎn)化成并行數(shù)據(jù),參考時鐘delay_refclk_in需接200MHz或者300MHz,本例程使用PS端的200MHz的FCLK1。雙擊打開配置界面。參數(shù)N表示通道數(shù),X表示每個通道的數(shù)據(jù)差分對數(shù)量。
根據(jù)CameraLink V2.0標準:
  • Lite/Base模式:單通道,每通道數(shù)據(jù)差分對為4對,需要1個連接器。
  • Medium模式:雙通道,每通道數(shù)據(jù)差分對為4對,需要2個連接器。
  • Full/80bit模式:三通道,每通道數(shù)據(jù)差分對為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串并轉(zhuǎn)換出來的數(shù)據(jù)進行重組,分離出行同步信號、場同步型號、數(shù)據(jù)有效信號和每個像素數(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)鍵代碼解釋:
  • data_in的數(shù)據(jù)排列格式(lvds_n_x_1to7_sdr_rx模塊串轉(zhuǎn)并后的數(shù)據(jù))。
lvds_n_x_1to7_sdr_rx模塊將每一對數(shù)據(jù)差分對轉(zhuǎn)換后的數(shù)據(jù)如下(XAPP585文檔):

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

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

2.分離出行場同步信號、數(shù)據(jù)有效信號和像素數(shù)據(jù)。
根據(jù)CameraLink協(xié)議:
  • RX24對應行有效信號LVAL(行同步信號)。
  • RX25對應幀有效信號FVAL(場同步信號)。
  • RX26對應數(shù)據(jù)有效信號DVAL。
其他對應關(guān)系如下圖:
因此,根據(jù)上圖即可將各信號分離出來。
Video In to AXI4-Stream IP
Video In to AXI4-Stream IP核配置為Mono/Sensor視頻格式,Base模式2 pixels per clk,每個色彩數(shù)據(jù)位寬為8bits。關(guān)于IP核的詳細技術(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
實現(xiàn)功能:Y轉(zhuǎn)RGB。

AXI4-Stream Switch IP
實現(xiàn)功能:將圖像復分成兩路,一路用于邊緣檢測處理(Sobel算法),另一路直接回顯。
YCrCb to RGB Color-Space Converter IP
實現(xiàn)功能:RGB轉(zhuǎn)YCrCb444。
Chrome Resampler IP
實現(xiàn)功能:YCbCr444轉(zhuǎn)YCbCr422,輸入24位YCbCr444數(shù)據(jù),輸出16位YCbCr422數(shù)據(jù)。
Image_filter IP
Image_filter IP核源碼是基于Xilinx的xapp1167的Sobel邊緣檢測算法例程,對應的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核的停止和啟動
  • 寄存器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核可以對多路視頻進行疊加輸出,為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核用于產(chǎn)生分辨率為1080P60的時序,用于HDMI輸出,關(guān)于IP核的詳細技術(shù)說明可以查看《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,每個色彩數(shù)據(jù)位寬為8bits。關(guān)于IP核的詳細技術(shù)說明可以查看《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設(shè)備樹及動態(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è)備樹。可以看到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核,參數(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         //切換到算法處理后的圖像
對于RS-A5241的相機,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;邊緣為黑色


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

使用道具 舉報

發(fā)表回復

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

本版積分規(guī)則


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