PYNQ-Z2 HDMI用法- 4:視頻處理無縫開關(guān)
這篇文章增加了Sobel過濾器的開關(guān),確保屏幕保持穩(wěn)定,沒有停電。
正如標題所述,這一次我們的目標是在我們之前建立的設(shè)計基礎(chǔ)上實現(xiàn)無縫的視頻處理過渡。
這篇文章還需要先閱讀前面的部分,以便更容易實現(xiàn)。
Vivado
塊設(shè)計主要是基于前面的設(shè)計。由于早期的視頻測試模式發(fā)生器(TPG)僅用作旁路,因此我們可以用axis4流廣播器替換它。
AXI4-流廣播器是一個IP核心,它將輸入AXI4數(shù)據(jù)流復制到多個輸出通道,從而允許同時分發(fā)數(shù)據(jù)。這使得并行處理應(yīng)用程序,如視頻處理和通信系統(tǒng)。
但是,請注意,當從axi4流廣播器輸出時,它必須連接到axi4流數(shù)據(jù)FIFO;否則,不輸出任何數(shù)據(jù)。這主要是因為后續(xù)IP需要等待所有接口斷言tvalid,而S00接口不是這種情況。欲了解更多詳細信息,請參閱賽靈思的官方解釋。
對于axis4流數(shù)據(jù)FIFO復位,我們選擇在Vitis中使用GPIO來自定義何時復位。
因此,我們現(xiàn)在有兩個相同的HDMI輸入源。一個輸入通過索貝爾濾波器處理,而另一個作為旁路直接通過。這些信號中的每一個都由它自己的VDMA進行緩沖和同步處理。
從各個vdma的輸出,我們可以連接一個AXI4-stream開關(guān)或一個AXI4-stream合并器來實現(xiàn)源切換。使用axis4 -stream開關(guān)將完全切換到不同的源,這將在轉(zhuǎn)換期間導致短暫的中斷。相比之下,AXI4-stream合并器通過tuser信號對齊不同的信號,然后將它們合并(例如,將24位tdata和24位tdata合并為48位tdata)。由于信號被組合成一個單一的源——選擇tdata[47:24]或tdata[23:0]作為輸出——轉(zhuǎn)換發(fā)生時不會停電。
下面是AXI4-Stream接口中的一些關(guān)鍵信號:
?TDATA:攜帶主數(shù)據(jù)負載。
?TVALID:表示TDATA上的數(shù)據(jù)是有效的,可以傳輸。
?trready:表示下游組件準備好接收數(shù)據(jù)。
?TKEEP:標記TDATA的哪些字節(jié)通道是有效的,對于不是全寬的數(shù)據(jù)流很有用。
?TLAST:表示數(shù)據(jù)包或幀的最后一個數(shù)據(jù)字。
?TUSER:提供額外的用戶定義邊帶信息,通常用于對齊或元數(shù)據(jù)目的。
因此,您可以看到這些信號之間的關(guān)系,如下面的波形所示。
如前所述,由于確認的輸出是tdata[47:24]或tdata[23:0],我們可以編寫一個簡單的RTL代碼IP來確定使用哪一個。
首先,定義輸入和輸出。
?為了對齊來自不同源的tuser信號,AXI4-Stream Combiner將它們組合成一個2位信號。只有當兩個位都設(shè)置為1時,我們才能可靠地確定輸出數(shù)據(jù)。
?開關(guān)信號由PYNQ-Z2板上的物理開關(guān)控制,通過GPIO實現(xiàn)。
因此,只有當開關(guān)模式被確認并且來自不同源的tuser信號被對齊時,才確定當前模式。
編寫的RTL代碼可以直接拖到塊設(shè)計中以形成IP。
最后,連接AXI4-Stream子集轉(zhuǎn)換器,形成一個適當?shù)腁XI4-Stream,然后連接AXI4-Stream Data FIFO,以確保正確輸出tvalid、tuser和tready等信號。
對于PYNQ-Z2上的物理開關(guān)與通過GPIO控制信號源的關(guān)系,如下圖所示,首先從GPIO通道1讀取物理開關(guān)的值。然后,該值通過GPIO通道2輸出到自定義IP。
將物理交換機引腳配置添加到XDC后,整個模塊設(shè)計就完成了。
Vitis
要構(gòu)建新的平臺和應(yīng)用程序,或在現(xiàn)有平臺上更新XSA,您可以參考前面的帖子并按照以下方式更新代碼:
需要注意的一點是,你必須在for循環(huán)中包含以下兩行;否則,只輸出第一幀。
結(jié)果
本文編譯自hackster.io