Menu
CoddyTech

Casex وCasez

جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 56 من 90.

أحيانًا لا تهتم إلا ببتات محددة في قيمة ما، بينما يمكن تجاهل البتات الأخرى. على سبيل المثال، في مُرمِّز الأولوية، تريد العثور على أول بت 1 بغض النظر عن البتات الأخرى.

سيتطلب منك بيان case عادي سرد كل التركيبات الممكنة للبتات غير المهمة، وهذا مستحيل مع الناقلات العريضة.

casez و casex يحلان هذه المشكلة من خلال السماح لك بتحديد بعض البتات على أنها «لا تهم» باستخدام ? أو z أو x.

Casez مقارنةً بـ Casex و Case العادية

العبارةالبتات التي لا تهمالأفضل لـ
caseلا شيءالمطابقة التامة
casezz أو ?مشفّرات الأولوية (موصى بها)
casexx أو z أو ?تجنّبها (تخفي الأخطاء)
  • casez يتجاهل البتات التي تكون z أو ? (موصى به)
  • casex يتجاهل أيضًا البتات x، مما قد يخفي أخطاء المحاكاة

استخدم دائمًا casez، وليس casex. إن casex خطير لأنه يتجاهل قيم x (التي غالبًا ما تشير إلى سجلات غير مهيأة أو أخطاء في المحاكاة). ويُعد casez البديل الأكثر أمانًا لأنه لا يتعامل مع x على أنها قيمة لا تهم.

مثال

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

تعني ? «لا يهم». يمكن أن يكون هذا البِت 0 أو 1 أو أي قيمة.

challenge icon

التحدي

ما الذي يجب فعله:

أضف عبارة casez المفقودة لجعل وحدة فك الترميز هذه تعمل.

كيف تعمل:

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

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

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

تدرّب بنفسك: مترجم Verilog عبر الإنترنت