FPGA奇偶校验如何设计?代码又该如何实现?
扫描二维码
随时随地手机看文章
FPGA奇偶校验设计和代码实现将是下述内容的主要介绍内容,通过这篇文章,小编希望大家可以对FPGA奇偶校验的相关情况以及信息有所认识和了解,详细内容如下。
一、奇偶校验原理
奇偶校验是一种基本的数据校验方式,其原理是在数据的尾部添加一个位,使得该位和数据中所有1的个数之和为奇数或偶数。由于校验位的加入,使得数据传输中一旦数据错误就能够被检测出来,从而保证了数据的正确性。
奇偶校验的优点是简单、快速,不需要大量计算。但是奇偶校验只能检测出错误,不能纠正错误,因此在实际应用中很少单独使用,通常与其它更加强大的校验方式结合起来使用。
二、FPGA奇偶校验设计
1、多位输入,分别用每位做:与、或、异或
module test(input [3:0] in,output out_and,output out_or,output out_xor);//方法一
assign out_and = in[0] & in[1] & in[2] & in[3];
assign out_or = in[0] | in[1] | in[2] | in[3];
assign out_xor = in[0] ^ in[1] ^ in[2] ^ in[3];//方法二
assign out_and = ∈assign out_or = |in;assign out_xor = ^in;
endmodule
2、奇偶校验测试
奇偶校验只要求出其中一个,另一个取反即得到了。
module parity_check(input [7:0] data_in,input sel,output check);
wire even;// 偶校验
wire odd;// 奇校验
assign odd = ^data_in;
assign even = ~odd;
assign check = (sel)?odd : even;
endmodule
测试激励
module sim();
reg clk;
reg [7:0] data_in;
parity_check u_parity_check (.data_in(data_in),.sel(1'b0));initial begindata_in = 0;
#10 data_in = 8'b1011_1000;
#10 data_in = 8'b1011_0000;
#10 data_in = 8'b1111_1000;
#10 data_in = 8'b1011_1100;
#10 data_in = 8'b1011_1010;
#10 data_in = 8'b1111_1010;
#10 data_in = 8'b1011_1001;
#10 data_in = 8'b1011_1101;
#10 data_in = 8'b1011_1011;
#10 $finish;
endendmodule
仿真测试结果图:
从图中可以看出,仿真测试结果与预期一致。
三、奇偶校验知识拓展之奇偶监督码
奇偶监督码是一种增加二进制传输系统最小距离的简单和广泛采用的方法。例如,单个的奇偶监督将使码的最小距离由一增加到二。
一个二进码字,如果它的码元有奇数个1,就称为具有奇性。例如,码字“1011010111”有七个1,因此,这个码字具有奇性。同样,偶性码字具有偶数个1。注意奇性检测等效于所有码元的模二加,并能够由所有码元的异或运算来确定。对于一个n位字,奇性由式(8-1)给出:
奇性=a0⊕a1⊕a2⊕…⊕an(8-1)
很明显,用同样的方式,我们也能够根据每一个码字的零的个数来构成奇偶监督。
单个的奇偶监督码可描述为:给每一个码字加一个监督位,用它来构成奇性或偶性监督。
在一个典型系统里,在传输以前,由奇偶发生器把奇偶监督位加到每个字中。原有信息中的数字在接收机中被检测,如果没有出现正确的奇、偶性,这个信息标定为错误的,这个系统将把错误的字抛掉或者请求重发。注意,用单个的奇偶监督码仅能检出奇数个码元的错误。
经由小编的介绍,不知道你对FPGA奇偶校验是否充满了兴趣?如果你想对FPGA奇偶校验有更多的了解,不妨尝试度娘更多信息或者在我们的网站里进行搜索哦。