本系列主要介紹視頻編解碼芯片的設計,以HEVC視頻編碼標準為基礎,簡要介紹編解碼芯片的整體硬件架構設計以及各核心模塊的算法優化與硬件流水線設計。本文介紹視頻編碼芯片的敏佳架構設計思想和XK265 編解碼器的層次結構。
相比于其他應用,視頻編解碼的一大特點是對于實時性的要求極高,而軟件通常難以達到這一目標,因此幾乎所有相關設備,如監控探頭、攝像機、手機和計算機等,都會配備硬編硬解芯片。而不同的設備平臺對于視頻編解碼的需求是迥然不同的,即便是同一設備平臺,在不同的應用場景下,其對于視頻編解碼的需求也不盡相同。不同的應用需求,就要求視頻編解碼架構能夠敏捷化地進行配置。
1敏捷架構
軟件算法在架構和行為上不會考慮硬件實現中的相應限制,往往難以在硬件平臺上發揮出原有的表現。而硬件算法方面,單個模塊的研究成果在架構和行為上若不考慮整體實現時的系統限制,也往往難以在整體架構中發揮出原有的表現。
從整體系統出發,為了能夠盡可能地優化面積、時序和功耗等指標,并且能夠針對不同的編解碼需求靈活地配置系統,有必要采用一種敏捷的芯片架構。這里的“敏捷”是一種設計理念,可以理解為一種可重構性、可配置性,并且分為靜態和動態兩類。
靜態是指對尚未生產的芯片進行配置,以改變芯片所支持的功能集合,并進而改變芯片的面積、(最高)頻率、功耗、(最高)質量和(最高)性能等指標。其主要意義在于可以敏捷地針對不同檔次的平臺提供不同檔次的芯片,從而達到效益的最大化。相比于重新設計一個芯片,靜態敏捷設計能夠有效地減少芯片的NRE (Non-Recurring Engineering) 成本和TTM (Time To Market)周期,而這對于芯片量產來說是至關重要的。
動態是指對已經生成的芯片進行配置,以改變芯片所執行的當前功能,并進而改變編碼的(工作)頻率、(工作)功耗、(工作)質量和(工作)性能等指標。其主要意義在于可以動態地針對不同檔次的場景提供不同檔次的行為,從而達到功能的最大化。相比于只有某個單一功能,動態敏捷設計能夠向客戶提供質量與性能在不同比重上的權衡,而這對于芯片使用來說是至關重要的。
2可配置的模塊設計
編解碼器的主要模塊有FTH(讀取像素)、RMD(粗略模式估計)、IME(整像素運動估計)、FME(分像素運動估計)、RDO(率失真優化)、REC(重建)、DBF(方塊濾波)、SAO(樣點自適應補償)、E_C(熵編碼)、E_D(熵解碼)、DMP(寫出像素)等。
豐富的可配置項對于敏捷架構設計非常重要。下表1總結了敏捷架構下,部分底層模塊的靜態和動態可配置參數。
表1
模塊名稱 |
靜態可配置 |
動態可配置 |
RMD |
1. 引擎數量 |
1. 被搜索的PU大小 |
IME |
1. 陣列大小 |
1. 被搜索的圖案 |
FME |
1. 引擎數量 |
1. 被搜索的PU大小 |
RDO |
1. 引擎大小 |
1. 被遍歷的幀內預測模式數量 |
3 XK265編解碼器
XK265是一款具有敏捷架構的視頻編解碼器,其層次結構能夠高效地配置視頻編解碼器的行為。基于敏捷的芯片架構,可以很容易地定制單一編碼器、單一解碼器或復合編解碼器,以及支持單一I幀版本或支持I幀和P幀版本的不同IP核,同時也可以定制生成不同性能指標、面積指標、壓縮率指標的專用編碼器IP核。
作為一款具有敏捷架構的視頻編解碼器,XK265 RTL已經包含了12個變種,分別是X001 CDC I、X001 CDC P、X001 ENC I、X001 ENC P、X001 DEC I、X001 DEC P、K001 CDC I、K001 CDC P、K001 ENC I、K001 ENC P、K001 DEC I和K001 DEC P。其中,001表示第一個版本,以HEVC標準為依托;X表示針對ASIC平臺,K表示針對FPGA平臺;CDC表示支持編解碼(encoder和decoder),ENC表示支持編碼(encoder),DEC表示支持解碼(decoder);I表示支持幀內幀、P表示同時支持幀內幀和幀間幀。
以X001CDC P、K001 ENC P和K001 DEC P作為敏捷架構的IP定制的例子,下表2總結了相關的參數。
表2
型號 |
X001 CDC P |
K001 ENC P |
K001 DEC P |
目標頻率 |
800MHz |
140MHz |
120 MHz |
性能 |
4K@30fps |
4K@30fps |
4K@30fps |
流水線 |
五級 |
七級 |
七級 |
其中,X001CDC P是一款面向于ASIC平臺的極低代價、較高性能、較高質量的視頻編解碼器;K001 ENC P是一款面向于FPGA平臺的極低代價、極高性能、中下質量的視頻編碼器;K001 DEC P是一款面向于FPGA平臺的極低代價、極高性能的視頻解碼器。它們的架構如下圖1所示。
圖1