<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è) > 網(wǎng)絡(luò )與存儲 > 設計應用 > Xilinx哈夫曼編碼系統設計 

Xilinx哈夫曼編碼系統設計 

作者:孟歡 包海燕 潘飛 時(shí)間:2017-10-27 來(lái)源:電子產(chǎn)品世界 收藏
編者按:在圖像處理、文件傳真、視頻壓縮編碼中,哈夫曼編碼是最常用的一種編碼方式。本文設計并實(shí)現了對一段數字序列進(jìn)行哈夫曼編碼并將編碼結果串行輸出的電路模塊,電路由輸入數據的排序、數據的哈夫曼編碼、數據序列編碼的結果輸出三個(gè)核心模塊組成,在Xilinx平臺上通過(guò)硬件描述語(yǔ)言實(shí)現該電路。仿真結果表明,該電路編碼正確,并具有較高的工作頻率和編碼效率。

作者 孟歡 包海燕 潘飛 電子科技大學(xué) 微電子與固體電子學(xué)院(四川 成都 610054)

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

*集成電路創(chuàng )新創(chuàng )業(yè)大賽三等獎

孟歡(1991-),女,碩士生,研究方向:數字系統設計。

摘要:在圖像處理、文件傳真、視頻壓縮編碼中,是最常用的一種編碼方式。本文設計并實(shí)現了對一段數字序列進(jìn)行并將編碼結果串行輸出的電路模塊,電路由輸入數據的排序、數據的、數據序列編碼的結果輸出三個(gè)核心模塊組成,在Xilinx平臺上通過(guò)硬件描述語(yǔ)言實(shí)現該電路。仿真結果表明,該電路編碼正確,并具有較高的工作頻率和編碼效率。

引言

  哈夫曼編碼是一種可變字長(cháng)的無(wú)損編碼方式。對于出現概率大的元素編以短字長(cháng)的碼,對于出現概率小的元素編以長(cháng)字長(cháng)的碼,來(lái)實(shí)現平均碼長(cháng)最短。多媒體技術(shù)的廣泛應用導致數據量的迅速增大,對哈夫曼編碼在速度上有了更高的需求。利用硬件設計的大流量和性處理的優(yōu)勢,可以大大地提高編碼效率和傳輸速度。哈夫曼編碼的核心即建立最優(yōu)二叉樹(shù),各元素的路徑就是它所對應的編碼結果。主要內容包括數據的排序和元素的編碼兩個(gè)方面。

  本文是完全在硬件條件下實(shí)現哈夫曼編碼設計的,在排序部分采用結構,通過(guò)實(shí)現對數據頻數比較,控制數據按照頻數大小由小到大排序。在編碼模塊創(chuàng )新性地采用自頂而下的查找方式,由狀態(tài)機尋址得到父節點(diǎn)的哈夫曼編碼,進(jìn)而得到左右子節點(diǎn)的哈夫曼編碼結果。在輸出模塊中通過(guò)4個(gè)寄存器對編碼結果進(jìn)行緩存,控制寄存器讀寫(xiě)指針進(jìn)行編碼結果的緩存與輸出,保證數據輸出的連續性。

1 電路總體結構功能框圖

  利用vivado的設計平臺[1],以xc7a100tcg324-1作為目標芯片,對輸入的數據序列進(jìn)行哈夫曼編碼及輸出,設計電路。電路的接口時(shí)序如圖1所示。

  1)復位結束,在開(kāi)始信號start產(chǎn)生后,將一段數字序列(256個(gè)0~9的數據元素)輸入電路進(jìn)行哈夫曼編碼,data_in的數據寬度為4,輸入需要256個(gè)時(shí)鐘周期。

  2)在編碼完成后,產(chǎn)生output_start信號,開(kāi)始串行輸出結果output_data。

  3)output_data數據包含2個(gè)部分。先輸出0~9元素對應的編碼結果,接著(zhù)輸出數據序列的哈夫曼編碼,輸出完畢后產(chǎn)生output_done信號。

  整體結構框圖如圖2所示。電路主要包括:

  do_cnt:對輸入數據進(jìn)行統計和存儲,輸出各元素的頻數。

  hfm_build:完成元素排序。根據輸入的頻數大小,輸出各節點(diǎn)元素的排序結果。

  hfm_code:數據編碼模塊。根據hfm_build輸出的元素排序結果,自頂向下完成0到9這10個(gè)元素的哈夫曼編碼。

  hfm_out:編碼輸出模塊。對編碼結果進(jìn)行單比特的連續輸出。

  output_data:數據輸出格式。使用brk信號作為0~9元素的編碼輸出和序列編碼輸出的分隔,此時(shí)輸出為0,之后輸出數據序列對應的編碼即圖中ram_data_out信號,也就是序列對應的編碼。所有的編碼結果都是先輸出低位再輸出高位。

1.1 數據排序模塊

  統計部分結束之后需要對數據進(jìn)行排序,根據輸入數據各元素的頻次大小,對數據進(jìn)行排序。該部分主要采用的設計思路,當數據和頻次進(jìn)入排序模塊之后,與模塊內已經(jīng)進(jìn)來(lái)的所有數據的頻次進(jìn)行比較,輸出頻數較大的數據,寄存頻數較小的數據。流水線(xiàn)單級結構RTL級電路[2]設計如圖3所示。in_count和in_data為頻數和對應元素的輸入端,out_count和out_data分別對應頻數和對應元素的輸出端。

  10個(gè)元素對應18個(gè)子節點(diǎn),要完成對二叉樹(shù)18個(gè)子節點(diǎn)的排序,則總的排序電路由18個(gè)單級排序結構組成,根據哈夫曼編碼的性質(zhì),本設計將每次排序得到的最小兩個(gè)元素的頻數相加作為新元素的頻數。例如頻數最小的兩個(gè)元素為9和5,作為左右子節點(diǎn),父節點(diǎn)對應的頻數為9和5的頻數之和,其對應的元素為10,生成的父節點(diǎn)依次為11、12....17,新生成的父結點(diǎn)與剩下的元素進(jìn)行新一輪的排序,而已經(jīng)比較出兩個(gè)最小頻數的元素,不再參與排序。排序結構的各級輸入通過(guò)計數器來(lái)控制。排序完以后,取每級寄存器中的元素bit0~bit17,即18個(gè)節點(diǎn)按照頻數由小到大排序的元素序列,輸出給編碼模塊。

1.2 數據編碼模塊

  該部分設計主要包括編碼FSM、狀態(tài)控制模塊、計數模塊、數據編碼模塊和流水線(xiàn)譯碼輸出模塊,其中zero_flag為數據頻數為0的標志信號。數據編碼模塊結構框圖如圖4所示。

  根據排序模塊的規律,bit0和bit1的父節點(diǎn)是元素10,bit2和bit3的父節點(diǎn)是元素11,bit4和bit5的父節點(diǎn)是元素12,bit6和bit7的父節點(diǎn)是元素13,bit8和bit9的父節點(diǎn)是元素14,bit10和bit11的父節點(diǎn)是元素15,bit12和bit13的父節點(diǎn)是元素16,bit14和bit15的父節點(diǎn)是元素17,bit16和bit17的父節點(diǎn)是根節點(diǎn)。根據哈夫曼樹(shù)的特點(diǎn),父節點(diǎn)的編碼為xxxxxxxxx,則左節點(diǎn)的哈夫曼編碼為xxxxxxxx0,右節點(diǎn)的哈夫曼編碼為xxxxxxxx1。

  編碼FSM依次控制輸出父節點(diǎn)17至父節點(diǎn)10,首先當輸出父節點(diǎn)17時(shí),它為根節點(diǎn)的左節點(diǎn)或右節點(diǎn),通過(guò)查找到排序結果中的對應位置bit16或者bit17,假定bit16的編碼為0,bit17的編碼為1,則父節點(diǎn)17的編碼可以確定,那么它左節點(diǎn)bit14,右節點(diǎn)bit15的編碼也就確定了。當編碼FSM輸出父節點(diǎn)10時(shí),通過(guò)查找確定元素10的編碼,那么bit0和bit1作為元素10的左右節點(diǎn),編碼結果同樣也可以確定。至此,數據0~17對應的code0~code17都已確定。

  本文設計了流水線(xiàn)比較輸出電路來(lái)確定數據0-9對應的哈夫曼編碼。流水線(xiàn)比較的單級結構如圖5所示,要確定0~9這10個(gè)元素對應的編碼,那么需要級聯(lián)10級流水線(xiàn)比較的單級結構。其中code0~code17依次送入in_bit端,第i級的Cmp_bit為i,當In_bit[i]和Cmp_bit[i]相同時(shí),那么In_code[i]即為元素i對應的哈夫曼編碼,輸出為code[i]。如果In_bit[i]和Cmp_bit[i]不相同時(shí),將Out_bit[i]和Out_code[i]輸出給下一級繼續比較。當10級電路都參與比較以后,每級比較結構對應的輸出端code[i]為0-9對應的哈夫曼編碼(i=0....9)。

1.3 哈夫曼編碼輸出

  在輸出階段,先輸出0~9對應的哈夫曼編碼,接著(zhù)輸出數字序列對應的哈夫曼編碼??紤]到哈夫曼編碼變字長(cháng)輸出的特性,那么,編碼輸出的連續是本模塊設計的難點(diǎn),為了使編碼在輸出端連續輸出,在編碼的階段,進(jìn)行了每個(gè)數據元素編碼長(cháng)度的統計,同時(shí)配合4個(gè)緩沖寄存器,來(lái)實(shí)現輸出的連續性。哈夫曼輸出模塊的結構圖如圖6所示。

  輸入的數據序列,在統計頻數后存入ram中,在還沒(méi)開(kāi)始輸出的時(shí)候,從ram中一次讀出4個(gè)數據,并將對應的編碼存入4個(gè)緩存寄存器中。當0~9數據元素的編碼輸出完以后,這時(shí),開(kāi)始輸出reg1中的值,每輸出1位,編碼長(cháng)度length減1,同時(shí)編碼結果code右移1位進(jìn)行輸出。當length為1時(shí),讀出ram下一地址的數據,并將對應的編碼結果寫(xiě)入reg1中,同時(shí)開(kāi)始輸出reg2中的編碼值,這樣讀寫(xiě)在四個(gè)reg中的輪流切換,實(shí)現了數據的連續輸出。

2 設計驗證

  為了直接明了判斷設計的正確性,本文設計的測試方案是:將一組隨機數據序列存入rand_bin.txt中,先采用C語(yǔ)言完成哈夫曼編碼的軟件設計[3],按照統一的格式存入hafuman.txt文件中,與本設計結果進(jìn)行比較。

  創(chuàng )建激勵文件test_bench,首先在start信號之后,將rand_bin.txt文件里的數據讀出并送給data_in信號,在output_start信號之后,將hafuman.txt文件里的數讀出來(lái)送給soft_result信號,作為軟件編碼的結果,將硬件編碼結果output_data與軟件編碼結果soft_result比較,如果相同,那么error信號為低,如果其中有數據不相同,則error變高,提示此次編碼有誤。

  測試結果如圖7所示。其中error信號保持為低電平,表明哈夫曼編碼正確。

3 電路的工作參數總結

3.1 最高頻率

  電路功能正確實(shí)現后,對工作時(shí)鐘進(jìn)行了約束[4],將pll倍頻到245M時(shí),如圖8所示,觀(guān)察到電路中各觸發(fā)器的建立時(shí)間余量為正,表明時(shí)序通過(guò)。

3.2 編碼周期

  在設置好合適的綜合策略后[5],對電路進(jìn)行后防真如圖9,在某一組隨機數據下,本設計需要的工作周期數(start信號到output_start的時(shí)鐘周期)為316個(gè),其中數據輸入的時(shí)鐘周期數為256,編碼生成到編碼開(kāi)始輸出的時(shí)鐘周期數為60。由于哈夫曼編碼是變字長(cháng)的,所以數據序列的編碼長(cháng)度根據輸入數據的不同而有所差異,即output_start到output_done之間的時(shí)鐘周期數在不同的輸入數據下結果不同。

  參考文獻:

  [1]高亞軍.vivado入門(mén)與提高.http://xilinx.eetop.cn/viewnews-2698.

  [2]張穎超.基于FPGA的Huffman編碼實(shí)現及高速存儲系統設計[D].西安:長(cháng)安大學(xué),2015.

  [3]steve kilts著(zhù),孟憲元譯,高級FPGA設計-結構、實(shí)現和優(yōu)化[M].北京:機械工業(yè)出版社,2009.

  [4]何濱.Xilinx FPGA權威設計指南-Vivado 2014集成開(kāi)發(fā)環(huán)境[M].北京:電子工業(yè)出版社, 2015.

  本文來(lái)源于《電子產(chǎn)品世界》2017年第11期第51頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處。



評論


相關(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>