摘 要: 詳細分析了主從式系統(tǒng)中雙處理器數據交換的原理,提出了一種基于共享內存池傳遞數據的新方法。該方法數據傳遞效率高,具有良好的開放性,在多種視訊終端上應用良好。
關鍵詞: 主從系統(tǒng) 數據鏈路層 消息
目前,視訊終端一般是基于X86結構的,在成本、穩(wěn)定性、噪聲、使用、安全和維護等方面存在著一系列急需解決的問題。解決的辦法是采用嵌入式架構,開發(fā)基于主從雙處理器的終端,從處理器完成媒體處理,主處理器完成協(xié)議和上層應用。這種終端具有成本低、穩(wěn)定性高的特點。在這種系統(tǒng)中,主從處理器之間的數據傳遞方式對性能影響很大,主要的方式包括事件驅動和消息驅動兩種模式。本文綜合二者的優(yōu)點,提出一種基于共享內存池傳遞數據的新方法。
1 系統(tǒng)硬件平臺及軟件架構
系統(tǒng)硬件包括MIPS(充當主控芯片HOST)和多個DSP(可以是DM642、TM1502等多種DSP),通過PCI總線傳遞命令和數據。屏蔽硬件細節(jié),可以視其為以PCI總線成樹型聯(lián)結的分布式系統(tǒng),如圖1所示。
在圖1中,DSP芯片組完成視音編解碼" title="編解碼">編解碼、本地圖像的獲取和顯示,任務單一,被視為協(xié)處理器" title="協(xié)處理器">協(xié)處理器族;HOST芯片在本系統(tǒng)中是MIPS,對上完成協(xié)議棧,對下完成打拆包后的數據收發(fā)以及對協(xié)處理器的控制(包括協(xié)處理器增加、配置、工作狀態(tài)設定、任務分配與均衡、協(xié)處理器刪除等功能)。HOST和協(xié)處理器族通過PCI總線互聯(lián),所有控制命令和數據都通過PCI總線傳遞。
屏蔽硬件差別,該系統(tǒng)軟件結構可以抽象成如圖2所示形式。
主從兩側分別提供相應的驅動,通過驅動層相互作用。協(xié)處理器一側的驅動分成各個芯片的驅動,位于各個芯片系統(tǒng)中。傳遞的信號或數據流都簡化為通道上的命令和數據;每個協(xié)處理器視為一個節(jié)點;協(xié)處理器的啟用/停止/任務改變視為節(jié)點的增/刪/節(jié)點狀態(tài)改變。
2 數據鏈路層設計
2.1 節(jié)點的狀態(tài)及管理
在多處理器平臺上,協(xié)處理器被視為處理器網絡上的節(jié)點,每個節(jié)點就是一個DSP處理器。對于每個節(jié)點,可能處在多路" title="多路">多路視(音)頻編碼,也可能處在多路視(音)頻解碼,或者同時進行多路視(音)頻編/解碼。因此,節(jié)點的狀態(tài)定義為對一路視(音)頻而言所處的編解碼狀態(tài),即一個通道的狀態(tài),DSP節(jié)點的狀態(tài)是各通道視(音)頻處理狀態(tài)的合集。從而可以將各通道粗略地分成4個狀態(tài):
(1)RESET狀態(tài)
系統(tǒng)啟動,DSP尚未運行時,為了降低系統(tǒng)功耗,所有DSP處于硬件復位狀態(tài);當HOST要求DSP推出服務時,將DSP硬件復位,即回到復位狀態(tài)。此時編解碼算法尚在HOST處。
(2)IDLE狀態(tài)
HOST的資源分配算法要求啟用DSP時,退出DSP硬件復位,DSP引導,并下載軟件及算法,DSP空轉,各路編解碼器處于待命狀態(tài)。為簡單起見,此時應同時下載編、解算法,避免分步下載。
(3)CODER狀態(tài)
DSP僅執(zhí)行編碼,包括視頻和音頻算法??梢灾С侄嗦?,算法應可重入。
(4)DECODER狀態(tài)
DSP僅執(zhí)行解碼,包括視頻和音頻算法??梢灾С侄嗦罚惴☉芍厝?。
為了驅動DSP在以上狀態(tài)間轉換,定義一組命令字,由HOST發(fā)給DSP,驅動DSP的狀態(tài)變化。命令字的含義如下:
(1)Create/Delete:DSP處于RESET狀態(tài)時,發(fā)出Create命令,引導DSP,并向DSP下載視音頻" title="視音頻">視音頻編解碼算法,DSP進入IDLE狀態(tài);當DSP退出運行時,發(fā)出Delete命令,DSP進入復位狀態(tài)。
(2)Enc(vEnc/aEnc):可細分為視頻編碼和音頻編碼。當發(fā)出該命令時,DSP進入CODER狀態(tài),同時進行多路視音頻編碼。
(3)Dec(vDec/aDec):可細分為視頻解碼和音頻解碼。當發(fā)出該命令時,DSP進入DECODER狀態(tài)。
(4)Pause(vPause /aPause):可細分為視頻編解碼和音頻編解碼。當發(fā)出該命令時,DSP進入IDLE狀態(tài)。
在上層軟件的數據結構" title="數據結構">數據結構中,以鏈表來管理DSP節(jié)點,增加一路視音頻對應鏈表節(jié)點的插入,減少一路視音頻對應鏈表節(jié)點的刪除,視音頻節(jié)點分別在兩個鏈表中排列。
2.2 命令/數據的傳遞通道及其編碼形式
HOST和CO-PROCESSOR族通過PCI總線連接,之間的命令、狀態(tài)、數據可以通過郵箱、旗語等方式傳遞,實現(xiàn)方式可以是共用存儲器,也可以是中斷,前者的優(yōu)點是簡單、容易實現(xiàn),不足是實時性不夠,而后者剛好相反。
在本設計中,采用共用存儲器傳遞命令和數據,而以中斷發(fā)起申請。不論命令、數據,也不論HOST/DSP,發(fā)起方首先填充信息模板和緩沖區(qū),然后以中斷提起申請,最后以旗語提供校驗。
2.2.1 消息模板的構成
為了提供主從處理器之間的數據鏈路,在每個DSP的內存中設置信息模板和數據緩沖區(qū)。結構如圖3所示。
· DSP Index:HOST的DSP節(jié)點管理器分配給該DSP的索引號,此處用于DSP查詢自己的任務管理器,僅作校驗。
· Channel Index:HOST要求操作的DSP中的索引號,不同的DSP分別編排不同索引號,同一DSP中不同的任務序列,如編碼和解碼序列,可能出現(xiàn)相同的索引號。
· perateMode(操作模式):
MSB=0 該信息模板由HOST填寫
MSB=1 該信息模板由DSP 填寫
操作模式字段和后面的參數區(qū)共同確定特定DSP上一個通道的操作,屏蔽最高位,該字段的值和操作建立對應關系。
· OperateState(操作狀態(tài)): 操作狀態(tài)描述主從處理器的同步關系,分兩個字段。高字段作備份,用于不采用中斷情況下的同步控制;低字段描述操作過程中主從之間的握手關系。
SyncReq同步申請:是中斷同步方式的備份。一般情況下,發(fā)起者發(fā)出中斷,通知被操作方閱讀信息模板的內容;在備份方式下,發(fā)起方通過該字段置位通知被操作方,并由被操作方改寫該字段表示已完成。
SyncReq的取值:
SYNC_NO_ACK /0:缺省狀態(tài),標識沒有閱讀。同于不發(fā)起中斷
HOST_ACK_DSP /128+1:HOST發(fā)出的請求DSP 閱讀模板內容命令
DSP_ACK_HOST /128+2:DSP發(fā)出的請求HOST閱讀模板內容命令
StateCode狀態(tài)碼:標識主從處理器交互的狀態(tài)。
HOST_REQ_DSP_READ_MESSAGE /1:HOST填寫完成,要求DSP閱讀模板內容
HOST_END_READ_MESSAGE /2:HOST結束閱讀模板內容答復
HOST_SEND_DATA_OVER /3:HOST發(fā)送數據結束
HOST_READ_DATA_OVER /4:HOST接收數據結束
DSP_REQ_READ_MESSAGE /5:DSP發(fā)出的請求閱讀模板內容請求
DSP_END_READ_MESSAGE /6:DSP結束閱讀模板內容答復
DSP_SEND_DATA_OVER /7:DSP發(fā)送數據結束
DSP_READ_DATA_OVER /8:DSP接收數據結束
· DnldStartAddr(下行數據緩沖區(qū)起始地址):DSP填寫的下行數據的頭地址。
· DnldBlockLen(下行數據塊長度):HOST填寫的下行數據的長度。
· UpldStartAddr(上行行數據緩沖區(qū)起始地址):HOST填寫的上行數據的頭地址。
· UpldBlockLen(上行數據塊長度):DSP填寫的上行數據的長度。
· VideoEncPara(視頻編碼器參數表):HOST填寫的生成視頻編碼器的參數表,或者DSP填寫的答復HOST查詢的參數表。
· VideoDecPara(視頻解碼器參數表):HOST填寫的生成視頻解碼器的參數表,或者DSP填寫的答復HOST查詢的參數表。
· AudioEncPara(音頻編碼器參數表):HOST填寫的生成音頻編碼器的參數表,或者DSP填寫的答復HOST查詢的參數表??捎靡粋€數據結構來表達,此處暫空32字節(jié)。
· AudioEncPara(音頻解碼器參數表):HOST填寫的生成音頻解碼器的參數表,或者DSP填寫的答復HOST查詢的參數表??捎靡粋€數據結構來表達,此處暫空32字節(jié)。
· VideoCapturePara(視頻采集參數表):HOST填寫的生成視頻采集器的參數表,或者DSP填寫的答復HOST查詢的參數表。
· VideoCapturePara(視頻顯示參數表):HOST填寫的生成視頻顯示器的參數表,或者DSP填寫的答復HOST查詢的參數表。
· AudioCapturePara(音頻采集參數表):HOST填寫的生成音頻采集器的參數表,或者DSP填寫的答復HOST查詢的參數表??捎靡粋€數據結構來表達,此處暫空32字節(jié)。
· AudioPlayPara(音頻播放參數表):HOST填寫的生成音頻采集器的參數表,或者DSP填寫的答復HOST查詢的參數表??捎靡粋€數據結構來表達,此處暫空32字節(jié)。
2.2.2 消息模板的基本操作單元
(1)握手的方式
基本操作包括發(fā)起操作申請的方式和應答邏輯。發(fā)起方填寫了信息模板后,要求應答方閱讀模板,即發(fā)起操作申請,方式有兩種:一種是利用中斷。發(fā)起方提起中斷申請,應答方通過中斷響應或中斷查詢方式獲取請求并閱讀模板,然后清除中斷申請,表示該次操作完成。另一種是利用旗語,即發(fā)起方通過改寫信息模板的SynReq(同步申請)字段發(fā)起申請,應答方通過查詢旗語獲取請求并閱讀模板,然后重置SynReq(同步申請),表示該次操作完成。
(2)握手的協(xié)議
所有操作分成三類,即設置參數、查詢參數、傳輸數據。原則是數據的所有方發(fā)起傳輸。
①HOST要求設置參數,包括視音頻編解碼器、視音頻輸入輸出的參數。圖4是設置參數的流程圖,其中(a)是HOST側的協(xié)議,(b)是DSP側的協(xié)議。
②HOST要求下行視音頻數據,包括視音頻編解碼器的數據。本著數據的所有方發(fā)起傳輸的原則,數據下行傳輸由HOST發(fā)起。圖5是下行參數的流程圖,其中(a)是HOST側的協(xié)議,(b)是DSP側的協(xié)議。
③HOST要求上行視音頻數據,包括視音頻編解碼器的數據。此時傳輸的發(fā)起方是DSP。過程與數據下行類似。
(3)信息模板的建立
信息模板位于DSP單元中,被HOST和DSP訪問,每個DSP都有一張信息模板。為了不影響DSP對內存空間的自由使用,信息模板的位置并不是默認的固定位置,而是在初始化階段由HOST和DSP協(xié)商確定其位置。
在本設計中,利用寄存器PCIMA傳遞信息模板基址,以中斷發(fā)起申請。
如圖6所示,將寄存器PCIMA內容分成3段,即ADDRESS、VERIFY、RESEARVE字段。低2位保留,不使用;高位31~6為信息模板基址,可見基址必須64字節(jié)對齊。低位5~2為校驗字段,DSP填寫基址后,將VERIFY字段置0101,表示基址可用,發(fā)起中斷,要求HOST讀??;HOST響應中斷,查詢VERIFY字段為0101后,讀取基址,將基址按位取反,VERIFY字段置1010,發(fā)起中斷,要求DSP校驗;DSP校驗無誤后開始正常操作。如果有錯誤,則DSP將VERIFY置為0011,ADDRESS字段填寫錯誤碼。
本文詳細探討了主從式系統(tǒng)中數據鏈路層的實現(xiàn)原則、方法,詳細分析了消息模板的構成、傳遞數據的方式以及握手時序,這種結構在多種視訊終端中得到良好應用。
參考文獻
1 李鳴明.用于快速三維掃描的主從式圖像采集處理系統(tǒng)[J].小型微型計算機系統(tǒng),2003;24(6):1078~1080
2 FUSIV VX200 Technical data sheet[M].ADI corporation,2003