Bridge from "Video In to AXI4-stream" to "AXI4-stream to Video Out" directly with VTC without VDMA

xilinx vivado下通常的視頻流設計,都採用Vid In to axi4 stream --> VDMA write --> MM --> VDMA read --> axi4 stream to video out這樣的路徑。網上例子很多,官方參考也有xapp521,實現起來參考無壓力。

但這套方案明顯的問題是,緩存圖像帶來幀延遲,對於一些延遲要求高的任務,反倒不希望有VDMA的參與。此外,對於一些簡單的應用,不希望有Zynq PS核的參與配置,簡化系統複雜度。因此我就有了 "Video In to AXI4-stream"  to "AXI4-stream to Video Out" directly with VTC without VDMA的需求。

看過好幾個Xilinx的product guide(pg043 vid_in_axi4s)和其他的第三方參考(AVNET的《building a video design from scratch tutorial》https://download.csdn.net/download/lalachi/6901157?utm_source=bbsseo)都明確說可以實現如下圖的框架。不需要VDMA的參與。但是沒有官方的XAPP,按照這個框架搭建後,調試很久視頻都不能正常顯示。

網上有些帖子,給出了一些建議參考,如

https://blog.csdn.net/angelbosj/article/details/50177517

https://blog.csdn.net/dimples_Song/article/details/84073416

https://forums.xilinx.com/t5/Processor-System-Design/Axi-Video-in-direct-to-Axi-Video-out-with-VTC/td-p/306461

https://blog.csdn.net/angelbosj/article/details/50117205

https://blog.csdn.net/u010942671/article/details/71598585

https://blog.csdn.net/a1254484594/article/details/104483133/

但是,或多或少都沒有說明白的地方,配置GUI沒有展開細說,我照着搭建依舊出現很多困難,沒有成功。但反覆琢磨上面幾個例子的異同,反覆讀了pg043,pg016,pg044幾份文檔細節,終於找到了出路。現在總結如下。

1.先上總設計框圖

我是SDI輸入輸出(1920x1080@30P),用的GS2971和GS2972的組合,其他在頂層verilog測試好了,數據data、同步de/hs/vs直通顯示是沒有問題的,在這個基礎上添加了上述的IP,把同步視頻流轉到axi4-stream總線上。

該框圖設計在top.v接口代碼如下:

design_1_wrapper sSDI_design
(
    .sdi_clk_in1(wClkSDI),
    .sdi_data_in1({DOUT[9:2],{DOUT[19:12]}}),
    .sdi_de_in1(SDI_IN_DE),
    .sdi_hs_in1(SDI_IN_H),
    .sdi_vs_in1(SDI_IN_V),
    
    .sdi_data_out1({DIN[9:2],DIN[19:12]}),
    .sdi_de_out1(SDI_OUT_DE),
    .sdi_hs_out1(SDI_OUT_H),
    .sdi_vs_out1(SDI_OUT_V)
);

框圖沒什麼難點,關鍵是一些細節的連線,和IP內部的設置,下面展開講講要注意的地方。

 

2. Video in to AXI4-stream下的配置

關於axis_enable管腳。

(1)axis_enable可以直接接“1”拉高,實測沒有問題。

(2)這裏我把axis_enable接了vtc的INTC中的第8位(Detect Locked信號),是參考文檔上的描述,這樣更準確。

 

(pg043 pp10) 

(pg016 pp12)

(pg016 pp25)

(3)去INTC中第8位出來的IP使用slice來截取。IP配置如下

 

3. Video Timing Controller的配置

(1)注意synchronize generator to detector or fsync_in前的“勾"不能選!   選了就會顯示輸出不了。如果想讓輸入和輸出同步,怎麼弄我還沒有搞明白,後續在研究。

(2) 不能選輸入和輸出同步,意味着enable detector可以不選,因此detect video in 的timing實際上沒有必要。也就意味着video in的timing_out可以不用接到vtc的timing_in上。實測也是工作的。

(3)第二頁,選1080p的時序模式

4. AXI4-stream to Video Out的配置

(1)這種沒有VDMA的框架下timing mode要選slave模式。

爲什麼,具體解釋參見pg044, pp21-22

 

換言之,如果包含VDMA的框架,這裏要選master模式。 

(2)vid_out輸出管腳vtg_ce必須要接到vtc的gen_clken上,它的作用是slave模式下保證vid_out和vtc的同步。

(pg044 pp10)

 

5. aclken,reset等等爲安全穩妥起見,連接按圖上拉或下拉即可。

6.實測運行,顯示正常。

補記:

1.我又精簡了一下,vtc沒有使能detector的模式,實測OK

2. 又測試了下vtc使能detector,並且使能了auto generation mode,測試也顯示正常。(注意,這次意外的忘了連det_clken,也沒什麼異常)

 

3. 關於synchronize detector to generater選項何時可以用的思考。

前面測試了無VMDA的video_out工作在slave模式,時序同步是通過vtc_ce反向傳給gen_clken完成的。這種情形不允許,generator與detector同步。

那麼在有VDMA參與的video out工作在master模式下呢?我返回了一個包含VDMA的工程,我們把vtc_ce反饋撤掉(之前也是把vtc_ce接到gen_clken的),gen_clken常拉高置1,此時再給vtc設置爲synchronize detector to generater 打勾。這種情形下,輸出可以與輸入信號同步了,實測成功,顯示正常。這樣就實現了輸出與輸入的幀頻同步了。

 

 .

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章