1、奇偶校验的原理
1.1、奇校验:
就是让原有数据序列中(包括你要加上的一位)1的个数为奇数10001100(0)你必须添0,这样原来有3个1,已经是奇数了,所以你添上0之后,1的个数还是奇数个。
1.2、偶校验:
就是让原有数据序列中(包括你要加上的一位)1的个数为偶数10001100(1)你就必须加1了,这样原来有3个1,要想1的个数为偶数,就只能添1了。
1.3、校验的原理:
假如采用奇校验,发送端发送的一个字符编码(含校验位)中,“1”的个数一定为奇数个,在 接收端对接收字符二进制位中的“1”的个数进行统计,若统计出“1”的个数为偶数个,则意味着传输过程中有1位(或奇数位)发生差错。
1.4、在传输过程中一位出错的机会最多,故奇偶校验法常常采用。
2、校验过程
发送方在数据末尾添加校验位,形成校验单元后发送。接收方收到数据后,重新计算校验位,并与接收到的校验位进行比对。如果两者相同,则认为数据传输正确;如果不同,则意味着在传输过程中出现了错误。
3、类型
3.1、单比特奇偶校验
3.2、两维奇偶校验
4、应用场景
4.1、数据存储
硬盘驱动器和RAM等存储设备也会使用奇偶校验来确保数据的完整性。
4.2、无线通信
无线通信协议如蓝牙和某些Wi-Fi标凈,在帧结构中也会利用奇偶校验位来检测错误。
4.3、ASCII码
ASCII字符编码标准定义了一系列的奇偶校验位,以便在字符传输过程中检测错误。
4.4、数据传输
在串行和并行数据传输中,奇偶校验是最简单的错误检测方法。例如,RS-232标准中就包含了奇偶校验选项。
5、局限性
5.1、无法检测多位错误
奇偶校验无法有效检测两位或多位(偶数位)的错误,因为两个错误可能会互相抵消,使得校验位看起来仍然正确。
5.2、无纠错能力
奇偶校验只能检测错误,但不能确定错误的具体位置,更不能修正错误,需要更高级的错误检测和纠正方法(如CRC、Hamming码等)。
5.3、效率问题
由于需要额外的校验位,奇偶校验会略微降低数据传输的效率。
6、verilog实现
6.1、单比特奇校验
6.1.1、verilog实现
`timescale 1ns/1ns
module even_sel(
input wire[31:0] bus,
input wire sel, //sel为1,输出为奇校验;sel为0,输出为偶校验;
output wire check
);
wire temp;
assign temp = ^bus; //按位异或
assign check = sel?temp:!temp;
endmodule
6.1.2、testbench
`timescale 1ns/1ns
module tb_eveb_sel();
reg [31:0] bus;
reg sel;
wire check;
initial begin
$dumpfile("wave.vcd"); //生成vcd文件名称
$dumpvars(0,tb_eveb_sel); //tb模块名称
end
initial begin
bus = 32'hffff_0000;
sel = 1'b1;
#200
bus = 32'hffff_0001;
sel = 1'b1;
#200
bus = 32'hffff_0001;
sel = 1'b0;
#400;
$stop;
end
even_sel even_sel(
.bus (bus),
.sel (sel),
.check (check)
);
endmodule
6.1.3、仿真结果与分析

从仿真图可以看出:
当sel为1时,为奇校验模式,输入为32'b1111_1111_1111_1111_0000_0000_0000_0000时,共计16个1,输出为0;
当sel为1时,为奇校验模式,输入为32'b1111_1111_1111_1111_0000_0000_0000_0001时,共计17个1,输出为1;
当sel为0时,为偶校验模式,输入为32'b1111_1111_1111_1111_0000_0000_0000_0001时,共计17个1,输出为0;
功能仿真验证pass;
6.2、两维奇偶校验
二维奇偶校验是一种用于检测数据传输或者存储中错误的技术。它通过在数据的行和列上添加额外的就校验位来实现。这种技术不仅可以检测单个错误,还能检测某些模式下的多个错误。
6.2.1、基本原理
数据组织:首先将数据组织成一个二维矩阵(即表格形式),其中包含原始的数据位。
行校验:对于每一行的数据位,计算其奇偶性(即1的数量是奇数还是偶数),然后添加一个额外的校验位以确保每一行的1的总数满足预设的奇偶性要求(奇校验或偶校验)。
列校验:同样地,对每一列的数据位执行相同的操作,并添加额外的校验位。
错误检测:当接收方接收到数据时,会重新计算每行和每列的奇偶校验值,并与接收到的校验位进行比较。如果存在不匹配,则表示传输过程中发生了错误。
6.2.2、优点
能够检测出几乎所有类型的单比特错误。
对于某些特定模式下的多比特错误也能进行检测。
6.2.3缺点
增加了额外的开销,因为需要为每一行和每一列都添加奇偶校验位。
不能纠正错误,只能检测错误的存在。
浙公网安备 33010602011771号