Menu
CoddyTech

异或门和同或门

本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 41 课,共 90 课。

本课将介绍另外两种逻辑门:XOR(异或)和 XNOR(同或)。这些逻辑门可用于比较位和检查奇偶性。

XOR 门

当输入不同时,XOR 门会输出1。

真值表(2 输入):

about
000
011
101
110

Verilog 门原语:

xor(out, a, b);

等效的连续赋值:

assign out = a ^ b;

XNOR 门

当输入相同时,XNOR 门会输出 1。它与 XOR 相反。

真值表(2 输入):

about
001
010
100
111

Verilog 门原语:

xnor(out, a, b);

等效的连续赋值:

assign out = a ~^ b;   // 或 ~(a ^ b)

多个输入

XOR 和 XNOR 门可以有多于 2 个输入。输出为:

  • XOR:如果有奇数个输入为 1,则输出 1
  • XNOR:如果有偶数个输入为 1,则输出 1
xor(out, a, b, c);      // 3 输入异或门
xnor(out, p, q, r, s);  // 4 输入同或门

示例(3 输入 XOR):

abcout
0000
0011
0101
0110
1001
1010
1100
1111

常见用途

用途示例
比较两个位是否不同xor(diff, a, b)
比较两个位是否相同xnor(same, a, b)
生成奇偶校验位(1 的数量为奇数)xor(parity, data[0], data[1], data[2], data[3])
检查奇偶校验(1 的数量为偶数)xnor(parity, data[0], data[1], data[2], data[3])

代码示例

module xor_xnor_demo (
  input a, b,
  output xor_out,
  output xnor_out
);
  xor(xor_out, a, b);
  xnor(xnor_out, a, b);
endmodule

汇总表

逻辑门输出为 1 的条件原语运算符
XOR输入不同xor(out, a, b)^
XNOR输入相同xnor(out, a, b)~^
challenge icon

挑战

根据任务添加缺失的门原语。

要做什么:

  1. 创建一个 XOR 门,输出为 xor_result,输入为 x 和 y
  2. 创建一个 XNOR 门,输出为 xnor_result,输入为 x 和 y

亲手试试

module xor_xnor_challenge (
  input x,
  input y,
  output xor_result,
  output xnor_result
);
  
  // TODO: 添加 XOR 门(xor_result = x ^ y)
  
  // TODO: 添加 XNOR 门(xnor_result = x ~^ y)

endmodule
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Verilog 在线编译器