Menu
Coddy logo textTech

השמה לא חוסמת

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

בשיעור הקודם עסקנו בהשמה חוסמת (=), שמתבצעת שלב אחר שלב. עכשיו נעסוק בהשמה לא חוסמת (<=), שמתבצעת בבת אחת, במקביל.

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

תחביר:

variable <= expression;

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

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

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

  • כפכפים
  • אוגרים
  • מונים
  • מכונות מצבים
  • אוגרי הזזה

דוגמה ב-Verilog:

initial begin
  a <= 5;      // תוזמן, אך טרם בוצע
  b <= a + 2;  // תוזמן, משתמש בערך הישן של a
  c <= b * 3;  // תוזמן, משתמש בערך הישן של b
end

כל שלוש ההשמות מתבצעות באותו הזמן באמצעות הערכים הישנים. בסוף שלב הזמן, כל העדכונים מתבצעים יחד.

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

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

always @(posedge clk) begin
  q <= d;           // q מקבל את d בקצה השעון
  count <= count + 1; // count גדל ב-1 בקצה השעון
end

שתי ההשמות מתבצעות באותו הזמן, תוך שימוש בערכים שהיו לפני חזית השעון.

סיכום

כללהסבר
השתמשו ב־<= ללוגיקה סדרתיתalways @(posedge clk)
השתמשו ב־= ללוגיקה קומבינטוריתalways @(*)
השמה לא־חוסמת מתבצעת במקבילכל ההשמות מתבצעות בו־זמנית
הערכים מתעדכנים בסוף צעד הזמןלא באופן מיידי
challenge icon

אתגר

השלימו את ההשמה הלא־חוסמת

הוסיפו את ההשמות הלא־חוסמות החסרות כדי שאוגר ההזזה בן 2 הסיביות הזה יפעל.

איך זה עובד:

  • בכל חזית שעון, q1 מקבל את d
  • q2 מקבל את הערך הישן של q1

מה לעשות:

  1. השימו את d ב-q1 (השמה לא־חוסמת)
  2. השימו את q1 ב-q2 (השמה לא־חוסמת)

נסו בעצמכם

module shift_register (
  input clk,
  input reset,
  input d,
  output reg q1,
  output reg q2
);
  
  always @(posedge clk or posedge reset) begin
    if (reset) begin
      q1 <= 0;
      q2 <= 0;
    end else begin
      // TODO: הוסף לוגיקת הזזה
      // שלב 1: השם את d ב־q1 (בהשמה לא חוסמת)
      // שלב 2: השם את q1 ב־q2 (בהשמה לא חוסמת)
    end
  end
endmodule
quiz iconבחנו את עצמכם

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

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

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