奇偶校验的学习记录

简单理解就是,奇校验就是数据中1的个数是加上奇偶校验位位1,一共奇数个1;此时判断奇偶校验结果为正确;

如数据是10101010共8位有4个1,加上奇校验位是1,一共奇数个1,此时奇偶校验判断结果输出为0,即奇偶校验输出没问题。

偶校验一样。

`timescale 1ns/1ns
module odd_sel(
input [31:0] bus,
input sel,
output check
);
reg check;
//*************code***********//
    wire reg_check;
    assign reg_check = ^bus;
 //   assign check = sel?reg_check:~reg_check;
    always@(*) begin
        if (sel==1'b1) 
            check = reg_check;
        else
            check = ~reg_check;
    end
//*************code***********//
endmodule

知识点:

  • 判断数据中有奇数个1还是偶数个1,用异或。如进入的数据data_in=8'b0101_0101;

r_check = ^data_in = data_in[7]^data_in[6]^data_in[5]^data_in[4]^data_in[3]^data_in[2]^data_in[1]^data_in[0]

结果为1,则有奇数个1;

结果为0,则有偶数个1;

  • 判断数据中是否有1,用与逻辑;

有1,相与后结果为1;否则为0

  • 判断数据中是否有0,用或逻辑;

有0,相与后结果为0;否则为1