تأخيرات البوابات
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 68 من 90.
في الدرس السابق، تناولنا التأخيرات العامة المستخدمة مثل #10 a = b;. فهي تنتظر قبل تنفيذ تعليمة.
في هذا الدرس، سنتناول تأخيرات البوابات، وهي خاصة بالبوابات الأساسية المضمّنة مثل and وor وnot. تحاكي مدة تأخير البوابة الوقت الذي تستغرقه بوابة عتادية لإنتاج خرج بعد تغيّر مدخلاتها.
في العتاد الحقيقي، لا تستجيب البوابات فورًا. يوجد تأخير صغير. عند استخدام بدائيات البوابات المضمنة، يمكنك إضافة تأخير لمحاكاة زمن انتشار البوابة. لا يتغير الخرج إلا بعد التأخير المحدد.
الفرق بين التأخير العام وتأخير البوابة
| التأخير العام | تأخير البوابة | |
|---|---|---|
| الصياغة | #10 a = b; | and #5 (out, a, b); |
| الموضع | # قبل العبارة | # داخل العنصر الأولي للبوابة |
| الغرض | الانتظار قبل التنفيذ | نمذجة زمن انتشار البوابة |
الصياغة:
gate_type #(delay) (output, input1, input2, ...);تحدد #(delay) عدد وحدات الزمن التي تستغرقها البوابة للاستجابة.
مثال بسيط
and #5 (out, a, b);تغيّر بوابة AND خرجها بعد 5 وحدات زمنية من تغيّر a أو b.
تأخير البوابة مع مدخلات متعددة
nand #8 (out, a, b, c, d); // بوابة NAND بأربعة مداخل مع تأخير قدره 8 وحدات زمنيةقواعد مهمة
| القاعدة | التوضيح |
|---|---|
| يأتي التأخير بعد اسم البوابة | and #5 (out, a, b) |
| قيمة التأخير بوحدات الزمن | استنادًا إلى توجيه timescale |
| تؤثر جميع المدخلات في الخرج | يمكن أن يؤدي التغيير في أي مدخل إلى تغيير الخرج، ولكن بعد التأخير فقط |
| غير قابل للتصنيع | تأخيرات البوابات مخصصة للمحاكاة فقط |
التحدي
أضف تأخيرات البوابات الناقصة إلى هذه الوحدة. استخدم تأخيرات مختلفة لكل بوابة.
ما عليك فعله:
- بوابة AND: تأخير بمقدار 5 وحدات زمنية
- بوابة OR: تأخير بمقدار 3 وحدات زمنية
- بوابة NOT: تأخير بمقدار وحدتين زمنيتين
جرّب بنفسك
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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4العوامل الجزء 1
العوامل الحسابيةعامل باقي القسمةعوامل المقارنةمراجعة - الرياضيات البسيطةالعوامل على مستوى البتات7التعيين والبوابات
التعيين المستمرالتعيين باستخدام العواملالعناصر الأساسية المدمجة للبواباتبوابات AND وOR وNOTبوابات XOR وXNORمراجعة - دائرة البوابات المنطقية13التوقيت والتأخيرات
ما هي التأخيراتتأخيرات البواباتتأخيرات الإسنادتوجيه Timescaleتوليد الساعةمراجعة - التحكم في التوقيت5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الربطالمعامل الشرطيمراجعة - تحدي المعاملات11الحلقات التكرارية
حلقة Forحلقة Whileحلقة التكرارحلقة لا نهائيةتعليمة التعطيلمراجعة - أنماط الحلقات التكرارية3نظام الأعداد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ الإدخال والإخراج ثنائية الاتجاهإنشاء مثيل للوحدةربط المنافذ حسب الاسمربط المنافذ حسب الترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة الحساسيةإسناد حاجزإسناد غير حاجزمراجعة - Always مقابل Initial15متحكّم إشارات المرور
تعريف الحالاتمنطق آلة الحالاتتدرّب بنفسك: مترجم Verilog عبر الإنترنت