حلقة For
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 58 من 90.
تتيح لك الحلقات في Verilog تنفيذ كتلة من التعليمات البرمجية عدة مرات. وهي مفيدة بشكل خاص في منصات الاختبار لتوليد أنماط اختبار متكررة، وتهيئة الذاكرة، والتكرار على المصفوفات. وعلى عكس أوصاف العتاد التي تعمل بالتوازي، تُنفَّذ الحلقات بالتتابع، مما يجعلها مثالية للمحاكاة والاختبار.
الحلقة الأكثر استخدامًا هي for حلقة، وهي تكرر التنفيذ عددًا محددًا من المرات. تنفذ حلقة for كتلةً من التعليمات البرمجية مرارًا، مع متغير حلقة تتغير قيمته في كل تكرار. أنت تحدد بالضبط عدد مرات تشغيلها.
الصياغة:
for (initialization; condition; increment) begin
// التعليمات البرمجية المراد تكرارها
end| الجزء | ما الذي يفعله | مثال |
|---|---|---|
initialization | يحدد قيمة البداية | i = 0 |
condition | متى يتوقف | i < 10 |
increment | يتغير في كل تكرار | i = i + 1 |
مثال بسيط
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
endالمخرجات:
i = 0
i = 1
i = 2
i = 3
i = 4تتكرر الحلقة 5 مرات (i = 0, 1, 2, 3, 4).
حلقة for في بيئات الاختبار
تُستخدم حلقات for عادةً لاختبار جميع تركيبات المدخلات:
integer test_value;
for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
$display("test_value = %d", test_value);
endيختبر هذا جميع القيم الـ16 الممكنة لإشارة ذات 4 بتات.
حلقة for مع المصفوفات
reg [7:0] memory [0:9];
integer i;
initial begin
for (i = 0; i < 10; i = i + 1) begin
memory[i] = i * 8;
end
endيهيّئ هذا 10 مواقع في الذاكرة.
قواعد مهمة
| القاعدة | الشرح |
|---|---|
يجب أن يكون متغير الحلقة integer أو reg | لا يمكن أن يكون wire |
استخدم begin/end لعدة عبارات | هذا مطلوب لأكثر من سطر واحد |
| تجنب الحلقات اللانهائية | تأكد من أن الشرط يصبح خطأ في نهاية المطاف |
| استخدم حدودًا ثابتة في الشيفرة القابلة للتوليف | تقوم عملية التوليف بفك الحلقة إلى نسخة واحدة من المنطق لكل تكرار |
التحدي
ما يجب فعله:
أضف حلقة for الناقصة لطباعة الأرقام من 0 إلى 3.
جرّب بنفسك
module for_challenge;
integer i;
initial begin
$display("Printing 0 to 3:");
// TODO: أضف حلقة for
// هيّئ i = 0
// كرّر ما دام i < 4
// زِد i = i + 1
// داخل الحلقة، اطبع باستخدام: $display("i = %d", i);
$finish;
end
endmoduleيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4العوامل الجزء 1
العوامل الحسابيةعامل باقي القسمةعوامل المقارنةمراجعة - الرياضيات البسيطةالعوامل على مستوى البتات7التعيين والبوابات
التعيين المستمرالتعيين باستخدام العواملالعناصر الأساسية المدمجة للبواباتبوابات AND وOR وNOTبوابات XOR وXNORمراجعة - دائرة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الربطالمعامل الشرطيمراجعة - تحدي المعاملات11الحلقات التكرارية
حلقة Forحلقة Whileحلقة التكرارحلقة لا نهائيةتعليمة التعطيلمراجعة - أنماط الحلقات التكرارية3نظام الأعداد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ الإدخال والإخراج ثنائية الاتجاهإنشاء مثيل للوحدةربط المنافذ حسب الاسمربط المنافذ حسب الترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة الحساسيةإسناد حاجزإسناد غير حاجزمراجعة - Always مقابل Initial15متحكّم إشارات المرور
تعريف الحالاتمنطق آلة الحالاتتدرّب بنفسك: مترجم Verilog عبر الإنترنت