题解 | #奇偶校验#

奇偶校验

https://www.nowcoder.com/practice/67d4dd382bb44c559a1d0a023857a7a6

前言:

    通过牛友们的讨论大概理清了题目要表达的意思,但因为看不懂题设中的波形图,所以无法判断此种解法正误

奇偶校验

奇校验:原始码流+校验位 其中总的1个数为奇数个
偶校验:原始码流+校验位 其中总的1个数为偶数个
注:校验位的目的就是为了让最后1的总数达到想要的奇数个(奇校验)或偶数个(偶校验)
如:
  其中红色字体即为校验位

解读题目

    题目目的:任意给出一组32位的数据流bus,通过sel确定要采用的校验方式(sel=1为偶校验,sel=0为奇校验,注意这里的sel对应关系为正确的,牛友们根据波形判断,发现题设条件给反了,让求在该种校验方式下,我的校验位check应该取何值。

Verilog Code

`timescale 1ns/1ns
module odd_sel(
input [31:0] bus, //数据流
input sel,   //决定使用奇校验还是偶校验,当sel=1时为偶校验,sel=0时为奇校验
output check //奇/偶校验位
);
//*************code***********//
wire is_odd;

assign is_odd = ^bus; //判断bus中1的个数,当1的总数为奇数个时is_odd=1;当1的总数为偶数个时is_odd=0;
assign check = sel ? (is_odd? 1'b1:1'b0):(is_odd? 1'b0:1'b1);

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

知识储备

  1. “^”为异或符号
  2. is_odd = ^bus等价于is_odd = bus[0]^bus[1]^bus[2]^...^bus[30]^bus[31]
  3. 判断一个数(bus)中1的个数是奇数个还是偶数个:奇数个:^bus=1;  偶数个:^bus=0;
全部评论

相关推荐

绝迹的星:前端和后端写两份简历, 如果想干全栈就直接写求职意向为全栈工程师
点赞 评论 收藏
分享
昨天 14:55
门头沟学院 Java
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务