高世明,孟令軍,李寶剛,賈至江
(中北大學(xué) 電子測(cè)試技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,山西 太原 030051)
目前JPEG解碼有兩種方式:硬件解碼和軟件解碼。硬件解碼是利用專(zhuān)門(mén)的芯片來(lái)完成對(duì)JPEG圖像數(shù)據(jù)的解碼;軟件解碼則是通過(guò)相應(yīng)的程序來(lái)完成對(duì)數(shù)據(jù)的還原。由于軟件解碼需要大量的浮點(diǎn)運(yùn)算,因此目前大多采用ARM或DSP來(lái)實(shí)現(xiàn)[1],但是此類(lèi)方法電路設(shè)計(jì)復(fù)雜,且并行處理能力較差,基于此,筆者提出了一種基于NiosII多核處理器的JPEG解碼的方法,本設(shè)計(jì)在Altera Cyclone II EP2C35F672C8芯片上實(shí)現(xiàn)多軟核系統(tǒng),利用FPGA芯片的并行處理結(jié)構(gòu)以及兩個(gè)Nios II軟核處理器間的并行處理和協(xié)作,來(lái)完成JPEG的解碼過(guò)程,并通過(guò)加入自定義模塊來(lái)提高系統(tǒng)性能。
NiosII多軟核系統(tǒng)分為兩種:獨(dú)立多軟核與資源共享型多軟核。獨(dú)立多軟核處理器之間是完全獨(dú)立的,各個(gè)處理器之間完全沒(méi)有通信,所以在提高系統(tǒng)性能方面很有限[2]。本設(shè)計(jì)采用的是資源共享型多軟核,處理器間通過(guò)共享資源來(lái)實(shí)現(xiàn)信息交互,形成一個(gè)完整的系統(tǒng)。
本系統(tǒng)有兩個(gè)NiosII軟核處理器,每個(gè)處理器都有獨(dú)立的定時(shí)器和片上RAM指令存儲(chǔ)器。定時(shí)器用作系統(tǒng)看門(mén)狗,可有效地防止處理器進(jìn)入異常或死循環(huán)。每個(gè)NiosII處理器的啟動(dòng)程序和任務(wù)程序都存放在指令存儲(chǔ)器中,因?yàn)閷?shí)現(xiàn)并行處理時(shí),每個(gè)CPU核不一定執(zhí)行相同的功能,所以,每個(gè)處理器必須具有獨(dú)立的指令存儲(chǔ)器。雙核NiosII處理器系統(tǒng)中,必須要把其中一個(gè)處理器設(shè)置為主CPU來(lái)負(fù)責(zé)控制和調(diào)度整個(gè)系統(tǒng),以及FPGA與上位機(jī)之間的數(shù)據(jù)傳輸,在本系統(tǒng)中,設(shè)置CPU1作為主要的處理器。因此,處理器CPU1配置有PIO接口和JTAG-UART接口,JTAG-UART接口將用于整個(gè)系統(tǒng)的調(diào)試。UART接口(RS-232)被配置在CPU2用于在應(yīng)用軟件程序調(diào)試時(shí)監(jiān)測(cè)CPU2的狀態(tài)。另外,為了處理尺寸較大的圖片,需要有片外存儲(chǔ)器的支持,因此本設(shè)計(jì)中配置了一片SDRAM存儲(chǔ)器,通過(guò)SDRAM控制器與Avalon總線相連。NiosII雙核處理器系統(tǒng)的結(jié)構(gòu)框圖如圖1所示。
為了實(shí)現(xiàn)兩個(gè)處理器對(duì)應(yīng)用程序任務(wù)的并行處理,系統(tǒng)必須為兩個(gè)處理器提供有效的共享機(jī)制來(lái)處理數(shù)據(jù)和進(jìn)程信息。在本系統(tǒng)的設(shè)計(jì)中,系統(tǒng)配置提供了兩種存儲(chǔ)器的共享[3]。一個(gè)小型的共享存儲(chǔ)體(Process Message Memory)可用于傳輸一些簡(jiǎn)單的進(jìn)程信號(hào),其目的是溝通處理器之間的狀態(tài)。一個(gè)共享的片上RAM存儲(chǔ)器(JPEG Data Memory)連接到兩個(gè)處理器以提供處理數(shù)據(jù)的共享。本系統(tǒng)由兩個(gè)NiosII軟核處理器組成,它們集成構(gòu)成一個(gè)硬件處理系統(tǒng),因此,本系統(tǒng)只需要一個(gè)系統(tǒng)ID號(hào)。當(dāng)兩個(gè)處理器核共享片上數(shù)據(jù)存儲(chǔ)器,兩個(gè)處理器都會(huì)對(duì)此存儲(chǔ)器執(zhí)行讀取和寫(xiě)入操作,這構(gòu)成一個(gè)關(guān)鍵的問(wèn)題是如何在確保系統(tǒng)正確地執(zhí)行讀寫(xiě)操作的同時(shí)存儲(chǔ)器中的數(shù)據(jù)不會(huì)被損壞。為此硬件Mutex核被嵌入本雙核處理器系統(tǒng)。Mutex的意義是“相互排斥”,硬件Mutex核正是執(zhí)行了這樣的任務(wù)。Mutex核使得系統(tǒng)中兩個(gè)處理器同時(shí)只能有一個(gè)來(lái)訪問(wèn)共享存儲(chǔ)器。這在多個(gè)Avalon總線設(shè)備嘗試同時(shí)存取存儲(chǔ)器時(shí),對(duì)保護(hù)共享存儲(chǔ)器的數(shù)據(jù)是非常有用的。Mutex核作為共享資源提供一個(gè)“測(cè)試和設(shè)置”操作。如果處理器核測(cè)試到Mutex是可用的,那么它將在一個(gè)操作中占用Mutex。處理器完成對(duì)存儲(chǔ)器的操作后就釋放此Mutex。應(yīng)用程序通過(guò)調(diào)用Mutex硬核的API函數(shù)來(lái)實(shí)現(xiàn)對(duì)共享存儲(chǔ)器的互斥訪問(wèn)。若不使用硬件Mutex核,這種功能通常需要兩個(gè)單獨(dú)的“測(cè)試”和“設(shè)定”指令來(lái)完成。而在此“設(shè)定”指令完成之前,另一個(gè)處理器也會(huì)“測(cè)試”共享資源的可利用性。有時(shí)會(huì)使兩個(gè)處理器認(rèn)為它們都成功地占有了共享資源,從而造成共享數(shù)據(jù)的破壞。

圖1 NiosII雙核處理器系統(tǒng)的結(jié)構(gòu)框圖
圖2是基于反離散余弦變換的JPEG解碼過(guò)程框圖,本雙核JPEG解碼處理系統(tǒng)是針對(duì)JFIF格式的,首先讀入JFIF的頭文件,頭文件中有一系列相應(yīng)的標(biāo)記對(duì)應(yīng)于存儲(chǔ)JFIF文件的結(jié)構(gòu)體信息,如圖像的尺寸,量化表和霍夫曼表,水平/垂直采樣因子等[4]。熵編碼是基于二叉樹(shù)形成霍夫曼表壓縮存儲(chǔ)的數(shù)據(jù),它使用霍夫曼表恢復(fù)壓縮的圖像數(shù)據(jù)為1直流分量和63交流分量數(shù)據(jù),這些數(shù)據(jù)代表了圖像像素的色彩構(gòu)成編碼。反量化操作利用量化表對(duì)量化值進(jìn)行譯碼,它利用系數(shù)矩陣為放置在8×8數(shù)據(jù)塊中的相應(yīng)位置的64個(gè)色彩分量生成乘積矩陣。JPEG文件里一般含一個(gè)亮度分量的量化表和一個(gè)色度分量的量化表,反量化就是對(duì)熵解碼出來(lái)的系數(shù)矩陣乘上相應(yīng)的量化矩陣,得出相應(yīng)的色度和亮度矩陣。反離散余弦變換(IDCT)是將色彩矩陣由頻域空間轉(zhuǎn)換到時(shí)域空間,并且在執(zhí)行完反離散余弦變換之后,在時(shí)域空間中的矩陣仍然是8×8的數(shù)據(jù)塊[5]。最后,為了顯示在屏幕上,圖像必須以RGB的編碼模式出現(xiàn),因此,JPEG解碼的最后一步是把色彩的表現(xiàn)形式從YUV模式轉(zhuǎn)換到RGB模式。

圖2 JPEG解碼過(guò)程框圖
圖3是雙核系統(tǒng)的并行處理過(guò)程框圖,其中虛線框表示CPU1的處理過(guò)程,實(shí)線框表示CPU2的處理過(guò)程。由圖3可知,第一步兩個(gè)處理器分別加載量化表和霍夫曼表。對(duì)于彩色圖像,它至少有兩個(gè)量化表和兩個(gè)霍夫曼表對(duì)應(yīng)于Y亮度分量和UV色度分量。當(dāng)數(shù)據(jù)加載完成后,CPU1作為主處理器將在量化表編號(hào),霍夫曼表編號(hào)和YUV色彩分量之間完成關(guān)系映射。在第二步中,該系統(tǒng)將實(shí)現(xiàn)解碼過(guò)程。它是基于每個(gè)8×8的數(shù)據(jù)塊,每個(gè)處理器核執(zhí)行基于離散余弦變換的解碼過(guò)程,具體步驟如下:1)熵解碼。依據(jù)霍夫曼表恢復(fù)1個(gè)直流分量和63個(gè)交流分量,然后形成8×8的色彩分量矩陣。2)反量化。它利用量化表來(lái)實(shí)現(xiàn)反量化表操作。基于此操作,每個(gè)色彩分量的值被恢復(fù)出來(lái)。3)反離散余弦變換。這一操作將色彩矩陣中的色彩分量從頻域空間轉(zhuǎn)換到時(shí)域空間。兩個(gè)NiosII處理器核以并行處理的方式,并以8×8的數(shù)據(jù)塊為單位,執(zhí)行上述三項(xiàng)操作。這里應(yīng)該注意的是,由于對(duì)每個(gè)8×8的數(shù)據(jù)塊的霍夫曼表長(zhǎng)度都是改變的,所以在霍夫曼表中不能預(yù)測(cè)下一個(gè)8×8數(shù)據(jù)塊的起始位置,因此,CPU2只有在CPU1完成前面一個(gè)數(shù)據(jù)塊的熵解碼之后,才能夠開(kāi)始執(zhí)行熵解碼操作。第三步的主要任務(wù)是把色彩分量的編碼方式由YVU轉(zhuǎn)換到RGB。CPU1將從存儲(chǔ)數(shù)據(jù)的起始開(kāi)始執(zhí)行,CPU2從存儲(chǔ)數(shù)據(jù)的尾部開(kāi)始執(zhí)行。這樣,這兩個(gè)NiosII處理器就可以并行工作。重構(gòu)后的解碼數(shù)據(jù)由主處理器CPU1通過(guò)RS-232傳輸給主控計(jì)算機(jī)。

圖3 雙核處理器并行處理過(guò)程框圖
由于YUV到RGB轉(zhuǎn)換對(duì)每個(gè)像素每次都執(zhí)行對(duì)存儲(chǔ)器的讀寫(xiě)操作,這部分轉(zhuǎn)換操作約占總解碼時(shí)間的30%,這樣對(duì)存儲(chǔ)器的存取操作顯然會(huì)引起明顯的功耗增加。基于此,筆者提出了一種在系統(tǒng)中集成自定義模塊來(lái)定向處理YUV到RGB轉(zhuǎn)換的方法,該方法利用HDL語(yǔ)言來(lái)編寫(xiě)模塊的功能,經(jīng)過(guò)編譯、仿真、驗(yàn)證和測(cè)試后,能夠生成相應(yīng)的功能模塊,將此模塊集成到NiosII雙核處理器系統(tǒng)中,來(lái)實(shí)現(xiàn)執(zhí)行相關(guān)硬件的功能[6]。這樣由YUV到RGB轉(zhuǎn)換操作就由特定的硬件模塊來(lái)執(zhí)行,不同于全部的運(yùn)算都依賴(lài)于NiosII處理器,自定義功能模塊有效減少處理器核的工作量,整個(gè)系統(tǒng)的運(yùn)算速度也有明顯提高。表1是幾種不同尺寸的圖像在有自定義模塊的系統(tǒng)和無(wú)自定義模塊系統(tǒng)中性能提升的比較表,表中每個(gè)系統(tǒng)都以50 MHz的時(shí)鐘頻率運(yùn)行,通過(guò)記錄兩個(gè)系統(tǒng)實(shí)際執(zhí)行解碼任務(wù)的時(shí)鐘周期數(shù),就可得出處理器系統(tǒng)性的對(duì)比結(jié)果,由表1可知NiosII雙核系統(tǒng)集成了YUV到RGB自定義模塊后,系統(tǒng)的性能大約提高了15%,比普通單核系統(tǒng)處理速度提高了大約40%。
筆者以NiosII雙核處理器為平臺(tái),實(shí)現(xiàn)了JPEG解碼的并行處理,并且利用可編程片上系統(tǒng)(SoPC)的特點(diǎn)設(shè)計(jì)了JPEG解碼中YUV到RGB轉(zhuǎn)換的自定義功能模塊,并成功將此模塊集成入NiosII處理器系統(tǒng)中,縮短了解碼過(guò)程的時(shí)間,并在很大程度上提高了整個(gè)系統(tǒng)的性能。設(shè)計(jì)中充分發(fā)揮了SoPC技術(shù)的優(yōu)勢(shì),可以預(yù)測(cè),基于NiosII的多核處理器系統(tǒng)必將具有良好的應(yīng)用前景。

表1 NiosII雙核系統(tǒng)性能提升表
[1]YIN Ruixiang,SIU Wanchi.A new fast algorithm for computingprime-length DCT through cyclic convolutions[J].signal proce-ssing,2001,81(5):896-906.
[2]沈勝慶.嵌入式操作系統(tǒng)的內(nèi)核研究[J].微計(jì)算機(jī)信息,2006(2):72-74.
[3]RAVINDRAN K, SATISH N, JIN Yujia, et al.An FPGA-based soft multiprocessor system for IPv4 packet forwarding[J].Field Programmable Logic and Applications,2005(8):487-492.
[4]位娜,卞春江,胡鈦.基于SOPC的通用圖像處理系統(tǒng)設(shè)計(jì)[J].微計(jì)算機(jī)信息,2009(6):290-291.
[5]張春田,蘇育挺,張靜.數(shù)字圖像壓縮編碼[M].北京:清華大學(xué)出版社,2006:1.
[6]蔡偉綱.Nios II軟件架構(gòu)解析[M].西安:西安電子科技大學(xué)出版社,2007:11.
[7]楊金元.嵌入式操作系統(tǒng)實(shí)時(shí)內(nèi)核分析[J].電視技術(shù),2003,27(7):53-55.