عبارة If
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 52 من 90.
عبارة if هي كتلة لاتخاذ القرار تقوم بـ executes التعليمات البرمجية فقط عندما يكون condition true. تتحقق عبارة if من condition.
إذا كان condition هو true (1)، فإن الشيفرة الموجودة بداخله executes. وإذا كان condition هو false (0)، فسيتم تخطي الشيفرة.
البنية النحوية:
if (condition) begin
// يُنفَّذ الكود عندما يكون condition هو true
endمثال بسيط
if (reset) begin
count = 0;
endفي هذا المثال:
beginوendيُستخدمان لتحديد بداية ونهاية كتلة التعليمات البرمجية
- إذا كانت قيمة
resetهي 1 (true)، فسيتم تنفيذ التعليمات البرمجية داخلbeginوend→ تصبح قيمةcountهي 0 - إذا كانت قيمة
resetهي 0 (false)، فسيتم تخطي التعليمات البرمجية الموجودة بداخلهما → لا يحدث شيء
يعمل begin وend مثل الأقواس المعقوفة { } في لغات البرمجة الأخرى. وهما يجمعان العبارات معًا لكي تعرف Verilog أيّ تعليمات تنتمي إلى شرط if. وعلى الرغم من وجود عبارة واحدة فقط هنا، فإن استخدام begin وend يظل ممارسة جيدة للحفاظ على الاتساق.
عبارة if داخل كتلة always
always @(posedge clk) begin
if (reset)
count <= 0;
endملاحظة: بالنسبة إلى statement واحدة، فإن begin وend اختياريان. على سبيل المثال، في كتلة always أعلاه، لا يلزم استخدام begin/end بعد if لأنها تحتوي على statement واحدة فقط.
يمكن أن يكون الشرط أي تعبير
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
endقواعد مهمة
| القاعدة | الشرح |
|---|---|
| يمكن أن يكون condition أي تعبير | تُعامل القيم غير الصفرية (والمعروفة) على أنها true، والصفر على أنه false |
يلزم استخدام begin / end للعبارات المتعددة | مثل { } في اللغات الأخرى |
من دون begin/end، تتبع عبارة واحدة فقط | السطر التالي فقط |
التحدي
ما يجب فعله:
- Add عبارة
ifالمفقودة لإنجاز ذلك.
- when تكون
enableمساويةً لـ1، يجب أن تساويoutالقيمةa & b - when تكون
enableمساويةً لـ0، يجب أن تظلoutمساويةً لـ0(لا تتغير)
يهيّئ الكود الابتدائي 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 عبر الإنترنت