verilog异或的问题

小弟初学verilog,遇见一个代码搞不懂,代码如下:
assign p = ^ im_y[3:0];
这里面异或符号^是什么意思?异或不是要放在两个值之间吗?
如果做奇偶验证的话,当im_y=1001时,p=0,当im_y=1101时,p=1,但是这两个im_y都是奇数啊。。。谁能详细解释一下,谢谢!

异或运算可交换,可结合,因此定义如下运算

^ im_y[3:0] := im_y[3] ^ im_y[2] ^ im_y[1] ^ im_y[0]

印象中是叫缩合
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-05
p=im_y[3]^im_y[2]^im_y[1]^im_y[0]的意思 可用来做奇偶验证
第2个回答  推荐于2016-01-12
与、或、非以及异或等既可以作为位运算符,也可以作为一元约减运算符。作为位运算符时,除了“非”以外都是双目运算符,需要两个操作数;作为一元约减运算符时是单目运算符,即将操作数的第一位与第二位运算,得到结果与第三位运算……依次类推,最后得到一位运算结果。
正常情况下,你说的“当im_y=1001时,p=1,当im_y=1101时,p=0”这种结果是不会出现的,im_y=1001时p会等于0。
p=im_y[3]^im_y[2]^im_y[1]^im_y[0].
当im_y=1001时,p=1^0^0^1=0;当im_y=1101时,p=1^1^0^1=1.
这个的确是奇偶校验功能,偶数个1结果为0,奇数个1结果为1。这个奇偶校验称为偶一致监督码。意思就是原信息im_y具有偶数个1,加上校验位p=0以后依然为偶数个1,原信息im_y具有奇数个1,加上校验位p=1以后也变成偶数个1。在接收端,如果接收到的码字不是偶数个1,则可以断定出现了误码。本回答被提问者采纳
相似回答