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

تأخيرات البوابات

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

في الدرس السابق، قمنا بتغطية التأخيرات العامة (general delays) المستخدمة مثل #10 a = b; — حيث تنتظر قبل تنفيذ العبارة البرمجية.

في هذا الدرس، سنغطي تأخيرات البوابات (gate delays)، والتي تختص ببوابات البناء الأولية المدمجة مثل and و or و not. ينمذج تأخير البوابة الوقت الذي تستغرقه البوابة المادية لإخراج النتيجة بعد تغير مدخلاتها (inputs).

في العتاد الحقيقي، لا تستجيب البوابات بشكل فوري — بل يوجد تأخير بسيط. عندما تستخدم البوابات الأولية المدمجة (built-in gate primitives)، يمكنك إضافة delay لمحاكاة وقت انتشار البوابة (propagation time). يتغير الـ output فقط بعد الـ delay المحدد.

الفرق بين التأخير العام (General Delay) وتأخير البوابة (Gate Delay)

 General DelayGate Delay
الصياغة (Syntax)#10 a = b;and #5 (out, a, b);
الموقع# قبل العبارة البرمجية# داخل البوابة الأولية (gate primitive)
الغرضالانتظار قبل التنفيذنمذجة وقت انتشار البوابة

الصياغة (Syntax):

gate_type #(delay) (output, input1, input2, ...);

يحدد #(delay) عدد الوحدات الزمنية (time units) التي تستغرقها البوابة (gate) للاستجابة.

مثال بسيط

and #5 (out, a, b);

تستغرق بوابة AND هذه 5 وحدات زمنية لتغيير مخرجها بعد تغيير a أو b.

تأخير البوابة مع مدخلات متعددة

nand #8 (out, a, b, c, d);   // NAND بـ 4 مدخلات مع تأخير 8 وحدات زمنية

قواعد مهمة

القاعدةالشرح
يأتي delay بعد اسم gateand #5 (out, a, b)
قيمة delay بوحدات timeبناءً على توجيه timescale
جميع inputs تؤثر على outputأي تغيير في input يؤدي إلى تشغيل delay
غير قابلة للتخليق (Not synthesizable)تأخيرات gate هي للمحاكاة فقط
challenge icon

التحدي

قم بإضافة تأخيرات البوابات (gate delays) المفقودة إلى هذا الـ module. استخدم تأخيرات مختلفة لكل بوابة.

ما يجب فعله:

  1. بوابة AND: تأخير بمقدار 5 وحدة time
  2. بوابة OR: تأخير بمقدار 3 وحدة time
  3. بوابة NOT: تأخير بمقدار 2 وحدة time

جرّب بنفسك

module gate_delay_challenge;
  reg a, b;
  wire and_out, or_out, not_out;
  
  // TODO: أضف بوابة AND بتأخير 5 وحدات زمنية (المدخلات a, b)
  
  // TODO: أضف بوابة OR بتأخير 3 وحدات زمنية (المدخلات a, b)
  
  // TODO: أضف بوابة NOT بتأخير 2 وحدات زمنية (المدخل a)
  

  initial begin
    $monitor("Time %0t: a=%b, b=%b | and=%b, or=%b, not=%b", 
              $time, a, b, and_out, or_out, not_out);
    
    a = 1; b = 1;
    #10 $finish;
  end
endmodule
quiz iconاختبر نفسك

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

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