بوابات XOR و XNOR
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 41 من 90.
يتناول هذا الدرس بوابتين منطقيتين إضافيتين: XOR (أو الحصرية) و XNOR (NOR الحصرية). تفيد هاتان البوابتان في مقارنة البتات والتحقق من التكافؤ (parity checking).
بوابة XOR
تعطي بوابة XOR القيمة 1 عندما تكون المدخلات مختلفة.
جدول الحقيقة (مدخلان):
| 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 عندما تكون المدخلات same (متماثلة). وهي عكس بوابة XOR.
جدول الحقيقة (بمدخلين):
| a | b | out |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
العنصر الأولي للبوابة في Verilog:
xnor(out, a, b);مكافئ الإسناد المستمر:
assign out = a ~^ b; // أو ~(a ^ b)مدخلات متعددة
يمكن لبوابات XOR و XNOR أن تحتوي على أكثر من مدخلين (2). يكون الخارج (output):
- XOR: 1 إذا كان عدد المدخلات التي قيمتها 1 فردياً
- XNOR: 1 إذا كان عدد المدخلات التي قيمتها 1 زوجياً
xor(out, a, b, c); // XOR بـ 3 مدخلات
xnor(out, p, q, r, s); // XNOR بـ 4 مدخلاتمثال (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جدول الملخص
| Gate | الـ Output يساوي 1 عندما | Primitive | المعامل |
|---|---|---|---|
| XOR | المدخلات مختلفة | xor(out, a, b) | ^ |
| XNOR | المدخلات تكون same | xnor(out, a, b) | ~^ |
التحدي
قم بـ `Add` بوابات primitives المفقودة بناءً على المهام.
ما يجب القيام به:
- أنشئ بوابة `XOR` بـ `output` يسمى
xor_resultو `input` هماxوy - أنشئ بوابة `XNOR` بـ `output` يسمى
xnor_resultو `input` هما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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة