張 鋒,楊粵濤,高偉林,祁 偉,樊 濤,楊炳偉
(蘇州長風(fēng)航空電子有限公司,江蘇 蘇州 215151)
飛機座艙顯示器是飛行員獲取飛機信息、地圖信息、作戰(zhàn)信息的重要人機交互接口,是座艙系統(tǒng)的重要設(shè)備[1-3]。圖形系統(tǒng)主要承擔(dān)圖形顯示、視頻處理、總線通信等功能,是飛機座艙顯示器的重要模塊之一。圖形系統(tǒng)中的圖形生成技術(shù)主要有兩種架構(gòu):一種是片上系統(tǒng)(System on Chip,SoC)方式[4-5],采用片上系統(tǒng)的內(nèi)部資源實現(xiàn)機載顯示器畫面的實時生成與顯示,適用于對功耗尺寸要求較高的小尺寸顯示器;另一種是中央處理器(Central Processing Unit,CPU)+圖形處理器(Graphics Processing Unit,GPU)方式[6-8],采用專用的獨立CPU和GPU實現(xiàn)機載顯示器畫面的實時生成與顯示,適用于對性能要求較高的大尺寸顯示器。
以往在這兩種主流設(shè)計架構(gòu)中核心器件均采用進口芯片,存在一定的風(fēng)險,而當(dāng)前國產(chǎn)元器件發(fā)展迅速,如天津飛騰、中科龍芯以及長沙景嘉微等公司的核心器件在國產(chǎn)產(chǎn)品中得到大量應(yīng)用[9-11]。其中,國產(chǎn)CPU+GPU架構(gòu)的圖形系統(tǒng)也已經(jīng)在逐步應(yīng)用[12],但這種架構(gòu)體積偏大,功耗較高,無法適用于小尺寸低功耗機載顯示器應(yīng)用場景。
鑒于小尺寸低功耗圖形系統(tǒng)技術(shù)指標(biāo)較高,本文提出一種基于龍芯2K1000的機載顯示器圖形系統(tǒng),采用國產(chǎn)SoC和國產(chǎn)現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)構(gòu)建硬件架構(gòu)平臺。該平臺尺寸小、功耗低,并搭載航空專用的國產(chǎn)天脈操作系統(tǒng)軟件,支持圖形實時生成與顯示、外視頻輸入處理與疊加顯示、擴展航空總線通信,能夠滿足小尺寸低功耗顯示器應(yīng)用需求。
圖形系統(tǒng)的主要技術(shù)指標(biāo)如下:
(1)典型畫面刷新率>25 frame/s;
(2)功耗<10 W;
(3)支持嵌入式開放圖形庫(Open Graphics Library for Embedded Systems,OpenGL ES)繪圖接口;
(4)支持視頻疊加;
(5)支持3路RS422和2路高級數(shù)據(jù)鏈路控制(High Level Data Link Control,HDLC)通信;
(6)支持固態(tài)硬盤(Solid State Disk,SSD),容量不小于2 GB;
(7)軟硬件全部國產(chǎn)化。
如圖1所示,圖形系統(tǒng)主要由圖形生成模塊、視頻處理模塊以及通信接口模塊構(gòu)成。圖形生成模塊由龍芯2K1000和外部第三代雙倍速率同步動態(tài)隨機存儲器(Double-Data-Rate Three Synchronous Dynamic Random Access Memory,DDR3 SDRAM)組成。龍芯2K1000內(nèi)部包含兩個64位GS264 處理器核,最高主頻1 GHz;1個集成GPU;1個支持兩路輸出的顯示控制器。DDR3 SDRAM包含圖形顯示所需的幀存空間。除此之外,圖形生成模塊還包含系統(tǒng)工作必備的存儲子模塊和調(diào)試子模塊。
圖1 圖形系統(tǒng)模塊圖
視頻處理模塊和通信接口模塊均位于FPGA中。視頻處理模塊由圖像緩存子模塊、視頻疊加子模塊和啟動Logo產(chǎn)生子模塊組成。通信接口模塊由寄存器存儲及地址解析子模塊、通用異步收發(fā)器(Universal Asynchronous Receiver/Transmitter,UART)子模塊、HDLC子模塊組成。
該系統(tǒng)的基本工作原理為:GS264處理器核心解析基于OpenGL ES的繪圖指令,通過內(nèi)部多級互聯(lián)總線將繪圖圖元指令信息送至GPU核心單元;GPU核心單元根據(jù)指令繪制圖形,生成幀存數(shù)據(jù),存儲在DDR3 SDRAM中;根據(jù)圖形顯示分辨率(如1 024 pixel×768 pixel@60 Hz)配置顯示接口時序,顯示控制器從DDR3 SDRAM中讀取幀存數(shù)據(jù),生成數(shù)字RGB三原色視頻信號給視頻處理模塊;為防止幀存數(shù)據(jù)沖突,導(dǎo)致畫面破裂,DDR3 SDRAM中開辟兩片幀存區(qū)域,GPU和顯示控制器交替存儲和讀取幀存區(qū)域,幀存區(qū)域的切換由軟件來控制。
視頻處理模塊接收圖形生成模塊輸入的內(nèi)部視頻和外部設(shè)備輸入的外部視頻,緩存后進行疊加處理,外部視頻作為后景,內(nèi)部視頻作為前景,支持透明度調(diào)節(jié);處理后的視頻經(jīng)過外部視頻編碼器,轉(zhuǎn)換成低壓差分信號(Low-voltage Differential Signaling,LVDS)送給液晶顯示組件顯示。
通信接口模塊對外擴展出機載總線(如RS422、HDLC等),用于與外部機載設(shè)備進行數(shù)據(jù)交互,接收圖形顯示控制信息,發(fā)送圖形系統(tǒng)的響應(yīng)信息等。對內(nèi)通過內(nèi)總線與圖形生成模塊進行上述數(shù)據(jù)傳遞。圖形顯示軟件根據(jù)接收的圖形顯示控制信息,使用相應(yīng)的OpenGL ES繪圖指令生成內(nèi)部視頻,同時通過內(nèi)總線向視頻處理模塊傳遞視頻疊加信息,控制內(nèi)部視頻的顯示透明度,最終實現(xiàn)圖形系統(tǒng)機載畫面的實時生成顯示。
系統(tǒng)硬件設(shè)計原理圖如圖2所示,主要分為龍芯2K1000核心處理電路設(shè)計、FPGA視頻處理電路設(shè)計及外圍電路設(shè)計三個部分。
圖2 圖形系統(tǒng)硬件原理圖
龍芯2K1000核心處理電路包括其供電、復(fù)位、晶振、內(nèi)存、存儲器、調(diào)試接口等,其中,DDR3 SDRAM選用紫光的HXI15H4G160AF-13K芯片,設(shè)計中采用4片DDR3 SDRAM,數(shù)據(jù)線共64位,容量共為16 Gb;串行外設(shè)接口(Serial Peripheral Interface,SPI)FLASH選用深圳國微的SM25QH128M,用于存放PMON(龍芯boot程序)和操作系統(tǒng);SSD存儲芯片采用綠芯的GLS85LS1002E,容量為2 GB,用于存放應(yīng)用程序。
FPGA視頻處理電路包括FPGA電路、視頻解碼電路和視頻編碼電路,其中,F(xiàn)PGA選用復(fù)旦微的JFM7K325T8,最大頻率550 MHz,內(nèi)部資源豐富;視頻解碼電路采用振芯科技GM7145器件將差分?jǐn)U展圖形陣列(Extended Graphics Array,XGA)轉(zhuǎn)換成標(biāo)準(zhǔn)XGA,然后再采用該公司的GM7002集成解碼器將標(biāo)準(zhǔn)XGA信號轉(zhuǎn)換成數(shù)字RGB信號,給到FPGA的輸入輸出端口,實現(xiàn)疊加處理;視頻編碼電路采用振芯科技GMG7123芯片將FPGA輸出的RGB和行場信號編碼為單端XGA視頻信號,再通過該公司的GM7148器件將單端XGA轉(zhuǎn)換成三線制差分XGA信號。
外圍電路主要用于實現(xiàn)RS422、HDLC等通信接口的電平轉(zhuǎn)換,通信協(xié)議由FPGA內(nèi)部實現(xiàn)。
本系統(tǒng)硬件設(shè)計中全部選用國產(chǎn)元器件,滿足國產(chǎn)化需求。
FPGA軟件設(shè)計分為通信接口模塊軟件設(shè)計和視頻處理模塊軟件設(shè)計。
2.2.1 通信接口模塊軟件設(shè)計
通信接口模塊用于圖形系統(tǒng)與外部的通信,設(shè)計中要求滿足3路RS422和2路HDLC。本模塊主要包括寄存器存儲與地址解析子模塊、UART子模塊、HDLC子模塊。寄存器存儲與地址解析模塊負責(zé)將龍芯2K1000內(nèi)總線的數(shù)據(jù)解析存儲到相應(yīng)的FPGA本地寄存器中,此外再將本地寄存器的數(shù)據(jù)通過特殊的時序發(fā)往龍芯2K1000,本地的寄存器包含UART寄存器和HDLC寄存器。UART模塊負責(zé)RS422的收發(fā)通信,HDLC模塊負責(zé)HDLC協(xié)議的收發(fā)通信。下面主要介紹HDLC模塊的設(shè)計。
本文設(shè)計的模塊框圖如圖3所示,主要包括HDLC發(fā)送單元、HDLC接收單元、波特率發(fā)生器、先入先出隊列(First Input First Output,F(xiàn)IFO)單元、循環(huán)冗余校驗碼(Cyclic Redundancy Check,CRC)校驗單元、HDLC發(fā)送地址解析單元和HDLC接收地址解析單元等。
圖3 HDLC模塊功能框圖
HDLC模塊處于發(fā)送狀態(tài)時,龍芯2K1000往HDLC數(shù)據(jù)發(fā)送寄存器的地址寫入數(shù)據(jù),數(shù)據(jù)暫存在發(fā)送FIFO中;HDLC發(fā)送單元查詢FIFO中的數(shù)據(jù)個數(shù),若FIFO中的數(shù)據(jù)個數(shù)不為0,則讀取FIFO中的數(shù)據(jù),HDLC發(fā)送單元先發(fā)送包頭再發(fā)送數(shù)據(jù),邊發(fā)送數(shù)據(jù)邊對數(shù)據(jù)進行CRC校驗,最后發(fā)送數(shù)據(jù)位最終CRC校驗的值,由此完成一包數(shù)據(jù)的發(fā)送。此外,在進行數(shù)據(jù)接收的時候,HDLC接收單元檢測包頭,如果包頭滿足要求,則接收余下的數(shù)據(jù),將數(shù)據(jù)緩存到FIFO中去,HDLC接收單元邊接收數(shù)據(jù)邊進行CRC校驗,當(dāng)滿足接收的數(shù)據(jù)等于CRC校驗時,則給出中斷信號,由龍芯2K1000從數(shù)據(jù)接收寄存器中讀取數(shù)據(jù),讀取數(shù)據(jù)的長度為FIFO中數(shù)據(jù)的個數(shù)。
2.2.2 視頻處理模塊軟件設(shè)計
視頻處理模塊主要用于異步視頻時序的同步化處理,實現(xiàn)內(nèi)部視頻與外部視頻的疊加,以及啟動Logo產(chǎn)生,包括圖像緩存子模塊、視頻疊加子模塊和啟動Logo產(chǎn)生子模塊。
(1)圖像緩存模塊
圖像緩存模塊結(jié)構(gòu)如圖4所示,由3個視頻直接存儲器存取(Video Direct Memory Access,VDMA)構(gòu)成,第一個VDMA實現(xiàn)龍芯2K1000產(chǎn)生的圖形畫面即內(nèi)部視頻的緩存,第二個VDMA實現(xiàn)XGA圖像即外部視頻的緩存,第三個VDMA實現(xiàn)Logo圖像的緩存。不同的是,第一個VDMA單獨采用一個視頻緩存區(qū)域進行緩存,第二個和第三個VDMA采用同一片視頻緩存區(qū)域進行緩存。若XGA信號沒有的話,則選擇Logo圖像緩存進入圖像緩存區(qū),否則選擇XGA視頻信號。
圖4 圖像緩存模塊功能框圖
(2)視頻疊加模塊
視頻疊加模塊將前景和后景的圖像數(shù)據(jù)按透明度比例進行疊加,生成最終的顯示圖像數(shù)據(jù)。透明度取值范圍為0~255,當(dāng)透明度為0時,只顯示前景圖像數(shù)據(jù);當(dāng)透明度為255時,只顯示后景圖像數(shù)據(jù)。前景的數(shù)據(jù)來自于龍芯2k1000的內(nèi)部視頻,后景數(shù)據(jù)來自于XGA的外部視頻,透明度值由龍芯2K1000軟件設(shè)置,再由地址解析模塊解析給出。
(3)Logo產(chǎn)生模塊
Logo產(chǎn)生模塊實現(xiàn)在上電時初始化顯示器的畫面,Logo的數(shù)據(jù)存儲于FPGA存儲器。Logo產(chǎn)生模塊將存儲器里面的Logo數(shù)據(jù)通過一定的時序讀出并緩存進入FPGA內(nèi)存中,替代XGA的緩存區(qū)域,將透明度的值調(diào)整到最小,則完成開機顯示Logo。
圖形系統(tǒng)采用國產(chǎn)天脈操作系統(tǒng)作為上層圖形顯示軟件運行平臺。基于天脈系統(tǒng)設(shè)計圖形驅(qū)動軟件,包括OpenGL ES接口驅(qū)動、幀存驅(qū)動、顯示控制器驅(qū)動,滿足上層圖形顯示軟件設(shè)計的通用需求。
2.3.1 天脈操作系統(tǒng)移植
天脈操作系統(tǒng)是一款通用實時類操作系統(tǒng),適用于實時性要求高的領(lǐng)域,能夠給上層應(yīng)用提供任務(wù)管理、中斷/異常管理、任務(wù)間通信、文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧等功能。圖形系統(tǒng)天脈操作系統(tǒng)移植以現(xiàn)有的參考板級支持包為基礎(chǔ),根據(jù)圖形系統(tǒng)硬件資源,主要完成模塊支持層(Module Support Layer,MSL)和操作系統(tǒng)(Operating System,OS)的配置,以及外設(shè)驅(qū)動開發(fā)。
依次創(chuàng)建MSL工程和OS工程(綁定MSL),配置主要包括MSL加載及運行內(nèi)存空間配置、OS運行內(nèi)存空間配置、SPI FLASH地址空間配置和內(nèi)存管理單元(Memory Management Unit,MMU)地址空間映射等,其余配置(如串口網(wǎng)口調(diào)試配置、操作系統(tǒng)初始任務(wù)、內(nèi)核參數(shù)配置等等)采用默認配置即可。需要注意的是,MSL運行內(nèi)存空間和OS運行內(nèi)存空間必須為MMU已映射的空間,而MSL加載內(nèi)存空間必須為MMU映射之外的空間,且三個空間必須不重疊,否則會引起編譯或運行錯誤。
外設(shè)驅(qū)動包括串口、網(wǎng)口、內(nèi)總線、SPI FLASH、SSD等。設(shè)備驅(qū)動架構(gòu)依據(jù)參考板級支持包的模板,結(jié)合器件手冊完成具體的功能接口設(shè)計即可,這里不再一一詳述。
2.3.2 圖形驅(qū)動軟件設(shè)計
圖形系統(tǒng)上層應(yīng)用軟件采用標(biāo)準(zhǔn)的OpenGL ES接口進行繪圖,需要底層圖形驅(qū)動軟件支持,從而不必關(guān)心硬件CPU、GPU、DDR3 SDRAM幀存以及顯示控制器之間的復(fù)雜交互邏輯,降低上層應(yīng)用軟件的設(shè)計難度。
以龍芯2K1000內(nèi)置GPU Linux系統(tǒng)下的圖形驅(qū)動源碼為基礎(chǔ),將圖形驅(qū)動代碼按功能進行模塊劃分,主要包括GPU硬件驅(qū)動層、嵌入式圖形接口(Embedded Graphic Interface,EGL)驅(qū)動層、OpenGL ES接口驅(qū)動層等,進一步細分模塊為與操作系統(tǒng)相關(guān)部分和與操作系統(tǒng)無關(guān)部分。根據(jù)天脈系統(tǒng)與Linux系統(tǒng)的差異性,確定操作系統(tǒng)層面上需要開發(fā)的驅(qū)動模塊,如顯示控制器驅(qū)動、幀存驅(qū)動等,這些是圖形顯示必備的驅(qū)動。Linux系統(tǒng)生態(tài)比較完善,自帶有這些驅(qū)動,而在天脈下則需要自行開發(fā)。圖形系統(tǒng)圖形驅(qū)動簡要模塊框圖如圖5所示。
圖5 圖形驅(qū)動模塊圖
各驅(qū)動子模塊的設(shè)計如下:
(1)GPU硬件驅(qū)動
完成GPU的寄存器配置、中斷引腳配置、內(nèi)存資源配置、中斷處理、繪圖指令Event處理等,與應(yīng)用層的接口為gpu_init,應(yīng)用程序中調(diào)用該函數(shù)即可完成GPU硬件的初始化,GPU硬件驅(qū)動模塊封裝形成LibGAL.a。
(2)EGL接口驅(qū)動
提供應(yīng)用程序標(biāo)準(zhǔn)的EGL圖形繪制框架接口,與操作系統(tǒng)無關(guān),無需進行改動。
(3)OpenGL ES接口驅(qū)動
提供應(yīng)用程序標(biāo)準(zhǔn)的OpenGL ES圖形繪制接口,與操作系統(tǒng)無關(guān),無需進行改動。EGL接口驅(qū)動模塊與OpenGL ES接口驅(qū)動模塊封裝形成LibGL.a。
(4)龍芯2K1000顯示接口驅(qū)動
對龍芯2K1000的顯示接口進行時序配置,使之輸出標(biāo)準(zhǔn)的視頻時序(圖形系統(tǒng)使用1 024 pixel×768 pixel@60 Hz),并配置顯示接口使用的雙緩存幀存地址等。
(5)FrameBuffer幀存驅(qū)動
注冊FrameBuffer驅(qū)動,創(chuàng)建FrameBuffer設(shè)備,EGL通過FrameBuffer設(shè)備獲取當(dāng)前的顯示分辨率,并控制雙緩存幀存的切換等。龍芯2K1000顯示接口驅(qū)動模塊與FrameBuffer驅(qū)動模塊提供應(yīng)用程序接口合并成FrameBuffer_init,應(yīng)用程序中調(diào)用該函數(shù)即可完成顯示接口初始化和FrameBuffer設(shè)備的創(chuàng)建。
圖形系統(tǒng)上層應(yīng)用軟件調(diào)用圖形驅(qū)動的主要過程如圖6所示。gpu_init完成后,在天脈操作系統(tǒng)下創(chuàng)建/dev/galcore設(shè)備,OpenGL ES接口通過ioctl訪問/dev/galcore,生成繪圖指令發(fā)送給GPU,由GPU硬件完成繪圖。FrameBuffer_init創(chuàng)建/dev/fb設(shè)備,EGL swapbuffers通過/dev/fb來控制雙緩存的切換。
圖6 應(yīng)用程序調(diào)用驅(qū)動示意圖
設(shè)定CPU主頻為800 MHz,GPU主頻分別為230 MHz、400 MHz、533 MHz,DDR3 SDRAM時鐘頻率為800 MHz,顯示分辨率為1 024 pixel×768 pixel@60 Hz。圖形應(yīng)用采用SCADE工具開發(fā),自動生成基于OpenGL ES2.0的圖形代碼。測試畫面采用典型機載顯示器圖形畫面,如圖7所示。運行天脈操作系統(tǒng)版本為V1.2.1。視頻疊加功能開啟,外部通信總線開啟3路RS422和2路HDLC,其中每路RS422通信周期為100 ms,每個周期收發(fā)數(shù)據(jù)為30 B,每路HDLC通信周期為50 ms,每個周期收發(fā)數(shù)據(jù)為60 B。實驗室環(huán)境依次測試不同GPU主頻下圖形系統(tǒng)的幀率及功耗。
圖7 幀率測試畫面
針對兩種測試畫面,在不同的GPU主頻下,圖形系統(tǒng)幀率及功耗測試結(jié)果如表1所示。
表1 測試結(jié)果
從測試結(jié)果可以看出,在開反走樣的情況下,測試畫面1中,GPU主頻提升能夠較大的提升圖形性能,測試畫面2中,GPU主頻達到400 MHz后,圖形性能則不再提升。圖形系統(tǒng)功耗隨性能的提升而增加,在關(guān)閉反走樣的情況下GPU主頻提升則對性能無影響,功耗也無變化。
圖形系統(tǒng)性能與CPU、GPU密切相關(guān),當(dāng)GPU主頻提升后,若圖形性能隨之提升,則說明當(dāng)前性能瓶頸受制于GPU,反之則受制于CPU。在不同的應(yīng)用中,需要根據(jù)實際顯示性能和功耗要求,設(shè)置合理的GPU主頻和反走樣處理方式,達到最優(yōu)設(shè)計。
龍芯2K1000芯片的設(shè)計功耗最大僅為5 W,在實驗室常溫環(huán)境下裸芯片無任何散熱措施,長時間運行機載典型畫面,工作無異常。在圖形系統(tǒng)運用于機載顯示器整機時,龍芯2K1000采用傳導(dǎo)散熱方式,其與機載顯示器后蓋通過導(dǎo)熱硅膠相連,并依靠整機金屬外殼進行散熱。圖形系統(tǒng)隨機載顯示器整機通過了高低溫環(huán)境試驗,在試驗溫度為-40℃~+65℃情況下,圖形系統(tǒng)啟動、圖形顯示以及各功能接口均工作正常,能夠滿足整機應(yīng)用需求。
本文針對機載顯示器圖形生成系統(tǒng)領(lǐng)域的小尺寸、低功耗需求,提出了一種基于龍芯2K1000的全國產(chǎn)圖形生成與處理方案,并介紹了圖形系統(tǒng)的工作原理,給出了關(guān)鍵技術(shù)設(shè)計方法。與現(xiàn)有的CPU+GPU全國產(chǎn)技術(shù)方案相比,本方案集成度高、體積小,是一種更優(yōu)的小尺寸顯示器圖形系統(tǒng)全國產(chǎn)設(shè)計方法。實驗結(jié)果證明,在顯示分辨率為1 024 pixel×768 pixel@60 Hz的典型測試畫面下,圖形系統(tǒng)幀率可以達到35 frame/s以上,功耗控制下10 W以下。目前圖形系統(tǒng)已在某型機載顯示器上開展實際應(yīng)用,應(yīng)用效果良好,各方面指標(biāo)均能夠滿足顯示器應(yīng)用需求。