题解 | #奇偶校验#

奇偶校验

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;
全部评论

相关推荐

10-31 13:04
南华大学 Java
嵌入式的小白:很多面试,面试前不会去打扰cto的,但一般cto不会在这些小事上刷人,只能说这个cto比较操心,啥重要不重要,紧急不紧急的,估计都会过问,平淡看待吧
点赞 评论 收藏
分享
头像
10-27 15:50
门头沟学院 Java
想进开水团喝开水:有一种店 只能外卖 不能堂食 你猜为什么
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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