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