基于RISC結(jié)構(gòu)的多功能嵌入式處理器結(jié)構(gòu)設(shè)計(jì)應(yīng)用
出處:左撇子 發(fā)布于:2009-03-09 09:26:50
當(dāng)前的一些高端應(yīng)用中,系統(tǒng)需要處理大量數(shù)據(jù)、算法和系統(tǒng)內(nèi)外的通信,采用單RISC核不能滿足用戶對高性能的需求?;贒SP核和RISC核的并行CPU設(shè)計(jì)能有效解決這個問題,本文以Hyperstone公司的E1-32為例,闡述如何結(jié)合RISC單元和DSP單元實(shí)現(xiàn)CPU結(jié)構(gòu)的優(yōu)化。
在嵌入式處理器設(shè)計(jì)領(lǐng)域,RISC已經(jīng)成為處理器結(jié)構(gòu)設(shè)計(jì)的必然選擇。但是,如今嵌入式應(yīng)用無處不在,各種產(chǎn)品之間的通訊需要執(zhí)行快速傅立葉變換、音視頻多媒體處理以及快速通信等基于DSP的算法,如果以單純的RISC處理器以純軟件的方法來完成,由于高速運(yùn)行,單RISC處理器在數(shù)據(jù)吞吐量和代碼長度方面的局限性就會凸現(xiàn)出來。正是由于這種市場推動,DSP核+RISC核實(shí)現(xiàn)并行的CPU設(shè)計(jì)方案就逐漸得到廣泛應(yīng)用。
這種雙內(nèi)核并行的架構(gòu)設(shè)計(jì)帶來了CPU性能的極大提高,同時(shí)又帶來了一些新的問題:芯片體積增加,需要開辟額外的寄存器、緩存和內(nèi)部存儲空間;功耗顯著增大;設(shè)計(jì)變得異常復(fù)雜,需要處理雙內(nèi)核的協(xié)作和同步問題、兩套不同的指令集,增加了新品設(shè)計(jì)的復(fù)雜性和開發(fā)周期。另外,由于需要在兩個獨(dú)立內(nèi)核的體系結(jié)構(gòu)下來各自編程并保持相互通信,使得系統(tǒng)開發(fā)和調(diào)試環(huán)境變得異常復(fù)雜且難于掌握。
一種簡單可行的方法是以RISC核為基礎(chǔ),但在RISC核中加入一些用于專門處理的指令。這種方法幾乎沒有增加芯片尺寸和內(nèi)核設(shè)計(jì)的復(fù)雜性,但卻有一個致命缺點(diǎn):當(dāng)執(zhí)行那些復(fù)雜的多循環(huán)的指令時(shí),由于要進(jìn)行數(shù)據(jù)信號處理、通信協(xié)議和圖像等專門函數(shù)處理,RISC核就會出現(xiàn)性能瓶頸。
單內(nèi)核方法
德國Hyperstone公司已經(jīng)開發(fā)出E1-32這種新的單內(nèi)核處理器結(jié)構(gòu)。該結(jié)構(gòu)既解決了純RISC加一些專門指令的單核結(jié)構(gòu)的限制,也克服了RISC核+其它獨(dú)立核的雙核結(jié)構(gòu)的缺點(diǎn)。這種設(shè)計(jì)在化芯片的封裝形式、功耗和指令復(fù)雜度的同時(shí),卻沒有犧牲純RISC核的性能。此外,由于其成本較低,使得該結(jié)構(gòu)可以廣泛用于各種嵌入式系統(tǒng)。
E1-32結(jié)構(gòu)擁有一個32位的RISC執(zhí)行單元和一個獨(dú)立的DSP執(zhí)行單元,兩個單元使用一套16位、32位和48位可變長度的指令集,但包括指令譯碼在內(nèi)的內(nèi)核其它部分對兩個單元都是共用的。同時(shí),精巧而高效的指令緩存、單獨(dú)的一套寄存器和共享的存儲器總線接口等一系列措施也簡化了芯片硬件邏輯和軟件編程的復(fù)雜性。
由于指令集可以方便地?cái)U(kuò)展,所以其它一些新的專用功能指令或指令集可以取代或加入到DSP單元之中,使之成為同RISC單元并行的執(zhí)行單元。通過這種方法,一些專門指令可以方便地?cái)U(kuò)充到指令集中,例如一些專門的圖像和通信處理指令,甚至是實(shí)現(xiàn)高制造技術(shù)中一些算法,如模糊邏輯指令集等。
化的指令集設(shè)計(jì)
鑒于單純RISC結(jié)構(gòu)的多種局限性,人們提出了許多提高單純RISC結(jié)構(gòu)性能的措施。32位定點(diǎn)指令格式改進(jìn)了指令譯碼設(shè)計(jì),加快了程序執(zhí)行速度,也使得3操作數(shù)指令可通過傳統(tǒng)設(shè)計(jì)所固有的共享寄存器集來尋址。然而,通過對典型應(yīng)用代碼的運(yùn)行分析,在絕大多數(shù)情況下,第三個操作數(shù)不是寄存器變量而是常量。在一個3操作數(shù)指令中,那些常量的長度均大于其對應(yīng)的操作數(shù)域5~8位,大于的部分需要后續(xù)指令來裝載,這大大地削弱了定長指令的優(yōu)越性。但通過精心設(shè)計(jì),16位+16位和16位+32位變長指令通常能夠滿足常量操作數(shù)的要求。
另外,32位定長的RISC指令集在考慮芯片設(shè)計(jì)的“硅變效應(yīng)”方面有很多缺陷。同復(fù)雜指令集計(jì)算機(jī) (CISC)程序相比,它生成的應(yīng)用程序代碼需要較多的存儲空間,這將直接導(dǎo)致目標(biāo)系統(tǒng)的電路板尺寸增大、成本和功耗的顯著提高等問題。在任何情況下,快速指令譯碼并不能總是保證程序的快速執(zhí)行,因?yàn)楸仨毦C合考慮存儲器的存取速度。
為平衡考慮代碼生成空間的大小和存儲器存取速度的影響,必須保證有基本的16位的指令格式,同時(shí)具有32位和48位長度的指令格式。在E1-32處理器的16位指令格式中,各用5位對32個目的寄存器和32個源寄存器尋址。另一方面,這5位也可以用來尋址一個直接操作數(shù),在32個“常用”的常量中找到要用的常量,其它的不常用常量和比較大的數(shù)值需要用擴(kuò)展后的16位或32位來尋址。因?yàn)椴僮鞔a占用6位,所以一個簡單的常量裝載操作需要一個16位指令(6位操作碼+5位常量+5位目的寄存器)。
基于RISC規(guī)則的裝載/存貯操作只定義了寄存器類型的操作數(shù),并且?guī)缀跛械闹噶钤趩沃芷趦?nèi)完成。這得益于使用了一種只有兩級深度的管道機(jī)制,它使得一條跳轉(zhuǎn)指令執(zhí)行后可以進(jìn)行快速的重裝載動作,跳轉(zhuǎn)目標(biāo)地址在指令緩存內(nèi)的延時(shí)跳轉(zhuǎn)不用一個等待周期即可執(zhí)行。若使用更深度的管道會減慢程序執(zhí)行,因?yàn)樗枰却龜?shù)據(jù)再裝載。
不斷擴(kuò)展的RISC指令集
由于初RISC結(jié)構(gòu)具有定長、單周期指令等的特征,這就使得其指令集不可能包含乘除等復(fù)雜運(yùn)算,所以乘除運(yùn)算只好通過軟件或片內(nèi)/外的其它硬件邏輯來實(shí)現(xiàn)。為解決這類問題,實(shí)現(xiàn)諸如數(shù)字信號處理函數(shù)等運(yùn)算,標(biāo)準(zhǔn)的硬件方法是集成RISC CPU和DSP 內(nèi)核在單芯片內(nèi)。然而,這樣的雙核結(jié)構(gòu)實(shí)現(xiàn)起來具有一定的復(fù)雜性,對兩個處理器之間的同步要求非常高,出現(xiàn)了內(nèi)部總線量成倍增加、要求有雙口RAM問題,還可能出現(xiàn)字長和隊(duì)列紊亂等問題。
一個可解決問題的辦法是在RISC核指令集中增加一些復(fù)雜函數(shù)指令,這就解決了上述的大部分問題,但其的缺點(diǎn)在于函數(shù)的復(fù)雜性導(dǎo)致要多個時(shí)鐘才能執(zhí)行這樣的一條指令。更糟糕的是,當(dāng)作為一些更復(fù)雜函數(shù)的一部分時(shí),這些專門函數(shù)指令經(jīng)常要在一個緊湊的循環(huán)中被重復(fù)執(zhí)行。由于大量的多周期指令在后臺運(yùn)行,使得實(shí)時(shí)應(yīng)用的中斷延時(shí)成為另一個值得關(guān)注的問題。
為徹底解決這些問題,能夠設(shè)計(jì)出這樣一種體系結(jié)構(gòu):只含有一套指令集,但可以通過位于單核內(nèi)的一個獨(dú)立執(zhí)行單元來進(jìn)行復(fù)雜指令的擴(kuò)展。與雙核結(jié)構(gòu)不同的是,RISC和獨(dú)立的指令單元組成單核的指令譯碼、指令緩存、裝載/存儲單元、內(nèi)部總線、CPU寄存器和存儲器接口等,所有這些主要的內(nèi)核資源在單內(nèi)核指令流執(zhí)行時(shí)均是共用的。
該特點(diǎn)又使CPU重新具備了較高的硅單元面積效率和簡單的軟件開發(fā)模型的優(yōu)點(diǎn)。但是與一個簡單的RISC處理器設(shè)計(jì)要直接去處理一些復(fù)雜指令不同的是,這種結(jié)構(gòu)可以通過單核內(nèi)的獨(dú)立執(zhí)行單元來執(zhí)行那些專門的復(fù)雜指令,這些復(fù)雜指令與RISC指令是并行執(zhí)行的,這樣就避免了指令/數(shù)據(jù)流程遲延和中斷延時(shí)(二者總是在一起出現(xiàn))問題。
實(shí)現(xiàn)實(shí)例
Hyperstone的E1-32結(jié)構(gòu)在一個單核內(nèi)結(jié)合了一個32位的RISC CPU和一個簡單的DSP執(zhí)行單元,它們通過一個單一指令流程來運(yùn)行程序,該結(jié)構(gòu)可以支持各種DSP算法需求的數(shù)據(jù)結(jié)構(gòu),如16/32位整數(shù)、16位復(fù)數(shù)等。RISC指令同時(shí)擴(kuò)充了13條額外指令,用以進(jìn)行DSP處理和其它特殊計(jì)算,如單指令乘法、乘法累加(包括復(fù)數(shù)運(yùn)算)、加減(包括定點(diǎn)舍入運(yùn)算)等。
DSP運(yùn)算是通過單核內(nèi)的獨(dú)立DSP單元來完成, 同時(shí)DSP單元和RISC ALU單元的處理過程完全并行,當(dāng)在DSP和ALU處理的時(shí)間內(nèi)有數(shù)據(jù)裝載/存儲操作時(shí),DSP、ALU和裝載/存儲三個動作也是并行的。ALU和DSP兩個執(zhí)行單元是通過96個32位共享寄存器實(shí)現(xiàn)無縫連接,如圖1所示。DSP單元是以一個16×16位乘法器和一個64位的加法器為基礎(chǔ)組成,這樣就可以在一個周期內(nèi)(管道形式)實(shí)現(xiàn)16位乘法累加指令,也可以實(shí)現(xiàn)數(shù)據(jù)濾波器算法中需要的32位和64位加法操作,如圖2所示。


對復(fù)雜函數(shù)和數(shù)據(jù)類型的優(yōu)化
由于使用管道處理方式,E1-32的絕大多數(shù)指令都可以在一個周期內(nèi)完成。指令從專一的指令緩存內(nèi)取出,在一個周期內(nèi)完成譯碼,幾乎所有的RISC指令都可以在第二個周期內(nèi)完成。標(biāo)準(zhǔn)RISC指令和DSP指令并行執(zhí)行,RISC單元和DSP單元都可以在一個周期內(nèi)完成從它們自己的寄存器內(nèi)取操作數(shù)和指令的計(jì)算等操作,同時(shí)在一個周期內(nèi)返回結(jié)果到相應(yīng)的目的寄存器。這樣,管道運(yùn)行的深度只有兩個階段,使得跳轉(zhuǎn)指令執(zhí)行后管道能得到快速填充,同更深度管道相比大大節(jié)省了時(shí)間。
FIR濾波器的計(jì)算就是一個復(fù)雜函數(shù)并行操作的例子,其執(zhí)行過程如下面的代碼所示。函數(shù)內(nèi)部含有一個循環(huán),數(shù)據(jù)裝載和乘法運(yùn)算在循環(huán)內(nèi)并行執(zhí)行。由于RISC和DSP單元并行操作,整個算法的任務(wù)可以被協(xié)調(diào)分配給DSP和RISC兩個單元來執(zhí)行,同時(shí)各自優(yōu)化兩個單元的指令流程以確保指令管道暢通,這就使得指令執(zhí)行速度大大提高。
下面給出FIR濾波器的內(nèi)部循環(huán)的示例代碼:
LDW.PL15,L11; L15 系數(shù)指針,裝兩個系數(shù)
LDW. PL7,L12; L7 歷史指針,裝兩個記錄
MOVDG14.0 ; 清除G14/G15循環(huán)累加器
LDW.PL13,L15: L13指向下兩個系數(shù)
LDW,PL7L14: L14下兩個歷史記錄的值
ADDIL8,-4: 循環(huán)計(jì)數(shù)器減4
EHMCD L11,L12: 半字長度乘累加
EHMACD L13,L14; 半字長度乘累加
LDW.PL15,L11; L11 指向下兩個系數(shù)
LDW.PL7,L12
DBGT LOOP ; 如果L8>0,延時(shí)跳轉(zhuǎn)
EHMACD L13,L14; 半字長度乘累加
擴(kuò)展進(jìn)來的DSP指令集有一個重要特征,即通過對兩個獨(dú)立的16位字運(yùn)算組合,可以進(jìn)行32位字操作數(shù)運(yùn)算。每次運(yùn)行濾波器內(nèi)部循環(huán)時(shí),裝載指令(LDW)都會把兩個16位數(shù)據(jù)合并成一個32位字。 EHMACD指令實(shí)現(xiàn)2個32位字的乘法運(yùn)算,實(shí)質(zhì)是執(zhí)行兩次16位數(shù)的乘法得到兩個32位數(shù),再把這兩個數(shù)合并存儲在一個64位的累加器G14/15里,得到一個64位的計(jì)算結(jié)果。ADDI和DBGT指令用于循環(huán)控制。循環(huán)每執(zhí)行1次,有4次運(yùn)算結(jié)果產(chǎn)生并被累加,因此循環(huán)計(jì)數(shù)器要減去4。圖3示意了用E1-32 DSP/RISC內(nèi)核執(zhí)行FIR濾波器的內(nèi)部循環(huán)中指令的管道執(zhí)行。從中可以看出用E1-32結(jié)構(gòu)在運(yùn)行這一算法時(shí)的獲得的并行程度,也可以看出使用雙執(zhí)行單元的效率優(yōu)勢。
指令緩存的設(shè)計(jì)優(yōu)化了對復(fù)雜函數(shù)的處理
單內(nèi)核RISC/DSP結(jié)構(gòu)的很多優(yōu)越機(jī)制的實(shí)現(xiàn),一方面依賴于該結(jié)構(gòu)給RISC和DSP提供了一個穩(wěn)定的指令流程,另一方面依賴于該結(jié)構(gòu)可以及時(shí)進(jìn)行復(fù)雜函數(shù)處理。Hyperstone公司在片上設(shè)計(jì)了一個非常簡單的指令緩存,含有32個非結(jié)構(gòu)性的32位指令字。這是一個環(huán)形緩沖器,通過兩個計(jì)數(shù)器來管理緩沖器內(nèi)指令。一個前向計(jì)數(shù)器記錄指令字的高端地址,一個后向計(jì)數(shù)器記錄指令字的低端地址,這樣一來在指令緩存內(nèi)可以實(shí)現(xiàn)半字長度的短跳轉(zhuǎn)。這一機(jī)制在指令執(zhí)行時(shí)就好象產(chǎn)生了一個移動窗,滾動向前越過那些已經(jīng)被執(zhí)行過的指令,當(dāng)遇到循環(huán)程序時(shí)窗口移動停止,執(zhí)行循環(huán)程序。

由于這種提前取指可以在指令緩存內(nèi)放入至多8個指令字,所以只能給程序循環(huán)剩下24個指令字空間。也就是說包括結(jié)束循環(huán)的跳轉(zhuǎn)指令在內(nèi),程序循環(huán)的長度為96字節(jié)或94字節(jié)(依據(jù)當(dāng)時(shí)的隊(duì)列情況有所不同)。當(dāng)跳轉(zhuǎn)目的地址在緩存區(qū)內(nèi),且當(dāng)時(shí)緩存沒有溢出時(shí),一個短前向跳轉(zhuǎn)落在前向計(jì)數(shù)器的前兩個指令字位置。
不考慮指令邊界的情況下,對提前取指的控制字以32位方式管道裝載。每進(jìn)行前向取指令操作,前向計(jì)數(shù)器加4,并且前向取得的指令放入指令緩存的位置由前向計(jì)數(shù)器的第6位到第2位之間的五位來確定。如果計(jì)算出新放入的前向指令將要覆蓋后向計(jì)數(shù)器所記錄的指令時(shí),則將前向指令向前移動4個字節(jié),象標(biāo)準(zhǔn)的環(huán)行存儲器操作一樣,把它放在環(huán)形寄存器端。
當(dāng)執(zhí)行長跳轉(zhuǎn)或延時(shí)跳轉(zhuǎn)時(shí),需要檢查跳轉(zhuǎn)的目的地址位置。如果跳轉(zhuǎn)的目的地址在兩個計(jì)數(shù)器的值之間,則判斷為緩存內(nèi)的短跳轉(zhuǎn);如果跳轉(zhuǎn)的目的地址不在緩存內(nèi),當(dāng)跳轉(zhuǎn)的目的地址被拷備到兩個計(jì)數(shù)器內(nèi)時(shí),此時(shí)目標(biāo)指令被裝載到指令緩存內(nèi),就會出現(xiàn)指令緩存溢出的現(xiàn)象。延時(shí)跳轉(zhuǎn)是指新指令跳轉(zhuǎn)到前向計(jì)數(shù)器所指向的位置之前的緩存內(nèi)某個位置,并裝載新的指令到這一位置但不改變兩個寄存器的值的一種跳轉(zhuǎn)形式。從上可以看出,所有這些針對指令緩存的操作只適用于短跳轉(zhuǎn)指令,并且只有當(dāng)緩存模式控制標(biāo)志位設(shè)置后才能生效(緩存模式控制標(biāo)志位在執(zhí)行普通跳轉(zhuǎn)指令或幀指令時(shí)被清零)。
由于大多數(shù)專門運(yùn)算,如DSP函數(shù)的任務(wù)都包含在一個短循環(huán)內(nèi),因此這個簡單的指令緩存設(shè)計(jì)將會對那些復(fù)雜、重復(fù)性的算法具有很好的支持。另外,芯片封裝尺寸明顯減小以及嵌入式系統(tǒng)的實(shí)時(shí)性的改進(jìn)也是指令緩存設(shè)計(jì)的兩個重要貢獻(xiàn)。
實(shí)時(shí)性能和復(fù)雜指令
許多嵌入式應(yīng)用需要一個快速但可預(yù)測的中斷響應(yīng)。兩個執(zhí)行單元的并行運(yùn)行在處理中斷方面有兩個優(yōu)點(diǎn):首先,由于處理中斷的時(shí)候復(fù)雜函數(shù)可有擴(kuò)展的指令(集)來繼續(xù)運(yùn)行,這就保證了那些“不能被打斷的任務(wù)”不被中斷;其次,在那些可以被中斷的任務(wù)場合,中斷不會給進(jìn)行復(fù)雜運(yùn)算造成時(shí)間損失,因?yàn)檫@個任務(wù)可以在RISC單元執(zhí)行中斷處理后繼續(xù)被完成。只要不被更別的中斷所打斷,這種兩個單元獨(dú)立執(zhí)行的能力使得處理器可以在7個時(shí)鐘周期內(nèi)啟動中斷服務(wù)程序,甚至是在擴(kuò)展的指令集執(zhí)行一個復(fù)雜函數(shù)的過程中也同樣在7個時(shí)鐘周期內(nèi)啟動中斷服務(wù)程序。
軟件上的考慮
這種獨(dú)特的處理器結(jié)構(gòu)在軟件設(shè)計(jì)上同樣具有優(yōu)勢。在同一個指令流程內(nèi)并行執(zhí)行RISC指令和DSP指令,給程序編譯帶來了很大的性能提升。Hyperstone公司利用該結(jié)構(gòu)內(nèi)在的并行機(jī)制編寫了一個經(jīng)過優(yōu)化處理的針對RISC/DSP處理器的函數(shù)庫。同樣,簡單的程序開發(fā)流程、對參數(shù)傳遞和實(shí)時(shí)中斷的硬件支持都大大簡化了程序開發(fā)和調(diào)試工作的難度。
參考文獻(xiàn):
[1]. RISC datasheet http://www.hbjingang.com/datasheet/RISC_1189725.html.
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- ARM技術(shù)架構(gòu)與應(yīng)用開發(fā)實(shí)踐指南2026/1/6 10:40:19
- 嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)選型與移植技術(shù)指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術(shù)選型與抗干擾設(shè)計(jì)實(shí)踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時(shí)代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎(chǔ)知識2025/7/14 16:59:04
- PCB焊盤與過孔設(shè)計(jì)核心實(shí)操規(guī)范(含可焊性與可靠性保障)
- 汽車電子常用電子元器件選型指南
- MOSFET驅(qū)動與隔離方案設(shè)計(jì)
- 高溫環(huán)境下電源IC選型建議
- 安防監(jiān)控設(shè)備連接器應(yīng)用分析
- 高速PCB信號完整性(SI)設(shè)計(jì)核心實(shí)操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計(jì)算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護(hù)設(shè)計(jì)
- 連接器耐腐蝕性能測試方法









