جملة التعطيل
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 62 من 90.
تعمل جملة disable على إيقاف تنفيذ كتلة مسماة (مثل حلقة forever، أو كتلة begin-end، أو مهمة). وهي مفيدة للخروج من الحلقات التي قد تستمر في العمل إلى الأبد بخلاف ذلك.
الصيغة:
disable block_name;يجب تسمية الكتلة (block) باسم.
التعطيل باستخدام حلقة Forever
begin : counter // counter يعطي الكتلة الاسم counter.
forever begin
#10 count = count + 1;
if (count == 5) begin
disable counter; // disable counter يوقف تلك الكتلة المسماة بالكامل.
end
end
endحلقة forever التكرارية موجودة داخل كتلة مسماة counter. تعليمة disable counter موضوعة داخل الحلقة. عندما تصل count إلى 5، يتم تنفيذ disable counter وتتوقف كتلة counter بالكامل — مما يوقف حلقة forever التكرارية فوراً أيضاً.
التعطيل في كتلة منفصلة
begin : counter
forever begin
#10 count = count + 1;
end
end
initial begin
#50;
disable counter; // يوقف كتلة العداد من الخارج
endهنا، تعمل حلقة forever بشكل مستمر داخل الكتلة المسماة counter. يتم وضع عبارة disable counter في كتلة initial منفصلة. بعد 50 وحدة زمنية، يتم تنفيذ disable counter وإيقاف كتلة counter — مما يؤدي إلى إنهاء حلقة forever من الخارج.
قواعد هامة
| القاعدة | الشرح |
|---|---|
| يجب تسمية الكتلة (Block) | begin : block_name |
| التعطيل (Disable) يوقف التنفيذ فوراً | يتوقف الكود في تلك اللحظة |
| يمكن استخدامه من أي مكان | من أي كتلة داخل الوحدة البرمجية (module) |
مفيد لإيقاف حلقات forever | وإلا فإنها لن تتوقف أبداً |
التحدي
لقد تم تزويدك بوحدة (module) تحتوي على عداد يعمل باستمرار.
ما يجب القيام به:
أكمل الكتلة الفارغة عن طريق استبدال كل تعليق بالكود الصحيح:
- أضف
#50;للانتظار لمدة 50 وحدة زمنية - أضف
disable counter;لإيقاف كتلة العداد - أضف
$display("Counter stopped");لطباعة الرسالة - أضف
$finish;لإنهاء المحاكاة
ورقة مرجعية
تقوم تعليمة disable بإيقاف تنفيذ كتلة مسماة (على سبيل المثال، حلقة forever). يجب تسمية الكتلة باستخدام begin : block_name.
الإيقاف (Disable) من داخل الكتلة:
begin : counter
forever begin
#10 count = count + 1;
if (count == 5) disable counter;
end
endالإيقاف (Disable) من كتلة منفصلة:
begin : counter
forever begin
#10 count = count + 1;
end
end
initial begin
#50;
disable counter; // يوقف الكتلة المسماة من الخارج
endجرّب بنفسك
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 block)
// الخطوة 3: طباعة "Counter stopped"
// الخطوة 4: إنهاء المحاكاة
end
join
end
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة