<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于FPGA的LZO實(shí)時(shí)無(wú)損壓縮的硬件設計

基于FPGA的LZO實(shí)時(shí)無(wú)損壓縮的硬件設計

作者:尚壯壯 時(shí)間:2015-04-27 來(lái)源:電子產(chǎn)品世界 收藏

  2.2 硬件加速方案

本文引用地址:http://dyxdggzs.com/article/273211.htm

  (1)分離雙端口

  為了加速字符串的比對過(guò)程,本文提出如圖3(B)所示的分離雙端口的結構,圖中的多路選擇器1用于將待壓縮數據交替式寫(xiě)入雙端口1和雙端口RAM2之一中,多路選擇器2用于將讀取的數據交替式輸出。例如,現有字符ABCDEFGHIJ要存入雙端口RAM中,具體如下:ABCD通過(guò)多路選擇器1被寫(xiě)入RAM1中的data1處,EFGH通過(guò)多路選擇器1被寫(xiě)入RAM2中的data2處,IJ通過(guò)多路選擇1被寫(xiě)入data3,此時(shí)模塊需要讀取字符串BCDE,則在讀取RAM1中data1處的BCD的同時(shí)讀取RAM2中data2處的E,即給RAM1讀地址的同時(shí)可以給RAM2讀地址,這樣同一時(shí)刻可以讀2處地址對應的內容。相比于一般性雙端口RAM結構,本結構可以實(shí)現一次完成讀取操作。做進(jìn)一步擴展可得出如下結論:若RAM的寬度為W,則讀取字符數在2W以?xún)葧r(shí),采用分離雙端口RAM結構可以一次完成讀取操作;則讀取字符數在2~2W以?xún)葧r(shí),采用一般性雙端口RAM結構可能要讀兩次。當然,不僅RAM的寬度可以增加,RAM的個(gè)數也可以增加,當RAM的寬度和RAM個(gè)數越大時(shí),完成讀操作只需一次的可能性就越大。

  (2)塊標記

  LZO壓縮算法在壓縮每個(gè)數據塊之前都要對字典模塊進(jìn)行初始化為0的操作,即對RAM進(jìn)行寫(xiě)0操作,然而寫(xiě)0操作會(huì )耗費若干個(gè)周期。若字典模塊深度為16K,即RAM的深度為16K,當進(jìn)行寫(xiě)0操作時(shí)至少花費16K個(gè)周期。通常解決此類(lèi)問(wèn)題的一種方法是采用乒乓操作的方式,即用兩個(gè)字典來(lái)交替處理。為了解決初始化帶來(lái)的時(shí)間花費和資源消耗的問(wèn)題,本文提出一種如圖3(C)所示的塊標記字典結構,該結構主要包括:壓縮控制模塊,用于產(chǎn)生壓縮信息,即字符索引及字符所對應的Hash值;flag產(chǎn)生模塊,用于產(chǎn)生0或者1兩種flag標識,表示是當前數據塊還是歷史數據塊;信息合并模塊,用于將字符索引和flag標識進(jìn)行合并,然后存入字典模塊。整個(gè)結構的工作原理可歸納如下:flag標識0或1表示是當前數據塊或歷史數據塊,如壓縮第一個(gè)數據塊時(shí)標識為0,壓縮第二個(gè)數據塊時(shí)標識為1,壓縮第三個(gè)數據塊時(shí)標識為0,壓縮第四個(gè)數據塊時(shí)標識為1,如此進(jìn)行反復;壓縮控制模塊產(chǎn)生字符索引然后與flag進(jìn)行合并共同存入通過(guò)字符計算出的Hash值對應的地址處。例如,現假設已經(jīng)壓縮到第二個(gè)數據塊,則根據上面的工作原理可知,當前的標識應該為1,在壓縮時(shí)取出字典中的信息并判斷第一個(gè)bit位,如果第一個(gè)bit位為0則說(shuō)明該壓縮信息是歷史數據塊,壓縮信息無(wú)效;如果第一個(gè)bit位為1則說(shuō)明可能是當前數據塊(因為也有可能是很久以前的數據塊),根據壓縮信息取出相應字符進(jìn)行比對確認。

  綜上所述,塊標記字典結構具有如下特點(diǎn):無(wú)需初始化操作,避免了初始化過(guò)程帶來(lái)的時(shí)間花費;摒棄了乒乓操作的思想,節省了乒乓操作帶來(lái)的大量資源的消耗;該結構在片上資源緊缺的情況下是最優(yōu)的選擇。

  (3)字典分離

  軟件在實(shí)現LZO壓縮算法過(guò)程中,當碰撞發(fā)生時(shí),LZO壓縮算法會(huì )進(jìn)行第二次Hash操作,該次Hash操作在第一次Hash操作的基礎上進(jìn)行偏移。為了提升LZO壓縮算法的壓縮率,本文提出一種如圖3(D)所示的字典分離的結構,當Hash碰撞發(fā)生時(shí),LZO壓縮算法進(jìn)行第二次Hash操作,但第二次Hash操作對應的字符串索引不再存入第一個(gè)字典中,而是單獨開(kāi)辟一塊RAM空間進(jìn)行存儲。字典分離結構的總存儲空間增加了字典2的大小,這樣在壓縮文件的過(guò)程中,文件的壓縮信息量也會(huì )增加??梢?jiàn),該結構可以改進(jìn)LZO壓縮算法的壓縮率。

fpga相關(guān)文章:fpga是什么


網(wǎng)線(xiàn)測試儀相關(guān)文章:網(wǎng)線(xiàn)測試儀原理


關(guān)鍵詞: LZO FPGA LZSS RAM 壓縮算法

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>