逻辑运算与按位运算

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移位后,自身按位异或
④.减少翻转次数(减少电磁干扰)

  一组数据中0的个数多,异或减少翻转次数

   一组数据中1的个数多,同或减少翻转次数

  例子如下:

   

posted @ 2022-09-24 11:29  little_breeze  阅读(849)  评论(1编辑  收藏  举报