`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