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

奇偶校验码原理与FPGA实现

奇偶校验码原理与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代码。


🧐:以上为个人学习笔记,如有疑问,欢迎评论区交流探讨 !!!

http://www.xdnf.cn/news/17043.html

相关文章:

  • ubuntu自动重启BUG排查指南
  • Android 性能基准测试(Benchmark)完全指南:专业方法与最佳实践
  • 【RK3576】【Android14】Uboot下fastboot命令支持
  • 磁悬浮转子振动控制:主动电磁力如何成为高速旋转的“振动克星”
  • 基于Java AI(人工智能)生成末日题材的实践
  • 【docker】UnionFS联合操作系统
  • 《Linux编译器:gcc/g++食用指南》
  • 面试题:前端权限设计
  • # Kafka 消费堆积:从现象到解决的全链路分析
  • Spring小细节
  • lesson32:Pygame模块详解:从入门到实战的2D游戏开发指南
  • 关于为什么ctrl c退不出来SecureCRT命令行的原因及其解决方法:
  • 【25-cv-23395】宠物/婴儿玩具品牌BESTSKY商标维权!
  • MinIO02-Docker安装
  • STM32内部读写FLASH
  • “Why“比“How“更重要:层叠样式表CSS
  • 计算机网络:详解路由器如何转发子网数据包
  • MySQL 查询性能优化与索引失效问题全解析
  • 需求测试用例设计
  • 落霞归雁:从自然之道到“存内计算”——用算法思维在芯片里开一条“数据高速航道”
  • Vue3核心语法进阶(Props)
  • 【C# Winform】 Action事件驱动的多层数据传递
  • 8.5PPT总结各种攻击
  • 37.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--增加Github Action
  • Linux NFS 服务部署、客户端配置及 autofs 自动挂载操作指南
  • 嵌入式硬件中运放内部底层分析
  • 区块链:重构信任的价值互联网革命​
  • CNN卷积神经网络之注意力机制CBAM(六)
  • 【android bluetooth 协议分析 01】【HCI 层介绍 30】【hci_event和le_meta_event如何上报到btu层】
  • uniapp Android App集成支付宝的扫码组件mPaaS