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