基于ARM和DSP架構(gòu)的多處理器高速通訊協(xié)議設(shè)計
雖然DSP具備眾多的優(yōu)點(diǎn), 但卻不適合作系統(tǒng)控制,因為DSP通常沒有強(qiáng)大的操作系統(tǒng),沒有完備的網(wǎng)絡(luò)協(xié)議棧和可靠的文件系統(tǒng),DSP架構(gòu)在作控制指令時無法并行處理,分支判斷和高速緩存沒命中(cache miss)都會使運(yùn)行效率極大降低。而這些正好是嵌入式RISC處理器的強(qiáng)項,比如ARM和MIPS系列,所以現(xiàn)在很多國際知名的半導(dǎo)體公司如PHILIPS和TI都推出了整合了RISC處理器和DSP的SOC芯片,如PNX8550、PNX8525、OMAP等。
高性能的DSP在進(jìn)行媒體處理時會產(chǎn)生和消費(fèi)大量的音視頻數(shù)據(jù),這些數(shù)據(jù)需要在RISC 和DSP兩個處理器之間高速、穩(wěn)定地交換數(shù)據(jù),另外,RISC處理器也要經(jīng)常給DSP發(fā)送指令,并且還要支持來自DSP的RPC調(diào)用。下面本文將要介紹一種基于多處理器之間的高速通訊機(jī)制,并且已在實(shí)踐中得到商業(yè)化的應(yīng)用。
本方案采用了SAMSUNG的S3C2510(ARM940T內(nèi)核)和PHILIPS的Trimedia1300(TM1300) 數(shù)字信號處理器,ARM940T內(nèi)置了PCI2.1規(guī)范的總線接口,Trimedia1300可以作為PCI的MASTER和SLAVE,基本架構(gòu)如圖-1。
圖-1
基于上述的硬件架構(gòu),在ARM和Trimedia1300處理器上分別采用了WindRiver的實(shí)時嵌入式操作系統(tǒng)(RTOS)vxWorks和pSos2.5,本通訊協(xié)議的基本思路為,在ARM的內(nèi)存空間上開辟一塊共享內(nèi)存,并能使TRIMEDIA能夠訪問,數(shù)據(jù)通訊的握手協(xié)議通過兩個處理器的中斷來實(shí)現(xiàn),配合信號量的使用,可以達(dá)到高速、高效通訊的目的,其軟件架構(gòu)如圖-2。 圖-2
該通訊協(xié)議采用分層分布,兩個處理器基本處于對稱狀態(tài),因此,主要軟件模塊是公用的,有區(qū)別的是硬件抽象層和操作系統(tǒng)抽象層,與硬件和操作系統(tǒng)相關(guān)的模塊比如中斷驅(qū)動、信號量同步處理都分別提煉出來,單獨(dú)放在這些模塊文件中,減少軟件開發(fā)和維護(hù)的工作量。下面對圖-2中的軟件模塊進(jìn)行說明:
1. 硬件抽象層:該層主要完成對不同處理器的硬件的抽象,比如地址映射、中斷處理、 PCI配置空間的訪問,IO寄存器的訪問等功能。將兩個處理器之間的硬件差異隱藏起來,以便上一層統(tǒng)一管理接口。
2. 操作系統(tǒng)抽象層:該層主要完成對不同操作系統(tǒng)之間的抽象,提供vxWorks和pSos兩個操作系統(tǒng)的統(tǒng)一接口,主要是同步、信號量、關(guān)鍵代碼的互斥保護(hù)機(jī)制等功能。
3. 通道及同步事件管理層:為了建立多處理器之間的多通道通訊和同步機(jī)制,該層支持多個通道獨(dú)立通訊能力,每個通道都有唯一的句柄用于訪問,通道的打開、使用、關(guān)閉相互獨(dú)立。該層同時也支持命名的同步事件,可用于處理器之間的同步等待功能。
4. 消息處理管理層:該層完成多通道的指定長度分組包通訊功能,支持小數(shù)據(jù)量的通訊數(shù)據(jù),并支持同步機(jī)制,DSP的控制指令可以采用這種方式進(jìn)行通訊。
5. 共享緩存:支持多通道命名共享緩存,其中的數(shù)據(jù)可以同時被兩個處理器訪問,配合同步事件機(jī)制,流式數(shù)據(jù)可以采用這種方式進(jìn)行高速、高效通訊。
6. 同步事件:支持多通道可命名的處理器之間的同步事件功能,ARM或DSP可以讓對方等待同步事件,用于精確控制同步處理共享資源。
7. RPC(遠(yuǎn)程過程調(diào)用)層:在消息處理管理層和同步事件的基礎(chǔ)上,當(dāng)DSP處理器有時需要打印調(diào)試信息,或者讀取HOST的資源時,比如調(diào)用printf、fopen、fread等標(biāo)準(zhǔn)c輸入輸出函數(shù),通過該層處理后,ARM會調(diào)用相關(guān)函數(shù)完成指定的任務(wù),并將結(jié)果返回給Trimedia1300。
在這里我們還要專門的描述的是位于硬件抽象層里的共享內(nèi)存,它只在HOST的一方存在,所有需要兩個處理器共享的數(shù)據(jù)都存儲在該區(qū)域里,包括高層的共享緩存、消息、同步事件、通道信息等數(shù)據(jù),因此需要主機(jī)維護(hù)物理連續(xù)的、一定大小的內(nèi)存,并且是處理器非cacheable的區(qū)域。
下面本文將描述典型的控制指令傳輸方式,具體的過程見圖-3
圖-3
過程說明:本端處理器作初始化,創(chuàng)建同步事件,打開消息通訊句柄, 同步事件用于讀取數(shù)據(jù)時任務(wù)阻塞,然后創(chuàng)建通訊數(shù)據(jù)包并且發(fā)送,發(fā)送例程將數(shù)據(jù)存儲在共享緩沖區(qū)內(nèi),最后觸發(fā)對方中斷。對端處理器進(jìn)入中斷響應(yīng),首先中斷例程分析共享數(shù)據(jù)區(qū)的通訊數(shù)據(jù)狀態(tài),發(fā)現(xiàn)某通道有新的未處理數(shù)據(jù)后,將其拷貝至自己的私有內(nèi)存空間,并清理自己的共享數(shù)據(jù)區(qū)狀態(tài),然后釋放在等待中的通訊任務(wù)的信號量,使讀通訊數(shù)據(jù)包的任務(wù)解除阻塞狀態(tài),從私有數(shù)據(jù)區(qū)讀取通訊數(shù)據(jù)包并作相應(yīng)處理。
數(shù)據(jù)流通訊與數(shù)據(jù)包通訊類似,不過方法更簡單,在創(chuàng)建共享緩存和同步事件后,一方寫入數(shù)據(jù)后,出發(fā)同步事件,另一方等到同步事件解除后讀取數(shù)據(jù),效率很高而處理器開銷節(jié)省至最低。
處理器之間的同步事件功能可以有效地對共享資源進(jìn)行保護(hù),防止多處理器同時對某一個共享資源訪問,導(dǎo)致數(shù)據(jù)不完整。RPC(遠(yuǎn)程過程調(diào)用)功能能方便的用于系統(tǒng)調(diào)試和利用主處理器資源,能方便產(chǎn)品的調(diào)試和功能開發(fā)。
以上是簡化的多處理器通訊模型,方法適用于大多數(shù)RISC+DSP的架構(gòu),另外為了實(shí)現(xiàn)該通訊機(jī)制,還必須先完成三個前提,下面將簡單對此進(jìn)行描述。
1. 位于HOST的共享內(nèi)存必須是物理連續(xù)、非緩沖(none-cacheable)的一段內(nèi)存,否則,兩個處理器因為本身都帶有數(shù)據(jù)高速緩存,會使數(shù)據(jù)的完整性無法保障,因此需要對兩個處理器進(jìn)行配置,對這段內(nèi)存的訪問關(guān)閉cache操作,具體操作過程不再贅述。
2. 在編譯Trimedia1300程序的時候,將指向共享內(nèi)存的指針設(shè)置為下載時解析,并且要將Trimedia1300的下載程序移植到vxWorks操作系統(tǒng),再下載解析該指針時將其指向ARM已分配給好的物理連續(xù)內(nèi)存,Trimedia1300程序開始運(yùn)行后就可以立即對共享內(nèi)存初始化并進(jìn)行通訊。
3. 該通訊協(xié)議以vxWorks的BSP(板級支持包)的方式提供接口,并創(chuàng)建標(biāo)準(zhǔn)的vxWorks設(shè)備,便于安裝、使用。
該通訊規(guī)范已經(jīng)在實(shí)用化的商業(yè)多媒體機(jī)頂盒中運(yùn)行,該產(chǎn)品的數(shù)據(jù)流量較大,對時延要求很高,控制命令非常密集,從總體評價來看,采用該通訊協(xié)議后,無論是其效率、延時、處理器占用時間、靈活性、穩(wěn)定性、可拓展性均獲得很好的表現(xiàn),希望本文也能對正在開發(fā)類似產(chǎn)品的人員起一定的提示作用,能加快相關(guān)產(chǎn)品的研發(fā)。
2004-7-8
參考文獻(xiàn):
Tornado Online Manuals by Windriver
Trimedia SDE Documents by Philips Semiconductor
pSOS Manuals by Integrated Systems, Inc.
S3c2510A User’s manuals by Samsung Electronics
PCI Local Bus Specification by PCI Special Interest Group
評論