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

Gate Delays

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

في الدرس السابق، تناولنا التأخيرات العامة المستخدمة مثل #10 a = b;. وهي تنتظر قبل تنفيذ عبارة.

في هذا الدرس، نتناول تأخيرات gate، وهي خاصة ببدائيات gate المضمّنة مثل and وor وnot. تحاكي تأخيرة gate المدة التي تستغرقها بوابة الأجهزة لإنتاج output بعد تغيّر inputs الخاصة بها.

في الأجهزة الحقيقية، لا تستجيب البوابات فورًا. هناك تأخير صغير. عند استخدام بدائيات البوابات المضمّنة، يمكنك إضافة تأخير لمحاكاة وقت انتشار البوابة. يتغير output فقط بعد التأخير المحدد.

الفرق بين التأخير العام وتأخير البوابة

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

الصياغة:

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

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

مثال بسيط

and #5 (out, a, b);

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

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

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

قواعد مهمة

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

التحدي

Add تأخيرات gate المفقودة إلى هذه الوحدة. استخدم تأخيرات مختلفة لكل gate.

ما يجب فعله:

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

جرّب بنفسك

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اختبر نفسك

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

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

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