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

What Are Delays

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

في Verilog، تتحكم التأخيرات في وقت تنفيذ العبارة أو وقت تغيّر الإشارة. وتُستخدم لنمذجة سلوك التوقيت للأجهزة الحقيقية.

لماذا نحتاج إلى التأخيرات

تستغرق الأجهزة الحقيقية وقتًا حتى تنتقل الإشارات عبر الأسلاك والبوابات. تتيح لك التأخيرات محاكاة سلوك التوقيت هذا.

  • في المحاكاة، من دون تأخيرات، يحدث كل شيء عند الزمن 0
  • تتيح لك التأخيرات توزيع الأحداث على امتداد الزمن
  • تساعد في اختبار التصميمات الحساسة للتوقيت مثل clock وآلات الحالات

أنواع التأخيرات

نوع التأخيرالغرض
تأخيرات البواباتالتأخير عبر البوابات المنطقية
تأخيرات التعيينالتأخير عند تعيين القيم
توجيه مقياس الزمنيحدد وحدات الوقت للمحاكاة

البنية الأساسية

تُكتب فترة التأخير باستخدام # متبوعةً برقم:

#10 clk = ~clk;   // انتظر 10 وحدات زمنية، ثم بدّل الساعة
#5 a = b;         // انتظر 5 وحدات زمنية، ثم عيّن a = b

الرقم بعد # هو عدد وحدات time التي يجب انتظارها.

مثال بسيط

initial begin
  a = 0;
  #10 a = 1;   // بعد 10 وحدات زمنية، يصبح a يساوي 1
  #5 a = 0;    // بعد 5 وحدات زمنية أخرى، يصبح a يساوي 0
end

التوقيت:

  • Time 0: a = 0
  • Time 10: a = 1
  • Time 15: a = 0

التأخيرات في كتل Always

always #5 clk = ~clk;   // تبديل الساعة كل 5 وحدات زمنية

ينشئ هذا إشارة ساعة مستمرة (بافتراض أن clk تمت تهيئته first إلى 0 داخل كتلة initial. وإلا فإن ~x تظل x).

القواعد المهمة

القاعدةالشرح
الرمز #يشير إلى تأخير
الرقم بعد #عدد وحدات time التي يجب الانتظار خلالها
التأخيرات تراكميةينتظر #10 ثم #20 ما مجموعه 30
غير قابل للتوليفالتأخيرات مخصصة للمحاكاة فقط
challenge icon

التحدي

ما يجب فعله:

أضف فترات التأخير المفقودة لجعل هذا الرمز يطبع رسائل في الأوقات 0 و10 و25 و40.

جرّب بنفسك

module delay_challenge;
  
  initial begin
    $display("Time %0t: Start", $time);
    // TODO: أضف تأخيراً للوصول إلى الوقت 10
    $display("Time %0t: After first delay", $time);
    // TODO: أضف تأخيراً للوصول إلى الوقت 25
    $display("Time %0t: After second delay", $time);
    // TODO: أضف تأخيراً للوصول إلى الوقت 40
    $display("Time %0t: End", $time);
    $finish;
  end
  
endmodule

quiz iconاختبر نفسك

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

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

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