- PL端接入CameraLink相機(jī),通過Base模式采集圖像(1280*1024),然后通過VDMA緩存到PS端DDR。
- 使用AXI4-Stream Switch IP核將圖像復(fù)分成兩路,一路用于邊緣檢測處理(Sobel算法),另一路直接回顯。
- 利用Video Mixer IP核將圖像疊加,通過HDMI輸出原始圖像或者算法處理后的圖像。本案例支持CameraLink Base/Full模式、彩色/黑白相機(jī)。
此開發(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核免費(fèi)license,否則將無法通過TcL腳本生成Vivado工程。 請參照創(chuàng)龍TLZ7xH-EVM評估板(ZYNQ Z-7045/Z-7100)用戶手冊《Xilinx Vivado 2017.4及License安裝教程》文檔,導(dǎo)入IP核。 成功導(dǎo)入后,點擊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 進(jìn)入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標(biāo)準(zhǔn): - 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。更詳細(xì)的說明請查閱文檔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)行重組,分離出行同步信號、場同步型號、數(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é)議標(biāo)準(zhǔn)如下圖所示。
結(jié)合CameraLink(LVDS視頻)協(xié)議標(biāo)準(zhǔn),得出4對數(shù)據(jù)通道轉(zhuǎn)換后的數(shù)據(jù)在data_in數(shù)據(jù)的排列順序如下。
2.分離出行場同步信號、數(shù)據(jù)有效信號和像素數(shù)據(jù)。
根據(jù)CameraLink協(xié)議: - RX24對應(yīng)行有效信號LVAL(行同步信號)。
- RX25對應(yīng)幀有效信號FVAL(場同步信號)。
- RX26對應(yīng)數(shù)據(jù)有效信號DVAL。
其他對應(yīng)關(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核的詳細(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核 實現(xiàn)功能:Y轉(zhuǎn)RGB。
AXI4-Stream Switch IP核 實現(xiàn)功能:將圖像復(fù)分成兩路,一路用于邊緣檢測處理(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邊緣檢測算法例程,對應(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核的停止和啟動
- 寄存器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核可以對多路視頻進(jìn)行疊加輸出,為OSD IP的升級版,功能和OSD相似。本例程的作用為,將相機(jī)輸入的圖像,通過Mixer IP核疊加到1920*1080的視頻中,最終通過HDMI輸出顯示。需要通過PS端,配置寄存器使能Mixer。
AXI Uartlite IP核 用于和CameraLink相機(jī)通信,PS端可通過該接口對CameraLink相機(jī)進(jìn)行配置(分辨率、Base/Full模式等功能)。具體說明請參考pg142-axi-uartlite.pdf。 Video Timing Controller IP核 Video Timing Controller IP核用于產(chǎn)生分辨率為1080P60的時序,用于HDMI輸出,關(guān)于IP核的詳細(xì)技術(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核的詳細(xì)技術(shù)說明可以查看《pg044_v_axis_vid_out.pdf》文檔。雙擊v_axi4s_vid_out IP核框圖,查看IP核具體配置如下圖。
Clocking Wizard IP核 配置一路148.5MHz的時鐘,用于HDMI輸出。該時鐘對應(yīng)的是1080P60的像素時鐘。 若輸入其他分辨率的視頻,則需要修改VDMA IP核中圖像大小的配置、Video Timing Controller IP的時序和Clocking Wizard IP核輸出的像素時鐘。 6.案例演示 實驗硬件說明 CameraLink相機(jī)參考型號: - 彩色RS-A5241-CC107-S00,支持Full/Base,分辨率2560*2048,幀率107Hz
- 黑白RS-A5241-CM107-S00,支持Full/Base,分辨率2560*2048,幀率107Hz
參考下表和圖將相機(jī)接到評估板CameraLink接口,顯示器接到HDMI OUT接口。
模式 | 接口(相機(jī)-評估板) | Base | CL0-CON18 |
基于Linux系統(tǒng)測試 評估板上電啟動進(jìn)入文件系統(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對應(yīng)的節(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í)行腳本進(jìn)行配置,即可在顯示器看到相機(jī)采集的視頻。 Target# ./camera_init.sh base //初始化CameraLink相機(jī)
腳本說明: 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的相機(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;邊緣為黑色
|