Verilog语法中的运算有逻辑运算和按位运算两种:
逻辑运算:把多位操作数视为1位,多位中有1就视为1,否则视为0 ,其结果为 0 / 1 / x 三种 。
按位运算:对应的每一位分别求xx ,结果仍为多位数 。
如:(按位:a & b ;逐位:& a)
|:或门运算 (按位求或) ;
||:逻辑或运算 ;
&:与门运算 (按位求与) ;
&& :逻辑与运算 ;
~:非门运算(按位求反) ;
!:逻辑求反 ;
^:按位异或 ;(a^b对应位异或;^a则是a的每一位按位逐一进行异或:如a= 3‘b101,则 ^a = 1 ^ 0 ^ 1 = 0)
~(^):按位同或 ;
注意:
①位宽不同的数按位运算,低位宽的未定义位自动补0 ;
②
异或的作用:(参考:异或 ^ 的几个作用 - dangg - 博客园 (cnblogs.com))
①交换两个数a,b的数值::a=a^b; b=b^a; a=a^b;
如:
a = 9;
b = 11;
a=a^b; 1001^1011=0010
b=b^a; 1011^0010=1001
a=a^b; 0010^1001=1011
a = 11;
b = 9;
②判定一个数a中1的个数是奇偶:^a (结果为0,则偶,否则为奇)
如a=4'b1010,则b=1^0^1^0=0
③格雷码与二进制转换:
格雷码:一个数列集合,相邻两数间只有一个位元改变,为无权数码,且格雷码的顺序不是唯一的。
Ⅰ.二进制转格雷码:最高位保留,次高位与次次高位异或得次高位,以此类推。
实现:gray=(binary>>1)^binary
Ⅱ.格雷码转二进制:最高位保留,二进制高一位于格雷码低一位异或得到二进制低一位。(见图)
实现://------假设 reg [n-1] gray,binary;
integer i; for(i=0;i<=n-1;i=i+1) binary[i]= ^(gray>>i)//gray移位后,自身按位异或标签:格雷,逻辑运算,运算,二进制,异或,按位 From: https://www.cnblogs.com/fbur/p/16725017.html