
作者 / 黃傳 黃尚川 劉旭陽 北京航空航天大學(xué) 電子信息工程學(xué)院(北京 100191)
*第一屆(2016-2017)全國大學(xué)生集成電路創(chuàng)新創(chuàng)業(yè)大賽全國總決賽FPGA設(shè)計方向獲獎作品
Huffman編碼是一種可變字長的無損壓縮編碼。根據(jù)字符出現(xiàn)的概率得到的可變字長編碼表是Huffman編碼的核心。概率低的字符使用較短的編碼,概率高的字符使用的長的編碼。
Huffman編碼的具體方法是將序列中的信源符號先按出現(xiàn)的頻次排序,把兩個最小的頻次相加,作為新的頻次和剩余的頻次重新排序,再把最小的兩個頻次相加,再重新排序,直到最后變成序列的總長度。每次挑出的最小兩個頻次所對應(yīng)的信源符號或信源符號集構(gòu)成二叉樹的左右兩支,對這左右兩支賦予“0”和“1”的權(quán)重。符號的編碼從樹的根部開始一直到達(dá)符號所在的葉節(jié)點, 將路線上所遇到的“0”和“1”按最低位到最高位的順序排好,就是該符號的哈夫曼編碼。
編碼示例如表 1和圖1所示。
表1 編碼示例1
圖1哈夫曼編碼示例
2設(shè)計
2.1算法
算法核心思想就是利用哈夫曼編碼過程中需要合并頻次最小的兩個符號集并且每次合并符號集不相交的特點,先用“獨熱碼”對符號進(jìn)行預(yù)編碼(信源符號“0”用0000000001編碼,信源符號“1”用0000000010編碼…),在合并符號集時對兩符號集的編碼進(jìn)行抑或,使新符號集的編碼能反映符號集中的元素。比如一個符號集的編碼是0000010011,按照之前的規(guī)定,這個符號集就含有“0”,“1”,“4”這三個信源符號。這樣做的好處就是能通過對檢測符號集編碼中“1”的位置得到符號集中元素,從而在對符號的哈夫曼編碼過程轉(zhuǎn)化為對一個個符號集整體編碼。
編碼示例如表2和圖2所示。
表2 編碼示例2
圖2 硬件編碼示例
注意到每個符號集被合并時都會將參與合并的兩個符號集的預(yù)編碼相異或,并將結(jié)果作為新符號集的預(yù)編碼。并行化處理就體現(xiàn)在這排序和編碼可以同時進(jìn)行。
在每次參與合并的兩個符號集上都帶有其相應(yīng)的預(yù)編碼,預(yù)編碼不為0的位體現(xiàn)了這個符號集包含的信源符號。在每次排序完成后,將0和1分別賦予這兩個符號集內(nèi)包含的元素,便可以在排序完成后立即得到所有元素的碼字。
對于碼字長度最小方差問題,對幾個符號集頻次相同的情況,優(yōu)先合并符號集中所包含符號數(shù)量少的兩個符號集。算法選擇的下圖中第二種算法,碼長方差最小。
圖3 兩種哈夫曼編碼
2.2硬件設(shè)計
圖4 頂層模塊
頂層模塊為Huffman Coding,其中包含五個子模塊,分別為:
1)Receiver:統(tǒng)計頻次信息,并控制shift register緩存這些信息,統(tǒng)計完成后輸出頻次信息;
2)Sorter:根據(jù)頻次信息進(jìn)行9次排序,每次排序輸出相應(yīng)的數(shù)據(jù)到code_gen;
3)Code gen:根據(jù)sorter數(shù)據(jù)生成編碼表,并輸出到encoder;
4)Shift register:256x4 bit的移位寄存器。(此模塊為Xilinx IP 核);
5)Encoder:控制移位寄存器輸出并根據(jù)編碼表輸出數(shù)據(jù)。
3實現(xiàn)
3.1 接收模塊
圖5 接收模塊
功能:統(tǒng)計各個符號出現(xiàn)的頻次,并控制移位寄存器保存輸入序列,統(tǒng)計完成后,在輸出端口串行輸出信息。
頻次的統(tǒng)計使用簡單的寄存器操作即可完成,具體不贅述。在統(tǒng)計過程中,使能移位寄存器信號為高,統(tǒng)計完成后,valid信號產(chǎn)生高電平脈沖,示意排序器開始工作,同時在輸出端將各個符號出現(xiàn)的頻次按時鐘節(jié)拍依次送入排序器。
3.2 排序模塊
圖6 排序模塊
為了便于描述,我們將排序器的操作對象定義為“節(jié)點”。一個“節(jié)點”中包含有一組待編碼的符號,“節(jié)點”的頻次為這些符號的頻次之和。
該排序器的功能是輸出具有兩個最小頻次的節(jié)點信息。data_0表示最小頻次對應(yīng)的節(jié)點信息,data_1表示次小頻次對應(yīng)的節(jié)點信息。
初始時,每個節(jié)點中僅有一個符號。排序器每次將具有最小頻次的兩個節(jié)點的信息輸出(為data_0和data_1),然后將這兩個節(jié)點合并成一個新的節(jié)點。如表3所示,對于5個節(jié)點進(jìn)行排序的例子可以說明該排序器的工作原理。
表3 第一次排序之前
第一次輸出頻率最小的兩個符號的data,即A和E對應(yīng)的data,分別為00001和10000;然后這兩組符號被合并為同一個節(jié)點,即有表4結(jié)果。
表4 第二次排序之前
類似上一次,第二次輸出分別為10001和00010,然后這兩組符號被合并,即有表5結(jié)果。
表5 第三次排序之前
類似上一步,第三次輸出分別為10011和01000,仍然將它們合并,即有表6結(jié)果。
表6 第四次排序之前
則第四次輸出為00100和11011。這也是最后一次輸出。所以輸出結(jié)果如表7所示。
表7 data輸出結(jié)果
類似地,對于此項目中10個符號的情況,只要用10位二進(jìn)制數(shù)來表示相應(yīng)的節(jié)點信息即可。
3.3 編碼生成模塊
圖7 產(chǎn)生編碼模塊
功能是根據(jù)排序器排序模塊輸出的數(shù)組生成編碼表。
在本工程中,根據(jù)設(shè)計需求,可以算出,每個字符的編碼位數(shù)最長可能為9位,最短為1位。所以存儲編碼表的寄存器應(yīng)該至少有9位,每一位的可能狀態(tài)有三種:“0”,“1”,“-”,分別表示“該位編碼為0”、“該位編碼為1”和“該位沒有存儲編碼信息”。因此,我們使用兩個比特來表示一位編碼。
編碼是根據(jù)data_0和data_1生成的,初始時,所有位都被置為“-”,然后根據(jù)data_0和data_1進(jìn)行操作。對于data_0中的每一個符號,為其增加一位編碼“0”;對于data_0中的每一個符號,為其增加一位編碼“1”。表8為圖1中的數(shù)據(jù)生成編碼的過程。
表8 生成編碼示例
3.4 移位寄存器
圖8 產(chǎn)生編碼表模塊
功能是一個移位寄存器,在CE為高時工作。
注:此模塊采用Xilinx IP核——RAM-based Shift Register。
3.5 編碼模塊
圖9 編碼模塊
功能是把編碼表和輸入序列的編碼串行輸出。
輸出格式:在output_start置高電平后、output_done置高電平前,output_data端為有效的輸出數(shù)據(jù)。這些數(shù)據(jù)包含了霍夫曼編碼表,以及對輸入數(shù)據(jù)進(jìn)行編碼后的結(jié)果。
哈夫曼編碼表按順序存放了0~9的霍夫曼編碼。對于某特定的符號,其哈夫曼編碼表示為:該符號的的碼字長度(長度為4比特),緊接著是該符號的碼字。
哈夫曼編碼表之后是輸入數(shù)據(jù)的編碼結(jié)果。具體的格式如下圖所示:
圖10 輸出序列示例
4結(jié)果
4.1電路功能
先通過MATLAB程序產(chǎn)生用來測試電路的256個數(shù)據(jù),這些數(shù)據(jù)根據(jù)一個概率向量p來生成,再利用Vivado仿真工具加載數(shù)據(jù)到電路輸入端,并把電路輸出的有效數(shù)據(jù)輸出到文件中。
利用MATLAB對輸出數(shù)據(jù)進(jìn)行解碼并和原始數(shù)據(jù)進(jìn)行比對(編碼正確性測試),還利用MATLAB內(nèi)置的哈夫曼編碼函數(shù)計算平均碼長與電路得出的平均碼長進(jìn)行對比(平均碼長測試)。下表是在不同概率向量p下得到的測試結(jié)果如表9所示。
表9 功能測試
根據(jù)測試結(jié)果,可以證明電路功能的正確性。
4.2電路性能
4.2.1消耗時鐘周期數(shù)
對于不同的輸入序列有不同的編碼長度,所以電路的Total Cycle是不確定的。但是從start到output_start的周期間隔是確定的,為272個時鐘周期,如下圖所示。
圖11 輸出波形示例
4.2.2資源占用
在選擇目標(biāo)器件為xc7a100tcsg324-1進(jìn)行綜合、布線之后,資源消耗情況如表10所示。
表10 資源占用
4.2.3最高時鐘頻率
經(jīng)過時序約束后,在時鐘頻率為125M的情況,滿足約束條件。
參考文獻(xiàn):
[1]David A. Huffman. A Method for the Construction of Minimum-Redundancy Codes. Proceedings of the IRE. 40(9): 1098–1101. doi:10.1109/JRPROC.1952.273898
[2]Sutherland, Stuart, Davidmann, Simon, Flake, Peter. SystemVerilog for Design Second Edition. Springer US: 2006
[3]Joshua Vasquez.(January 20,2016)“SORT FASTER WITH FPGAS”, http://hackaday.com/2016/01/20/a-linear-time-sorting-algorithm-for-fpgas/
[4]高亞軍.Vivado從此開始[M].北京;電子工業(yè)出版社,2017. [5]Donald E. Thomas, Philip R. Moorby. The Verilog? Hardware Description Language,Fifth Edition. Kluwer Academic Publishers; 2002.
網(wǎng)站首頁 |網(wǎng)站簡介 | 關(guān)于我們 | 廣告業(yè)務(wù) | 投稿信箱
Copyright © 2000-2020 www.yjkq2010.com All Rights Reserved.
中國網(wǎng)絡(luò)消費網(wǎng) 版權(quán)所有 未經(jīng)書面授權(quán) 不得復(fù)制或建立鏡像
聯(lián)系郵箱:920 891 263@qq.com
欧美色综合网_狠狠色狠色综合曰曰_麻豆精品一区二区av白丝在线_久久精品综合一区 亚洲欧美自拍偷拍| 久久久久久久久岛国免费| 91国偷自产一区二区开放时间| 精品国产一区二区三区四区四| 日本中文在线一区| 日韩欧美黄色影院| 久久精品国产**网站演员| 日韩精品中文字幕一区二区三区 | 国产欧美视频在线观看| 国产麻豆91精品| 中文字幕av资源一区| 99精品国产99久久久久久白柏| 亚洲日本在线看| 91精品啪在线观看国产60岁| 精品综合久久久久久8888| 国产欧美日韩久久| 在线观看视频一区二区欧美日韩| 亚洲国产综合91精品麻豆| 日韩欧美高清dvd碟片| 国产不卡免费视频| 亚洲午夜激情网页| 精品国内二区三区| 91亚洲国产成人精品一区二三| 亚洲综合在线电影| 日韩精品自拍偷拍| 95精品视频在线| 日韩专区欧美专区| 17c精品麻豆一区二区免费| 欧美日韩另类国产亚洲欧美一级| 韩国理伦片一区二区三区在线播放| 国产精品色一区二区三区| 欧美日韩久久一区| 99精品视频在线观看| 国产主播一区二区| 午夜精品久久久久影视| 欧美激情一区二区在线| 在线不卡中文字幕播放| av午夜精品一区二区三区| 美女视频免费一区| 一区二区三区精品久久久| 国产清纯在线一区二区www| 欧美一区二区在线观看| 色天使久久综合网天天| 国产白丝精品91爽爽久久| 免费观看在线综合| 亚洲免费av高清| 亚洲国产精华液网站w| 精品久久久久久久久久久久久久久 | 国产精品―色哟哟| 欧美成人精品高清在线播放| 欧美亚洲图片小说| 成人国产一区二区三区精品| 美女视频一区在线观看| 偷拍一区二区三区| 亚洲午夜精品在线| 一区二区三区中文字幕精品精品| 欧美极品aⅴ影院| 国产亚洲欧洲一区高清在线观看| 日韩欧美综合一区| 日韩欧美一级片| 日韩女优电影在线观看| 91精品国产色综合久久不卡蜜臀| 欧美三级蜜桃2在线观看| 色丁香久综合在线久综合在线观看| 99久久亚洲一区二区三区青草| 国产91在线|亚洲| av在线不卡免费看| 91丝袜美腿高跟国产极品老师 | 欧美一区二区啪啪| 日韩一级高清毛片| 精品日韩一区二区三区免费视频| 日韩一区二区三区免费看 | 欧美中文字幕不卡| 欧美日韩黄色影视| 欧美精品亚洲一区二区在线播放| 欧美一区二区三区啪啪| 日韩一区二区三区电影在线观看 | 中文字幕一区二区三区不卡在线| 国产精品国产三级国产| 亚洲码国产岛国毛片在线| 亚洲精品久久久蜜桃| 亚洲线精品一区二区三区八戒| 亚洲成人动漫av| 精东粉嫩av免费一区二区三区| 国产精品一区在线观看你懂的| 成人美女视频在线观看18| 色婷婷综合久久久| 欧美一区二区三区色| 国产欧美精品一区二区色综合| 亚洲色图欧洲色图婷婷| 天天综合色天天综合色h| 国产中文字幕精品| 色综合夜色一区| 欧美一卡2卡三卡4卡5免费| 国产亚洲欧洲997久久综合 | 精品国产乱码久久久久久夜甘婷婷 | 国产日产欧美一区| 一区二区三区精品| 精品一区二区av| 色综合一区二区| 久久久久久久综合色一本| 一区二区三区国产精华| 精品一区二区精品| 欧美三级乱人伦电影| 久久久久国产一区二区三区四区| 亚洲尤物视频在线| 日韩精品专区在线| 日韩美女精品在线| 免费人成黄页网站在线一区二区| 日本sm残虐另类| 欧美在线观看一区| 国产成人精品免费视频网站| 色婷婷久久综合| 欧美日韩另类国产亚洲欧美一级| 136国产福利精品导航| 成人久久久精品乱码一区二区三区 | 7777精品伊人久久久大香线蕉最新版| 欧美日韩精品欧美日韩精品一| 国产亚洲成av人在线观看导航| 亚洲欧洲综合另类| 免费在线一区观看| 在线视频中文字幕一区二区| 国产欧美精品一区二区三区四区| 亚洲成av人影院| 91老师国产黑色丝袜在线| 国产色综合久久| 日本一区中文字幕 | 男女男精品网站| 日本精品视频一区二区三区| 久久午夜国产精品| 日韩av一二三| 色婷婷综合久久久久中文一区二区| 欧美变态凌虐bdsm| 性久久久久久久久久久久| 99久久国产免费看| 国产女同互慰高潮91漫画| 国产在线视频精品一区| 精品少妇一区二区三区视频免付费 | 在线看不卡av| 亚洲日本中文字幕区| 成人午夜精品在线| 国产婷婷色一区二区三区在线| 韩国女主播成人在线观看| 精品成a人在线观看| 黑人巨大精品欧美一区| 欧美xxxx老人做受| 国产美女娇喘av呻吟久久| 久久久久久久免费视频了| 久久成人免费网| 久久久精品免费观看| 国产成人精品午夜视频免费| 久久久久国产一区二区三区四区 | 成人免费高清在线观看| 国产精品久久久久久久久动漫| 国产不卡在线视频| 中文字幕免费在线观看视频一区| 成人性生交大片免费看中文| 中文字幕一区二区三区在线播放 | 91亚洲精品乱码久久久久久蜜桃| 中文字幕亚洲区| 91国偷自产一区二区开放时间| 一二三四区精品视频| 欧美精品在线观看一区二区| 欧美a级理论片| 日本一区二区三区高清不卡 | 激情av综合网| 国产精品久久午夜| 欧美性极品少妇| 日本色综合中文字幕| 久久久久久99精品| 99re这里只有精品视频首页| 亚洲国产日韩a在线播放| 欧美一级生活片| 成人午夜精品一区二区三区| 一区二区成人在线| 日韩片之四级片| 91在线看国产| 开心九九激情九九欧美日韩精美视频电影 | 久久久国产午夜精品| 色综合色综合色综合| 人人狠狠综合久久亚洲| 日本一区二区三区视频视频| 91精品国产综合久久香蕉的特点| 成人一区在线观看| 日韩av一区二| 亚洲永久免费av| 国产色综合久久| 91精品在线免费| 色综合久久久久| 久久国产剧场电影| 亚洲一区在线电影| 中日韩av电影| 日韩精品中文字幕一区| 在线视频你懂得一区二区三区| 国产综合一区二区| 日韩国产在线观看| 亚洲午夜视频在线| 日韩一区中文字幕| 国产亚洲欧洲997久久综合 | 精品国产百合女同互慰|