جملة التعطيل
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 62 من 90.
تُوقف عبارة disable تنفيذ كتلة مسماة (مثل حلقة forever، أو كتلة begin-end، أو task). وهي مفيدة للخروج من الحلقات التي ستستمر في العمل إلى الأبد بغير ذلك.
الصياغة (Syntax):
disable block_name;يجب أن تكون الكتلة المبرمجة معنونة باسم (labeled with a name).
Disable مع حلقة Forever
initial begin : counter // counter يعطي الكتلة الاسم counter.
forever begin
#10 count = count + 1;
if (count == 5) begin
disable counter; // disable counter يوقف تلك الكتلة المسماة بأكملها.
end
end
endحلقة forever توجد داخل block مسمى counter. تم وضع عبارة disable counter داخل الحلقة. عندما تصل قيمة count إلى 5، يتم تنفيذ disable counter ويوقف الكتلة counter بالكامل — مما يوقف حلقة forever فوراً أيضاً.
Disable في block منفصل
initial begin : counter
forever begin
#10 count = count + 1;
end
end
initial begin
#50;
disable counter; // يوقف كتلة counter من الخارج
endهنا، تعمل حلقة forever بشكل مستمر داخل الكتلة المسمّاة counter. يتم وضع العبارة disable counter في كتلة initial منفصلة. بعد 50 وحدة time، يتم تنفيذ disable counter وإيقاف كتلة counter — مما ينهي حلقة forever من الخارِج.
قواعد مهمة
| القاعدة | الشرح |
|---|---|
| يجب تسمية الـ Block | begin : block_name |
| الـ Disable يوقف التنفيذ فوراً | يتوقف الكود في تلك اللحظة |
| يمكن استخدامه من أي مكان | من أي block داخل الـ module |
مفيد لإيقاف حلقات forever | وإلا فلن تتوقف أبداً |
التحدي
أنت مخول بالعمل على وحدة تحتوي على عداد يعمل بشكل مستمر.
ما يجب عليك فعله:
أكمل الكتلة الفارغة عن طريق استبدال كل تعليق بالكود الصحيح:
- أضف
#50;للانتظار 50 وحدة زمنية - أضف
disable counter;لإيقاف كتلة العداد - أضف
$display("Counter stopped");لطباعة الرسالة - أضف
$finish;لإنهاء المحاكاة
جرّب بنفسك
module disable_challenge;
integer count;
initial begin
count = 0;
fork
begin : counter
forever begin
#10 count = count + 1;
$display("count = %d", count);
end
end
begin
// الخطوة 1: انتظر 50 وحدة زمنية
// الخطوة 2: عطّل كتلة counter
// الخطوة 3: اطبع "Counter stopped"
// الخطوة 4: أنهِ المحاكاة
end
join
end
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة