Verilog之“异或^”的应用

异或逻辑:相同为0,不同为1。


 一、用于两个整数的数值交换。

若 a = 0x05 (0000_0101),b = 0x0A(0000_1010) ;经以下变换,可完成 值 的交换:

① a=a^b; 0101 ^ 1010= 1111

② b=b^a; 1010 ^ 1111 = 0101

③ a=a^b; 1111 ^ 0101= 1010

最后得:a = 0x0A,b = 0x05。

二、用于奇偶校验。

  ^a:将多位宽数据a中的每一位按位逐一进行 异或,最后结果为1位宽(0或1)。

例如:a=4'b0101,则b=1^0^1^0=0,由此可以得到数据a中为1的位数个数是偶数。

三、用于判断两个数不相等。

a=0x05 (0101), b=0x0A (1010)

当(|(a^b))=1,即a≠b,反之a=b。

 

应用举例——四位数据奇偶校验器

功能:用于检测四位宽数据中1的个数是奇数还是偶数。

Verilog Code:

1 module odd_even
2 (
3 input   wire  [3:0]  data,//4位宽数据输入
4 output  wire         flag //奇偶标志位输出
5 );
6 assign flag = ^data;//按位逐一异或
7 endmodule

 

posted @ 2023-02-18 20:42  cybrave  阅读(2184)  评论(0)    收藏  举报