摘 要:采用擴(kuò)展?jié)h明碼,實(shí)現(xiàn)了對(duì)漢明碼糾、檢錯(cuò)功能的擴(kuò)展,使其功能擴(kuò)展至一位糾錯(cuò)、兩位檢錯(cuò)。并且利用Verilog硬件語(yǔ)言對(duì)該編、解碼方法進(jìn)行了程序設(shè)計(jì)及仿真,最后下載至FPGA實(shí)現(xiàn)。結(jié)果證明,這種擴(kuò)展?jié)h明碼的編、解碼方法在不顯著增加硬件資源的基礎(chǔ)上,提高了傳輸數(shù)據(jù)的可靠性,具有非常現(xiàn)實(shí)的意義。
關(guān)鍵詞:硬件語(yǔ)言;差錯(cuò)控制編碼;擴(kuò)展?jié)h明碼;FPGA
中圖分類號(hào):TN911.7文獻(xiàn)標(biāo)識(shí)碼:B文章編號(hào):1004373X(2008)1918702
Design of Expansion Hamming Coder/Decoder and Its FPGA Realization
WANG Aizhen
(Xinzhou Teachers University,Xinzhou,034000,China)
Abstract:This paper realizes expansion of the function of check and rectification for the Hamming codes by using the extended Hamming codes.This design makes use of Verilog HDL.After emulating,the codes are downloaded to the FPGA to realize.The results prove that the expansion coding and decoding methods improve the reliability of data transmission on the basis of hardware increasing not markedly which has much actual significance.
Keywords:VHDL;error-control coding;expansion hamming code;FPGA
漢明碼是一種線性分組碼,所謂分組碼就是一組固定長(zhǎng)度的碼組(n,k),有k個(gè)信息位,r=n-k個(gè)監(jiān)督位。通常漢明碼用于前向糾錯(cuò),在分組碼中,監(jiān)督位被加到信息位之后,形成新的碼。在編碼時(shí),k個(gè)信息位被編為n位碼組長(zhǎng)度,而n-k個(gè)監(jiān)督位的作用就是實(shí)現(xiàn)檢錯(cuò)與糾錯(cuò)。當(dāng)分組碼的信息碼元與監(jiān)督碼元之間的關(guān)系為線性關(guān)系時(shí),這種分組碼就稱為線性分組碼。最小碼距din=3,碼長(zhǎng)n與監(jiān)督位個(gè)數(shù)r之間滿足關(guān)系式n=2r-1的線性碼稱為漢明碼。漢明碼是一種能糾正單比特差錯(cuò)且監(jiān)督位利用最充分的線性分組碼,由于其容易通過(guò)簡(jiǎn)單的電路實(shí)現(xiàn)而得到廣泛的應(yīng)用??墒菨h明碼只能糾正單比特錯(cuò)誤,這限制了漢明碼的進(jìn)一步應(yīng)用。為了改善漢明碼的糾檢錯(cuò)功能要對(duì)其進(jìn)行改進(jìn),常用的兩種方法就是擴(kuò)展?jié)h明碼和縮短漢明碼。本文采用擴(kuò)展?jié)h明碼實(shí)現(xiàn)了一位糾錯(cuò)、兩位檢錯(cuò)的功能,并且利用硬件語(yǔ)言進(jìn)行了編、解碼仿真,最后下載至FPGA實(shí)現(xiàn)。
1 擴(kuò)展?jié)h明碼的編碼原理
漢明碼由信息位和監(jiān)督位兩部分組成,可以表示為(n,k),其中碼長(zhǎng)n與監(jiān)督位個(gè)數(shù)r之間滿足關(guān)系式n=2r-1而k=n-r=2r-r-1,在漢明碼字中其監(jiān)督位的排列也遵循一定的規(guī)律,即比特位從最左邊位(位號(hào)為1)開(kāi)始依次編碼,位號(hào)為2的冪的位(1,2,4,8等)是r個(gè)監(jiān)督位(也稱漢明比特),其余位(3,5,6,7,9等)是k個(gè)信息位。例如:當(dāng)r=3位,則k=4位,漢明碼長(zhǎng)為n=4+3=7,由此構(gòu)造出(7,4)漢明碼。其中在位號(hào)為1,2,4的為監(jiān)督碼,其他位的為信息碼。漢明碼碼位排列如圖1所示。
依據(jù)漢明碼的定義我們知道其碼距為3,可以糾正單比特差錯(cuò),當(dāng)一個(gè)碼字出現(xiàn)2位錯(cuò)誤時(shí),就會(huì)發(fā)生錯(cuò)誤的糾正動(dòng)作。這樣的話差錯(cuò)控制的效果就不夠好。如果采用其他的編碼方式在能實(shí)現(xiàn)多位糾錯(cuò)功能的前提下其編解碼和電路的實(shí)現(xiàn)都比較復(fù)雜,且編碼效率明顯降低。本文采用的擴(kuò)展?jié)h明碼方法實(shí)現(xiàn)了糾正單比特差錯(cuò),提高到糾正1位錯(cuò)誤或同時(shí)檢測(cè)2位錯(cuò)誤。 即在不增加硬件資源和編碼復(fù)雜性的情況下提高了糾錯(cuò)能力,在應(yīng)用中有很重要的意義。
擴(kuò)展?jié)h明碼的實(shí)現(xiàn)通常有兩種方法。一種方法是擴(kuò)展?jié)h明循環(huán)碼,原理簡(jiǎn)單但是實(shí)現(xiàn)起來(lái)比較麻煩;另一種就是通過(guò)對(duì)漢明碼的整體奇偶校驗(yàn)來(lái)實(shí)現(xiàn)糾、檢錯(cuò)功能。后一種理解簡(jiǎn)單,編碼解碼電路通過(guò)硬件語(yǔ)言也好實(shí)現(xiàn)。本文就是基于后者實(shí)現(xiàn)的。下面以(7,4)漢明碼的擴(kuò)展為例來(lái)說(shuō)明。
依據(jù)漢明碼的編碼規(guī)律,一個(gè)(7,4)漢明碼通過(guò)加一個(gè)總體的校驗(yàn)位后擴(kuò)展為(8,4),而第8位則是對(duì)前7位的偶校驗(yàn),如圖2所示。,
擴(kuò)展?jié)h明碼糾錯(cuò)碼產(chǎn)生如下所示:
P3=D2⊕D3⊕D4 ;
P2=D1⊕D3⊕D4;
P1=D1⊕D2⊕D4;
Pa=P1⊕P2⊕D1⊕P3⊕D2⊕D3⊕D4
2 擴(kuò)展?jié)h明碼編碼程序設(shè)計(jì)及其仿真
按照上述思路采用Verilog硬件語(yǔ)言進(jìn)行設(shè)計(jì),并實(shí)現(xiàn)擴(kuò)展?jié)h明碼編碼的仿真。
其中,data_in為數(shù)據(jù)輸入, rset為使能段,data_out為輸出端,也就是漢明碼的校驗(yàn)位, pa_out為總體的奇偶校驗(yàn)位,這里采用的是偶校驗(yàn)。 漢明碼的校驗(yàn)位滿足以上編碼規(guī)律。
編碼器部分程序設(shè)計(jì)如下:
module codehanm(data_in ,clk,data_out,pa_out,rset);
inputrset; //使能端
input clk;//時(shí)鐘信號(hào)
input [3:0] data_in;//輸入數(shù)據(jù)
output [2:0] data_out;//生成的糾錯(cuò)碼
output pa_out;//生成總體奇偶校驗(yàn)位
…………
endmodule
編碼器的仿真波形如圖3所示。
由仿真波形可以清楚地看到實(shí)現(xiàn)了對(duì)數(shù)據(jù)的正確編碼。
3 擴(kuò)展?jié)h明碼解碼原理及其設(shè)計(jì)仿真
以擴(kuò)展?jié)h明碼(8,4)為例來(lái)說(shuō)明擴(kuò)展?jié)h明碼解碼器原理。解碼器接收4個(gè)信息位和由其在編碼器生成3個(gè)監(jiān)督位和1個(gè)總體校驗(yàn)位;通過(guò)對(duì)接收到的信息位再編碼產(chǎn)生本地校驗(yàn)位和一位總體校驗(yàn)位,然后再與接收到的編碼器發(fā)送來(lái)的原監(jiān)督位和總體校驗(yàn)位進(jìn)行比較(分別異或),其值用變量temp和pa news表示,通過(guò)對(duì)產(chǎn)生的結(jié)果進(jìn)行分析,從而判斷是否有誤,并且通過(guò)變量error 的取值來(lái)確定錯(cuò)誤的類型。
通過(guò)變量取值的不同確定錯(cuò)誤類型如表1所示。
對(duì)程序變量定義如下:data_in為數(shù)據(jù)輸入,ham_in為編碼的漢明碼校驗(yàn)碼,error提供了錯(cuò)誤類型,data_out為數(shù)據(jù)的輸出,pa_in為編碼器生成的總體奇偶校驗(yàn)碼。
解碼器的部分程序設(shè)計(jì)如下:
module decodehm( data_in,ham_in,pa_in,data_out,error,reset);
input reset; //使能端
input [3:0] data_in;//數(shù)據(jù)輸入
input [2:0] ham_in;//編碼器生成的糾錯(cuò)碼
input pa_in; //編碼器生成的總體校驗(yàn)位
output [3:0] data_out ;//數(shù)據(jù)輸出
output [1:0] error;//錯(cuò)誤類型
………
endmodule
解碼器仿真波形如圖4所示。
由仿真波形可以看出該擴(kuò)展?jié)h明碼能夠很好地實(shí)現(xiàn)糾正1位錯(cuò)誤或檢測(cè)2位錯(cuò)誤的邏輯功能。該設(shè)計(jì)下載至FPGA后完全可以實(shí)現(xiàn)預(yù)期的功能——糾正1位錯(cuò)誤、同時(shí)檢測(cè)2位錯(cuò)誤。
4 結(jié) 語(yǔ)
通過(guò)在FPGA上驗(yàn)證本設(shè)計(jì),可以看出在不明顯占用硬件資源、使用簡(jiǎn)單電路的情況下,由于采用了總體奇偶校驗(yàn)位,提高了漢明碼的糾、檢錯(cuò)能力,這對(duì)于提高數(shù)據(jù)傳輸?shù)目煽啃院托识季哂鞋F(xiàn)實(shí)意義。
參考文獻(xiàn)
[1]閻華,范宇.差錯(cuò)控制編碼技術(shù)應(yīng)用研究[J].航空兵器,2005(4):30-34.
[2]甘家寶.漢明碼校驗(yàn)原理解析[J].微型電腦應(yīng)用,2007,23(1):58-60.
[3]阮宜武.漢明碼檢驗(yàn)系統(tǒng)的電路實(shí)現(xiàn)[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2005(8):53-55.
[4][美]斯維尼.差錯(cuò)控制編碼[M].俞越,張丹,譯.北京:清華大學(xué)出版社,2004.
[5]任艷穎,王斌著.IC設(shè)計(jì)基礎(chǔ)[M].西安:西安電子科技大學(xué)出版社,2003.
[6]周賢偉.差錯(cuò)控制編碼與安全[M].北京:國(guó)防工業(yè)出版社,2004.
[7]潘松,王國(guó)棟.VHDL實(shí)用教程[M].成都:電子科技大學(xué)出版社,2000.
[8]王秉鈞,竇晉江.通信原理及其應(yīng)用[M].天津:天津大學(xué)出版社,2000.
[9]胡振華.VHDL與FPGA設(shè)計(jì)[M].北京:中國(guó)鐵道出版社,2003.
[10]王傳新.FPGA設(shè)計(jì)基礎(chǔ)[M].北京:高等教育出版社,2007.