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

奇偶校验码原理与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.dtcms.com/a/316052.html

相关文章:

  • Java 配置文件深度解析:application.properties 与 application.yml 全方位对比
  • 制氧机语音控制方案设计以及使用场景
  • 北京JAVA基础面试30天打卡02
  • 浮雕软件Artcam安装包百度云网盘下载与安装指南
  • Linux-Day11.WEB服务,虚拟主机
  • 布控球是什么?布控球有什么作用?什么场景下会使用到布控球设备?一篇短文带你了解
  • 人工智能之数学基础:利用全概率公式如何将复杂事件转为简单事件
  • 寿司:米粒里藏着的鲜与巧
  • Java 大视界 -- Java 大数据在智能医疗电子病历数据分析与临床决策支持中的应用(382)
  • 【测试报告】Hsu营销平台系统 - 测试报告
  • 嵌入式#define __assert __assert写法解析
  • 起落架大型结构件深孔测量探究 - 激光频率梳 3D 轮廓检测
  • 智慧会所:科技赋能,开启休闲新体验
  • 解决 Windows 下的“幽灵文件”——记一次与带空格的 .gitignore 文件的艰难斗争
  • PDF 文本提取技术深度对比:基于规则与基于模型的两种实现
  • 向量范数与矩阵范数
  • ThingsKit Edge是什么?
  • 论文阅读: Mobile Edge Intelligence for Large LanguageModels: A Contemporary Survey
  • 小杰数据结构——题库——拂衣便欲沧海去,但许明月随吾身
  • echarts在前后端分离项目中的实践与应用
  • mysql强制区分大小写进行查询用BINARY
  • CodeRush AI 助手进驻 Visual Studio:AiGen/AiFind 亮相(四)
  • GoLand 项目从 0 到 1:第五天 —— 角色权限中间件实现与事务控制
  • Java学习第一百零六部分——Lucene
  • python开发环境安装多系统完整版
  • laravel在cli模式下输出格式漂亮一些
  • python的高校班级管理系统
  • 【计组】数据的表示与运算
  • Linux动静态库的理解
  • 探秘MOBILITY China 2026,新能源汽车与智慧出行的未来盛宴