Menu
CoddyTech

משפט תנאי

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

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

אם התנאי הוא true (1), הקוד שבתוכו מתבצע. אם התנאי הוא false (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, רק פקודה אחת מופיעה אחריהםרק הפקודה הבאה שייכת ל-if
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 & 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 אונליין