《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > JPEG-LS多路并行譯碼的FPGA實(shí)現(xiàn)
JPEG-LS多路并行譯碼的FPGA實(shí)現(xiàn)
來源:微型機(jī)與應(yīng)用2010年第19期
王成成,鄧家先,王海榮
(海南大學(xué) 信息科學(xué)與技術(shù)學(xué)院,海南 海口 570228)
摘要: 提出了一種基于FPGA的JPEG-LS的多路并行譯碼系統(tǒng),運(yùn)用VHDL語(yǔ)言實(shí)現(xiàn),以提高圖像的譯碼速度。系統(tǒng)主要分為檢測(cè)模塊、譯碼模塊和碼流分配模塊三部分。在檢測(cè)模塊中提取和去除頭文件的圖像信息,譯碼模塊則根據(jù)算法對(duì)圖像數(shù)據(jù)進(jìn)行恢復(fù),碼流分配模塊為多路并行算法的關(guān)鍵,利用流水線結(jié)構(gòu)的思路采用乒乓操作將碼流從檢測(cè)模塊傳送到外部RAM。在譯碼時(shí)采用同樣的方法將數(shù)據(jù)送入多個(gè)譯碼模塊進(jìn)行譯碼。
Abstract:
Key words :

摘  要: 提出了一種基于FPGA的JPEG-LS的多路并行譯碼系統(tǒng),運(yùn)用VHDL語(yǔ)言實(shí)現(xiàn),以提高圖像的譯碼速度。系統(tǒng)主要分為檢測(cè)模塊、譯碼模塊和碼流分配模塊三部分。在檢測(cè)模塊中提取和去除頭文件的圖像信息,譯碼模塊則根據(jù)算法對(duì)圖像數(shù)據(jù)進(jìn)行恢復(fù),碼流分配模塊為多路并行算法的關(guān)鍵,利用流水線結(jié)構(gòu)的思路采用乒乓操作將碼流從檢測(cè)模塊傳送到外部RAM。在譯碼時(shí)采用同樣的方法將數(shù)據(jù)送入多個(gè)譯碼模塊進(jìn)行譯碼。
關(guān)鍵詞: 現(xiàn)場(chǎng)可編程邏輯門陣列;碼流分配;多路并行;流水線;乒乓操作

    JPEG-LS無(wú)損和近無(wú)損壓縮算法已經(jīng)在醫(yī)療和遙感圖像領(lǐng)域得到了廣泛應(yīng)用。在現(xiàn)有的硬件譯碼中實(shí)現(xiàn)高性能的JPEG-LS譯碼大都采用流水線處理方式[1]。并行運(yùn)算在硬件譯碼中的應(yīng)用使得其相對(duì)于軟件譯碼更有明顯的優(yōu)勢(shì)。由于FPGA具有系統(tǒng)結(jié)構(gòu)和邏輯單元靈活、集成度高、開發(fā)周期短、可適用于較大規(guī)模的電路等優(yōu)點(diǎn),因此本設(shè)計(jì)中采用FPGA作為硬件開發(fā)平臺(tái),對(duì)圖片的譯碼采用多路并行的方式[2]來實(shí)現(xiàn)高速譯碼。為了節(jié)省系統(tǒng)資源,本設(shè)計(jì)采用四路并行譯碼。由于處理的圖像信息量比較大,在圖片處理過程中需要對(duì)數(shù)據(jù)進(jìn)行緩存,而在芯片內(nèi)部的RAM無(wú)法滿足要求的情況下,采用外掛RAM對(duì)從檢測(cè)模塊和解碼模塊出來的圖片信息進(jìn)行緩存[3]。本多路并行譯碼系統(tǒng)主要由檢測(cè)模塊、譯碼模塊和碼流分配模塊組成。
1 檢測(cè)模塊
 檢測(cè)模塊用來對(duì)圖片信息的頭文件進(jìn)行處理。對(duì)于每一種圖像壓縮算法,其頭文件都有固定的一種格式。在檢測(cè)模塊中,接收到頭文件信息后首先檢測(cè)標(biāo)識(shí)號(hào)是否正確。為了正確提取頭文件中的圖像信息,設(shè)計(jì)中設(shè)置一個(gè)計(jì)數(shù)器對(duì)輸入的時(shí)鐘進(jìn)行計(jì)數(shù)。如果標(biāo)識(shí)號(hào)正確,則進(jìn)入下一個(gè)狀態(tài)并且計(jì)數(shù)器開始計(jì)數(shù);若錯(cuò)誤則停留在當(dāng)前狀態(tài)檢測(cè)下一個(gè)標(biāo)識(shí)號(hào),計(jì)數(shù)器保持為0。標(biāo)識(shí)好并正確后去除標(biāo)識(shí)號(hào)信息,從頭文件后面的信息中在不同的狀態(tài)根據(jù)計(jì)數(shù)器的不同分別提取出圖像的高、寬、精度等信息。頭文件信息提取完之后,根據(jù)碼流長(zhǎng)度的值判斷選擇對(duì)數(shù)據(jù)進(jìn)行緩存。當(dāng)碼流長(zhǎng)度依次遞減為0時(shí),狀態(tài)選擇跳轉(zhuǎn)為最初狀態(tài),等待下一幅圖片的輸入。
2 譯碼模塊
   譯碼模塊是對(duì)壓縮后的圖片信息進(jìn)行恢復(fù)。JPEG-LS的編碼方法是一種利用Glomb編碼和上下文建模的編碼方法。
 建模建立在上下文的基礎(chǔ)上。在上下文建模時(shí),每個(gè)樣本值都是以周圍幾個(gè)像素的值為條件的,要確定一個(gè)概率分布用來編碼當(dāng)前樣本值。若樣本為x,如圖1所示,上下文是由圖中a、b、c、d 4個(gè)位置的重建樣本值來確定的。圖像數(shù)據(jù)的掃描順序是按從左到右從上到下進(jìn)行。通過對(duì)4個(gè)重建樣本值計(jì)算出3個(gè)梯度值D1、D2、D3,然后根據(jù)3個(gè)梯度值決定對(duì)x位置的樣本值采用游長(zhǎng)編碼還是采用常規(guī)編碼。當(dāng)梯度值D1、D2、D3全為0時(shí)或者全部小于近無(wú)損壓縮控制的壓縮比控因子(NEAR)值時(shí)選擇游長(zhǎng)編碼,否則選擇常規(guī)編碼。
    常規(guī)編碼主要是一個(gè)對(duì)預(yù)測(cè)值、預(yù)測(cè)誤差的編碼過程和一個(gè)變量更新過程。在上下文建模之后是預(yù)測(cè)過程。預(yù)測(cè)值是由如圖1所示的a、b、c、d位置的樣本重建值對(duì)x位置的樣本值的一個(gè)預(yù)測(cè)。預(yù)測(cè)誤差則是預(yù)測(cè)值與實(shí)際值之間的差值。預(yù)測(cè)誤差后則根據(jù)上下文對(duì)其修正補(bǔ)償在預(yù)測(cè)過程中的系統(tǒng)偏差。對(duì)近無(wú)損壓縮而言,要對(duì)預(yù)測(cè)誤差進(jìn)行量化。

    在游長(zhǎng)編碼中,如果a、b、c、d位置的樣本重建值的梯度值均為0,或者樣本重建值之間梯度值在近無(wú)損壓縮控制因子的范圍之內(nèi),則上下文建模選擇游長(zhǎng)編碼。游長(zhǎng)編碼過程不需要對(duì)樣本預(yù)測(cè)值和預(yù)測(cè)誤差編碼,編碼器從x位置開始對(duì)連續(xù)出現(xiàn)樣本值相同的樣本均用a位置的樣本值來重建,直到樣本值之間的梯度值不滿足要求,或者到本行結(jié)束時(shí),結(jié)束游長(zhǎng)編碼。
    圖像的解碼過程和編碼過程大致相同,即根據(jù)上下文之間重建樣本值的關(guān)系來確定x位置的樣本值,采用同樣的方式選擇是常規(guī)譯碼還是游長(zhǎng)譯碼。
3 碼流分配模塊
3.1 碼流分配方案

    碼流分配模塊為多路并行算法的關(guān)鍵,也是本設(shè)計(jì)的頂層模塊,負(fù)責(zé)對(duì)輸入碼流[5]的走向進(jìn)行調(diào)配。在本設(shè)計(jì)中采用4個(gè)外掛的RAM存儲(chǔ)解碼過程中的碼流數(shù)據(jù)。為了節(jié)省FPGA系統(tǒng)資源,本設(shè)計(jì)采用4路并行的方式,如圖2所示。首先碼流通過檢測(cè)模塊對(duì)圖像的頭文件進(jìn)行處理,將處理后的結(jié)果順序緩存到RAM1和RAM2中。當(dāng)緩存RAM寫滿之后,RAM中的數(shù)據(jù)送入4個(gè)譯碼模塊dec1、dec2、dec3、dec4開始譯碼。譯碼后的數(shù)據(jù)順序緩存到RAM3和RAM4中,然后顯示器循環(huán)調(diào)用RAM3和RAM4中的數(shù)據(jù)進(jìn)行顯示。

    設(shè)計(jì)中將每個(gè)RAM的地址空間劃分為四個(gè)部分,分別存放一幀數(shù)據(jù)中4幅圖像的數(shù)據(jù)。在譯碼部分提取數(shù)據(jù)時(shí)也可根據(jù)RAM中存放圖片的位置對(duì)應(yīng)提取出所要譯碼圖片的信息。為了提高設(shè)計(jì)的整體性能和效率,設(shè)計(jì)中對(duì)檢測(cè)模塊和譯碼模塊采用不同頻率的時(shí)鐘,在檢測(cè)模塊采用50 MHz的時(shí)鐘,譯碼模塊則采用90 MHz的時(shí)鐘。由于對(duì)RAM讀寫時(shí)鐘采用不同的頻率,保證了時(shí)序控制上有嚴(yán)格的要求。在第一個(gè)緩存周期中,從檢測(cè)模塊出來的數(shù)據(jù)采用乒乓操作的方法[4]首先存儲(chǔ)到RAM1的4個(gè)空間中。在第二個(gè)緩存周期,如果RAM1存儲(chǔ)滿、RAM2為空,則檢測(cè)輸出選擇信號(hào)將切換到RAM2上,開始對(duì)RAM2進(jìn)行寫操作,同時(shí)譯碼模塊輸入選擇信號(hào)切換到RAM1并對(duì)RAM1中的4幅圖像的數(shù)據(jù)采用流水線方式4路并行譯碼。在第三個(gè)緩存周期中,如果RAM1譯碼完成、RAM2寫滿,則先將RAM1復(fù)位,再將檢測(cè)輸出選擇信號(hào)選擇RAM1,并對(duì)RAM1進(jìn)行寫操作,譯碼輸入選擇信號(hào)選擇RAM2,開始對(duì)RAM2中的4幅圖像譯碼。對(duì)RAM3和RAM4的讀寫也采用相同的乒乓操作方式。在第三個(gè)緩存周期,譯碼輸出選擇RAM3,并對(duì)RAM3開始寫操作,當(dāng)RAM3寫滿、RAM4為空時(shí),進(jìn)入第四個(gè)緩存周期,譯碼輸出選擇對(duì)RAM4寫操作,屏幕顯示調(diào)用RAM3中的數(shù)據(jù)。到下一個(gè)操作時(shí)序時(shí),RAM3中的數(shù)據(jù)讀完、RAM4存儲(chǔ)滿,則對(duì)RAM3復(fù)位,譯碼輸出選擇RAM3,屏幕顯示調(diào)用RAM4中的數(shù)據(jù)。如此實(shí)現(xiàn)圖片的不間斷輸出。
3.2 乒乓操作并行控制的VHDL實(shí)現(xiàn)及仿真
    設(shè)計(jì)中的乒乓操作主要體現(xiàn)在對(duì)RAM1和RAM2的讀寫時(shí)序控制上。對(duì)RAM1和RAM2的寫操作采用50 MHz的時(shí)鐘,而讀操作則采用90 MHz的時(shí)鐘。本設(shè)計(jì)在Modeltech_6.3a仿真工具下做時(shí)序和功能仿真。測(cè)試文件采用10位精度壓縮后的碼流作為譯碼的輸入,選擇16數(shù)據(jù)線的RAM作為緩沖儲(chǔ)存器。
    設(shè)計(jì)中,用來控制RAM1寫信號(hào)的為碼流輸入判斷信號(hào)fram,當(dāng)fram信號(hào)為1時(shí)則為有碼流輸入;data_valid用來控制是否為有效數(shù)據(jù);fram_flag1作為判斷一幀數(shù)據(jù)的4幅圖像在RAM1中是否存儲(chǔ)完成的標(biāo)志;fram_flag2作為判斷一幀數(shù)據(jù)的4幅圖像在RAM2中是否存儲(chǔ)完成的標(biāo)志。如果一幀數(shù)據(jù)的4幅圖像在RAM1寫完則fram_flag1為1。同樣如果在RAM2中存儲(chǔ)完成則fram_flag2為1;ram1_ready為判斷RAM1是否準(zhǔn)備好接收數(shù)據(jù)的標(biāo)志。當(dāng)ram1_ready為1時(shí)表示已經(jīng)復(fù)位完成,準(zhǔn)備接收數(shù)據(jù);ram2_ready則為判斷RAM2是否準(zhǔn)備好接收數(shù)據(jù)的標(biāo)志;read_empty1為RAM1讀空信號(hào);read_empty1_delay為read_empty1的一個(gè)時(shí)鐘的延遲信號(hào);ram1_2為RAM1和RAM2之間的切換信號(hào)。ram1_2為0時(shí)表示選擇RAM1,為1時(shí)表示選擇RAM2;ram1_strm、ram2_strm為RAM中的輸入碼流信息;cnt1為以8為碼流計(jì)數(shù),當(dāng)其為奇數(shù)時(shí)RAM地址+1,當(dāng)其為偶數(shù)時(shí)RAM地址不變。
    在50 MHz時(shí)鐘的上升沿,如果read_empty1=1、read_empty1_delay=0,則ram1_ready=1。如圖3所示為RAM1寫操作時(shí)各寫操作控制信號(hào)的波形圖。

    設(shè)計(jì)中用來控制RAM讀操作的信號(hào)有write_full1,它是判斷RAM1是否寫滿的標(biāo)志。復(fù)位時(shí),write_full1為0,當(dāng)一幀輸入碼流存儲(chǔ)到RAM1中后,write_full1為1。RAM2的滿標(biāo)志用write_full2信號(hào)來判斷。dec_end1為RAM1中信息譯碼結(jié)束標(biāo)志,RAM1中信息譯碼結(jié)束時(shí)dec_end1為1,復(fù)位時(shí)dec_end1為0。dec_end1_delay為dec_end1的一個(gè)時(shí)鐘延遲信號(hào)。dec_end2和dec_end2_delay分別為RAM2譯碼結(jié)束標(biāo)志和對(duì)譯碼標(biāo)志的一個(gè)延時(shí)。dec_permit為RAM1、RAM2的譯碼允許標(biāo)志。ram1_rd、ram2_rd分別為RAM1、RAM2的讀信號(hào)。dec_start1、dec_start2分別為RAM1和RAM2開始譯碼的標(biāo)志位。
    當(dāng)dec_end1_delay=0、dec_end1=1時(shí),dec_permit=1。當(dāng)dec_end2_delay=0、dec_end2=1時(shí),dec_permit=0。
    當(dāng)write_full1=1、dec_end1=0、dec_permit=0時(shí),RAM1的譯碼開始標(biāo)志位為1,表示開始對(duì)RAM1的譯碼。當(dāng)write_full2=1、dec_end2=1、dec_permit=1時(shí),RAM2的譯碼開始標(biāo)志位為1,表示開始對(duì)RAM2的譯碼。
    圖4為RAM1讀操作控制波形圖。從圖中可以看出,4個(gè)譯碼模塊采用流水線的方式根據(jù)RAM的地址分別讀取4幅圖像的數(shù)據(jù)進(jìn)行解碼。

    本設(shè)計(jì)采用4路并行譯碼的方式,芯片的面積利用率為90%,雖然占用的邏輯單元數(shù)量比較多,但是譯碼速度卻有很大提高,充分體現(xiàn)出面積和速度之間的關(guān)系。設(shè)計(jì)是在ISE7.1的軟件環(huán)境下進(jìn)行綜合的。譯碼部分使用邏輯單元數(shù)目為4 414個(gè),占所用邏輯單元總數(shù)的17%,使用片內(nèi)RAM為11個(gè),占片內(nèi)RAM總數(shù)的3%,綜合頻率達(dá)到了135.485 MHz。采用90 MHz的時(shí)鐘譯碼,使得譯碼圖像輸出幀之間相隔約9 ms,真正實(shí)現(xiàn)了圖片譯碼的實(shí)時(shí)傳輸。在測(cè)試階段采用多幅遙感圖像對(duì)多路譯碼器進(jìn)行了測(cè)試,實(shí)驗(yàn)結(jié)果表明,在采用多路并行譯碼的情況下,能夠?qū)崿F(xiàn)快速、準(zhǔn)確的傳輸。本設(shè)計(jì)具有很好的可移植性,能夠應(yīng)用到圖片處理的許多領(lǐng)域中。
參考文獻(xiàn)
[1] PAPADONIKOLAKIS M E, KAKAROUNTAS A P. Efficient high-performance implementation of JPEG2LS encoder[J]. Journal of Real-time Image, 2008(3):303-307.
[2] 王浩,劉文怡,韓志軍.多通道同步數(shù)據(jù)采集與處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].通信技術(shù),2009,42(1):297-299.
[3] 莊懷宇,吳成柯,鄧家先,等.JPEG2000 T2編碼快速算法及硬件實(shí)現(xiàn)[J].系統(tǒng)工程與電子技術(shù),2004,26(12):1939-1942.
[4] 王智,羅新民.基于乒乓操作的異步FIFO設(shè)計(jì)及VHDL實(shí)現(xiàn)[J].電子工程師,2005,31(6):13-16.
[5] 鄧家先,肖江,吳成柯,等.JPEG2000的重要性編碼[J].電路與系統(tǒng)學(xué)報(bào),2003,8(5):145-148.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲精选91| 久久伊伊香蕉| 91久久精品网| 久久精品99国产精品日本| 亚洲在线网站| 亚洲一区国产| 亚洲一区二区三区在线看| 一区二区三区精品视频在线观看 | 在线观看日韩av电影| 狠狠干成人综合网| 狠狠88综合久久久久综合网| 国内精品嫩模av私拍在线观看 | 国产精品久久久久一区| 国产精品久久久久久一区二区三区| 欧美三级电影一区| 欧美天堂亚洲电影院在线观看| 欧美日韩三级| 国产精品久久九九| 国产精品乱码妇女bbbb| 国产麻豆9l精品三级站| 国产日韩精品在线观看| 国产网站欧美日韩免费精品在线观看| 国产午夜亚洲精品羞羞网站 | 欧美在线视频一区| 亚洲国产网站| 日韩一区二区久久| 亚洲永久精品大片| 欧美一区二区三区四区在线观看地址 | 嫩草影视亚洲| 欧美日韩在线不卡| 国产精品网站视频| 国外成人网址| 亚洲精品在线看| 亚洲午夜视频在线观看| 午夜一区在线| 亚洲国产精品电影| 一区二区三区福利| 欧美在线播放一区| 欧美www在线| 国产精品都在这里| 国产一区二区三区久久精品| 在线看日韩欧美| 一区二区三区日韩精品| 欧美一区高清| 艳女tv在线观看国产一区| 亚洲欧美综合网| 免费精品99久久国产综合精品| 欧美日韩国产一区二区三区| 国产美女精品| 亚洲国产天堂久久国产91| 亚洲午夜精品17c| 亚洲成人在线网| 亚洲一区二区3| 久热精品视频| 国产精品国产a| 伊人蜜桃色噜噜激情综合| 日韩小视频在线观看| 欧美影视一区| 亚洲香蕉伊综合在人在线视看| 久久成人国产| 欧美日韩麻豆| 精品51国产黑色丝袜高跟鞋| 一区二区三区日韩精品视频| 亚洲福利久久| 午夜激情综合网| 欧美国产大片| 国产亚洲成人一区| 一本色道88久久加勒比精品| 久久精品国产欧美激情| 亚洲视频一区二区在线观看| 久久人人精品| 国产精品乱码| 日韩视频永久免费观看| 久久精品国产v日韩v亚洲| 亚洲一区中文| 欧美激情自拍| 黄色一区二区在线| 亚洲在线不卡| 亚洲天堂网在线观看| 免费成人性网站| 国产情侣一区| 亚洲午夜精品网| 9色精品在线| 免费不卡欧美自拍视频| 国产精品亚发布| 一本一本a久久| 亚洲美女91| 另类成人小视频在线| 国产欧美一区二区精品秋霞影院| 99这里只有精品| 亚洲美女色禁图| 久久最新视频| 国产综合在线视频| 午夜精品网站| 亚洲欧美综合一区| 国产精品成人免费| 9i看片成人免费高清| 亚洲精品免费一区二区三区| 巨胸喷奶水www久久久免费动漫| 国产欧美日韩亚洲精品| 亚洲视频999| 亚洲视屏在线播放| 欧美日韩国产一区精品一区| 亚洲国产婷婷综合在线精品 | 亚洲三级视频在线观看| 久久综合精品国产一区二区三区| 国产情人综合久久777777| 亚洲自拍高清| 午夜欧美大片免费观看| 国产精品国产自产拍高清av| 亚洲精品影院在线观看| 99综合视频| 国产日韩欧美在线播放| 宅男噜噜噜66国产日韩在线观看| 亚洲美女黄网| 欧美激情一二区| 亚洲人成小说网站色在线| 亚洲精品美女在线观看播放| 欧美成人激情视频免费观看| 精品二区视频| 最新日韩在线视频| 欧美粗暴jizz性欧美20| 亚洲国产精品毛片| 亚洲免费观看视频| 欧美日韩精品三区| 一本色道久久99精品综合 | 欧美中文在线视频| 国产日韩在线一区| 久久精品国产精品| 美日韩精品视频| 91久久精品国产91性色| 亚洲乱码国产乱码精品精天堂| 欧美激情中文字幕一区二区| 亚洲精品乱码久久久久久| 亚洲少妇一区| 国产精品视频九色porn| 亚洲欧美网站| 麻豆av一区二区三区久久| 亚洲国产成人av在线| 一区二区精品在线观看| 国产精品久久久久久久午夜片| 亚洲欧美国产制服动漫| 久久精品一区二区国产| 国语自产精品视频在线看一大j8| 亚洲激情影院| 欧美色一级片| 午夜精品久久久久久久99水蜜桃| 久久一日本道色综合久久| 最新中文字幕一区二区三区| 亚洲天堂av在线免费| 国产乱码精品一区二区三区av| 亚洲成人自拍视频| 欧美精品v日韩精品v韩国精品v| 一区二区免费在线播放| 欧美一区网站| 亚洲第一网站免费视频| 亚洲午夜一二三区视频| 国产日韩精品一区观看| 亚洲人成艺术| 国产精品每日更新在线播放网址| 久久爱另类一区二区小说| 欧美屁股在线| 亚洲欧洲av一区二区三区久久| 欧美va亚洲va香蕉在线| 亚洲天天影视| 蜜臀av一级做a爰片久久| 一区二区三区视频免费在线观看| 久久久久成人网| 亚洲美女性视频| 久久久久9999亚洲精品| 亚洲每日更新| 久久性天堂网| 亚洲网友自拍| 美乳少妇欧美精品| 亚洲综合大片69999| 欧美91福利在线观看| 亚洲欧美国产不卡| 欧美精品在线观看播放| 午夜精品理论片| 欧美日韩国产一级片| 欧美中文在线观看国产| 欧美性jizz18性欧美| 亚洲国产精品va在线看黑人 | 一区二区三区视频观看| 国内精品一区二区三区| 亚洲无线一线二线三线区别av| 一区免费视频| 先锋资源久久| 亚洲精品裸体| 麻豆成人综合网| 小黄鸭精品aⅴ导航网站入口| 欧美日韩国产精品成人| 久久精品国产综合| 国产精品每日更新| 一区二区三区视频在线播放| 在线观看欧美成人| 久久国产精品久久久| 一区二区三区日韩精品视频| 欧美精品18+| 亚洲国产一区二区视频|