Create a module that implements an XNOR gate.
创建一个实现 XNOR 门的模块。
Module Declaration
module top_module( input a, input b, output out );
The bitwise-XOR operator is ^
. There is no logical-XOR operator.
按位异或运算符是 ^。没有逻辑异或运算符。
module top_module(
input a,
input b,
output out );
assign out = a ^ b;
endmodule
module top_module(
input a,
input b,
output out );
assign out = ~(a ^ b);
endmodule
◆逻辑操作符
逻辑操作符主要有 3 个:
&&(逻辑与), ||(逻辑或),!(逻辑非)。
逻辑操作符的计算结果是一个 1bit 的值,0 表示假,1 表示真,x 表示不确定。
如果一个操作数不为 0,它等价于逻辑 1;如果一个操作数等于 0,它等价于逻辑 0。如果它任意一位为 x 或 z,它等价于 x。
如果任意一个操作数包含 x,逻辑操作符运算结果不一定为 x。
逻辑操作符的操作数可以为变量,也可以为表达式。例如:
A = 3;
B = 0;
C = 2'b1x ;
A && B // 为假
A || B // 为真!
A // 为假
! B // 为真
A && C // 为X,不确定
A || C // 为真,因为A为真
(A==2) && (! B) //为假,此时第一个操作数为表达式
◆按位操作符
按位操作符包括:取反(~),与(&),或(|),异或(^),同或(~^)。
按位操作符对 2 个操作数的每 1bit 数据进行按位操作。
如果 2 个操作数位宽不相等,则用 0 向左扩展补充较短的操作数。
取反操作符只有一个操作数,它对操作数的每 1bit 数据进行取反操作。下图给出了按位操作符的逻辑规则。
&(与) | 0 | 1 | x | |(或) | 0 | 1 | x | |
0 | 0 | 0 | 0 | 0 | 0 | 1 | x | |
1 | 0 | 1 | x | 1 | 1 | 1 | 1 | |
x | 0 | x | x | x | x | 1 | x |
^(异或) | 0 | 1 | x | ~^(同或) | 0 | 1 | x | |
0 | 0 | 1 | x | 0 | 1 | 0 | x | |
1 | 1 | 0 | x | 1 | 0 | 1 | x | |
x | x | x | x | x | x | x | x |
与:全1则1,有0则0
或:全0则0,有1则1
异或:相同为0,不同为1
同或:相同为1,不同为0
A = 4'b0101 ; 5
B = 4'b1001 ; 9
C = 4'bx010 ; 10 2
~A //4'b1010 取反
A & B //4'b0001 与
A | B //4'b1101 或
A ^ B //4'b1100 异或
A ~^ B //4'b0011 同或
B | C //4'b1011 或
B & C //4'bx000 与