基于MSGQ模塊的DSP的應用簡(jiǎn)化方案
電信基礎設備、視頻基礎設備以及影像應用等對于帶寬的要求迅速提升,這些系統需要支持具有更高分辨率、更快幀速率以及更出色音質(zhì)的音視頻流。同時(shí),上述系統還要提高信道密度,降低每信道的功耗。此外,該市場(chǎng)不僅要求提高外設與存儲器的集成度,而且還要進(jìn)一步縮減電路板面積,從而節約系統成本。開(kāi)發(fā)人員需要高度可擴展的靈活硅芯片器件和工具來(lái)幫助他們跟上市場(chǎng)發(fā)展趨勢的要求。
用于數字信號處理器(DSP)的一些傳統高性能I/O在可靠性、帶寬充足性以及可擴展性等方面都存在一定的局限性。串行RapidIO(sRIO) 能夠通過(guò)提供一種高性能的分組交換式互連技術(shù)解決這種局限性問(wèn)題,這對復雜的DSP拓撲而言非常有用。與其前代技術(shù)不同,sRIO不需要與存儲器共享接口,而且既能作為主系統又能作為從系統運行。此外,其還可支持較長(cháng)的物理連接距離以及硬件級故障檢測/糾錯、狀態(tài)/確認反饋以及帶內中斷/信號發(fā)送等。
德州儀器(TI)推出的TMS320C6?55等高級DSP現已集成了sRIO接口。這種接口具有極高的效率,能直接連接至DSP的DMA引擎,通過(guò)事務(wù)處理代理寄存器來(lái)降低控制開(kāi)銷(xiāo)。為了提高DMA系統數據處理的效率,可對數據設定優(yōu)先級,而且該接口還支持多個(gè)事務(wù)處理的排隊。
復雜系統拓撲中的sRIO
首先,我們必須了解sRIO在復雜系統拓撲中發(fā)揮的作用,明確它在物理系統的實(shí)施過(guò)程中如何提高靈活性。sRIO可支持芯片之間的通信,速度高達 20Gbps乃至更高。sRIO提供1X和4X寬度的1.25、2.5或3.125GHz雙向鏈接,每向吞吐速率高達10Gbps。
利用sRIO,設計人員能夠確定如何實(shí)現多個(gè)器件的最佳連接。DSP可直接進(jìn)行網(wǎng)形、環(huán)形以及星形拓撲的連接,也可通過(guò)交換機進(jìn)行多個(gè)DSP的連接,彼此之間有無(wú)本地連接均可。此外,我們還可采用sRIO一并連接DSP、FPGA和ASIC。這種高度的靈活性使設計人員能根據應用數據流的需要任意安排組件,而不會(huì )因為接口或協(xié)議的限制影響系統設計。
例如,一個(gè)簡(jiǎn)單的系統可以具備兩個(gè)通過(guò)4倍速鏈接相連的DSP。另一個(gè)系統則要求更高的計算能力,不過(guò)不需要更多I/O。這種系統可以由5個(gè)DSP組成,每個(gè)DSP都直接通過(guò)1倍速鏈接彼此相連。第三個(gè)系統也包含5個(gè)DSP,它們均采用4倍速鏈接連接至中央交換機,以實(shí)現更佳的I/O性能(圖1)。第四個(gè)系統則有更繁重的計算要求,其中可能包含12個(gè)乃至更多的DSP,它們均通過(guò)4倍速鏈接連接至一個(gè)或多個(gè)交換機的系統架構,從而實(shí)現最高的計算能力和I/O帶寬。
圖1:在本例中,sRIO能靈活地連接所有五個(gè)DSP。
支持sRIO的系統能夠通過(guò)充分利用上述特性顯著(zhù)提高整體性能。例如,在無(wú)線(xiàn)基礎設施系統中,總共三到六個(gè)速度達Gbps的天線(xiàn)數據通常由可處理24到48 個(gè)天線(xiàn)流(antenna stream)的ASIC或FPGA支持,這時(shí)每個(gè)基站的速率約為123Mbps。另一方面,用戶(hù)數據通常在DSP上處理,每個(gè)用戶(hù)通道速度約 19Mbps,統一采用共享的EMIF通道。采用鏈接sRIO通道的DSP使用戶(hù)數據和天線(xiàn)數據能獨立得到處理。采用DSP所需的成本不僅大大低于 FPGA或ASIC,而且在24到48個(gè)天線(xiàn)流的系統中能處理相同的數據速率,每個(gè)通道速度約為123Mbps,因此天線(xiàn)數據速度總共能到每秒3到 6Gb。對于用戶(hù)數據而言,諸如最新DSP系列的較高核心速度、較快的sRIO I/O速度,以及能釋放外部存儲器帶寬等優(yōu)異特性,使通道密度能夠提高到每DSP達128個(gè)用戶(hù)通道,每通道速度為19Mbps,這樣整體而言每個(gè)DSP 的用戶(hù)數據總速度達2.5Gbps。
消息傳遞
軟件開(kāi)發(fā)人員不僅能夠受益于 sRIO接口具有的更高性能和更高靈活性,而且他們無(wú)論采用低級編程技術(shù)還是高級編程技術(shù)均可進(jìn)行應用開(kāi)發(fā)。如果使用低級直接I/O方案,編程人員必須指定目標和地址,這種方案在能夠實(shí)現最佳性能的同時(shí),還非常適用于在設計時(shí)就已知目標緩沖方案的應用,并且應用的分組是固定的。但是,這種方法的缺點(diǎn)是開(kāi)發(fā)人員必須了解遠程處理器的物理存儲器映射,這使第三方集成非常困難。
高級消息傳遞方案能夠在無(wú)需進(jìn)行大量低級器件編程的情況下就能提供一種更抽象的通信方法。這種方法對目標緩沖方案未知的應用最為適用,而且對于應用分組未知或者比較靈活的情況也很適用。此外,消息傳遞接口能夠顯著(zhù)縮短用于增加或減少應用處理器所需的時(shí)間。
數家嵌入式處理器廠(chǎng)商為sRIO提供內核級軟件層支持。例如,在TI DSP中,消息傳遞由DSP/BIOS軟件內核基礎消息隊列(MSGQ)模塊提供支持,這使應用程序開(kāi)發(fā)人員能在更高級的抽象水平上設計軟件。
消息傳遞使應用程序能夠通過(guò)sRIO互連更高效地與其它DSP通信。通過(guò)這種方法發(fā)送的消息,其優(yōu)先級高于數據緩沖,這一點(diǎn)非常有用,因為以更高的優(yōu)先級控制數據通常來(lái)說(shuō)是更好的做法。MSGQ能在無(wú)需修改源代碼的情況下在處理器中移動(dòng)讀取器和寫(xiě)入器,因此我們能在單個(gè)處理器上進(jìn)行開(kāi)發(fā),而且能方便地針對多處理器系統進(jìn)行縮放。也就是說(shuō),寫(xiě)入器不用了解讀取器駐留在哪個(gè)處理器上,這不僅能簡(jiǎn)化集成,而且還能簡(jiǎn)化客戶(hù)端/服務(wù)器應用等的開(kāi)發(fā)工作。
此外,MSGQ還可支持消息的零拷貝傳輸,假定底層物理介質(zhì)支持處理器間零拷貝。零拷貝基本說(shuō)來(lái)就是指針傳遞(pointer passing),而不是將消息內容拷貝到其它消息中。我們可在單個(gè)的處理器上完成上述操作,也可在共享存儲器的多部處理器完成。由于能從特定集 (pool)分配消息,因而我們能輕松地實(shí)現服務(wù)質(zhì)量(QoS)特性,如針對關(guān)鍵資源提高性能、加快速度等。
MSGQ模塊
MSGQ模塊包括API接口、分配器以及傳輸程序等(圖2)。API接口將應用程序與傳輸程序和分配器相隔離。分配器為消息分配提供接口,而傳輸程序則為處理器間的消息傳輸提供接口。
圖2.MSGQ模塊
必須首先對在MSGQ模塊中發(fā)送的所有消息進(jìn)行分配。我們能用多個(gè)分配器從一個(gè)集分配關(guān)鍵信息,再從另一個(gè)集分配非關(guān)鍵信息。我們可以舉一個(gè)簡(jiǎn)單的分配器的實(shí)例,即所謂STATICPOOL的靜態(tài)分配機制,由應用程序提供的靜態(tài)緩沖器負責管理。在初始化階段,STATICPOOL分配器會(huì )接收地址、緩沖器長(cháng)度以及請求消息的大小??蓪⒕彌_器分為指定的消息大小塊,并放置在鏈接列表中,這有助于簡(jiǎn)化消息定位。
接下來(lái),傳輸程序在物理鏈接上將消息發(fā)送給另一處理器上的目標消息隊列(圖3)。通過(guò)傳輸接口,應用程序能在不改變自身的情況下改變底層通信機制,不過(guò)需要配置傳輸程序。這種方案將物理鏈接的具體技術(shù)問(wèn)題隱藏起來(lái),提高了應用的可移植性。
圖3:傳輸功能
消息隊列具有整個(gè)系統內唯一的名稱(chēng),發(fā)送器能通過(guò)其名稱(chēng)來(lái)定位消息隊列。所有通過(guò)MSGQ模塊發(fā)送的消息都必須在第一字段編碼MSGQ_Msg Header,之所以必須是因為內部指令就保存在報頭中,報頭由傳輸程序和MSGQ模塊內部使用。消息發(fā)送到不同的處理器時(shí),傳輸程序對消息報頭部分的任何字大小和字節序(endian)差異進(jìn)行處理。應用程序負責消息專(zhuān)用部分所需的轉換。
由于不同的處理器可能采用不同的調用模塊(系統中的消息隊列),因此MSGQ模塊允許應用程序寫(xiě)入器指定通知機制的類(lèi)型,這非常有用,因為用戶(hù)能指定通知機制,并相應地調節M(mǎn)SGQ。不過(guò),一旦將消息發(fā)送給讀取器,寫(xiě)入器就會(huì )丟掉消息的擁有權,并且不能再修改或釋放消息,因此在發(fā)送之前確保消息的正確性至關(guān)重要。當讀取器接收消息后,必須釋放消息或重復使用消息。
消息隊列的定位
MSGQ為每個(gè)打開(kāi)的消息隊列保留一個(gè)消息存儲庫,消息隊列的讀取器從消息隊列的存儲庫中獲取消息。如果需要將讀取器或寫(xiě)入器線(xiàn)程移至另一個(gè)處理器,就無(wú)需更改讀取器或寫(xiě)入器代碼。
定位消息隊列有兩種辦法:同步定位和異步定位。采用同步定位法情況下(可能采取阻塞方法),消息管理每個(gè)傳輸程序的查詢(xún),以查找所需消息隊列的位置。采用異步定位法情況下,將消息隊列定位后會(huì )發(fā)送異步定位消息給指定的消息隊列。
同步法的實(shí)施更為簡(jiǎn)便,但要求用于阻塞隊列的一些參數,如定位線(xiàn)程等。雖然異步法無(wú)需進(jìn)行阻塞,但實(shí)際操作更為困難,難以使用。
我們可通過(guò)應用程序指定的通知機制來(lái)支持同步或異步操作。用戶(hù)可指定通知機制,如信號量和中斷記入等,這樣就不用再遵循特定的調用模式。消息發(fā)送器能嵌入消息隊列,消息讀取器則能提取消息隊列并做出回答。
數據流示例
以下我們給出來(lái)自某個(gè)應用程序的基本數據流程。根據設計,該應用可在兩個(gè)DSP之間移動(dòng)數據。在本例中,我們用多個(gè)集來(lái)管理不同類(lèi)型的消息,其中包括應用程序、傳輸程序內部控制消息以及錯誤消息等。采用不同的集并不是必需的,但這樣做有助于簡(jiǎn)化應用程序的維護。例如,管理若干個(gè)小集有時(shí)要比管理單個(gè)大集要簡(jiǎn)單。此外,如果消息大小有所不同,那么采用單個(gè)大集的話(huà)就會(huì )浪費大量存儲器空間,因為這時(shí)必須支持最差情況下的空間要求。
本例中的流程可運行在TI的TMS320C6?55 EVM等評估板上,這款評估板采用兩個(gè)通過(guò)sRIO實(shí)現互連的1GHz TMS320C6?55 DSP。該評估板提供了完整的代碼以供參考:
評論