جملة If
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 52 من 90.
عبارة if هي كتلة اتخاذ قرار تنفذ كودًا فقط عندما يكون الشروط صحيحًا (true). تتحقق عبارة if من شرط معين.
إذا كانت الـ condition true (1)، فسيتم تنفيذ الكود الموجود بالداخل. وإذا كانت الـ condition false (0)، فسيتم تجاوز الكود.
الصياغة (Syntax):
if (condition) begin
// يتم تنفيذ الكود عندما يكون الشرط صحيحًا
endمثال بسيط
if (reset) begin
count = 0;
endفي هذا المثال:
- تُستخدم
beginوendلتحديد بداية ونهاية كتلة البرمجية
- إذا كان
resetيساوي 1 (صحيح)، فيتم تنفيذ الكود الموجود داخلbeginوend← يصبحcountمساوياً لـ 0 - إذا كان
resetيساوي 0 (خاطئ)، فيتم تخطي الكود الموجود بالداخل ← لا يحدث شيء
تعمل begin و end مثل الأقواس المعقوفة { } في لغات البرمجة الأخرى. حيث تقومان بتجميع الـ statement معًا حتى يعرف Verilog أي كود ينتمي إلى condition الخاص بـ if. على الرغم من وجود statement واحدة فقط هنا، فإن استخدام begin و end يظل ممارسة جيدة للاتساق.
If Statement في Always Block
always @(posedge clk) begin
if (reset)
count <= 0;
endملاحظة: بالنسبة للعبارة الواحدة، فإن 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، تتبعها statement واحدة فقط | السطر التالي فقط |
التحدي
ما يجب فعله:
- أضف تعليمة
ifالمفقودة لجعل هذا يعمل.
- عندما يكون
enableهو1،shouldأن يساويoutالقيمةa & b - عندما يكون
enableهو0،shouldأن يظل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المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة