题解 | 奇偶校验
`timescale 1ns/1ns module odd_sel( input [31:0] bus, input sel, output check ); //*************code***********// reg check_odd; reg check_even; always@(*) begin check_odd <= ^bus; check_even <= ~(^bus); end assign check = (sel)? check_odd:check_even; //*************code***********// endmodule
Verilog 中,在变量的前面加 "^" 表示对一个的数据所有 bit 进行异或运算,如果变量包含 '1' 的个数为奇数,则异或的结果为 '1'。
奇偶校验其实就是数一个变量所有 bit 中 '1' 的个数,奇校验表示奇数个 '1' 时输出高电平,偶校验表示偶数个 '1' 时输出高电平。