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

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

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

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

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

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

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

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

الصيغة:

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

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

مثال بسيط

and #5 (out, a, b);

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

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

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

قواعد هامة

القاعدةالشرح
يأتي التأخير بعد اسم البوابةand #5 (out, a, b)
قيمة التأخير بوحدات زمنيةبناءً على توجيه timescale
جميع المدخلات تؤثر على المخرجاتأي تغيير في المدخلات يؤدي إلى تفعيل التأخير
غير قابل للتصنيعتأخيرات البوابات مخصصة للمحاكاة فقط
challenge icon

التحدي

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

ماذا تفعل:

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

ورقة مرجعية

تنمذج تأخيرات البوابات (Gate delays) وقت الانتشار في العناصر الأولية للبوابات المدمجة.

الصيغة:

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

أمثلة:

and  #5 (out, a, b);         // AND gate, 5 time unit delay
or   #3 (out, a, b);         // OR gate, 3 time unit delay
not  #2 (out, a);            // NOT gate, 2 time unit delay
nand #8 (out, a, b, c, d);   // 4-input NAND, 8 time unit delay

نقاط رئيسية:

  • تأتي العلامة # بعد اسم البوابة، وقبل قائمة المنافذ (port list)
  • أي تغيير في المدخلات يؤدي إلى تفعيل التأخير قبل تحديث المخرجات
  • تأخيرات البوابات مخصصة للمحاكاة فقط — وليست قابلة للتوليد (not synthesizable)

جرّب بنفسك

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

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

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

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