Menu
Coddy logo textTech

XOR XNOR ゲート

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 41/90。

このレッスンでは、さらに2つの論理ゲート、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入力XOR
xnor(out, p, q, r, s);  // 4入力XNOR

例 (3入力XOR):

abcout
0000
0011
0101
0110
1001
1010
1100
1111

一般的な用途

用途
2つのビットが異なるかどうかを比較するxor(diff, a, b)
2つのビットが同じかどうかを比較する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_result、入力 x および y を持つ XOR ゲートを作成します
  2. 出力 xnor_result、入力 x および y を持つ XNOR ゲートを作成します

チートシート

XORは、入力が異なる場合に1を出力します。XNORは、入力が同じ場合に1を出力します。

ゲート出力が1になる条件プリミティブ演算子
XOR入力が異なるxor(out, a, b)^
XNOR入力が同じxnor(out, a, b)~^

複数の入力がある場合:XORは、1である入力の数が奇数のときに1を出力します。XNORは、1である入力の数が偶数のときに1を出力します。

xor(out, a, b, c);      // 3-input XOR
xnor(out, p, q, r, s);  // 4-input XNOR

自分で試してみよう

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腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン