عبارة If
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 52 من 90.
عبارة if هي كتلة لاتخاذ القرار تنفّذ التعليمات البرمجية فقط عندما يكون الشرط صحيحًا. تتحقق عبارة if من شرط.
إذا كان الشرط صحيحًا (1)، يُنفَّذ الرمز الموجود بداخله. وإذا كان الشرط خطأ (0)، يتم تخطي الرمز.
الصياغة:
if (condition) begin
// تُنفَّذ التعليمات البرمجية عندما يكون الشرط صحيحًا
endمثال بسيط
if (reset) begin
count = 0;
endفي هذا المثال:
- يُستخدم
beginوendلتحديد بداية كتلة التعليمات البرمجية ونهايتها
- إذا كانت
resetتساوي 1 (صحيح)، فسيُنفَّذ الكود الموجود بينbeginوend→ تصبحcountمساويةً لـ 0 - إذا كانت
resetتساوي 0 (خطأ)، فسيتم تخطي الكود الموجود بداخلها → لن يحدث شيء
تعمل begin وend مثل الأقواس المعقوفة { } في لغات البرمجة الأخرى. فهي تجمع العبارات معًا لكي يعرف Verilog أي تعليمات تنتمي إلى شرط if. على الرغم من وجود عبارة واحدة فقط هنا، فإن استخدام begin وend يظل ممارسة جيدة للحفاظ على الاتساق.
عبارة if داخل كتلة always
always @(posedge clk) begin
if (reset)
count <= 0;
endملاحظة: عند وجود تعليمة واحدة، يكون استخدام begin وend اختياريًا. على سبيل المثال، في الكتلة always أعلاه، لا حاجة إلى begin/end بعد if لأنه لا يوجد فيها سوى تعليمة واحدة.
يمكن أن يكون الشرط أي تعبير
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
endقواعد مهمة
| القاعدة | التفسير |
|---|---|
| يمكن أن يكون الشرط أي تعبير | تُعامل القيم غير الصفرية (والمعروفة) على أنها صحيحة، والصفر على أنه خطأ |
يلزم استخدام begin / end لعدة عبارات | مثل { } في اللغات الأخرى |
من دون begin/end، تتبعها عبارة واحدة فقط | العبارة التالية فقط تنتمي إلى if |
التحدي
ما يجب فعله:
- أضف عبارة
ifالناقصة لجعل هذا يعمل.
- عندما تكون قيمة
enableهي1، يجب أن تساوي قيمةouta & b - عندما تكون قيمة
enableهي0، يجب أن تبقى قيمةout0(من دون تغيير)
يهيّئ الكود الابتدائي out = 0 ويختبر الحالتين.
جرّب بنفسك
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// حالة الاختبار 1: enable = 1
enable = 1;
// TODO: أضف عبارة if (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// حالة الاختبار 2: enable = 0
enable = 0;
out = 0;
// TODO: يجب أن تظل قيمة out تساوي 0
$display("enable=0: out = %d (should be 0)", out);
$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 عبر الإنترنت