Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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لا يوجدالمطابقة الدقيقة
casezz أو ?مشفّرات الأولوية (موصى به)
casexx، 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، أو أي شيء آخر.

challenge icon

التحدي

ما يجب فعله:

أضف تعليمات casez المفقودة لجعل هذا المفكك (decoder) يعمل بشكل صحيح.

كيف يعمل:

  • input = 4'b???1out = 4'b0001
  • input = 4'b??1?out = 4'b0010
  • input = 4'b?1??out = 4'b0100
  • input = 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
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات