掌上多媒體設備的增長極大地改變了終端多媒體芯片供應商對產品的定位需求。這些芯片提供商的IC設計目標不再僅僅針對一兩種多媒體編解碼器。消費者希望他們的移動設備能夠利用不同的設備來播放媒體,能夠采用不同的標準進行編碼,并能夠從不同的設備來下載或者接收媒體數據。視頻譯碼器和編碼器引擎必須滿足多種需求,并具有面積和功耗優勢。
1、設計視頻加速引擎的傳統RTL方法
上一代視頻ASIC的設計主要對MPEG-2進行編碼和譯碼,因為這是DVD標準。有些視頻ASIC還支持MPEG-1,用于VCD(視頻CD)播放。在多數情況下,MPEG-2編碼器和譯碼器都采用RTL設計方法。一個典型MPEG-2視頻ASIC體系結構如圖1所示,其中包括由各個RTL模塊構成的視頻子系統、主控制器和片上存儲器。
圖1 MPEG-2視頻ASIC體系結構
采用硬線RTL體系結構支持多種視頻標準,然而,這也意味著每個視頻標準都需要一個專用的RTL模塊來實現。采用硬線RTL模塊實現一個多種標準的視頻加速引擎具有一定的局限性。無論是實現一個新的視頻標準、更新已有的標準還是消除其中的故障都需要重新進行芯片加工。
2、采用處理器作為視頻加速引擎的優勢
可編程處理器能夠滿足多種視頻標準的靈活性要求。與RTL模塊設計方法相比,可編程處理器具有如下幾個優勢:一是易于將編解碼器與處理器接口;二是滿足新的視頻標準要求、更新現有編解碼器或者采用軟件方法在芯片投片后也可以修改故障;三是可以采用軟件更新的方法很容易地提高視頻編解碼器的性能。
然而,傳統的32位處理器存在性能瓶頸,因為它們是面向通用代碼設計的,而不是面向視頻加速引擎設計的。嵌入式DSP也并非專門為視頻量身定做的,而是包括硬件功能部件、指令和接口,專門應用于通用DSP領域。因此,為了在傳統RISC和DSP處理器上實現視頻編解碼器,就必須使這些處理器運行在很高的速度(Mhz)上,需要大量的存儲器空間,因此需要很大的功耗,不適合便攜式應用。
通過研究一個視頻內核程序所需要的計算量,即可一目了然。比如,一個絕對差值累加運算SAD,該運算是大部分視頻編碼算法中運動估計一步常采用的方法。SAD算法將會在相鄰兩個連續視頻幀中找出宏塊的運動情況,為此,需要計算兩個宏塊中每一組對應的像素值之間絕對差值的累加和。
下面C代碼給出了SAD核心算法的簡單實現:
for (row = 0; row < numrows; row++) {
for (col = 0; col < numcols; col++) {
accum += abs(macroblk1[row][col] - macroblk2[row][col]);
} /* column loop */
} /* row loop */
SAD核心算法的基本計算方法如圖2所示。正像圖中所示的那樣,SAD核心算法首先執行減法操作,然后取絕對值,最后對前面的結果進行累加。
圖2 差值絕對值累加(SAD)主要計算方法
在一個RISC處理器上計算一個由兩個16x16宏塊組成的SAD運算需要256次減法運算、256次絕對值運算和256次累加運算,共需要768次算術運算,這還不包括因數據轉移需要的取數和存數操作。由于這需要對每一幀的所有宏塊進行操作,因此,隨著分辨率的提高引起視頻幀增加,使得計算成本極度昂貴。
事實上,對于一個一般的通用RISC處理器而言(包括一些DSP指令,如乘法指令和乘累加指令),執行一個H.264基準譯碼算法需要250 MHz的性能(CIF分辨率),而執行一個H.264基準編碼算法則需要超過1 GHz的性能(CIF分辨率)。完成上述運算,僅處理器內核就需要500mW的功耗,更不要說由訪存和視頻SOC的其它部件所用的功耗。
3、可配置處理器方法
在一個處理器上實現SAD核心算法的一個更加有效的途徑是建立 “減法-絕對值-加法”專用指令。這將大大降低算術運算的開銷,對一個16x16宏塊而言,運算次數將從768次降為256次。而且,由于采用一個功能部件就可以實現多個簡單算術運算的融合操作,因此上面的運算只需一個指令周期就可以完成,這相當于原來的256個周期。 用戶不能往一個標準的32位RISC處理器中添加指令,但是,完全可以往一個可配置處理器中添加專用指令。可配置處理器允許設計人員從可配置選項菜單中選擇相關配置命令來擴展處理器功能,包括增加專用指令、寄存器文件和接口等。
下面是現代可配置處理器(例如Tensilica公司的 Xtensa處理器)提供的配置和擴展選項,這對于傳統的固定模式處理器而言是做不到的。
(i) 配置選項:選項菜單包括下面幾項:
a. 設計人員需要或者不需要的指令。例如,16x16的乘法或者乘累加、移位、浮點指令等等。
b. 零開銷循環、五級或者七級流水線、局部數據加載或者存儲部件個數等。
c. 是否需要存儲器保護、存儲器地址轉換或者存儲器管理部件(MMU)
d. 包含或者不包含系統總線接口
e. 系統總線寬度和局部存儲器接口寬度
f. 局部(緊密耦合)存儲器大小和數量。
g. 中斷數量及中斷類型和中斷優先級。
(ii) 擴展選項:增加設計人員自己定義的功能部件,包括:
a. 寄存器和寄存器文件。
b. 多周期、仲裁復雜指令功能部件。
c. 單指令流多數據流SIMD功能部件。
d. 將單發射處理器變為多發射處理器。
e. 用戶定制接口,可以直接對數據通路進行讀寫操作,例如,類似GPIO(通用輸入/輸出)引腳的處理器內核端口或者引腳,用于擴展先進先出FIFO隊列的隊列接口(可以與其它邏輯或者處理器內核進行接口)。
配置選項的好處是讓設計人員通過僅選擇與其應用有關的選項,就可以構建一個規模適度的處理器,并能夠滿足其特定應用。擴展選項的好處是讓設計人員根據應用定制處理器,包括建立專用指令、寄存器文件、功能部件和相關接口,用于加速系統應用算法的執行。
4、自動化軟件開發工具套件支持
可配置和可擴展的關鍵是不僅能夠自動產生預先經過驗證的RTL代碼,用于設計人員定制處理器(包括所有系統擴展功能),而且還能夠自動產生完整的軟件工具,包括一個與處理器相匹配并經過優化的開發工具套件、一個基于時鐘周期的指令集仿真器以及系統模型。
這種自動化意味著編譯器知道設計人員所添加的新指令、相關的寄存器以及寄存器文件。因此,編譯器能夠對用戶定義的指令進行調度,并執行寄存器分配操作。類似地,軟件開發人員在調試時除了處理器本身的基本寄存器,還能夠了解設計人員定義的寄存器和寄存器文件;同時,軟件開發人員能夠利用指令集仿真器對設計人員定義的新指令進行仿真。與處理器相關的實時操作系統RTOS端口和系統模型也能夠自動產生。Tensilica的軟件工具能夠在一個小時內自動產生上述軟件工具,這是對使用可配置處理器用戶的核心承諾,能夠執行諸如SAD運算,而不必采用RTL那樣的實現方法。
5、采用可配置處理器構建視頻加速引擎建立多操作功能部件
將SAD這樣的融合操作加到一個可配置處理器中是一件麻煩的事情。一條稱為“sub.abs.ac”的新指令可以完成“減法-絕對值-累加”運算操作。這條新指令能夠將圖2中的操作變成圖3中的復操作。
圖3 使用新指令計算“減法-絕對值-累加”操作
將該指令添加到處理器中后,C編譯器能夠識別這條新的“sub.abs.ac”指令,并調度相關指令;調度器將顯示“sub.abs.ac”功能部件所使用的內部信號;匯編器能夠處理這條新指令;指令集仿真器ISS能夠按照時鐘周期模式進行仿真。
新的專用視頻功能部件插入處理器后的數據通路簡圖如圖4所示。注意到,除了產生功能部件邏輯外,硬件生成工具還能夠自動插入前饋通路、控制邏輯以及旁路邏輯,以便將新的功能部件與數據通路中的其它邏輯互連。
圖4 插入sub.abs.ac視頻專用功能部件后的簡化數據通路示意圖
包含新指令的C代碼描述的SAD算法如下:
for (row = 0; row < numrows; row++) {??for (col = 0; col < numcols; col++) {
sub.abs.ac( accum, macroblk1[row][col], macroblk2[row][col]);
} /* column loop */
} /* row loop */
正如前面提到的,對于一個16x16宏塊而言,增加新指令后程序主循環中的操作數減少到256個(即numrows = numcols = 16)。
6、建立單指令流多數據流SIMD功能部件
前面的SAD程序還可以進一步優化。程序中的內循環將宏塊中16列做相同的運算。這對于SIMD(單指令多數據)功能部件而言是理想選擇,相應的指令“sub.abs.ac16”針對16個像素同時完成sub.abs.ac操作,如圖5所示。
圖5 對16個像素同時進行sub.abs.ac指令的單指令流多數據流計算操作
相應的C語言過程名為sub.abs.ac16,利用此過程名重新改寫的SAD內核C程序代碼如下:
for (row = 0; row < numrows; row++) {
sub.abs.ac16( accum, macroblk1[row], macroblk2[row]);
} /* row loop */
通過改寫后的SAD內核程序從768個算術操作減少為僅16個算術操作。
然而,僅僅只有上述C程序代碼是不夠的。因為指令sub.abs.ac16需要從兩個宏塊中讀取128位的數據,這需要兩個方面的支持:一個128位的寄存器文件和一個寬數據位的取數/存數接口,可配置處理器均支持這些功能。
7、建立用戶定制的寄存器文件
在Xtensa可配置處理器中,說明一個任意寬度的定制寄存器文件就像寫一行程序那么簡單。例如,稱為“myRegFile128”的過程語句建立一個寬度為128位的寄存器文件,長度為4,并建立一個相應的新的C數據類型,“myRegFile128”能夠用于C/C++程序代碼說明變量。軟件工具也建立“MOVE”操作,用于將各種C數據類型轉換為新的定制數據類型。因此,采用sub.abs.ac16過程和新寄存器文件后的SAD內核C程序代碼如下:
for (row = 0; row < numrows; row++) {
myRegFile128 mblk1, mblk2;
mblk1 = macroblk1[row];
mblk2 = macroblk2[row];
sub.abs.ac16( accum, mblk1, mblk2);
} /* row loop */
現在C/C++編譯器將會產生一條MOVE指令,將數據從一般的C數據類型移到定制的C數據類型“myRegFile128”,并為新寄存器文件分配寄存器。
8、建立高數據帶寬的加載/存儲接口
為了對高帶寬定制寄存器文件(以及相應的單指令流多數據流SIMD功能部件)進行數據存取,處理器應當具有高帶寬數據加載/存儲操作能力。對可配置處理器而言,設計人員能夠說明定制加載和存儲操作指令,直接完成對定制寄存器文件的高帶寬加載/存儲數據操作。然后,編譯器自動產生與高帶寬加載/存儲接口相應的加載/存儲指令。
經過更新后的處理器數據通路如圖6所示。硬件生成工具產生高帶寬的定制寄存器文件、與數據存儲器相關的加載/存儲接口以及相應的前饋邏輯、控制邏輯和旁通邏輯。硬件工具還產生相應的硬件邏輯,用于將數據從基準寄存器文件移到用戶定義的寄存器文件中。
圖6 插入寄存器文件和高帶寬加載/存儲接口的數據通路
9、更新地址的同時進行加載
或者存儲操作
Xtensa可配置處理器允許用戶建立另一個非常有用的功能擴展,即建立一條指令,能夠同時完成地址更新操作和數據加載/存儲操作。建立的新的加載/存儲操作指令能夠并發完成如下功能: Load A1 ← Memory(Addr1);Addr1 = Addr1 + IndexUpdate
該指令能夠完成“背靠背”的加載/存儲操作,而不需要專門指令對地址進行更新。
10、建立先進先出(FIFO)接口
和通用輸入/輸出端口
視頻和音頻均為流媒體,需要對處理器進行快速數據訪問。傳統的處理器受限于系統總線接口,以及數據操作執行前對所以數據的加載與存儲訪問。
為支持流媒體數據/輸出操作,Xtensa可配置處理器允許設計人員定義先進先出(FIFO)接口以及通用輸入/輸出(GPIO)端口,以便直接對數據通路進行讀寫訪問。FIFO和GPIO端口可以是任意數據寬度(可達1024位),數量不限(每個可包含1024個FIFO和GPIO端口)。這些高帶寬接口可以直接與數據通路相連,提供很高的數據吞吐量,通過處理器內核對數據進行讀、處理和寫操作,這對于多媒體和網絡應用而言是非常重要的。
具有FIFO接口和GPIO端口的數據通路如圖7所示。處理器可以進行如下操作:首先從兩個FIFO(在確保兩個先進先出隊列均不空的情況下)中取出數據,然后計算一個復操作(例如一個乘累加舍入操作),最后將計算結果壓入輸出FIFO(在確保先進先出隊列不滿的情況下)。然后,硬件生成工具產生相應的接口信號、控制邏輯和旁通邏輯等;為配置的處理器產生完整的RTL代碼。軟件生成工具產生一套完整的編譯器工具,以及時鐘周期精確的指令集仿真器ISS,用于對新指令進行仿真。注意到,這種由設計人員定義FIFO接口和GPIO端口的能力是Xtensa可配置處理器所獨有的。
圖7 采用定制先進先出(FIFO)接口和通用輸入輸出(IO)端口的高速通信
11、加速復雜的控制密集型代碼的執行
多媒體應用中控制代碼的數量與復雜性顯著增長,使得程序中數據密集型操作與計算時間近似等價。例如,H.264主程序譯碼器中的關鍵部分為CABAC(上下文相關二進制算術編碼)算法。該算法幾乎完全是具有數據計算和數據比較的控制流判決樹。
由于計算的復雜性非常高,絕大多數傳統處理器均采用專用的RTL加速器來完成CABAC算法。然而,在可配置處理器上可以通過增加一組專用指令來更加有效地實現CABAC算法。這種實現方法的好處是避免了數據在處理器和RTL加速器之間不停地交換數據。采用可配置處理器的另一個好處是采用指令擴展技術,由于專用硬件在處理器內部,因此可以更好地進行硬件和軟件界面劃分。
12、小結
現代可配置和可擴展處理器是構建定制視頻和音頻引擎的理想選擇。Tensilica公司提供相關的視頻和音頻IP作為SOC模塊,包括HiFi 2音頻引擎、鉆石系列標準的38xVDO(視頻)多標準和多分辨率視頻方法。與之匹配的軟件編解碼器是非常重要的。HiFi 2音頻引擎與相關的軟件一起可完成絕大部分流行的音頻編解碼器,例如MP3、AAC、WMA等。類似地,鉆石 38xVDO 視頻加速引擎與相應的編碼器和譯碼器軟件可以實現H.264 (包括Baseline、Main和profiles)、MPEG-4 (SP 和 ASP)、 MPEG-2、VC-1/WM9及其它標準。這些視頻技術涵蓋了從QCIF 到CIF以及SD各種分辨率,功耗低,面積小。
1、設計視頻加速引擎的傳統RTL方法
上一代視頻ASIC的設計主要對MPEG-2進行編碼和譯碼,因為這是DVD標準。有些視頻ASIC還支持MPEG-1,用于VCD(視頻CD)播放。在多數情況下,MPEG-2編碼器和譯碼器都采用RTL設計方法。一個典型MPEG-2視頻ASIC體系結構如圖1所示,其中包括由各個RTL模塊構成的視頻子系統、主控制器和片上存儲器。
圖1 MPEG-2視頻ASIC體系結構
采用硬線RTL體系結構支持多種視頻標準,然而,這也意味著每個視頻標準都需要一個專用的RTL模塊來實現。采用硬線RTL模塊實現一個多種標準的視頻加速引擎具有一定的局限性。無論是實現一個新的視頻標準、更新已有的標準還是消除其中的故障都需要重新進行芯片加工。
2、采用處理器作為視頻加速引擎的優勢
可編程處理器能夠滿足多種視頻標準的靈活性要求。與RTL模塊設計方法相比,可編程處理器具有如下幾個優勢:一是易于將編解碼器與處理器接口;二是滿足新的視頻標準要求、更新現有編解碼器或者采用軟件方法在芯片投片后也可以修改故障;三是可以采用軟件更新的方法很容易地提高視頻編解碼器的性能。
然而,傳統的32位處理器存在性能瓶頸,因為它們是面向通用代碼設計的,而不是面向視頻加速引擎設計的。嵌入式DSP也并非專門為視頻量身定做的,而是包括硬件功能部件、指令和接口,專門應用于通用DSP領域。因此,為了在傳統RISC和DSP處理器上實現視頻編解碼器,就必須使這些處理器運行在很高的速度(Mhz)上,需要大量的存儲器空間,因此需要很大的功耗,不適合便攜式應用。
通過研究一個視頻內核程序所需要的計算量,即可一目了然。比如,一個絕對差值累加運算SAD,該運算是大部分視頻編碼算法中運動估計一步常采用的方法。SAD算法將會在相鄰兩個連續視頻幀中找出宏塊的運動情況,為此,需要計算兩個宏塊中每一組對應的像素值之間絕對差值的累加和。
下面C代碼給出了SAD核心算法的簡單實現:
for (row = 0; row < numrows; row++) {
for (col = 0; col < numcols; col++) {
accum += abs(macroblk1[row][col] - macroblk2[row][col]);
} /* column loop */
} /* row loop */
SAD核心算法的基本計算方法如圖2所示。正像圖中所示的那樣,SAD核心算法首先執行減法操作,然后取絕對值,最后對前面的結果進行累加。
圖2 差值絕對值累加(SAD)主要計算方法
在一個RISC處理器上計算一個由兩個16x16宏塊組成的SAD運算需要256次減法運算、256次絕對值運算和256次累加運算,共需要768次算術運算,這還不包括因數據轉移需要的取數和存數操作。由于這需要對每一幀的所有宏塊進行操作,因此,隨著分辨率的提高引起視頻幀增加,使得計算成本極度昂貴。
事實上,對于一個一般的通用RISC處理器而言(包括一些DSP指令,如乘法指令和乘累加指令),執行一個H.264基準譯碼算法需要250 MHz的性能(CIF分辨率),而執行一個H.264基準編碼算法則需要超過1 GHz的性能(CIF分辨率)。完成上述運算,僅處理器內核就需要500mW的功耗,更不要說由訪存和視頻SOC的其它部件所用的功耗。
3、可配置處理器方法
在一個處理器上實現SAD核心算法的一個更加有效的途徑是建立 “減法-絕對值-加法”專用指令。這將大大降低算術運算的開銷,對一個16x16宏塊而言,運算次數將從768次降為256次。而且,由于采用一個功能部件就可以實現多個簡單算術運算的融合操作,因此上面的運算只需一個指令周期就可以完成,這相當于原來的256個周期。 用戶不能往一個標準的32位RISC處理器中添加指令,但是,完全可以往一個可配置處理器中添加專用指令。可配置處理器允許設計人員從可配置選項菜單中選擇相關配置命令來擴展處理器功能,包括增加專用指令、寄存器文件和接口等。
下面是現代可配置處理器(例如Tensilica公司的 Xtensa處理器)提供的配置和擴展選項,這對于傳統的固定模式處理器而言是做不到的。
(i) 配置選項:選項菜單包括下面幾項:
a. 設計人員需要或者不需要的指令。例如,16x16的乘法或者乘累加、移位、浮點指令等等。
b. 零開銷循環、五級或者七級流水線、局部數據加載或者存儲部件個數等。
c. 是否需要存儲器保護、存儲器地址轉換或者存儲器管理部件(MMU)
d. 包含或者不包含系統總線接口
e. 系統總線寬度和局部存儲器接口寬度
f. 局部(緊密耦合)存儲器大小和數量。
g. 中斷數量及中斷類型和中斷優先級。
(ii) 擴展選項:增加設計人員自己定義的功能部件,包括:
a. 寄存器和寄存器文件。
b. 多周期、仲裁復雜指令功能部件。
c. 單指令流多數據流SIMD功能部件。
d. 將單發射處理器變為多發射處理器。
e. 用戶定制接口,可以直接對數據通路進行讀寫操作,例如,類似GPIO(通用輸入/輸出)引腳的處理器內核端口或者引腳,用于擴展先進先出FIFO隊列的隊列接口(可以與其它邏輯或者處理器內核進行接口)。
配置選項的好處是讓設計人員通過僅選擇與其應用有關的選項,就可以構建一個規模適度的處理器,并能夠滿足其特定應用。擴展選項的好處是讓設計人員根據應用定制處理器,包括建立專用指令、寄存器文件、功能部件和相關接口,用于加速系統應用算法的執行。
4、自動化軟件開發工具套件支持
可配置和可擴展的關鍵是不僅能夠自動產生預先經過驗證的RTL代碼,用于設計人員定制處理器(包括所有系統擴展功能),而且還能夠自動產生完整的軟件工具,包括一個與處理器相匹配并經過優化的開發工具套件、一個基于時鐘周期的指令集仿真器以及系統模型。
這種自動化意味著編譯器知道設計人員所添加的新指令、相關的寄存器以及寄存器文件。因此,編譯器能夠對用戶定義的指令進行調度,并執行寄存器分配操作。類似地,軟件開發人員在調試時除了處理器本身的基本寄存器,還能夠了解設計人員定義的寄存器和寄存器文件;同時,軟件開發人員能夠利用指令集仿真器對設計人員定義的新指令進行仿真。與處理器相關的實時操作系統RTOS端口和系統模型也能夠自動產生。Tensilica的軟件工具能夠在一個小時內自動產生上述軟件工具,這是對使用可配置處理器用戶的核心承諾,能夠執行諸如SAD運算,而不必采用RTL那樣的實現方法。
5、采用可配置處理器構建視頻加速引擎建立多操作功能部件
將SAD這樣的融合操作加到一個可配置處理器中是一件麻煩的事情。一條稱為“sub.abs.ac”的新指令可以完成“減法-絕對值-累加”運算操作。這條新指令能夠將圖2中的操作變成圖3中的復操作。
圖3 使用新指令計算“減法-絕對值-累加”操作
將該指令添加到處理器中后,C編譯器能夠識別這條新的“sub.abs.ac”指令,并調度相關指令;調度器將顯示“sub.abs.ac”功能部件所使用的內部信號;匯編器能夠處理這條新指令;指令集仿真器ISS能夠按照時鐘周期模式進行仿真。
新的專用視頻功能部件插入處理器后的數據通路簡圖如圖4所示。注意到,除了產生功能部件邏輯外,硬件生成工具還能夠自動插入前饋通路、控制邏輯以及旁路邏輯,以便將新的功能部件與數據通路中的其它邏輯互連。
圖4 插入sub.abs.ac視頻專用功能部件后的簡化數據通路示意圖
包含新指令的C代碼描述的SAD算法如下:
for (row = 0; row < numrows; row++) {??for (col = 0; col < numcols; col++) {
sub.abs.ac( accum, macroblk1[row][col], macroblk2[row][col]);
} /* column loop */
} /* row loop */
正如前面提到的,對于一個16x16宏塊而言,增加新指令后程序主循環中的操作數減少到256個(即numrows = numcols = 16)。
6、建立單指令流多數據流SIMD功能部件
前面的SAD程序還可以進一步優化。程序中的內循環將宏塊中16列做相同的運算。這對于SIMD(單指令多數據)功能部件而言是理想選擇,相應的指令“sub.abs.ac16”針對16個像素同時完成sub.abs.ac操作,如圖5所示。
圖5 對16個像素同時進行sub.abs.ac指令的單指令流多數據流計算操作
相應的C語言過程名為sub.abs.ac16,利用此過程名重新改寫的SAD內核C程序代碼如下:
for (row = 0; row < numrows; row++) {
sub.abs.ac16( accum, macroblk1[row], macroblk2[row]);
} /* row loop */
通過改寫后的SAD內核程序從768個算術操作減少為僅16個算術操作。
然而,僅僅只有上述C程序代碼是不夠的。因為指令sub.abs.ac16需要從兩個宏塊中讀取128位的數據,這需要兩個方面的支持:一個128位的寄存器文件和一個寬數據位的取數/存數接口,可配置處理器均支持這些功能。
7、建立用戶定制的寄存器文件
在Xtensa可配置處理器中,說明一個任意寬度的定制寄存器文件就像寫一行程序那么簡單。例如,稱為“myRegFile128”的過程語句建立一個寬度為128位的寄存器文件,長度為4,并建立一個相應的新的C數據類型,“myRegFile128”能夠用于C/C++程序代碼說明變量。軟件工具也建立“MOVE”操作,用于將各種C數據類型轉換為新的定制數據類型。因此,采用sub.abs.ac16過程和新寄存器文件后的SAD內核C程序代碼如下:
for (row = 0; row < numrows; row++) {
myRegFile128 mblk1, mblk2;
mblk1 = macroblk1[row];
mblk2 = macroblk2[row];
sub.abs.ac16( accum, mblk1, mblk2);
} /* row loop */
現在C/C++編譯器將會產生一條MOVE指令,將數據從一般的C數據類型移到定制的C數據類型“myRegFile128”,并為新寄存器文件分配寄存器。
8、建立高數據帶寬的加載/存儲接口
為了對高帶寬定制寄存器文件(以及相應的單指令流多數據流SIMD功能部件)進行數據存取,處理器應當具有高帶寬數據加載/存儲操作能力。對可配置處理器而言,設計人員能夠說明定制加載和存儲操作指令,直接完成對定制寄存器文件的高帶寬加載/存儲數據操作。然后,編譯器自動產生與高帶寬加載/存儲接口相應的加載/存儲指令。
經過更新后的處理器數據通路如圖6所示。硬件生成工具產生高帶寬的定制寄存器文件、與數據存儲器相關的加載/存儲接口以及相應的前饋邏輯、控制邏輯和旁通邏輯。硬件工具還產生相應的硬件邏輯,用于將數據從基準寄存器文件移到用戶定義的寄存器文件中。
圖6 插入寄存器文件和高帶寬加載/存儲接口的數據通路
9、更新地址的同時進行加載
或者存儲操作
Xtensa可配置處理器允許用戶建立另一個非常有用的功能擴展,即建立一條指令,能夠同時完成地址更新操作和數據加載/存儲操作。建立的新的加載/存儲操作指令能夠并發完成如下功能: Load A1 ← Memory(Addr1);Addr1 = Addr1 + IndexUpdate
該指令能夠完成“背靠背”的加載/存儲操作,而不需要專門指令對地址進行更新。
10、建立先進先出(FIFO)接口
和通用輸入/輸出端口
視頻和音頻均為流媒體,需要對處理器進行快速數據訪問。傳統的處理器受限于系統總線接口,以及數據操作執行前對所以數據的加載與存儲訪問。
為支持流媒體數據/輸出操作,Xtensa可配置處理器允許設計人員定義先進先出(FIFO)接口以及通用輸入/輸出(GPIO)端口,以便直接對數據通路進行讀寫訪問。FIFO和GPIO端口可以是任意數據寬度(可達1024位),數量不限(每個可包含1024個FIFO和GPIO端口)。這些高帶寬接口可以直接與數據通路相連,提供很高的數據吞吐量,通過處理器內核對數據進行讀、處理和寫操作,這對于多媒體和網絡應用而言是非常重要的。
具有FIFO接口和GPIO端口的數據通路如圖7所示。處理器可以進行如下操作:首先從兩個FIFO(在確保兩個先進先出隊列均不空的情況下)中取出數據,然后計算一個復操作(例如一個乘累加舍入操作),最后將計算結果壓入輸出FIFO(在確保先進先出隊列不滿的情況下)。然后,硬件生成工具產生相應的接口信號、控制邏輯和旁通邏輯等;為配置的處理器產生完整的RTL代碼。軟件生成工具產生一套完整的編譯器工具,以及時鐘周期精確的指令集仿真器ISS,用于對新指令進行仿真。注意到,這種由設計人員定義FIFO接口和GPIO端口的能力是Xtensa可配置處理器所獨有的。
圖7 采用定制先進先出(FIFO)接口和通用輸入輸出(IO)端口的高速通信
11、加速復雜的控制密集型代碼的執行
多媒體應用中控制代碼的數量與復雜性顯著增長,使得程序中數據密集型操作與計算時間近似等價。例如,H.264主程序譯碼器中的關鍵部分為CABAC(上下文相關二進制算術編碼)算法。該算法幾乎完全是具有數據計算和數據比較的控制流判決樹。
由于計算的復雜性非常高,絕大多數傳統處理器均采用專用的RTL加速器來完成CABAC算法。然而,在可配置處理器上可以通過增加一組專用指令來更加有效地實現CABAC算法。這種實現方法的好處是避免了數據在處理器和RTL加速器之間不停地交換數據。采用可配置處理器的另一個好處是采用指令擴展技術,由于專用硬件在處理器內部,因此可以更好地進行硬件和軟件界面劃分。
12、小結
現代可配置和可擴展處理器是構建定制視頻和音頻引擎的理想選擇。Tensilica公司提供相關的視頻和音頻IP作為SOC模塊,包括HiFi 2音頻引擎、鉆石系列標準的38xVDO(視頻)多標準和多分辨率視頻方法。與之匹配的軟件編解碼器是非常重要的。HiFi 2音頻引擎與相關的軟件一起可完成絕大部分流行的音頻編解碼器,例如MP3、AAC、WMA等。類似地,鉆石 38xVDO 視頻加速引擎與相應的編碼器和譯碼器軟件可以實現H.264 (包括Baseline、Main和profiles)、MPEG-4 (SP 和 ASP)、 MPEG-2、VC-1/WM9及其它標準。這些視頻技術涵蓋了從QCIF 到CIF以及SD各種分辨率,功耗低,面積小。
評論
查看更多