题解 | 奇偶校验
`timescale 1ns/1ns module odd_sel( input [31:0] bus, input sel, output check ); //*************code***********// wire check_tmp; assign check_tmp = ^bus; assign check = sel ? check_tmp : ~ check_tmp ; //*************code***********// endmodule
来源bilibili FPGA探索者的视频详解,代码虽然简单但是写的挺巧妙的。
首先定义了一个 wire类型的检查变量 check_tmp,作为输出的中介变量
第一点是 通过第九行的单目运算符异或 检查输入数据变量bus中间含有1的个数,含有奇数个1 例如 1 0 0 。在两次异或后则为 1
当bus中含有偶数个1 时 如 1 1 0 异或两次输出为 0.
第二点是 通过条件运算符 确定奇偶输出 sel 为1 时 输出check_tmp如果sel 不为 1 时 check_tmp 取反输出。
查看20道真题和解析