音頻、視頻、圖像等所有媒體的數(shù)字化對(duì)信號(hào)處理提出了越來越高的要求,這些數(shù)字信號(hào)數(shù)據(jù)內(nèi)容需要建立、存儲(chǔ)、傳輸和重放。同時(shí),越來越多的通信和娛樂傳輸系統(tǒng)是便攜式的,這需要極大地提高信號(hào)處理的帶寬。日益增長的信號(hào)處理負(fù)載使得電氣功耗成為信號(hào)處理系統(tǒng)的制約因素。
DSP是進(jìn)行數(shù)字信號(hào)處理的絕好選擇,因?yàn)閿?shù)字信號(hào)處理器可以編程,并且在當(dāng)今數(shù)字媒體處理飛速變化的世界里可以容易地處理眾多變化的標(biāo)準(zhǔn)。然而,通用DSP的“通用性”使得其并非對(duì)所有應(yīng)用都能夠?qū)崿F(xiàn)很好的功耗效率(power-efficient)。
硬線連接的信號(hào)處理模塊通常有比較好的功耗效率,但是缺少DSP那樣的靈活性和可編程特性??膳渲锰幚砥骷夹g(shù)通過建立針對(duì)某一特定任務(wù)屬性正確的、功能豐富和可編程的DSP,在DSP的固定ISA(指令集體系結(jié)構(gòu))靈活性和可編程特性與硬線連接模塊的功耗有效性之間建立起橋梁。 Tensilica的Vectra LX是這種概念很好的詮釋。Vectra LX是一個(gè)定點(diǎn)的向量DSP引擎,該引擎是通過配置選項(xiàng)在Xtensa LX可配置處理器的基礎(chǔ)上建立起來的。
可配置架構(gòu)
Vectra LX定點(diǎn)DSP引擎是Xtensa LX微處理器內(nèi)核的一種配置。該定點(diǎn)DSP引擎是一個(gè)3發(fā)射的SIMD處理器,具有四個(gè)乘法器/累加(四個(gè)MAC),它可以處理128位的向量。128位向量可以分成8個(gè)16位或者4個(gè)32位的元素。整個(gè)Vectra LX DSP引擎是用TIE(Tensilica’s Instruction Extension)語言開發(fā)的,通過修改可以適合目標(biāo)應(yīng)用領(lǐng)域。正像圖1所示,Vectra LX DSP引擎增加了16個(gè)向量寄存器(每個(gè)寄存器160位寬)、四個(gè)128位的向量隊(duì)列寄存器、第二個(gè)加載/存儲(chǔ)單元和210多條現(xiàn)有Xtensa LX處理器指令集體系結(jié)構(gòu)中的通用DSP指令。
基本的Xtensa LX處理器是一個(gè)單發(fā)射的微處理器,具有16位和24位指令。但是,Tensilica的處理器產(chǎn)生器(processor generator)能夠讓開發(fā)人員增加更寬的指令字長。通過一種稱為可變長度指令擴(kuò)展FLIX(Flexible-Length Instruction Extensions)的技術(shù)為處理器指令集增添多個(gè)獨(dú)立操作。FLIX指令寬度可以為32位或者64位,并且由于Xtensa LX處理器已經(jīng)設(shè)計(jì)成可以處理多種指令寬度,因此多操作FLIX指令可以在處理器代碼流中自由組合,并且可以和現(xiàn)有的單發(fā)射Xtensa LX處理器指令連接在一起。
當(dāng)開發(fā)人員選擇Vectra LX DSP引擎配置選項(xiàng)時(shí),Tensilica的處理器產(chǎn)生器會(huì)自動(dòng)將DSP引擎的RTL代碼添加到可綜合的 Xtensa LX處理器中。新的Vectra LX指令被添加到處理器自動(dòng)產(chǎn)生的軟件工具集(編譯器、匯編器、調(diào)試器、指令集仿真器ISS和實(shí)時(shí)操作系統(tǒng)RTOS接口)中。Vectra LX使得Xtensa LX處理器門數(shù)增加20萬~25萬門。這些增加的門數(shù)中的大部分用于構(gòu)建Vectra LX DSP引擎中的寄存器和執(zhí)行部件,因?yàn)橥ㄓ锰幚砥骱虳SP引擎擴(kuò)展可以共享處理器中現(xiàn)有的取指令和指令譯碼部件,所以那些硬件模塊不需要重新復(fù)制。然而,需要增加一些邏輯用于對(duì)新的指令進(jìn)行譯碼。圖2為Vectra LX DSP引擎配置選項(xiàng)中增加的寄存器和執(zhí)行部件框圖。
圖3表示三操作Vectra LX指令字格式。指令字中最右邊四位表示該指令寬度為64位。剩下的60位指令字長度不等地分布在三個(gè)操作指令槽中:一個(gè)24位和兩個(gè)18位的指令槽。Vectra LX指令字中的24位操作指令槽(指令字中第4位到第27位)可放置Xtensa LX處理器中所有80條基本指令,包括控制第一個(gè)加載/存儲(chǔ)單元的操作。該操作指令槽還可以處理擴(kuò)展的128位加載/存儲(chǔ)指令,此指令可將信息存到Vectra LX寬向量寄存器中,也可以從該向量寄存器讀出信息。
24位的操作指令槽能提供足夠?qū)挼木幋a位數(shù),允許加載和存儲(chǔ)指令在指令槽中指定對(duì)齊或者非對(duì)齊加載和存儲(chǔ)操作,如圖4所示。非對(duì)齊加載和存儲(chǔ)操作幫助相關(guān)的向量化編譯器處理存儲(chǔ)器數(shù)據(jù)陣列,這些數(shù)據(jù)陣列可以任意方式對(duì)齊,因?yàn)榫幾g器產(chǎn)生的代碼有時(shí)是非對(duì)齊的數(shù)據(jù)陣列,這將降低DSP的性能。然而,這種性能損失可以通過DSP引擎以非對(duì)齊加載和存儲(chǔ)操作方式提供的支持加以補(bǔ)償。
Vectra LX DSP引擎的對(duì)齊寄存器提供部分向量存儲(chǔ)功能,這些對(duì)齊寄存器在非對(duì)齊加載或者存儲(chǔ)字符串的開始用第一個(gè)部分向量進(jìn)行初始化。后續(xù)的非對(duì)齊加載或者存儲(chǔ)操作隱含地和新的向量數(shù)據(jù)進(jìn)行合并,這些向量數(shù)據(jù)經(jīng)過循環(huán)移位并和部分對(duì)齊寄存器內(nèi)容相連接,在對(duì)齊寄存器中將整個(gè)向量組合在一起。這些非對(duì)齊加載和存儲(chǔ)操作還為下一個(gè)非對(duì)齊加載或者存儲(chǔ)操作準(zhǔn)備好對(duì)齊寄存器,以便使得一系列連續(xù)的非對(duì)齊加載或者存儲(chǔ)操作能和對(duì)齊數(shù)據(jù)近似相同的效率將數(shù)據(jù)送入或者送出非對(duì)齊數(shù)據(jù)陣列。
Vectra LX DSP引擎采用第一個(gè)18位操作指令槽(第28位到第45位)來放置4×40bit 的SIMD單指令流多數(shù)據(jù)流乘累加MAC 操作。該指令槽還執(zhí)行DSP引擎的選擇操作,該操作可以將兩個(gè)源向量寄存器中的八個(gè)16位寄存器組合在一起,如圖5所示。
Vectra LX處理器選擇操作可以用于實(shí)現(xiàn)諸如復(fù)制、循環(huán)移位、移位和數(shù)據(jù)交織等向量操作。第二個(gè)18位操作指令槽(第46位~第63位)保存DSP引擎的4×40位和8×20位的SIMD單指令流多數(shù)據(jù)流ALU操作以及那些用于控制處理器中第二個(gè)加載/存儲(chǔ)單元的操作,該加載/存儲(chǔ)單元能執(zhí)行數(shù)據(jù)對(duì)齊操作、128位向量的加載和存儲(chǔ)操作。
Xtensa LX和Vectra LX處理器通過三個(gè)操作指令槽有效地執(zhí)行DSP代碼,圖6表示一個(gè)256點(diǎn)的基4復(fù)數(shù)FFT算法中的一個(gè)緊湊循環(huán)程序。四個(gè)乘累加MAC單元全部得到了利用(如圖6中的中間一列),并且另外兩個(gè)指令槽也得到了充分利用。這樣組織程序的結(jié)果導(dǎo)致Vectra LX DSP引擎極大地減少了用Xtensa LX處理器來執(zhí)行DSP任務(wù)所需要的時(shí)鐘周期數(shù)。圖7列出了256點(diǎn)的基4 FFT算法的時(shí)鐘周期數(shù)。
一個(gè)最基本的Xtensa LX處理器配置在計(jì)算一個(gè)256點(diǎn)的基4復(fù)數(shù)FFT算法時(shí)需要155000個(gè)時(shí)鐘周期。如果為基本處理器配置增加一個(gè)32位乘法器,那么執(zhí)行相同的FFT算法需要23633個(gè)時(shí)鐘周期,減少接近一個(gè)數(shù)量級(jí);如果像在Vectra LX DSP引擎中那樣增加SIMD和多操作能力,則需要944個(gè)時(shí)鐘周期,減少兩個(gè)以上的數(shù)量級(jí),性能大約提高156倍。
軟件環(huán)境
開發(fā)DSP體系結(jié)構(gòu)性能要求有相關(guān)的軟件工具,以便理解和有效地運(yùn)用DSP的結(jié)構(gòu)特征。一個(gè)稱為XCC的向量化C/C++編譯器支持Xtensa LX和Vectra LX體系結(jié)構(gòu)。該編譯器能夠按照和傳統(tǒng)C數(shù)據(jù)類型相同的方式來自動(dòng)處理向量數(shù)據(jù)類型,如圖8所示。向量類型的轉(zhuǎn)換是隱含進(jìn)行的。
為了獲得更高的處理器性能,XCC編譯器利用Vectra LX單指令流多數(shù)據(jù)流執(zhí)行部件尋求各種機(jī)會(huì)對(duì)代碼進(jìn)行向量化,主要針對(duì)循環(huán)語句,如圖9所示。在對(duì)DSP代碼進(jìn)行編譯時(shí),XCC編譯器產(chǎn)生一串連續(xù)的Vectra LX操作,然后調(diào)度這些操作,并將其封裝成Vectra LX寬指令字,如圖10所示。調(diào)度匯編器對(duì)匯編代碼也做相同的操作。
應(yīng)用程序的性能證明了針對(duì)處理器或者DSP采用新的體系結(jié)構(gòu)是值得的。你可以從BDTIsimMark2000典型程序分?jǐn)?shù)值看到通過FLIX語言使得Xtensa LX處理器計(jì)算性能得到提高的情況。
圖11給出了Xtensa LX和Vectra LX 處理器的BDTIsimMark2000分值,并和另外CEVA-X1620和 StarCore SC1400兩款非??斓腄SP核進(jìn)行了分值比較。BDTIsimMark2000分值基于仿真結(jié)果。測(cè)試時(shí),Xtensa LX和Vectra LX處理器仿真的時(shí)鐘速度是370 MHz,該處理器可以采用130nm IC工藝實(shí)現(xiàn),采用標(biāo)準(zhǔn)的綜合和布局布線工具。
值得注意的是,Xtensa LX和Vectra LX處理器的典型程序分值不是單純通過為Xtensa LX 增加Vectra LX DSP引擎得到的。而是利用TIE語言增加了11條用戶定制擴(kuò)展指令,并通過BDTI進(jìn)一步提高了處理器在執(zhí)行典型程序時(shí)的性能。由于Xtensa LX是可配置的,因此通過BDTI典型程序的擴(kuò)展可以直接反映出可配置Xtensa LX處理器在實(shí)際應(yīng)用中的使用情況。
事實(shí)上,整個(gè)Vectra LX DSP引擎是通過TIE語言開發(fā)的,SOC開發(fā)人員可以對(duì)其進(jìn)行修改以便適合目標(biāo)應(yīng)用。采用可配置處理器的一個(gè)重要理由就是可以最大限度地將處理器的能力應(yīng)用于目標(biāo)應(yīng)用。在這種情況下,BDTI典型程序就是目標(biāo)應(yīng)用,但是目標(biāo)應(yīng)用也可以是音頻、視頻、圖像或者其它類型的信號(hào)處理。
責(zé)任編輯:gt
評(píng)論