verilog 中 逻辑与 &&
单比特
多比特
两个4bit的数字相与;A=4'b0x1z;B=4'b01xx;C=4'b00xz;求A&&B;A&&C;是什么值?当逻辑与&&操作符两边的数字均含有“1”,则输出1。
那么怎么判断A、B、C为是否含有“1”呢。当A为0的时候,A等于4'b0,即每位都为0,即只需A的4位矢量之间做一下“逻辑或”运算,A[3] || A[2] || A[1] || A[0],也可写成(|A);当4位矢量中只需有一位为1,那么A就含有“1”。即哪怕A中具有不定态x或者高阻态z,A = 4'b0x1z在逻辑与的判断下会判定为“1”。
故 A && B = 4'b0x1z && 4'b01xx = 1
C = 4'b00xz,其中没有bit位为1,所以在逻辑与的眼中,C为“0”,进而有:
A && C = 4'b0x1z && 4'b00xz = 0
verilog 中 按位与 &
按位与有两种使用方式,一种是双目操作,即一个操作符对应两个操作数A&B;另一种是单目操作,即一个操作符对应一个操作数&A。
双目操作
一个4bit的数和一个4bit的数按位与的结果还是一个4bit数,例如A[3:0] & B[3:0] = { A[3] && B[3] , A[2] && B[2], A[1] && B[1], A[0] && B[0] }
假设A = 4'b10xz;B = 4'b0011;C = 4'bz011;
A & B = 4'b00xx;A & C =4'bx0xx;
单目操作
一个4bit的数对自己进行按位与,输出的结果为1bit的数。
假设A = 4'b10xz;B = 4'b0011;
& A = A[3] && A[2] && A[1] && A[0] = 0
& B = 0
因为4bit数A和B中间都有0,所以A、B按位与结果都为0。
若C = 4'b11xz;则 & C = x