<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于Xtensa可配置處理器技術(shù)的視頻加速引擎開(kāi)發(fā)技術(shù)

基于Xtensa可配置處理器技術(shù)的視頻加速引擎開(kāi)發(fā)技術(shù)

作者: 時(shí)間:2012-10-31 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/148291.htm

4、自動(dòng)化軟件開(kāi)發(fā)工具套件支持

和可擴展的關(guān)鍵是不僅能夠自動(dòng)產(chǎn)生預先經(jīng)過(guò)驗證的RTL代碼,用于設計人員定制(包括所有系統擴展功能),而且還能夠自動(dòng)產(chǎn)生完整的軟件工具,包括一個(gè)與相匹配并經(jīng)過(guò)優(yōu)化的開(kāi)發(fā)工具套件、一個(gè)時(shí)鐘周期的指令集仿真器以及系統模型。

這種自動(dòng)化意味著(zhù)編譯器知道設計人員所添加的新指令、相關(guān)的寄存器以及寄存器文件。因此,編譯器能夠對用戶(hù)定義的指令進(jìn)行調度,并執行寄存器分配操作。類(lèi)似地,軟件開(kāi)發(fā)人員在調試時(shí)除了本身的基本寄存器,還能夠了解設計人員定義的寄存器和寄存器文件;同時(shí),軟件開(kāi)發(fā)人員能夠利用指令集仿真器對設計人員定義的新指令進(jìn)行仿真。與處理器相關(guān)的實(shí)時(shí)操作系統RTOS端口和系統模型也能夠自動(dòng)產(chǎn)生。Tensilica的軟件工具能夠在一個(gè)小時(shí)內自動(dòng)產(chǎn)生上述軟件工具,這是對使用可處理器用戶(hù)的核心承諾,能夠執行諸如SAD運算,而不必采用RTL那樣的實(shí)現方法。

5、采用可處理器構建建立多操作功能部件

將SAD這樣的融合操作加到一個(gè)可配置處理器中是一件麻煩的事情。一條稱(chēng)為“sub.abs.ac”的新指令可以完成“減法-絕對值-累加”運算操作。這條新指令能夠將圖2中的操作變成圖3中的復操作。

圖3 使用新指令計算“減法-絕對值-累加”操作

將該指令添加到處理器中后,C編譯器能夠識別這條新的“sub.abs.ac”指令,并調度相關(guān)指令;調度器將顯示“sub.abs.ac”功能部件所使用的內部信號;匯編器能夠處理這條新指令;指令集仿真器ISS能夠按照時(shí)鐘周期模式進(jìn)行仿真。

新的專(zhuān)用功能部件插入處理器后的數據通路簡(jiǎn)圖如圖4所示。注意到,除了產(chǎn)生功能部件邏輯外,硬件生成工具還能夠自動(dòng)插入前饋通路、控制邏輯以及旁路邏輯,以便將新的功能部件與數據通路中的其它邏輯互連。

圖4 插入sub.abs.ac專(zhuān)用功能部件后的簡(jiǎn)化數據通路示意圖

包含新指令的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 */

正如前面提到的,對于一個(gè)16x16宏塊而言,增加新指令后程序主循環(huán)中的操作數減少到256個(gè)(即numrows = numcols = 16)。

6、建立單指令流多數據流SIMD功能部件

前面的SAD程序還可以進(jìn)一步優(yōu)化。程序中的內循環(huán)將宏塊中16列做相同的運算。這對于SIMD(單指令多數據)功能部件而言是理想選擇,相應的指令“sub.abs.ac16”針對16個(gè)像素同時(shí)完成sub.abs.ac操作,如圖5所示。

圖5 對16個(gè)像素同時(shí)進(jìn)行sub.abs.ac指令的單指令流多數據流計算操作

相應的C語(yǔ)言過(guò)程名為sub.abs.ac16,利用此過(guò)程名重新改寫(xiě)的SAD內核C程序代碼如下:

for (row = 0; row numrows; row++) {

sub.abs.ac16( accum, macroblk1[row], macroblk2[row]);

} /* row loop */

通過(guò)改寫(xiě)后的SAD內核程序從768個(gè)算術(shù)操作減少為僅16個(gè)算術(shù)操作。

然而,僅僅只有上述C程序代碼是不夠的。因為指令sub.abs.ac16需要從兩個(gè)宏塊中讀取128位的數據,這需要兩個(gè)方面的支持:一個(gè)128位的寄存器文件和一個(gè)寬數據位的取數/存數接口,可配置處理器均支持這些功能。

7、建立用戶(hù)定制的寄存器文件

可配置處理器中,說(shuō)明一個(gè)任意寬度的定制寄存器文件就像寫(xiě)一行程序那么簡(jiǎn)單。例如,稱(chēng)為“myRegFile128”的過(guò)程語(yǔ)句建立一個(gè)寬度為128位的寄存器文件,長(cháng)度為4,并建立一個(gè)相應的新的C數據類(lèi)型,“myRegFile128”能夠用于C/C++程序代碼說(shuō)明變量。軟件工具也建立“MOVE”操作,用于將各種C數據類(lèi)型轉換為新的定制數據類(lèi)型。因此,采用sub.abs.ac16過(guò)程和新寄存器文件后的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++編譯器將會(huì )產(chǎn)生一條MOVE指令,將數據從一般的C數據類(lèi)型移到定制的C數據類(lèi)型“myRegFile128”,并為新寄存器文件分配寄存器。

8、建立高數據帶寬的加載/存儲接口

為了對高帶寬定制寄存器文件(以及相應的單指令流多數據流SIMD功能部件)進(jìn)行數據存取,處理器應當具有高帶寬數據加載/存儲操作能力。對可配置處理器而言,設計人員能夠說(shuō)明定制加載和存儲操作指令,直接完成對定制寄存器文件的高帶寬加載/存儲數據操作。然后,編譯器自動(dòng)產(chǎn)生與高帶寬加載/存儲接口相應的加載/存儲指令。

經(jīng)過(guò)更新后的處理器數據通路如圖6所示。硬件生成工具產(chǎn)生高帶寬的定制寄存器文件、與數據存儲器相關(guān)的加載/存儲接口以及相應的前饋邏輯、控制邏輯和旁通邏輯。硬件工具還產(chǎn)生相應的硬件邏輯,用于將數據從基準寄存器文件移到用戶(hù)定義的寄存器文件中。

圖6 插入寄存器文件和高帶寬加載/存儲接口的數據通路

9、更新地址的同時(shí)進(jìn)行加載

或者存儲操作

可配置處理器允許用戶(hù)建立另一個(gè)非常有用的功能擴展,即建立一條指令,能夠同時(shí)完成地址更新操作和數據加載/存儲操作。建立的新的加載/存儲操作指令能夠并發(fā)完成如下功能: Load A1 ← Memory(Addr1);Addr1 = Addr1 + IndexUpdate

該指令能夠完成“背靠背”的加載/存儲操作,而不需要專(zhuān)門(mén)指令對地址進(jìn)行更新。

10、建立先進(jìn)先出(FIFO)接口

和通用輸入/輸出端口

視頻和音頻均為流媒體,需要對處理器進(jìn)行快速數據訪(fǎng)問(wèn)。傳統的處理器受限于系統總線(xiàn)接口,以及數據操作執行前對所以數據的加載與存儲訪(fǎng)問(wèn)。

為支持流媒體數據/輸出操作,可配置處理器允許設計人員定義先進(jìn)先出(FIFO)接口以及通用輸入/輸出(GPIO)端口,以便直接對數據通路進(jìn)行讀寫(xiě)訪(fǎng)問(wèn)。FIFO和GPIO端口可以是任意數據寬度(可達1024位),數量不限(每個(gè)可包含1024個(gè)FIFO和GPIO端口)。這些高帶寬接口可以直接與數據通路相連,提供很高的數據吞吐量,通過(guò)處理器內核對數據進(jìn)行讀、處理和寫(xiě)操作,這對于多媒體和網(wǎng)絡(luò )應用而言是非常重要的。

具有FIFO接口和GPIO端口的數據通路如圖7所示。處理器可以進(jìn)行如下操作:首先從兩個(gè)FIFO(在確保兩個(gè)先進(jìn)先出隊列均不空的情況下)中取出數據,然后計算一個(gè)復操作(例如一個(gè)乘累加舍入操作),最后將計算結果壓入輸出FIFO(在確保先進(jìn)先出隊列不滿(mǎn)的情況下)。然后,硬件生成工具產(chǎn)生相應的接口信號、控制邏輯和旁通邏輯等;為配置的處理器產(chǎn)生完整的RTL代碼。軟件生成工具產(chǎn)生一套完整的編譯器工具,以及時(shí)鐘周期精確的指令集仿真器ISS,用于對新指令進(jìn)行仿真。注意到,這種由設計人員定義FIFO接口和GPIO端口的能力是Xtensa可配置處理器所獨有的。

圖7 采用定制先進(jìn)先出(FIFO)接口和通用輸入輸出(IO)端口的高速通信

11、復雜的控制密集型代碼的執行

多媒體應用中控制代碼的數量與復雜性顯著(zhù)增長(cháng),使得程序中數據密集型操作與計算時(shí)間近似等價(jià)。例如,H.264主程序譯碼器中的關(guān)鍵部分為CABAC(上下文相關(guān)二進(jìn)制算術(shù)編碼)算法。該算法幾乎完全是具有數據計算和數據比較的控制流判決樹(shù)。

由于計算的復雜性非常高,絕大多數傳統處理器均采用專(zhuān)用的RTL器來(lái)完成CABAC算法。然而,在可配置處理器上可以通過(guò)增加一組專(zhuān)用指令來(lái)更加有效地實(shí)現CABAC算法。這種實(shí)現方法的好處是避免了數據在處理器和RTL加速器之間不停地交換數據。采用可配置處理器的另一個(gè)好處是采用指令擴展,由于專(zhuān)用硬件在處理器內部,因此可以更好地進(jìn)行硬件和軟件界面劃分。

12、小結

現代可配置和可擴展處理器是構建定制視頻和音頻的理想選擇。Tensilica公司提供相關(guān)的視頻和音頻IP作為SOC模塊,包括HiFi 2音頻、鉆石系列標準的38xVDO(視頻)多標準和多分辨率視頻方法。與之匹配的軟件編解碼器是非常重要的。HiFi 2音頻引擎與相關(guān)的軟件一起可完成絕大部分流行的音頻編解碼器,例如MP3、AAC、WMA等。類(lèi)似地,鉆石 38xVDO 視頻加速引擎與相應的編碼器和譯碼器軟件可以實(shí)現H.264 (包括Baseline、Main和profiles)、MPEG-4 (SP 和 ASP)、 MPEG-2、VC-1/WM9及其它標準。這些視頻涵蓋了從QCIF 到CIF以及SD各種分辨率,功耗低,面積小。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>