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