题解 | #奇偶校验#

奇偶校验

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:22
门头沟学院 Java
大厂 测开 24*16离家近的事业编(大概只有大厂的1/4) 硕士
点赞 评论 收藏
分享
11-08 13:58
门头沟学院 Java
程序员小白条:竟然是蓝桥杯人才doge,还要花钱申领的offer,这么好的公司哪里去找
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务