image.png

    1. `timescale 1ns/1ns
    2. module odd_sel(
    3. input [31:0] bus,
    4. input sel,
    5. output check
    6. );
    7. //---------------code-----------------//
    8. // Method 1:
    9. wire check_tmp;
    10. assign check_tmp = ^bus;
    11. assign check = sel ? check_tmp : !check_tmp;
    12. // Method 2:
    13. reg check_reg;
    14. always @(*) begin
    15. if(sel) begin
    16. check_reg <= ^bus;
    17. end
    18. else begin
    19. check_reg <= !(^bus);
    20. end
    21. end
    22. assign check = check_reg;
    23. // Method 3:
    24. wire check_tmp;
    25. reg check_reg;
    26. assign check_tmp = ^bus;
    27. always @(*) begin
    28. if(sel) begin
    29. check_reg <= check_tmp;
    30. end
    31. else begin
    32. check_reg <= !check_tmp;
    33. end
    34. end
    35. assign check = check_reg;
    36. //---------------code-----------------//
    37. endmodule

    使用单目运算符可以检测是否全为1,是否全为0,还可以进行奇偶校验,具体可以参考: 2.3 运算符和表达式【重点】

    注: 根据波形图可以看出,当sel为1的时候,检查的结果就是奇偶校验后的结果; 当sel为0的时候,检查的结果就是奇偶校验取反后的结果。