愛伊米

Verilog數字系統基礎設計-奇偶校驗

Verilog數字系統基礎設計-奇偶校驗

奇偶校驗是一種簡單、實現代價小的檢錯方式,常用在資料傳輸過程中。對於一組並行傳輸的資料(通常為8位元),可以計算岀它們的奇偶校驗位並與其一起傳輸。接收端根據接收的資料重新計算其奇偶校驗位並與接收的值進行比較,如果二者不匹配,那麼可以確定資料傳輸過程中岀現了錯誤;如果二者匹配,可以確定傳輸過程中沒有出錯或者出現了偶數個錯誤(出現這種情況的機率極低)。奇偶校驗包括奇校驗和偶校驗兩種型別。

偶校驗和奇校驗

對於偶校驗,包含校驗位元在內,1的總數是偶數。在奇校驗中,1的總數則為奇數。

例如:

data_in[7:0]=1010_1011

在該資料串中有5個1,偶校驗時,校驗結果為1,這樣1的總個數為偶數;在奇校驗時,校驗位元為0,使得1的總個數為奇數。又如:

data_in[7:0]=0000_1111

在該資料串中有4個1,偶校驗時,校驗結果為0,使得1的總個數仍為偶數;在奇校驗時,校驗位元為1,使得1的總個數為奇數。

奇偶校驗位的生成

將所有的使用者資訊按位元異或可以得到偶校驗結果,將偶校驗結果取反就可以得到奇校驗結果,具體電路如圖6。12所示。

Verilog數字系統基礎設計-奇偶校驗

奇偶校驗的應用

在具體應用奇偶校驗時,在傳送端,奇偶校驗電路計算每一組傳送資料的奇偶校驗位,將其與資料一起傳送;在接收端,奇偶校驗電路重新計算所接收資料的奇偶校驗值,並將其與收到的校驗值進行比較,如果二者相同,可以認為沒有發生錯誤,如果二者不同,可以認為發生了傳輸錯誤。需要說明的是,如果錯誤位元數為偶數(2,4,6等),那麼奇偶校驗是無法發現這類錯誤的。例如,傳送的資料為8’bl010_1011此時計算出的偶校驗值是1。如果在傳輸中位元3和位元2的值從10跳變為01,那麼此時接收到的資料為8’bl0100111,接收的偶餃驗值仍然為1。對接收的資料進行偶校驗計算,得到的結果仍然為1,這與收到的校驗值是相同的,接收電路無法檢測出接收資料中岀現的錯誤。

目前還有很多檢錯能力更強的編碼方式,如CRC(迴圈冗餘校驗)。奇偶校驗常常用在晶片內部資料傳輸或者外部資料匯流排上的資料傳輸中,如傳統的PCI匯流排中就使用了奇偶校驗。CRC更適用於以幀為單位的資料傳輸中(如PCIe)奇偶校驗結果需要和原始資料一起在每個時鐘週期進行傳送,而針對每個幀的CRC校驗結果,通常出現在一個幀的尾部,跟隨資料巾貞一起傳輸。

雖然奇偶校驗能夠發現單位元錯誤,但卻不能糾正任何錯誤。前面描述過的糾錯碼(Error Correction Codes,ECC)可以發現並糾正錯誤。

關於CRC校驗可以檢視之前的文章。

Verilog數字系統基礎設計-奇偶校驗

Verilog數字系統基礎設計-CRC

學習Xilinx FPGA最好的資料其實就是官方手冊,下表總結了部分手冊的主要介紹內容,關注我,持續更新中……

Verilog數字系統基礎設計-奇偶校驗

Verilog數字系統基礎設計-LFSR