一、奇偶校验介绍
为了减少代码在形成传输和接收过程中产生错误的可能,常常采用可靠性编码技术,格雷码和奇偶校验码都是都是遵照可靠性事项编制出来的编码技术。格雷码的目的在于不易出错,如果数据已经造成了错误,则希望容易发现错误,甚至能发现出错代码的位置并予以纠正,前者称为检错能力,后者成为纠错能力。奇偶检验码就是一种具有检错能力的可靠性代码。
奇偶校验码分为奇校验码和偶校验码两种,均由信息位和校验位两部分组成。
所谓奇校验码是指,在信息位和校验位中,1的个数之和为奇数;
偶校验码是指在信息位和校验位中,1的个数之和为偶数。
奇偶校验码只能可靠的检一位错,如果由信息位中由多位发生了变化,则可能检不出错。
二、Verilog设计
对于一个n输入异或门(或者n个数据相异或,后文同此)来说:
输入(信息位)中有奇数个1时,输出值(校验位)为1,1的总个数为偶数,满足偶校验定义因此n输入异或门的输出值可以作为偶校验的校验位;
输入(信息位)中有偶数个1时,输出值(校验位)为0,不满足奇校验定义,但将输出值取反的话则满足奇校验的定义,且当输入位中有奇数个1时,输出值取反也满足奇校验的定义,因此可将n输入异或门输出值取反然后将其作为奇校验的校验位。
module ParityGnerator #(parameter N=8
)(
input [N-1:0] Din,
input ParitySelect,
output ParityBit
);
//ParitySelect = 0, even check;ParitySelect = 1, odd check;
assign PariytBit = ParitySelect ? (~ (^Din)):(^Din);
endmodule
三、参考资料
1. 杨淙锟 《数字电子技术基础》第二版 P12,P23.