1 什么是VCU?
VCU 的全稱是 Video Codec Unit,即視頻編解碼單元, Zynq UltraScale+ MPSoC 系列產品分為三種類型,分別是 CG 型器件、 EG 型器件和 EV 型器件, 其中只有 EV 型器件集成了 VCU。 VCU 適用于視頻監控和網絡視頻連接應用,這些應用包括視頻會議、嵌入式視覺、生物醫學儀器等。
它是一個專用的、硬化的硬件IP核,集成在 Zynq UltraScale+ MPSoC 的 PL 端。它的核心任務是高效地完成視頻的編碼 和解碼。
編碼:將原始視頻數據壓縮成標準格式的視頻流,以節省存儲空間和傳輸帶寬。
解碼:將壓縮后的視頻流解壓縮,還原成可以顯示或進一步處理的原始視頻數據。
由于其是硬件實現的,VCU 在完成這些任務時,具有高性能、低延遲、低功耗的特點,遠勝于使用可編程邏輯或處理器軟件實現的方式。

2 VCU 的核心特性與性能
VCU 的性能非常強悍,主要支持最流行的現代視頻編碼標準。
支持的編解碼標準:
H.264 / AVC
H.265 / HEVC
主要性能指標:
分辨率與幀率:最高支持 4Kp60 的實時編解碼。對于某些較低分辨率或特定配置,甚至可以支持到 4Kp120。
編碼能力:
同時進行 1 路 4Kp60 的 H.264 和 H.265 編碼。
或者同時進行 2 路 4Kp30 的 H.264 和 H.265 編碼。
解碼能力:
同時進行 2 路 4Kp60 的 H.264 和 H.265 解碼。
色度采樣:支持 4:2:0 和 4:2:2 格式。
位深度:支持 8 位和 10 位。

由上圖可知, VCU 擁有獨立的視頻編碼單元(Encoder)和解碼單元(Decoder),每個單元受微控制器單元(MCU)控制, MCU 控制來自 AXI 接口的待編碼或解碼的數據流。 APU 向解碼器或編碼器 MCU 單元發出命令, 用于在編碼時處理每一幀或在解碼時處理每個片或塊。需要注意的是, VCU 不支持對音頻編解碼, 音頻編碼和解碼可以在軟件中使用 PS 或通過軟 IP 在 PL 中完成。
3 VCU IP核接口



4 VCU內部介紹
視頻編碼器(Encoder)

由上圖可知, VCU 編碼器包含四個相互連接的 HEVC/AVC 編碼器(HEVC/AVC encoder core0~3),它還包含全局的寄存器(Global Registers)、中斷控制器(Interrupt controller) 和定時器(Timer) 。 系統 CPU通過 AXI-Lite 從接口控制 MCU(配置編碼器參數), 從而配置編碼器單元或啟停編碼操作。 圖中兩個 128位的 AXI4 主接口用于接收視頻輸入數據,并將視頻存儲到系統內存中。 兩個 32 位的 AXI4 主接口用于獲取 MCU 軟件(指令緩存)和加載/存儲額外的 MCU 數據(數據緩存接口)。 VCU 內還有其他接口,用于在需要時連接編碼器到 PL BRAM 或 UltraRAM 塊。
視頻解碼器(Decoder)

由上圖可知, 視頻解碼器單元的運行架構與編碼器單元類似, VCU 解碼器包括兩個相互連接的HEVC/AVC 解碼器(HEVC/H.264 Decoder core0~1),它還包含全局的寄存器(Global Registers)、中斷控制器(Interrupt controller)和定時器(Timer)。 系統 CPU 通過 AXI-Lite 從接口控制 MCU(配置解碼器參數),從而配置解碼器單元或啟停解碼操作。圖中兩個 128 位的 AXI4 主接口用于接收視頻輸入數據,并將視頻存儲到系統內存中。兩個 32 位的 AXI4 主接口用于獲取 MCU 軟件(指令緩存)和加載/存儲額外的MCU 數據(數據緩存接口)。
微控制單元(MCU)
編碼器和解碼器塊各自包含一個 32 位 MCU 來處理與硬件塊的交互。 MCU 接收來自 APU 的命令,將命令解析為多個 Slice 或塊級命令,并在編碼器和解碼器塊上執行它們。執行命令后, MCU 將狀態信息傳遞給 APU,重復執行該過程。
5 H.264和H.265介紹
H.264 / AVC - 多面手與行業標桿
名稱: H.264,也稱為 高級視頻編碼。
誕生時間: 2003年。
地位: 過去近20年來最成功、應用最廣泛的視頻編解碼標準,可以說是“行業的通用語言”。
主要技術特點:
宏塊: H.264 將視頻幀分割成一個個 16x16 像素 的“宏塊”來進行處理。這是其壓縮的基本單位。
幀內預測和幀間預測:
幀內預測: 在同一幀圖像內,利用相鄰像素的冗余信息進行壓縮。
幀間預測: 利用視頻在時間上的連貫性,通過運動估計和運動補償技術,只存儲相鄰幀之間變化的部分,大大減少了數據量。
熵編碼: 主要使用 CABAC,一種非常高效的無損壓縮算法,能進一步榨干數據冗余。
H.265 / HEVC- 高效繼承者
名稱: H.265,也稱為 高效視頻編碼。
誕生時間: 2013年。
核心目標: 在保持與 H.264 相同主觀視頻質量的前提下,將壓縮效率提高一倍。這意味著文件大小可以減少約50%。
主要技術特點(與H.264的主要區別):
編碼樹單元: 這是最關鍵的改進。H.265 不再使用固定的 16x16 宏塊,而是使用更靈活的 CTU,大小可以從 64x64 到 8x8 像素不等。編碼器可以根據視頻內容的復雜程度,自適應地將 CTU 分割成不同大小的塊進行編碼。
對于平坦區域(如天空):使用大塊編碼,效率高。
對于復雜細節區域(如樹葉):使用小塊編碼,保留細節。
這種靈活性是其高效率的核心來源。
更先進的預測模式:
幀內預測的方向從 H.264 的 9 種增加到了 35 種,使得預測更精確。
幀間預測支持更多的運動分割和更精確的運動矢量。
更高效的熵編碼: 使用 CABAC 的增強版。

6 VCU應用
VCU 核是位于 PL 中的專用電路,可為各種用例提供最大的靈活性,而內存帶寬是一個關鍵的驅動因素。無論應用是需要同時對 4K UHD @60Hz 的編碼和解碼進行處理,還是需要對單個 SD 流進行處理,都可以實現系統設計和存儲器拓撲結構,從而達到特定用例在性能、最優化和集成方面的平衡。在下圖顯示的示例中, VCU 核與 PS 和 PL DDR 外部存儲器一起工作。

7 VCU學習
Xilinx 官方文檔: H.264/H.265 Video Codec Unit Solutions(PG252)
Xilinx 官方文檔: Zynq UltraScale+ MPSoC 嵌入式設計方法指南(UG1228)
Xilinx 官方文檔: Multimedia User Guide(UG1449)
Zynq UltraScale+ MPSoC VCU TRD(針對性參考設計) :
https://xilinxwiki.atlassian.net/wiki/spaces/A/pages/1010303044/Zynq+UltraScale+MPSoC+VCU+TRD+2020.2