用最简单的语言来描述奇偶校验
时间:10-27 08:33 阅读:975次
*温馨提示:点击图片可以放大观看高清大图
简介:奇校验:数据位中1的个数 + 校验位1的个数(校验位为0或者1) = 奇数
偶校验:数据位中1的个数 + 校验位1的个数(校验位为0或者1) = 偶数
奇校验:数据位中1的个数 + 校验位1的个数(校验位为0或者1) = 奇数
偶校验:数据位中1的个数 + 校验位1的个数(校验位为0或者1) = 偶数
有了上面的认识,我们就可以得出下面的结论:
1、奇校验时:
如果数据位中1的个数为奇数,则校验位为0(校验位为主机发送)
如果数据位中1的个数为偶数,则校验位为1(校验位为主机发送)
2、偶校验时:
如果数据位中1的个数为奇数,则校验位为1(校验位为主机发送)
如果数据位中1的个数为偶数,则校验位为0(校验位为主机发送)
在用verilog来设计UART时,校验位的判断如下:
接收模块(pari_odd为奇校验标志,pari_even为偶校验标志,rec_data为接收到的8bit数据):
if(((pari_odd) & ((^rec_data) == (~rx_in))) | ((pari_even) & ((^rec_data) == rx_in)))
data_error <= 1'b0;
else
data_error <= 1'b1;
发送模块(pari_odd为奇校验标志,pari_even为偶校验标志,data_temp为要发送的8bit数据):
if(pari_odd & (^data_temp))
tx <= 1'b0;
if(pari_odd & (~(^data_temp)))
tx <= 1'b1;
if(pari_even & (^data_temp))
tx <= 1'b1;
if(pari_even & (~(^data_temp)))
tx <= 1'b0;
注:^rec_data为按位异或,如果rec_data中1的个数为奇数,则^rec_data = 1,否则^rec_data = 0;