MIPS微處理器是指無內(nèi)部互鎖流水級的處理器,,它是由斯坦福大學(xué)的Hennessy教授領(lǐng)導(dǎo)的研究小組研制出來的 ,。MIPS微處理器采用RISC(Reduced][nstructionSet Computer)的設(shè)計原則,只支持有限的機器指令以及簡單的算術(shù)指令,,通過提供大量的內(nèi)部寄存器減少內(nèi)存訪問次數(shù),。MIPS有32個通用寄存器,,每個寄存器擁有32位的地址空間 ,。系統(tǒng)通過研究基于MIPS架構(gòu)的SMP8654芯片,設(shè)計和實現(xiàn)了高清播放器的視頻播放以及圖片字體顯示功能,。SMP8654解決方案是Sigma公司依據(jù)MIPS設(shè)計公司指導(dǎo)的全新設(shè)計方案,,是Sigma公司專為滿足高清視頻播放應(yīng)用需求而設(shè)計的全新芯片。和
基于ARM 架構(gòu)的低端芯片相比,,SMP8654的視頻處理能力更加優(yōu)越,。
1 基于SMP8654芯片的高清播放器
1.1 SMP8654硬件介紹
SMP8654芯片的內(nèi)部,有一個MIPS 24kf系列的主CPU芯片,,工作頻率為500 MHz,。在主CPU芯片的內(nèi)部,具有1個32 KB的指令Cache和1個32 KB的數(shù)據(jù)Cache,、2個可編程計時器以及3個獨立的中斷控制器和2路UART(Universal Asynchronous Receiver/Transmitter),。主CPU 內(nèi)部采用雙總線結(jié)構(gòu),G—bus是主總線,CPU通過此總線訪問外部功能單元的各狀態(tài)寄存器,,而對主CPU芯片內(nèi)部的中斷控制器,、計時器等的訪問是通過將L—bus映射到G—Bus上的方式進(jìn)行的。主CPU 內(nèi)部有一個高效的乘除運算單元(Multip1y/Divide Unit)及浮點數(shù)運算單元(FPU),,還有一個增強的JTAG調(diào)試模
塊,,用于調(diào)試應(yīng)用程序及內(nèi)核代碼 。
SMP8654芯片內(nèi)部有一個IPU(Interrupt ProcessingUnit),。這個MIPS 24kf系列的32位處理器專門處理那些需要低延時的應(yīng)用需求,。它主要處理從視頻處理子系統(tǒng)(Video Processing Subsystem)所產(chǎn)生的中斷。它的時鐘頻率為333 MHz,,而且還有16 KB的指令Cache和16KB數(shù)據(jù)Cache,。
SMP8654芯片包含兩個DDR-DRAM 控制器,每一個控制都支持高達(dá)512 MB的DDR2內(nèi)存,,這些外部存儲器可以為音頻,、視頻以及數(shù)據(jù)提供緩沖區(qū),并且能存放硬件模塊的臨時數(shù)據(jù),。
1.2 SMP8654的視頻及音頻處理
1.2.1 視頻解碼子系統(tǒng)
SMP8654的視頻解碼子系統(tǒng)(Video Decoder Subsystern)可以解碼HDSMPTE,、H.264、HD WMV9,、AVS,、MPEG1、MPEG2等視頻格式的視頻文件,。SMP8654的視頻解碼系統(tǒng)執(zhí)行特定解碼算法,,它是一種基于處理器和電路邏輯方式的混合架構(gòu),。能同時解碼的視頻文件數(shù)目是由視頻的格式以及所要呈現(xiàn)的分辨率決定的,。SMP8654可以支持包括IPTV、AVCHD,、MSTV 的視頻解碼要求,。視頻處理引擎是一個16位的RISC處理器,視頻解壓算法的密集計算部分是由此部分處理的,。
1.2.2 視頻處理子系統(tǒng)
視頻處理子系統(tǒng)(Video Processing Subsystem)從內(nèi)存中檢索圖形和視頻圖像,,將這些圖像混合并且縮放至某個顯示器所要求的分辨率并且將其呈現(xiàn)出來。視頻處理子系統(tǒng)可以控制顏色,、分辨率以及色彩飽和度,,并且能處理視頻數(shù)據(jù)轉(zhuǎn)換,選擇視頻的輸出模式(模擬信號的輸出模式包括RGBYPbPr),。視頻處理子系統(tǒng)還有一個2D圖形加速功能模塊,。智能導(dǎo)診系統(tǒng)利用此GFX引擎實現(xiàn)了文字和圖片的高清顯示功能。
1.2.3 音頻處理子系統(tǒng)
SMP8654芯片的集成音頻處理子系統(tǒng)(Audio Processing Subsystem)是一個為用戶專門設(shè)計的32位數(shù)字信號處理器,,音頻的解碼和操作是由這個專用的DSP處理的,。這個DSP工作在333 MHz的時鐘頻率下,,指令和數(shù)據(jù)是分開存儲的,DSP通過系統(tǒng)總線取得指令,,通過數(shù)據(jù)總線獲取需要解碼的音頻數(shù)據(jù),。和基于ARM 架構(gòu)的處理器一樣,它有一個32位的指令系統(tǒng),,同時與之對應(yīng)了一個16位的指令集,,通過Load/Store從內(nèi)存裝載數(shù)據(jù)到DSP的相關(guān)寄存器中進(jìn)行處理。
1.2.4 高清播放機硬件架構(gòu)
高清播放機硬件架構(gòu)如圖1所示,。高清播放器實現(xiàn)的功能主要包括視頻處理以及圖片文字顯示,。硬件架構(gòu)中的重要部分包括視頻解碼子系統(tǒng)、視頻處理子系統(tǒng),、音頻處理子系統(tǒng),。這里的HDD表示可選的硬盤,通過內(nèi)部的SATA接口控制,。提供對USB2.0協(xié)議支持以及802.11n協(xié)議的支持,,也就是說播放器可以從網(wǎng)絡(luò)中讀取各種視頻資源,從硬盤或者是USB等移動盤中獲得數(shù)據(jù),。視頻處理子系統(tǒng)中的GFX代表的是圖形加速引擎,,通過Sigma公司提供的SDK可以很容易地操作這些硬件,實現(xiàn)硬件加速功能,。在智能導(dǎo)診系統(tǒng)的軟件部分,,介紹了如何利用硬件特性加速文字和圖片的繪制過程。在智能導(dǎo)診系統(tǒng)中,,醫(yī)院HIS系統(tǒng)中的病人掛號信息通過TCP/IP傳遞到此硬件播放器,,然后再由硬件播放器處理,將病人信息排隊到相關(guān)隊列中,,這樣病人就可以在專門的等候區(qū)休息等候了,。
2 基于嵌入式Linux和MiniGUI的主控程序
2.1 嵌入式Linux
Linux是一個完全免費的開源操作系統(tǒng),內(nèi)核可以被裁剪到134 KB左右,。Linux是一個能夠適應(yīng)多種CPU和硬件平臺的操作系統(tǒng),,裁剪之后的Linux系統(tǒng)用于這些設(shè)備中執(zhí)行資源管理、任務(wù)調(diào)度,、存儲空間分配等任務(wù) ,。嵌入式應(yīng)用系統(tǒng)的開發(fā)一般可以分為如下幾個步驟:交叉編譯工具的建立,Bootloader的編譯和燒寫,,編譯內(nèi)核并移植到開發(fā)板,,文件系統(tǒng)的編譯和燒寫。交叉編譯是嵌入式系統(tǒng)開發(fā)中需要用到的一個常見技術(shù),其主要特征是嵌入式設(shè)備上的可執(zhí)行程序通常是在另外一臺機器上編譯生成的,。通常將前者稱為目標(biāo)機器(Target),,后者稱為主機(Host)。主機擁有的資源豐富很適合在上面編譯機器相關(guān)的代碼,,這種技術(shù)為軟件的不同平臺移植創(chuàng)造了便利條件,。交叉編譯工具配置在主機(Host)上編譯及配置環(huán)境變量后,就可以用來編譯Bootloader,、內(nèi)核和文件系統(tǒng),。Bootloader是一個啟動加載Linux內(nèi)核的固件程序,有點類似于PC機的BIOS程序,,在完成硬件初始化以及內(nèi)存映射等操作之后,,通常會將外部存儲介質(zhì)上存放的內(nèi)核鏡像加載到RAM 中,然后跳轉(zhuǎn)到指定的內(nèi)存位置執(zhí)行,。
2.2 M GUl用戶界面
GUI(Graphical User Interface)是指采用圖形方式顯示的計算機操作用戶界面,。系統(tǒng)中所要闡述的高清播放機上需要提供人機交互界面,控制諸如視頻的暫停,、播放,、文件更新以及播放機的聲音控制和開關(guān)機控制等圖形界面。智能導(dǎo)診系統(tǒng)中使用的圖形用戶界面采用的是MiniGUI,。MiniGUI是一個跨平臺的面向嵌入式系統(tǒng)的輕量級圖形用戶界面支持系統(tǒng),,可在Linux/ptClinux、eCos,、
“c/os—II,、VxWorks、pSOS,、ThreadX 等操作系統(tǒng)以及Win32平臺上運行,,廣泛應(yīng)用于手持信息終端、機頂盒,、工業(yè)控制系統(tǒng),、便攜式多媒體播放器機等產(chǎn)品和領(lǐng)域 。
3 播放機軟件系統(tǒng)設(shè)計
3.1 智能導(dǎo)診系統(tǒng)的軟件架構(gòu)
sMP8654為應(yīng)用開發(fā)提供分層服務(wù)架構(gòu),,軟件系統(tǒng)設(shè)計主要根據(jù)SMP8654分層服務(wù)模型,找出最優(yōu)化的設(shè)計方案,。智能導(dǎo)診通過研究DCC 的控制邏輯,,及Sigma公司的SDK文檔,設(shè)計出了如圖2所示的SMP8654高清播放機的軟件系統(tǒng)架構(gòu),。智能導(dǎo)診系統(tǒng)首先對硬件平臺初始化,,接著初始化有線或者無線網(wǎng)絡(luò)(這部分主要作用是網(wǎng)絡(luò)接口卡初始化操作,日志部分初始化是跟蹤和調(diào)試應(yīng)用程序的重要組成部分);接著創(chuàng)建MiniGUI主窗口,,最后進(jìn)入消息循環(huán),。
當(dāng)MiniGUI接收到MSG_CLOSE消息時,由HWND— DESKTOP向主窗El發(fā)送退出消息,,至此程序結(jié)束,,播放機被關(guān)閉;當(dāng)播放機接收到圖片顯示命令時,,將命令消息存人到消息隊列中,,這里要創(chuàng)建消息隊列是因為MiniGUI在接收到用戶的各種不同命令時,都會將命令解析并且存入到任務(wù)隊列中,,由任務(wù)派發(fā)器將任務(wù)發(fā)送到不同模塊處理,。MiniGUI的主程序會根據(jù)用戶選擇的視頻及音頻文件,選擇將消息發(fā)送到視頻解碼進(jìn)程處理,,當(dāng)用戶選擇打開某個高清的圖片時,,消息隊列中會保留圖片大小、圖片格式,、圖片的顯示時間等控制信息,。這里要使用任務(wù)隊列的原因其實很簡單,分離出播放器的一個個任務(wù),,讓不同的軟件服務(wù)模塊處理,。如果要播放視頻,調(diào)度程序會將任務(wù)隊列中的視頻播放任務(wù)派發(fā)給視頻解碼進(jìn)程處理,。如果要使用GFX引擎高效率繪制圖片,,則任務(wù)被分派到高清圖片處理進(jìn)程處理。
智能導(dǎo)診系統(tǒng)服務(wù)進(jìn)程主要負(fù)責(zé)從醫(yī)院HIS信息系統(tǒng)的接口函數(shù)中獲得當(dāng)前病人的掛號信息,,并且通過TCP發(fā)送到高清播放機上,,最后通過MiniGUI的Draw—Text函數(shù)將相關(guān)病人信息以列表的方式顯示在預(yù)先定義的排隊隊列中。這里的視頻解碼進(jìn)程是獨立的進(jìn)程,,主控程序和此進(jìn)程的通信是通過Linux的消息隊列機制實現(xiàn)的,。消息隊列是一種內(nèi)核標(biāo)示,兩個進(jìn)程之間的交互是通過調(diào)用msgsnd和msgrecv這樣的函數(shù)實現(xiàn)的,,只要兩個進(jìn)程的消息隊列標(biāo)識是一致的,,進(jìn)程之間就可以交互 ]。當(dāng)MiniGUI接收到退出消息時,,會向視頻解碼進(jìn)程發(fā)送退出消息,,讓視頻解碼進(jìn)程清空所占用的系統(tǒng)資源。
SMP8654分層服務(wù)模型如圖3所示,。最下面的一層是相關(guān)硬件,,如CPU,、視頻解碼器、音頻解碼器,、并行I/0接口,。中間的一層MRUA (Movimiento rectiline unitormemente acelerado)提供了訪問這些硬件的抽象接口,另外DCC(Decoding Chain Contro1)是通過訪問MRUA的接口實現(xiàn)對視頻播放控制,、音頻解碼的操作,。最頂層是軟件播放器,可以基于DCC實現(xiàn)網(wǎng)絡(luò)流媒體應(yīng)用,,或者定制自己的軟件播放器,。
3.2 利用圖形加速引擎優(yōu)化文字和高清圖片顯示
DCC是為應(yīng)用程序提供的編程接口,而MRUA面向底層硬件,,為上層的DCC提供硬件抽象和功能接口,。在深入理解了DCC是如何控制硬件顯示文字、處理圖片以及播放視頻之后,,智能導(dǎo)診系統(tǒng)利用MRUA庫函數(shù)直接操作硬件特性,,加快字體顯示、圖片處理效率,,以及提升視頻播放等各方面性能,。DCC提供的多個對象為應(yīng)用程序完成實際的功能提供函數(shù)接口,這些對象包括:
?、?Route,。可以將Route理解為某個具體的媒體內(nèi)容(Content)到硬件視頻混合器(Hardware Video Mixer)的數(shù)據(jù)通道,,它只負(fù)責(zé)把具體的媒體內(nèi)容傳送到硬件視頻混合器中,。
② Surface,??梢詫urface理解為視頻對象層(Video Object layer)。視頻信息,,屏幕顯示以及字幕組成了一個完整的Content,。在每一個Route對象中,通常會存在相同類型的多個Surface對象,。
?、?VideoSource??梢詫ideoSource理解為一個專為Surface生成圖片的生產(chǎn)者,,這個生成者可能是一個硬件視頻解碼器(Hardware MPEG decoder)。
?、?AudioMixer,。可以將AudioMixer理解為一個類似Route的東西,,它代表的也是一個數(shù)據(jù)通道,,只不過它只負(fù)責(zé)將AudioSource這個音頻生產(chǎn)者生成的音頻幀信息組合成一個輸出。
?、?AudioSource,。可以將AudioSource理解為音頻幀的生產(chǎn)者,。
?、?DemuxSource。它是一個可分離流,,并且將數(shù)據(jù)發(fā)送到視頻,、音頻解碼器的一個對象。當(dāng)然也可以將它理解為一個生成者,,負(fù)責(zé)將流(stream)數(shù)據(jù)分離出音頻和視頻信息,,并發(fā)送到相關(guān)處理單元處理。
如圖3所示,,流解析器從內(nèi)存中檢索到與文件有關(guān)的信息之后,,將數(shù)據(jù)流分解,然后組包成視頻解碼器以及音頻解碼器所處理的數(shù)據(jù),,并且交由DSP和Display Engine這樣的設(shè)備進(jìn)行處理,。這些都可以由DCC控制,是由MRUA層抽象出的相關(guān)硬件功能,。只要通過DCC層去控制相關(guān)硬件設(shè)備,,便可以實現(xiàn)圖片和文字的高清顯示。下面將介紹如何通過DCC去控制GFX引擎實現(xiàn)圖片和文字的顯示,。
GFX在圖中沒有畫出,,它是某個具體的圖形加速設(shè)備。當(dāng)要播放一個高清的圖片或者繪制文字時,,通常要經(jīng)過幾個步驟:
RUA 實例初始化,,DCC實例初始化,設(shè)置圖片的顯示窗口,,初始化GFX 引擎,,執(zhí)行繪制,清空資源并退出,。下面以偽碼的方式給出其具體實現(xiàn)過程:
int main(int argc,,char*argv[])(
創(chuàng)建RUA實例;
創(chuàng)建DCC對象實例,;
初始化圖片的顯示選項,;
初始化視頻的顯示選項,;
初始化播放控制選項;
從命令行參數(shù)獲得欲顯示的文件信息以及圖片,、視頻播放控制選項(如果沒有就使用默認(rèn)值)
裝載相關(guān)硬件單元微碼,;
創(chuàng)建硬件混合器Mixer;
創(chuàng)建Scaler對象,;
?。痵caler=EMHWL1B MODULE(DispGFXMultiScaler,O),;
為當(dāng)前的Mixer對象創(chuàng)建一個關(guān)聯(lián)Scaler對象的索引,;
初始化GFX引擎;
設(shè)置GFX對象的各通道屬性,;
開始在GFX上投遞繪制請求,;
關(guān)閉GFX引擎,并依次關(guān)閉DCC實例對象,,RUA實例對象,;
}
結(jié)語
智能導(dǎo)診系統(tǒng)基于MiniGUI和SMP8654的SDK 完成了視頻播放、文字圖片顯示的功能,?;鵐iniGUI的圖形及文字繪制函數(shù),如CreateI ogFont,、DrawText,、LoadBitmap等的使用以及利用與硬件相關(guān)的圖形加速引擎繪制圖片和文件相結(jié)合的方式,增加了系統(tǒng)的圖形繪制效果,,提升了智能導(dǎo)診系統(tǒng)性能 ,。
綜上所述,系統(tǒng)基于MIPS架構(gòu)設(shè)計實現(xiàn)了高清播放機所要完成的視頻播放以及圖片文字顯示功能,。通過研究基于MIPS架構(gòu)下的高清播放機最終選擇了速度比較好的高清播放機芯片SMP8654,,使得視頻處理更加穩(wěn)定,圖片的加速解碼及顯示的速度更快,?;诖思軜?gòu)的系統(tǒng),可以擴展到各種信息發(fā)布系統(tǒng)中,,如醫(yī)院的信息發(fā)布系統(tǒng),、車載娛樂系統(tǒng),具有很好的應(yīng)用前景,。
參考文獻(xiàn)
r1]MIPS Technologies INC.MIPS32 4K Processor Core Faro
ily Software User’S M anual,,2002.
[2]MIPS Technologies INC.MIPS32 Architecture for Program—
mers[EB/OL].[2011—08].http://www.mips.tom.
[3]Sigma Designs Documentation:SMP8644/SMP8654 2009 by
Sigma Designs Inc.
[4]魏平,夏良正,,王巖.Linux體系結(jié)構(gòu)及嵌入式Linux的移植
方法EJ].東南大學(xué)學(xué)報:自然科學(xué)版,,2004(1):126—128.
[5]北京飛漫軟件技術(shù)有限公司.MiniGUI用戶手冊,,2007.
[6]劉崢嶸,張智超,,許振山.嵌入式Linux應(yīng)用開發(fā)詳解[M].
北京:機械工業(yè)出版社,,2004.
[7]北京飛漫軟件技術(shù)有限公司.MiniGUI編程手冊,,2007.