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

ما هي التأخيرات

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

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

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

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

  • في المحاكاة، وبدون فترات التأخير (delays)، يحدث كل شيء في الوقت 0
  • تتيح لك فترات التأخير (delays) المباعدة بين الأحداث عبر الزمن
  • تساعد في اختبار التصاميم الحساسة للتوقيت مثل الساعات الآلية (clocks) وآلات الحالات (state machines)

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

نوع التأخيرالغرض
تأخيرات البواباتالتأخير عبر البوابات المنطقية
تأخيرات التعيينالتأخير عند تعيين القيم
توجيه Timescale Directiveيحدد time units للمحاكاة

البنية الأساسية (Basic Syntax)

يتم كتابة التأخير (delay) باستخدام # متبوعاً برقم:

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

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

مثال بسيط

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

Delays in Always Blocks

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

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

قواعد هامة

القاعدةالشرح
رمز #يمثل التأخير (delay)
الرقم بعد #عدد وحدات الوقت المراد انتظارها
التأخيرات تراكمية#10 ثم #20 ينتظر في المجموع 30
غير قابلة للتصنيع (Not synthesizable)التأخيرات مخصصة للمحاكاة فقط
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اختبر نفسك

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

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