`timescale 1ns/1ns
module odd_sel(
input [31:0] bus,
input sel,
output check
);
//*************code***********//
assign check=(sel==1)? ^bus :~^bus ;


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

题目出很模糊,理清楚想问啥就花费了大量时间,与FPGA探索者说的一样与其说奇偶校验,不如说是校验奇偶。

根据波形图把bus输入的数据转换成二进制的数,可以发现。

当sel是1的时候 如果奇数个1 则输出高电平 如果偶数个1,则输出低电平 也就是题目中所说的奇校验。

当sel是0的时候 与上面相反

已知 缩减操作符 ^ 是按位缩减异或

那么C=^bus 就可以得到如果bus有奇数个1,则结果C为高电平.

举例子 bus是5 二进制是0101 有偶数个1

^bus结果是0