1、 概述
首先,我們來看一下Xilinx Application Note中經(jīng)常出現(xiàn)的一副結(jié)構(gòu)圖,圖1所示,當(dāng)然不可能所有圖都一樣,在結(jié)構(gòu)上大同小異吧。這是一個(gè)比較典型的圖像、視頻處理平臺(tái)的結(jié)構(gòu)圖。
1.1、捕獲
視頻通過HDMI接口進(jìn)來,然后經(jīng)Video Input模塊做格式變換,送入VDMA,該VDMA的作用是把數(shù)據(jù)送入在DDR3中所開辟的幀存中去。
另一種是通過攝像頭等設(shè)備獲取視頻源,經(jīng)PS/PL將數(shù)據(jù)送入DDR3。就我目前的水平而言,個(gè)人感覺從PL部分將視頻流送入DDR3最簡(jiǎn)單的方法是通過VDMA的axi4-stream接口,換句話說,將視頻流轉(zhuǎn)換為axi4-stream會(huì)降低處理難度,這種轉(zhuǎn)換和Video Input模塊的工作是類似的。
1.2、處理
該部分包含兩個(gè)VDMA和一個(gè)視頻處理模塊,一個(gè)VDMA負(fù)責(zé)從幀存中取數(shù)據(jù),然后交給處理模塊,處理完畢的結(jié)果經(jīng)另一個(gè)VDMA送回幀存
1.3、顯示
主要是顯示控制模塊,負(fù)責(zé)將數(shù)據(jù)按照標(biāo)準(zhǔn)時(shí)序輸出送至顯示器。
圖1 視頻處理、顯示平臺(tái)架構(gòu)
從圖1可以看出,整個(gè)架構(gòu)的核心是VDMA這個(gè)IP,所以搭建平臺(tái)的關(guān)鍵是掌握VDMA的使用。
2、 VDMA的使用
2.1、基本情況
我們來看一下VDMA的結(jié)構(gòu)框圖,了解一下VDMA的基本情況。
?
圖2 VDMA框圖
如圖2所示,VDMA的主要接口有3個(gè),分別為AXI4 Memory Map、AXI4-Lite、AXI4-Stream。
AXI4-Lite:
這個(gè)接口詳細(xì)是最常用的接口了,用于讀寫VDMA內(nèi)部寄存器,從而實(shí)現(xiàn)對(duì)VDMA的控制和狀態(tài)獲取。
AXI4-Stream:
寫通道(s2mm):VDMA獲取來自axis接口的數(shù)據(jù)并將之寫入幀存
讀通道(mm2s):VDMA從幀存讀取數(shù)據(jù),然后送至axis接口輸出
AXI4 Memory Map:
這個(gè)接口手冊(cè)沒有講具體作用,其實(shí)這個(gè)接口是用于操作DDR的,通過互聯(lián)模塊連接至Zynq的HP接口。
2.2、使用方法:
這部分有點(diǎn)像廢話,和其他IP一樣用就是了。
i、 新建工程
ii、 新建block design
iii、 打開IP Catalog,輸入關(guān)鍵字檢索到VDMA,或者按類別找到IP核
iv、 雙擊VDMA IP,添加IP至block design
v、 如有需要,再對(duì)IP進(jìn)行參數(shù)配置。
2.3、VDMA的配置
關(guān)于VDMA的詳細(xì)參數(shù)配置,請(qǐng)參考pg020,Product Guide,這里把我認(rèn)為比較重要的地方說一下。
i、 GenLock mode
genlock模式有4中選擇,分別為:Master、Slave、Dynamic Master、Dynamic Slave。選擇不同的模式對(duì)模塊的端口連接有不同的要求,所以這里要注意,改變模式,端口連接也要修改,如圖3、圖4所示。
?
圖3
?
?
圖4
ii、 Line Buffer Depth
Line Buffer設(shè)置不合理的話,會(huì)影響顯示效果,甚至?xí)斐蔁o顯示。
iii、 關(guān)于時(shí)鐘
剛開始上手時(shí),建議把AXI4-Lite、AXI4、AXI-Stream這三個(gè)接口的時(shí)鐘統(tǒng)一為像素時(shí)鐘。上手之后,可以嘗試三個(gè)接口使用不同的時(shí)鐘。要注意AXI4接口時(shí)鐘一定要大于等于AXI-Stream接口的時(shí)鐘,否則會(huì)造成數(shù)據(jù)丟失。
2.4、VDMA初始化流程
1. Write control information to the channel VDMACR register (Offset 0x00 for MM2S and
0x30 for S2MM) to set interrupt enables if desired, and set VDMACR.RS=1 to start the
AXI VDMA channel running.
2. Write valid video frame buffer start address to the channel START_ADDRESS register 1 to
N where N equals Frame Buffers (Offset 0x5Cup to 0x98for MM2S and 0xACup to
0xE8for S2MM). Set the REG_INDEX register if required.
3. Write a valid Frame Delay (valid only for Genlock Slave) and Stride to the channel
FRMDLY_STRIDE register (Offset 0x58for MM2S and 0xA8for S2MM).
4. Write a valid Horizontal Size to the channel HSIZE register (Offset 0x54for MM2S and
0xA4for S2MM).
5. Write a valid Vertical Size to the channel VSIZE register (Offset 0x50for MM2S and
0xA0for S2MM). This starts the channel transferring video data.
上述寄存器的作用在圖5中可以找到,某個(gè)寄存器每個(gè)bit的功能,請(qǐng)參考pg020,VDMA的Product Guide,第2章 Product Specification的Register Space小節(jié)。
?
圖5 VDMA寄存器偏移地址及作用
3、 設(shè)計(jì)舉例
3.1、邏輯設(shè)計(jì)
有了上文所做的鋪墊,相信搭建出一個(gè)顯示平臺(tái)就不是非常難了,下面,我給出一個(gè)具體的框圖,如圖6所示。(本來想用頂層的block design截圖,發(fā)現(xiàn)IP布局、連線比較亂,看不清楚)。另外,大家還可以參考xapp792,大同小異,我之前的博客也提過如何搭建HDMI的顯示平臺(tái),不過最近還是有網(wǎng)友提問如何搭建平臺(tái)。其實(shí),官網(wǎng)給出的資料往往是很具參考價(jià)值的,大家可以多多留意。
圖6 邏輯設(shè)計(jì)舉例
這是一個(gè)圖形繪制和顯示平臺(tái),不是視頻處理平臺(tái),視頻處理平臺(tái)稍有不同,一般而言,視頻處理用到genlock和我這里不一樣。圖中所有信號(hào)和連接情況都和實(shí)際設(shè)計(jì)一樣,能夠體現(xiàn)出設(shè)計(jì)思路。
vdma、axis2vout、vtc這三個(gè)IP,Vivado都是提供的,當(dāng)然也可以自己設(shè)計(jì),難度不大,這里就不說了。
3.2、軟件設(shè)計(jì)
軟件流程圖如下:
圖7 軟件流程圖
從流程圖可以看出軟件部分是很簡(jiǎn)單,這是由于顯示是PL負(fù)責(zé)的,兩者的交集在幀存,讀寫不發(fā)生沖突就可以了。當(dāng)前PL讀取的顯示畫面,總是PS繪制的上一幀內(nèi)容。如想減少PS負(fù)擔(dān),可以將清幀存的任務(wù)交由PL完成。
評(píng)論