基于消息機(jī)制的片上多處理器系統(tǒng)的研究
2.2.1 控制器到處理器方向
控制器到處理器方向的連接屬于一對(duì)多的模式,每條通路各自獨(dú)立,因此該方向上的傳遞比較簡(jiǎn)單,由控制器直接向目標(biāo)FIFO寫入數(shù)據(jù)即可。該方向的傳遞流程圖如圖2(a)所示。本文引用地址:http://cafeforensic.com/article/189737.htm
2.2.2 處理器到控制器方向
處理器到控制器方向的連接屬于多對(duì)一的模式,當(dāng)處理器同時(shí)有消息要傳遞給控制器時(shí)會(huì)引起沖突。為解決該沖突,系統(tǒng)引入了互斥核。因此該方向上的消息傳遞時(shí)需要先鎖定互斥核,才能向控制器的FIFO寫入消息數(shù)據(jù)。該方向的傳遞流程圖如圖2(b)所示。
2.3 消息的讀取
消息的讀取過程為處理器從消息存儲(chǔ)器FIFO讀出數(shù)據(jù)的過程。由于采用的是雙端口FIFO,數(shù)據(jù)的寫入與讀取可同時(shí)進(jìn)行。但由于處理器可能存在中斷、寫入與讀出速率不一致等原因,因此消息的讀取采用異步讀取的方式,即判斷FIFO中的數(shù)據(jù)個(gè)數(shù),先讀取消息的前兩個(gè)字節(jié),獲得該消息的長(zhǎng)度,然后根據(jù)該長(zhǎng)度等待消息傳遞完畢,再一次性讀取剩余消息數(shù)據(jù)。
2.4 消息的處理
消息讀取完之后,首先發(fā)送確認(rèn)消息給發(fā)送者,表示成功收到了消息。然后根據(jù)洧息中的類型跳轉(zhuǎn)到該類型的處理函數(shù),接著再根據(jù)消息中的子類型跳轉(zhuǎn)到該子類型的處理函數(shù)。最后,當(dāng)任務(wù)執(zhí)行完之后發(fā)送任務(wù)結(jié)束消息。
2.5 數(shù)據(jù)移動(dòng)
當(dāng)系統(tǒng)中有大量的數(shù)據(jù)需要移動(dòng)時(shí),為了減少系統(tǒng)的開銷,加入DMA核。數(shù)據(jù)的移動(dòng)由DMA核控制,而DMA核由控制器進(jìn)行控制。因此,從處理器如果有移動(dòng)數(shù)據(jù)的需要,需要用消息先通知控制器,然后由控制器控制DMA進(jìn)行移動(dòng)。圖3為控制器利用DMA進(jìn)行數(shù)據(jù)移動(dòng)的流程圖。
2.6 容錯(cuò)性設(shè)計(jì)
當(dāng)系統(tǒng)長(zhǎng)時(shí)間運(yùn)行時(shí),不排除處理器出現(xiàn)問題的可能性,因此需要引入容錯(cuò)性設(shè)計(jì),保證系統(tǒng)能正確運(yùn)行。
首先,主控制器中定義一個(gè)從處理器列表。從處理器初始化完成時(shí),發(fā)送初始化完成消息,主控制器對(duì)發(fā)送消息的從處理器進(jìn)行登記,并添加到列表。
接著,主控制器中定義一個(gè)任務(wù)結(jié)構(gòu),包含任務(wù)所屬的組、任務(wù)ID、任務(wù)允許最長(zhǎng)處理時(shí)間、任務(wù)開始處理的時(shí)間等字段。運(yùn)行時(shí),主控制器根據(jù)事先設(shè)計(jì)的程序生成任務(wù)列表,然后根據(jù)從處理器列表分配任務(wù),并記錄任務(wù)處理開始時(shí)間。
然后,主控制器反復(fù)查詢?nèi)蝿?wù)列表,檢查任務(wù)時(shí)間。當(dāng)發(fā)現(xiàn)任務(wù)超時(shí),則重新分配該任務(wù),使得系統(tǒng)仍能正常工作,并將處理該任務(wù)的從處理器從列表中別除,發(fā)出警報(bào)。
3 實(shí)驗(yàn)與結(jié)果
為了驗(yàn)證該系統(tǒng)的可行性及性能,本文采用JPEG編碼器(以DCT變換為基礎(chǔ)的有損壓縮算法)作為該系統(tǒng)的測(cè)試程序。DCT算法的大致流程為:對(duì)于一塊最小數(shù)據(jù)處理單元(MCU),先把數(shù)據(jù)從空間域變換到頻率域,從而去除數(shù)據(jù)的冗余度;量化器用加權(quán)函數(shù)來產(chǎn)生對(duì)人眼優(yōu)化的量化DCT系數(shù),同時(shí)熵編碼器將量化DCT系數(shù)的熵最小化。
其中前向DCT的變換公式如下:
評(píng)論