以下文章來源于OpenFPGA,作者碎碎思OpenFPGA
在游戲、影視和顯示領域,4K 已經成為標配。而今天,我們就來聊聊——如何用 FPGA 實現 4K 視頻的輸入輸出與處理。
從 HDMI 1.4 到 HDMI 2.0:瓶頸與突破
目前,大多數基于 HDMI 的 FPGA 圖像處理方案,通常采用兩種思路:
直接用 FPGA IO 管腳配置為 TMDS 接收/發送模式,詳見下面鏈接;
https://github.com/Digilent/vivado-library
通過外部 HDMI PHY 收發芯片,將并行視頻數據與 TMDS 信號互轉。
這些方案在 HDMI 1.4 時代已經相當成熟,能夠實現:
最高 4K@24Hz 視頻輸入輸出
或者 1080p@120Hz 的高幀率顯示
這樣的性能足以滿足多數中低速應用,比如工業檢測、嵌入式顯示屏等。
但問題來了——
要實現更流暢的 4K@60Hz 視頻傳輸,就必須邁入 HDMI 2.0 時代。
挑戰:18 Gbps 的帶寬壓力
HDMI 2.0 標準要求帶寬高達 18 Gbps,這遠遠超過傳統 FPGA I/O 能承受的速率。
而在這類高帶寬設計中,高速串行收發器(GTH/GTY) 就成了關鍵。
在這方面,AMD Artix UltraScale+ FPGA 表現亮眼。 它內部集成的 GTH 收發器 可支持 最高 6 Gbps 的速率,完全能勝任 4K@60Hz 的傳輸需求。
這也意味著:我們終于能在一塊 FPGA 上,完整跑通 HDMI 2.0 的 4K 視頻鏈路!
架構設計:從輸入到輸出,一氣呵成
本項目的目標,是構建一個簡潔高效的 4K 視頻直通參考設計(Pass-through Design)。
簡單來說,就是——
從相機或筆記本電腦輸入 HDMI 視頻 → FPGA 處理 → 輸出到顯示器,實時顯示高分辨率畫面。
整個系統由以下幾個關鍵模塊組成:
AMD MicroBlaze 軟核處理器
負責初始化與配置各個 IP 核;
通過串口菜單提供簡易的系統控制界面;
控制時鐘發生器(Clock Wizard)和視頻參數。
HDMI RX 1.4 / 2.0 子系統
接收來自外部源(相機/筆記本)的 HDMI 信號;
將 TMDS 信號解碼為 FPGA 可處理的視頻流格式。
HDMI TX 1.4 / 2.0 子系統
將處理后的視頻流重新編碼為 TMDS 信號;
輸出到 HDMI 顯示設備(如 4K 顯示器)。
視頻物理層控制器(PHY Controller)
負責 HDMI 子系統與 FPGA 內部 GTH 收發器之間的接口;
管理數據傳輸與時鐘同步。
視頻測試模式生成器(TPG)
當沒有外部視頻輸入時,可自動生成測試圖案;
便于驗證 HDMI 輸出鏈路是否工作正常。
實踐:基于 AMD 官方參考設計
整個方案的實現基于 AMD 官方 HDMI 參考設計,在此基礎上進行了調整與優化:
增加了對 HDMI 2.0 幀率與分辨率的支持;
通過 MicroBlaze 實現靈活的軟件可配置控制;
充分利用 Artix UltraScale+ 的 GTH 特性,實現穩定的高速傳輸。
許可
我不清楚我電腦里Vivado為啥都有license,如果沒有的話可以通過官網申請試用,詳見:
xilinx_ip_license申請
這里提供一個網絡下載的license,我電腦里應該時安裝了這個,大家可以嘗試一下:
分享一波“各種各樣”的資源

創建參考設計
在 AMD Vivado 設計套件中創建設計之前,我們打開一個針對 VCU118 的項目。

項目打開后,打開 IP 庫并選擇 HDMI 1.4 / 2.0 接收器子系統。

這會將 IP 添加到項目中。選擇 IP。

右鍵單擊選定的 IP,然后選擇“打開 IP 示例設計”。

對話框打開后,選擇要存儲項目的位置。

這將打開一個針對 VCU118 的示例設計。我們需要將目標板更改為自己的開發板。

更換FPGA芯片IP會被鎖定,需要更新:

更新選定的 IP 并重新運行 IP 狀態報告,IP 現在應該顯示為最新的。

下一步是對視頻 PHY 控制器進行修改,以更新 AMD Artix UltraScale+ 設備上提供的 GTHE4。確保將時鐘原語設置為 PLL。

設計應如下所示。

在本設計中,視頻通過 TGP 從 HDMI Rx 傳輸到 HDMI Tx。為了確保能夠支持最高的分辨率和幀率,視頻像素以每時鐘 2 像素或每時鐘 4 像素的速率提供(取決于模塊的配置)。
該設計的架構如下所示。外部傳輸路徑使用 Display Port 轉 HDMI 轉換器,接收器使用 TMDS 重定時器。

在內部,視頻物理層控制器(Video Phy Controller)與 GTH 收發器相連,用于發送(Tx)和接收(Rx)操作,并為 HDMI 發送端和接收端各提供 3 條數據通道(data lane)。這些通道與 HDMI 子系統相互連接。

HDMI 解決方案需要多個 IIC 接口用于連接 HDMI Tx 和 Rx 的 DDC,這些 DDC 直接連接或來自 HDMI Tx/Rx 子系統。這些解決方案還需要 IIC 接口用于 SN65DP159RGZT 和 TMS181(驅動和均衡芯片),用于改善輸入和輸出 GTH 信號。
我們還需要第二個通道 AXI IIC 連接到時鐘發生器。該時鐘發生器提供 GTH 參考時鐘。
本次板卡的 IIC 網絡如下所示。

在 AMD MicroBlaze 處理器模塊內,添加第二個 AXI IIC 并將其信號連接到外部。

修改約束后就可以進行綜合實現了~
從 AMD Vivado 設計套件導出 XSA,有了 XSA,我們可以在 AMD Vitis 統一軟件平臺中創建一個簡單的 Hello World 應用程序。這個 Hello World 應用程序將創建一個平臺和一個應用程序。編譯并運行 Hello World 應用程序確保我們能夠在 AMD MicroBlaze 處理器上生成并運行應用程序。

現在我們知道我們有一個可行的系統,并且可以在 AMD MicroBlaze 處理器上執行程序,我們需要為 HDMI 直通創建應用軟件。
在平臺中,打開 platform.spr 文件并選擇板級支持包 (Board Support Package)。在板級支持包下,向下滾動找到 v_hdmi_rx_ss 驅動程序,然后選擇導入示例。

這將為我們提供一系列應用示例。在本例中,我們將使用 Passthrough_MicroBlaze。

這樣就創建好了應用程序。不過,我們需要對主應用程序示例進行一些修改,確保時鐘發生器芯片配置正確。
主要的修改是對條件編譯進行修改,更改正在編程的 I2C 時鐘發生器類型。默認情況下,軟件預期編程 Si5324 設備,而 我們的開發板具有瑞薩 8T49N24 時鐘發生器設備。
int I2cClk(u32 InFreq, u32 OutFreq) { int Status; //#if(!defined XPS_BOARD_ZCU104) #if(defined XPS_BOARD_ZCU104) /* Free running mode */ if(InFreq == 0) { Status = Si5324_SetClock((XPAR_IIC_0_BASEADDR), (I2C_CLK_ADDR), (SI5324_CLKSRC_XTAL), (SI5324_XTAL_FREQ), OutFreq); if(Status != (SI5324_SUCCESS)) { xil_printf("Error programming SI5324 "); return0; } } /* Locked mode */ else{ Status = Si5324_SetClock((XPAR_IIC_0_BASEADDR), (I2C_CLK_ADDR), (SI5324_CLKSRC_CLK1), InFreq, OutFreq); if(Status != (SI5324_SUCCESS)) { xil_printf("Error programming SI5324 "); return0; } } #else /* Reset I2C controller before issuing new transaction. * This is required torecover the IIC controllerincasea previous * transaction is pending. */ XIic_WriteReg(XPAR_IIC_0_BASEADDR, XIIC_RESETR_OFFSET, XIIC_RESET_MASK); /* Free running mode */ if(InFreq == 0) { Status = IDT_8T49N24x_SetClock((XPAR_IIC_0_BASEADDR), (I2C_CLK_ADDR), (IDT_8T49N24X_XTAL_FREQ), OutFreq, TRUE); if(Status != (XST_SUCCESS)) { print("Error programming IDT_8T49N241 "); return0; } } /* Locked mode */ else{ Status = IDT_8T49N24x_SetClock((XPAR_IIC_0_BASEADDR), (I2C_CLK_ADDR), InFreq, OutFreq, FALSE); if(Status != (XST_SUCCESS)) { print("Error programming IDT_8T49N241 "); return0; } } #endif return1; }
為了確保軟件應用程序能夠適應所提供的 256KB 內存,將優化級別設置為 O1。

完成這些更改后,我們就可以構建應用程序并在開發板上進行調試。完整的源代碼可以在 git 項目中獲取。
https://github.com/ATaylorCEngFIET/4K-at-60Hz
下板測試
測試非常簡單。我們需要提供一個 HDMI 接收器和一個 HDMI 源。
初始測試的 HDMI 接收器是一臺支持 4K 的顯示器和一臺支持 1080p 的小型顯示器。HDMI 源是一臺 4K 運動相機,它也可以切換輸出模式。

打開電路板并下載應用程序進行調試。

運行應用程序,將 HDMI 接收器和源連接到攝像頭,并將分辨率設置為 1080P。它會顯示正在傳輸的圖像。

運行該應用程序將通過 UART 輸出一個菜單。通過此菜單,我們可以控制在 AMD MicroBlaze 處理器上運行的應用程序。此外,我們還可以提取有關圖像處理流水線的配置和性能的信息。

按“i”將提供有關 HDMI TX 和 RX 子系統的信息。



我們還可以通過終端提取 GTH 日志。

將 HDMI 接收器連接到支持 4K 的顯示器后,我們可以看到更新后的分辨率。
最終結果
這套設計能在 FPGA 平臺上輕松實現 4K@60Hz 視頻輸入輸出,為高性能視覺系統、視頻采集卡、顯示控制器等應用提供了強大支撐。
總結:FPGA,讓 4K 不再遙遠
過去,4K 視頻處理常被認為是 GPU 或專用芯片的“主場”。 但如今,借助 AMD FPGA 強大的可編程邏輯與高速收發器, 4K@60Hz 視頻系統 已能在單片 FPGA 上靈活實現。
未來,我們可以想象更多:
視頻疊加、AI 視覺檢測、HDR 動態調節……
這些都可以通過硬件邏輯實時完成。
參考設計
https://github.com/ATaylorCEngFIET/4K-at-60Hz
-
FPGA
+關注
關注
1660文章
22394瀏覽量
635340 -
視頻
+關注
關注
6文章
2005瀏覽量
74862 -
圖像處理
+關注
關注
29文章
1342瀏覽量
59440
原文標題:FPGA 玩轉 4K 視頻輸入輸出:讓圖像處理更“絲滑”
文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
4K H265高清播放開發板, 支持4K輸入輸出
Thunderbolt 2如何實現4k視頻分辨率
哪個FPGA板能夠顯示4k視頻
Spartan 6是否能夠在60hz處理4k的輸入視頻流?
玩轉FPGA邊緣視覺——4k視頻圖像抓取
玩轉FPGA邊緣視覺——4k視頻圖像抓取
盤點2019最受歡迎的4k視頻軟件
從高清到4K,矩陣切換器帶你暢享極致視頻體驗
使用dp接口播放4K視頻的技巧
HDMI接口如何實現4K視頻傳輸
RK3576的MIPI CSI-2接口,4K視頻輸入與兼容實現技巧
如何用FPGA實現4K視頻的輸入輸出與處理
評論