基于VHDL語言的漢明碼編碼/解碼電路設計

摘要

摘?要:文章提出了一種基于VHDL語言的串行、并行轉換及漢明碼的編碼和譯碼的實現方法。在介紹漢明碼編碼和譯碼原理的基礎上,給出了基于VHDL實現的源程序,通過Quartus Ⅱ軟件進行設計并利用FPGA開發板進行驗證。

關鍵詞:VHDL ;漢明碼;串/并轉換

Absrtact: This paper presents a method of serial and parallel conversion based on VHDL and the implementation of Hamming code coding and decoding. Based on the introduction of the coding and decoding principle of Hamming code, the source program based on VHDL is given, which is designed by Quartus II software and verified by FPGA development board.

Keywords: VHDL; Hamming code; Serial; Parallel?

1.?目錄


2. 正文

2.1 系統設計

2.1.1 設計要求

已知(7,4)漢明碼的編碼和譯碼電路原理圖如下,完成相應編碼及譯碼模塊的開發,實現串行比特流的編碼和譯碼(輸入和輸出都是串行比特流)。

【圖片】----------------------------------

2.1.2 系統設計方案

工作原理

漢明碼是在原編碼的基礎上附加一部分碼字,使其滿足糾錯碼的條件。它屬于線性分組碼, 由于漢明碼的抗干擾能力較強 ,至今仍是應用比較廣泛的一類碼。

在工程設計中常常涉及到信號傳輸,主流的方法有串行傳輸方法和并行傳輸方法,串行方法只有一根線,干擾少但傳輸速度慢。并行方案大大提升了傳輸速度,但傳輸距離短,易受干擾。故在實際的工程設計中常常要進行串、并轉換。

本系統通過漢明碼的編碼與譯碼以及引入串并轉換,展示了一種較為有效的自動糾錯電路設計方案。

總體方案的論證與比較

有兩種系統總體方案:

1.?引入時鐘脈沖信號,數據自動輸入,同時系統進行相應的編碼\解碼操作;

2.?手動輸入數據,每傳送4位數據系統進行一次編碼\解碼操作;

方案1增加了模塊數量,但進行的操作數更少,系統穩定性更高;

方案2設計簡單,但增加了操作的復雜程度;

綜合考慮設計難度和操作的直觀性,選擇方案1。

各功能塊的劃分與組成

系統設計流程圖如下圖所示,串行數據進入串行轉并行模塊,被轉換為4位并行數據,送入漢明碼編碼器。數據在漢明碼編碼器中生成7位編碼數據,通過信道模塊傳輸至漢明碼解碼模塊。解碼模塊將7位數據解碼糾錯后輸出4位解碼數據。4位解碼數據經由并行轉串行模塊后,轉換為串行數據。

漢明碼編碼器輸出4路未調制數據,信道模塊輸出7路編碼信號,漢明碼解碼模塊輸出1路糾錯指示標志,并行轉串行模塊輸出1路輸出信號

【圖片】---------------------------------------

2.2 單元電路設計

2.2.1?時鐘脈沖模塊(1Hz)

本模塊對FPGA芯片的內部時鐘源進行分頻,將50MHz時鐘脈沖轉換為50%占空比的1Hz脈沖。

其本質是一個計數器,每當計數器計數到25M時將輸出信號進行翻轉,從而輸出50%占空比的1Hz脈沖。

2.2.2 串行轉并行模塊

本模塊將串行數據轉換為4位二進制并行數據,每送入4位串行數據刷新輸出的4位并行數據。

其本質是一個4位移位寄存器,每送入一個并行數據,模塊就將原來的數據進行左移,丟棄最高位,將新數據寫入最低位。每當寄存器內被送入4位新數據,模塊將寄存器內的數據讀取并行輸出。

模塊結構圖如圖所示

【圖片】

2.2.3?漢明碼編碼模塊

本模塊將4位并行數據進行漢明碼編碼,輸出7位并行編碼數據。

漢明碼編碼原理:XXXX

2.2.4?信道模塊

本模塊模擬7位并行數據信道,同時在每一路信道添加可調非門,模擬傳輸數據出錯的情況。

模塊結構圖如圖所示

【圖片】

2.2.5?漢明碼譯碼模塊

本模塊將7位并行數據進行漢明碼譯碼,輸出4位并行譯碼數據。

漢明碼譯碼原理:本模塊將4位并行數據進行漢明碼編碼,輸出7位并行編碼數據。

漢明碼編碼原理:

在(n, k)漢明碼中, (n-k)個附加的監督碼元是由信息碼元的線性運算產生的。碼長為n ,信息元長度為k , 2^k個碼字構成n維線性空間中的一個k維子空間,編碼的實質就是要在n維空間中, 找出一組長為n 的k 個線性無關的向量g0 g1 gk - 1 , 使得每個碼字C都可以表示為k個向量的線性組合 , 即

C=[C_(n-1) C_(n-2)?C_0 ]=C_(k-1 ) g_0+C_(k-2 ) g_1+?+C_(0 ) g_(k-1)? ? (1)

其中, ci ?{ 0 , 1} , i = 0 , 1 , ? , k - 1 。將上式寫成矩陣形式得

C=[■(■(C_(k-1 )&C_(k-2 ) )&?&C_(0 ) )][■(■(g_0@g_1 )@?@g_(k-1) )]=[■(■(C_(k-1 )&C_(k-2 ) )&C_(k-2 )&C_(0 ) )]? G? (2)

由此[■(■(C_(k-1 )&C_(k-2 ) )&?&C_(0 ) )]是帶編碼信息的信息組, G是一個n×k 階矩陣,稱為(n, k)漢明碼的生成矩陣。

本系統中,采用7,4漢明碼編碼方式,由設計要求得生成矩陣

G=[■(1&1&■(1&0)@0&1&■(1&1)@1&1&■(0&1))]

當G確定以后,編碼的問題也就解決了。

根據監督碼元是有信息碼元的線性運算產生的關系可知,監督碼(a0,a1,a2)滿足以下關系式:

{█(a_2=a_6 ?a_5 ?a_4@a_1=a_5 ?a_4 ?a_3@a_0=a_6 ?a_5 ?a_3 )┤

即可算出三位監督位,再與信息位(a6,a5,a4,a3)結合,可得到(7,4)漢明碼。

2.2.6?并行轉串行模塊

本模塊將4位二進制并行數據轉換為串行數據依次輸出

其本質是一個4位移位讀取寄存器,每輸入一個時鐘脈沖信號,模塊就將寄存器內數據讀取標志位左移并讀取對應位置寄存器內的數據,讀取標志位從D0開始,讀取4位后歸零。

模塊結構圖如圖所示

【圖片】

2.2.7? ? 顯示模塊

本模塊將漢明碼編碼器輸出的4路未調制數據信號,

信道模塊輸出的7路編碼信號,

漢明碼解碼模塊輸出的1路糾錯指示標志信號,

并行轉串行模塊輸出的1路輸出信號顯示出來。

2.3 軟件設計

2.3.1 設計平臺、開發工具和實現方法

本系統利用EDA技術在Quartus II軟件下用VHDL語言實現(7,4)漢明碼的編譯碼及串/并行轉換設計,并在基于Cyclone II EP2C5T144I8芯片的FPGA實驗板上進行演示。

2.3.2?頂層設計圖

本系統的頂層設計圖如圖所示

【圖片】

2.3.3 程序清單

2.3.3.1?時鐘脈沖模塊(1Hz)


2.3.3.2?串行轉并行模塊


2.3.3.3?漢明碼編碼模塊


2.3.3.4?信道模塊


2.3.3.5?漢明碼譯碼模塊


2.3.3.6?并行轉串行模塊


2.3.3.7?四位并行信號轉四路顯示信號模塊


2.3.3.8?數碼管譯碼模塊


2.4?系統測試

2.4.1 性能指標

實現串行,并行數據轉換

實現數據檢錯與糾錯,并指出錯誤位置

2.4.2 測試方法、步驟

在數據模塊中輸入想要輸入的數據,調整信道模塊連接方法(將任意一路非門接入信道);

燒錄并接通電源,系統將在數碼管前四位顯示輸入的并行信號,在第五位顯示輸出的一位并行信號,在第八位顯示誤碼的位置,在LED燈1~7位顯示漢明碼編碼后的七位數據;

按下按鍵K1,系統將復位,數據重新輸入,重新顯示系統輸出及各項信息。

2.4.3 測試數據

假設輸入數據為00001111循環,信道第4位接非門,則數碼管前四位將循環顯示0000=>1111=>0000=>...

第五位依次循環顯示0,0,0,0,1,1,1,1,...

最后一位顯示3(信道第4位)。

2.5?結論

本次設計實現了串行數據和并行數據間的相互轉換,用漢明碼編碼/譯碼方法實現數據傳輸中的自動檢錯與糾錯,使用頂層設計的方法進行了EDA程序設計與FPGA開發,完成了全部設計要求和擴展要求。

3.?參考文獻

[1] 樊昌信 曹麗娜.通信原理(第6版)[M].國防工業出版社,2006.

[2] 劉愛蓮.糾錯編碼原理及MATLAB實現[M].清華大學出版社:北京,2013.53-55.

[3 ] 金西. VHDL與復雜數字系統設計[M] .西安:西安電子科技大學出版社,2003. 81-115.

[4] 潘松 黃繼業.EDA技術與VHDL[M].北京:清華大學出版社:北京,2005

4.?附錄

https://pan.baidu.com/s/1k0MElRy7b9hk_unG2OJg7w

https://pan.baidu.com/s/1XYfZYUEKAnkA7eW566KU9g

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容