1.检测一个长比特的中1的奇偶个数时可以使用按位的的异或;
异或使用符号^,比较前后两个比特相异为零,相同为一。
例如:^3'b110 = 0; (1^1^0=0)表示有偶数个1
^3'b100 = 1;(1^0^0= 1)则表示有奇数个1
1001
所以当对一个完整的比特进行异或时,为零则有偶数个1,为一则有奇数个1。
2.三目运算符“?”(其中a可以是变量,也可以是逻辑表达式(看a是不是等于0))
d = a ? b : c
等价于
if(a = true)
d = b;
else
d = c;
3.当sel想输入为1时,要进行奇校验,所以bus[]加上check(校验位)一共1的个数要为奇数个,所以先通过异或运算运算出bus[]是有奇数个1还是偶数个1,如果有奇数个1那么check为0,就可以保证有奇数个1,则成功进行了奇校验;如果bus[]有偶数个1,那么再加上一个1,就变成奇数个1了,所以给^bus[]取反赋值给check就可以满足条件了。进行偶校验反之亦然。
`timescale 1ns/1ns
module odd_sel(
input [31:0] bus,
input sel,
output check
);
//*************code***********//
assign sel1 = ^bus;
assign check =sel ? sel1 : ~sel1;
//*************code***********//
endmodule
标签:偶数,奇数,bus,奇偶校验,牛客,异或,VL3,sel,check
From: https://blog.csdn.net/2301_79755889/article/details/144008699