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