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

كتلة Initial

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

تحتوي Verilog على كتلتين إجرائيتين: initial (تعمل مرة واحدة) و always (تعمل بشكل مستمر). لنغطي الآن كتلة initial.

ما هي كتلة Initial؟

تعمل كتلة initial مرة واحدة فقط في بداية المحاكاة (الوقت 0). وعندما تنتهي، لا تعمل مرة أخرى.

يُستخدم بشكل أساسي في منصات الاختبار (testbenches) لـ:

  • ضبط القيم الأولية
  • توليد إشارات الاختبار
  • عرض الرسائل
  • بدء المحاكاة

بناء الجملة

initial begin
  // تُنفذ البيانات مرة واحدة، بالتسلسل
end

مثال أساسي

initial begin
  $display("Simulation started");
  $display("This runs once");
  $finish;
end

المخرجات:

Simulation started
This runs once

استخدام كتلة initial لإشارات الاختبار

initial begin
  a = 0;
  #10 a = 1;
  #10 a = 0;
  #10 $finish;
end

هذا يغير a في الأوقات: 0، و10، و20.

Initial مقابل Always

 initialalways
يعملمرة واحدةبشكل مستمر (للأبد)
يستخدم لـمنصات الاختبار (Testbenches)، التهيئةالعتاد الصلب (القلابات، العدادات)
قابل للتصنيع؟لا (للمحاكاة فقط)نعم (مع قائمة الحساسية)

ملاحظات هامة

  • كتل initial غير قابلة للتصنيع (not synthesizable) — لا يمكن تحويلها إلى أجهزة (hardware)
  • استخدم initial فقط في بيئات الاختبار (testbenches)
  • بدون $finish، ستستمر المحاكاة في العمل للأبد (لا توجد ساعة لإيقافها)
challenge icon

التحدي

أضف كتلة initial المفقودة التي تضبط a على 0، ثم بعد 10 وحدات زمنية تضبط a على 1.

ماذا تفعل:

  1. أضف initial begin و end
  2. اضبط a = 0
  3. انتظر #10
  4. اضبط a = 1
  5. أضف $finish لإنهاء المحاكاة

ورقة مرجعية

تعمل كتلة initial مرة واحدة في وقت المحاكاة 0. تُستخدم فقط في منصات الاختبار (testbenches) (غير قابلة للتوليف).

initial begin
  a = 0;       // يتم الضبط في الوقت 0
  #10 a = 1;   // يتم الضبط في الوقت 10
  #10 a = 0;   // يتم الضبط في الوقت 20
  $finish;     // إنهاء المحاكاة
end

بدون $finish، تستمر المحاكاة للأبد.

initialalways
التشغيلمرة واحدةبشكل مستمر
الاستخدام لـمنصات الاختبار (Testbenches)العتاد (Hardware)
قابل للتوليف؟لانعم

جرّب بنفسك

module test;
  reg a;
  
  // TODO: أضف كتلة initial هنا
  // اجعل a = 0
  // انتظر #10
  // اجعل a = 1
  // أضف $finish; لإنهاء المحاكاة
  
endmodule
quiz iconاختبر نفسك

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

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