verilog刷题第一天(奇偶校验)

1.什么是奇偶校验?(验证数据传输的正确性)
通常通过设置一个奇偶校验位,来使需要校验的数据中”1“的个数为奇数或者偶数。
偶校验:数据和校验位中的 ”1“ 的总数为偶数,视为数据无误,否则数据有误。
奇校验:数据和校验位中的 ”1“ 的总数为奇数,视为数据无误,否则数据有误。

2.如何校验?
(1)结论1:^data_in=1,则data_in中有奇数个”1“。
对输入数据进行按位异或(假设输入数据是4位二进制数):^data_in =data_in[0] ^data_in[1] ^data_in[2] ^data_in[3]
比如:

data_in^data_in的值
00110
11011
00011
10010

不难发现,当data_in中”1“的个数为奇数时,^data_in的值为1;
当data_in中”1“的个数为偶数时,^data_in的值为0。

(2)结论2:^data_in的值和偶校验位的值是相同的。
对data_in二进制码中所有的比特位进行求和:
· 当求和结果最低位为1时,data_in中”1“的数量为奇数(^data_in=1),偶校验位应当为1,从而使得data_in和校验位中”1“的总数为偶数。
· 当求和结果最低位为0时,data_in中”1“的数量为偶(^data_in=0),偶校验位应当为0,从而使得data_in和校验位中”1“的总数为偶数。

(3)结论3:数据和校验位满足偶校验的需求,则数据和取反的校验位合起来就能满足奇校验的需求。

3.题目
在这里插入图片描述

4.verilog代码

`timescale 1ns/1ns
module odd_sel(
input [31:0] bus,
input sel,
output check
);
//*************code***********//
wire even_bit;
wire odd_bit;
assign even_bit= ^bus;  //偶校验码
assign odd_bit= ~even_bit;   //奇校验码, 结论3

assign check=sel? even_bit : odd_bit;

//*************code***********//
endmodule

这里需要看题目的波形确定sel为1时,是什么校验。
在这里插入图片描述
分析波形图,可以看到,当sel=1时,check和 ^bus的值相同,根据结论2可知,此时为偶校验;sel=0时,check和 ^bus值相反,为奇校验。所以有assign check=sel? even_bit : odd_bit

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值