奇偶校验
奇偶校验,意思是判断一个向量的若干比特中,1的个数是奇数个还是偶数个,所谓奇校验,是指加上校验位后,使得整个数据中1的个数为奇数个,而偶数校验是指加上校验位之后,整个数据中1的个数为偶数个。因此,奇偶校验的关键就是判断一个向量中,1的个数的奇偶性。
我们来看一个3位的向量101,它的1的个数是偶数个(2个),因此,如果是偶校验,那么校验位应该是0,如果是奇校验,校验位应该是1,而我们发现:
0=1^ 0 ^1 (偶校验)
1=~(1^ 0 ^ 1)(奇校验)
这不是巧合,而是一个普遍规律,因此,我们可以得到奇校验和偶校验校验位的计算公式:
parity=^a (偶校验)
parity=~(^a) (奇校验)
verilog描述
奇校验
module odd_parity(
input logic [7:0] data,
output logic parity
);
assign parity=~(^data);
endmodule
偶校验
module even_parity(
input logic [7:0] data,
output logic parity
);
assign parity=^a;
endmodule