Verilog HDL按位操作符与归约操作符的区别

以下来自百度知道:http://zhidao.baidu.com/question/420476218.html

按位是二元操作符,是将操作符两边的操作数进行 操作符所规定的运算 ,

例如:a & b(a=1,b=1),出来结果为1;
归约是一元操作符,是将操作数的几个bit位当成1bit的操作数进行操作符所规定的运算,
例如:a=4’b1101,则 &a= 1&1&0&1 =0
具体到程序综合的时候,综合工具会根据你操作数的多少来区分你的意图

以下来自:http://www.dzsc.com/data/html/2007-4-30/28721.html
归约操作符在单一操作数的所有位上操作,并产生1位结果。





 归约操作符有:


& (归约与)

如果存在位值为0, 那么结果为0;若如果存在位值为x或z,结果为x;否则结果为1。

~& (归约与非)

与归约操作符&相反。

 (归约或)


如果存在位值为1,那么结果为1;如果存在位x或z,结果为x;否则结果为0。

~ (归约或非)

与归约操作符相反。

^ (归约异或)

如果存在位值为x或z,那么结果为x;否则如果操作数中有偶数个1, 结果为0;否则结果为1。

~^ (归约异或非)

与归约操作符^正好相反。


如下所示。假定,
A = 'b0110;
B = 'b0100;
那么
:
B 结果为1

& B 结果为0

~ A 结果为1

归约异或操作符用于决定向量中是否有位为x。
假定,
MyReg = 4'b01x0;
那么
:
^MyReg 结果为x
  
上述功能使用如下的if语句检测:


if (^MyReg = = = 1'bx)
$ display ("There is an unknown in the vector MyReg !")


注意逻辑相等(==)操作符不能用于比较;
逻辑相等操作符比较将只会产生结果x。全等操作符期望的结果为值1。
原文地址:https://www.cnblogs.com/youngforever/p/3123253.html