Menu
Coddy logo textTech

הצהרת case

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

הפקודה case מאפשרת לך לבחור בין פעולות רבות ושונות בהתאם לערך של ביטוי יחיד. זוהי חלופה נקייה יותר לשימוש בכמה פקודות if-else כשמשווים את אותו משתנה לערכים רבים ושונים.

הפקודה case משווה ביטוי לרשימת ערכים ומבצעת את הבלוק התואם. היא דומה להסתעפות מרובת אפשרויות.

תחביר:

case (expression)
  value1: statement1;
  value2: statement2;
  default: default_statement;
endcase

מומלץ מאוד לכלול תמיד <strong>default</strong> במשפט <strong>case</strong> קומבינטורי. בלי default, אם sel מקבל ערך בלתי צפוי (כמו X או Z), לא תהיה השמה ל־out, והוא יינעל על הערך הקודם שלו. כך נוצר זיכרון לא מכוון (Latch) במקום לוגיקה קומבינטורית טהורה.

דוגמה פשוטה

case (sel)
  2'b00: out = a;
  2'b01: out = b;
  2'b10: out = c;
  default: out = 0;
endcase

אם sel הוא 00, out מקבל את a. אם sel הוא 01, out מקבל את b. אם sel הוא 10, out מקבל את c.

אחרת, out מקבל 0.

כמה משפטים בכל מקרה

השתמשו ב-begin וב-end עבור כמה משפטים:

case (state)
  2'b00: begin
    out = a;
    flag = 1;
  end
  2'b01: begin
    out = b;
    flag = 0;
  end
  default: out = 0;
endcase

כללים חשובים

כללהסבר
ערכי case צריכים להיות ייחודייםכשיש כפילויות, רק הענף התואם הראשון מתבצע
הערכים חייבים להתאים לרוחב הביטים2'b01 ולא 1'b1
default הוא אופציונלי, אך מומלץתופס ערכים שאין להם מיפוי
ללא default, ערכים שאין להם מיפוי גורמים לתפסיםבלוגיקה קומבינטורית

Case לעומת If-Else

 CaseIf-Else
מתאים במיוחד ל־משתנה אחד, ערכים רביםתנאים מורכבים
קריאותברור מאודעלול להיות מסורבל
דוגמהמרבב, מפענחמשווה, בדיקות טווח
challenge icon

אתגר

השלימו את הצהרת case

מה לעשות:

הוסיפו את הצהרת case החסרה כדי שהמרבב הזה יפעל.

איך זה עובד:

  • כאשר select = 2'b00, result = in0
  • כאשר select = 2'b01, result = in1
  • כאשר select = 2'b10, result = in2
  • כאשר select = 2'b11, result = in3

נסו בעצמכם

module mux4 (
  input [1:0] select,
  input in0, in1, in2, in3,
  output reg result
);
  
  always @(*) begin
    // TODO: הוסף משפט case
    // select=00 -> result = in0
    // select=01 -> result = in1
    // select=10 -> result = in2
    // select=11 -> result = in3
    // default -> result = 0
  end
  
endmodule
quiz iconבחנו את עצמכם

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

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

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