異質(zhì)多處理器芯片中的數(shù)據(jù)流核心設(shè)計(jì)
異質(zhì)多處理器系統(tǒng)(Heterogeneous Multiprocessor)是將兩種以上不同工作性質(zhì)的處理器核心整合為一的處理器系統(tǒng)。它通常包含了一般用途處理器(General Purpose Processor)和特殊用途處理器(Specific Purpose Processor)。隨著片上系統(tǒng)SoC(System on Chip)及相關(guān)技術(shù)的成熟,已經(jīng)可以將不同的處理器整合到一個(gè)芯片里,成為多處理器芯片。以多媒體應(yīng)用為例,比較著名的異質(zhì)多處理芯片有德州儀器公司的 TMS320DSC25、TMS320DM270和TMS320DM320。這些芯片都是由ARM微核心和DSP微核心組成。傳統(tǒng)的多處理器系統(tǒng)架構(gòu)(如Intel SMP架構(gòu))是由多個(gè)處理芯片通過外部總線匯接而成,而多處理器片上系統(tǒng)架構(gòu)是在單一芯片上包含了多個(gè)處理器核心。它能減少系統(tǒng)的功耗并使整個(gè)系統(tǒng)發(fā)揮最大的運(yùn)算效能。
本文引用地址:http://www.ex-cimer.com/article/78048.htm1 硬件平臺(tái)
本設(shè)計(jì)采用的硬件平臺(tái)是德州儀器公司的TMS320DM270,它由兩個(gè)微處理器核心ARM7TDMI和TMS320C5409組成。采用主從式架構(gòu),前者為主動(dòng)端,后者為被動(dòng)端。ARM7TDMI是32位的一般用途處理器,負(fù)責(zé)DM270系統(tǒng)的整體運(yùn)作和所有周邊設(shè)備的控制。TMS320C5409為16位的數(shù)字信號(hào)處理器,主要負(fù)責(zé)多媒體信號(hào)處理.如音視頻的編解碼運(yùn)算等。ARM可以經(jīng)由DSP控制器重置或喚醒,還可對(duì)DSP發(fā)出不可屏蔽式的中斷(Non-Masked Interrupt)。
雙處理器之間必須有良好的通信和數(shù)據(jù)交換機(jī)制.才能使系統(tǒng)在多進(jìn)程環(huán)境下有效合作。在DM270中,ARM端的DSP控制器控制數(shù)據(jù)傳輸,DSP端通過 HPI[3](Host Post Interface)與ARM處理器溝通。兩個(gè)微處理器使用HPIB(Host Port Interfaee Bridge)相互連接。ARM和DSP可向?qū)Ψ桨l(fā)出硬件中斷,同時(shí)它們之間存在一段共享存儲(chǔ)區(qū)。通過共享存儲(chǔ)區(qū)映射機(jī)制和中斷的搭配,雙方可以傳輸信息和數(shù)據(jù),并且可以在共享存儲(chǔ)區(qū)存取雙方共同定義的指令,使兩端根據(jù)指令進(jìn)行對(duì)應(yīng)的動(dòng)作。
2 ARM端的DSP管理者
為配合DSP的工作,在ARM端微核心(Micro Kernel)中設(shè)計(jì)了一個(gè)伺服進(jìn)程,它負(fù)責(zé)ARM與DSP的溝通及協(xié)調(diào)運(yùn)行。該進(jìn)程稱為DSP管理者(DSP Manager),如圖1所示。
ARM 端的進(jìn)程并不知道DSP處理器的存在,只知道DSP管理者在運(yùn)行。當(dāng)ARM端的進(jìn)程需要使用DSP進(jìn)程所提供的數(shù)據(jù)處理服務(wù)時(shí),只需向DSP管理者提出請(qǐng)求。DSP端的進(jìn)程也不知道ARM處理器的存在,DSP管理者把ARM端的請(qǐng)求存放在共享存儲(chǔ)區(qū),由DSP的數(shù)據(jù)流核心讀取這些請(qǐng)求,并交給相應(yīng)的DSP 進(jìn)程。當(dāng)請(qǐng)求被DSP進(jìn)程接收后,DSP管理者還要負(fù)責(zé)把提出請(qǐng)求的ARM端進(jìn)程的數(shù)據(jù)存放在共享存儲(chǔ)區(qū),以便DSP端進(jìn)程的讀取和處理。因此ARM與 DSP溝通的效能取決于DSP管理者的執(zhí)行效能。
DSP管理者接收ARM端進(jìn)程的數(shù)據(jù)處理請(qǐng)求。請(qǐng)求信息應(yīng)該包括提出請(qǐng)求的ARM端進(jìn)程的ID、DSP端服務(wù)進(jìn)程的ID、數(shù)據(jù)處理服務(wù)類型的lD以及相關(guān)參數(shù)。同時(shí)DSP管理者把這些請(qǐng)求信息打包封裝為DSP端系統(tǒng)能識(shí)別的內(nèi)容格式,再通過共享存儲(chǔ)區(qū)交給DSP端的數(shù)據(jù)流核心。
3 DSP端的數(shù)據(jù)流核心
DSP端的系統(tǒng)采用數(shù)據(jù)流核心(Dataflow Kernel)架構(gòu)。傳統(tǒng)系統(tǒng)核心架構(gòu)中的進(jìn)程切換由Timer Tick決定,但數(shù)據(jù)流核心中的進(jìn)程卻不受Timer Tick的影響,它們以數(shù)據(jù)驅(qū)動(dòng)(Data Driven)的方式工作。
在DSP 端的核心運(yùn)行著多個(gè)不同類型的數(shù)據(jù)處理服務(wù)進(jìn)程,這些進(jìn)程在DSP啟動(dòng)時(shí)都被設(shè)為阻塞態(tài)(Sleep)。因?yàn)榇藭r(shí)沒有任何數(shù)據(jù)可以用來驅(qū)動(dòng)DSP服務(wù)進(jìn)程的執(zhí)行。當(dāng)ARM端開始傳送數(shù)據(jù)處理請(qǐng)求到DSP端時(shí),數(shù)據(jù)流核心會(huì)根據(jù)這些請(qǐng)求找到對(duì)應(yīng)的DSP服務(wù)進(jìn)程,并使其進(jìn)入執(zhí)行態(tài)(Busy)。當(dāng)該服務(wù)進(jìn)程的數(shù)據(jù)處理任務(wù)完成后,其返回結(jié)果可能是新的數(shù)據(jù)處理請(qǐng)求,該請(qǐng)求同樣也可以進(jìn)入數(shù)據(jù)流核心。驅(qū)動(dòng)其他服務(wù)進(jìn)程的執(zhí)行。所以整個(gè)核心的運(yùn)行是根據(jù)數(shù)據(jù)流 (ARM端的數(shù)據(jù)和DSP進(jìn)程自己產(chǎn)生的數(shù)據(jù))的動(dòng)向決定的。與基于Timer Tick的傳統(tǒng)系統(tǒng)核心相比,只要某一服務(wù)進(jìn)程不斷地接收數(shù)據(jù)處理請(qǐng)求,并且所需的數(shù)據(jù)不斷到達(dá),該進(jìn)程就可以一直擁有CPU的使用權(quán),而無(wú)須進(jìn)行時(shí)間片方式的進(jìn)程切換,從而減少了系統(tǒng)資源的浪費(fèi),提高了DSP的處理效能。
DSP端的進(jìn)程有執(zhí)行和阻塞兩種狀態(tài)。進(jìn)程的狀態(tài)轉(zhuǎn)移如圖2所示。當(dāng)CPU使用權(quán)切換給某個(gè)進(jìn)程時(shí),該進(jìn)程的狀態(tài)將被核心設(shè)定為Busy并開始處理數(shù)據(jù)。當(dāng)數(shù)據(jù)處理完后,數(shù)據(jù)流核心從數(shù)據(jù)請(qǐng)求隊(duì)列DRQ(Data Request Queue)中取出下一個(gè)請(qǐng)求。如果請(qǐng)求信息中指定的DSP服務(wù)進(jìn)程與目前進(jìn)程相同,則該進(jìn)程的狀態(tài)依舊為Busy.否則核心便將目前進(jìn)程的狀態(tài)設(shè)定為 Sleep,同時(shí)開始進(jìn)程切換,將請(qǐng)求信息中所指定的服務(wù)進(jìn)程設(shè)定為Busy。
3.1 進(jìn)程隊(duì)列狀態(tài)寄存器
ARM 端系統(tǒng)和DSP端系統(tǒng)在共享存儲(chǔ)區(qū)共同定義了16位的進(jìn)程隊(duì)列狀態(tài)寄存器(Process Oueue Status Register),每一位代表DSP端一個(gè)進(jìn)程的狀態(tài),所以DSP端最多有16個(gè)數(shù)據(jù)處理服務(wù)進(jìn)程。若DSP端的數(shù)據(jù)流核心將寄存器的某一位設(shè)為O,則表示與該位對(duì)應(yīng)的DSP進(jìn)程有能力處理新的數(shù)據(jù)處理請(qǐng)求;若設(shè)為1,則表示與該位對(duì)應(yīng)的DSP進(jìn)程沒有能力處理新的請(qǐng)求。
DSP管理者通過查看該寄存器,可以知道DSP端的某些進(jìn)程已不能接收新的數(shù)據(jù)處理請(qǐng)求,它就會(huì)使ARM端的相關(guān)進(jìn)程停止向這些DSP進(jìn)程發(fā)出請(qǐng)求。這樣可以充分利用DSP的資源,降低DSP端的系統(tǒng)負(fù)擔(dān)。
3.2 數(shù)據(jù)流核心的進(jìn)程調(diào)度策略
核心中的進(jìn)程調(diào)度策略是根據(jù)數(shù)據(jù)流架構(gòu)上進(jìn)程運(yùn)行狀態(tài)變化的規(guī)律設(shè)計(jì)的。其工作方式是將ARM端對(duì)DSP端的數(shù)據(jù)處理請(qǐng)求利用環(huán)行隊(duì)列(Circular Queue)的架構(gòu)以FIFO的方式排序,并存入DRQ中。該策略的特點(diǎn)是DSP端的每一個(gè)進(jìn)程都預(yù)先指定最多可以擁有DRQ空間的數(shù)目,等級(jí)越高的進(jìn)程擁有DRQ使用空間就越多,證明其可以處理更多的數(shù)據(jù)請(qǐng)求。該策略將傳統(tǒng)系統(tǒng)核心中進(jìn)程優(yōu)先級(jí)(Priority)的概念轉(zhuǎn)化為進(jìn)程可以處理數(shù)據(jù)請(qǐng)求的多少。進(jìn)程等級(jí)越高,能處理的數(shù)據(jù)請(qǐng)求也越多,同時(shí)占用CPU的執(zhí)行時(shí)間也較長(zhǎng)。LDE(Local Data Element)是DSP端每一個(gè)進(jìn)程都有的參數(shù),它表示DSP進(jìn)程在執(zhí)行過程中還可以接收多少個(gè)數(shù)據(jù)處理請(qǐng)求。LDE的初始值由系統(tǒng)定義。整個(gè)DRQ空問的大小由所有DSP進(jìn)程的LDE預(yù)設(shè)最大值的總和決定。
當(dāng)DSP端的數(shù)據(jù)流核心取得ARM端的數(shù)據(jù)處理請(qǐng)求時(shí),根據(jù)請(qǐng)求我到指定的 DSP端進(jìn)程,把該進(jìn)程的LDE減1,然后進(jìn)行相應(yīng)的數(shù)據(jù)處理。如果LDE被減至0,則DSP端數(shù)據(jù)流核心把該DSP進(jìn)程在進(jìn)程隊(duì)列狀態(tài)寄存器中所對(duì)應(yīng)的狀態(tài)位設(shè)為1.以通知DSP管理者該進(jìn)程不能再接收新的請(qǐng)求,分配給該進(jìn)程的所有DRQ空間都已被使用。此后,隨著DRQ中的數(shù)據(jù)請(qǐng)求逐漸被處理,使得該進(jìn)程的DRQ空問再出現(xiàn)剩余時(shí),數(shù)據(jù)流核心會(huì)把進(jìn)程隊(duì)列狀態(tài)寄存器中所對(duì)應(yīng)的狀態(tài)位設(shè)為0,通知DSP管理者可以再次向該DSP進(jìn)程發(fā)送數(shù)據(jù)處理請(qǐng)求。
4 共享存儲(chǔ)區(qū)管理
本設(shè)計(jì)將DM270系統(tǒng)平臺(tái)中的一段32KB大小的存儲(chǔ)區(qū)作為ARM和DSP的共享存儲(chǔ)區(qū)。該存儲(chǔ)區(qū)由DSP管理者負(fù)責(zé)管理。由于TMS320C5409的存儲(chǔ)單位是字節(jié),所以規(guī)定它所訪問的共享存儲(chǔ)區(qū)地址為OxS000~0xBFFF;而ARM7TDMI的存儲(chǔ)單位是字,所以規(guī)定它能訪問的共享存儲(chǔ)區(qū)地址為0x50000~0x57FFF,共享存儲(chǔ)區(qū)分配如圖3所示。共享存儲(chǔ)區(qū)分為32個(gè)存儲(chǔ)塊,每塊大小為 1024B。前兩個(gè)字節(jié)為共享存儲(chǔ)塊的狀態(tài)標(biāo)志位,其值為0代表此存儲(chǔ)塊閑置,1代表此存儲(chǔ)塊已被使用。存儲(chǔ)塊中剩下的1022B用來存放數(shù)據(jù)。DSP管理者將所有ARM端需要DSP處理的數(shù)據(jù)都存儲(chǔ)到這32個(gè)存儲(chǔ)塊上。
當(dāng)32 個(gè)存儲(chǔ)塊全部被使用或者數(shù)據(jù)處理請(qǐng)求中所指定的DSP進(jìn)程的LDE為0時(shí),DSP管理者向ARM端提出該請(qǐng)求的進(jìn)程阻塞,防止因不斷地提出請(qǐng)求而造成系統(tǒng)資源的浪費(fèi)。當(dāng)所指定的DSP進(jìn)程數(shù)據(jù)處理結(jié)束后,DSP端的數(shù)據(jù)流核心將該進(jìn)程阻塞,并對(duì)DRQ空間和進(jìn)程隊(duì)列狀態(tài)寄存器作相應(yīng)調(diào)整,然后主動(dòng)釋放該 DSP進(jìn)程使用的共享存儲(chǔ)塊,同時(shí)向ARM端發(fā)出中斷信號(hào)。DSP管理者接收到此中斷信號(hào)后,根據(jù)進(jìn)程隊(duì)列狀態(tài)寄存器判斷出請(qǐng)求所指定的DSP進(jìn)程已經(jīng)可以開始處理數(shù)據(jù)了,讓剛才在ARM端被阻塞的進(jìn)程繼續(xù)運(yùn)行.并把數(shù)據(jù)寫入共享存儲(chǔ)塊,以便DSP進(jìn)程讀取和處理。當(dāng)存在閑置的存儲(chǔ)塊并且數(shù)據(jù)處理請(qǐng)求所指定的DSP進(jìn)程的LDE不為0時(shí),DSP管理者可直接將ARM端進(jìn)程的數(shù)據(jù)寫到共享存儲(chǔ)塊,以便相應(yīng)的DSP進(jìn)程讀取和處理。
5 DSP端系統(tǒng)的熱抽換
DSP 系統(tǒng)的更換技術(shù)對(duì)多媒體應(yīng)用而言非常重要。如果DSP端需要播放不同格式的影片,則必須把整個(gè)DSP端系統(tǒng)更換以支持不同格式的解碼器。因此在系統(tǒng)設(shè)計(jì)中使用了熱抽換技術(shù)。傳統(tǒng)熱抽換技術(shù)的定義是動(dòng)態(tài)地把系統(tǒng)中的核心層部分更換,在不重新開機(jī)的情況下,進(jìn)程還可以正常工作。而本設(shè)計(jì)的熱抽換是更換整個(gè) DSP端的系統(tǒng),同時(shí)維持ARM端進(jìn)程的正常工作。為了實(shí)現(xiàn)熱抽換,必須在某段靜態(tài)存儲(chǔ)區(qū)存放多個(gè)版本的DSP系統(tǒng)程序。本設(shè)計(jì)中,這些程序被存放到 DM270的Flash Memory中,ARM端的檔案系統(tǒng)負(fù)責(zé)維護(hù)和管理這部分內(nèi)容。
DSP 系統(tǒng)的熱抽換過程如下:①DSP端要把那些由于沒有進(jìn)行數(shù)據(jù)處理而陷入阻塞的DSP進(jìn)程全部釋放,否則當(dāng)DSP端系統(tǒng)更新后,這些進(jìn)程會(huì)因?yàn)橛肋h(yuǎn)不能再得到相應(yīng)的數(shù)據(jù),而造成永久阻塞,形成系統(tǒng)資源浪費(fèi);②ARM端的DSP管理者會(huì)清空所有的共享存儲(chǔ)區(qū),同時(shí)阻塞ARM端的所有用戶進(jìn)程;③ARM端的檔案系統(tǒng)將從Flash Memory中讀取所需的DSP系統(tǒng)檔案并將它加載到DSP的內(nèi)存;④DSP端系統(tǒng)啟動(dòng),DSP管理者喚醒ARM端所有被阻塞的進(jìn)程,為更新后的DSP系統(tǒng)服務(wù)。
本文以DM270平臺(tái)為基礎(chǔ),設(shè)計(jì)了DSP端的數(shù)據(jù)流核心和ARM端的DSP管理者。與傳統(tǒng)的、基于時(shí)間片的多進(jìn)程系統(tǒng)核心相比,數(shù)據(jù)流核心的進(jìn)程是靠數(shù)據(jù)驅(qū)動(dòng)的方式工作的。它能有效地減少進(jìn)程的切換.節(jié)約系統(tǒng)資源,使DSP可以更加專注于多媒體數(shù)據(jù)的處理。
評(píng)論