Menu
Coddy logo textTech

משפט תנאי

חלק מהיחידה יסודות במסלול ה-Verilog של Coddy. שיעור 52 מתוך 90.

משפט if הוא בלוק לקבלת החלטות שמבצע קוד רק כאשר תנאי מתקיים. משפט if בודק תנאי.

אם התנאי הוא נכון (1), הקוד שבתוכו מתבצע. אם התנאי הוא לא נכון (0), הקוד מדולג.

תחביר:

if (condition) begin
  // הקוד מתבצע כאשר condition הוא true
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, רק פקודה אחת מופיעה אחריהםרק השורה הבאה
challenge icon

אתגר

מה לעשות:

  1. הוסף את משפט ה־if החסר כדי שזה יעבוד.
  • כאשר enable הוא 1, הערך של out צריך להיות שווה ל־a & b
  • כאשר 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 &amp; 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
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: קומפיילר Verilog אונליין