奇偶校驗原理與FPGA實現
- 寫在前面
- 一、基礎原理
- 2.1 奇校驗
- 2.2 偶校驗
- 2.3 缺點
- 二、舉個例子
- 3.1 奇校驗例子
- 3.2 偶校驗例子
- 3.3 檢測出錯例子
- 三、FPGA實現
- 寫在后面
寫在前面
??奇偶校驗碼是一種簡單的檢錯碼,主要用于數據傳輸或存儲過程中檢測奇數個比特錯誤或者偶數個比特錯誤,其實現簡單、開銷低,但可靠性低、檢錯能力有限,在UART、RS23等低速串行接口或者早期的存儲中會使用到。
一、基礎原理
??奇偶校驗碼核心原理是通過增加一個校驗位,使得整個數據(包括校驗位)中“1”的個數滿足奇偶性(奇數或偶數),從而檢測傳輸或存儲過程中可能發生的單比特錯誤。具體地,奇偶校驗分為奇校驗和偶校驗。
2.1 奇校驗
??發送端,在序列尾部增加1位校驗位,確保發送的整個二進制序列中“1”的總個數位奇數。
??接收端,判斷接收到的二進制序列中的“1”的總個數是否為奇數,若為奇數,則校驗通過,認為數據傳輸正確;若為偶數,則校驗失敗,認為數據傳輸錯誤。
2.2 偶校驗
??發送端,在序列尾部增加1位校驗位,確保發送的整個二進制序列中“1”的總個數位偶數。
??接收端,判斷接收到的二進制序列中的“1”的總個數是否為奇數,若為偶數,則校驗通過,認為數據傳輸正確;若為奇數,則校驗失敗,認為數據傳輸錯誤。
2.3 缺點
??奇偶校驗碼在數據傳輸的過程中僅增加了1位的冗余,所增加的額外開銷小,但檢錯能力有限,若出錯的數據個數為偶數,則無法檢測出來錯誤。
二、舉個例子
??假設在發送端需要傳輸一個二進制序列11100001。
3.1 奇校驗例子
??若為奇校驗,此時序列中“1”的個數為偶數,發送端增加的校驗位應為1。在接收端,接收到的序列中“1”的總個數為奇數,取出有效數據。
3.2 偶校驗例子
??若為偶校驗,此時序列中“1”的個數為偶數,發送端增加的校驗位應為0。在接收端,接收到的序列中“1”的總個數為偶數,取出有效數據。
3.3 檢測出錯例子
??采用奇校驗,在傳輸過程中出現了2比特的錯誤,但是在接收端統計“1”的個數仍為奇數,認為接收到數據無誤,實際上數據有誤。
三、FPGA實現
??以下為奇偶校驗碼的Verilog實現代碼,由于較為簡單,這里不提供仿真環境。
module parity_check
#(parameter DW = 8
)
(input clk , input rst_n ,input [DW-1 :0] data_in ,input mode , // 0:偶校驗 1:奇校驗output reg [DW :0] data_out ,output reg parity_bit
);always @(posedge clk) begindata_out <= mode ? {data_in,(^data_in)} : {data_in,(~(^data_in))};parity_bit <= mode ? (^data_in) : (~(^data_in));endendmodule
寫在后面
??本文中我們學習了奇偶校驗的基礎原理,同時給出了奇校驗、偶校驗的例子以及相應的RTL代碼。
🧐:以上為個人學習筆記,如有疑問,歡迎評論區交流探討 !!!
