XOR XNOR 게이트
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 41번째.
이 레슨에서는 두 가지 추가 논리 게이트인 XOR(배타적 논리합)과 XNOR(배타적 부정 논리합)을 다룹니다. 이 게이트들은 비트 비교 및 패리티 체크에 유용합니다.
XOR 게이트
XOR 게이트는 입력이 서로 다를 때 1을 출력합니다.
진리표 (2-입력):
| a | b | out |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Verilog 게이트 프리미티브:
xor(out, a, b);연속 할당문(Continuous assignment) 동등 표현:
assign out = a ^ b;XNOR 게이트
XNOR 게이트는 입력이 서로 같을 때 1을 출력합니다. 이것은 XOR의 반대입니다.
진리표 (2-입력):
| a | b | out |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Verilog 게이트 프리미티브:
xnor(out, a, b);연속 할당문(Continuous assignment) 동등 표현:
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):
| a | b | c | out |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 |
| 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 |
일반적인 용도
| 용도 | 예시 |
|---|---|
| 두 비트가 서로 다른지 비교 | 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) | ~^ |
챌린지
작업 내용에 따라 누락된 게이트 프리미티브(gate primitives)를 추가하세요.
수행할 작업:
- 출력이
xor_result이고 입력이x와y인 XOR 게이트를 생성하세요. - 출력이
xnor_result이고 입력이x와y인 XNOR 게이트를 생성하세요.
치트 시트
XOR는 입력이 다를 때 1을 출력합니다. XNOR는 입력이 같을 때 1을 출력합니다.
| 게이트 | 출력이 1인 경우 | 프리미티브(Primitive) | 연산자 |
|---|---|---|---|
| XOR | 입력이 다를 때 | xor(out, a, b) | ^ |
| XNOR | 입력이 같을 때 | xnor(out, a, b) | ~^ |
다중 입력의 경우: XOR는 1인 입력의 개수가 홀수일 때 1을 출력하며, XNOR는 1인 입력의 개수가 짝수일 때 1을 출력합니다.
xor(out, a, b, c); // 3-입력 XOR
xnor(out, p, q, r, s); // 4-입력 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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.