《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于VHDL的漢明碼編解碼器實(shí)現(xiàn)
基于VHDL的漢明碼編解碼器實(shí)現(xiàn)
2014年微型機(jī)與應(yīng)用第24期
孫志雄,,謝海霞
(瓊州學(xué)院 電子信息工程學(xué)院,,海南 三亞 572022)
摘要: 介紹了漢明碼的原理,分析了漢明碼編碼,、解碼電路設(shè)計(jì)思路,。利用VHDL語言設(shè)計(jì)(7,,4)漢明碼編解碼器并通過Quartus II仿真平臺(tái)進(jìn)行仿真驗(yàn)證,最后下載到FPGA芯片EP1K30QC208-2實(shí)現(xiàn)了漢明碼編解碼電路,。仿真及實(shí)驗(yàn)結(jié)果證明,,該方法實(shí)現(xiàn)的漢明碼編解碼電路方案正確,并具有速度快,、修改方便,、可移植性好等優(yōu)點(diǎn)。
關(guān)鍵詞: 漢明碼 編碼器 解碼器 FPGA VHDL
Abstract:
Key words :

  摘  要: 介紹了漢明碼的原理,,分析了漢明碼編碼,、解碼電路設(shè)計(jì)思路。利用VHDL語言設(shè)計(jì)(7,,4)漢明碼編解碼器并通過Quartus II仿真平臺(tái)進(jìn)行仿真驗(yàn)證,,最后下載到FPGA芯片EP1K30QC208-2實(shí)現(xiàn)了漢明碼編解碼電路。仿真及實(shí)驗(yàn)結(jié)果證明,,該方法實(shí)現(xiàn)的漢明碼編解碼電路方案正確,,并具有速度快、修改方便、可移植性好等優(yōu)點(diǎn),。

  關(guān)鍵詞: 漢明碼,;編碼器;解碼器,;FPGA,;VHDL

0 引言

  由于數(shù)字信號(hào)在傳輸過程中受到干擾,碼元波形將變壞,,接收端收到后可能發(fā)生錯(cuò)誤判決,,因此在設(shè)計(jì)數(shù)字通信系統(tǒng)時(shí),就要考慮差錯(cuò)控制編碼,。在差錯(cuò)控制編碼中,,每種編碼所依據(jù)的原理是不同的,其中常用的是線性分組碼,,線性分組碼中的信息位和監(jiān)督位是由一些線性代數(shù)方程聯(lián)系著的,。而漢明碼(Hamming Code)就是一種能夠糾正一位錯(cuò)碼且編碼效率較高的線性分組碼。由于漢明碼的編解碼在工程上較易實(shí)現(xiàn),,因此應(yīng)用廣泛,。本文通過對(duì)信道糾錯(cuò)編碼漢明碼的研究,提出了利用FPGA實(shí)現(xiàn)漢明碼編解碼的方法,,并實(shí)現(xiàn)了(7,,4)漢明碼的自動(dòng)糾錯(cuò)和檢錯(cuò)的功能[1]。

1 漢明碼的編解碼原理

  漢明碼是由Richard Hamming于1950年提出的,,它屬于線性分組編碼方式,,用以糾正單個(gè)錯(cuò)誤的線性分組碼,在軟件無線電中應(yīng)用廣泛,。在線性碼分組碼(n,,k)中,若碼長為n,,信息位數(shù)為k,,則監(jiān)督位數(shù)r=n-k。

  如果用r個(gè)監(jiān)督位構(gòu)造出r個(gè)監(jiān)督關(guān)系式來指示1位錯(cuò)碼的n種可能位置,,則要求:

  2r-1≥n或2r≥k+r+1(1)

  這種能夠糾正1位錯(cuò)碼的線性分組碼就稱為漢明碼,。其基本原理是,將信息碼元與監(jiān)督碼元通過線性方程式聯(lián)系起來,,每一個(gè)監(jiān)督位被編在傳輸碼字的特定比特位置上,。系統(tǒng)對(duì)于錯(cuò)誤的數(shù)位無論是原有信息位中的,還是附加監(jiān)督位中的,,都能把它分離出來,。由漢明碼的性質(zhì)可知,,(7,4)漢明碼能糾正1位錯(cuò)碼,,檢測(cè)2個(gè)錯(cuò)碼[2],。

  2 漢明碼的編解碼方法

  設(shè)漢明碼(n,k)中k=4,,為了糾正1位錯(cuò)碼,由式(1)可知,,要求監(jiān)督位數(shù)r≥3,。若取r=3,則n=k+r=7,,即(7,,4)漢明碼。若用a6 a5…a0表示這7個(gè)碼元,,其中a6,、a5、a4和a3為信息位,,a2,、a1和a0為監(jiān)督位;用S2,、S1和S0表示3個(gè)監(jiān)督關(guān)系式中的校正子,,則S2、S1和S0的值與錯(cuò)碼位置的對(duì)應(yīng)關(guān)系可以規(guī)定如表1所示,,其對(duì)應(yīng)監(jiān)督關(guān)系式如式(2)所示[3],。

005.jpg

  2.png

  在信息傳輸中,在發(fā)送端編碼時(shí),,信息位a6,、a5、a4和a3的值由輸入信號(hào)決定,,是隨機(jī)的,。監(jiān)督位a2、a1和a0根據(jù)信息位的取值按監(jiān)督關(guān)系來確定,,即監(jiān)督位應(yīng)使S2,、S1和S0的值為0,如式(3)所示,,即表示發(fā)送端編成的碼組中應(yīng)無錯(cuò)碼,。

  3.png

  式(3)經(jīng)過移項(xiàng)運(yùn)算,解出監(jiān)督位a2,、a1和a0,,如式(4)所示,。

  4.png

  因此,(7,,4)漢明碼給定信息位后,,可以直接按式(4)算出監(jiān)督位,結(jié)果如表2所示,。

  接收端收到每個(gè)碼組后,,先計(jì)算出S2、S1和S0,,若為000,,則表示無錯(cuò)碼;若不全為0,,則表示有錯(cuò)碼,,這時(shí)可查表1判斷錯(cuò)碼情況。例如,,若接收碼組為0000011,,按式(2)計(jì)算可得:S2=0,S1=1,,S0=1,。由于S2S1S0=011,查表1可知在a3位有一錯(cuò)碼,,因此便可以在接收端糾正1位錯(cuò)碼,。表2中所列的(7,4)漢明碼的最小碼距d0=3,,因此,,這種碼能夠糾正1位錯(cuò)碼或檢測(cè)2位錯(cuò)碼。由于碼率k/n=(n-r)/n=1-r/n,,故當(dāng)n很大或r很小時(shí),,碼率接近1??梢?,漢明碼是一種高效碼[4]。

3 基于VHDL的漢明碼編解碼仿真及實(shí)現(xiàn)

  3.1基于VHDL的漢明碼編碼仿真

  根據(jù)漢明碼的編碼方法,,利用VHDL語言編程實(shí)現(xiàn)一種(7,,4)漢明碼的編碼及仿真,其碼長為7位,,信息位為高4位,,監(jiān)督位為低3位。對(duì)應(yīng)上述編碼方法實(shí)現(xiàn)的漢明碼編碼器的VHDL程序如下:

  //A 4-bit Hamming Encoder

  LIBRARY IEEE,;

  USE IEEE.STD_LOGIC_1164.ALL,;

  ENTITY hammingenc IS

  PORT(datain : IN BIT_VECTOR(0 TO 3),;

  //d0 d1 d2 d3

  en :IN bit;

  hamout : OUT BIT_VECTOR(0 TO 6)),;

  //d0 d1 d2 d3 p0 p1 p2

  END hammingenc,;

  ARCHITECTURE one OF hammingenc IS

  SIGNAL p0,p1,,p2 : BIT,;    //check bits

  BEGIN

  //generate check bits

  p0<=(datain(0)XOR datain(1))XOR datain(3)WHEN EN=′1′ELSE′0′;

  p1<=(datain(0)XOR datain(2))XOR datain(3)WHEN EN=′1′ ELSE′0′,;

  p2<=(datain(1)XOR datain(2))XOR datain(3)WHEN EN=′1′ ELSE ′0′,;

  //connect up outputs

  hamout(0 TO 2)<=(p0&p1&p2);

  hamout(3 TO 6)<=datain(0 TO 3),;

  END one,;

001.jpg

  用VHDL語言完成的漢明碼編碼器設(shè)計(jì)電路符號(hào)如圖1所示,,其中datain[3..0]為輸入的4位信息碼,;en為編碼輸入使能端,高電平有效,;hamout[6..0]為漢明碼編碼輸出,,其高4位hamout[6..3]為信息位,其低3位hamout[2..0]為監(jiān)督位,。

002.jpg

  實(shí)現(xiàn)的(7,,4)漢明碼編碼器仿真波形圖如圖2所示。從圖2可以看出,,當(dāng)輸入信息位datain[3..0]為0000時(shí),,輸出hamout[6..0]漢明碼編碼為0000000;輸入信息位datain[3..0]為0001時(shí),,輸出hamout[6..0]漢明碼編碼為0001011,,其余類推,其(7,,4)漢明碼編碼結(jié)果與表2一致,。

  3.2 基于VHDL的漢明碼解碼仿真

003.jpg

  用VHDL語言完成的漢明碼解碼器設(shè)計(jì)電路符號(hào)如圖3所示。其中hamin[6..0]為輸入的漢明碼,。en1為譯碼器使能端,,高電平有效。dataout[3..0]為漢明碼解碼輸出,,輸出為4位信息位,。ne為解碼輸出錯(cuò)誤指示端,當(dāng)ne為高電平1時(shí)表示接收的漢明碼沒有錯(cuò)誤,,相應(yīng)的err為000,;當(dāng)ne為低電平0時(shí)表示接收的漢明碼有一位錯(cuò)誤,,并用err指出錯(cuò)碼的位置,當(dāng)err為001時(shí)表示錯(cuò)碼為a0,,當(dāng)err為010時(shí)表示錯(cuò)碼為a1,,其余類推。經(jīng)過糾正后,,解碼輸出dataout[3..0]正確,。

  與上述解碼方法對(duì)應(yīng)的漢明碼解碼器的VHDL程序如下:

  //A 7 bit Hamming Decoder

  LIBRARY IEEE;

  USE IEEE.STD_LOGIC_1164.ALL,;

  ENTITY hammingdec IS

  PORT(hamin:IN BIT_VECTOR(6 downTO 0),;

  //a6 a5 a4 a3 p2 p1 p0

  EN1:IN BIT;

  dataout : OUT BIT_VECTOR(3 downto 0),;

  //a6 a5 a4 a3

  ne: OUT BIT,;

  err:OUT STD_LOGIC_VECTOR(2 downto 0)); //diagnostic outputs

  END hammingdec,;

  ARCHITECTURE ONE OF hammingdec IS

  BEGIN

  PROCESS(hamin)

  VARIABLE syndrome:BIT_VECTOR(2 DOWNTO 0),;

  BEGIN

  //generate syndrome bits

  IF EN1=′1′ THEN

  syndrome(0):=(((hamin(0) XOR hamin(3))

  XOR hamin(4)) XOR hamin(6));

  syndrome(1):=(((hamin(1) XOR hamin(3))

  XOR hamin(5)) XOR hamin(6)),;

  syndrome(2):=(((hamin(2) XOR hamin(4))

  XOR hamin(5)) XOR hamin(6)),;

  IF (syndrome="000") THEN  //no errors

  ne<=′1′;

  err<="000",;

  dataout(3 downTO 0)<=hamin(6 downTO 3),;

  ELSE ne<=′0′;

  CASE syndrome IS

  WHEN "001"=>err<="001",;dataout(3 downTO 0)

  <=hamin(6 downTO 3),;

  WHEN"010"=>err<="010";dataout(3 downTO 0)

  <=hamin(6 downTO 3),;

  WHEN"100"=>err<="011",;dataout(3 downTO 0)

  <=hamin(6 downTO 3);

  WHEN "011"=>err<="100",;dataout(0)<=NOT hamin

 ?。?);dataout(3 downTO 1)<=hamin(6 downTO 4),;

  WHEN "101"=>err<="101",;dataout(1)<=NOT hamin(4);dataout(3 downTO 2)<=hamin(6 downTO 5),;dataout(0)<=hamin(3),;

  WHEN "110"=>err<="110";dataout(2)<=NOT hamin(5),;dataout(1 downTO 0)<=hamin(4 downTO 3),;dataout(3)<=hamin(6),;

  WHEN "111"=>err<="111";dataout(3)<=NOT hamin(6),;dataout(2 downTO 0)<=hamin(5 downTO 3),;

  WHEN OTHERS=>err<="000";

  END CASE,;

  END IF,;

  END IF;

  END PROCESS,;

  END ONE,;

004.jpg

  (7,,4)漢明碼解碼器仿真波形如圖4所示,。例如,當(dāng)解碼器輸入hamin[6..0]為0001010,,對(duì)應(yīng)的ne為低電平0說明接收的漢明碼有1位錯(cuò)誤,,相應(yīng)的err為001時(shí),表示錯(cuò)碼為a0,,經(jīng)糾錯(cuò)后a0為1,,所以正確接收碼應(yīng)為:0001011,,對(duì)應(yīng)的解碼為0001,。從圖4可以看出,經(jīng)解碼器解碼后,,其正確解碼結(jié)果與編碼輸入的信息位一致,。

  在仿真的基礎(chǔ)上,將漢明碼編解碼的配置程序下載到FPGA芯片EP1K30QC208-2,,并在EDA實(shí)驗(yàn)開發(fā)板進(jìn)行測(cè)試,,實(shí)驗(yàn)結(jié)果表明漢明碼編解碼正確[5]。

4 結(jié)論

  本文利用VHDL語言編程,,并基于FPGA實(shí)現(xiàn)了(7,,4)漢明碼編解碼器的設(shè)計(jì),體現(xiàn)了軟件無線電設(shè)計(jì)通信系統(tǒng)的思想,,實(shí)現(xiàn)了硬件設(shè)計(jì)實(shí)驗(yàn)軟件化,,其加速了數(shù)字通信系統(tǒng)設(shè)計(jì)的效率,降低了設(shè)計(jì)成本,,為通信系統(tǒng)的設(shè)計(jì)提供了很好的平臺(tái)[6],。

參考文獻(xiàn)

  [1] 盛孟剛.漢明碼編譯碼的FPGA設(shè)計(jì)與實(shí)現(xiàn)[J].山西電子技術(shù),2007(6):43-47.

  [2] 章學(xué)靜,,薛琳,,李金平,,等.漢明(Hamming)碼及其編譯碼算法的研究與實(shí)現(xiàn)[J].北京聯(lián)合大學(xué)學(xué)報(bào)(自然科學(xué)版),2008,,22(1):46-49.

  [3] 方國濤.基于FPGA的漢明碼編譯碼系統(tǒng)[J].信息技術(shù),,2010(7):79-81.

  [4] 樊昌信,曹麗娜.通信原理(第6版)[M].北京:國防工業(yè)出版社,,2006.

  [5] 江國強(qiáng).EDA技術(shù)與應(yīng)用(第3版)[M].北京:電子工業(yè)出版社,,2010.

  [6] 孫志雄,謝海霞.基于FPGA的CRC編解碼器實(shí)現(xiàn)[J].電子器件,,2012,,35(6):657-660.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。