تأخيرات البوابات
جزء من قسم الأساسيات في رحلة 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 |
| جميع المدخلات تؤثر على المخرجات | أي تغيير في المدخلات يؤدي إلى تفعيل التأخير |
| غير قابل للتصنيع | تأخيرات البوابات مخصصة للمحاكاة فقط |
التحدي
أضف تأخيرات البوابة المفقودة إلى هذه الوحدة. استخدم تأخيرات مختلفة لكل بوابة.
ماذا تفعل:
- بوابة AND: تأخير قدره 5 وحدات زمنية
- بوابة OR: تأخير قدره 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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية13التوقيت والتأخيرات
ما هي التأخيراتتأخيرات البواباتتأخيرات التعيينتوجيه Timescaleتوليد الساعةمراجعة - التحكم في التوقيت5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة