كتلة 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
initial | always | |
|---|---|---|
| يعمل | مرة واحدة | بشكل مستمر (للأبد) |
| يستخدم لـ | منصات الاختبار (Testbenches)، التهيئة | العتاد الصلب (القلابات، العدادات) |
| قابل للتصنيع؟ | لا (للمحاكاة فقط) | نعم (مع قائمة الحساسية) |
ملاحظات هامة
- كتل
initialغير قابلة للتصنيع (not synthesizable) — لا يمكن تحويلها إلى أجهزة (hardware) - استخدم
initialفقط في بيئات الاختبار (testbenches) - بدون
$finish، ستستمر المحاكاة في العمل للأبد (لا توجد ساعة لإيقافها)
التحدي
أضف كتلة initial المفقودة التي تضبط a على 0، ثم بعد 10 وحدات زمنية تضبط a على 1.
ماذا تفعل:
- أضف
initial beginوend - اضبط
a = 0 - انتظر
#10 - اضبط
a = 1 - أضف $finish لإنهاء المحاكاة
ورقة مرجعية
تعمل كتلة initial مرة واحدة في وقت المحاكاة 0. تُستخدم فقط في منصات الاختبار (testbenches) (غير قابلة للتوليف).
initial begin
a = 0; // يتم الضبط في الوقت 0
#10 a = 1; // يتم الضبط في الوقت 10
#10 a = 0; // يتم الضبط في الوقت 20
$finish; // إنهاء المحاكاة
endبدون $finish، تستمر المحاكاة للأبد.
initial | always | |
|---|---|---|
| التشغيل | مرة واحدة | بشكل مستمر |
| الاستخدام لـ | منصات الاختبار (Testbenches) | العتاد (Hardware) |
| قابل للتوليف؟ | لا | نعم |
جرّب بنفسك
module test;
reg a;
// TODO: أضف كتلة initial هنا
// اجعل a = 0
// انتظر #10
// اجعل a = 1
// أضف $finish; لإنهاء المحاكاة
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة التحسسالإسناد الحاجبالإسناد غير الحاجبمراجعة - Always مقابل Initial