当前位置: 首页 > news >正文

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 内存保护机制:结合奇偶与多重余码用于服务器与关键系统;
http://www.lryc.cn/news/571433.html

相关文章:

  • ollama部署开源大模型
  • VS和VS Code 对比和区别
  • 【图像处理入门】9. 基础项目实战:从去噪到图像加密
  • 计算机视觉课程笔记-机器学习中典型的有监督与无监督学习方法的详细分类、标签空间性质、解释说明,并以表格形式进行总结
  • 论文笔记 <交通灯> IntelliLight:一种用于智能交通灯控制的强化学习方法
  • 2025年- H82-Lc190--322.零钱兑换(动态规划)--Java版
  • 海康威视GigE工业相机的python调用demo
  • 2.8 获取IMU数据与航向锁定
  • Kafka 4.0.0集群部署
  • 二十四、【用户管理与权限 - 篇六】前端动态展现:基于权限的菜单与按钮控制
  • Leetcode-​2537. 统计好子数组的数目​
  • SALMONN-omni论文阅读
  • Datawhale YOLO Master 第1次笔记
  • 利用Enigma Virtual Box将QT生成的软件打包成一个exe可执行文件
  • 第100+42步 ChatGPT学习:R语言实现阈值调整
  • uniapp + vite + ts出现红色波浪线,各种ts报错
  • LeetCode--33.搜索旋转排序数组
  • 探秘KingbaseES在线体验平台:技术盛宴还是虚有其表?
  • List、Queue、Deque、Stack常用方法总结
  • 论文笔记:Trajectory generation: a survey on methods and techniques
  • DELL R730XD服务器调整风扇转速
  • python+uniapp微信小程序的共享雨伞租赁系统
  • [特殊字符]华为总部参观预约|企业通道揭秘
  • MySQL 中 DISTINCT 去重的核心注意事项详解
  • MSPM0G3507学习笔记(二) 超便捷配置led与按键
  • ffmpeg webm 透明通道视频转成rgba图片
  • 基于最新豆包大模型1.6实现 ArXiv Paper Reading MCP与Agent构建
  • C++ map代码练习 1、2、priority_queue基础概念、对象创建、数据插入、获取堆顶、出队操作、大小操作,自定义结构、代码练习 1 2
  • 电机及驱动器的安全、性能和能效认证
  • 02 ( chrome 浏览器插件, 立马翻译), 搭建本地 api