Casex و Casez
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 56 من 90.
في بعض الأحيان، لا يهمك سوى بتات معينة في قيمة ما، بينما يمكن تجاهل البتات الأخرى. على سبيل المثال، في مُرمّز الأولوية (priority encoder)، تريد العثور على أول بت بقيمة 1 بغض النظر عن البتات الأخرى.
ستتطلب منك جملة case العادية إدراج كل تركيبة ممكنة من بتات don't-care — وهو أمر مستحيل بالنسبة للمسارات العريضة (wide buses).
تُعالج <strong>casez</strong> و <strong>casex</strong> هذه المشكلة من خلال السماح لك بتحديد بتات معينة على أنها "لا تهم" (don't care) باستخدام ?، أو z، أو x.
Casez مقابل Casex مقابل Case العادي
| البيان (Statement) | بتات Don't-Care | الأفضل لـ |
|---|---|---|
case | لا يوجد | المطابقة الدقيقة |
casez | z أو ? | مشفّرات الأولوية (موصى به) |
casex | x، z، أو ? | تجنبه (يخفي الأخطاء البرمجية) |
- يتجاهل
<strong>casez</strong>بتات الـzأو?(موصى به) - يتجاهل
<strong>casex</strong>أيضاً بتات الـx— مما قد يخفي أخطاء المحاكاة
استخدم دائماً <strong>casez</strong>، وليس <strong>casex</strong>. تم إنشاء casex أولاً، لكن المهندسين أدركوا أنه خطير لأنه يتجاهل قيم x (والتي تشير غالباً إلى مسجلات غير مهيأة أو أخطاء محاكاة). تم تقديم casez كبديل أكثر أماناً.
مثال
casez (data)
4'b???1: out = 0; // Bit0 must be 1, others don't matter
4'b??1?: out = 1; // Bit1 must be 1, others don't matter
4'b?1??: out = 2; // Bit2 must be 1, others don't matter
4'b1???: out = 3; // Bit3 must be 1, others don't matter
endcaseالحرف ? يعني "don't care" — أي أن تلك البتة يمكن أن تكون 0، أو 1، أو أي شيء آخر.
التحدي
ما يجب فعله:
أضف تعليمات casez المفقودة لجعل هذا المفكك (decoder) يعمل بشكل صحيح.
كيف يعمل:
input = 4'b???1←out = 4'b0001input = 4'b??1?←out = 4'b0010input = 4'b?1??←out = 4'b0100input = 4'b1???←out = 4'b1000- افتراضي ←
out = 4'b0000
جرّب بنفسك
module decoder (
input [3:0] in,
output reg [3:0] out
);
always @(*) begin
// TODO: أضف عبارة casez
// in = 4'b???1 -> out = 4'b0001
// in = 4'b??1? -> out = 4'b0010
// in = 4'b?1?? -> out = 4'b0100
// in = 4'b1??? -> out = 4'b1000
// default -> out = 4'b0000
end
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة