? 一、什么是奇偶校驗(Parity Check)
📌 定義:
奇偶校驗是一種錯誤檢測編碼方式,用于判斷一個二進制數據在傳輸或存儲過程中是否發生了單比特錯誤。
- 奇校驗(Odd Parity):總共有奇數個
1
- 偶校驗(Even Parity):總共有偶數個
1
通常在數據末尾加一位 P
,構成 (n+1)
位數據:
[原始數據 D0~Dn] + [校驗位 P]
📌 示例:
-
原始數據:
1101
(3個1)- 偶校驗位P=1 → 總共4個1(偶數)
- 奇校驗位P=0 → 總共3個1(奇數)
? 二、奇偶校驗電路結構
📌 奇偶校驗位生成邏輯:
-
偶校驗:
P = D0 ⊕ D1 ⊕ D2 ⊕ ... ⊕ Dn
當總共有偶數個1時,P=0,奇數個1時 P=1 -
奇校驗:
P = ~ (D0 ⊕ D1 ⊕ D2 ⊕ ... ⊕ Dn)
💡 說明:
XOR 是**“奇數個1輸出1”的邏輯,因此非常適合做奇偶校驗**。
? 三、Verilog 實現方式
🔹1. 行為級實現(推薦)
module parity_even_gen #(parameter WIDTH = 8)(input [WIDTH-1:0] data_in,output parity_bit
);assign parity_bit = ^data_in; // 逐位異或,偶校驗endmodule
^data_in
是 Verilog 中的按位歸約異或運算(Reduce XOR)
奇校驗版本:
assign parity_bit = ~^data_in;
🔹2. 門級建模(以4位為例)
module parity_even_gate (input D0, D1, D2, D3,output P // 偶校驗
);wire xor1, xor2, xor3;xor (xor1, D0, D1);xor (xor2, xor1, D2);xor (P, xor2, D3);endmodule
多輸入 XOR 可通過樹狀連接實現。對于硬件綜合而言,通常綜合工具會自動做優化成更淺的邏輯樹。
? 四、奇偶校驗檢測器
除了生成校驗位,還可以做接收端校驗檢查:
module parity_checker (input [7:0] data_in,input parity_bit,output parity_error
);assign parity_error = ^{data_in, parity_bit}; // 總共奇數個1 → 有錯endmodule
偶校驗:最終結果應為0,若為1,則表示奇數個1,說明數據傳輸發生了1位錯誤。
? 五、常見應用場景
應用領域 | 使用說明 |
---|---|
UART 串口通信 | 1 位奇偶校驗位附加在每幀數據尾部 |
DRAM 數據校驗 | ECC中奇偶校驗用于檢測/糾正1位錯誤 |
通訊協議校驗 | SPI、CAN、I2C中自定義擴展校驗 |
存儲系統 | 存儲塊寫入/讀取時校驗數據完整性 |
? 六、設計注意事項
要點 | 說明 |
---|---|
綜合建議 | 多輸入 XOR 用行為級寫法,門級難維護 |
奇偶可選 | 有些系統默認奇校驗,有些偶校驗,要一致 |
多位數據 | 大于8位可使用 ^data[WIDTH-1:0] 方式擴展 |
與CRC區別 | CRC 是多項式除法,更復雜但更強健,奇偶校驗只能檢測1位錯誤 |
? 七、擴展方向
- 漢明碼(Hamming Code):基于多位奇偶校驗位,可定位并糾正1位錯誤;
- CRC 循環冗余校驗:更強糾錯能力;
- ECC 內存保護機制:結合奇偶與多重余碼用于服務器與關鍵系統;