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