漢明碼的編碼和譯碼(含有源程序)_第1頁
漢明碼的編碼和譯碼(含有源程序)_第2頁
漢明碼的編碼和譯碼(含有源程序)_第3頁
漢明碼的編碼和譯碼(含有源程序)_第4頁
漢明碼的編碼和譯碼(含有源程序)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、目  錄序  言. 1第1章 Quartus與VHDL簡介. 21.1 Quartus軟件簡介. 21.2 VHDL簡介. 3第2章 (7,4)漢明碼的原理. 42.1 基本概念. 42.2 監(jiān)督矩陣H. 52.3 生成矩陣G. 52.4 伴隨式(校正子)S. 6第3章 (7,4)漢明碼編解碼器的設(shè)計. 73.1  (7,4)漢明碼的編碼思路及程序設(shè)計. 7漢明碼的編碼思路. 7漢明碼的編碼程序設(shè)計. 73.2  (7,4)漢明碼的譯碼思路及程序設(shè)計. 8漢明碼的譯碼思路. 8漢明碼的譯碼程序設(shè)計. 10第4章 編譯程序的調(diào)試與分析. 124.1

2、0; (7,4)漢明碼的編碼程序調(diào)試與分析. 12漢明碼的編碼程序的編譯. 12漢明碼的編碼程序的仿真分析. 124.2  (7,4)漢明碼的編譯碼程序分析及調(diào)試. 13漢明碼的譯碼程序的編譯. 13漢明碼的譯碼程序的仿真分析. 13參考文獻. 15體會與建議. 16附  錄. 17序  言EDA ( Elect ronics Design Automation) 技術(shù)是隨著集成電路和計算機技術(shù)飛速發(fā)展應(yīng)運而生的一種高級、快速、有效的電子設(shè)計自動化工具。目前,VHDL語言已經(jīng)成為EDA的關(guān)鍵技術(shù)之一,VHDL 是一種全方位的硬件描述語言,具有極強的描述能力,能支持

3、系統(tǒng)行為級、寄存器傳輸級和邏輯門級三個不同層次的設(shè)計,支持結(jié)構(gòu)、數(shù)據(jù)流、行為三種描述形式的混合描述,覆蓋面廣,抽象能力強,因此在實際應(yīng)用中越來越廣泛。VHDL語言具有功能強大的語言結(jié)構(gòu),可用明確的代碼描述復(fù)雜的控制邏輯設(shè)計,并且具有多層次的設(shè)計描述功能,支持設(shè)計庫和可重復(fù)使用的元件的生成。近幾十年來,EDA技術(shù)獲得了飛速發(fā)展。它以計算機為平臺,根據(jù)硬件描述語言VHDL,自動地完成邏輯編譯、化簡分割、綜合及優(yōu)化,布局布線,仿真直至對特定目標(biāo)芯片的適配編譯,邏輯映射和編程下載等工作。以自頂向下的設(shè)計方法,使硬件設(shè)計軟件化,擺脫了傳統(tǒng)手工設(shè)計的眾多缺點。隨著EDA技術(shù)的深入發(fā)展基于硬件描述語言的方法

4、將有取代傳統(tǒng)手工設(shè)計方法的趨勢。漢明碼是在原編碼的基礎(chǔ)上附加一部分代碼,使其滿足糾錯碼的條件。它屬于線性分組碼,由于漢明碼的抗干擾能力較強,至今仍是應(yīng)用比較廣泛的一類碼。本文用VHDL語言實現(xiàn)了(7,4)漢明碼的編碼和譯碼,并通過實例來說明利用VHDL語言實現(xiàn)數(shù)字系統(tǒng)的過程。在介紹(7,4)漢明碼編碼和譯碼原理的基礎(chǔ)上,設(shè)計出了(7,4)漢明碼的編碼器和譯碼器,寫出了基于VHDL實現(xiàn)的源程序,并通過QUARTUS軟件進行仿真驗證。第1章 Quartus與VHDL簡介 1.1 Quartus軟件簡介Quartus是Altera公司推出的CPLD/FPGA的開發(fā)工具,Quartus提供了

5、完全集成且與電路結(jié)構(gòu)無關(guān)的開發(fā)環(huán)境,具有數(shù)字邏輯設(shè)計的全部特性。?/P>   Quartus 設(shè)計軟件提供完整的多平臺設(shè)計環(huán)境,可以很輕松地滿足特定設(shè)計的需要。它是可編程片上系統(tǒng)(SOPC)設(shè)計的綜合性環(huán)境,擁有FPGA 和CPLD設(shè)計的所有階段的解決方案。與其它EDA軟件相比較Quartus軟件的特點主要包括:1、可利用原理圖、結(jié)構(gòu)框圖、Verilog HDL、AHDL和VHDL完成電路描述,并將其保存為設(shè)計實體文件。2、芯片(電路)平面布局連線編輯。3、LogicLock增量設(shè)計方法,用戶可建立并優(yōu)化系統(tǒng),然后添加對原始系統(tǒng)的性能影響較小或無影響的后續(xù)模塊。4、功

6、能強大的邏輯綜合工具。5、完備的電路功能仿真與時序邏輯分析。6、定時/時序分析與關(guān)鍵路徑延時分析。7、可使用SignalTap 邏輯分析工具進行嵌入式的邏輯分析。8、支持軟件源文件的添加和創(chuàng)建,并將它們鏈接起來生成編程文件。9、使用組合編譯方式可一次完成整體設(shè)計流程。10、自動定位編譯錯誤。11、高效的期間編程與驗證工具。12、可讀入標(biāo)準(zhǔn)的EDIF網(wǎng)表文件、VHDL網(wǎng)表文件和Verilog網(wǎng)表文件。13、能生成第三方EDA軟件使用的VHDL網(wǎng)表文件和Verilog網(wǎng)表文件。 1.2 VHDL簡介  “VHDL設(shè)計”作為信息類專業(yè)新開出的一門重要的專業(yè)課,相對于傳統(tǒng)

7、課程具有內(nèi)容新、發(fā)展快、應(yīng)用性強等特點。在硬件電子電路設(shè)計領(lǐng)域中,電子設(shè)計自動化(EDA)工具已成為主要的設(shè)計手段,而VHDL語言則是EDA的關(guān)鍵技術(shù)之一。VHDL語言具有功能強大的語言結(jié)構(gòu),可用明確的代碼描述復(fù)雜的控制邏輯設(shè)計,并且具有多層次的設(shè)計描述功能,支持設(shè)計庫和可重復(fù)使用的元件的生成。近幾十年來,EDA技術(shù)獲得了飛速發(fā)展。它以計算機為平臺,根據(jù)硬件描述語言VHDL,自動地完成邏輯編譯、化簡分割、綜合及優(yōu)化,布局布線,仿真直至對特定目標(biāo)芯片的適配編譯,邏輯映射和編程下載等工作。以自頂向下的設(shè)計方法,使硬件設(shè)計軟件化,擺脫了傳統(tǒng)手工設(shè)計的眾多缺點。隨著EDA技術(shù)的深入發(fā)展基于硬件描述語言

8、的方法將有取代傳統(tǒng)手工設(shè)計方法的趨勢。第2章 (7,4)漢明碼的原理 2.1 基本概念線性分組碼是一類重要的糾錯碼,應(yīng)用很廣泛。在(n,k)分組碼中,若督元是按線性關(guān)系相加而得到的,則稱其為線性分組碼?,F(xiàn)在以(7,4)分組碼為例來說明線性分組碼的特點。設(shè)其碼字為A=a6,a5,a4,a3,a2,a1,a0,其中前4位是信息元,后3位是監(jiān)督元,可用下列線性方程組來描述該分組碼,產(chǎn)生監(jiān)督元:             a2 = a6 + a5 + a4 

9、0;        a1 = a6 + a5  + a3                             ()          a0 = a

10、6      + a4 + a3顯然,這3個方程是線性無關(guān)的。經(jīng)計算可得(7,4)碼的全部碼字,如表2-1所示。表2-1 (7,4)碼的全部碼字?/P>碼   字碼   字信 息碼元監(jiān) 督 元信 息碼元監(jiān) 督 元00  0  0  00  0  081  0  0  01  1  11  0  0  0  10  1  191  0

11、  0  11  0  02  0  0  1  01  0  1101  0  1  00  1  030  0  1  11  1  0111  0  1  10  0  140  1  0  01  1  012   1  1  0  00&#

12、160; 0  150  1  0  11  0  113   1  1  0  10  1  060  1  1  00  1  114   1  1  1  01  0  070  1  1  10  0  015   1  1  1  11&#

13、160; 1  1不難看出,上述(7,4)碼的最小碼距d0=3,它能糾1個錯或檢2個錯。漢明碼是能夠糾正單個錯誤的線性分組碼,其特點是:最小碼距d0=3,碼長n與監(jiān)督位滿足n=2r-1的關(guān)系,上述的(7,4)線性分組碼就是一個漢明碼。2.2 監(jiān)督矩陣H式()所示(7,4)漢明碼的3個監(jiān)督方程改寫后可用矩陣形式表示為                       

14、0;     a6                            a5          1 1 1 0 1 0 0     a4  

15、;     0          1 1 0 1 0 1 0  · a3          1 0 1 1 0 0 1     a2       0         &#

16、160;                  a1                            a0并簡記為    H&#

17、183;AT=0T 或 A·HT=0                             ()H稱為監(jiān)督矩陣,一旦H給定,信息位和監(jiān)督位之間的關(guān)系也就確定了。H矩陣可以分成2部分          

18、0;        1 1 1 0   1 0 0             H =   1 1 0 1   0 1 0   =P Ir               ()  

19、;                 1 0 1 1   0 0 1    H·AT=0T,可以用來作為判斷接收碼字A是否出錯的依據(jù)。 2.3 生成矩陣G把監(jiān)督方程補充完整并改寫為矩陣形式a6      1 0 0 0a5      0 1 0 0a4 

20、0;    0 0 1 0     a6a3  =   0 0 0 1  · a5a2      1 1 1 0     a4a1      1 1 0 1     a3a0      1 0 1 1    &

21、#160;         A = a6 a5 a4 a3 ·G                          ()其中           &#

22、160;        1 0 0 0  1 1 1                   0 1 0 0  1 1 0             G =   0 0 1 0  1 0

23、 1                         ()                   0 0 0 1  0 1 1G稱為生成矩陣,由G和信息組就可以產(chǎn)生全部碼字

24、。生成矩陣也可以分成2部分,即          G = Ik  Q                                ()其中    &

25、#160;          1 1 1              Q =  1 1 0  = PT                     

26、0;      ()                   1 0 1                   0 1 12.4 伴隨式(校正子)S設(shè)發(fā)送碼組A= an1,an2,a1,a0 ,在

27、傳輸過程中可能發(fā)生誤碼。接收碼組B= bn1,bn2,b1,b0  ,收發(fā)碼組之差定義為錯誤圖樣E,即                     E = B - A                   

28、  令S = BHT,稱為伴隨式或校正子。S = BHT =(A + E)HT  = EHT                       上述(7,4)漢明碼的伴隨式與錯誤圖樣的對應(yīng)關(guān)系如表2-2所示。表2-2(7,4)漢明碼S與E的對應(yīng)關(guān)系ESe6    e5    e4 &#

29、160;  e3    e2    e1    e0s2   s1   s00/0    0    0    0    0    0    00    0    01b00   

30、0    0    0    0    0    10    0    12b10    0    0    0    0    1    00    1  &

31、#160; 03b20    0    0    0    1    0    01    0    04b30    0    0    1    0    0    00

32、60;   1    15b40    0    1    0    0    0    01    0    16b50    1    0    0    0  &#

33、160; 0    01    1    07b61    0    0    0    0    0    01    1    1 第3章 (7,4)漢明碼編解碼器的設(shè)計 3.1  (7,4)漢明碼的編碼思路及程序設(shè)計 漢明碼

34、的編碼思路(7,4)漢明碼的編碼就是將輸入的四位信息碼編成七位的漢明碼,即加入三位監(jiān)督位。根據(jù)式()A = a6 a5 a4 a3 ·G可知,信息碼與生成矩陣G的乘積就是編好以后的(7,4)漢明碼,而生成矩陣G又是已知的,由式()得                   1 0 0 0  1 1 1        

35、60;          0 1 0 0  1 1 0             G =   0 0 1 0  1 0 1                   (

36、)                   0 0 0 1  0 1 1所以,可以得出如下方程組            a6 = a6            a5 =  &#

37、160;   a5            a4 =           a4            a3 =            

38、0;   a3                                 a2 = a6 + a5 + a4            a1 = a

39、6 + a5      + a3            a0 = a6      + a4 + a3根據(jù)式就可以編出編碼程序了。 漢明碼的編碼程序設(shè)計根據(jù)(7,4)漢明碼的編碼原理,首先畫出程序設(shè)計的流程圖:圖3.1 編碼流程圖輸入信息碼a3a2a1a0,輸出(7,4)漢明碼b6b5b4b3b2b1b0。首先,輸入信息碼a3a2a1a0,即使用以下語句:port(a:in st

40、d_logic_vector(3 downto 0);然后,根據(jù)式,就可以得到監(jiān)督位與信息碼之間的對應(yīng)關(guān)系,使用異或運算,即:b(2)<=a(3) xor a(2) xor a(1);b(1)<=a(3) xor a(2) xor a(0);b(0)<=a(3) xor a(1) xor a(0);最后,將算好的監(jiān)督位與原來輸入的信息碼一起輸出,這樣,編碼程序就算完成了。 3.2  (7,4)漢明碼的譯碼思路及程序設(shè)計 漢明碼的譯碼思路(7,4)漢明碼的譯碼就是將輸入的七位漢明碼翻譯成四位的信息碼,并且糾正其中可能出現(xiàn)的一個錯誤。由于生成矩陣G是

41、已知的,所以根據(jù)式()G = Ik  Q ,可以得到矩陣Q的值                    1 1 1              Q =  1 1 0  = PT      

42、60;               ()                   1 0 1               &

43、#160;   0 1 1那么               1  1  1  0             P =   1  1  0  1        

44、60;            ()                   1  0  1  1而監(jiān)督矩陣H與PT又存在一定的關(guān)系,即H =P Ir          

45、60;                             ()那么就可以算出監(jiān)督矩陣H的值,即                 

46、60; 1 1 1 0 1 0 0             H =   1 1 0 1 0 1 0                  ()            

47、;       1 0 1 1 0 0 1所以                 1  1  1                     1  1

48、60; 0                     1  0  1          HT  =    0  1  1        

49、60;               ()                     1  0  0            

50、         0  1  0                     0  0  1根據(jù)式(A + E)HT  = EHT可以看出校正子S與錯誤圖樣E之間有確定的線性變換關(guān)系。而E = en-1,en-2,e1,e0 ,這樣就可以算出校正子S與(7,4)漢明碼各位之

51、間的關(guān)系,即          S2 = a2 + a6 + a5 + a4          S1 = a1 + a6 + a5 +a3                        &#

52、160;      ()          S0 = a0 + a6 + a4 + a3對照表2-2,就可以確定每一位出錯時,對應(yīng)的校正子s2s1s0的值。這樣,譯碼問題就迎刃而解了。 漢明碼的譯碼程序設(shè)計根據(jù)(7,4)漢明碼的譯碼原理,首先畫出程序設(shè)計的流程圖: 圖譯碼流程圖首先,輸入7位漢明碼a6a5a4a3a2a1a0,用以下語句來實現(xiàn):port(a:in std_logic_vector(6 downto 0);然后,

53、根據(jù)這7位碼a6a5a4a3a2a1a0,計算校正子s2s1s0的值,根據(jù)式()可知校正子S與(7,4)漢明碼各位之間的關(guān)系,即:ss(2):=a(6) xor a(5) xor a(4) xor a(2);ss(1):=a(6) xor a(5) xor a(3) xor a(1);ss(0):=a(6) xor a(4) xor a(3) xor a(0);第三,要判定校正子與0的關(guān)系,使用if語句,若等于0,則表示沒有錯誤;若不為0,則表示其中有一位出錯。根據(jù)表2-2,可以得到校正子S與錯誤圖樣E之間的關(guān)系,才用case語句,編寫程序如下:when "001" =&g

54、t;bb(0):= not bb(0);c<="000"when "010" =>bb(1):= not bb(1);c<="001"when "100" =>bb(2):=not bb(2);c<="010"when "011" =>bb(3):=not bb(3);c<="011"when "101" =>bb(4):=not bb(4);c<="100"wh

55、en "110" =>bb(5):=not bb(5);c<="101"when "111" =>bb(6):=not bb(6);c<="110"上述程序中,bb是變量,存放的是輸入7位漢明碼a6a5a4a3a2a1a0,當(dāng)S="001",時,表示a0出錯,則只需將這一位的值取反,然后再送給輸出。a1、a2、a3、a4、a5、a6出錯的原理也是一樣的。最后,將沒有錯誤的(7,4)漢明碼或已經(jīng)糾正1個錯誤的(7,4)漢明碼輸出,這樣譯碼程序就完成了。為了方便閱讀波形,加入

56、輸出了校正子S和錯誤位數(shù)C。若第0位(a0)出錯,則C輸出0,依次類推;若無錯,則輸出7。第4章 編譯程序的調(diào)試與分析4.1  (7,4)漢明碼的編碼程序調(diào)試與分析 漢明碼的編碼程序的編譯按照上述編碼程序的編寫思路,編寫好程序,點擊,進行編譯,出現(xiàn)一些錯誤,如下:Error 1: VHDL error at ym.vhd(3): object "std_logic_vector" is used but not declaredError 2: VHDL error at bm.vhd(7): entity "bm" is used

57、but not declaredError 1表明在使用"std_logic_vector"時,沒有打開可以使用這個函數(shù)的庫,應(yīng)該在程序的最前面加上如下語句:library ieee;Error 2表明程序中的文件名與保存時的文件名不一致,兩者應(yīng)該相同。排除上述錯誤后,就可以進行波形仿真了。 漢明碼的編碼程序的仿真分析建好波形文件,設(shè)置好輸入信息碼a3a2a1a0的初始值,點擊,進行波形仿真,出現(xiàn)如下波形:圖4.1(7,4)漢明碼的編碼仿真波形從波形中,可以看出輸入信息00001111,對應(yīng)的編碼情況。對照表2-1 ,可以確定(7,4)漢明碼的編碼程序完全正確,編

58、碼成功。  4.2  (7,4)漢明碼的編譯碼程序分析及調(diào)試 漢明碼的譯碼程序的編譯按照上述譯碼程序的編寫思路,編寫好程序,點擊,進行編譯,出現(xiàn)一些錯誤,如下:Error 1: VHDL syntax error at ym.vhd(12) near text "variable"  expecting "end", or "(", or an identifier ("variable" is a reserved keyword), or a sequentia

59、l statement,Error 2: VHDL Case Statement error at ym.vhd(19): Case Statement choices must cover all possible values of expressionError 1表明"variable"變量定義的位置有誤。變量的定義一定要放在process(a)之后,begin之前。Error 2表明case語句使用有誤。使用case語句時,必須列出它的所有可能值,或者列出部分值,然后使用when others =>語句即可。改正上述錯誤,就可以對其進行波形仿真了。 

60、;漢明碼的譯碼程序的仿真分析建好波形文件,設(shè)置好輸入(7,4)漢明碼a6a5a4a3a2a1a0的初始值,點擊,進行波形仿真, 出現(xiàn)如下波形:圖4.2(7,4)漢明碼的譯碼仿真波形1由于設(shè)置的分別是a0、a1、a2、a3、a4、a5、a6出錯,從波形上就可以清楚的看出該程序存在一定的問題,雖然沒有語法錯誤,但存在著邏輯錯誤。由波形可知:a0出錯時的校正子S為100,a1出錯時的校正子S為010,a2出錯時的校正子S為001,a3出錯時的校正子S為110,a4出錯時的校正子S為101,a5出錯時的校正子S為011,a6出錯時的校正子S為111。而根據(jù)表2-2可知:a0出錯時的校正子S為100,a

61、1出錯時的校正子S為010,a2出錯時的校正子S為100,a3出錯時的校正子S為011,a4出錯時的校正子S為101,a5出錯時的校正子S為110,a6出錯時的校正子S為111。由此可以推斷是校正子S的高低位搞錯了,仔細查看程序,發(fā)現(xiàn)的確是這個問題,改正后,編譯仿真的以下波形:圖4.3(7,4)漢明碼的譯碼仿真波形2對照表2-2,仔細觀察波形,可以確定波形沒有問題,這樣,(7,4)漢明碼的譯碼程序就完全正確了,譯碼成功。參考文獻 1 辛春艷.VHDL硬件描述語言M.北京:國防工業(yè)出版社,20022 侯伯亨,顧新.VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計M.西安:西安電子科技大學(xué)出版社,

62、2002。3 金西VHDL與復(fù)雜數(shù)字系統(tǒng)設(shè)計M西安:西安電子科技大學(xué)出版社,2003.   體會與建議 為期一周的課程設(shè)計就這么結(jié)束了,忙碌而又辛勞,但是卻讓我學(xué)到了許多東西,為不久的將來走上工作崗位打下了一定的基礎(chǔ)。一開始老師給我們布置了題目(7,4)漢明碼的編解碼器的設(shè)計。拿到題目,我們非常著急,以為這個題目很難,象一只沒頭的蒼蠅,我們開始亂鉆,最后,一頭扎進了圖書館,借了好幾本書。來仔細的翻看了通信原理的書和筆記,對(7,4)漢明碼的一些基本概念有了進一步的會議。突然發(fā)現(xiàn)這個課題其實一點也不難,一點技術(shù)含量都沒有,似乎一個人也可以完成的。仔細閱讀了(7,4)漢明碼的原理以后,我就開始構(gòu)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論