FPGA基础 -- Verilog门级建模之奇偶校验电路
✅ 一、什么是奇偶校验(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、I²C中自定义扩展校验 |
存储系统 | 存储块写入/读取时校验数据完整性 |
✅ 六、设计注意事项
要点 | 说明 |
---|---|
综合建议 | 多输入 XOR 用行为级写法,门级难维护 |
奇偶可选 | 有些系统默认奇校验,有些偶校验,要一致 |
多位数据 | 大于8位可使用 ^data[WIDTH-1:0] 方式扩展 |
与CRC区别 | CRC 是多项式除法,更复杂但更强健,奇偶校验只能检测1位错误 |
✅ 七、扩展方向
- 汉明码(Hamming Code):基于多位奇偶校验位,可定位并纠正1位错误;
- CRC 循环冗余校验:更强纠错能力;
- ECC 内存保护机制:结合奇偶与多重余码用于服务器与关键系统;