Menu
CoddyTech

Cổng XOR, XNOR

Thuộc phần Kiến thức nền tảng trong hành trình Verilog của Coddy. Bài học 41 trên 90.

Bài học này giới thiệu thêm hai cổng logic: XOR (OR loại trừ) và XNOR (NOR loại trừ). Các cổng này hữu ích khi so sánh các bit và kiểm tra tính chẵn lẻ.

Cổng XOR

Cổng XOR cho đầu ra là 1 khi các đầu vào khác nhau.

Bảng chân trị (2 đầu vào):

about
000
011
101
110

Cổng nguyên thủy Verilog:

xor(out, a, b);

Tương đương với phép gán liên tục:

assign out = a ^ b;

Cổng XNOR

Cổng XNOR xuất ra 1 khi các đầu vào giống nhau. Nó ngược với XOR.

Bảng chân trị (2 đầu vào):

about
001
010
100
111

Cổng nguyên thủy Verilog:

xnor(out, a, b);

Phép gán liên tục tương đương:

assign out = a ~^ b;   // hoặc ~(a ^ b)

Nhiều đầu vào

Cổng XOR và XNOR có thể có nhiều hơn 2 đầu vào. Đầu ra là:

  • XOR: 1 nếu có số lẻ đầu vào bằng 1
  • XNOR: 1 nếu có số chẵn đầu vào bằng 1
xor(out, a, b, c);      // XOR 3 đầu vào
xnor(out, p, q, r, s);  // XNOR 4 đầu vào

Ví dụ (XOR 3 đầu vào):

abcout
0000
0011
0101
0110
1001
1010
1100
1111

Các cách dùng phổ biến

Cách dùngVí dụ
So sánh xem hai bit có khác nhau khôngxor(diff, a, b)
So sánh xem hai bit có giống nhau khôngxnor(same, a, b)
Tạo bit chẵn lẻ (số lượng bit 1 lẻ)xor(parity, data[0], data[1], data[2], data[3])
Kiểm tra bit chẵn lẻ (số lượng bit 1 chẵn)xnor(parity, data[0], data[1], data[2], data[3])

Ví dụ code

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

Bảng tóm tắt

Cổng logicĐầu ra bằng 1 khiPhép toán nguyên thủyToán tử
XORĐầu vào khác nhauxor(out, a, b)^
XNORĐầu vào giống nhauxnor(out, a, b)~^
challenge icon

Thử thách

Thêm các cổng logic còn thiếu theo yêu cầu.

Cần làm:

  1. Tạo một cổng XOR có đầu ra xor_result và đầu vào x và y
  2. Tạo một cổng XNOR có đầu ra xnor_result và đầu vào x và y

Tự làm thử

module xor_xnor_challenge (
  input x,
  input y,
  output xor_result,
  output xnor_result
);
  
  // TODO: Thêm cổng XOR (xor_result = x ^ y)
  
  // TODO: Thêm cổng XNOR (xnor_result = x ~^ y)

endmodule
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch Verilog online