1AMD EV系列器件介紹
近年來,隨著音視頻應用場景和內容越來越豐富,對網絡傳輸和存儲都帶來了巨大的挑戰(zhàn)。為了應對這一挑戰(zhàn),各種視頻編解碼技術就被提了出來,其中H.264/H.265視頻編解碼協議是當前的主流視頻編解碼標準。AMD的ZYNQ MPSOC EV系列器件,是ZYNQ MPSOC集成了H.264/H.265 Video Codec Unit (VCU)硬核的一個系列器件。

▎該系列器件支持多標準編碼/解碼支持,包括:
? ISO MPEG-4第10部分:高級視頻編碼(AVC)/ITU H.264
? ISO MPEG-H第2部分:高效視頻編碼(HEVC)/ITU H.265
? HEVC:Main、Main Intra、Main10、Main10 Intra、Main 42 10、Main 42 10 Intra〔直到Level 5.1 (High Tier)〕
? AVC:Baseline、Main、High、High10、High 42、High10 Intra、High 42 Intra(直到Level 5.2)
▎支持多達32個流的同步編碼和解碼(最大聚合帶寬為3840×2160 @ 60fps)
▎低時延速率控制
▎靈活的速率控制:CBR、VBR和常量QP
▎支持分辨率高達4K UHD @ 60 Hz的同步編碼和解碼
▎支持8 K UHD(~15 Hz)的降低幀速率
2VCU IP簡介
LogiCORE IP H.264/H.265 Video Codec Unit (VCU)核支持多標準視頻編碼和解碼,包括支持符合H.264標準的高效視頻編碼(HEVC)和高級視頻編碼(AVC)。這個單元可提供編碼(壓縮)和解碼(解壓縮)功能,并且能夠同時編碼和解碼。

編碼器塊簡介
編碼器引擎被設計來用HEVC和AVC標準對視頻流進行處理。它全面支持這些標準,包括支持8位和10位顏色、Y-only(單色)、40和42色度格式以及高達4K UHD @ 60 Hz的性能表現。下圖顯示的是編碼器塊的頂層接口和詳細架構。編碼器還包含多個全局寄存器、一個中斷控制器和一個定時器。編碼器由微控制器(MCU)子系統(tǒng)控制。

在PS上運行的VCU應用通過VCU control software API與編碼器微控制器進行交互。微控制器固件(MCU Firmware)不是用戶可修改的。APU通過32位的AXI4-Lite接口來控制MCU(以配置編碼參數)。兩個128位的AXI4主接口用于將視頻數據和元數據移入、移出系統(tǒng)存儲器。32位的AXI4主接口用于獲取MCU軟件(指令高速緩存接口)并加載或存儲附加的MCU數據(數據高速緩存接口)。
APU通過32位AXI4-Lite接口控制MCU,完成編碼參數配置。
兩個128位AXI4主接口負責視頻數據和元數據的系統(tǒng)存儲器移入與移出。
32位AXI4主接口用于獲取MCU軟件(指令高速緩存接口),并加載或存儲附加MCU數據(數據高速緩存接口)。
編碼器塊包含壓縮引擎、控制寄存器、中斷控制器,以及帶存儲器控制器的可選編碼器緩存(緩存連接可編程邏輯中的UltraRAM或BlockRAM,通過寄存器啟用)。
MCU的AXI-4主接口與解碼器的相應AXI-4主接口多路復用,復用器輸出可用于嵌入式VCU。
解碼器塊簡介
解碼器塊可處理HEVC和AVC標準視頻流,全面兼容兩項標準,支持8位和10位顏色深度、Y-only(單色)、40及42色度格式,性能最高可達4K UHD @ 60 Hz,內部包含多個全局寄存器、中斷控制器和定時器。

解碼器由MCU子系統(tǒng)控制,APU通過32位AXI4-Lite從接口實現控制MCU,相關交互邏輯與編碼器一致(APU上的VCU應用通過賽靈思VCU Control Software API與解碼器微控制器交互,MCU不可由用戶修改)。具體接口與結構特性如下:
兩個128位AXI4主接口負責視頻數據和元數據的系統(tǒng)存儲器移入與移出。32位AXI4主接口用于獲取MCU軟件(指令高速緩存接口),并加載或存儲附加MCU數據(數據高速緩存接口)。
解碼器塊包含H.265/H.264解壓縮引擎、控制寄存器、中斷控制器塊,以及橋接單元和一組內部存儲器(橋接單元用于管理解碼器所需外部存儲器訪問的仲裁請求、突發(fā)地址和突發(fā)長度)。
系統(tǒng)CPU通過32位AXI-Lite從接口控制MCU,完成解碼器參數配置、視頻幀處理啟動及狀態(tài)與結果獲取。
兩個128位AXI-4主接口負責視頻輸入數據的獲取和視頻輸出數據的存儲(均與系統(tǒng)存儲器交互)。
AXI-4主接口同時用于獲取MCU軟件,并對其他MCU數據執(zhí)行加載或存儲操作。
3VCU軟件架構
視頻編解碼器單元(VCU)軟件堆棧具有軟件開發(fā)者可在多個抽象層級進行編程的分層架構,如下圖所示。從高層到低層的應用接口如下所列:
GStreamer
OpenMAX Integration Layer
VCU Control Software

各層級核心說明如下:
GStreamer是跨平臺開源多媒體框架,提供集成多個多媒體組件、創(chuàng)建流水線的基礎架構,其支持OpenMAX Integration Layer API。
OpenMAX Integration Layer API定義了標準化媒體組件接口,助力開發(fā)者與平臺提供商實現與硬件或軟件多媒體編解碼器的集成與通信。
VCU Control Software是VCU應用開發(fā)者可接觸的最低級軟件,所有VCU應用均需直接或間接使用AMD提供的該軟件,其包含定制內核模塊、定制用戶空間庫及AL_Encode和AL_Decode應用。
4VCU Control Software介紹
VCU Control Software是VCU應用開發(fā)人員可接觸到的最低層級軟件。它包含定制化內核模塊、定制化用戶空間庫,以及ctrlsw_encoder和contrlsw_decoder應用程序。
下面的流程圖詳細定義了VCU Control Software中編碼任務的執(zhí)行鏈路,明確了緩沖區(qū)管理、編碼流程控制、回調處理的協同邏輯,是開發(fā)者理解AL_Encoder API調用時序、資源管理機制的核心參考。

左側主流程(main):涵蓋編碼器初始化(Initialize Encoder Settings)、實例創(chuàng)建(AL_Encoder_Create)、緩沖區(qū)分配(流緩沖區(qū)與源緩沖區(qū)的創(chuàng)建/入池)、數據填充、編碼處理(AL_Encoder_Process)、任務銷毀及資源釋放等關鍵步驟,是編碼任務從啟動到結束的主線邏輯。
右側回調流程:包含Unref Source callback(源緩沖區(qū)回池)、Unref Stream callback(流緩沖區(qū)回送編碼器)、EndEncoding callback(編碼結束后的資源釋放與狀態(tài)通知),用于處理編碼過程中的異步回調與資源回收邏輯。
下面的流程圖詳細定義了VCU Control Software中解碼任務的執(zhí)行鏈路,明確了緩沖區(qū)管理、編碼流程控制、回調處理的協同邏輯,是開發(fā)者理解AL_Decode API調用時序、資源管理機制的核心參考。

左側主流程(main):包含解碼器實例創(chuàng)建(AL_Decoder_Create)、流緩沖區(qū)分配(AL_Buffer_Create_And_Allocate或AL_Buffer_Create)、數據填充與推送(Fill one Stream Buffer、AL_Decoder_PushBuffer)、解碼結束處理(AL_Decoder_Flush、Wait End of Decoding)、實例銷毀及資源釋放等關鍵步驟,是解碼任務從啟動到結束的主線邏輯。 右側回調流程:ResolutionFound callback:用于在識別到視頻分辨率后分配解碼緩沖區(qū)(AL_Buffer_Create_And_Allocate或AL_Buffer_Create),并將其推入解碼器(AL_Process_DisplayPicture)。 Display callback:處理解碼后幀的輸出邏輯,包含幀緩沖區(qū)判空、輸出(Output Frame Buffer)、顯示幀推送(AL_Decoder_PutDisplayPicture)及解碼結束信號通知。
5VCU Control Software開發(fā)流程
下面以AMD VCU Control Software參考設計為例,簡要介紹control software的開發(fā)流程。該參考設計分為編碼部分和解碼部分。其中編碼部分框圖如下:

APU(四核Cortex A53)運行Linux系統(tǒng),并搭載ctrlsw_encoder組件,負責幀緩沖區(qū)(framebuf)的寫入緩沖控制、編碼器控制,以及比特流文件寫入和UDP流傳輸。
RPU(實時處理單元)/Microblaze運行裸機應用,負責采集流水線的初始化,具體包括:HDMI輸入、VPSS(視頻處理子系統(tǒng))、YUV重排及幀緩沖區(qū)寫入。解碼部分框圖如下:

APU(四核Cortex A53)運行Linux系統(tǒng),并搭載ctrlsw_decoder組件,負責文件輸入、解碼器控制,以及混合器(Mixer)顯示緩沖區(qū)地址指針配置。
RPU(Cortex R5)運行裸機應用,負責顯示流水線的初始化,具體包括:幀緩沖區(qū)讀?。‵ramebuf read)、YUV重排、混合器(Mixer)處理及HDMI輸出。
Block Design設計
VCU配置

主要配置參數介紹
Coding Standard:選擇AVC或HEVC,AVC:H264 HEVC:H265
Coding Type:選擇要用于編碼的GOP結構
- Intra Frame Only-僅限I幀
- Intra & Inter Frame-I幀、B幀和P幀
只有在選擇Intra和Inter Frame時才能啟用編碼器的緩存。
Resolution:選擇以下分辨率之一
- 1280×720
- 1920×1080
- 3840×2160
- 4096×2160
- 7680×4320
Frames Per Second:幀率選擇,選擇15、30、45或60 fps。在7680×4320分辨率下,只有15fps可用。
Color Format:選擇以下顏色格式之一
- 40-單色
- 40
- 42
Color Depth:選擇每通道8位或10位。
Use Encoder Buffer:選擇是否要使用編碼器緩存。只有在選擇了Intra和Inter Frame之后才能啟用編碼器的緩存。編碼器緩存通過緩存可編程邏輯中的數據來減少外部存儲器的帶寬,但它可能會略微降低視頻的質量。
Memory Resource Type:選擇下列存儲器類型選項:
- URAM ONLY
- BRAM ONLY
- COMBINATION-URAM&BRAM
Max Number of Encoder Streams:選擇1到8個流。

僅當“Basic Configuration”標簽設置如下時,系統(tǒng)才會啟用編碼器緩存的高級配置選項:
▎“Coding Type”是“Intra & Inter Frame”
▎“Use Encoder Buffer”被選中
“Advanced Configuration”標簽上的參數設置如下:
▎Manual Override:選擇此選項可覆蓋由IP集成器計算的編碼器緩存存儲器的大小。
▎Memory Depth (Kbytes):如果選中“Manual Override”復選框,則可以輸入0到7,000Kbyte的存儲器大小。
▎B Frame:選擇以下選項之一:
NONE-最低時延
STANDARD-GOP配置IPPP(內部周期為30 ms)
▎Motion Vector Range:決定編碼器緩存的大?。?/p>
LOW
MEDIUM
HIGH
▎CORE Clk (MHz):選擇1-667 MHz的時鐘頻率
其余部分Block Design連接按照參考設計圖所示添加并連接。

手動添加頂層封裝文件zcu106_hdmirx_wrapper.v和約束文件vcu_hdmirx.xdc。只需點擊“Generate Bitstream”按鈕生成比特流。比特流生成完成后,選擇“File->Export->Export Hardware”,導出供Vitis和Petalinux使用的XSA文件,注意需勾選“include bitstream”(包含比特流)選項。
Vitis流程
1、先使用之前從Vivado生成的XSA文件創(chuàng)建一個新平臺。并添加新的應用項目名稱(例如r5_hdmirx_yuv444),然后選擇psu_cortexr5_0作為該應用項目的目標處理器。

2、修改R5的BSP設置,將uart1配置為標準打印輸出。
3、將R5的源代碼復制到src文件夾中。
4、右鍵點擊r5_hdmirx_yuv444_system,選擇“Build Project”,此步驟會生成 r5_hdmirx_yuv444.elf文件,該文件將用于Petalinux打包。
Petalinux流程
1、使用xilinx-vcu-zcu106-v2020.2-final.bsp創(chuàng)建Petalinux項目,具體可參考鏈接:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/176914576/Zynq+UltraScale+MPSoC+VCU+TRD+2020.2+-+Run+and+Build+Flow
$ petalinux-create -t project -s xilinx-vcu-zcu106-v2020.2-final.bsp
2、在新建的Petalinux項目目錄下,創(chuàng)建一個名為XSA的文件夾(示例),將之前從Vivado生成的.xsa文件復制到該文件夾中,然后通過該xsa文件配置Petalinux項目。
$ petalinux-config --get-hw-description=./XSA
3、進入配置界面后,在“Subsystem AUTO Hardware Settings”(子系統(tǒng)自動硬件設置)中,選擇“Memory Settings”(內存設置),將系統(tǒng)內存大小(System Memory Size)設置為0x6FFFFFFF。

4、由于hdmirx、vphy、frmbuf_wr和vproc_ss等組件是在r5驅動,所以需要在petalinux設備數中將這些節(jié)點刪除。

5、編譯petalinux工程
$ petalinux-build
6、打包生成BOOT.bin文件,執(zhí)行命令:
$ petalinux-package --boot --fsbl zynqmp_fsbl.elf --u-boot u-boot.elf --pmufw pmufw.elf --fpga system.bit --add r5_hdmirx_yuv444.elf --cpu=r5-0
至此,我們即完成了編碼端的開發(fā)流程,解碼端開發(fā)流程也和編碼端類似。
關于安富利
安富利是全球領先的技術分銷商和解決方案提供商,在過去一個多世紀里一直秉持初心,致力于滿足客戶不斷變化的需求。通過遍布全球的專業(yè)化和區(qū)域化業(yè)務覆蓋,安富利可在產品生命周期的每個階段為客戶和供應商提供支持。安富利能夠幫助各種類型的公司適應不斷變化的市場環(huán)境,在產品開發(fā)過程中加快設計和供應速度。安富利在整個技術價值鏈中處于中心位置,這種獨特的地位和視角讓其成為了值得信賴的合作伙伴,能夠幫助客戶解決復雜的設計和供應鏈難題,從而更快地實現營收。
-
amd
+關注
關注
25文章
5678瀏覽量
139790 -
編解碼器
+關注
關注
0文章
285瀏覽量
25358 -
音視頻
+關注
關注
4文章
590瀏覽量
31341 -
VCU
+關注
關注
17文章
86瀏覽量
21554
原文標題:AMD技術干貨|AMD EV系列器件VCU Control Software簡介
文章出處:【微信號:AvnetAsia,微信公眾號:安富利】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
【AMD】BIOS Engineer
【AMD】BIOS Engineer
AMD超威半導體熱招 Senior Multi Media Diagnostics Software Engineer
【AMD社招】Graphics Driver Software Engineer
VCU(整車控制器)簡介
AMD發(fā)布Radeon Software Adrenalin 21.10.3版驅動
AMD Software:Adrenalin Edition 2022版本發(fā)布
MPSoC VCU Ctrl-SW 2020.2編碼不同Stride的YUV文件
P_數據表(S-1):HEV/EV Motor Control IP MILS Models
P_數據表(S-1):HEV/EV Motor Control IP MILS Models
AMD EV系列器件VCU Control Software簡介
評論