Menu
Coddy logo textTech

השמה חוסמת

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

ב-Verilog יש שני סוגים של השמות פרוצדורליות: חוסמות (=) ולא חוסמות (<=). בשיעור הזה נתמקד בהשמה חוסמת.

השמה חוסמת משתמשת באופרטור =. היא נקראת "חוסמת" משום שהיא חוסמת את ביצוע הפקודה הבאה עד שההשמה הנוכחית מסתיימת. הקוד רץ שלב אחר שלב, לפי הסדר.

תחביר:

variable = expression;

מתי להשתמש בהשמה חוסמת

משתמשים בהשמה חוסמת (=) עבור לוגיקה קומבינטורית: מעגלים שבהם הפלטים משתנים מיד כשהקלטים משתנים, ללא שעון וללא זיכרון.

דוגמאות ללוגיקה צירופית:

  • שערי AND / OR / XOR
  • מחברים ומחסרים
  • מרבבים
  • מפענחים

דוגמה ב-Verilog:

always @(*) begin
  sum = a + b;      // השמה חוסמת
  carry = a & b;    // השמה חוסמת
end

השמה חוסמת בבלוקים מסוג Always (לוגיקה קומבינטורית)

always @(*) begin
  temp = a & b;    // שלב 1
  out = temp | c;  // שלב 2 (משתמש ב-temp משלב 1)
end

הסדר חשוב. זה בסדר עבור לוגיקה קומבינטורית.

חוסם לעומת לא חוסם

 חוסם (=)לא חוסם (<=)
ביצועאחד אחרי השניכולם בבת אחת
האם השורה הבאה ממתינה?כןלא
שימושיםלוגיקה קומבינטוריתלוגיקה סדרתית (כפכפים)

חשוב: אל תשתמשו בהשמה חוסמת עבור כפכפים

challenge icon

אתגר

הוסף את השמות החסרות מסוג blocking כדי להחליף בין הערכים של x ו־y באמצעות משתנה זמני.

מה לעשות:

  1. הקצה את הערך של x ל־temp (שמור את x ב־temp)
  2. הקצה את הערך של y ל־x (העבר את y אל x)
  3. הקצה את הערך של temp ל־y (העבר את x שנשמר אל y)

נסו בעצמכם

module swap;
  reg x, y;
  reg temp;
  
  initial begin
    x = 1;
    y = 0;
    
    $display("Before swap: x=%d, y=%d", x, y);
    
    // TODO: שלב 1 - הצב את x ב-temp
    
    // TODO: שלב 2 - הצב את y ב-x
    
    // TODO: שלב 3 - הצב את temp ב-y
    
    $display("After swap: x=%d, y=%d", x, y);
    $finish;
  end
endmodule
quiz iconבחנו את עצמכם

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

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

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