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

Initial Block

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

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

ما هي كتلة initial؟

تعمل كتلة initial only once في بداية simulation (time 0). وعندما تنتهي، لا تعمل مرة أخرى.

يُستخدم بشكل رئيسي في بيئات اختبار من أجل:

  • تعيين القيم initial
  • توليد إشارات الاختبار
  • عرض الرسائل
  • بدء simulation

البنية النحوية

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
التنفيذمرة واحدةبشكل مستمر (إلى الأبد)
الاستخدام من أجلبيئات الاختبار، والتهيئةالعتاد (القلابات، والعدادات)
قابل للتوليف؟لا (للمحاكاة فقط)نعم (مع قائمة الحساسية)

ملاحظات مهمة

  • initial blocks غير قابلة للتوليف. لا يمكن تحويلها إلى عتاد
  • استخدم initial فقط في بيئات الاختبار
  • إذا كان testbench يحتوي على ساعة تعمل باستمرار (مثل always #5 clk = ~clk;)، فإن simulation runs إلى الأبد ما لم تستدعِ $finish؛ أما مع وجود initial block فقط، فيتوقف المحاكي من تلقاء نفسه عند عدم بقاء أي أحداث، لكن إضافة $finish تظل ممارسة جيدة
challenge icon

التحدي

أضف block الـ initial المفقود الذي يضبط a على 0، ثم بعد 10 time units يضبط a على 1.

ما يجب فعله:

  1. Add initial begin وend
  2. اضبط a = 0
  3. Wait #10
  4. اضبط a = 1
  5. أضف $finish لإنهاء simulation

جرّب بنفسك

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

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

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

تدرّب بنفسك: مترجم Verilog عبر الإنترنت