博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

奇偶校验--verilog实现

Posted on 2025-03-23 17:41  吃藕哥哥  阅读(252)  评论(0)    收藏  举报

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缺点

增加了额外的开销,因为需要为每一行和每一列都添加奇偶校验位。
不能纠正错误,只能检测错误的存在。