If Statement
جزء من قسم الأساسيات في رحلة 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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logicتدرّب بنفسك: مترجم Verilog عبر الإنترنت