亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于FPGA的CABAC熵編碼方法與裝置與流程

文檔序號(hào):12810195閱讀:333來源:國知局
一種基于FPGA的CABAC熵編碼方法與裝置與流程

本發(fā)明涉及異構(gòu)計(jì)算領(lǐng)域,具體涉及一種基于fpga的cabac熵編碼方法與裝置,其能夠高效且同時(shí)基于上下文進(jìn)行自適應(yīng)二進(jìn)制算術(shù)熵編碼(cabac)。本發(fā)明的顯著特征是通過采用雙路徑存儲(chǔ)上下文和多級(jí)流水線設(shè)計(jì),消除了數(shù)據(jù)依賴,用很小的代價(jià)獲得了較高的性能和吞吐率。



背景技術(shù):

fpga(field-programmablegatearray),即現(xiàn)場(chǎng)可編程門陣列,它是在pal、gal、cpld等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(asic)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。

熵編碼壓縮是一種無損壓縮,其實(shí)現(xiàn)原理是使用新的編碼來表示輸入的數(shù)據(jù),從而達(dá)到壓縮的效果。常用的熵編碼有游程編碼,哈夫曼編碼和cavlc編碼等。cabac(contextadaptivebinaryarithmaticcoding)是h.264/mpeg-4avc中使用的熵編碼算法。cabac在不同的上下文環(huán)境中使用不同的概率模型來編碼。其編碼過程大致是這樣:首先,將欲編碼的符號(hào)用二進(jìn)制bit表示;然后對(duì)于每個(gè)bit,編碼器選擇一個(gè)合適的概率模型,并通過相鄰元素的信息來優(yōu)化這個(gè)概率模型;最后,使用算術(shù)編碼壓縮數(shù)據(jù)。cabac是h.264和vp8壓縮標(biāo)準(zhǔn)中采用的熵編碼機(jī)制,在經(jīng)典的廣播應(yīng)用中它可以節(jié)約9%~14%的比特率,要比哈夫曼編碼和基于上下文的自適應(yīng)可變長(zhǎng)編碼cavlc更有效率,其壓縮效率比cavlc高20%。cavlc(contextadaptivevariablelengthcoding)是在h.264/mpeg-4avc中使用的熵編碼方式。在h.264中,cavlc以zig-zag順序用于對(duì)變換后的殘差塊進(jìn)行編碼。cavlc是cabac的替代品,雖然其壓縮效率不如cabac,但cavlc實(shí)現(xiàn)簡(jiǎn)單,并且在所有的h.264profile中都支持。

隨著超高清視頻技術(shù)的發(fā)展,對(duì)熵編碼的壓縮效率提出了越來越苛刻的要求。但cabac算法復(fù)雜度高,其內(nèi)生的數(shù)據(jù)串聯(lián)特性使得硬件實(shí)現(xiàn)難度大,一個(gè)比特的編碼結(jié)果會(huì)對(duì)接下來的一系列比特的編碼都有直接的影響,因此很難用并行技術(shù)對(duì)其進(jìn)行加速,這也成為了它的一個(gè)速度瓶頸。同時(shí)由于其中的上下文管理和算術(shù)編碼需要進(jìn)行很多存儲(chǔ)器訪問和alu操作,計(jì)算復(fù)雜度較高,在傳統(tǒng)的可編程器件中實(shí)現(xiàn)效率較低。

針對(duì)上述問題,本發(fā)明提出了一種基于fpga實(shí)現(xiàn)的算術(shù)編碼設(shè)計(jì)方法和硬件加速裝置,其能夠高效且同時(shí)基于上下文進(jìn)行自適應(yīng)二進(jìn)制算術(shù)熵編碼(cabac)。本發(fā)明的顯著特征是通過采用雙路徑存儲(chǔ)上下文和多級(jí)流水線設(shè)計(jì),消除了數(shù)據(jù)依賴,用很小的代價(jià)獲得了較高的性能和吞吐率。



技術(shù)實(shí)現(xiàn)要素:

本申請(qǐng)發(fā)明一種基于fpga的cabac熵編碼器裝置,該裝置具體包括兩個(gè)功能模塊:上下文更新模塊,該模塊使用兩個(gè)上下文寄存器、兩個(gè)索引比較器和三個(gè)數(shù)據(jù)選擇器避免了空閑狀態(tài)的產(chǎn)生;算術(shù)編碼數(shù)據(jù)產(chǎn)生模塊,用于更新編碼引擎的內(nèi)部狀態(tài)range、low和bitoutstanding寄存器,并且輸出比特流。

如上所述的基于fpga的cabac熵編碼器裝置,其特征還在于,上下文更新模塊中包括下一級(jí)流水,下一級(jí)流水具體包括兩部分,一部分用于判斷所編碼的符號(hào),另部分用于讀取存儲(chǔ)器。

如上所述的基于fpga的cabac熵編碼器裝置,其特征還在于,算術(shù)編碼數(shù)據(jù)產(chǎn)生模塊還包括多個(gè)兩輸入的補(bǔ)碼加法器和兩個(gè)高速的超前進(jìn)位加法器,超前進(jìn)位加法器用于進(jìn)行rmps和lownew的計(jì)算。

一種基于fpga的cabac熵編碼方法,該方法具體包括如下步驟:二值化步驟,將句法元素轉(zhuǎn)化為二進(jìn)制字符串的形式,實(shí)現(xiàn)兼容h.264規(guī)定的四種二值化方法:一元碼(u);一元截?cái)啻a(tu);k階哥倫布編碼(egk);固定長(zhǎng)度二進(jìn)制化(fl);上下文模型選擇步驟,根據(jù)句法元素和相鄰模塊的信息,為每一個(gè)二進(jìn)制符號(hào)分配一個(gè)上下文模型每一個(gè)上下文模型對(duì)應(yīng)一組{mps,pstateidx},mps代表將要編碼的大概率符號(hào),pstateidx表示當(dāng)前概率狀態(tài)索引;算術(shù)編碼步驟,用一個(gè)碼子表示一段數(shù)據(jù)流,每個(gè)碼子都是對(duì)一段數(shù)據(jù)流不斷分割后獲得的。cabac算術(shù)編碼的輸入只有兩種符號(hào):最大可能符號(hào)(mps)和最小可能符號(hào)(lps),每個(gè)編碼的符號(hào)都有其對(duì)應(yīng)的上下文模型,每個(gè)符號(hào)編碼完成后都需要對(duì)上下文進(jìn)行更新,每個(gè)上下文都獨(dú)立地使用對(duì)應(yīng)的概率表維護(hù)概率狀態(tài)。

如上所述的基于fpga的cabac熵編碼方法,其特征還在于,將計(jì)算不相關(guān)的變量分開,置于不同的流水線中,將同一操作分步進(jìn)行,用以消除數(shù)據(jù)依賴。

附圖說明

圖1、本申請(qǐng)所述的cabac算術(shù)編碼器結(jié)構(gòu)圖

圖2、數(shù)據(jù)依賴產(chǎn)生圖

圖3、上下文更新微體系結(jié)構(gòu)圖

圖4、計(jì)算range和low示意圖

具體實(shí)施方式

算術(shù)編碼可以看作是基于符號(hào)概率而對(duì)一段區(qū)間進(jìn)行的迭代式分割。cabac是一種簡(jiǎn)化的算術(shù)編碼機(jī)制。在cabac中,編碼進(jìn)程采用最大可能符號(hào)(mps)和最小可能符號(hào)(lps)替代0和1,而且大多數(shù)符號(hào)都在一個(gè)上下文環(huán)境中進(jìn)行編碼,那些具有相同統(tǒng)計(jì)特性的符號(hào)具有相同的上下文。每個(gè)上下文維護(hù)一種概率模型,包含兩個(gè)值:6位概率狀態(tài)state和1位mps值,他們共同描述了當(dāng)前上下文中二進(jìn)制符號(hào)的概率分布。

每次編碼一個(gè)符號(hào)后,根據(jù)該符號(hào)是mps或者lps更新概率狀態(tài)和mps值。假設(shè)給出了lps的概率估計(jì)為plps,而且給定的區(qū)間由其較小端的邊界值low和寬度range表示,那么給定區(qū)間進(jìn)一步劃分為兩個(gè)子區(qū)間,分別對(duì)應(yīng)于lps和mps。如果待編碼符號(hào)為lps,新的當(dāng)前區(qū)間更新為:

rangenew=rlps(1)lownew=low+range-rlps(2)

如果待編碼符號(hào)為mps,新的當(dāng)前區(qū)間更新為:

rangenew=range-rlps(3)lownew=low(4)

為了更清楚地說明本發(fā)明或現(xiàn)有技術(shù)中的技術(shù)方案,下面對(duì)結(jié)合附圖對(duì)本申請(qǐng)所述的方法作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖,都屬于本發(fā)明保護(hù)的范圍。

cabac算術(shù)編碼器整體結(jié)構(gòu)如圖1所示。

本申請(qǐng)所述的基于fpga的cabac熵編碼器設(shè)計(jì)方法與裝置將實(shí)現(xiàn)電路劃分為兩個(gè)功能模塊:上下文更新模塊、算術(shù)編碼數(shù)據(jù)產(chǎn)生模塊。

1、上下文更新模塊(二進(jìn)制算術(shù)編碼器微體系結(jié)構(gòu))

首先通過上下文索引讀取更新上下文存儲(chǔ)器,存儲(chǔ)器選擇sram,因?yàn)橄鄬?duì)于寄存器集來講,sram擁有更精簡(jiǎn)的結(jié)構(gòu),能夠節(jié)省大約35%的面積。上下文的讀取和更新需要四個(gè)過程,即地址生成、讀存儲(chǔ)器、更新上下文和寫存儲(chǔ)器。若相鄰符號(hào)的上下文索引相同,就必須等到前一個(gè)符號(hào)的上下文更新完畢后,再對(duì)下一個(gè)符號(hào)的上下文進(jìn)行讀取,數(shù)據(jù)依賴產(chǎn)生如圖2所示。

為了消除空閑周期,本發(fā)明增加一路寄存器用來存儲(chǔ)更新過的上下文模型,有兩個(gè)路徑可以產(chǎn)生上下文,如果當(dāng)前符號(hào)的索引與它之前的兩個(gè)符號(hào)的索引不相同,那么直接選擇路徑1,否則就會(huì)產(chǎn)生數(shù)據(jù)依賴,此時(shí)選擇路徑2,無需再去訪問存儲(chǔ)器。使用兩個(gè)上下文寄存器、兩個(gè)索引比較器和三個(gè)數(shù)據(jù)選擇器避免了空閑狀態(tài)的產(chǎn)生,提高了系統(tǒng)的吞吐率,微體系結(jié)構(gòu)如圖3所示。

下一級(jí)流水包括兩部分內(nèi)容,左邊部分為判斷所編碼的符號(hào)是mps還是lps,右邊部分為讀取rlps存儲(chǔ)器。rlps存儲(chǔ)器中共有256個(gè)值,但其地址是由pstateidx和range共同決定的,為解決range的數(shù)據(jù)依賴問題,把讀取rlps的過程分為兩部分。先用來自pstateidx的6bit讀取rlps存儲(chǔ)器,得到4個(gè)不同的rlps值。在下一級(jí)流水中根據(jù)range值選出正確的rlps值,接下來是對(duì)range和low的計(jì)算。

2、算術(shù)編碼數(shù)據(jù)產(chǎn)生模塊

模塊的任務(wù)是更新編碼引擎的內(nèi)部狀態(tài)(range,low和bitoutstanding寄存器)和輸出比特流。它包含幾個(gè)兩輸入的補(bǔ)碼加法器,來完成加法和減法運(yùn)算,計(jì)算的目的是為了等比例縮減range和改變low的狀態(tài)。本申請(qǐng)所述的發(fā)明中使用兩個(gè)高速的超前進(jìn)位加法器來進(jìn)行rmps和lownew的計(jì)算。更新range是通過檢測(cè)range前導(dǎo)o的個(gè)數(shù),對(duì)相應(yīng)的range寄存器進(jìn)行移位操作可以保證range寄存器的最高位為1。計(jì)算新的low時(shí),寄存器需要左移相同的位數(shù),但low寄存器的最高位要根據(jù)移出的數(shù)據(jù)流做相應(yīng)的改變,如果移出的數(shù)據(jù)流全是1,那么low寄存器的最高位要置1,否則為零,算術(shù)編碼數(shù)據(jù)產(chǎn)生模塊結(jié)構(gòu)如圖4所示。

bitoutstanding寄存器根據(jù)low的位模式進(jìn)行更新,如果前兩位為“10”,那么bitoutstanding加1。它的值還與數(shù)據(jù)產(chǎn)生模塊有關(guān),如果數(shù)據(jù)產(chǎn)生模塊輸出的數(shù)據(jù)是正確的,bitoutstanding寄存器清零,同時(shí)輸出相應(yīng)的0,1字符串。本申請(qǐng)采用查找表的方式以保證每個(gè)時(shí)鐘都有比特輸出,查找表的結(jié)果包括更新bitoutstanding寄存器和輸出溢出比特流。

本申請(qǐng)所述的基于fpga的cabac熵編碼方法包括的具體實(shí)施方式如下:

1、二值化步驟,將句法元素轉(zhuǎn)化為二進(jìn)制字符串的形式,實(shí)現(xiàn)兼容h.264規(guī)定的四種二值化方法:一元碼(u);一元截?cái)啻a(tu);k階哥倫布編碼(egk);固定長(zhǎng)度二進(jìn)制化(fl)。

2、上下文模型選擇步驟,根據(jù)句法元素和相鄰模塊的信息,為每一個(gè)二進(jìn)制符號(hào)分配一個(gè)上下文模型每一個(gè)上下文模型對(duì)應(yīng)一組{mps,pstateidx},mps代表將要編碼的大概率符號(hào),pstateidx表示當(dāng)前概率狀態(tài)索引。

3、算術(shù)編碼步驟,算術(shù)編碼就是用一個(gè)碼子表示一段數(shù)據(jù)流,這個(gè)碼子是對(duì)一段數(shù)據(jù)流不斷分割后獲得的。cabac算術(shù)編碼的輸入只有兩種符號(hào):最大可能符號(hào)(mps)和最小可能符號(hào)(lps),每個(gè)編碼的符號(hào)都有其對(duì)應(yīng)的上下文模型。每個(gè)符號(hào)編碼完成后都需要對(duì)上下文進(jìn)行更新,每個(gè)上下文都獨(dú)立地使用對(duì)應(yīng)的概率表維護(hù)概率狀態(tài)。

4、在實(shí)現(xiàn)方面,將計(jì)算不相關(guān)的變量分開,置于不同的流水線中,例如range和low;將同一操作分步進(jìn)行,消除數(shù)據(jù)依賴,優(yōu)化流水線設(shè)計(jì),如讀取rlps;通過引入額外寄存器來緩存數(shù)據(jù)防止氣泡的產(chǎn)生,如在更新上下文的時(shí)候采用雙路徑存儲(chǔ),消除了空閑狀態(tài)。

本申請(qǐng)所述的發(fā)明與其他現(xiàn)有的數(shù)據(jù)壓縮方式相比優(yōu)勢(shì)在于擁有更高的性能和吞吐率,能夠合理利用fpga的雙端口ram、流水線結(jié)構(gòu)等,可以靈活地集成到h.264和vp8圖像壓縮系統(tǒng)中。采用fpga芯片作為計(jì)算加速器正在成為數(shù)據(jù)中心及服務(wù)器發(fā)展的一種新趨勢(shì),本申請(qǐng)所述的發(fā)明有助于公司在異構(gòu)計(jì)算前沿技術(shù)方面的積累,很多國際大公司例如ibm、百度和騰訊等公司對(duì)熵編碼加速也有廣泛應(yīng)用需求,因此市場(chǎng)前景廣闊。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1